mirror of
https://github.com/hunvreus/basecoat.git
synced 2026-11-11 04:38:18 +00:00
Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ad4f6a43b | ||
|
|
6953a4adbe | ||
|
|
f49eaa8513 | ||
|
|
fcea07fc3d | ||
|
|
aa09ddb271 |
@@ -3,32 +3,53 @@ name: Announce release on Discord
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: Release tag to announce
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions: {}
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
announce:
|
||||
if: ${{ !github.event.release.prerelease }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Send Discord announcement
|
||||
env:
|
||||
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||
RELEASE_NAME: ${{ github.event.release.name }}
|
||||
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
||||
RELEASE_URL: ${{ github.event.release.html_url }}
|
||||
RELEASE_BODY: ${{ github.event.release.body }}
|
||||
RELEASE_TAG_INPUT: ${{ inputs.tag }}
|
||||
REPO: ${{ github.repository }}
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
test -n "$DISCORD_WEBHOOK_URL"
|
||||
|
||||
if [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ]; then
|
||||
test -n "$RELEASE_TAG_INPUT"
|
||||
curl --fail-with-body \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer $GH_TOKEN" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"$GITHUB_API_URL/repos/$REPO/releases/tags/$RELEASE_TAG_INPUT" \
|
||||
> release.json
|
||||
else
|
||||
jq '.release' "$GITHUB_EVENT_PATH" > release.json
|
||||
fi
|
||||
|
||||
if [ "$(jq -r '.prerelease' release.json)" = "true" ]; then
|
||||
echo "Skipping prerelease."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
jq -n \
|
||||
--arg repo "$REPO" \
|
||||
--arg name "$RELEASE_NAME" \
|
||||
--arg tag "$RELEASE_TAG" \
|
||||
--arg url "$RELEASE_URL" \
|
||||
--arg body "$RELEASE_BODY" \
|
||||
--arg name "$(jq -r '.name // ""' release.json)" \
|
||||
--arg tag "$(jq -r '.tag_name' release.json)" \
|
||||
--arg url "$(jq -r '.html_url' release.json)" \
|
||||
--arg body "$(jq -r '.body // ""' release.json)" \
|
||||
'($body | if length > 1500 then .[:1500] + "...\n\n[Read more](" + $url + ")" else . end) as $description |
|
||||
{
|
||||
username: "Basecoat Releases",
|
||||
|
||||
@@ -2,6 +2,16 @@
|
||||
|
||||
## Unreleased
|
||||
|
||||
## [1.0.2] - 2026-07-06
|
||||
|
||||
### Added
|
||||
|
||||
- Added `data-size="sm"` support to Alert Dialog for the compact upstream size.
|
||||
|
||||
### Changed
|
||||
|
||||
- Removed global font smoothing from Basecoat's package CSS so `antialiased` remains an application-level choice.
|
||||
|
||||
## [1.0.1] - 2026-06-28
|
||||
|
||||
### Added
|
||||
|
||||
+3
-4
@@ -1,13 +1,12 @@
|
||||
# Contributing to Basecoat
|
||||
|
||||
- Support development by sponsoring the author: https://github.com/sponsors/hunvreus
|
||||
- Submit pull requests (PRs) against the `development` branch, not `main`.
|
||||
- Submit pull requests (PRs) against the `main` branch.
|
||||
- For branches, we have:
|
||||
- `main` is our production and default branch. This is what we deploy to https://basecoatui.com and publish to https://www.npmjs.com/package/basecoat-css.
|
||||
- `development` is for staging. We will deploy it soon at https://dev.basecoatui.com.
|
||||
- New features are worked in `feature/name-of-the-feature` branches.
|
||||
- Issues are addressed in `issue/123-main-isse` branches.
|
||||
- When ready, we PR against `development`, test it and then finally merge to `main`.
|
||||
- Issues are addressed in `issue/123-main-issue` branches.
|
||||
- When ready, open a PR against `main`.
|
||||
- Keep changes focused: one feature or fix per PR.
|
||||
- Test locally before submitting.
|
||||
- Follow existing code style.
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "basecoat-css",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "basecoat-css",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@tailwindcss/cli": "^4.1.17",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "basecoat-css",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "Tailwind CSS for Basecoat components",
|
||||
"author": {
|
||||
"name": "hunvreus",
|
||||
|
||||
@@ -31,6 +31,7 @@ export default defineConfig({
|
||||
style: 'vega',
|
||||
css: false,
|
||||
bodyAttrs: {
|
||||
class: 'antialiased',
|
||||
'hx-boost': 'true',
|
||||
'hx-target': '#content',
|
||||
'hx-select': '#content',
|
||||
|
||||
Generated
+7
-6
@@ -10,7 +10,7 @@
|
||||
"htmx.org": "^2.0.10",
|
||||
"lucide-static": "^1.17.0",
|
||||
"nunjucks": "^3.2.4",
|
||||
"reallysimpledocs": "^1.0.6"
|
||||
"reallysimpledocs": "^1.0.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"astro": "^6.4.6",
|
||||
@@ -19,7 +19,7 @@
|
||||
},
|
||||
"..": {
|
||||
"name": "basecoat-css",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.1",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@tailwindcss/cli": "^4.1.17",
|
||||
@@ -5531,9 +5531,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/reallysimpledocs": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/reallysimpledocs/-/reallysimpledocs-1.0.6.tgz",
|
||||
"integrity": "sha512-1LzneOaza6TAATet7rAuBDlLkXypgJHamTpwTFltKXjm0MYaq7cJfkShWBBi2CvoW/x/Jv3RQQX7nP9SsHaiFQ==",
|
||||
"version": "1.0.12",
|
||||
"resolved": "https://registry.npmjs.org/reallysimpledocs/-/reallysimpledocs-1.0.12.tgz",
|
||||
"integrity": "sha512-nZIvrHdDcr2TImpT3TlhjLb3420xikeyXUqOuuvfosuEPgbfTYvnfg9MpgLvOciQLCjsuSGdpQzNrdW5MTVurQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@astrojs/markdown-remark": "^7.2.0",
|
||||
"@astrojs/mdx": "^6.0.3",
|
||||
@@ -5549,7 +5550,7 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"astro": "^6.4.6",
|
||||
"basecoat-css": "^1.0.0-beta.6",
|
||||
"basecoat-css": "^1.0.1",
|
||||
"tailwindcss": ">=4.1.17 <5"
|
||||
}
|
||||
},
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
"htmx.org": "^2.0.10",
|
||||
"lucide-static": "^1.17.0",
|
||||
"nunjucks": "^3.2.4",
|
||||
"reallysimpledocs": "^1.0.6"
|
||||
"reallysimpledocs": "^1.0.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"astro": "^6.4.6",
|
||||
|
||||
@@ -74,7 +74,7 @@ Alert Dialog uses a native `<dialog class="alert-dialog">` element. Omit the clo
|
||||
<dd>Trigger button. Basecoat uses the native <code>HTMLDialogElement.showModal()</code> method.</dd>
|
||||
<dt><code><dialog class="alert-dialog" id="{ DIALOG_ID }"></code></dt>
|
||||
<dd>
|
||||
Native modal dialog. Add <code>aria-labelledby</code> and <code>aria-describedby</code> when title and description are present.
|
||||
Native modal dialog. Add <code>aria-labelledby</code> and <code>aria-describedby</code> when title and description are present. Use <code>data-size="sm"</code> for the compact upstream size.
|
||||
<dl>
|
||||
<dt><code><div></code></dt>
|
||||
<dd>
|
||||
@@ -164,6 +164,27 @@ Use a destructive action button when the alert dialog confirms a destructive ope
|
||||
</dialog>
|
||||
</Preview>
|
||||
|
||||
### Small
|
||||
|
||||
Use `data-size="sm"` for a compact alert dialog. The small size keeps media, title, and description stacked and centers the action buttons in a two-column footer.
|
||||
|
||||
<Preview>
|
||||
<button type="button" onclick="document.getElementById('alert-dialog-small').showModal()" class="btn" data-variant="outline">Invite Members</button>
|
||||
<dialog id="alert-dialog-small" class="alert-dialog" data-size="sm" aria-labelledby="alert-dialog-small-title" aria-describedby="alert-dialog-small-description">
|
||||
<div>
|
||||
<header>
|
||||
<figure><svg class="lucide lucide-users" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" /><path d="M16 3.128a4 4 0 0 1 0 7.744" /><path d="M22 21v-2a4 4 0 0 0-3-3.87" /><circle cx="9" cy="7" r="4" /></svg></figure>
|
||||
<h2 id="alert-dialog-small-title">Invite team members?</h2>
|
||||
<p id="alert-dialog-small-description">Send an invitation link to your selected teammates.</p>
|
||||
</header>
|
||||
<footer>
|
||||
<button class="btn" data-variant="outline" onclick="this.closest('dialog').close()">Cancel</button>
|
||||
<button class="btn" onclick="this.closest('dialog').close()">Invite</button>
|
||||
</footer>
|
||||
</div>
|
||||
</dialog>
|
||||
</Preview>
|
||||
|
||||
### RTL
|
||||
|
||||
Alert Dialog supports document direction. Set `dir="rtl"` on the dialog or a parent element.
|
||||
|
||||
@@ -131,6 +131,6 @@
|
||||
@apply scroll-smooth;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground overscroll-none antialiased;
|
||||
@apply bg-background text-foreground overscroll-none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,5 +77,25 @@
|
||||
> * > footer {
|
||||
@apply flex flex-col-reverse sm:flex-row sm:justify-end;
|
||||
}
|
||||
|
||||
&:is([data-size='sm']) > * > header,
|
||||
> [data-size='sm'] > header {
|
||||
@apply sm:place-items-center sm:text-center;
|
||||
}
|
||||
|
||||
&:is([data-size='sm']) > * > header:has(> figure),
|
||||
> [data-size='sm'] > header:has(> figure) {
|
||||
@apply sm:grid-rows-[auto_auto_1fr];
|
||||
}
|
||||
|
||||
&:is([data-size='sm']) > * > header:has(> figure) > :is(h2, p),
|
||||
> [data-size='sm'] > header:has(> figure) > :is(h2, p) {
|
||||
@apply sm:col-start-auto;
|
||||
}
|
||||
|
||||
&:is([data-size='sm']) > * > footer,
|
||||
> [data-size='sm'] > footer {
|
||||
@apply grid grid-cols-2 sm:grid sm:grid-cols-2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -540,6 +540,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 max-w-xs gap-6 rounded-4xl p-6 shadow-xl ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 max-w-[calc(100%-2rem)] gap-6 rounded-4xl p-6 text-sm shadow-xl ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
@@ -520,6 +520,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-xs gap-4 rounded-none p-4 ring-1 duration-100 sm:max-w-sm;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-[calc(100%-2rem)] gap-4 rounded-none p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm;
|
||||
}
|
||||
|
||||
@@ -532,6 +532,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/5 max-w-xs gap-6 rounded-4xl p-6 ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/5 max-w-[calc(100%-2rem)] gap-6 rounded-4xl p-6 text-sm ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
@@ -536,6 +536,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-xs gap-3 rounded-xl p-4 ring-1 duration-100 sm:max-w-sm;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply max-w-64 sm:max-w-64;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm;
|
||||
}
|
||||
|
||||
@@ -528,6 +528,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-xs gap-4 rounded-xl p-4 ring-1 duration-100 sm:max-w-sm;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 sm:max-w-sm;
|
||||
}
|
||||
|
||||
@@ -540,6 +540,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 max-w-xs gap-6 rounded-3xl p-6 shadow-xl ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/5 dark:ring-foreground/10 max-w-[calc(100%-2rem)] gap-6 rounded-3xl p-6 text-sm shadow-xl ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
@@ -544,6 +544,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-xs gap-6 rounded-none p-6 shadow-md ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-[calc(100%-2rem)] gap-6 rounded-none p-6 text-sm shadow-md ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
@@ -528,6 +528,11 @@
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-xs gap-6 rounded-xl p-6 ring-1 duration-100 sm:max-w-lg;
|
||||
}
|
||||
|
||||
.alert-dialog:is([data-size='sm']) > *,
|
||||
.alert-dialog > [data-size='sm'] {
|
||||
@apply sm:max-w-xs;
|
||||
}
|
||||
|
||||
.dialog > * {
|
||||
@apply bg-popover text-popover-foreground ring-foreground/10 max-w-[calc(100%-2rem)] gap-6 rounded-xl p-6 text-sm ring-1 duration-100 sm:max-w-md;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user