@fiestaboard/ui 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/components/board/board-display.d.ts +35 -0
- package/dist/components/board/board-display.js +514 -0
- package/dist/components/board/board-display.js.map +1 -0
- package/dist/components/board/board-teaser.d.ts +10 -0
- package/dist/components/board/board-teaser.js +110 -0
- package/dist/components/board/board-teaser.js.map +1 -0
- package/dist/components/board/scaled-board-display.d.ts +37 -0
- package/dist/components/board/scaled-board-display.js +118 -0
- package/dist/components/board/scaled-board-display.js.map +1 -0
- package/dist/components/board/static-board-display.d.ts +17 -0
- package/dist/components/board/static-board-display.js +140 -0
- package/dist/components/board/static-board-display.js.map +1 -0
- package/dist/components/chrome/board-icon.d.ts +11 -0
- package/dist/components/chrome/board-icon.js +31 -0
- package/dist/components/chrome/board-icon.js.map +1 -0
- package/dist/components/chrome/board-selector.d.ts +30 -0
- package/dist/components/chrome/board-selector.js +37 -0
- package/dist/components/chrome/board-selector.js.map +1 -0
- package/dist/components/chrome/fiesta-icon.d.ts +28 -0
- package/dist/components/chrome/fiesta-icon.js +129 -0
- package/dist/components/chrome/fiesta-icon.js.map +1 -0
- package/dist/components/chrome/fiesta-logo.d.ts +6 -0
- package/dist/components/chrome/fiesta-logo.js +20 -0
- package/dist/components/chrome/fiesta-logo.js.map +1 -0
- package/dist/components/chrome/language-selector.d.ts +21 -0
- package/dist/components/chrome/language-selector.js +29 -0
- package/dist/components/chrome/language-selector.js.map +1 -0
- package/dist/components/chrome/main-content.d.ts +28 -0
- package/dist/components/chrome/main-content.js +33 -0
- package/dist/components/chrome/main-content.js.map +1 -0
- package/dist/components/chrome/page-header.d.ts +23 -0
- package/dist/components/chrome/page-header.js +69 -0
- package/dist/components/chrome/page-header.js.map +1 -0
- package/dist/components/chrome/page-layout.d.ts +10 -0
- package/dist/components/chrome/page-layout.js +17 -0
- package/dist/components/chrome/page-layout.js.map +1 -0
- package/dist/components/chrome/page-toolbar.d.ts +7 -0
- package/dist/components/chrome/page-toolbar.js +21 -0
- package/dist/components/chrome/page-toolbar.js.map +1 -0
- package/dist/components/chrome/sidebar.d.ts +83 -0
- package/dist/components/chrome/sidebar.js +318 -0
- package/dist/components/chrome/sidebar.js.map +1 -0
- package/dist/components/chrome/skip-to-content.d.ts +8 -0
- package/dist/components/chrome/skip-to-content.js +15 -0
- package/dist/components/chrome/skip-to-content.js.map +1 -0
- package/dist/components/chrome/theme-toggle.d.ts +22 -0
- package/dist/components/chrome/theme-toggle.js +28 -0
- package/dist/components/chrome/theme-toggle.js.map +1 -0
- package/dist/components/seasons/aurora-canvas.d.ts +22 -0
- package/dist/components/seasons/aurora-canvas.js +88 -0
- package/dist/components/seasons/aurora-canvas.js.map +1 -0
- package/dist/components/seasons/sidebar-aurora-horizontal.d.ts +3 -0
- package/dist/components/seasons/sidebar-aurora-horizontal.js +47 -0
- package/dist/components/seasons/sidebar-aurora-horizontal.js.map +1 -0
- package/dist/components/seasons/sidebar-aurora.d.ts +3 -0
- package/dist/components/seasons/sidebar-aurora.js +57 -0
- package/dist/components/seasons/sidebar-aurora.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +16 -0
- package/dist/components/ui/accordion.js +55 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +16 -0
- package/dist/components/ui/alert-dialog.js +78 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.js +41 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/aurora.d.ts +9 -0
- package/dist/components/ui/aurora.js +105 -0
- package/dist/components/ui/aurora.js.map +1 -0
- package/dist/components/ui/badge.d.ts +9 -0
- package/dist/components/ui/badge.js +35 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/box.d.ts +20 -0
- package/dist/components/ui/box.js +14 -0
- package/dist/components/ui/box.js.map +1 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.js +52 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +11 -0
- package/dist/components/ui/card.js +57 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +4 -0
- package/dist/components/ui/checkbox.js +16 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/code.d.ts +8 -0
- package/dist/components/ui/code.js +15 -0
- package/dist/components/ui/code.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +8 -0
- package/dist/components/ui/collapsible.js +28 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dialog.js +77 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +32 -0
- package/dist/components/ui/dropdown-menu.js +129 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/empty-state.d.ts +23 -0
- package/dist/components/ui/empty-state.js +49 -0
- package/dist/components/ui/empty-state.js.map +1 -0
- package/dist/components/ui/flex.d.ts +24 -0
- package/dist/components/ui/flex.js +61 -0
- package/dist/components/ui/flex.js.map +1 -0
- package/dist/components/ui/grid.d.ts +20 -0
- package/dist/components/ui/grid.js +77 -0
- package/dist/components/ui/grid.js.map +1 -0
- package/dist/components/ui/heading.d.ts +18 -0
- package/dist/components/ui/heading.js +26 -0
- package/dist/components/ui/heading.js.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.js +16 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.js +15 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list.d.ts +25 -0
- package/dist/components/ui/list.js +46 -0
- package/dist/components/ui/list.js.map +1 -0
- package/dist/components/ui/react-bits/decrypted-text.d.ts +14 -0
- package/dist/components/ui/react-bits/decrypted-text.js +88 -0
- package/dist/components/ui/react-bits/decrypted-text.js.map +1 -0
- package/dist/components/ui/react-bits/fade-content.d.ts +11 -0
- package/dist/components/ui/react-bits/fade-content.js +48 -0
- package/dist/components/ui/react-bits/fade-content.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +5 -0
- package/dist/components/ui/scroll-area.js +39 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +26 -0
- package/dist/components/ui/select.js +132 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +29 -0
- package/dist/components/ui/sheet.js +114 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +2 -0
- package/dist/components/ui/skeleton.js +14 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +9 -0
- package/dist/components/ui/slider.js +39 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/stack.d.ts +16 -0
- package/dist/components/ui/stack.js +44 -0
- package/dist/components/ui/stack.js.map +1 -0
- package/dist/components/ui/switch.d.ts +4 -0
- package/dist/components/ui/switch.js +24 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.d.ts +13 -0
- package/dist/components/ui/table.js +54 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/tabs.js +37 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/text-link.d.ts +9 -0
- package/dist/components/ui/text-link.js +15 -0
- package/dist/components/ui/text-link.js.map +1 -0
- package/dist/components/ui/text.d.ts +22 -0
- package/dist/components/ui/text.js +48 -0
- package/dist/components/ui/text.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/textarea.js +15 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +16 -0
- package/dist/components/ui/tooltip.js +38 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/fonts.css +16 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +59 -0
- package/dist/lib/board-characters.d.ts +55 -0
- package/dist/lib/board-characters.js +151 -0
- package/dist/lib/board-characters.js.map +1 -0
- package/dist/lib/board-colors.d.ts +48 -0
- package/dist/lib/board-colors.js +93 -0
- package/dist/lib/board-colors.js.map +1 -0
- package/dist/lib/board-dimensions.d.ts +41 -0
- package/dist/lib/board-dimensions.js +38 -0
- package/dist/lib/board-dimensions.js.map +1 -0
- package/dist/lib/board-metrics.d.ts +19 -0
- package/dist/lib/board-metrics.js +22 -0
- package/dist/lib/board-metrics.js.map +1 -0
- package/dist/lib/seasons-drafts.d.ts +26 -0
- package/dist/lib/seasons-drafts.js +106 -0
- package/dist/lib/seasons-drafts.js.map +1 -0
- package/dist/lib/seasons.d.ts +52 -0
- package/dist/lib/seasons.js +59 -0
- package/dist/lib/seasons.js.map +1 -0
- package/dist/lib/select-items.d.ts +29 -0
- package/dist/lib/select-items.js +35 -0
- package/dist/lib/select-items.js.map +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/seasons/christmas.css +64 -0
- package/dist/seasons/easter.css +62 -0
- package/dist/seasons/fathers-day.css +62 -0
- package/dist/seasons/halloween.css +69 -0
- package/dist/seasons/mothers-day.css +63 -0
- package/dist/seasons/new-year.css +66 -0
- package/dist/seasons/pride.css +68 -0
- package/dist/seasons/thanksgiving.css +64 -0
- package/dist/theme.css +1174 -0
- package/package.json +108 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FIestaBoard
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# FiestaUI
|
|
2
|
+
|
|
3
|
+
FiestaUI is the [FiestaBoard](https://github.com/Fiestaboard/FiestaBoard) design system: React components built on [Base UI](https://base-ui.com) with Tailwind v4 design tokens, published as [`@fiestaboard/ui`](https://www.npmjs.com/package/@fiestaboard/ui).
|
|
4
|
+
|
|
5
|
+
**Component catalog:** the Storybook is deployed to GitHub Pages on every push to `main`.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
The package is published to the **GitHub Packages npm registry** (not npmjs.com — yet). GitHub Packages requires authentication to install, even for public packages, so consumers need a one-time setup:
|
|
10
|
+
|
|
11
|
+
1. Create a [personal access token](https://github.com/settings/tokens) with the `read:packages` scope.
|
|
12
|
+
2. Configure npm (in `~/.npmrc`, NOT committed to any repo):
|
|
13
|
+
|
|
14
|
+
```ini
|
|
15
|
+
@fiestaboard:registry=https://npm.pkg.github.com
|
|
16
|
+
//npm.pkg.github.com/:_authToken=YOUR_TOKEN
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
3. Install:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @fiestaboard/ui
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
In GitHub Actions, use the workflow's `GITHUB_TOKEN` (with `packages: read`) as `NODE_AUTH_TOKEN` via `actions/setup-node`'s `registry-url`/`scope` options instead of a PAT.
|
|
26
|
+
|
|
27
|
+
Peer dependencies: `react` / `react-dom` ^19, `lucide-react`, and `tailwindcss` ^4 in the consuming app.
|
|
28
|
+
|
|
29
|
+
## Styling contract
|
|
30
|
+
|
|
31
|
+
FiestaUI ships **no compiled utility CSS**. The consuming app runs Tailwind v4 and generates utilities for the class strings inside this package. In your Tailwind entry CSS:
|
|
32
|
+
|
|
33
|
+
```css
|
|
34
|
+
@import "tailwindcss";
|
|
35
|
+
@import "@fiestaboard/ui/fonts.css";
|
|
36
|
+
@import "@fiestaboard/ui/theme.css";
|
|
37
|
+
@source "../node_modules/@fiestaboard/ui/dist";
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- `theme.css` carries the design tokens (`@theme inline`, `:root` / `.dark` custom properties), the base layer, the component animation keyframes, and the `dark` custom variant.
|
|
41
|
+
- `fonts.css` is the **opt-in** Geist font registration (`@fontsource-variable/geist` + `@fontsource-variable/geist-mono` `@font-face` rules, ~52 KB fetched for a Latin-only page). Import it alongside `theme.css` unless your app supplies Geist itself — e.g. via `next/font`, a CDN, or a self-hosted subset. If you self-host, skip `fonts.css` and register faces named `"Geist Variable"` / `"Geist Mono Variable"` (the names `theme.css`'s `--font-geist-sans` / `--font-geist-mono` tokens reference); without either, the tokens degrade gracefully to the system font stack.
|
|
42
|
+
- The `@source` line is **mandatory** — Tailwind v4 does not scan `node_modules` by default, and without it component styles silently vanish. Adjust the relative path to wherever your CSS file lives.
|
|
43
|
+
- Dark mode is class-based: toggle the `dark` class on `<html>`. FiestaUI only defines the variant; your app owns the toggle.
|
|
44
|
+
|
|
45
|
+
### Seasonal theming
|
|
46
|
+
|
|
47
|
+
`theme.css` inlines only the **live** season (Pride) — it activates automatically when the app shell stamps `.pride-month` on `<html>`. The other seasons are design drafts and are shipped as **opt-in** stylesheets rather than bundled into every consumer, so you only pay for the ones you use:
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
@import "@fiestaboard/ui/seasons/christmas.css";
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Import the file for a season only once you've promoted it (moved its entry into `SEASONS` and taught the app shell to stamp its `htmlClass`). All drafts are previewable in Storybook's **Season** toolbar without any consumer setup.
|
|
54
|
+
|
|
55
|
+
> **Migration (breaking):** the draft season data (`DRAFT_SEASONS`, `ALL_SEASONS`) is no longer exported from `"@fiestaboard/ui"` — it's Storybook-only data and now tree-shakes out of production bundles. If you previewed drafts, import them from the subpath instead: `import { ALL_SEASONS } from "@fiestaboard/ui/lib/seasons-drafts"`. The live-season API (`SEASONS`, `getActiveSeason`, `useActiveSeason`, …) is unchanged.
|
|
56
|
+
|
|
57
|
+
## Usage
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { Button, Card, CardContent, cn } from "@fiestaboard/ui";
|
|
61
|
+
|
|
62
|
+
export function Example() {
|
|
63
|
+
return (
|
|
64
|
+
<Card>
|
|
65
|
+
<CardContent className={cn("flex gap-2 p-4")}>
|
|
66
|
+
<Button variant="brand">Save</Button>
|
|
67
|
+
<Button variant="outline">Cancel</Button>
|
|
68
|
+
</CardContent>
|
|
69
|
+
</Card>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Development
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npm install
|
|
78
|
+
npm run storybook # component workbench on :6006
|
|
79
|
+
npm run build # dist/ — ESM + d.ts + theme.css
|
|
80
|
+
npm run lint && npm run typecheck && npm run format:check
|
|
81
|
+
npm run build-storybook && npm run test-storybook # axe a11y sweep (needs the static build served on :6006)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Visual parity rule
|
|
85
|
+
|
|
86
|
+
This package was extracted from FiestaBoard's `web/src/components/ui` with a pixel-parity guarantee. Token values in `src/styles/theme.css` and component class strings are contract, not implementation detail — changes to them are visible in every consumer. Change intentionally and version accordingly (patch: fixes, minor: additive components/variants, major: breaking API or visual changes).
|
|
87
|
+
|
|
88
|
+
### Testing against a local consumer
|
|
89
|
+
|
|
90
|
+
Don't point FiestaBoard's Docker build at an unpublished version. For local iteration:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm run build && npm pack # produces fiestaboard-ui-<version>.tgz
|
|
94
|
+
# in the consumer: npm install /path/to/fiestaboard-ui-<version>.tgz
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Releasing
|
|
98
|
+
|
|
99
|
+
Releases are manual: **Actions → Release → Run workflow**, choosing a `patch` / `minor` / `major` bump. The workflow bumps the version, tags `v<version>`, publishes to npm, and creates a GitHub Release.
|
|
100
|
+
|
|
101
|
+
Publishing authenticates with the workflow's built-in `GITHUB_TOKEN` (`packages: write`) — no npm account, no long-lived secrets, nothing to rotate.
|
|
102
|
+
|
|
103
|
+
If the package later moves to registry.npmjs.org (which would allow anonymous installs), switch the release workflow to [npm Trusted Publishing](https://docs.npmjs.com/trusted-publishers/) (OIDC); note that npm's [bypass-2FA token deprecation](https://github.blog/changelog/2026-07-08-npm-install-time-security-and-gat-bypass2fa-deprecation/) means the first npmjs publish must be done manually, satisfying 2FA interactively (see below).
|
|
104
|
+
|
|
105
|
+
### Bootstrapping the npmjs publish
|
|
106
|
+
|
|
107
|
+
`npm run release:npmjs` performs that manual first publish. It is a local, human-run
|
|
108
|
+
command by design: Trusted Publishing can only be configured on a package that already
|
|
109
|
+
exists on npmjs, and the 2FA challenge cannot come from CI.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npm login # once — web-based, completes 2FA in the browser
|
|
113
|
+
npm run release:npmjs -- --dry-run # inspect the tarball contents first
|
|
114
|
+
npm run release:npmjs # publish; completes 2FA interactively
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The account's 2FA mode is `auth-and-writes` (check with `npm profile get`), so the
|
|
118
|
+
publish itself needs a second factor. **Do not pass `--otp`** unless you have a TOTP
|
|
119
|
+
authenticator app — with a passkey or hardware security key there is no code to type.
|
|
120
|
+
With `auth-type=web` (npm's default) the CLI instead prints a
|
|
121
|
+
`https://www.npmjs.com/login/<uuid>` URL; open it, satisfy the passkey, and the publish
|
|
122
|
+
continues. `--otp=<code>` remains valid only for authenticator-app users.
|
|
123
|
+
|
|
124
|
+
The script rebuilds before publishing (`files` ships only `dist`, and there is no
|
|
125
|
+
`prepack` hook, so a stale `dist/` would otherwise publish silently-wrong contents) and
|
|
126
|
+
passes `--access public` because scoped packages default to `restricted`. The
|
|
127
|
+
`--registry` flag overrides `publishConfig.registry`, so this leaves the GitHub Packages
|
|
128
|
+
release workflow untouched — both registries serve the same version until the migration
|
|
129
|
+
completes.
|
|
130
|
+
|
|
131
|
+
Publish from an up-to-date `main`. The version comes from `package.json`, so a stale
|
|
132
|
+
checkout would point npmjs's `latest` tag at a superseded release.
|
|
133
|
+
|
|
134
|
+
## Downstream upgrade automation
|
|
135
|
+
|
|
136
|
+
Every release triggers `.github/workflows/downstream-upgrade.yml`, which keeps
|
|
137
|
+
a single evergreen PR open on `Fiestaboard/FiestaBoard` (branch
|
|
138
|
+
`fiestaui-upgrade`) pinning `@fiestaboard/ui` to the newest version. If the
|
|
139
|
+
bump breaks FiestaBoard, Claude (Opus) TDD-fixes it (max 3 attempts) and
|
|
140
|
+
FiestaBoard CI must pass before the PR is labeled `upgrade-green`; otherwise
|
|
141
|
+
it's labeled `upgrade-blocked` and the maintainer is pinged. A human on
|
|
142
|
+
FiestaBoard always does the merge.
|
|
143
|
+
|
|
144
|
+
Manual run / backfill: **Actions → Downstream Upgrade → Run workflow**
|
|
145
|
+
(optionally set `version`; `dry_run` computes the bump without pushing).
|
|
146
|
+
|
|
147
|
+
Required repo secrets: `CLAUDE_BOT_APP_ID`, `CLAUDE_BOT_APP_PRIVATE_KEY`
|
|
148
|
+
(GitHub App with write access to FiestaBoard), `CLAUDE_CODE_OAUTH_TOKEN`.
|
|
149
|
+
Design: `docs/superpowers/specs/2026-08-01-downstream-upgrade-design.md`.
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
MIT
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type DeviceType } from "../../lib/board-dimensions";
|
|
2
|
+
export interface BoardDisplayProps {
|
|
3
|
+
message: string | null;
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
size?: "sm" | "md" | "lg";
|
|
6
|
+
className?: string;
|
|
7
|
+
boardType?: "black" | "white";
|
|
8
|
+
deviceType?: DeviceType;
|
|
9
|
+
/** Skip animation infrastructure and render plain divs per tile. Much
|
|
10
|
+
* cheaper for static previews that never animate. */
|
|
11
|
+
isStatic?: boolean;
|
|
12
|
+
/** Notes wide (for note_array device; ignored otherwise). */
|
|
13
|
+
notesWide?: number;
|
|
14
|
+
/** Notes tall (for note_array device; ignored otherwise). */
|
|
15
|
+
notesTall?: number;
|
|
16
|
+
/** Emit data-row / data-col / data-cell-value on every tile wrapper.
|
|
17
|
+
* Only the page editor's draw mode consumes these (DrawableBoardPreview
|
|
18
|
+
* hit-tests strokes via data-row/data-col and tests read data-cell-value),
|
|
19
|
+
* so they are off by default — computing per-tile metadata is wasted work
|
|
20
|
+
* for the many static previews (dashboards, lists, chat cards) that never
|
|
21
|
+
* draw, and stray data-row/data-col on unrelated previews would force the
|
|
22
|
+
* draw surface's hit-testing to reject them one by one. */
|
|
23
|
+
emitCellMetadata?: boolean;
|
|
24
|
+
/** Run the split-flap animation. In the app this is wired to the user's
|
|
25
|
+
* board-animation setting and reduce-motion preference; when false, tiles
|
|
26
|
+
* snap straight to their target characters. */
|
|
27
|
+
animationsEnabled?: boolean;
|
|
28
|
+
/** Accessible label while `isLoading` is true. */
|
|
29
|
+
loadingLabel?: string;
|
|
30
|
+
/** Accessible label when the board has no message. */
|
|
31
|
+
emptyLabel?: string;
|
|
32
|
+
/** Builds the accessible label for a shown message (color markup already stripped). */
|
|
33
|
+
messageLabel?: (message: string) => string;
|
|
34
|
+
}
|
|
35
|
+
export declare const BoardDisplay: import("react").MemoExoticComponent<({ message, isLoading, size, className, boardType, deviceType, isStatic, notesWide, notesTall, emitCellMetadata, animationsEnabled, loadingLabel, emptyLabel, messageLabel, }: BoardDisplayProps) => import("react").JSX.Element>;
|