@alfadocs/ui-kit 0.0.12 → 0.0.15

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/README.md CHANGED
@@ -1,152 +1,88 @@
1
1
  # @alfadocs/ui-kit
2
2
 
3
- The AlfaDocs shared design system — a single source of truth for tokens, components, patterns, and translations across platform, booking, and alfascribe.
3
+ The AlfaDocs design system — React components, tokens, and translations.
4
4
 
5
- **Status:** 0.0.1 (pre-release, iterating)
6
- **Repo:** `alfadocs/design_system`
7
- **Package:** `@alfadocs/ui-kit` (published to GitHub Packages, `npm.pkg.github.com`)
8
- **Visual reference:** https://new-alfa-docs.vercel.app/ (saved locally in [`reference/vercel-reference.html`](./reference/vercel-reference.html))
5
+ > **Pre-release.** APIs may change between minor versions before 1.0.
9
6
 
10
- Authoritative contributor guide: [`CLAUDE.md`](./CLAUDE.md). The product requirements specification lives at [`src/docs/`](./src/docs/) and is also rendered inside Storybook.
7
+ ## Install
11
8
 
12
- ## Stack
9
+ ```bash
10
+ npm install @alfadocs/ui-kit
11
+ ```
12
+
13
+ Requires React 18+ and Node ≥ 22.6.
13
14
 
14
- | Layer | Technology |
15
- |---|---|
16
- | Language | React 18 + TypeScript (strict) |
17
- | Component foundation | shadcn/ui + Radix UI primitives |
18
- | Styling | Tailwind CSS v4 + CVA (class-variance-authority), tokens in `src/tokens/index.css` |
19
- | Build | Vite (library mode) |
20
- | Documentation | Storybook 10 (`@storybook/react-vite`) |
21
- | Testing | Vitest + Playwright (browser mode) via `@storybook/addon-vitest` + axe-core |
22
- | i18n | `react-i18next` (18 locales, RTL for `ar`) |
15
+ ## Usage
23
16
 
24
- ## Repo layout
17
+ ### Tokens
25
18
 
19
+ Import the design tokens once at your app root so the CSS custom
20
+ properties are available everywhere:
21
+
22
+ ```ts
23
+ import '@alfadocs/ui-kit/tokens';
26
24
  ```
27
- design_system/
28
- ├── .claude/ agents & skills shared with the team
29
- ├── .storybook/ framework, decorators, theme/locale switchers
30
- ├── reference/ brand PDFs, Vercel marketing HTML (read-only)
31
- ├── scripts/ build-locales.mjs etc.
32
- ├── templates/ component-docs.mdx.template, pattern-docs.mdx.template
33
- └── src/
34
- ├── tokens/
35
- │ ├── index.css single source of truth for CSS custom properties
36
- │ ├── ag-grid-theme.css
37
- │ ├── apexcharts-theme.ts
38
- │ └── themes/bridges/ fullcalendar, react-day-picker, tiptap, stripe
39
- ├── brand/ colour tables, type specimens, logo assets, *.mdx
40
- ├── components/ 95 components, each with .tsx / .stories.tsx / .test.tsx / .mdx
41
- ├── patterns/ composition layer — realistic AlfaDocs workflows
42
- ├── hooks/ use-prefers-reduced-motion, …
43
- ├── i18n/ config.ts + resources.ts (bundled locales)
44
- ├── docs/ PRS §§ 01–25 + examples/
45
- └── user_stories/ foundations + feature stories (done/ and to-do/)
25
+
26
+ Then apply a theme class on the root element:
27
+
28
+ ```html
29
+ <html class="theme-light">
30
+ <!-- or theme-dark, optionally combined with theme-accessible -->
31
+ </html>
46
32
  ```
47
33
 
48
- ## Getting started
34
+ ### Components
49
35
 
50
- ```bash
51
- npm install
52
- npm run storybook # Storybook on port 6006 — browse components, patterns, PRS
36
+ Each component is also available as its own subpath import for
37
+ narrower bundles:
38
+
39
+ ```tsx
40
+ import { Button } from '@alfadocs/ui-kit/button';
41
+ import { Card } from '@alfadocs/ui-kit/card';
42
+
43
+ export function Example() {
44
+ return (
45
+ <Card>
46
+ <Card.Body>
47
+ <Button intent="primary">Save</Button>
48
+ </Card.Body>
49
+ </Card>
50
+ );
51
+ }
53
52
  ```
54
53
 
55
- | Script | What it does |
56
- |---|---|
57
- | `npm run dev` | Vite dev server |
58
- | `npm run storybook` | Storybook on port 6006 |
59
- | `npm run build` | `tsc --noEmit` → `vite build` → `build:types` → `build:locales` |
60
- | `npm run build:types` | Emit `.d.ts` via `tsconfig.build.json` |
61
- | `npm run build:locales` | Copy locale JSON into `dist/locales/` |
62
- | `npm run build-storybook` | Static Storybook into `storybook-static/` |
63
- | `npx vitest` / `npx vitest run` | Vitest (browser mode) for story tests |
64
-
65
- Node ≥ 22.6.0 is required (`engines.node`).
66
-
67
- ## Package exports
68
-
69
- Consumers install `@alfadocs/ui-kit` from the GitHub Packages registry and import from these entry points:
70
-
71
- | Export | Purpose |
72
- |---|---|
73
- | `@alfadocs/ui-kit` | React components (the default entry) |
74
- | `@alfadocs/ui-kit/tokens` | `tokens.css` — CSS custom properties (import once at app root) |
75
- | `@alfadocs/ui-kit/i18n` | Pre-configured `i18next` instance |
76
- | `@alfadocs/ui-kit/locales/*` | Locale JSON bundles (e.g. `.../locales/en.json`) |
77
-
78
- See [`src/docs/25-consuming.mdx`](./src/docs/25-consuming.mdx) for integration recipes.
79
-
80
- ## Product Requirements Specification
81
-
82
- All sections live as MDX under [`src/docs/`](./src/docs/) and render in Storybook under **Product Requirements Specification → Documentation**.
83
-
84
- ### Foundations
85
- - [01 Overview & Goals](./src/docs/01-overview.mdx)
86
- - [02 Current State](./src/docs/02-current-state.mdx)
87
- - [03 — Architecture](./src/docs/03-architecture.mdx)
88
- - [04 Theming](./src/docs/04-theming.mdx)
89
- - [05 — Accessibility](./src/docs/05-accessibility.mdx)
90
- - [06 — Internationalisation](./src/docs/06-i18n.mdx)
91
-
92
- ### Library
93
- - [07 — Component Library](./src/docs/07-component-library.mdx)
94
- - [08 — Third-Party Library Stack](./src/docs/08-third-party.mdx)
95
- - [09 — Centralisation Strategy](./src/docs/09-centralisation.mdx)
96
-
97
- ### Design & docs
98
- - [11 — Storybook](./src/docs/11-storybook.mdx)
99
-
100
- ### Non-functional
101
- - [12 — Security](./src/docs/12-security.mdx)
102
- - [13 — Maintainability](./src/docs/13-maintainability.mdx)
103
- - [14 — Browser & Device Compatibility](./src/docs/14-browser-compat.mdx)
104
- - [15 — Responsive Design & Breakpoints](./src/docs/15-responsive.mdx)
105
- - [16 — Print Styles & PDF Generation](./src/docs/16-print.mdx)
106
- - [17 — Error Handling & Resilience](./src/docs/17-error-handling.mdx)
107
- - [18 — Animation & Motion Tokens](./src/docs/18-animation.mdx)
108
- - [19 — Performance Requirements](./src/docs/19-performance.mdx)
109
-
110
- ### Process
111
- - [20 — Versioning & Release Strategy](./src/docs/20-versioning.mdx)
112
- - [21 — Contribution Guidelines & Governance](./src/docs/21-contribution.mdx)
113
- - [22 — Agent Instructions](./src/docs/22-agents.mdx)
114
- - [23 — Mandatory Constraints](./src/docs/23-constraints.mdx)
115
- - [24 — Experimentation](./src/docs/24-experimentation.mdx)
116
- - [25 — Consuming the Kit](./src/docs/25-consuming.mdx)
117
-
118
- ## Hard constraints
119
-
120
- The full list is in [`src/docs/23-constraints.mdx`](./src/docs/23-constraints.mdx). Highlights CI enforces:
121
-
122
- - Tokens only — no hardcoded colours, spacing, radii, shadows, fonts in components
123
- - CSS logical properties only — `ms-*`/`me-*`/`ps-*`/`pe-*`, never `ml-*`/`mr-*`/`pl-*`/`pr-*`
124
- - No inline `style={{…}}`; Tailwind classes only
125
- - All user-visible strings routed through `useTranslation()`; `ui.*` namespace for kit, `app.*` for consumers
126
- - axe-core zero violations per story
127
- - TypeScript strict, no `any`, no PropTypes, `forwardRef` where a ref is exposed
128
- - No `dangerouslySetInnerHTML` outside the `SafeHtml` helper
129
- - No jQuery (and no library that depends on it)
130
- - CVA for every component's variants
131
- - Co-located `.stories.tsx` and `.test.tsx` for every component
132
- - Four themes compose through class names on the theme root: `theme-light`, `theme-dark`, each optionally with `theme-accessible` (AAA)
133
-
134
- ## Agents & skills
135
-
136
- Project-scoped agents (`.claude/agents/`) and user-invocable skills (`.claude/skills/`) are tracked in git. See [`CLAUDE.md`](./CLAUDE.md#agents--skills) for the full catalogue; common entry points:
137
-
138
- | Invocation | Purpose |
139
- |---|---|
140
- | `/new-component <Name> [category]` | scaffold a new component and self-check it |
141
- | `/component-gate <component-path>` | verify one component against the 9-row acceptance gate |
142
- | `/ds-check [path-or-diff]` | run `token-auditor` + `a11y-reviewer` in parallel and merge findings |
143
-
144
- Every feature implementation runs through `code-reviewer`, `a11y-reviewer`, and `token-auditor` in parallel before being declared done — see the "Post-implementation review" section in `CLAUDE.md`.
145
-
146
- ## Environment variables
147
-
148
- Non-secret build-time values live in `.env` at the repo root and are read by Vite (and therefore Storybook). Anything genuinely secret goes in `.env.local` (gitignored).
149
-
150
- | Variable | Committed? | Purpose |
151
- |---|---|---|
152
- | `VITE_FULLCALENDAR_LICENSE_KEY` | ✔ `.env` | Scheduler premium key for `resourceTimeline` in `Calendar`. Domain-bound, ships in the client bundle, not a cryptographic secret. Without it, FullCalendar renders an "invalid license" watermark. |
54
+ Or import everything from the root entry:
55
+
56
+ ```tsx
57
+ import { Button, Card } from '@alfadocs/ui-kit';
58
+ ```
59
+
60
+ ### i18n
61
+
62
+ The kit ships with `react-i18next` pre-configured and locale bundles
63
+ in `dist/locales/`:
64
+
65
+ ```ts
66
+ import i18n from '@alfadocs/ui-kit/i18n';
67
+ import en from '@alfadocs/ui-kit/locales/en.json';
68
+
69
+ i18n.addResourceBundle('en', 'ui', en);
70
+ ```
71
+
72
+ ## Peer dependencies
73
+
74
+ `react`, `react-dom`, `react-i18next`, `i18next`. Tailwind CSS is not
75
+ required to consume the kit components ship pre-styled, and the
76
+ tokens stylesheet exposes CSS custom properties you can reference from
77
+ your own styles.
78
+
79
+ ## License
80
+
81
+ [Business Source License 1.1](./LICENSE) production use is
82
+ permitted; offering the Licensed Work, or a substantial portion of it,
83
+ as a competing hosted, embedded, or rebranded design-system or
84
+ component-library product is not. The Licensed Work converts to the
85
+ Apache License 2.0 on the Change Date specified in the LICENSE.
86
+
87
+ For commercial licensing arrangements outside the BUSL grant, contact
88
+ AlfaDocs GmbH.
@@ -0,0 +1,237 @@
1
+ import { jsx as G } from "react/jsx-runtime";
2
+ import { forwardRef as Z, useRef as q, useMemo as ee, useEffect as te } from "react";
3
+ import { c as ne } from "./index-D2ZczOXr.js";
4
+ const ae = 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワ0123456789:・."=*+-<>¦|', re = "0123456789ABCDEF{}[]<>/\\;:=$#@!*+-", oe = "01", ie = "!@#$%^&*()_+-=[]{}|;:,.<>?/", I = {
5
+ katakana: ae,
6
+ hex: re,
7
+ binary: oe,
8
+ symbols: ie
9
+ }, se = ne(
10
+ // Wrapper holds the canvas plus optional overlay pseudo-elements.
11
+ // pointer-events-none so the overlay never blocks underlying UI.
12
+ "pointer-events-none relative overflow-hidden",
13
+ {
14
+ variants: {
15
+ // Built-in surface so the rain has somewhere to read against
16
+ // without the consumer wrapping it themselves.
17
+ // `transparent` (default) lets the parent provide the background.
18
+ // `solid` paints a near-black surface using the brand `blue-900`
19
+ // step from the palette — the rain's brightest glyphs read clean
20
+ // against it in either light or dark theme.
21
+ background: {
22
+ transparent: "",
23
+ solid: "bg-[var(--color-blue-900)]"
24
+ },
25
+ vibe: {
26
+ // No overlay, no canvas filter — just the rain.
27
+ clean: "",
28
+ // Fallout-CRT stack: vignette + dense scanlines + bloom +
29
+ // per-glyph phosphor glow (canvas-side shadowBlur, applied in
30
+ // the draw loop).
31
+ terminal: [
32
+ "before:pointer-events-none before:absolute before:inset-0 before:z-[2] before:content-['']",
33
+ "before:bg-[radial-gradient(closest-side,transparent_55%,rgb(0_0_0/0.55)_100%)]",
34
+ "after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:content-['']",
35
+ "after:bg-[repeating-linear-gradient(to_bottom,transparent_0,transparent_2px,rgb(0_0_0/0.32)_2px,rgb(0_0_0/0.32)_3px)]",
36
+ "after:mix-blend-multiply",
37
+ "[&>canvas]:[filter:blur(0.55px)_brightness(1.25)_contrast(1.1)_saturate(1.3)]"
38
+ ].join(" "),
39
+ // Sci-fi HUD: light scanlines, soft bloom, slow opacity pulse,
40
+ // per-glyph glow. No vignette.
41
+ hologram: [
42
+ "after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:content-['']",
43
+ "after:bg-[repeating-linear-gradient(to_bottom,transparent_0,transparent_3px,rgb(0_0_0/0.18)_3px,rgb(0_0_0/0.18)_4px)]",
44
+ "after:mix-blend-multiply",
45
+ "[&>canvas]:[filter:blur(0.4px)_brightness(1.15)_contrast(1.05)]",
46
+ "[&>canvas]:[animation:matrix-rain-hologram-pulse_3s_ease-in-out_infinite]"
47
+ ].join(" "),
48
+ // Synthwave neon: heavy bloom, no scanlines, indigo horizon
49
+ // glow at the bottom. Glyph colour is computed per-column in
50
+ // the draw loop (accent → info gradient).
51
+ synthwave: [
52
+ "after:pointer-events-none after:absolute after:inset-x-0 after:bottom-0 after:h-[30%] after:z-[1] after:content-['']",
53
+ "after:bg-[linear-gradient(to_top,var(--color-indigo-800),transparent)]",
54
+ "after:opacity-50",
55
+ "[&>canvas]:[filter:blur(0.7px)_brightness(1.3)_contrast(1.15)_saturate(1.5)]"
56
+ ].join(" "),
57
+ // Vintage scope monitor: dense thin scanlines, sharp edges
58
+ // (no canvas filter), animated horizontal sweep beam.
59
+ oscilloscope: [
60
+ // Scanlines (denser, alpha-heavier than terminal)
61
+ "after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:content-['']",
62
+ "after:bg-[repeating-linear-gradient(to_bottom,transparent_0,transparent_1px,rgb(0_0_0/0.4)_1px,rgb(0_0_0/0.4)_2px)]",
63
+ "after:mix-blend-multiply",
64
+ // Sweep beam — thin highlight bar scrolling top → bottom
65
+ "before:pointer-events-none before:absolute before:inset-x-0 before:top-0 before:z-[2] before:h-[4px] before:content-['']",
66
+ "before:bg-[linear-gradient(to_bottom,transparent,var(--foreground),transparent)]",
67
+ "before:opacity-50",
68
+ "before:[animation:matrix-rain-osc-sweep_4s_linear_infinite]",
69
+ "before:mix-blend-screen"
70
+ ].join(" "),
71
+ // Production-friendly: low opacity, no overlay. Pairs with
72
+ // `decay="slow"` (the default) for a faint background-noise
73
+ // feel that doesn't dominate foreground content.
74
+ ghost: "[&>canvas]:opacity-30"
75
+ },
76
+ // Radial mask that fades the canvas to transparent in the middle
77
+ // so foreground content stays readable. `closest-side` adapts to
78
+ // non-square containers. The `--mr` custom property comes from
79
+ // the `maskRadius` variant below.
80
+ mask: {
81
+ none: "",
82
+ center: [
83
+ "[&>canvas]:[mask-image:radial-gradient(closest-side,transparent_0%,transparent_var(--mr,30%),black_calc(var(--mr,30%)+45%))]",
84
+ "[&>canvas]:[-webkit-mask-image:radial-gradient(closest-side,transparent_0%,transparent_var(--mr,30%),black_calc(var(--mr,30%)+45%))]"
85
+ ].join(" ")
86
+ },
87
+ // Mask radius — t-shirt sizes drive the inner clear-zone radius.
88
+ // Only applied when mask="center". md (30%) is the default.
89
+ maskRadius: {
90
+ xs: "[--mr:15%]",
91
+ sm: "[--mr:22%]",
92
+ md: "[--mr:30%]",
93
+ lg: "[--mr:42%]",
94
+ xl: "[--mr:55%]"
95
+ }
96
+ },
97
+ defaultVariants: {
98
+ background: "transparent",
99
+ vibe: "clean",
100
+ mask: "none",
101
+ maskRadius: "md"
102
+ }
103
+ }
104
+ ), le = {
105
+ primary: "--primary",
106
+ accent: "--accent",
107
+ success: "--success",
108
+ error: "--error",
109
+ info: "--info"
110
+ }, ce = {
111
+ low: 18,
112
+ medium: 14,
113
+ high: 11
114
+ }, fe = {
115
+ gentle: 100,
116
+ normal: 60,
117
+ fast: 33
118
+ }, me = {
119
+ none: null,
120
+ slow: 3e-3,
121
+ normal: 0.02,
122
+ fast: 0.08
123
+ }, de = Z(
124
+ function({
125
+ glyphs: p = "katakana",
126
+ tone: P = "primary",
127
+ color: v,
128
+ density: $ = "medium",
129
+ pace: M = "normal",
130
+ decay: O = "slow",
131
+ vibe: i = "clean",
132
+ storm: u = !1,
133
+ mask: D = "none",
134
+ maskRadius: K = "md",
135
+ background: X = "transparent",
136
+ className: W
137
+ }, J) {
138
+ const V = q(null), x = ee(() => p in I ? I[p] : p, [p]), l = ce[$], z = fe[M], y = me[O];
139
+ return te(() => {
140
+ var H;
141
+ const o = V.current;
142
+ if (!o) return;
143
+ const e = o.getContext("2d");
144
+ if (!e) return;
145
+ const t = typeof window < "u" && typeof window.matchMedia == "function" ? window.matchMedia("(prefers-reduced-motion: reduce)") : null;
146
+ if (t != null && t.matches) return;
147
+ const A = v || (typeof window > "u" ? "" : getComputedStyle(document.documentElement).getPropertyValue(le[P]).trim() || getComputedStyle(o).color), Q = typeof window > "u" ? "monospace" : getComputedStyle(document.documentElement).getPropertyValue("--font-mono").trim() || "monospace", h = window.devicePixelRatio || 1;
148
+ let c = 0, g = [], d = [], E = [];
149
+ const R = () => {
150
+ const n = o.getBoundingClientRect();
151
+ if (o.width = Math.max(1, Math.floor(n.width * h)), o.height = Math.max(1, Math.floor(n.height * h)), e.setTransform(h, 0, 0, h, 0, 0), c = Math.max(1, Math.floor(n.width / l)), g = new Array(c).fill(0).map(
152
+ () => (
153
+ // Random initial offset so columns never start in sync.
154
+ Math.floor(Math.random() * (n.height / l))
155
+ )
156
+ ), i === "synthwave") {
157
+ const r = document.createElement("span");
158
+ r.style.display = "none", document.documentElement.appendChild(r), d = new Array(c).fill("").map((L, a) => {
159
+ const w = a / Math.max(1, c - 1) * 100;
160
+ return r.style.color = `color-mix(in oklch, var(--accent) ${100 - w}%, var(--info) ${w}%)`, getComputedStyle(r).color || A;
161
+ }), document.documentElement.removeChild(r);
162
+ } else
163
+ d = [];
164
+ u ? E = new Array(c).fill(0).map(() => 0.6 + Math.random() * 0.8) : E = [];
165
+ };
166
+ let C = 0, f = 0, S = !0, k = !0;
167
+ const B = (n) => {
168
+ if (n - C >= z) {
169
+ C = n;
170
+ const r = o.getBoundingClientRect();
171
+ y !== null && (e.globalCompositeOperation = "destination-out", e.globalAlpha = y, e.fillStyle = "black", e.fillRect(0, 0, r.width, r.height), e.globalAlpha = 1), e.globalCompositeOperation = "source-over", e.font = `${l}px ${Q}`, e.textBaseline = "top";
172
+ const L = i === "terminal" || i === "hologram" || i === "synthwave";
173
+ L ? (e.shadowColor = A, e.shadowBlur = Math.max(4, l * 0.6)) : e.shadowBlur = 0, i !== "synthwave" && (e.fillStyle = A);
174
+ for (let a = 0; a < c; a += 1) {
175
+ const w = x.charAt(
176
+ Math.floor(Math.random() * x.length)
177
+ ), N = u ? (Math.random() - 0.5) * 2 : 0, U = a * l + N, T = g[a] * l;
178
+ i === "synthwave" && d[a] && (e.fillStyle = d[a], L && (e.shadowColor = d[a])), e.fillText(w, U, T), T > r.height && Math.random() > 0.97 && (g[a] = 0), g[a] += u && E[a] || 1;
179
+ }
180
+ }
181
+ f = window.requestAnimationFrame(B);
182
+ }, b = () => {
183
+ f || !S || !k || (C = window.performance ? window.performance.now() : 0, f = window.requestAnimationFrame(B));
184
+ }, _ = () => {
185
+ f && (window.cancelAnimationFrame(f), f = 0);
186
+ };
187
+ R(), b();
188
+ const s = typeof ResizeObserver < "u" ? new ResizeObserver(R) : null;
189
+ s == null || s.observe(o);
190
+ const Y = () => R();
191
+ s || window.addEventListener("resize", Y);
192
+ const j = () => {
193
+ S = !document.hidden, S ? b() : _();
194
+ };
195
+ document.addEventListener("visibilitychange", j);
196
+ const m = typeof IntersectionObserver < "u" ? new IntersectionObserver(
197
+ (n) => {
198
+ k = n.some((r) => r.isIntersecting), k ? b() : _();
199
+ },
200
+ { threshold: 0 }
201
+ ) : null;
202
+ m == null || m.observe(o);
203
+ const F = () => {
204
+ t != null && t.matches ? _() : b();
205
+ };
206
+ return (H = t == null ? void 0 : t.addEventListener) == null || H.call(t, "change", F), () => {
207
+ var n;
208
+ _(), s == null || s.disconnect(), m == null || m.disconnect(), s || window.removeEventListener("resize", Y), document.removeEventListener("visibilitychange", j), (n = t == null ? void 0 : t.removeEventListener) == null || n.call(t, "change", F);
209
+ };
210
+ }, [
211
+ x,
212
+ P,
213
+ v,
214
+ l,
215
+ z,
216
+ y,
217
+ i,
218
+ u
219
+ ]), /* @__PURE__ */ G(
220
+ "div",
221
+ {
222
+ ref: J,
223
+ "aria-hidden": "true",
224
+ className: [
225
+ se({ background: X, vibe: i, mask: D, maskRadius: K }),
226
+ W
227
+ ].filter(Boolean).join(" "),
228
+ children: /* @__PURE__ */ G("canvas", { ref: V, className: "block size-full" })
229
+ }
230
+ );
231
+ }
232
+ );
233
+ de.displayName = "MatrixRain";
234
+ export {
235
+ de as M
236
+ };
237
+ //# sourceMappingURL=matrix-rain-C2kqBVxr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-rain-C2kqBVxr.js","sources":["../../src/components/matrix-rain/matrix-rain.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* MatrixRain — decorative canvas overlay. */\n/* */\n/* Falling-glyph \"digital rain\" with a CRT terminal vibe. Designed for */\n/* easter-egg / dev-flavoured surfaces: place inside a relatively- */\n/* positioned container with an `inset-0` className. */\n/* */\n/* Behaviour: */\n/* - Honours `prefers-reduced-motion` (renders nothing, animation off). */\n/* - Pauses while the tab is hidden (visibility API). */\n/* - Pauses when scrolled off-screen (IntersectionObserver). */\n/* - DPR-aware so glyphs stay sharp on HiDPI. */\n/* - Resizes with the container (ResizeObserver). */\n/* - \"Density-by-use\" trail: the per-frame decay alpha is small, so */\n/* columns that fire often accumulate a denser background residue */\n/* than rarely-firing ones — well-trodden paths stay luminous. */\n/* */\n/* The canvas is purely decorative — `aria-hidden=\"true\"`, no focus, no */\n/* visible text. Consumers must own the parent's positioning + stacking. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useEffect, useMemo, useRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\n/* ------------------------------------------------------------------ */\n/* Glyph presets */\n/* ------------------------------------------------------------------ */\n\n/**\n * Half-width katakana + Latin digits + a few symbols. The canonical\n * Matrix used reverse-mirrored half-width katakana from a custom font;\n * plain half-width katakana is the closest open approximation.\n */\nconst KATAKANA_GLYPHS =\n 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワ' +\n '0123456789:・.\"=*+-<>¦|';\n\nconst HEX_GLYPHS = '0123456789ABCDEF{}[]<>/\\\\;:=$#@!*+-';\nconst BINARY_GLYPHS = '01';\nconst SYMBOL_GLYPHS = '!@#$%^&*()_+-=[]{}|;:,.<>?/';\n\nconst GLYPH_PRESETS = {\n katakana: KATAKANA_GLYPHS,\n hex: HEX_GLYPHS,\n binary: BINARY_GLYPHS,\n symbols: SYMBOL_GLYPHS,\n} as const;\n\ntype GlyphPreset = keyof typeof GLYPH_PRESETS;\n\n/* ------------------------------------------------------------------ */\n/* CVA variants */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva(\n // Wrapper holds the canvas plus optional overlay pseudo-elements.\n // pointer-events-none so the overlay never blocks underlying UI.\n 'pointer-events-none relative overflow-hidden',\n {\n variants: {\n // Built-in surface so the rain has somewhere to read against\n // without the consumer wrapping it themselves.\n // `transparent` (default) lets the parent provide the background.\n // `solid` paints a near-black surface using the brand `blue-900`\n // step from the palette — the rain's brightest glyphs read clean\n // against it in either light or dark theme.\n background: {\n transparent: '',\n solid: 'bg-[var(--color-blue-900)]',\n },\n vibe: {\n // No overlay, no canvas filter — just the rain.\n clean: '',\n // Fallout-CRT stack: vignette + dense scanlines + bloom +\n // per-glyph phosphor glow (canvas-side shadowBlur, applied in\n // the draw loop).\n terminal: [\n \"before:pointer-events-none before:absolute before:inset-0 before:z-[2] before:content-['']\",\n 'before:bg-[radial-gradient(closest-side,transparent_55%,rgb(0_0_0/0.55)_100%)]',\n \"after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:content-['']\",\n 'after:bg-[repeating-linear-gradient(to_bottom,transparent_0,transparent_2px,rgb(0_0_0/0.32)_2px,rgb(0_0_0/0.32)_3px)]',\n 'after:mix-blend-multiply',\n '[&>canvas]:[filter:blur(0.55px)_brightness(1.25)_contrast(1.1)_saturate(1.3)]',\n ].join(' '),\n // Sci-fi HUD: light scanlines, soft bloom, slow opacity pulse,\n // per-glyph glow. No vignette.\n hologram: [\n \"after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:content-['']\",\n 'after:bg-[repeating-linear-gradient(to_bottom,transparent_0,transparent_3px,rgb(0_0_0/0.18)_3px,rgb(0_0_0/0.18)_4px)]',\n 'after:mix-blend-multiply',\n '[&>canvas]:[filter:blur(0.4px)_brightness(1.15)_contrast(1.05)]',\n '[&>canvas]:[animation:matrix-rain-hologram-pulse_3s_ease-in-out_infinite]',\n ].join(' '),\n // Synthwave neon: heavy bloom, no scanlines, indigo horizon\n // glow at the bottom. Glyph colour is computed per-column in\n // the draw loop (accent → info gradient).\n synthwave: [\n \"after:pointer-events-none after:absolute after:inset-x-0 after:bottom-0 after:h-[30%] after:z-[1] after:content-['']\",\n 'after:bg-[linear-gradient(to_top,var(--color-indigo-800),transparent)]',\n 'after:opacity-50',\n '[&>canvas]:[filter:blur(0.7px)_brightness(1.3)_contrast(1.15)_saturate(1.5)]',\n ].join(' '),\n // Vintage scope monitor: dense thin scanlines, sharp edges\n // (no canvas filter), animated horizontal sweep beam.\n oscilloscope: [\n // Scanlines (denser, alpha-heavier than terminal)\n \"after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:content-['']\",\n 'after:bg-[repeating-linear-gradient(to_bottom,transparent_0,transparent_1px,rgb(0_0_0/0.4)_1px,rgb(0_0_0/0.4)_2px)]',\n 'after:mix-blend-multiply',\n // Sweep beam — thin highlight bar scrolling top → bottom\n \"before:pointer-events-none before:absolute before:inset-x-0 before:top-0 before:z-[2] before:h-[4px] before:content-['']\",\n 'before:bg-[linear-gradient(to_bottom,transparent,var(--foreground),transparent)]',\n 'before:opacity-50',\n 'before:[animation:matrix-rain-osc-sweep_4s_linear_infinite]',\n 'before:mix-blend-screen',\n ].join(' '),\n // Production-friendly: low opacity, no overlay. Pairs with\n // `decay=\"slow\"` (the default) for a faint background-noise\n // feel that doesn't dominate foreground content.\n ghost: '[&>canvas]:opacity-30',\n },\n // Radial mask that fades the canvas to transparent in the middle\n // so foreground content stays readable. `closest-side` adapts to\n // non-square containers. The `--mr` custom property comes from\n // the `maskRadius` variant below.\n mask: {\n none: '',\n center: [\n '[&>canvas]:[mask-image:radial-gradient(closest-side,transparent_0%,transparent_var(--mr,30%),black_calc(var(--mr,30%)+45%))]',\n '[&>canvas]:[-webkit-mask-image:radial-gradient(closest-side,transparent_0%,transparent_var(--mr,30%),black_calc(var(--mr,30%)+45%))]',\n ].join(' '),\n },\n // Mask radius — t-shirt sizes drive the inner clear-zone radius.\n // Only applied when mask=\"center\". md (30%) is the default.\n maskRadius: {\n xs: '[--mr:15%]',\n sm: '[--mr:22%]',\n md: '[--mr:30%]',\n lg: '[--mr:42%]',\n xl: '[--mr:55%]',\n },\n },\n defaultVariants: {\n background: 'transparent',\n vibe: 'clean',\n mask: 'none',\n maskRadius: 'md',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Tone → semantic token resolution */\n/* ------------------------------------------------------------------ */\n\ntype Tone = 'primary' | 'accent' | 'success' | 'error' | 'info';\ntype Density = 'low' | 'medium' | 'high';\ntype Pace = 'gentle' | 'normal' | 'fast';\ntype Decay = 'none' | 'slow' | 'normal' | 'fast';\n\nconst TONE_VAR: Record<Tone, string> = {\n primary: '--primary',\n accent: '--accent',\n success: '--success',\n error: '--error',\n info: '--info',\n};\n\nconst DENSITY_FONT_PX: Record<Density, number> = {\n low: 18,\n medium: 14,\n high: 11,\n};\n\nconst PACE_FRAME_MS: Record<Pace, number> = {\n gentle: 100,\n normal: 60,\n fast: 33,\n};\n\n// Per-frame trail decay alpha. Smaller = trails persist longer = more\n// \"density by use\". `none` skips the decay step entirely; over long\n// uptimes the canvas approaches a saturated noise field. `slow` is the\n// new default that produces the \"well-trodden paths stay bright\" feel.\nconst DECAY_ALPHA: Record<Decay, number | null> = {\n none: null,\n slow: 0.003,\n normal: 0.02,\n fast: 0.08,\n};\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\nexport interface MatrixRainProps extends VariantProps<typeof wrapperVariants> {\n /** Glyph preset name or a literal string of glyphs. Default `katakana`. */\n glyphs?: GlyphPreset | string;\n /** Brand tone for the rain. Resolved against the active theme. */\n tone?: Tone;\n /** Optional explicit colour — any CSS colour value. Overrides `tone` when set. */\n color?: string;\n /** Glyph density — controls font-size. */\n density?: Density;\n /** Animation pace — controls frame interval. */\n pace?: Pace;\n /** Trail persistence — smaller decay = denser cumulative background. */\n decay?: Decay;\n /**\n * Built-in surface beneath the rain. `transparent` (default) lets the\n * parent provide its own background; `solid` paints a near-black\n * surface so the rain reads cleanly without the consumer wrapping it\n * themselves — useful for standalone demos or full-bleed easter eggs.\n */\n background?: 'transparent' | 'solid';\n /**\n * Visual treatment.\n * - `clean` — just the rain.\n * - `terminal` — Fallout-CRT: vignette + scanlines + bloom + glow.\n * - `hologram` — sci-fi HUD: soft scanlines + slow opacity pulse.\n * - `synthwave` — 80s neon: heavy bloom + indigo horizon + accent→\n * info gradient across columns (overrides `tone`).\n * - `oscilloscope` — vintage scope: sharp edges + dense scanlines +\n * animated horizontal beam sweep.\n * - `ghost` — production-friendly faint background variant.\n */\n vibe?: 'clean' | 'terminal' | 'hologram' | 'synthwave' | 'oscilloscope' | 'ghost';\n /**\n * When `true`, gives each column a stable random speed multiplier\n * (0.6×–1.4× of the base pace) and adds a small horizontal jitter to\n * each glyph. Pairs with any vibe — makes the rain feel alive vs.\n * metronomic.\n */\n storm?: boolean;\n /**\n * Radial mask. `center` fades the canvas to fully transparent in the\n * middle so foreground content sitting over the rain stays readable\n * (e.g. code-block easter egg with copy in the middle).\n */\n mask?: 'none' | 'center';\n /**\n * Inner clear-zone radius for `mask=\"center\"`. Ignored when `mask`\n * is `none`. T-shirt sizes map to: xs 15%, sm 22%, md 30% (default),\n * lg 42%, xl 55%.\n */\n maskRadius?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Class merged onto the wrapper. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const MatrixRain = forwardRef<HTMLDivElement, MatrixRainProps>(\n function MatrixRain(\n {\n glyphs = 'katakana',\n tone = 'primary',\n color,\n density = 'medium',\n pace = 'normal',\n decay = 'slow',\n vibe = 'clean',\n storm = false,\n mask = 'none',\n maskRadius = 'md',\n background = 'transparent',\n className,\n },\n ref,\n ) {\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n // Resolve the glyph string from a preset key or literal pass-through.\n const glyphString = useMemo<string>(() => {\n if (glyphs in GLYPH_PRESETS) {\n return GLYPH_PRESETS[glyphs as GlyphPreset];\n }\n return glyphs;\n }, [glyphs]);\n\n const fontSize = DENSITY_FONT_PX[density];\n const frameInterval = PACE_FRAME_MS[pace];\n const decayAlpha = DECAY_ALPHA[decay];\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n // Bail entirely under reduced-motion. The CSS overlay is also\n // suppressed by media-query in the consumer's stylesheet if needed\n // — defence in depth, but the JS is the authoritative gate here.\n const reduceMotionMql =\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(prefers-reduced-motion: reduce)')\n : null;\n if (reduceMotionMql?.matches) return;\n\n // Resolve colour: explicit prop wins; otherwise read the theme\n // token. Final fallback is the canvas's inherited `color` (cascade\n // of the host `<div>`), which the browser always resolves to a\n // usable value — keeps a literal hex out of component code.\n const resolvedColor = (() => {\n if (color) return color;\n if (typeof window === 'undefined') return '';\n const fromVar = getComputedStyle(document.documentElement)\n .getPropertyValue(TONE_VAR[tone])\n .trim();\n return fromVar || getComputedStyle(canvas).color;\n })();\n\n // Resolve --font-mono at runtime so the kit's font fallback chain\n // (incl. Noto Sans JP for katakana) flows through to canvas.\n const fontFamily = (() => {\n if (typeof window === 'undefined') return 'monospace';\n const fromVar = getComputedStyle(document.documentElement)\n .getPropertyValue('--font-mono')\n .trim();\n return fromVar || 'monospace';\n })();\n\n const dpr = window.devicePixelRatio || 1;\n let columns = 0;\n let drops: number[] = [];\n // Synthwave: per-column accent → info gradient. Resolved through\n // a temporary probe element so we get back fully-resolved rgb()\n // strings the canvas API accepts. Empty when not in synthwave.\n let columnColors: string[] = [];\n // Storm: per-column random speed factor (0.6×–1.4× base pace) +\n // glyph horizontal jitter. Stable across frames, recomputed on\n // each fit() so columns stay coherent.\n let columnSpeeds: number[] = [];\n\n const fit = () => {\n const rect = canvas.getBoundingClientRect();\n canvas.width = Math.max(1, Math.floor(rect.width * dpr));\n canvas.height = Math.max(1, Math.floor(rect.height * dpr));\n // Render in CSS pixels so font metrics stay sharp on HiDPI.\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n columns = Math.max(1, Math.floor(rect.width / fontSize));\n drops = new Array(columns).fill(0).map(() =>\n // Random initial offset so columns never start in sync.\n Math.floor(Math.random() * (rect.height / fontSize)),\n );\n\n if (vibe === 'synthwave') {\n // Build the per-column gradient by resolving color-mix()\n // through a probe span. Browser handles the OKLCH math; we\n // just store the resulting rgb() string per column.\n const probe = document.createElement('span');\n probe.style.display = 'none';\n document.documentElement.appendChild(probe);\n columnColors = new Array(columns).fill('').map((_, i) => {\n const t = (i / Math.max(1, columns - 1)) * 100;\n probe.style.color = `color-mix(in oklch, var(--accent) ${\n 100 - t\n }%, var(--info) ${t}%)`;\n const computed = getComputedStyle(probe).color;\n return computed || resolvedColor;\n });\n document.documentElement.removeChild(probe);\n } else {\n columnColors = [];\n }\n\n if (storm) {\n columnSpeeds = new Array(columns)\n .fill(0)\n .map(() => 0.6 + Math.random() * 0.8);\n } else {\n columnSpeeds = [];\n }\n };\n\n let lastFrame = 0;\n let rafHandle = 0;\n let isVisible = true;\n let isOnscreen = true;\n\n const draw = (now: number) => {\n if (now - lastFrame >= frameInterval) {\n lastFrame = now;\n const rect = canvas.getBoundingClientRect();\n\n // Trail decay — `destination-out` fades existing pixels by\n // `decayAlpha` each frame. Skip when `decay === 'none'` so\n // trails are permanent (eventually saturate; intended).\n // Under `destination-out` only the alpha channel matters, so\n // we drive the fade via `globalAlpha` and any opaque CSS-keyword\n // fillStyle — no rgba literal needed.\n if (decayAlpha !== null) {\n ctx.globalCompositeOperation = 'destination-out';\n ctx.globalAlpha = decayAlpha;\n ctx.fillStyle = 'black';\n ctx.fillRect(0, 0, rect.width, rect.height);\n ctx.globalAlpha = 1;\n }\n\n ctx.globalCompositeOperation = 'source-over';\n ctx.font = `${fontSize}px ${fontFamily}`;\n ctx.textBaseline = 'top';\n // Per-glyph phosphor glow (canvas shadowBlur). On for vibes\n // that need an emission envelope; off for sharp variants.\n const wantsGlow =\n vibe === 'terminal' || vibe === 'hologram' || vibe === 'synthwave';\n if (wantsGlow) {\n ctx.shadowColor = resolvedColor;\n ctx.shadowBlur = Math.max(4, fontSize * 0.6);\n } else {\n ctx.shadowBlur = 0;\n }\n\n // Default fill (overridden per-column for synthwave).\n if (vibe !== 'synthwave') ctx.fillStyle = resolvedColor;\n\n for (let i = 0; i < columns; i += 1) {\n const ch = glyphString.charAt(\n Math.floor(Math.random() * glyphString.length),\n );\n // Storm: small horizontal jitter so rows feel alive.\n const jitter = storm ? (Math.random() - 0.5) * 2 : 0;\n const x = i * fontSize + jitter;\n const y = drops[i] * fontSize;\n\n // Synthwave: gradient colour per column.\n if (vibe === 'synthwave' && columnColors[i]) {\n ctx.fillStyle = columnColors[i];\n if (wantsGlow) ctx.shadowColor = columnColors[i];\n }\n\n ctx.fillText(ch, x, y);\n\n // Reset randomly once past the bottom so columns restart\n // staggered rather than all at once.\n if (y > rect.height && Math.random() > 0.97) {\n drops[i] = 0;\n }\n // Storm: per-column variable advance speed.\n drops[i] += storm ? columnSpeeds[i] || 1 : 1;\n }\n }\n rafHandle = window.requestAnimationFrame(draw);\n };\n\n const start = () => {\n if (rafHandle) return;\n if (!isVisible || !isOnscreen) return;\n lastFrame = window.performance ? window.performance.now() : 0;\n rafHandle = window.requestAnimationFrame(draw);\n };\n const stop = () => {\n if (rafHandle) {\n window.cancelAnimationFrame(rafHandle);\n rafHandle = 0;\n }\n };\n\n fit();\n start();\n\n // Resize with the container.\n const resizeObserver =\n typeof ResizeObserver !== 'undefined' ? new ResizeObserver(fit) : null;\n resizeObserver?.observe(canvas);\n const onWindowResize = () => fit();\n if (!resizeObserver) window.addEventListener('resize', onWindowResize);\n\n // Pause when tab is hidden.\n const onVisibility = () => {\n isVisible = !document.hidden;\n if (isVisible) start();\n else stop();\n };\n document.addEventListener('visibilitychange', onVisibility);\n\n // Pause when scrolled off-screen.\n const intersectionObserver =\n typeof IntersectionObserver !== 'undefined'\n ? new IntersectionObserver(\n (entries) => {\n isOnscreen = entries.some((e) => e.isIntersecting);\n if (isOnscreen) start();\n else stop();\n },\n { threshold: 0 },\n )\n : null;\n intersectionObserver?.observe(canvas);\n\n // Pause if reduced-motion gets toggled at runtime.\n const onReduceMotionChange = () => {\n if (reduceMotionMql?.matches) stop();\n else start();\n };\n reduceMotionMql?.addEventListener?.('change', onReduceMotionChange);\n\n return () => {\n stop();\n resizeObserver?.disconnect();\n intersectionObserver?.disconnect();\n if (!resizeObserver) window.removeEventListener('resize', onWindowResize);\n document.removeEventListener('visibilitychange', onVisibility);\n reduceMotionMql?.removeEventListener?.('change', onReduceMotionChange);\n };\n }, [\n glyphString,\n tone,\n color,\n fontSize,\n frameInterval,\n decayAlpha,\n vibe,\n storm,\n ]);\n\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={[\n wrapperVariants({ background, vibe, mask, maskRadius }),\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <canvas ref={canvasRef} className=\"block size-full\" />\n </div>\n );\n },\n);\n\nMatrixRain.displayName = 'MatrixRain';\n"],"names":["KATAKANA_GLYPHS","HEX_GLYPHS","BINARY_GLYPHS","SYMBOL_GLYPHS","GLYPH_PRESETS","wrapperVariants","cva","TONE_VAR","DENSITY_FONT_PX","PACE_FRAME_MS","DECAY_ALPHA","MatrixRain","forwardRef","glyphs","tone","color","density","pace","decay","vibe","storm","mask","maskRadius","background","className","ref","canvasRef","useRef","glyphString","useMemo","fontSize","frameInterval","decayAlpha","useEffect","canvas","ctx","reduceMotionMql","resolvedColor","fontFamily","dpr","columns","drops","columnColors","columnSpeeds","fit","rect","probe","_","i","t","lastFrame","rafHandle","isVisible","isOnscreen","draw","now","wantsGlow","ch","jitter","x","y","start","stop","resizeObserver","onWindowResize","onVisibility","intersectionObserver","entries","e","onReduceMotionChange","_a","jsx"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "0.0.12",
3
+ "packageVersion": "0.0.15",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -65,6 +65,7 @@ export * from './agenda-tray';
65
65
  export * from './alert';
66
66
  export * from './dialog';
67
67
  export * from './dropdown-menu';
68
+ export * from './matrix-rain';
68
69
  export * from './message-card';
69
70
  export * from './message-tray';
70
71
  export * from './notification-card';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { MatrixRain, type MatrixRainProps } from './matrix-rain';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/matrix-rain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { M as i } from "../../_chunks/matrix-rain-C2kqBVxr.js";
2
+ export {
3
+ i as MatrixRain
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}