@nadicodeai/ui 9.2.0 → 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.
Files changed (216) hide show
  1. package/AGENTS.md +1 -0
  2. package/README.md +5 -5
  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-band.js +1 -1
  94. package/dist/components/action-status.d.ts +5 -0
  95. package/dist/components/action-status.d.ts.map +1 -1
  96. package/dist/components/action-status.js +6 -2
  97. package/dist/components/agent-orb-appearance.d.ts +16 -2
  98. package/dist/components/agent-orb-appearance.d.ts.map +1 -1
  99. package/dist/components/agent-orb-appearance.js +28 -5
  100. package/dist/components/agent-orb.d.ts +6 -3
  101. package/dist/components/agent-orb.d.ts.map +1 -1
  102. package/dist/components/agent-orb.js +20 -7
  103. package/dist/components/app-mark-aliases.d.ts +16 -0
  104. package/dist/components/app-mark-aliases.d.ts.map +1 -0
  105. package/dist/components/app-mark-aliases.js +84 -0
  106. package/dist/components/app-mark.d.ts +4 -0
  107. package/dist/components/app-mark.d.ts.map +1 -1
  108. package/dist/components/app-mark.js +14 -31
  109. package/dist/components/automation-section.d.ts.map +1 -1
  110. package/dist/components/automation-section.js +2 -2
  111. package/dist/components/badge.js +1 -1
  112. package/dist/components/brand.d.ts +3 -2
  113. package/dist/components/brand.d.ts.map +1 -1
  114. package/dist/components/brand.js +18 -28
  115. package/dist/components/button.js +1 -1
  116. package/dist/components/code-editor-mockup.d.ts +1 -1
  117. package/dist/components/code-editor-mockup.js +1 -1
  118. package/dist/components/collection-filters.js +2 -2
  119. package/dist/components/confirm-dialog.d.ts +3 -1
  120. package/dist/components/confirm-dialog.d.ts.map +1 -1
  121. package/dist/components/confirm-dialog.js +3 -3
  122. package/dist/components/drawer.js +5 -5
  123. package/dist/components/feature-grid.js +2 -2
  124. package/dist/components/feedback-state.d.ts.map +1 -1
  125. package/dist/components/feedback-state.js +6 -9
  126. package/dist/components/footer.js +2 -2
  127. package/dist/components/hero.js +1 -1
  128. package/dist/components/house-icons.d.ts.map +1 -1
  129. package/dist/components/house-icons.js +9 -1
  130. package/dist/components/input-otp.js +1 -1
  131. package/dist/components/installer-shell.d.ts.map +1 -1
  132. package/dist/components/installer-shell.js +5 -6
  133. package/dist/components/logo-band.js +1 -1
  134. package/dist/components/navigation-menu.js +2 -2
  135. package/dist/components/pending-label.d.ts +15 -0
  136. package/dist/components/pending-label.d.ts.map +1 -0
  137. package/dist/components/pending-label.js +14 -0
  138. package/dist/components/proof-slot.js +1 -1
  139. package/dist/components/section-intro.js +2 -2
  140. package/dist/components/security-grid.js +1 -1
  141. package/dist/components/sheet.js +1 -1
  142. package/dist/components/shift-band.js +1 -1
  143. package/dist/components/skeleton.d.ts +4 -0
  144. package/dist/components/skeleton.d.ts.map +1 -1
  145. package/dist/components/skeleton.js +5 -1
  146. package/dist/components/sonner.d.ts.map +1 -1
  147. package/dist/components/sonner.js +5 -2
  148. package/dist/components/statement.js +2 -2
  149. package/dist/components/steps.js +2 -2
  150. package/dist/components/table.js +1 -1
  151. package/dist/components/tabs.js +1 -1
  152. package/dist/components/texture-strip.js +1 -1
  153. package/dist/components/toggle.js +1 -1
  154. package/dist/components/waiting-line.d.ts +30 -0
  155. package/dist/components/waiting-line.d.ts.map +1 -0
  156. package/dist/components/waiting-line.js +33 -0
  157. package/dist/eslint/rules/no-invalid-token-utility.js +1 -1
  158. package/dist/index.d.ts +2 -8
  159. package/dist/index.d.ts.map +1 -1
  160. package/dist/index.js +2 -8
  161. package/dist/internal/agent-orb-motion.d.ts +9 -1
  162. package/dist/internal/agent-orb-motion.d.ts.map +1 -1
  163. package/dist/internal/agent-orb-motion.js +23 -11
  164. package/dist/internal/agent-orb.d.ts +14 -1
  165. package/dist/internal/agent-orb.d.ts.map +1 -1
  166. package/dist/internal/agent-orb.js +78 -22
  167. package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
  168. package/dist/internal/assistant-ui/attachment.js +3 -2
  169. package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
  170. package/dist/internal/assistant-ui/reasoning.js +4 -4
  171. package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -1
  172. package/dist/internal/assistant-ui/tool-fallback.js +5 -4
  173. package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
  174. package/dist/internal/assistant-ui/tool-group.js +4 -3
  175. package/dist/lib/motion.d.ts +18 -4
  176. package/dist/lib/motion.d.ts.map +1 -1
  177. package/dist/lib/motion.js +18 -4
  178. package/dist/styles/globals.css +0 -1
  179. package/docs/activity.md +99 -117
  180. package/docs/agent-orb.md +72 -19
  181. package/docs/component-classification.md +4 -4
  182. package/docs/consuming-cross-repo.md +8 -10
  183. package/docs/contract.md +10 -9
  184. package/docs/icon-assets.md +106 -0
  185. package/docs/migration/10.0.0.md +144 -0
  186. package/package.json +8 -7
  187. package/dist/activity.d.ts +0 -2
  188. package/dist/activity.d.ts.map +0 -1
  189. package/dist/activity.js +0 -2
  190. package/dist/components/activity-orb.d.ts +0 -21
  191. package/dist/components/activity-orb.d.ts.map +0 -1
  192. package/dist/components/activity-orb.js +0 -26
  193. package/dist/components/benefits-bento.d.ts +0 -15
  194. package/dist/components/benefits-bento.d.ts.map +0 -1
  195. package/dist/components/benefits-bento.js +0 -6
  196. package/dist/components/bento.d.ts +0 -39
  197. package/dist/components/bento.d.ts.map +0 -1
  198. package/dist/components/bento.js +0 -70
  199. package/dist/components/glyph-spinner.d.ts +0 -10
  200. package/dist/components/glyph-spinner.d.ts.map +0 -1
  201. package/dist/components/glyph-spinner.js +0 -101
  202. package/dist/components/nav-bar.d.ts +0 -24
  203. package/dist/components/nav-bar.d.ts.map +0 -1
  204. package/dist/components/nav-bar.js +0 -35
  205. package/dist/components/page-frame.d.ts +0 -30
  206. package/dist/components/page-frame.d.ts.map +0 -1
  207. package/dist/components/page-frame.js +0 -30
  208. package/dist/components/spinner.d.ts +0 -3
  209. package/dist/components/spinner.d.ts.map +0 -1
  210. package/dist/components/spinner.js +0 -7
  211. package/dist/components/use-case-bento.d.ts +0 -13
  212. package/dist/components/use-case-bento.d.ts.map +0 -1
  213. package/dist/components/use-case-bento.js +0 -8
  214. package/dist/internal/activity-orb.d.ts +0 -27
  215. package/dist/internal/activity-orb.d.ts.map +0 -1
  216. package/dist/internal/activity-orb.js +0 -150
@@ -21,7 +21,7 @@ function SheetOverlay({ className, ...props }) {
21
21
  return (_jsx(SheetPrimitive.Backdrop, { "data-slot": "sheet-overlay", className: cn("fixed inset-0 z-50 bg-scrim/scrim", overlayBackdropMotion, className), ...props }));
22
22
  }
23
23
  function SheetContent({ className, children, side = "right", showCloseButton = true, closeLabel = "Close", ...props }) {
24
- return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Popup, { "data-slot": "sheet-content", "data-side": side, className: cn("fixed z-50 flex max-h-[calc(100%-var(--nc-lg))] flex-col gap-nadicode-md rounded-md border-0 bg-popover bg-clip-padding text-sm text-popover-foreground nc-elevation-modal transition-[opacity,translate] duration-[var(--nc-duration-close)] ease-[var(--nc-ease-out-strong)] data-open:duration-[var(--nc-duration-open)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none motion-reduce:data-ending-style:opacity-100 motion-reduce:data-starting-style:opacity-100 data-[side=bottom]:inset-x-nadicode-sm data-[side=bottom]:bottom-nadicode-sm data-[side=bottom]:h-auto data-[side=bottom]:data-ending-style:translate-y-nadicode-md data-[side=bottom]:data-starting-style:translate-y-nadicode-md motion-reduce:data-[side=bottom]:data-ending-style:translate-none motion-reduce:data-[side=bottom]:data-starting-style:translate-none data-[side=left]:inset-y-nadicode-sm data-[side=left]:left-nadicode-sm data-[side=left]:w-3/4 data-[side=left]:data-ending-style:-translate-x-nadicode-md data-[side=left]:data-starting-style:-translate-x-nadicode-md motion-reduce:data-[side=left]:data-ending-style:translate-none motion-reduce:data-[side=left]:data-starting-style:translate-none data-[side=right]:inset-y-nadicode-sm data-[side=right]:right-nadicode-sm data-[side=right]:w-3/4 data-[side=right]:data-ending-style:translate-x-nadicode-md data-[side=right]:data-starting-style:translate-x-nadicode-md motion-reduce:data-[side=right]:data-ending-style:translate-none motion-reduce:data-[side=right]:data-starting-style:translate-none data-[side=top]:inset-x-nadicode-sm data-[side=top]:top-nadicode-sm data-[side=top]:h-auto data-[side=top]:data-ending-style:-translate-y-nadicode-md data-[side=top]:data-starting-style:-translate-y-nadicode-md motion-reduce:data-[side=top]:data-ending-style:translate-none motion-reduce:data-[side=top]:data-starting-style:translate-none data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className), ...props, children: [children, showCloseButton && (_jsxs(SheetPrimitive.Close, { "data-slot": "sheet-close", render: _jsx(Button, { variant: "ghost", className: "absolute top-nadicode-md right-nadicode-md", size: "icon-sm" }), children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: closeLabel })] }))] })] }));
24
+ return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Popup, { "data-slot": "sheet-content", "data-side": side, className: cn("fixed z-50 flex max-h-[calc(100%-var(--nc-lg))] flex-col gap-nadicode-md rounded-md border-0 bg-popover bg-clip-padding text-sm text-popover-foreground nc-elevation-modal transition-[opacity,translate] duration-[var(--nc-duration-close)] ease-[var(--nc-ease-out-strong)] data-open:duration-[var(--nc-duration-open)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-opacity data-[side=bottom]:inset-x-nadicode-sm data-[side=bottom]:bottom-nadicode-sm data-[side=bottom]:h-auto data-[side=bottom]:data-ending-style:translate-y-nadicode-md data-[side=bottom]:data-starting-style:translate-y-nadicode-md motion-reduce:data-[side=bottom]:data-ending-style:translate-none motion-reduce:data-[side=bottom]:data-starting-style:translate-none data-[side=left]:inset-y-nadicode-sm data-[side=left]:left-nadicode-sm data-[side=left]:w-3/4 data-[side=left]:data-ending-style:-translate-x-nadicode-md data-[side=left]:data-starting-style:-translate-x-nadicode-md motion-reduce:data-[side=left]:data-ending-style:translate-none motion-reduce:data-[side=left]:data-starting-style:translate-none data-[side=right]:inset-y-nadicode-sm data-[side=right]:right-nadicode-sm data-[side=right]:w-3/4 data-[side=right]:data-ending-style:translate-x-nadicode-md data-[side=right]:data-starting-style:translate-x-nadicode-md motion-reduce:data-[side=right]:data-ending-style:translate-none motion-reduce:data-[side=right]:data-starting-style:translate-none data-[side=top]:inset-x-nadicode-sm data-[side=top]:top-nadicode-sm data-[side=top]:h-auto data-[side=top]:data-ending-style:-translate-y-nadicode-md data-[side=top]:data-starting-style:-translate-y-nadicode-md motion-reduce:data-[side=top]:data-ending-style:translate-none motion-reduce:data-[side=top]:data-starting-style:translate-none data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className), ...props, children: [children, showCloseButton && (_jsxs(SheetPrimitive.Close, { "data-slot": "sheet-close", render: _jsx(Button, { variant: "ghost", className: "absolute top-nadicode-md right-nadicode-md", size: "icon-sm" }), children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: closeLabel })] }))] })] }));
25
25
  }
26
26
  function SheetHeader({ className, ...props }) {
27
27
  return (_jsx("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-0.5 p-nadicode-lg", className), ...props }));
@@ -3,7 +3,7 @@ import { cn } from "../lib/utils.js";
3
3
  import { SeamGrid } from "./seam-grid.js";
4
4
  import { SectionIntro, SectionIntroKicker, SectionIntroLead, SectionIntroTitle, } from "./section-intro.js";
5
5
  function ShiftBand({ kicker, title, children, proofs, className, ...props }) {
6
- return (_jsxs(SeamGrid, { "data-slot": "shift-band", className: className, ...props, children: [_jsxs(SectionIntro, { className: "justify-items-center text-center", children: [_jsx(SectionIntroKicker, { children: kicker }), _jsx(SectionIntroTitle, { className: "max-w-[18ch] text-balance text-center", children: title }), children] }), _jsx(SeamGrid, { className: "md:grid-cols-4", children: proofs.map((proof) => (_jsxs("div", { className: "nc-panel-cell bg-card", children: [_jsx("h3", { className: "nc-type-body-md-strong text-foreground", children: proof.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: proof.body })] }, proof.title))) })] }));
6
+ return (_jsxs(SeamGrid, { "data-slot": "shift-band", className: className, ...props, children: [_jsxs(SectionIntro, { className: "justify-items-center text-center", children: [_jsx(SectionIntroKicker, { children: kicker }), _jsx(SectionIntroTitle, { className: "max-w-[18ch] text-balance text-center", children: title }), children] }), _jsx(SeamGrid, { className: "md:grid-cols-4", children: proofs.map((proof) => (_jsxs("div", { className: "nc-panel-cell bg-card", children: [_jsx("h3", { className: "nc-type-body-md font-medium text-foreground", children: proof.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: proof.body })] }, proof.title))) })] }));
7
7
  }
8
8
  function ShiftBandLead({ className, ...props }) {
9
9
  return _jsx(SectionIntroLead, { className: cn("text-balance text-center", className), ...props });
@@ -1,3 +1,7 @@
1
+ /**
2
+ * A still placeholder in the shape of the content that is coming. It does not
3
+ * pulse: a page load is the system's work, and only an Agent moves on its own.
4
+ */
1
5
  declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
2
6
  export { Skeleton };
3
7
  //# sourceMappingURL=skeleton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAEA,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAQrE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAErE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,6 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn } from "../lib/utils.js";
3
+ /**
4
+ * A still placeholder in the shape of the content that is coming. It does not
5
+ * pulse: a page load is the system's work, and only an Agent moves on its own.
6
+ */
3
7
  function Skeleton({ className, ...props }) {
4
- return (_jsx("div", { "data-slot": "skeleton", className: cn("rounded-md bg-muted motion-safe:animate-pulse", className), ...props }));
8
+ return _jsx("div", { "data-slot": "skeleton", className: cn("rounded-md bg-muted", className), ...props });
5
9
  }
6
10
  export { Skeleton };
@@ -1 +1 @@
1
- {"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAS9D,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,gCAgC1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAK9D,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,gCAgC1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -2,7 +2,8 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useTheme } from "next-themes";
4
4
  import { Toaster as Sonner } from "sonner";
5
- import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon, } from "lucide-react";
5
+ import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon } from "lucide-react";
6
+ import { WaitingLine } from "./waiting-line.js";
6
7
  const Toaster = ({ ...props }) => {
7
8
  const { theme = "system" } = useTheme();
8
9
  return (_jsx(Sonner, { theme: theme, className: "toaster group", icons: {
@@ -10,7 +11,9 @@ const Toaster = ({ ...props }) => {
10
11
  info: _jsx(InfoIcon, { className: "size-4" }),
11
12
  warning: _jsx(TriangleAlertIcon, { className: "size-4" }),
12
13
  error: _jsx(OctagonXIcon, { className: "size-4" }),
13
- loading: (_jsx(Loader2Icon, { className: "size-4 motion-safe:animate-spin motion-reduce:animate-pulse" })),
14
+ // A toast that stays up is already past a second, so its mark is the
15
+ // one waiting line rather than a spinning glyph.
16
+ loading: _jsx(WaitingLine, { className: "w-8", decorative: true }),
14
17
  }, style: {
15
18
  "--normal-bg": "var(--popover)",
16
19
  "--normal-text": "var(--popover-foreground)",
@@ -20,14 +20,14 @@ function Statement({ className, ...props }) {
20
20
  * renders only when `index` is set.
21
21
  */
22
22
  function StatementEyebrow({ index, children, className, ...props }) {
23
- return (_jsxs("p", { "data-slot": "statement-eyebrow", className: cn("nc-type-caption-mono flex items-center gap-2 uppercase text-muted-foreground", className), ...props, children: [index != null ? (_jsxs("span", { "data-slot": "statement-eyebrow-index", className: "text-[var(--nc-link-deep)]", children: ["[", index, "]"] })) : null, children] }));
23
+ return (_jsxs("p", { "data-slot": "statement-eyebrow", className: cn("nc-type-label-mono flex items-center gap-2 uppercase text-muted-foreground", className), ...props, children: [index != null ? (_jsxs("span", { "data-slot": "statement-eyebrow-index", className: "text-[var(--nc-link-deep)]", children: ["[", index, "]"] })) : null, children] }));
24
24
  }
25
25
  /**
26
26
  * StatementTitle — the large headline. Its lead clause reads in the foreground
27
27
  * role; wrap the continuation clause in `StatementTail` to drop it to muted.
28
28
  */
29
29
  function StatementTitle({ className, ...props }) {
30
- return (_jsx("h2", { "data-slot": "statement-title", className: cn("nc-type-title-lg max-w-[24ch] text-foreground", className), ...props }));
30
+ return (_jsx("h2", { "data-slot": "statement-title", className: cn("nc-type-display-md max-w-[24ch] text-foreground", className), ...props }));
31
31
  }
32
32
  /** StatementTail — the muted continuation clause inside `StatementTitle` (V5 `.t2`). */
33
33
  function StatementTail({ className, ...props }) {
@@ -32,9 +32,9 @@ function Steps({ kicker, title, children, className, ...props }) {
32
32
  return (_jsxs("section", { "data-slot": "steps", className: cn("grid gap-8", className), ...props, children: [kicker || title ? (_jsxs(SectionIntro, { align: "start", className: "min-h-0 bg-transparent p-0", children: [kicker ? _jsx(SectionIntroKicker, { children: kicker }) : null, title ? (_jsx(SectionIntroTitle, { className: "mx-0 max-w-[28ch] text-balance text-left", children: title })) : null] })) : null, _jsx("div", { "data-slot": "steps-rail", "aria-hidden": "true", className: "h-px w-full bg-foreground" }), _jsx("div", { "data-slot": "steps-stations", className: "grid grid-cols-1 gap-10 sm:grid-cols-2 md:grid-cols-4", children: stations }), branches.length > 0 ? branches : null] }));
33
33
  }
34
34
  function Step({ index, title, price, body, className, children, ...props }) {
35
- return (_jsxs("div", { "data-slot": "step", className: cn("flex flex-col gap-3", className), ...props, children: [_jsx("span", { "data-slot": "step-marker", "aria-hidden": "true", className: "size-2 rounded-[1px] bg-primary" }), index ? (_jsx("span", { "data-slot": "step-index", className: "font-mono text-[10px] tracking-[0.14em] text-muted-foreground uppercase", children: index })) : null, title ? (_jsx("h3", { "data-slot": "step-title", className: "nc-type-body-md-strong text-foreground", children: title })) : null, price ? (_jsx("span", { "data-slot": "step-price", className: "font-mono text-xs font-semibold tracking-[0.04em] text-[var(--nc-link-deep)] uppercase", children: price })) : null, body ? (_jsx("p", { "data-slot": "step-body", className: "nc-type-body-sm max-w-[30ch] text-muted-foreground", children: body })) : null, children] }));
35
+ return (_jsxs("div", { "data-slot": "step", className: cn("flex flex-col gap-3", className), ...props, children: [_jsx("span", { "data-slot": "step-marker", "aria-hidden": "true", className: "size-2 rounded-[1px] bg-primary" }), index ? (_jsx("span", { "data-slot": "step-index", className: "font-mono text-[10px] tracking-[0.14em] text-muted-foreground uppercase", children: index })) : null, title ? (_jsx("h3", { "data-slot": "step-title", className: "nc-type-body-md font-medium text-foreground", children: title })) : null, price ? (_jsx("span", { "data-slot": "step-price", className: "font-mono text-xs font-semibold tracking-[0.04em] text-[var(--nc-link-deep)] uppercase", children: price })) : null, body ? (_jsx("p", { "data-slot": "step-body", className: "nc-type-body-sm max-w-[30ch] text-muted-foreground", children: body })) : null, children] }));
36
36
  }
37
37
  function StepsBranch({ label, title, body, className, children, ...props }) {
38
- return (_jsxs("aside", { "data-slot": "steps-branch", className: cn("flex flex-col gap-3 border-l border-dashed border-border pl-6", className), ...props, children: [label ? (_jsx("span", { "data-slot": "steps-branch-label", className: "font-mono text-[10px] tracking-[0.14em] text-[var(--nc-link-deep)] uppercase", children: label })) : null, title ? (_jsx("h3", { "data-slot": "steps-branch-title", className: "nc-type-body-md-strong text-foreground", children: title })) : null, body ? (_jsx("p", { "data-slot": "steps-branch-body", className: "nc-type-body-sm max-w-[52ch] text-muted-foreground", children: body })) : null, children] }));
38
+ return (_jsxs("aside", { "data-slot": "steps-branch", className: cn("flex flex-col gap-3 border-l border-dashed border-border pl-6", className), ...props, children: [label ? (_jsx("span", { "data-slot": "steps-branch-label", className: "font-mono text-[10px] tracking-[0.14em] text-[var(--nc-link-deep)] uppercase", children: label })) : null, title ? (_jsx("h3", { "data-slot": "steps-branch-title", className: "nc-type-body-md font-medium text-foreground", children: title })) : null, body ? (_jsx("p", { "data-slot": "steps-branch-body", className: "nc-type-body-sm max-w-[52ch] text-muted-foreground", children: body })) : null, children] }));
39
39
  }
40
40
  export { Steps, Step, StepsBranch };
@@ -18,7 +18,7 @@ function TableFooter({ className, ...props }) {
18
18
  return (_jsx("tfoot", { "data-slot": "table-footer", className: cn("border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props }));
19
19
  }
20
20
  function TableRow({ className, ...props }) {
21
- return (_jsx("tr", { "data-slot": "table-row", className: cn("border-b border-border transition-colors motion-reduce:transition-none in-[tbody]:hover:bg-accent in-[tbody]:has-[:focus-visible]:bg-accent in-[tbody]:has-aria-expanded:bg-accent data-[state=selected]:bg-muted", className), ...props }));
21
+ return (_jsx("tr", { "data-slot": "table-row", className: cn("border-b border-border transition-colors in-[tbody]:hover:bg-accent in-[tbody]:has-[:focus-visible]:bg-accent in-[tbody]:has-aria-expanded:bg-accent data-[state=selected]:bg-muted", className), ...props }));
22
22
  }
23
23
  function TableHead({ className, ...props }) {
24
24
  return (_jsx("th", { "data-slot": "table-head", className: cn("h-9 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className), ...props }));
@@ -20,7 +20,7 @@ function TabsList({ className, variant = "default", ...props }) {
20
20
  return (_jsx(TabsPrimitive.List, { "data-slot": "tabs-list", "data-variant": variant, className: cn(tabsListVariants({ variant }), className), ...props }));
21
21
  }
22
22
  function TabsTrigger({ className, ...props }) {
23
- return (_jsx(TabsPrimitive.Tab, { "data-slot": "tabs-trigger", className: cn("nc-transition-paint relative inline-flex h-[calc(100%-1px)] min-h-touch-target min-w-touch-target flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-active:shadow-none group-data-[variant=line]/tabs-list:data-active:shadow-none [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity after:duration-[var(--nc-duration-confirm)] after:ease-[var(--nc-ease-out-strong)] group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:-bottom-1 group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100 motion-reduce:after:transition-none", className), ...props }));
23
+ return (_jsx(TabsPrimitive.Tab, { "data-slot": "tabs-trigger", className: cn("nc-transition-paint relative inline-flex h-[calc(100%-1px)] min-h-touch-target min-w-touch-target flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-active:shadow-none group-data-[variant=line]/tabs-list:data-active:shadow-none [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity after:duration-[var(--nc-duration-confirm)] after:ease-[var(--nc-ease-out-strong)] group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:-bottom-1 group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className), ...props }));
24
24
  }
25
25
  function TabsContent({ className, ...props }) {
26
26
  return (_jsx(TabsPrimitive.Panel, { "data-slot": "tabs-content", className: cn("flex-1 text-sm outline-none", className), ...props }));
@@ -24,7 +24,7 @@ function TextureStrip({ className, ...props }) {
24
24
  * surface. This wrapper remains exported to preserve the public 0.10 API.
25
25
  */
26
26
  function TextureStripChip({ className, ...props }) {
27
- return (_jsx("span", { "data-slot": "texture-strip-chip", className: cn("nc-type-caption-mono rounded-full border border-border bg-background px-3 py-1 text-muted-foreground uppercase", className), ...props }));
27
+ return (_jsx("span", { "data-slot": "texture-strip-chip", className: cn("nc-type-label-mono rounded-full border border-border bg-background px-3 py-1 text-muted-foreground uppercase", className), ...props }));
28
28
  }
29
29
  // The deprecated export is named here because this is where it is DEFINED —
30
30
  // re-exporting it is what keeps the 0.10 public API alive.
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { cn } from "../lib/utils.js";
6
- const toggleVariants = cva("group/toggle inline-flex min-h-touch-target min-w-touch-target items-center justify-center gap-1 rounded-md border border-transparent text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] motion-reduce:transition-none hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-pressed:bg-accent aria-pressed:font-semibold aria-pressed:text-accent-foreground data-pressed:bg-accent data-pressed:font-semibold data-pressed:text-accent-foreground [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
6
+ const toggleVariants = cva("group/toggle inline-flex min-h-touch-target min-w-touch-target items-center justify-center gap-1 rounded-md border border-transparent text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-pressed:bg-accent aria-pressed:font-semibold aria-pressed:text-accent-foreground data-pressed:bg-accent data-pressed:font-semibold data-pressed:text-accent-foreground [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
7
  variants: {
8
8
  variant: {
9
9
  default: "bg-transparent",
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Below this, a wait is not worth an indicator: the pending label on the
4
+ * control already says the system took the request. The delay is owned here so
5
+ * every surface waits the same amount of time before anything moves.
6
+ */
7
+ declare const WAITING_LINE_DELAY_MS = 1000;
8
+ type WaitingLineProps = Omit<React.ComponentProps<"div">, "children"> & ({
9
+ decorative: true;
10
+ label?: never;
11
+ } | {
12
+ decorative?: false;
13
+ label: string;
14
+ });
15
+ /**
16
+ * The one moving thing a system wait may show: a 2 px ink track with a 32%
17
+ * segment crossing it linearly, after a second of waiting. Under reduced
18
+ * motion the whole line breathes in opacity instead of travelling.
19
+ *
20
+ * The track takes its 2 px from the moment the wait starts and stays empty and
21
+ * unannounced until that second is up, so the line arriving moves nothing
22
+ * around it. The interface answers briefly: one thing moves, and only the one
23
+ * the person is waiting for.
24
+ *
25
+ * An Agent's work is not a system wait: it shows that Agent's orb in its state
26
+ * and a sentence saying what it is doing.
27
+ */
28
+ declare function WaitingLine({ className, decorative, label, ...props }: WaitingLineProps): React.JSX.Element;
29
+ export { WaitingLine, WAITING_LINE_DELAY_MS };
30
+ //# sourceMappingURL=waiting-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waiting-line.d.ts","sourceRoot":"","sources":["../../src/components/waiting-line.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,OAAO,CAAC;AAEnC,KAAK,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GACnE,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;AAEhF;;;;;;;;;;;;GAYG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,UAAkB,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,qBA0BxF;AAED,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../lib/utils.js";
5
+ /**
6
+ * Below this, a wait is not worth an indicator: the pending label on the
7
+ * control already says the system took the request. The delay is owned here so
8
+ * every surface waits the same amount of time before anything moves.
9
+ */
10
+ const WAITING_LINE_DELAY_MS = 1000;
11
+ /**
12
+ * The one moving thing a system wait may show: a 2 px ink track with a 32%
13
+ * segment crossing it linearly, after a second of waiting. Under reduced
14
+ * motion the whole line breathes in opacity instead of travelling.
15
+ *
16
+ * The track takes its 2 px from the moment the wait starts and stays empty and
17
+ * unannounced until that second is up, so the line arriving moves nothing
18
+ * around it. The interface answers briefly: one thing moves, and only the one
19
+ * the person is waiting for.
20
+ *
21
+ * An Agent's work is not a system wait: it shows that Agent's orb in its state
22
+ * and a sentence saying what it is doing.
23
+ */
24
+ function WaitingLine({ className, decorative = false, label, ...props }) {
25
+ const [elapsed, setElapsed] = React.useState(false);
26
+ React.useEffect(() => {
27
+ const timer = window.setTimeout(() => setElapsed(true), WAITING_LINE_DELAY_MS);
28
+ return () => window.clearTimeout(timer);
29
+ }, []);
30
+ const announced = elapsed && !decorative;
31
+ return (_jsx("div", { ...props, "aria-label": announced ? label : undefined, className: cn("relative h-0.5 w-full overflow-hidden", className), "data-slot": "waiting-line", "data-waiting": elapsed || undefined, role: announced ? "status" : undefined, children: elapsed ? (_jsx("span", { "aria-hidden": "true", className: "nc-anim-wait absolute inset-y-0 start-0 block bg-current" })) : null }));
32
+ }
33
+ export { WaitingLine, WAITING_LINE_DELAY_MS };
@@ -34,7 +34,7 @@ export const noInvalidTokenUtility = {
34
34
  schema: [],
35
35
  messages: {
36
36
  invalidTokenUtility:
37
- "{{utility}} is not generated by the installed NadicodeAI design system. Use a utility from @nadicodeai/design-system/tailwind.",
37
+ "{{utility}} is not generated by the installed nadicode design system. Use a utility from @nadicodeai/design-system/tailwind.",
38
38
  },
39
39
  },
40
40
  create(context) {
package/dist/index.d.ts CHANGED
@@ -3,7 +3,6 @@ export * from "./components/account-menu.js";
3
3
  export * from "./components/action-band.js";
4
4
  export * from "./components/action-menu.js";
5
5
  export * from "./components/action-status.js";
6
- export * from "./components/activity-orb.js";
7
6
  export * from "./components/activity-calendar.js";
8
7
  export * from "./components/agent-card.js";
9
8
  export * from "./components/agent-orb.js";
@@ -14,8 +13,6 @@ export * from "./components/aspect-ratio.js";
14
13
  export * from "./components/automation-section.js";
15
14
  export * from "./components/avatar.js";
16
15
  export * from "./components/badge.js";
17
- export * from "./components/benefits-bento.js";
18
- export * from "./components/bento.js";
19
16
  export * from "./components/brand.js";
20
17
  export * from "./components/brand-field.js";
21
18
  export * from "./components/brand-icons.js";
@@ -69,7 +66,6 @@ export * from "./components/file-type-icon.js";
69
66
  export * from "./components/footer.js";
70
67
  export * from "./components/form.js";
71
68
  export * from "./components/glass-control.js";
72
- export * from "./components/glyph-spinner.js";
73
69
  export * from "./components/handoff-banner.js";
74
70
  export * from "./components/hero.js";
75
71
  export * from "./components/hero-split.js";
@@ -95,12 +91,11 @@ export * from "./components/menubar.js";
95
91
  export * from "./components/model-identity.js";
96
92
  export * from "./components/model-mark.js";
97
93
  export * from "./components/native-select.js";
98
- export * from "./components/nav-bar.js";
99
94
  export * from "./components/navigation-menu.js";
100
95
  export * from "./components/newsletter.js";
101
96
  export * from "./components/notice-banner.js";
102
- export * from "./components/page-frame.js";
103
97
  export * from "./components/pagination.js";
98
+ export * from "./components/pending-label.js";
104
99
  export * from "./components/plugin-slot-boundary.js";
105
100
  export * from "./components/popover.js";
106
101
  export * from "./components/pricing.js";
@@ -126,7 +121,6 @@ export * from "./components/sidebar.js";
126
121
  export * from "./components/skeleton.js";
127
122
  export * from "./components/slider.js";
128
123
  export * from "./components/sonner.js";
129
- export * from "./components/spinner.js";
130
124
  export * from "./components/statement.js";
131
125
  export * from "./components/status-dot.js";
132
126
  export * from "./components/status-row.js";
@@ -147,5 +141,5 @@ export * from "./components/tool-icon.js";
147
141
  export * from "./components/tooltip.js";
148
142
  export * from "./components/trend-badge.js";
149
143
  export * from "./components/usage-meter.js";
150
- export * from "./components/use-case-bento.js";
144
+ export * from "./components/waiting-line.js";
151
145
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,7 +3,6 @@ export * from "./components/account-menu.js";
3
3
  export * from "./components/action-band.js";
4
4
  export * from "./components/action-menu.js";
5
5
  export * from "./components/action-status.js";
6
- export * from "./components/activity-orb.js";
7
6
  export * from "./components/activity-calendar.js";
8
7
  export * from "./components/agent-card.js";
9
8
  export * from "./components/agent-orb.js";
@@ -14,8 +13,6 @@ export * from "./components/aspect-ratio.js";
14
13
  export * from "./components/automation-section.js";
15
14
  export * from "./components/avatar.js";
16
15
  export * from "./components/badge.js";
17
- export * from "./components/benefits-bento.js";
18
- export * from "./components/bento.js";
19
16
  export * from "./components/brand.js";
20
17
  export * from "./components/brand-field.js";
21
18
  export * from "./components/brand-icons.js";
@@ -69,7 +66,6 @@ export * from "./components/file-type-icon.js";
69
66
  export * from "./components/footer.js";
70
67
  export * from "./components/form.js";
71
68
  export * from "./components/glass-control.js";
72
- export * from "./components/glyph-spinner.js";
73
69
  export * from "./components/handoff-banner.js";
74
70
  export * from "./components/hero.js";
75
71
  export * from "./components/hero-split.js";
@@ -95,12 +91,11 @@ export * from "./components/menubar.js";
95
91
  export * from "./components/model-identity.js";
96
92
  export * from "./components/model-mark.js";
97
93
  export * from "./components/native-select.js";
98
- export * from "./components/nav-bar.js";
99
94
  export * from "./components/navigation-menu.js";
100
95
  export * from "./components/newsletter.js";
101
96
  export * from "./components/notice-banner.js";
102
- export * from "./components/page-frame.js";
103
97
  export * from "./components/pagination.js";
98
+ export * from "./components/pending-label.js";
104
99
  export * from "./components/plugin-slot-boundary.js";
105
100
  export * from "./components/popover.js";
106
101
  export * from "./components/pricing.js";
@@ -126,7 +121,6 @@ export * from "./components/sidebar.js";
126
121
  export * from "./components/skeleton.js";
127
122
  export * from "./components/slider.js";
128
123
  export * from "./components/sonner.js";
129
- export * from "./components/spinner.js";
130
124
  export * from "./components/statement.js";
131
125
  export * from "./components/status-dot.js";
132
126
  export * from "./components/status-row.js";
@@ -147,4 +141,4 @@ export * from "./components/tool-icon.js";
147
141
  export * from "./components/tooltip.js";
148
142
  export * from "./components/trend-badge.js";
149
143
  export * from "./components/usage-meter.js";
150
- export * from "./components/use-case-bento.js";
144
+ export * from "./components/waiting-line.js";
@@ -1,6 +1,12 @@
1
1
  import type { AgentOrbFigure } from "./agent-orb.js";
2
2
  export type AgentOrbState = "idle" | "working" | "waiting" | "blocked" | "thinking" | "done";
3
3
  export declare function stateSpeed(state: AgentOrbState, form: AgentOrbFigure): number;
4
+ /**
5
+ * Reduced motion turns movement off and keeps opacity and colour, so a
6
+ * thinking or working orb breathes between full ink and 0.45 over 1.6 s,
7
+ * ease-in-out, and busy still reads as busy. Every other state holds still.
8
+ */
9
+ export declare function reducedBreath(state: AgentOrbState, seconds: number): number;
4
10
  export declare function motionPose(form: AgentOrbFigure, state: AgentOrbState, age: number): {
5
11
  sx: number;
6
12
  sy: number;
@@ -10,5 +16,7 @@ export declare function motionPose(form: AgentOrbFigure, state: AgentOrbState, a
10
16
  split: number;
11
17
  opacity: number;
12
18
  };
13
- export declare function paintOrbCue(context: CanvasRenderingContext2D, state: AgentOrbState, size: number, seconds: number, reduced: boolean, colors: readonly string[], depth: "back" | "front"): void;
19
+ export declare function paintOrbCue(context: CanvasRenderingContext2D, state: AgentOrbState, size: number, seconds: number, reduced: boolean, colors: readonly string[], depth: "back" | "front",
20
+ /** The orb's whole ink, so the cue breathes with the body under reduced motion. */
21
+ ink?: number): void;
14
22
  //# sourceMappingURL=agent-orb-motion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-orb-motion.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb-motion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAa7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,UAGpE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;;;;;;;;EA0CjF;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GAAG,OAAO,QAgExB"}
1
+ {"version":3,"file":"agent-orb-motion.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb-motion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAa7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,UAKpE;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAIlE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;;;;;;;;EAsCjF;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GAAG,OAAO;AACvB,mFAAmF;AACnF,GAAG,SAAI,QAgER"}
@@ -9,9 +9,24 @@ const personalities = {
9
9
  morph: { speed: 0.9, tilt: 0.12 },
10
10
  };
11
11
  export function stateSpeed(state, form) {
12
- const speed = { idle: 1, working: 1, thinking: 1, waiting: 0, blocked: 0, done: 0.65 };
12
+ // Idle is 0: only an Agent at work moves, so a list of twenty shows at a
13
+ // glance which ones are busy.
14
+ const speed = { idle: 0, working: 1, thinking: 1, waiting: 0, blocked: 0, done: 0.65 };
13
15
  return speed[state] * personalities[form].speed;
14
16
  }
17
+ /** The breath's period, in seconds. */
18
+ const BREATH_SECONDS = 1.6;
19
+ /**
20
+ * Reduced motion turns movement off and keeps opacity and colour, so a
21
+ * thinking or working orb breathes between full ink and 0.45 over 1.6 s,
22
+ * ease-in-out, and busy still reads as busy. Every other state holds still.
23
+ */
24
+ export function reducedBreath(state, seconds) {
25
+ if (state !== "thinking" && state !== "working")
26
+ return 1;
27
+ const phase = (1 - Math.cos((seconds * Math.PI * 2) / BREATH_SECONDS)) / 2;
28
+ return 1 - 0.55 * phase;
29
+ }
15
30
  export function motionPose(form, state, age) {
16
31
  const personality = personalities[form];
17
32
  let sx = 0.82;
@@ -21,13 +36,8 @@ export function motionPose(form, state, age) {
21
36
  let rotation = 0;
22
37
  const split = 0;
23
38
  let opacity = 1;
24
- if (state === "idle") {
25
- const breath = Math.sin((age * Math.PI) / 2);
26
- sx += breath * 0.01;
27
- sy += breath * 0.01;
28
- y = -breath * 0.004;
29
- }
30
- else if (state === "waiting") {
39
+ // Idle has no branch: it is the still pose every gesture departs from.
40
+ if (state === "waiting") {
31
41
  sx = 0.8;
32
42
  sy = 0.84;
33
43
  y = -0.015;
@@ -59,7 +69,9 @@ export function motionPose(form, state, age) {
59
69
  }
60
70
  return { sx, sy, x, y, rotation, split, opacity };
61
71
  }
62
- export function paintOrbCue(context, state, size, seconds, reduced, colors, depth) {
72
+ export function paintOrbCue(context, state, size, seconds, reduced, colors, depth,
73
+ /** The orb's whole ink, so the cue breathes with the body under reduced motion. */
74
+ ink = 1) {
63
75
  if (state !== "working" && state !== "thinking" && state !== "done")
64
76
  return;
65
77
  context.save();
@@ -70,7 +82,7 @@ export function paintOrbCue(context, state, size, seconds, reduced, colors, dept
70
82
  ? 0.5
71
83
  : (1 + Math.cos((seconds * Math.PI * 2) / 3.6 - (i * Math.PI * 2) / 3)) / 2;
72
84
  context.fillStyle = colors[i % colors.length];
73
- context.globalAlpha = 0.65 + pulse * 0.35;
85
+ context.globalAlpha = (0.65 + pulse * 0.35) * ink;
74
86
  context.beginPath();
75
87
  context.arc(size * (0.5 + (i - 1) * 0.09), size * 0.08, Math.max(1, size * (0.022 + pulse * 0.005)), 0, Math.PI * 2);
76
88
  context.fill();
@@ -108,7 +120,7 @@ export function paintOrbCue(context, state, size, seconds, reduced, colors, dept
108
120
  if (front !== (depth === "front"))
109
121
  continue;
110
122
  const taper = Math.sin(Math.PI * (0.04 + fraction * 0.92));
111
- context.globalAlpha = fade * (front ? 0.92 : 0.55) * (0.25 + taper * 0.75);
123
+ context.globalAlpha = fade * (front ? 0.92 : 0.55) * (0.25 + taper * 0.75) * ink;
112
124
  context.lineWidth = Math.max(0.65, size * 0.027 * taper);
113
125
  context.beginPath();
114
126
  context.moveTo(...point(angle));
@@ -13,6 +13,8 @@ export type AgentOrbForm = keyof typeof agentOrbForms;
13
13
  /** A chosen form, or Nadia's own ribbon, which nobody chooses. */
14
14
  export type AgentOrbFigure = AgentOrbForm | "nadia";
15
15
  export type AgentOrbSize = 20 | 24 | 32 | 40 | 64 | 96 | 160;
16
+ /** How loudly one orb reads on its own ground. */
17
+ export type AgentOrbPresence = "plain" | "over-picture";
16
18
  /**
17
19
  * The vendor's `ribbon` geometry (thinking-orbs 0.3.1, MIT, Jakub Antalik),
18
20
  * repeated here only so every dot carries its lane through the depth sort. The
@@ -20,7 +22,18 @@ export type AgentOrbSize = 20 | 24 | 32 | 40 | 64 | 96 | 160;
20
22
  * a stripe jump between lanes as the ribbon turns; the lane is the stable id.
21
23
  */
22
24
  export declare function stripedRibbonFrame(size: number, t: number, opts: ModeOpts): OrbFrame;
23
- export declare function mountAgentOrb(canvas: HTMLCanvasElement, form: AgentOrbFigure, size: AgentOrbSize, initiallyPaused: boolean, initialState?: AgentOrbState): {
25
+ export type AgentOrbMountOptions = {
26
+ form: AgentOrbFigure;
27
+ /**
28
+ * The size the canvas is laid out at when nothing else sizes it. The engine
29
+ * paints the box it actually occupies, so this is only the starting point.
30
+ */
31
+ size: AgentOrbSize;
32
+ paused?: boolean;
33
+ state?: AgentOrbState;
34
+ presence?: AgentOrbPresence;
35
+ };
36
+ export declare function mountAgentOrb(canvas: HTMLCanvasElement, options: AgentOrbMountOptions): {
24
37
  destroy(): void;
25
38
  setPaused(_value: boolean): void;
26
39
  setState(_value: AgentOrbState): void;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-orb.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAId,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,aAAa,EAAuC,MAAM,oBAAoB,CAAC;AAE7F,QAAA,MAAM,aAAa;;;;;;;;CAQ0B,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC;AACtD,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;AAmB7D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAuDpF;AA0DD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,YAAY,EAClB,eAAe,EAAE,OAAO,EACxB,YAAY,GAAE,aAAsB;;sBAIO,OAAO;qBAAuB,aAAa;EA0HvF"}
1
+ {"version":3,"file":"agent-orb.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAId,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,oBAAoB,CAAC;AAE5B,QAAA,MAAM,aAAa;;;;;;;;CAQ0B,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC;AACtD,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;AAE7D,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,CAAC;AA+BxD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAuDpF;AAmFD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB;;sBAIzC,OAAO;qBAAuB,aAAa;EAqJvF"}