@nadicodeai/ui 9.2.1 → 10.0.0
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/AGENTS.md +1 -0
- package/README.md +5 -5
- package/dist/agent-orb.d.ts +3 -0
- package/dist/agent-orb.d.ts.map +1 -0
- package/dist/agent-orb.js +2 -0
- package/dist/assets/brand/aionlabs.svg +2 -0
- package/dist/assets/brand/airtable.svg +2 -0
- package/dist/assets/brand/apple.svg +2 -0
- package/dist/assets/brand/arcee.svg +2 -0
- package/dist/assets/brand/asana.svg +2 -0
- package/dist/assets/brand/atlassian.svg +2 -0
- package/dist/assets/brand/baidu.svg +2 -0
- package/dist/assets/brand/bytedance.svg +2 -0
- package/dist/assets/brand/claude.svg +2 -0
- package/dist/assets/brand/cohere.svg +2 -0
- package/dist/assets/brand/datadog.svg +2 -0
- package/dist/assets/brand/deepseek.svg +2 -0
- package/dist/assets/brand/discord.svg +2 -0
- package/dist/assets/brand/dolphin.svg +2 -0
- package/dist/assets/brand/dotsstudio.svg +2 -0
- package/dist/assets/brand/figma.svg +2 -0
- package/dist/assets/brand/gemini.svg +2 -0
- package/dist/assets/brand/github.svg +2 -0
- package/dist/assets/brand/gitlab.svg +2 -0
- package/dist/assets/brand/gmail.svg +2 -0
- package/dist/assets/brand/google-calendar.svg +2 -0
- package/dist/assets/brand/google-drive.svg +2 -0
- package/dist/assets/brand/grok.svg +2 -0
- package/dist/assets/brand/huggingface.svg +2 -0
- package/dist/assets/brand/ibm.svg +2 -0
- package/dist/assets/brand/inception.svg +2 -0
- package/dist/assets/brand/inclusionai.svg +2 -0
- package/dist/assets/brand/index.json +778 -0
- package/dist/assets/brand/inference.svg +2 -0
- package/dist/assets/brand/intercom.svg +2 -0
- package/dist/assets/brand/jira.svg +2 -0
- package/dist/assets/brand/kwaipilot.svg +2 -0
- package/dist/assets/brand/linear.svg +2 -0
- package/dist/assets/brand/linux.svg +2 -0
- package/dist/assets/brand/liquid.svg +2 -0
- package/dist/assets/brand/longcat.svg +2 -0
- package/dist/assets/brand/mattermost.svg +2 -0
- package/dist/assets/brand/meta.svg +2 -0
- package/dist/assets/brand/microsoft.svg +2 -0
- package/dist/assets/brand/minimax.svg +2 -0
- package/dist/assets/brand/mistral.svg +2 -0
- package/dist/assets/brand/moonshot.svg +2 -0
- package/dist/assets/brand/morph.svg +2 -0
- package/dist/assets/brand/n8n.svg +2 -0
- package/dist/assets/brand/netlify.svg +2 -0
- package/dist/assets/brand/nexagi.svg +2 -0
- package/dist/assets/brand/notion.svg +2 -0
- package/dist/assets/brand/nousresearch.svg +2 -0
- package/dist/assets/brand/nova.svg +2 -0
- package/dist/assets/brand/nvidia.svg +2 -0
- package/dist/assets/brand/openai.svg +2 -0
- package/dist/assets/brand/openrouter.svg +2 -0
- package/dist/assets/brand/paypal.svg +2 -0
- package/dist/assets/brand/perceptron.svg +2 -0
- package/dist/assets/brand/perplexity.svg +2 -0
- package/dist/assets/brand/poolside.svg +2 -0
- package/dist/assets/brand/postgresql.svg +2 -0
- package/dist/assets/brand/qwen.svg +2 -0
- package/dist/assets/brand/reka.svg +2 -0
- package/dist/assets/brand/relace.svg +2 -0
- package/dist/assets/brand/sakana.svg +2 -0
- package/dist/assets/brand/sentry.svg +2 -0
- package/dist/assets/brand/signal.svg +2 -0
- package/dist/assets/brand/slack.svg +2 -0
- package/dist/assets/brand/spotify.svg +2 -0
- package/dist/assets/brand/square.svg +2 -0
- package/dist/assets/brand/stepfun.svg +2 -0
- package/dist/assets/brand/stripe.svg +2 -0
- package/dist/assets/brand/supabase.svg +2 -0
- package/dist/assets/brand/telegram.svg +2 -0
- package/dist/assets/brand/tencent.svg +2 -0
- package/dist/assets/brand/the-drummer.svg +2 -0
- package/dist/assets/brand/thinkingmachines.svg +2 -0
- package/dist/assets/brand/todoist.svg +2 -0
- package/dist/assets/brand/unbiased.svg +2 -0
- package/dist/assets/brand/unreal-engine.svg +2 -0
- package/dist/assets/brand/upstage.svg +2 -0
- package/dist/assets/brand/vercel.svg +2 -0
- package/dist/assets/brand/webflow.svg +2 -0
- package/dist/assets/brand/whatsapp.svg +2 -0
- package/dist/assets/brand/windows.svg +2 -0
- package/dist/assets/brand/writer.svg +2 -0
- package/dist/assets/brand/xiaomimimo.svg +2 -0
- package/dist/assets/brand/youtube.svg +2 -0
- package/dist/assets/brand/yuanbao.svg +2 -0
- package/dist/assets/brand/zai.svg +2 -0
- package/dist/assets/brand/zapier.svg +2 -0
- package/dist/components/action-band.js +1 -1
- package/dist/components/action-status.d.ts +5 -0
- package/dist/components/action-status.d.ts.map +1 -1
- package/dist/components/action-status.js +6 -2
- package/dist/components/agent-orb-appearance.d.ts +16 -2
- package/dist/components/agent-orb-appearance.d.ts.map +1 -1
- package/dist/components/agent-orb-appearance.js +28 -5
- package/dist/components/agent-orb.d.ts +6 -3
- package/dist/components/agent-orb.d.ts.map +1 -1
- package/dist/components/agent-orb.js +20 -7
- package/dist/components/app-mark-aliases.d.ts +16 -0
- package/dist/components/app-mark-aliases.d.ts.map +1 -0
- package/dist/components/app-mark-aliases.js +84 -0
- package/dist/components/app-mark.d.ts +4 -0
- package/dist/components/app-mark.d.ts.map +1 -1
- package/dist/components/app-mark.js +14 -31
- package/dist/components/automation-section.d.ts.map +1 -1
- package/dist/components/automation-section.js +2 -2
- package/dist/components/badge.js +1 -1
- package/dist/components/brand.d.ts +3 -2
- package/dist/components/brand.d.ts.map +1 -1
- package/dist/components/brand.js +18 -28
- package/dist/components/button.js +1 -1
- package/dist/components/code-editor-mockup.d.ts +1 -1
- package/dist/components/code-editor-mockup.js +1 -1
- package/dist/components/collection-filters.js +2 -2
- package/dist/components/confirm-dialog.d.ts +3 -1
- package/dist/components/confirm-dialog.d.ts.map +1 -1
- package/dist/components/confirm-dialog.js +3 -3
- package/dist/components/drawer.js +5 -5
- package/dist/components/feature-grid.js +2 -2
- package/dist/components/feedback-state.d.ts.map +1 -1
- package/dist/components/feedback-state.js +6 -9
- package/dist/components/footer.js +2 -2
- package/dist/components/hero.js +1 -1
- package/dist/components/house-icons.d.ts.map +1 -1
- package/dist/components/house-icons.js +9 -1
- package/dist/components/input-otp.js +1 -1
- package/dist/components/installer-shell.d.ts.map +1 -1
- package/dist/components/installer-shell.js +5 -6
- package/dist/components/logo-band.js +1 -1
- package/dist/components/navigation-menu.js +2 -2
- package/dist/components/pending-label.d.ts +15 -0
- package/dist/components/pending-label.d.ts.map +1 -0
- package/dist/components/pending-label.js +14 -0
- package/dist/components/proof-slot.js +1 -1
- package/dist/components/section-intro.js +2 -2
- package/dist/components/security-grid.js +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/shift-band.js +1 -1
- package/dist/components/skeleton.d.ts +4 -0
- package/dist/components/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton.js +5 -1
- package/dist/components/sonner.d.ts.map +1 -1
- package/dist/components/sonner.js +5 -2
- package/dist/components/statement.js +2 -2
- package/dist/components/steps.js +2 -2
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/texture-strip.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/waiting-line.d.ts +30 -0
- package/dist/components/waiting-line.d.ts.map +1 -0
- package/dist/components/waiting-line.js +33 -0
- package/dist/eslint/rules/no-invalid-token-utility.js +1 -1
- package/dist/index.d.ts +2 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/internal/agent-orb-motion.d.ts +9 -1
- package/dist/internal/agent-orb-motion.d.ts.map +1 -1
- package/dist/internal/agent-orb-motion.js +23 -11
- package/dist/internal/agent-orb.d.ts +14 -1
- package/dist/internal/agent-orb.d.ts.map +1 -1
- package/dist/internal/agent-orb.js +78 -22
- package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
- package/dist/internal/assistant-ui/attachment.js +3 -2
- package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
- package/dist/internal/assistant-ui/reasoning.js +4 -4
- package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -1
- package/dist/internal/assistant-ui/tool-fallback.js +5 -4
- package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
- package/dist/internal/assistant-ui/tool-group.js +4 -3
- package/dist/lib/motion.d.ts +18 -4
- package/dist/lib/motion.d.ts.map +1 -1
- package/dist/lib/motion.js +18 -4
- package/dist/styles/globals.css +0 -1
- package/docs/activity.md +99 -119
- package/docs/agent-orb.md +71 -20
- package/docs/component-classification.md +4 -4
- package/docs/consuming-cross-repo.md +8 -10
- package/docs/contract.md +10 -9
- package/docs/icon-assets.md +106 -0
- package/docs/migration/10.0.0.md +144 -0
- package/package.json +8 -7
- package/dist/activity.d.ts +0 -2
- package/dist/activity.d.ts.map +0 -1
- package/dist/activity.js +0 -2
- package/dist/components/activity-orb.d.ts +0 -21
- package/dist/components/activity-orb.d.ts.map +0 -1
- package/dist/components/activity-orb.js +0 -26
- package/dist/components/benefits-bento.d.ts +0 -15
- package/dist/components/benefits-bento.d.ts.map +0 -1
- package/dist/components/benefits-bento.js +0 -6
- package/dist/components/bento.d.ts +0 -39
- package/dist/components/bento.d.ts.map +0 -1
- package/dist/components/bento.js +0 -70
- package/dist/components/glyph-spinner.d.ts +0 -10
- package/dist/components/glyph-spinner.d.ts.map +0 -1
- package/dist/components/glyph-spinner.js +0 -101
- package/dist/components/nav-bar.d.ts +0 -24
- package/dist/components/nav-bar.d.ts.map +0 -1
- package/dist/components/nav-bar.js +0 -35
- package/dist/components/page-frame.d.ts +0 -30
- package/dist/components/page-frame.d.ts.map +0 -1
- package/dist/components/page-frame.js +0 -30
- package/dist/components/spinner.d.ts +0 -3
- package/dist/components/spinner.d.ts.map +0 -1
- package/dist/components/spinner.js +0 -7
- package/dist/components/use-case-bento.d.ts +0 -13
- package/dist/components/use-case-bento.d.ts.map +0 -1
- package/dist/components/use-case-bento.js +0 -8
- package/dist/internal/activity-orb.d.ts +0 -27
- package/dist/internal/activity-orb.d.ts.map +0 -1
- package/dist/internal/activity-orb.js +0 -150
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Migrating to `@nadicodeai/ui` 10.0.0
|
|
2
|
+
|
|
3
|
+
This release carries the nadicode design system settled in
|
|
4
|
+
[the ADR](https://github.com/nadicodeai/nadicodeai/blob/main/docs/adr/2026-09-23-the-nadicode-design-system.md):
|
|
5
|
+
the new logo and name, twelve type tokens named by role, two greens, one motion
|
|
6
|
+
law, activity without spinners, the stepped dark ring, three Agent colours, and
|
|
7
|
+
the website's page grammar retired. `@nadicodeai/ui` 10.0.0 requires
|
|
8
|
+
`@nadicodeai/design-system` 10.0.0; the two packages are released in lockstep.
|
|
9
|
+
The type renames are the largest break for consumers; start there.
|
|
10
|
+
|
|
11
|
+
## Type tokens
|
|
12
|
+
|
|
13
|
+
Twelve sizes named by the role they play, Geist and Geist Mono only. Strong is
|
|
14
|
+
a weight, not a token: a 500 run of body copy is `body-md` with
|
|
15
|
+
`font-weight: 500`. Rename the `.nc-type-*` class and the `--nc-type-*` tokens
|
|
16
|
+
at every call site.
|
|
17
|
+
|
|
18
|
+
| Removed | Use instead |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| `title-lg` | `display-md` |
|
|
21
|
+
| `title-md` | `heading-lg` |
|
|
22
|
+
| `title-sm` | `heading-md` |
|
|
23
|
+
| `display-md` | `heading-md` |
|
|
24
|
+
| `display-sm` | `heading-sm` |
|
|
25
|
+
| `body-md-strong` | `body-md` plus `font-weight: 500` |
|
|
26
|
+
| `body-sm-strong` | `body-sm` plus `font-weight: 500` |
|
|
27
|
+
| `caption-strong` | `caption` plus `font-weight: 500` |
|
|
28
|
+
| `button-lg` | `body-md` plus `font-weight: 500` |
|
|
29
|
+
| `button-md` | `body-sm` plus `font-weight: 500` |
|
|
30
|
+
| `caption-mono` | `label-mono` |
|
|
31
|
+
|
|
32
|
+
`display-xl`, `display-lg`, `body-lg`, `body-md`, `body-sm`, `caption` and
|
|
33
|
+
`code` keep their names. `display-md` is now 40/42 rather than 24/32, so a call
|
|
34
|
+
site that used the old small display tier moves to `heading-md`. Tracking is a
|
|
35
|
+
display-tier exception and nothing else: the three display sizes run from
|
|
36
|
+
-0.035em at 72px to -0.025em at 40px, and every other tier is `0px`.
|
|
37
|
+
|
|
38
|
+
## Colour tokens
|
|
39
|
+
|
|
40
|
+
Two greens, and only two: `link` carries text, identity verde carries marks.
|
|
41
|
+
|
|
42
|
+
| Removed | Use instead |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| `--nc-primary` | `--nc-identity-cobalto` for a brand mark, `--nc-link` for text, or the shadcn `--primary` role for the neutral action |
|
|
45
|
+
| `--nc-dark-primary` | as above; the mode layer maps `--nc-identity-cobalto` in both themes |
|
|
46
|
+
| `--nc-verde-vivo` | `--nc-identity-verde` |
|
|
47
|
+
| `--nc-dark-verde-vivo` | `--nc-identity-verde` |
|
|
48
|
+
|
|
49
|
+
The shadcn `primary` role is unchanged and still resolves to the neutral action
|
|
50
|
+
family. `success` and `state-complete` are unchanged.
|
|
51
|
+
|
|
52
|
+
## Motion tokens
|
|
53
|
+
|
|
54
|
+
| Removed | Use instead |
|
|
55
|
+
| --- | --- |
|
|
56
|
+
| `--nc-duration-spin` | nothing; a busy spinner is not an Agent |
|
|
57
|
+
| `--nc-duration-typing` | nothing; the typewriter line is retired |
|
|
58
|
+
| `--nc-duration-shimmer` | nothing; the shimmer systems are retired |
|
|
59
|
+
| `--nc-duration-pulse` | `--nc-duration-wait`, for the one waiting line |
|
|
60
|
+
| `.nc-anim-typing`, `.nc-anim-pulse`, `.nc-anim-shimmer` | nothing; only Agents move on their own |
|
|
61
|
+
|
|
62
|
+
One default transition in every product, `confirm` on `out-strong`, is declared
|
|
63
|
+
once in the shipped `motion.css`. One reduced-motion policy replaces the
|
|
64
|
+
per-component switches: movement stops and paint continues, so an overlay keeps
|
|
65
|
+
its fade and only the transform or scale it would have travelled is dropped. A
|
|
66
|
+
component that answered reduced motion with `motion-reduce:transition-none` on a
|
|
67
|
+
paint-only transition should drop that class; one on a mixed transition should
|
|
68
|
+
narrow to `motion-reduce:transition-opacity` instead.
|
|
69
|
+
|
|
70
|
+
## Elevation
|
|
71
|
+
|
|
72
|
+
In dark mode the four rungs step their ring: resting 12%, raised 16%, floating
|
|
73
|
+
22%, modal 28% white, in place of one 18% ring on every rung. Light mode and the
|
|
74
|
+
shadow falloff are unchanged, and the `nc-elevation-*` utilities are unchanged,
|
|
75
|
+
so a consumer that uses the rung by name needs no edit.
|
|
76
|
+
|
|
77
|
+
## Agent colours
|
|
78
|
+
|
|
79
|
+
`agentOrbColors` is `cobalto`, `verde` and `arancio`, beside the inherited
|
|
80
|
+
default. Rosso left the picker because it is exactly the error red, and a red
|
|
81
|
+
Agent beside a red status badge read as a broken Agent. `agentOrbColorValues`
|
|
82
|
+
and `agentOrbColorTokens` lose their `rosso` entry with it, so a caller that
|
|
83
|
+
indexed either by a stored string must go through `resolveAgentOrb`, which maps
|
|
84
|
+
a stored rosso, by name or by the `#d3302f` hex, to arancio. The retired
|
|
85
|
+
spelling is exported as `retiredAgentOrbColorValues` for fixtures and tests.
|
|
86
|
+
Nadia's ribbon keeps its rosso stripe.
|
|
87
|
+
|
|
88
|
+
## Removed components
|
|
89
|
+
|
|
90
|
+
| Removed | Use instead |
|
|
91
|
+
| --- | --- |
|
|
92
|
+
| `components/brand` (`BrandLockup`) | `BrandWordmark` |
|
|
93
|
+
|
|
94
|
+
There is no lockup any more. The wordmark names the company in full and the n
|
|
95
|
+
is already inside it, so a placement carrying `BrandMark` and `BrandWordmark`
|
|
96
|
+
together draws the letter twice; pick the one form the space allows.
|
|
97
|
+
`BrandMark` and `BrandWordmark` keep their props, and their default accessible
|
|
98
|
+
name is now `nadicode`.
|
|
99
|
+
|
|
100
|
+
## Removed assets
|
|
101
|
+
|
|
102
|
+
The design system publishes seven files, as SVG and as transparent PNG, under
|
|
103
|
+
the names the ADR gives them. Append `.png` to any route for the raster.
|
|
104
|
+
|
|
105
|
+
| Removed | Use instead |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| `assets/logo-lockup`, `assets/logo-wordmark` | `assets/logo` |
|
|
108
|
+
| `assets/logo-lockup-inverse`, `assets/logo-wordmark-inverse` | `assets/logo-white` |
|
|
109
|
+
| `assets/logo-lockup-mono`, `assets/logo-wordmark-mono` | `assets/logo-one-ink` |
|
|
110
|
+
| `assets/logo-mark` | `assets/mark` |
|
|
111
|
+
| `assets/logo-mark-inverse` | `assets/mark-white` |
|
|
112
|
+
| `assets/logo-mark-mono` | `assets/mark`; the n is one ink already |
|
|
113
|
+
| `assets/logo-lockup-on-verde`, `assets/logo-mark-on-verde`, `assets/logo-wordmark-on-verde` | No replacement. The logo is never mounted on a verde field. |
|
|
114
|
+
|
|
115
|
+
Added: `assets/logo-one-ink-white`, the one-ink wordmark on a dark ground, and
|
|
116
|
+
`assets/app-icon`, the white n on the cobalto tile at 1024 for an application
|
|
117
|
+
icon slot. The one-ink files exist for embossing, stamps and one-colour print,
|
|
118
|
+
where a second colour cannot be laid down.
|
|
119
|
+
|
|
120
|
+
`assets/logo-geometry` keeps its route and changes shape. `LogoPaints` is now a
|
|
121
|
+
record of paint roles, `ink` for every stroked letter, `dot` for the dot over
|
|
122
|
+
the i and `tile` for the icon's field, and a geometry that names a role the
|
|
123
|
+
caller did not supply throws instead of rendering an unpainted shape.
|
|
124
|
+
`resolveLogoGeometry` no longer takes `idPrefix`: the geometry emits no DOM id,
|
|
125
|
+
so two logos on a page cannot collide. `logoLockupGeometry` is removed;
|
|
126
|
+
`logoWordmarkGeometry` and `logoMarkGeometry` remain and `logoIconGeometry`
|
|
127
|
+
is added.
|
|
128
|
+
|
|
129
|
+
## Tokens
|
|
130
|
+
|
|
131
|
+
| Added | Why |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| `--nc-logo-dot` | The dot's colour, #1e3cff, and the only token a consumer paints it with. |
|
|
134
|
+
| `--nc-logo-dot` under `.dark` | #4d6bff, so the dot does not sink into black. |
|
|
135
|
+
|
|
136
|
+
A consumer that painted the logo with `--nc-primary` moves to `--nc-logo-dot`.
|
|
137
|
+
The generated mode layer flips it under any dark ancestor, so one rendered form
|
|
138
|
+
serves both grounds.
|
|
139
|
+
|
|
140
|
+
## The name
|
|
141
|
+
|
|
142
|
+
The company is nadicode, lowercase. Package names and domains are unchanged;
|
|
143
|
+
the accessible name of every shipped logo file and both React adapters is now
|
|
144
|
+
`nadicode`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadicodeai/ui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"types": "./dist/agents.d.ts",
|
|
21
21
|
"import": "./dist/agents.js"
|
|
22
22
|
},
|
|
23
|
-
"./
|
|
24
|
-
"types": "./dist/
|
|
25
|
-
"import": "./dist/
|
|
23
|
+
"./agent-orb": {
|
|
24
|
+
"types": "./dist/agent-orb.d.ts",
|
|
25
|
+
"import": "./dist/agent-orb.js"
|
|
26
26
|
},
|
|
27
27
|
"./hooks": {
|
|
28
28
|
"types": "./dist/hooks/index.d.ts",
|
|
@@ -43,7 +43,9 @@
|
|
|
43
43
|
"./components/*": {
|
|
44
44
|
"types": "./dist/components/*.d.ts",
|
|
45
45
|
"import": "./dist/components/*.js"
|
|
46
|
-
}
|
|
46
|
+
},
|
|
47
|
+
"./assets/brand/index.json": "./dist/assets/brand/index.json",
|
|
48
|
+
"./assets/brand/*": "./dist/assets/brand/*"
|
|
47
49
|
},
|
|
48
50
|
"files": [
|
|
49
51
|
"dist",
|
|
@@ -70,7 +72,7 @@
|
|
|
70
72
|
"@assistant-ui/react": "0.15.21",
|
|
71
73
|
"@assistant-ui/react-markdown": "0.14.16",
|
|
72
74
|
"@base-ui/react": "^1.8.0",
|
|
73
|
-
"@nadicodeai/design-system": "
|
|
75
|
+
"@nadicodeai/design-system": "10.0.0",
|
|
74
76
|
"class-variance-authority": "^0.7.1",
|
|
75
77
|
"clsx": "^2.1.1",
|
|
76
78
|
"cmdk": "^1.1.1",
|
|
@@ -89,7 +91,6 @@
|
|
|
89
91
|
"tailwind-merge": "^3.7.0",
|
|
90
92
|
"thinking-orbs": "0.3.1",
|
|
91
93
|
"tw-animate-css": "^1.4.0",
|
|
92
|
-
"tw-shimmer": "0.4.13",
|
|
93
94
|
"zustand": "^5.0.14"
|
|
94
95
|
},
|
|
95
96
|
"peerDependencies": {
|
package/dist/activity.d.ts
DELETED
package/dist/activity.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/activity.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { type CSSProperties } from "react";
|
|
2
|
-
import { type ActivityKind, type ActivityOrbSize } from "../internal/activity-orb.js";
|
|
3
|
-
export type { ActivityKind, ActivityOrbSize } from "../internal/activity-orb.js";
|
|
4
|
-
export type ActivityOrbProps = {
|
|
5
|
-
activity: ActivityKind;
|
|
6
|
-
className?: string;
|
|
7
|
-
style?: CSSProperties;
|
|
8
|
-
/** Freeze the animation for a preview or a user-controlled motion pause. */
|
|
9
|
-
paused?: boolean;
|
|
10
|
-
/** 20 inline, 64 within a region, 88 on an application's entry screen. */
|
|
11
|
-
size?: ActivityOrbSize;
|
|
12
|
-
} & ({
|
|
13
|
-
decorative: true;
|
|
14
|
-
label?: never;
|
|
15
|
-
} | {
|
|
16
|
-
decorative?: false;
|
|
17
|
-
label: string;
|
|
18
|
-
});
|
|
19
|
-
/** The shared system-activity family. The consumer owns the actual operation. */
|
|
20
|
-
export declare function ActivityOrb({ activity, className, decorative, label, paused, size, style, ...props }: ActivityOrbProps): import("react").JSX.Element;
|
|
21
|
-
//# sourceMappingURL=activity-orb.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"activity-orb.d.ts","sourceRoot":"","sources":["../../src/components/activity-orb.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAoB,MAAM,yBAAyB,CAAC;AAGpG,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,GAAG,CAAC;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElF,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,UAAkB,EAClB,KAAK,EACL,MAAc,EACd,IAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAmClB"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useRef } from "react";
|
|
4
|
-
import { mountActivityOrb } from "../internal/activity-orb.js";
|
|
5
|
-
import { cn } from "../lib/utils.js";
|
|
6
|
-
/** The shared system-activity family. The consumer owns the actual operation. */
|
|
7
|
-
export function ActivityOrb({ activity, className, decorative = false, label, paused = false, size = 20, style, ...props }) {
|
|
8
|
-
const canvas = useRef(null);
|
|
9
|
-
const renderer = useRef(null);
|
|
10
|
-
const initiallyPaused = useRef(paused);
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
if (!canvas.current)
|
|
13
|
-
return;
|
|
14
|
-
const mounted = mountActivityOrb(canvas.current, activity, size, initiallyPaused.current);
|
|
15
|
-
renderer.current = mounted;
|
|
16
|
-
return () => {
|
|
17
|
-
mounted.destroy();
|
|
18
|
-
renderer.current = null;
|
|
19
|
-
};
|
|
20
|
-
}, [activity, size]);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
initiallyPaused.current = paused;
|
|
23
|
-
renderer.current?.setPaused(paused);
|
|
24
|
-
}, [activity, paused, size]);
|
|
25
|
-
return (_jsx("canvas", { ...props, "aria-hidden": decorative || undefined, "aria-label": decorative ? undefined : label, className: cn("inline-block shrink-0 align-middle", className), "data-activity": activity, "data-slot": "activity-orb", height: size, ref: canvas, role: decorative ? undefined : "img", style: { ...style, height: size, width: size }, width: size, children: decorative ? null : label }));
|
|
26
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
type BenefitItem = {
|
|
3
|
-
title: string;
|
|
4
|
-
body: string;
|
|
5
|
-
};
|
|
6
|
-
declare function BenefitsBento({ kicker, title, body, image, benefits, ...props }: React.ComponentProps<"div"> & {
|
|
7
|
-
kicker: string;
|
|
8
|
-
title: string;
|
|
9
|
-
body: string;
|
|
10
|
-
image: React.ReactNode;
|
|
11
|
-
benefits: BenefitItem[];
|
|
12
|
-
}): React.JSX.Element;
|
|
13
|
-
export { BenefitsBento };
|
|
14
|
-
export type { BenefitItem };
|
|
15
|
-
//# sourceMappingURL=benefits-bento.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"benefits-bento.d.ts","sourceRoot":"","sources":["../../src/components/benefits-bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,iBAAS,aAAa,CAAC,EACrB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,qBAuBA;AAED,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Bento, BentoItem } from "./bento.js";
|
|
3
|
-
function BenefitsBento({ kicker, title, body, image, benefits, ...props }) {
|
|
4
|
-
return (_jsx("div", { "data-slot": "benefits-bento", ...props, children: _jsxs(Bento, { columns: 2, children: [_jsx(BentoItem, { flush: true, stretch: true, children: image }), _jsxs(BentoItem, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h2", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-md text-[var(--nc-body)]", children: body }), _jsx("div", { className: "grid gap-4 pt-2 sm:grid-cols-2", children: benefits.map((benefit) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("h3", { className: "nc-type-body-md-strong text-foreground", children: benefit.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: benefit.body })] }, benefit.title))) })] })] }) }));
|
|
5
|
-
}
|
|
6
|
-
export { BenefitsBento };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
/**
|
|
3
|
-
* bento — NadicodeAI's bordered marketing grid grammar.
|
|
4
|
-
*
|
|
5
|
-
* This is the reusable shadcn-style source component for bento sections. The
|
|
6
|
-
* grid owns seams once (`gap-px bg-border`, via `SeamGrid` with no `surface`);
|
|
7
|
-
* cells are borderless fills. Pages choose content and spans, not border math.
|
|
8
|
-
*
|
|
9
|
-
* `tone="night"` renders the always-dark V5 bento: rather than a `dark:` utility
|
|
10
|
-
* (forbidden) it sets the `dark` ancestor class on the grid root, so the seam
|
|
11
|
-
* (`bg-border`), the `bg-card` cell fills, and the `BentoIndex`/`BentoTitle`/
|
|
12
|
-
* `BentoBody` roles all resolve to their dark values. Only standard shadcn role
|
|
13
|
-
* utilities are composed. Token-only.
|
|
14
|
-
*/
|
|
15
|
-
declare const spanClasses: Record<number, string>;
|
|
16
|
-
declare const columnClasses: Record<number, string>;
|
|
17
|
-
declare function Bento({ className, height, columns, tone, ...props }: React.ComponentProps<"div"> & {
|
|
18
|
-
height?: "auto" | "primary" | "secondary";
|
|
19
|
-
columns?: keyof typeof columnClasses;
|
|
20
|
-
tone?: "canvas" | "night";
|
|
21
|
-
}): React.JSX.Element;
|
|
22
|
-
declare function BentoItem({ className, span, surface, flush, stretch, hover, ...props }: React.ComponentProps<"div"> & {
|
|
23
|
-
span?: keyof typeof spanClasses;
|
|
24
|
-
surface?: "card" | "soft" | "transparent";
|
|
25
|
-
flush?: boolean;
|
|
26
|
-
stretch?: boolean;
|
|
27
|
-
hover?: boolean;
|
|
28
|
-
}): React.JSX.Element;
|
|
29
|
-
declare function BentoIndex({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
|
|
30
|
-
declare function BentoTitle({ className, ...props }: React.ComponentProps<"h3">): React.JSX.Element;
|
|
31
|
-
declare function BentoBody({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
|
|
32
|
-
declare function BentoCopy({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
33
|
-
declare function BentoMedia({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
34
|
-
declare function BentoDemo({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
35
|
-
declare function BentoDivider({ label, className, ...props }: React.ComponentProps<"div"> & {
|
|
36
|
-
label?: string;
|
|
37
|
-
}): React.JSX.Element;
|
|
38
|
-
export { Bento, BentoItem, BentoIndex, BentoTitle, BentoBody, BentoCopy, BentoMedia, BentoDemo, BentoDivider, };
|
|
39
|
-
//# sourceMappingURL=bento.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bento.d.ts","sourceRoot":"","sources":["../../src/components/bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;;GAYG;AAEH,QAAA,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAavC,CAAC;AAEF,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKzC,CAAC;AAEF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,MAAe,EACf,OAAY,EACZ,IAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,OAAO,aAAa,CAAC;IACrC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC3B,qBAkBA;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,IAAI,EACJ,OAAgB,EAChB,KAAa,EACb,OAAe,EACf,KAAa,EACb,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,qBAoBA;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAQtE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQpE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAItE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQtE;AAED,iBAAS,YAAY,CAAC,EACpB,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,qBAUlD;AAED,OAAO,EACL,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,GACb,CAAC"}
|
package/dist/components/bento.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "../lib/utils.js";
|
|
3
|
-
import { SeamGrid } from "./seam-grid.js";
|
|
4
|
-
/**
|
|
5
|
-
* bento — NadicodeAI's bordered marketing grid grammar.
|
|
6
|
-
*
|
|
7
|
-
* This is the reusable shadcn-style source component for bento sections. The
|
|
8
|
-
* grid owns seams once (`gap-px bg-border`, via `SeamGrid` with no `surface`);
|
|
9
|
-
* cells are borderless fills. Pages choose content and spans, not border math.
|
|
10
|
-
*
|
|
11
|
-
* `tone="night"` renders the always-dark V5 bento: rather than a `dark:` utility
|
|
12
|
-
* (forbidden) it sets the `dark` ancestor class on the grid root, so the seam
|
|
13
|
-
* (`bg-border`), the `bg-card` cell fills, and the `BentoIndex`/`BentoTitle`/
|
|
14
|
-
* `BentoBody` roles all resolve to their dark values. Only standard shadcn role
|
|
15
|
-
* utilities are composed. Token-only.
|
|
16
|
-
*/
|
|
17
|
-
const spanClasses = {
|
|
18
|
-
1: "lg:col-span-1",
|
|
19
|
-
2: "lg:col-span-2",
|
|
20
|
-
3: "lg:col-span-3",
|
|
21
|
-
4: "lg:col-span-4",
|
|
22
|
-
5: "lg:col-span-5",
|
|
23
|
-
6: "lg:col-span-6",
|
|
24
|
-
7: "lg:col-span-7",
|
|
25
|
-
8: "lg:col-span-8",
|
|
26
|
-
9: "lg:col-span-9",
|
|
27
|
-
10: "lg:col-span-10",
|
|
28
|
-
11: "lg:col-span-11",
|
|
29
|
-
12: "lg:col-span-12",
|
|
30
|
-
};
|
|
31
|
-
const columnClasses = {
|
|
32
|
-
2: "grid-cols-1 md:grid-cols-2",
|
|
33
|
-
3: "grid-cols-1 md:grid-cols-3",
|
|
34
|
-
4: "grid-cols-1 md:grid-cols-4",
|
|
35
|
-
12: "grid-cols-1 lg:grid-cols-12",
|
|
36
|
-
};
|
|
37
|
-
function Bento({ className, height = "auto", columns = 12, tone = "canvas", ...props }) {
|
|
38
|
-
return (_jsx(SeamGrid, { "data-slot": "bento", "data-height": height, "data-tone": tone, className: cn("items-stretch",
|
|
39
|
-
// always-dark V5 bento: flip roles via the ancestor class, not `dark:`.
|
|
40
|
-
tone === "night" && "dark", columnClasses[columns], height === "primary" && "lg:h-[var(--nc-h-bento-primary)]", height === "secondary" && "lg:h-[var(--nc-h-bento-secondary)]", className), ...props }));
|
|
41
|
-
}
|
|
42
|
-
function BentoItem({ className, span, surface = "card", flush = false, stretch = false, hover = false, ...props }) {
|
|
43
|
-
return (_jsx("div", { "data-slot": "bento-item", "data-surface": surface, className: cn("nc-panel-cell relative min-w-0 overflow-hidden", span ? spanClasses[span] : null, surface === "card" && "bg-card",
|
|
44
|
-
// `muted` (== canvas-soft) flips with any `.dark` ancestor.
|
|
45
|
-
surface === "soft" && "bg-muted",
|
|
46
|
-
// V5 hover surface shift: card fill lifts toward the muted role.
|
|
47
|
-
hover && "transition-colors hover:bg-muted", flush && "!p-0", stretch && "items-stretch ![align-content:stretch] ![grid-template-rows:minmax(0,1fr)]", className), ...props }));
|
|
48
|
-
}
|
|
49
|
-
function BentoIndex({ className, ...props }) {
|
|
50
|
-
return (_jsx("span", { "data-slot": "bento-index", className: cn("nc-type-caption-mono text-primary", className), ...props }));
|
|
51
|
-
}
|
|
52
|
-
function BentoTitle({ className, ...props }) {
|
|
53
|
-
return (_jsx("h3", { "data-slot": "bento-title", className: cn("nc-type-body-md-strong text-foreground", className), ...props }));
|
|
54
|
-
}
|
|
55
|
-
function BentoBody({ className, ...props }) {
|
|
56
|
-
return (_jsx("p", { "data-slot": "bento-body", className: cn("nc-type-body-sm text-muted-foreground", className), ...props }));
|
|
57
|
-
}
|
|
58
|
-
function BentoCopy({ className, ...props }) {
|
|
59
|
-
return (_jsx("div", { "data-slot": "bento-copy", className: cn("relative z-10 grid gap-4", className), ...props }));
|
|
60
|
-
}
|
|
61
|
-
function BentoMedia({ className, ...props }) {
|
|
62
|
-
return (_jsx("div", { "data-slot": "bento-media", className: cn("grid min-h-0 items-stretch", className), ...props }));
|
|
63
|
-
}
|
|
64
|
-
function BentoDemo({ className, ...props }) {
|
|
65
|
-
return (_jsx("div", { "data-slot": "bento-demo", className: cn("grid min-h-0 items-stretch", className), ...props }));
|
|
66
|
-
}
|
|
67
|
-
function BentoDivider({ label, className, ...props }) {
|
|
68
|
-
return (_jsx("div", { "data-slot": "bento-divider", className: cn("grid bg-card", className), ...props, children: _jsx("div", { className: "nc-dotted-field grid min-h-[calc(var(--nc-h-bento-strip)*2)] place-items-center bg-card", children: label ? (_jsx("span", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: label })) : null }) }));
|
|
69
|
-
}
|
|
70
|
-
export { Bento, BentoItem, BentoIndex, BentoTitle, BentoBody, BentoCopy, BentoMedia, BentoDemo, BentoDivider, };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
type SpinnerName = "braille" | "braillewave" | "dna" | "scan" | "rain" | "scanline" | "pulse" | "snake" | "sparkle" | "cascade" | "columns" | "orbit" | "breathe" | "waverows" | "checkerboard" | "helix" | "fillsweep" | "diagswipe";
|
|
2
|
-
interface GlyphSpinnerProps {
|
|
3
|
-
ariaLabel?: string;
|
|
4
|
-
className?: string;
|
|
5
|
-
spinner?: SpinnerName;
|
|
6
|
-
}
|
|
7
|
-
declare function GlyphSpinner({ ariaLabel, className, spinner, }: GlyphSpinnerProps): import("react").JSX.Element;
|
|
8
|
-
export { GlyphSpinner };
|
|
9
|
-
export type { SpinnerName };
|
|
10
|
-
//# sourceMappingURL=glyph-spinner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glyph-spinner.d.ts","sourceRoot":"","sources":["../../src/components/glyph-spinner.tsx"],"names":[],"mappings":"AAKA,KAAK,WAAW,GACZ,SAAS,GACT,aAAa,GACb,KAAK,GACL,MAAM,GACN,MAAM,GACN,UAAU,GACV,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,SAAS,GACT,UAAU,GACV,cAAc,GACd,OAAO,GACP,WAAW,GACX,WAAW,CAAC;AAuFhB,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AACD,iBAAS,YAAY,CAAC,EACpB,SAAqB,EACrB,SAAS,EACT,OAAmB,GACpB,EAAE,iBAAiB,+BAwBnB;AACD,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
4
|
-
import { cn } from "../lib/utils.js";
|
|
5
|
-
const FRAMES_BY_NAME = {
|
|
6
|
-
braille: {
|
|
7
|
-
frames: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
|
|
8
|
-
interval: 80,
|
|
9
|
-
},
|
|
10
|
-
braillewave: {
|
|
11
|
-
frames: ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"],
|
|
12
|
-
interval: 100,
|
|
13
|
-
},
|
|
14
|
-
dna: {
|
|
15
|
-
frames: ["⠋", "⠉", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠤", "⠄"],
|
|
16
|
-
interval: 80,
|
|
17
|
-
},
|
|
18
|
-
scan: {
|
|
19
|
-
frames: ["⠀", "⡇", "⣿", "⢸", "⠀", "⠀", "⠀", "⠀", "⠀", "⠀"],
|
|
20
|
-
interval: 70,
|
|
21
|
-
},
|
|
22
|
-
rain: {
|
|
23
|
-
frames: ["⢁", "⠂", "⠄", "⡈", "⠐", "⠠", "⢁", "⠂", "⠄", "⡈", "⠐", "⠠"],
|
|
24
|
-
interval: 100,
|
|
25
|
-
},
|
|
26
|
-
scanline: { frames: ["⠉", "⠓", "⠦", "⣄", "⠦", "⠓"], interval: 120 },
|
|
27
|
-
pulse: { frames: ["⠀", "⠰", "⢾", "⣏", "⡁"], interval: 180 },
|
|
28
|
-
snake: {
|
|
29
|
-
frames: ["⣁", "⣉", "⡉", "⠉", "⠈", "⠀", "⠐", "⠒", "⠖", "⠶", "⠦", "⠤", "⠠", "⠀", "⢀", "⣀"],
|
|
30
|
-
interval: 80,
|
|
31
|
-
},
|
|
32
|
-
sparkle: { frames: ["⡡", "⠊", "⢔", "⡁", "⢔", "⠨"], interval: 150 },
|
|
33
|
-
cascade: {
|
|
34
|
-
frames: ["⠀", "⠀", "⠁", "⠋", "⠞", "⡴", "⣠", "⢀", "⠀", "⠀", "⠀", "⠀", "⠀", "⠀"],
|
|
35
|
-
interval: 60,
|
|
36
|
-
},
|
|
37
|
-
columns: {
|
|
38
|
-
frames: [
|
|
39
|
-
"⡀",
|
|
40
|
-
"⡄",
|
|
41
|
-
"⡆",
|
|
42
|
-
"⡇",
|
|
43
|
-
"⣇",
|
|
44
|
-
"⣧",
|
|
45
|
-
"⣷",
|
|
46
|
-
"⣿",
|
|
47
|
-
"⣿",
|
|
48
|
-
"⣿",
|
|
49
|
-
"⣿",
|
|
50
|
-
"⣿",
|
|
51
|
-
"⣿",
|
|
52
|
-
"⣿",
|
|
53
|
-
"⣿",
|
|
54
|
-
"⣿",
|
|
55
|
-
"⣿",
|
|
56
|
-
"⣿",
|
|
57
|
-
"⣿",
|
|
58
|
-
"⣿",
|
|
59
|
-
"⣿",
|
|
60
|
-
"⣿",
|
|
61
|
-
"⣿",
|
|
62
|
-
"⣿",
|
|
63
|
-
"⣿",
|
|
64
|
-
"⠀",
|
|
65
|
-
],
|
|
66
|
-
interval: 60,
|
|
67
|
-
},
|
|
68
|
-
orbit: { frames: ["⠃", "⠉", "⠘", "⠰", "⢠", "⣀", "⡄", "⠆"], interval: 100 },
|
|
69
|
-
breathe: {
|
|
70
|
-
frames: ["⠀", "⠂", "⠌", "⡑", "⢕", "⢝", "⣫", "⣟", "⣿", "⣟", "⣫", "⢝", "⢕", "⡑", "⠌", "⠂", "⠀"],
|
|
71
|
-
interval: 100,
|
|
72
|
-
},
|
|
73
|
-
waverows: {
|
|
74
|
-
frames: ["⠖", "⡠", "⣠", "⣄", "⠢", "⠙", "⠉", "⠊", "⠜", "⡤", "⣀", "⢤", "⠣", "⠑", "⠉", "⠋"],
|
|
75
|
-
interval: 90,
|
|
76
|
-
},
|
|
77
|
-
checkerboard: { frames: ["⢕", "⡪", "⢊", "⡡"], interval: 250 },
|
|
78
|
-
helix: {
|
|
79
|
-
frames: ["⢌", "⣉", "⣉", "⡱", "⢎", "⣉", "⣉", "⡱", "⢎", "⣉", "⣉", "⡱", "⢎", "⣉", "⣉", "⡱"],
|
|
80
|
-
interval: 80,
|
|
81
|
-
},
|
|
82
|
-
fillsweep: {
|
|
83
|
-
frames: ["⣀", "⣤", "⣶", "⣿", "⣿", "⣿", "⣶", "⣤", "⣀", "⠀", "⠀"],
|
|
84
|
-
interval: 100,
|
|
85
|
-
},
|
|
86
|
-
diagswipe: {
|
|
87
|
-
frames: ["⠁", "⠋", "⠟", "⡿", "⣿", "⣿", "⣿", "⣿", "⣾", "⣴", "⣠", "⢀", "⠀", "⠀", "⠀", "⠀"],
|
|
88
|
-
interval: 60,
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
function GlyphSpinner({ ariaLabel = "Loading", className, spinner = "braille", }) {
|
|
92
|
-
const spin = FRAMES_BY_NAME[spinner];
|
|
93
|
-
const [frame, setFrame] = useState(0);
|
|
94
|
-
useEffect(() => {
|
|
95
|
-
setFrame(0);
|
|
96
|
-
const id = window.setInterval(() => setFrame((value) => (value + 1) % spin.frames.length), spin.interval);
|
|
97
|
-
return () => window.clearInterval(id);
|
|
98
|
-
}, [spin]);
|
|
99
|
-
return (_jsx("span", { "aria-label": ariaLabel, className: cn("inline-flex items-center justify-center font-mono leading-none tabular-nums", className), "data-slot": "glyph-spinner", role: "status", children: spin.frames[frame] }));
|
|
100
|
-
}
|
|
101
|
-
export { GlyphSpinner };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
/**
|
|
3
|
-
* nav-bar — the fixed, always-dark glass navigation bar.
|
|
4
|
-
*
|
|
5
|
-
* A three-track grid (`1fr auto 1fr`): logo lockup leading, route links centered,
|
|
6
|
-
* CTA cluster trailing. It is a PERMANENT dark glass bar regardless of the page
|
|
7
|
-
* section it floats over, so the root carries its own `dark` ancestor class and
|
|
8
|
-
* resolves every surface from semantic roles. `GlassControl` owns the complete
|
|
9
|
-
* glass material; this component contributes only navigation layout.
|
|
10
|
-
*
|
|
11
|
-
* `position: fixed` pins it to the viewport top; the consuming page owns the top
|
|
12
|
-
* padding that clears it. Below ~960px the centered links slot hides and the grid
|
|
13
|
-
* collapses to logo + CTA.
|
|
14
|
-
*
|
|
15
|
-
* A11y: links/triggers expose a `--ring` focus outline; the consumer wraps this in
|
|
16
|
-
* a `<nav aria-label>`. Token-only; the root sets its own `dark` class (an accepted
|
|
17
|
-
* ancestor-class remap), never `dark:` utilities.
|
|
18
|
-
*/
|
|
19
|
-
declare function NavBar({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
20
|
-
declare function NavBarLogo({ className, ...props }: React.ComponentProps<"a">): React.JSX.Element;
|
|
21
|
-
declare function NavBarLinks({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
22
|
-
declare function NavBarCta({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
23
|
-
export { NavBar, NavBarLogo, NavBarLinks, NavBarCta };
|
|
24
|
-
//# sourceMappingURL=nav-bar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nav-bar.d.ts","sourceRoot":"","sources":["../../src/components/nav-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;;;;;;;;;GAgBG;AAEH,iBAAS,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAYnE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAWrE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAexE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQtE;AAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { GlassControl } from "./glass-control.js";
|
|
3
|
-
import { cn } from "../lib/utils.js";
|
|
4
|
-
/**
|
|
5
|
-
* nav-bar — the fixed, always-dark glass navigation bar.
|
|
6
|
-
*
|
|
7
|
-
* A three-track grid (`1fr auto 1fr`): logo lockup leading, route links centered,
|
|
8
|
-
* CTA cluster trailing. It is a PERMANENT dark glass bar regardless of the page
|
|
9
|
-
* section it floats over, so the root carries its own `dark` ancestor class and
|
|
10
|
-
* resolves every surface from semantic roles. `GlassControl` owns the complete
|
|
11
|
-
* glass material; this component contributes only navigation layout.
|
|
12
|
-
*
|
|
13
|
-
* `position: fixed` pins it to the viewport top; the consuming page owns the top
|
|
14
|
-
* padding that clears it. Below ~960px the centered links slot hides and the grid
|
|
15
|
-
* collapses to logo + CTA.
|
|
16
|
-
*
|
|
17
|
-
* A11y: links/triggers expose a `--ring` focus outline; the consumer wraps this in
|
|
18
|
-
* a `<nav aria-label>`. Token-only; the root sets its own `dark` class (an accepted
|
|
19
|
-
* ancestor-class remap), never `dark:` utilities.
|
|
20
|
-
*/
|
|
21
|
-
function NavBar({ className, ...props }) {
|
|
22
|
-
return (_jsx(GlassControl, { "data-slot": "nav-bar", shape: "bar", className: cn("dark fixed inset-x-0 top-0 z-30 grid min-h-16 grid-cols-[1fr_auto] items-center gap-4 px-4 py-3 text-foreground sm:px-8 lg:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)]", className), ...props }));
|
|
23
|
-
}
|
|
24
|
-
function NavBarLogo({ className, ...props }) {
|
|
25
|
-
return (_jsx("a", { "data-slot": "nav-bar-logo", className: cn("inline-flex w-fit items-center gap-2.5 text-sm font-semibold text-foreground no-underline [&_img]:block [&_img]:h-7 [&_img]:w-auto [&_svg]:block [&_svg]:h-7 [&_svg]:w-auto", className), ...props }));
|
|
26
|
-
}
|
|
27
|
-
function NavBarLinks({ className, ...props }) {
|
|
28
|
-
return (_jsx("div", { "data-slot": "nav-bar-links", className: cn("hidden items-center justify-center gap-1 text-sm text-muted-foreground lg:inline-flex",
|
|
29
|
-
// each link reads as a flat pill with hover/focus affordance against the glass.
|
|
30
|
-
"[&_a]:rounded-sm [&_a]:px-3 [&_a]:py-2 [&_a]:text-inherit [&_a]:no-underline [&_a]:transition-colors", "[&_a:hover]:bg-accent [&_a:hover]:text-foreground", "[&_a[data-active]]:text-foreground", className), ...props }));
|
|
31
|
-
}
|
|
32
|
-
function NavBarCta({ className, ...props }) {
|
|
33
|
-
return (_jsx("div", { "data-slot": "nav-bar-cta", className: cn("inline-flex items-center gap-3 justify-self-end", className), ...props }));
|
|
34
|
-
}
|
|
35
|
-
export { NavBar, NavBarLogo, NavBarLinks, NavBarCta };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
/**
|
|
3
|
-
* page-frame — React shell for the kept design-system page geometry.
|
|
4
|
-
*
|
|
5
|
-
* The design-system owns the frame, row, lane, side-fill, rail, and marker CSS.
|
|
6
|
-
* This component gives website pages a small React vocabulary so they do not
|
|
7
|
-
* hand-author the same structure for every section. It intentionally does not
|
|
8
|
-
* replace the geometry layer; it only composes the approved classes.
|
|
9
|
-
*/
|
|
10
|
-
declare function PageSystem({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
11
|
-
declare function PageFrame({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
12
|
-
type PageMarkerPosition = "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
13
|
-
type PageRowProps = React.ComponentProps<"section"> & {
|
|
14
|
-
lane?: "active" | "full";
|
|
15
|
-
laneClassName?: string;
|
|
16
|
-
sideFills?: boolean;
|
|
17
|
-
marker?: PageMarkerPosition;
|
|
18
|
-
};
|
|
19
|
-
declare function PageRow({ lane, laneClassName, sideFills, marker, className, children, ...props }: PageRowProps): React.JSX.Element;
|
|
20
|
-
declare function PageLane({ lane, className, ...props }: React.ComponentProps<"div"> & {
|
|
21
|
-
lane?: "active" | "full";
|
|
22
|
-
}): React.JSX.Element;
|
|
23
|
-
declare function PageSideFill({ side, className, ...props }: React.ComponentProps<"div"> & {
|
|
24
|
-
side: "start" | "end";
|
|
25
|
-
}): React.JSX.Element;
|
|
26
|
-
declare function PageMarker({ position, className, ...props }: React.ComponentProps<"span"> & {
|
|
27
|
-
position: PageMarkerPosition;
|
|
28
|
-
}): React.JSX.Element;
|
|
29
|
-
export { PageSystem, PageFrame, PageRow, PageLane, PageSideFill, PageMarker };
|
|
30
|
-
//# sourceMappingURL=page-frame.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-frame.d.ts","sourceRoot":"","sources":["../../src/components/page-frame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;GAOG;AAEH,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAEvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAItE;AAED,KAAK,kBAAkB,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;AAEpF,KAAK,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACpD,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,iBAAS,OAAO,CAAC,EACf,IAAe,EACf,aAAa,EACb,SAAS,EACT,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,YAAY,qBAad;AAED,iBAAS,QAAQ,CAAC,EAChB,IAAe,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;CAAE,qBAS5D;AAED,iBAAS,YAAY,CAAC,EACpB,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,KAAK,CAAA;CAAE,qBAIzD;AAED,iBAAS,UAAU,CAAC,EAClB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG;IAAE,QAAQ,EAAE,kBAAkB,CAAA;CAAE,qBASjE;AAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
|