@nadicodeai/ui 9.2.1 → 10.0.1

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.
Files changed (293) hide show
  1. package/AGENTS.md +1 -0
  2. package/README.md +4 -29
  3. package/dist/agent-orb.d.ts +3 -0
  4. package/dist/agent-orb.d.ts.map +1 -0
  5. package/dist/agent-orb.js +2 -0
  6. package/dist/assets/brand/aionlabs.svg +2 -0
  7. package/dist/assets/brand/airtable.svg +2 -0
  8. package/dist/assets/brand/apple.svg +2 -0
  9. package/dist/assets/brand/arcee.svg +2 -0
  10. package/dist/assets/brand/asana.svg +2 -0
  11. package/dist/assets/brand/atlassian.svg +2 -0
  12. package/dist/assets/brand/baidu.svg +2 -0
  13. package/dist/assets/brand/bytedance.svg +2 -0
  14. package/dist/assets/brand/claude.svg +2 -0
  15. package/dist/assets/brand/cohere.svg +2 -0
  16. package/dist/assets/brand/datadog.svg +2 -0
  17. package/dist/assets/brand/deepseek.svg +2 -0
  18. package/dist/assets/brand/discord.svg +2 -0
  19. package/dist/assets/brand/dolphin.svg +2 -0
  20. package/dist/assets/brand/dotsstudio.svg +2 -0
  21. package/dist/assets/brand/figma.svg +2 -0
  22. package/dist/assets/brand/gemini.svg +2 -0
  23. package/dist/assets/brand/github.svg +2 -0
  24. package/dist/assets/brand/gitlab.svg +2 -0
  25. package/dist/assets/brand/gmail.svg +2 -0
  26. package/dist/assets/brand/google-calendar.svg +2 -0
  27. package/dist/assets/brand/google-drive.svg +2 -0
  28. package/dist/assets/brand/grok.svg +2 -0
  29. package/dist/assets/brand/huggingface.svg +2 -0
  30. package/dist/assets/brand/ibm.svg +2 -0
  31. package/dist/assets/brand/inception.svg +2 -0
  32. package/dist/assets/brand/inclusionai.svg +2 -0
  33. package/dist/assets/brand/index.json +778 -0
  34. package/dist/assets/brand/inference.svg +2 -0
  35. package/dist/assets/brand/intercom.svg +2 -0
  36. package/dist/assets/brand/jira.svg +2 -0
  37. package/dist/assets/brand/kwaipilot.svg +2 -0
  38. package/dist/assets/brand/linear.svg +2 -0
  39. package/dist/assets/brand/linux.svg +2 -0
  40. package/dist/assets/brand/liquid.svg +2 -0
  41. package/dist/assets/brand/longcat.svg +2 -0
  42. package/dist/assets/brand/mattermost.svg +2 -0
  43. package/dist/assets/brand/meta.svg +2 -0
  44. package/dist/assets/brand/microsoft.svg +2 -0
  45. package/dist/assets/brand/minimax.svg +2 -0
  46. package/dist/assets/brand/mistral.svg +2 -0
  47. package/dist/assets/brand/moonshot.svg +2 -0
  48. package/dist/assets/brand/morph.svg +2 -0
  49. package/dist/assets/brand/n8n.svg +2 -0
  50. package/dist/assets/brand/netlify.svg +2 -0
  51. package/dist/assets/brand/nexagi.svg +2 -0
  52. package/dist/assets/brand/notion.svg +2 -0
  53. package/dist/assets/brand/nousresearch.svg +2 -0
  54. package/dist/assets/brand/nova.svg +2 -0
  55. package/dist/assets/brand/nvidia.svg +2 -0
  56. package/dist/assets/brand/openai.svg +2 -0
  57. package/dist/assets/brand/openrouter.svg +2 -0
  58. package/dist/assets/brand/paypal.svg +2 -0
  59. package/dist/assets/brand/perceptron.svg +2 -0
  60. package/dist/assets/brand/perplexity.svg +2 -0
  61. package/dist/assets/brand/poolside.svg +2 -0
  62. package/dist/assets/brand/postgresql.svg +2 -0
  63. package/dist/assets/brand/qwen.svg +2 -0
  64. package/dist/assets/brand/reka.svg +2 -0
  65. package/dist/assets/brand/relace.svg +2 -0
  66. package/dist/assets/brand/sakana.svg +2 -0
  67. package/dist/assets/brand/sentry.svg +2 -0
  68. package/dist/assets/brand/signal.svg +2 -0
  69. package/dist/assets/brand/slack.svg +2 -0
  70. package/dist/assets/brand/spotify.svg +2 -0
  71. package/dist/assets/brand/square.svg +2 -0
  72. package/dist/assets/brand/stepfun.svg +2 -0
  73. package/dist/assets/brand/stripe.svg +2 -0
  74. package/dist/assets/brand/supabase.svg +2 -0
  75. package/dist/assets/brand/telegram.svg +2 -0
  76. package/dist/assets/brand/tencent.svg +2 -0
  77. package/dist/assets/brand/the-drummer.svg +2 -0
  78. package/dist/assets/brand/thinkingmachines.svg +2 -0
  79. package/dist/assets/brand/todoist.svg +2 -0
  80. package/dist/assets/brand/unbiased.svg +2 -0
  81. package/dist/assets/brand/unreal-engine.svg +2 -0
  82. package/dist/assets/brand/upstage.svg +2 -0
  83. package/dist/assets/brand/vercel.svg +2 -0
  84. package/dist/assets/brand/webflow.svg +2 -0
  85. package/dist/assets/brand/whatsapp.svg +2 -0
  86. package/dist/assets/brand/windows.svg +2 -0
  87. package/dist/assets/brand/writer.svg +2 -0
  88. package/dist/assets/brand/xiaomimimo.svg +2 -0
  89. package/dist/assets/brand/youtube.svg +2 -0
  90. package/dist/assets/brand/yuanbao.svg +2 -0
  91. package/dist/assets/brand/zai.svg +2 -0
  92. package/dist/assets/brand/zapier.svg +2 -0
  93. package/dist/components/action-status.d.ts +5 -0
  94. package/dist/components/action-status.d.ts.map +1 -1
  95. package/dist/components/action-status.js +6 -2
  96. package/dist/components/agent-orb-appearance.d.ts +16 -2
  97. package/dist/components/agent-orb-appearance.d.ts.map +1 -1
  98. package/dist/components/agent-orb-appearance.js +28 -5
  99. package/dist/components/agent-orb.d.ts +6 -3
  100. package/dist/components/agent-orb.d.ts.map +1 -1
  101. package/dist/components/agent-orb.js +20 -7
  102. package/dist/components/app-mark-aliases.d.ts +16 -0
  103. package/dist/components/app-mark-aliases.d.ts.map +1 -0
  104. package/dist/components/app-mark-aliases.js +84 -0
  105. package/dist/components/app-mark.d.ts +4 -0
  106. package/dist/components/app-mark.d.ts.map +1 -1
  107. package/dist/components/app-mark.js +14 -31
  108. package/dist/components/automation-section.d.ts.map +1 -1
  109. package/dist/components/automation-section.js +2 -2
  110. package/dist/components/badge.js +1 -1
  111. package/dist/components/brand.d.ts +3 -2
  112. package/dist/components/brand.d.ts.map +1 -1
  113. package/dist/components/brand.js +18 -28
  114. package/dist/components/button.js +1 -1
  115. package/dist/components/collection-filters.js +2 -2
  116. package/dist/components/confirm-dialog.d.ts +3 -1
  117. package/dist/components/confirm-dialog.d.ts.map +1 -1
  118. package/dist/components/confirm-dialog.js +3 -3
  119. package/dist/components/drawer.js +5 -5
  120. package/dist/components/feedback-state.d.ts.map +1 -1
  121. package/dist/components/feedback-state.js +6 -9
  122. package/dist/components/footer.js +2 -2
  123. package/dist/components/house-icons.d.ts.map +1 -1
  124. package/dist/components/house-icons.js +9 -1
  125. package/dist/components/input-otp.js +1 -1
  126. package/dist/components/installer-shell.d.ts.map +1 -1
  127. package/dist/components/installer-shell.js +5 -6
  128. package/dist/components/navigation-menu.js +2 -2
  129. package/dist/components/pending-label.d.ts +15 -0
  130. package/dist/components/pending-label.d.ts.map +1 -0
  131. package/dist/components/pending-label.js +14 -0
  132. package/dist/components/sheet.js +1 -1
  133. package/dist/components/skeleton.d.ts +4 -0
  134. package/dist/components/skeleton.d.ts.map +1 -1
  135. package/dist/components/skeleton.js +5 -1
  136. package/dist/components/sonner.d.ts.map +1 -1
  137. package/dist/components/sonner.js +5 -2
  138. package/dist/components/table.js +1 -1
  139. package/dist/components/tabs.js +1 -1
  140. package/dist/components/toggle.js +1 -1
  141. package/dist/components/waiting-line.d.ts +30 -0
  142. package/dist/components/waiting-line.d.ts.map +1 -0
  143. package/dist/components/waiting-line.js +33 -0
  144. package/dist/eslint/rules/no-invalid-token-utility.js +1 -1
  145. package/dist/index.d.ts +3 -38
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +3 -38
  148. package/dist/internal/agent-orb-motion.d.ts +9 -1
  149. package/dist/internal/agent-orb-motion.d.ts.map +1 -1
  150. package/dist/internal/agent-orb-motion.js +23 -11
  151. package/dist/internal/agent-orb.d.ts +14 -1
  152. package/dist/internal/agent-orb.d.ts.map +1 -1
  153. package/dist/internal/agent-orb.js +78 -22
  154. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
  155. package/dist/internal/assistant-ui/attachment.js +3 -2
  156. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
  157. package/dist/internal/assistant-ui/reasoning.js +4 -4
  158. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -1
  159. package/dist/internal/assistant-ui/tool-fallback.js +5 -4
  160. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
  161. package/dist/internal/assistant-ui/tool-group.js +4 -3
  162. package/dist/lib/motion.d.ts +18 -4
  163. package/dist/lib/motion.d.ts.map +1 -1
  164. package/dist/lib/motion.js +18 -4
  165. package/dist/styles/globals.css +0 -1
  166. package/docs/activity.md +99 -119
  167. package/docs/agent-orb.md +71 -20
  168. package/docs/component-classification.md +4 -4
  169. package/docs/consuming-cross-repo.md +8 -10
  170. package/docs/contract.md +10 -9
  171. package/docs/icon-assets.md +106 -0
  172. package/docs/migration/10.0.0.md +144 -0
  173. package/package.json +8 -7
  174. package/dist/activity.d.ts +0 -2
  175. package/dist/activity.d.ts.map +0 -1
  176. package/dist/activity.js +0 -2
  177. package/dist/components/action-band.d.ts +0 -12
  178. package/dist/components/action-band.d.ts.map +0 -1
  179. package/dist/components/action-band.js +0 -48
  180. package/dist/components/activity-orb.d.ts +0 -21
  181. package/dist/components/activity-orb.d.ts.map +0 -1
  182. package/dist/components/activity-orb.js +0 -26
  183. package/dist/components/benefits-bento.d.ts +0 -15
  184. package/dist/components/benefits-bento.d.ts.map +0 -1
  185. package/dist/components/benefits-bento.js +0 -6
  186. package/dist/components/bento.d.ts +0 -39
  187. package/dist/components/bento.d.ts.map +0 -1
  188. package/dist/components/bento.js +0 -70
  189. package/dist/components/card-marketing.d.ts +0 -30
  190. package/dist/components/card-marketing.d.ts.map +0 -1
  191. package/dist/components/card-marketing.js +0 -48
  192. package/dist/components/code-editor-mockup.d.ts +0 -25
  193. package/dist/components/code-editor-mockup.d.ts.map +0 -1
  194. package/dist/components/code-editor-mockup.js +0 -47
  195. package/dist/components/contact.d.ts +0 -32
  196. package/dist/components/contact.d.ts.map +0 -1
  197. package/dist/components/contact.js +0 -46
  198. package/dist/components/faq-item.d.ts +0 -25
  199. package/dist/components/faq-item.d.ts.map +0 -1
  200. package/dist/components/faq-item.js +0 -25
  201. package/dist/components/faq.d.ts +0 -20
  202. package/dist/components/faq.d.ts.map +0 -1
  203. package/dist/components/faq.js +0 -23
  204. package/dist/components/feature-grid.d.ts +0 -23
  205. package/dist/components/feature-grid.d.ts.map +0 -1
  206. package/dist/components/feature-grid.js +0 -33
  207. package/dist/components/feature-rows.d.ts +0 -23
  208. package/dist/components/feature-rows.d.ts.map +0 -1
  209. package/dist/components/feature-rows.js +0 -27
  210. package/dist/components/glyph-spinner.d.ts +0 -10
  211. package/dist/components/glyph-spinner.d.ts.map +0 -1
  212. package/dist/components/glyph-spinner.js +0 -101
  213. package/dist/components/hero-split.d.ts +0 -23
  214. package/dist/components/hero-split.d.ts.map +0 -1
  215. package/dist/components/hero-split.js +0 -35
  216. package/dist/components/hero.d.ts +0 -28
  217. package/dist/components/hero.d.ts.map +0 -1
  218. package/dist/components/hero.js +0 -45
  219. package/dist/components/integration-flow.d.ts +0 -36
  220. package/dist/components/integration-flow.d.ts.map +0 -1
  221. package/dist/components/integration-flow.js +0 -36
  222. package/dist/components/live-demo.d.ts +0 -31
  223. package/dist/components/live-demo.d.ts.map +0 -1
  224. package/dist/components/live-demo.js +0 -30
  225. package/dist/components/logo-band.d.ts +0 -33
  226. package/dist/components/logo-band.d.ts.map +0 -1
  227. package/dist/components/logo-band.js +0 -49
  228. package/dist/components/logo-tile.d.ts +0 -21
  229. package/dist/components/logo-tile.d.ts.map +0 -1
  230. package/dist/components/logo-tile.js +0 -28
  231. package/dist/components/media-mount.d.ts +0 -13
  232. package/dist/components/media-mount.d.ts.map +0 -1
  233. package/dist/components/media-mount.js +0 -15
  234. package/dist/components/nav-bar.d.ts +0 -24
  235. package/dist/components/nav-bar.d.ts.map +0 -1
  236. package/dist/components/nav-bar.js +0 -35
  237. package/dist/components/newsletter.d.ts +0 -24
  238. package/dist/components/newsletter.d.ts.map +0 -1
  239. package/dist/components/newsletter.js +0 -31
  240. package/dist/components/page-frame.d.ts +0 -30
  241. package/dist/components/page-frame.d.ts.map +0 -1
  242. package/dist/components/page-frame.js +0 -30
  243. package/dist/components/pricing-card.d.ts +0 -30
  244. package/dist/components/pricing-card.d.ts.map +0 -1
  245. package/dist/components/pricing-card.js +0 -44
  246. package/dist/components/pricing.d.ts +0 -25
  247. package/dist/components/pricing.d.ts.map +0 -1
  248. package/dist/components/pricing.js +0 -11
  249. package/dist/components/proof-slot.d.ts +0 -8
  250. package/dist/components/proof-slot.d.ts.map +0 -1
  251. package/dist/components/proof-slot.js +0 -8
  252. package/dist/components/quote-card.d.ts +0 -31
  253. package/dist/components/quote-card.d.ts.map +0 -1
  254. package/dist/components/quote-card.js +0 -48
  255. package/dist/components/seam-grid.d.ts +0 -30
  256. package/dist/components/seam-grid.d.ts.map +0 -1
  257. package/dist/components/seam-grid.js +0 -30
  258. package/dist/components/section-intro.d.ts +0 -18
  259. package/dist/components/section-intro.d.ts.map +0 -1
  260. package/dist/components/section-intro.js +0 -22
  261. package/dist/components/security-grid.d.ts +0 -25
  262. package/dist/components/security-grid.d.ts.map +0 -1
  263. package/dist/components/security-grid.js +0 -28
  264. package/dist/components/shift-band.d.ts +0 -14
  265. package/dist/components/shift-band.d.ts.map +0 -1
  266. package/dist/components/shift-band.js +0 -11
  267. package/dist/components/spinner.d.ts +0 -3
  268. package/dist/components/spinner.d.ts.map +0 -1
  269. package/dist/components/spinner.js +0 -7
  270. package/dist/components/statement.d.ts +0 -32
  271. package/dist/components/statement.d.ts.map +0 -1
  272. package/dist/components/statement.js +0 -40
  273. package/dist/components/steps.d.ts +0 -34
  274. package/dist/components/steps.d.ts.map +0 -1
  275. package/dist/components/steps.js +0 -40
  276. package/dist/components/team-grid.d.ts +0 -27
  277. package/dist/components/team-grid.d.ts.map +0 -1
  278. package/dist/components/team-grid.js +0 -30
  279. package/dist/components/testimonials.d.ts +0 -48
  280. package/dist/components/testimonials.d.ts.map +0 -1
  281. package/dist/components/testimonials.js +0 -58
  282. package/dist/components/texture-strip.d.ts +0 -22
  283. package/dist/components/texture-strip.d.ts.map +0 -1
  284. package/dist/components/texture-strip.js +0 -32
  285. package/dist/components/use-case-bento.d.ts +0 -13
  286. package/dist/components/use-case-bento.d.ts.map +0 -1
  287. package/dist/components/use-case-bento.js +0 -8
  288. package/dist/internal/activity-orb.d.ts +0 -27
  289. package/dist/internal/activity-orb.d.ts.map +0 -1
  290. package/dist/internal/activity-orb.js +0 -150
  291. package/dist/lib/seam.d.ts +0 -29
  292. package/dist/lib/seam.d.ts.map +0 -1
  293. package/dist/lib/seam.js +0 -30
@@ -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": "9.2.1",
3
+ "version": "10.0.1",
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
- "./activity": {
24
- "types": "./dist/activity.d.ts",
25
- "import": "./dist/activity.js"
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": "9.2.1",
75
+ "@nadicodeai/design-system": "10.0.1",
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": {
@@ -1,2 +0,0 @@
1
- export { mountActivityOrb, type ActivityKind, type ActivityOrbSize } from "./internal/activity-orb.js";
2
- //# sourceMappingURL=activity.d.ts.map
@@ -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,2 +0,0 @@
1
- // The same activity renderer for native startup HTML, before React is loaded.
2
- export { mountActivityOrb } from "./internal/activity-orb.js";
@@ -1,12 +0,0 @@
1
- import * as React from "react";
2
- type ActionBandProps = React.ComponentProps<"section"> & {
3
- /** Retained for consumer compatibility; the V5 band has a single fixed layout. */
4
- active?: "inset" | "full";
5
- };
6
- declare function ActionBand({ active, className, children, ...props }: ActionBandProps): React.JSX.Element;
7
- declare function ActionBandContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
- declare function ActionBandCopy({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
- declare function ActionBandHeading({ className, ...props }: React.ComponentProps<"h2">): React.JSX.Element;
10
- declare function ActionBandVisual({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
- export { ActionBand, ActionBandContent, ActionBandCopy, ActionBandHeading, ActionBandVisual };
12
- //# sourceMappingURL=action-band.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-band.d.ts","sourceRoot":"","sources":["../../src/components/action-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA8C/B,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACvD,kFAAkF;IAClF,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B,CAAC;AAEF,iBAAS,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,qBA0B7E;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW9E;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAE3E;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW7E;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7E;AAED,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,48 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- /**
4
- * action-band — the full-bleed on-verde conversion band (V5 · B19).
5
- *
6
- * A solid brand-verde field (`bg-primary`) carrying one statement and one action,
7
- * one statement, one button. The band bleeds full width; a
8
- * centred rail (`max-w-[1200px]`, left/right hairlines) holds the content, and a
9
- * crosshair marks the STRUCTURAL intersection of the rail's top edge and left edge
10
- * — it is never decorative. A fractal-noise overlay adds grain TEXTURE only (an
11
- * inline feTurbulence data-URI, carrying no colour value), layered under the copy.
12
- *
13
- * Every mark on the verde field — text, heading, crosshair, and rail hairlines —
14
- * is the ink primary-foreground role, NOT `text-foreground`. `foreground` flips to
15
- * near-white under a dark ancestor while `bg-primary` stays a bright verde field, so
16
- * ink text would turn near-white-on-verde (≈1.7:1). `primary-foreground` is ink in
17
- * both modes and the build gate guarantees it clears on the primary field. Token-only;
18
- * no raw colour values, no gradients, and no `dark:` styling.
19
- *
20
- * COMPAT: the `active` prop and the `ActionBand{Content,Copy,Visual}` parts are kept
21
- * so existing consumers still compile; their roles are re-cut for the V5 band
22
- * (Content = padded stack, Copy = rich-content wrapper, Visual = the trailing
23
- * action/media slot). `ActionBandHeading` owns the simple V5 statement treatment.
24
- * The prior two-cell ink stage is retired.
25
- */
26
- // Grain texture only — feTurbulence fractal noise, no colour literal (`#` encoded
27
- // as `%23`), so the raw-colour ban has nothing to report here.
28
- const GRAIN_TEXTURE = "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23g)'/%3E%3C/svg%3E\")";
29
- function ActionBandCrosshair() {
30
- return (_jsxs("span", { "data-slot": "action-band-crosshair", "aria-hidden": "true", className: "pointer-events-none absolute left-0 top-0 z-20 size-4 -translate-x-1/2 -translate-y-1/2", children: [_jsx("span", { className: "absolute left-1/2 top-0 h-full w-px -translate-x-1/2 bg-primary-foreground" }), _jsx("span", { className: "absolute left-0 top-1/2 h-px w-full -translate-y-1/2 bg-primary-foreground" })] }));
31
- }
32
- function ActionBand({ active, className, children, ...props }) {
33
- void active;
34
- return (_jsxs("section", { "data-slot": "action-band", className: cn("relative isolate overflow-hidden bg-primary text-primary-foreground", className), ...props, children: [_jsx("span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 z-0 opacity-20", style: { backgroundImage: GRAIN_TEXTURE } }), _jsxs("div", { "data-slot": "action-band-rail", className: "relative z-10 mx-auto w-full max-w-[1200px] border-x border-primary-foreground/15", children: [_jsx(ActionBandCrosshair, {}), children] })] }));
35
- }
36
- function ActionBandContent({ className, ...props }) {
37
- return (_jsx("div", { "data-slot": "action-band-content", className: cn("flex flex-col items-start gap-6 px-[clamp(24px,5vw,64px)] py-[clamp(64px,10vw,144px)]", className), ...props }));
38
- }
39
- function ActionBandCopy({ className, ...props }) {
40
- return _jsx("div", { "data-slot": "action-band-copy", className: cn("min-w-0", className), ...props });
41
- }
42
- function ActionBandHeading({ className, ...props }) {
43
- return (_jsx("h2", { "data-slot": "action-band-heading", className: cn("nc-type-display-md max-w-[24ch] text-balance text-primary-foreground", className), ...props }));
44
- }
45
- function ActionBandVisual({ className, ...props }) {
46
- return (_jsx("div", { "data-slot": "action-band-visual", className: cn("flex flex-wrap items-center gap-3", className), ...props }));
47
- }
48
- export { ActionBand, ActionBandContent, ActionBandCopy, ActionBandHeading, ActionBandVisual };
@@ -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"}
@@ -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,30 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * card-marketing — the self-contained marketing feature card (replaces the retired
4
- * `.nc-card-marketing` + its `data-size="lg"` / `data-surface="soft"` / media-slot
5
- * variants).
6
- *
7
- * Unlike the seam-free grid fills (stat-block / quote-card / logo-tile / fact-cell,
8
- * which are square-cornered for a holding grid), card-marketing is a SELF-CONTAINED
9
- * rounded card: it owns its full outline — exactly one `line` hairline border and
10
- * its own `rounded-md` radius — and is laid out in a flow/flex layout with
11
- * transparent gaps, never inside a seam-painting grid. The optional media slot draws
12
- * exactly one inner seam (its own bottom border); `overflow-hidden` clips the media's
13
- * square top corners to the card radius (the card owns the outer radius; the media
14
- * never re-rounds it). No other layer repeats either coordinate.
15
- *
16
- * `size="lg"` steps up to larger padding; `surface="soft"` uses the
17
- * `canvas-soft` fill. Server-renderable: the media-present padding compression is a
18
- * `:has()` variant and the title/media sizing is driven by `data-size` descendant
19
- * selectors on the parent — no client context. Token-only; no `dark:` styling.
20
- */
21
- declare function CardMarketing({ className, size, surface, ...props }: React.ComponentProps<"div"> & {
22
- size?: "default" | "lg";
23
- surface?: "canvas" | "soft";
24
- }): React.JSX.Element;
25
- declare function CardMarketingMedia({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
26
- declare function CardMarketingEyebrow({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
27
- declare function CardMarketingTitle({ className, ...props }: React.ComponentProps<"h3">): React.JSX.Element;
28
- declare function CardMarketingBody({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
29
- export { CardMarketing, CardMarketingMedia, CardMarketingEyebrow, CardMarketingTitle, CardMarketingBody, };
30
- //# sourceMappingURL=card-marketing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"card-marketing.d.ts","sourceRoot":"","sources":["../../src/components/card-marketing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,IAAgB,EAChB,OAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7B,qBA2BA;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW/E;AAED,iBAAS,oBAAoB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQ/E;AAED,iBAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAQ9E;AAED,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQ5E;AAED,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GAClB,CAAC"}
@@ -1,48 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { cn } from "../lib/utils.js";
3
- /**
4
- * card-marketing — the self-contained marketing feature card (replaces the retired
5
- * `.nc-card-marketing` + its `data-size="lg"` / `data-surface="soft"` / media-slot
6
- * variants).
7
- *
8
- * Unlike the seam-free grid fills (stat-block / quote-card / logo-tile / fact-cell,
9
- * which are square-cornered for a holding grid), card-marketing is a SELF-CONTAINED
10
- * rounded card: it owns its full outline — exactly one `line` hairline border and
11
- * its own `rounded-md` radius — and is laid out in a flow/flex layout with
12
- * transparent gaps, never inside a seam-painting grid. The optional media slot draws
13
- * exactly one inner seam (its own bottom border); `overflow-hidden` clips the media's
14
- * square top corners to the card radius (the card owns the outer radius; the media
15
- * never re-rounds it). No other layer repeats either coordinate.
16
- *
17
- * `size="lg"` steps up to larger padding; `surface="soft"` uses the
18
- * `canvas-soft` fill. Server-renderable: the media-present padding compression is a
19
- * `:has()` variant and the title/media sizing is driven by `data-size` descendant
20
- * selectors on the parent — no client context. Token-only; no `dark:` styling.
21
- */
22
- function CardMarketing({ className, size = "default", surface = "canvas", ...props }) {
23
- return (_jsx("div", { "data-slot": "card-marketing", "data-size": size, "data-surface": surface, className: cn("grid content-start overflow-hidden rounded-md border border-border text-foreground", surface === "soft" ? "bg-[var(--nc-canvas-soft)]" : "bg-card", size === "default" && [
24
- "gap-3 p-6",
25
- // media present -> compress padding; the media insets follow (below).
26
- "has-[[data-slot=card-marketing-media]]:gap-3 has-[[data-slot=card-marketing-media]]:p-4",
27
- "[&_[data-slot=card-marketing-title]]:text-xl",
28
- "[&_[data-slot=card-marketing-media]]:-mx-4 [&_[data-slot=card-marketing-media]]:-mt-4 [&_[data-slot=card-marketing-media]]:mb-1",
29
- ], size === "lg" && [
30
- "gap-4 p-8",
31
- "has-[[data-slot=card-marketing-media]]:p-6",
32
- "[&_[data-slot=card-marketing-title]]:text-2xl",
33
- "[&_[data-slot=card-marketing-media]]:-mx-6 [&_[data-slot=card-marketing-media]]:-mt-6 [&_[data-slot=card-marketing-media]]:mb-1.5",
34
- ], className), ...props }));
35
- }
36
- function CardMarketingMedia({ className, ...props }) {
37
- return (_jsx("div", { "data-slot": "card-marketing-media", className: cn("grid min-h-[132px] place-items-center border-b border-border bg-[var(--nc-canvas-soft)] text-muted-foreground", className), ...props }));
38
- }
39
- function CardMarketingEyebrow({ className, ...props }) {
40
- return (_jsx("p", { "data-slot": "card-marketing-eyebrow", className: cn("m-0 font-mono text-xs font-medium uppercase text-muted-foreground", className), ...props }));
41
- }
42
- function CardMarketingTitle({ className, ...props }) {
43
- return (_jsx("h3", { "data-slot": "card-marketing-title", className: cn("m-0 font-semibold text-foreground", className), ...props }));
44
- }
45
- function CardMarketingBody({ className, ...props }) {
46
- return (_jsx("p", { "data-slot": "card-marketing-body", className: cn("m-0 text-[var(--nc-body)]", className), ...props }));
47
- }
48
- export { CardMarketing, CardMarketingMedia, CardMarketingEyebrow, CardMarketingTitle, CardMarketingBody, };
@@ -1,25 +0,0 @@
1
- import * as React from "react";
2
- /**
3
- * code-editor-mockup — dark code/terminal preview surface (replaces the retired
4
- * `.nc-code-editor-mockup`). The brand's technical marketing visual: a dark window
5
- * (the ink/primary role) with a chrome/title bar over a mono code body. For
6
- * technical examples, not generic decoration.
7
- *
8
- * SINGLE-OWNER SEAMS: the chrome row owns exactly ONE inner hairline — its own
9
- * bottom border — between itself and the code body. The outer `rounded-md` radius
10
- * is owned once by the root, and `overflow-hidden` clips the chrome's square top
11
- * corners to it. The on-dark hairline + dots + muted-on-dark tints are all DERIVED
12
- * from the brand `line` / `canvas` / `ink` tokens via `color-mix` (the same family
13
- * the retired dark sections use), so no raw literal is introduced. The dots are
14
- * NadicodeAI-monochrome, never the macOS traffic-light colours. Token-only;
15
- * no `dark:` styling.
16
- */
17
- declare function CodeEditorMockup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
18
- declare function CodeEditorMockupChrome({ className, children, ...props }: React.ComponentProps<"div">): React.JSX.Element;
19
- declare function CodeEditorMockupTitle({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
20
- declare function CodeEditorMockupBody({ className, ...props }: React.ComponentProps<"pre">): React.JSX.Element;
21
- declare function CodeEditorMockupLine({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
22
- declare function CodeEditorMockupGutter({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
23
- declare function CodeEditorMockupComment({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
24
- export { CodeEditorMockup, CodeEditorMockupChrome, CodeEditorMockupTitle, CodeEditorMockupBody, CodeEditorMockupLine, CodeEditorMockupGutter, CodeEditorMockupComment, };
25
- //# sourceMappingURL=code-editor-mockup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code-editor-mockup.d.ts","sourceRoot":"","sources":["../../src/components/code-editor-mockup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;;;;;;GAcG;AAWH,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7E;AAED,iBAAS,sBAAsB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAkB7F;AAED,iBAAS,qBAAqB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAWnF;AAED,iBAAS,oBAAoB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjF;AAED,iBAAS,oBAAoB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAElF;AAED,iBAAS,sBAAsB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAYpF;AAED,iBAAS,uBAAuB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAQrF;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,GACxB,CAAC"}