@vadimcomanescu/nadicode-design-system 2.0.7 → 2.0.9

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 (230) hide show
  1. package/.agents/skills/seed/SKILL.md +17 -8
  2. package/.agents/skills/seed/contract.md +5 -5
  3. package/.agents/skills/seed/intent-map.md +3 -3
  4. package/.agents/skills/seed/recipes/agents-chat.md +44 -20
  5. package/.agents/skills/seed/references/blocks.md +5 -2
  6. package/.agents/skills/seed/references/components.md +22 -2
  7. package/.agents/skills/seed/references/dashboard-patterns.md +12 -12
  8. package/.agents/skills/seed/references/nextjs.md +20 -80
  9. package/.agents/skills/seed/references/tokens.md +57 -248
  10. package/README.md +43 -215
  11. package/contracts/block-props-schemas.json +2186 -0
  12. package/contracts/component-props-schemas.json +8322 -0
  13. package/contracts/consumer-contract.json +178 -0
  14. package/contracts/consumer-intent-map.json +707 -0
  15. package/contracts/message-catalog-contract.json +820 -0
  16. package/contracts/page-kit-props-schemas.json +1894 -0
  17. package/contracts/public-surface-registry.json +5822 -0
  18. package/contracts/public-surface-registry.schema.json +219 -0
  19. package/contracts/release-governance-baseline.json +850 -0
  20. package/contracts/spec-manifest.json +46 -0
  21. package/dist/catalog.json +284 -81
  22. package/dist/chunk-4IGBBIYW.js +47 -0
  23. package/dist/chunk-4WPZ6T7V.js +186 -0
  24. package/dist/{chunk-OHOOQUVJ.js → chunk-C7WHMSF3.js} +2 -1
  25. package/dist/{chunk-4K3PATUT.js → chunk-EEL4RAPC.js} +13 -1
  26. package/dist/{chunk-ILIHQ2KZ.js → chunk-EK43W2Y6.js} +16 -10
  27. package/dist/{chunk-IDKZEPWK.js → chunk-FV2G6SAF.js} +6 -5
  28. package/dist/chunk-HWHJ6IRQ.js +78 -0
  29. package/dist/{chunk-AUSYEAIJ.js → chunk-I66XWYSS.js} +32 -8
  30. package/dist/chunk-JDJY4ABS.js +60 -0
  31. package/dist/{chunk-GV4PKHG4.js → chunk-KWILREVQ.js} +2 -2
  32. package/dist/{chunk-WI37ZYIF.js → chunk-M4XKO45H.js} +13 -1
  33. package/dist/{chunk-6N6CSJVE.js → chunk-OJ7OO3QB.js} +2 -2
  34. package/dist/{chunk-ZHTQF2KI.js → chunk-OSNTB6RY.js} +29 -22
  35. package/dist/{chunk-GMMPLZLC.js → chunk-PDSQC6VE.js} +1 -1
  36. package/dist/chunk-QQOWC53X.js +98 -0
  37. package/dist/chunk-VJ5VD4UT.js +91 -0
  38. package/dist/{chunk-TUKZKU72.js → chunk-ZKLB5N3Q.js} +1 -1
  39. package/dist/components/blocks/AgentConversationBlock.d.ts +6 -1
  40. package/dist/components/blocks/AgentConversationBlock.js +44 -42
  41. package/dist/components/blocks/AgentRunOverviewBlock.js +1 -1
  42. package/dist/components/blocks/AgentWorkbenchBlock.d.ts +5 -1
  43. package/dist/components/blocks/AgentWorkbenchBlock.js +47 -46
  44. package/dist/components/blocks/AuthLayout.js +2 -2
  45. package/dist/components/blocks/BannerBlock.js +38 -38
  46. package/dist/components/blocks/CallToActionBlock.js +2 -2
  47. package/dist/components/blocks/ChangelogBlock.js +39 -39
  48. package/dist/components/blocks/ChartBlock.js +38 -38
  49. package/dist/components/blocks/ChartCollectionBlock.js +1 -1
  50. package/dist/components/blocks/ChatLayout.d.ts +4 -1
  51. package/dist/components/blocks/ChatLayout.js +39 -39
  52. package/dist/components/blocks/CodeBlock.js +2 -2
  53. package/dist/components/blocks/ContactBlock.js +2 -2
  54. package/dist/components/blocks/CreateBlock.js +39 -39
  55. package/dist/components/blocks/DataGridBlock.js +40 -40
  56. package/dist/components/blocks/DirectoryBlock.js +43 -43
  57. package/dist/components/blocks/FAQBlock.js +38 -38
  58. package/dist/components/blocks/FeatureBlock.js +38 -38
  59. package/dist/components/blocks/GalleryBlock.js +38 -38
  60. package/dist/components/blocks/HeaderBlock.js +38 -38
  61. package/dist/components/blocks/HeroBlock.js +41 -41
  62. package/dist/components/blocks/HeroSectionBlock.js +55 -59
  63. package/dist/components/blocks/IntegrationsBlock.js +40 -40
  64. package/dist/components/blocks/InteractiveAreaChartBlock.js +38 -38
  65. package/dist/components/blocks/KanbanDemoBlock.js +3 -3
  66. package/dist/components/blocks/LoginBlock.js +2 -2
  67. package/dist/components/blocks/LogoCloud.js +2 -13
  68. package/dist/components/blocks/NavUser.js +42 -42
  69. package/dist/components/blocks/NotFoundBlock.js +41 -41
  70. package/dist/components/blocks/OnboardingBlock.js +38 -38
  71. package/dist/components/blocks/PricingBlock.js +4 -4
  72. package/dist/components/blocks/ProcessFlowBlock.js +2 -2
  73. package/dist/components/blocks/SettingsLayout.js +42 -42
  74. package/dist/components/blocks/SignUpBlock.js +1 -1
  75. package/dist/components/blocks/SocialProofBlock.js +4 -3
  76. package/dist/components/blocks/StatsBlock.js +38 -38
  77. package/dist/components/blocks/StatsMarketingBlock.js +2 -2
  78. package/dist/components/blocks/TestimonialsBlock.js +2 -1
  79. package/dist/components/blocks/TwoFactorChallengeBlock.js +38 -38
  80. package/dist/components/blocks/TwoFactorSetupBlock.js +41 -41
  81. package/dist/components/blocks/VoiceAgentCard.d.ts +3 -1
  82. package/dist/components/blocks/VoiceAgentCard.js +7 -76
  83. package/dist/components/blocks/WizardBlock.js +39 -39
  84. package/dist/components/blocks/user/InviteUserModal.js +38 -38
  85. package/dist/components/logos/index.js +2 -2
  86. package/dist/components/page-kits/AgentsChatPageKit.js +59 -58
  87. package/dist/components/page-kits/AnalyticsPageKit.js +44 -44
  88. package/dist/components/page-kits/BlogContentPageKit.js +43 -43
  89. package/dist/components/page-kits/CheckoutPageKit.js +41 -41
  90. package/dist/components/page-kits/CompanySuitePageKit.js +47 -47
  91. package/dist/components/page-kits/CrudFormPageKit.js +44 -44
  92. package/dist/components/page-kits/CrudListDetailPageKit.js +44 -44
  93. package/dist/components/page-kits/DashboardPageKit.js +44 -44
  94. package/dist/components/page-kits/KanbanBoardPageKit.js +47 -47
  95. package/dist/components/page-kits/LandingPageKit.js +50 -49
  96. package/dist/components/page-kits/LoginPageKit.js +2 -2
  97. package/dist/components/page-kits/MarketingShellPageKit.js +40 -40
  98. package/dist/components/page-kits/NavigationShellPageKit.js +42 -42
  99. package/dist/components/page-kits/OnboardingPageKit.js +44 -44
  100. package/dist/components/page-kits/PricingPageKit.js +46 -46
  101. package/dist/components/page-kits/ProfileSettingsPageKit.js +2 -2
  102. package/dist/components/page-kits/ServiceSuitePageKit.js +47 -46
  103. package/dist/components/page-kits/SignupPageKit.js +2 -2
  104. package/dist/components/page-kits/SuccessPageKit.js +38 -38
  105. package/dist/components/page-kits/TeamSettingsPageKit.js +45 -45
  106. package/dist/components/page-kits/TwoFactorPageKit.js +41 -41
  107. package/dist/components/page-kits/VerifyEmailPageKit.js +38 -38
  108. package/dist/components/page-kits/VoiceAgentsPageKit.js +80 -76
  109. package/dist/components/ui/Accordion.js +38 -38
  110. package/dist/components/ui/AgentMessageBubble.d.ts +20 -4
  111. package/dist/components/ui/AgentMessageBubble.js +39 -39
  112. package/dist/components/ui/AgentStatus.d.ts +1 -1
  113. package/dist/components/ui/AgentStatus.js +5 -10
  114. package/dist/components/ui/AgentTerminal.d.ts +4 -1
  115. package/dist/components/ui/AgentTerminal.js +3 -1
  116. package/dist/components/ui/AgentTimeline.d.ts +2 -2
  117. package/dist/components/ui/AgentTimeline.js +15 -6
  118. package/dist/components/ui/AnimatedDialog.js +38 -38
  119. package/dist/components/ui/AnimatedSheet.js +38 -38
  120. package/dist/components/ui/ApprovalCard.js +1 -1
  121. package/dist/components/ui/Breadcrumb.js +38 -38
  122. package/dist/components/ui/Calendar.js +38 -38
  123. package/dist/components/ui/Carousel.js +38 -38
  124. package/dist/components/ui/ChatActions.d.ts +14 -0
  125. package/dist/components/ui/ChatActions.js +52 -0
  126. package/dist/components/ui/ChatBranch.d.ts +18 -0
  127. package/dist/components/ui/ChatBranch.js +84 -0
  128. package/dist/components/ui/ChatChainOfThought.d.ts +25 -0
  129. package/dist/components/ui/ChatChainOfThought.js +99 -0
  130. package/dist/components/ui/ChatConfirmation.d.ts +37 -0
  131. package/dist/components/ui/ChatConfirmation.js +115 -0
  132. package/dist/components/ui/ChatGreeting.d.ts +18 -0
  133. package/dist/components/ui/ChatGreeting.js +80 -0
  134. package/dist/components/ui/ChatMessage.d.ts +40 -0
  135. package/dist/components/ui/ChatMessage.js +96 -0
  136. package/dist/components/ui/ChatPlan.d.ts +29 -0
  137. package/dist/components/ui/ChatPlan.js +86 -0
  138. package/dist/components/ui/ChatPromptInput.d.ts +32 -0
  139. package/dist/components/ui/ChatPromptInput.js +193 -0
  140. package/dist/components/ui/ChatPromptInputAttachments.d.ts +9 -0
  141. package/dist/components/ui/ChatPromptInputAttachments.js +145 -0
  142. package/dist/components/ui/ChatQueue.d.ts +32 -0
  143. package/dist/components/ui/ChatQueue.js +93 -0
  144. package/dist/components/ui/ChatReasoning.d.ts +20 -0
  145. package/dist/components/ui/ChatReasoning.js +91 -0
  146. package/dist/components/ui/ChatResponse.d.ts +14 -0
  147. package/dist/components/ui/ChatResponse.js +25 -0
  148. package/dist/components/ui/ChatShimmer.d.ts +23 -0
  149. package/dist/components/ui/ChatShimmer.js +6 -0
  150. package/dist/components/ui/ChatSources.d.ts +30 -0
  151. package/dist/components/ui/ChatSources.js +113 -0
  152. package/dist/components/ui/ChatSuggestion.d.ts +13 -0
  153. package/dist/components/ui/ChatSuggestion.js +41 -0
  154. package/dist/components/ui/ChatThinkingMessage.d.ts +12 -0
  155. package/dist/components/ui/ChatThinkingMessage.js +55 -0
  156. package/dist/components/ui/ChatToolCall.d.ts +41 -0
  157. package/dist/components/ui/ChatToolCall.js +192 -0
  158. package/dist/components/ui/CheckStatus.d.ts +1 -1
  159. package/dist/components/ui/Checkbox.js +38 -38
  160. package/dist/components/ui/CheckoutForm.js +38 -38
  161. package/dist/components/ui/CheckoutFormDemo.js +38 -38
  162. package/dist/components/ui/Combobox.js +38 -38
  163. package/dist/components/ui/Command.js +38 -38
  164. package/dist/components/ui/ContextMenu.js +38 -38
  165. package/dist/components/ui/Conversation.d.ts +21 -0
  166. package/dist/components/ui/Conversation.js +196 -0
  167. package/dist/components/ui/ConversationThread.d.ts +8 -2
  168. package/dist/components/ui/ConversationThread.js +34 -16
  169. package/dist/components/ui/DataTable.js +40 -40
  170. package/dist/components/ui/DatePicker.js +38 -38
  171. package/dist/components/ui/DateRangePicker.js +38 -38
  172. package/dist/components/ui/Dialog.js +38 -38
  173. package/dist/components/ui/DropdownMenu.js +39 -39
  174. package/dist/components/ui/FileUpload.js +38 -38
  175. package/dist/components/ui/InputOTP.js +38 -38
  176. package/dist/components/ui/KanbanBoard.js +2 -2
  177. package/dist/components/ui/LanguageSwitcher.js +38 -38
  178. package/dist/components/ui/Menubar.js +38 -38
  179. package/dist/components/ui/NavigationMenu.js +38 -38
  180. package/dist/components/ui/NotificationCenter.js +38 -38
  181. package/dist/components/ui/Pagination.js +38 -38
  182. package/dist/components/ui/RadioGroup.js +38 -38
  183. package/dist/components/ui/Resizable.js +38 -38
  184. package/dist/components/ui/SearchCommand.js +38 -38
  185. package/dist/components/ui/Select.js +38 -38
  186. package/dist/components/ui/SettingsModal.js +38 -38
  187. package/dist/components/ui/Sheet.js +38 -38
  188. package/dist/components/ui/Sidebar.js +41 -41
  189. package/dist/components/ui/StyleToggle.js +1 -1
  190. package/dist/components/ui/TagInput.js +38 -38
  191. package/dist/components/ui/ThemeToggle.js +39 -39
  192. package/dist/components/ui/ThinkingIndicator.d.ts +3 -1
  193. package/dist/components/ui/ThinkingIndicator.js +2 -1
  194. package/dist/components/ui/Toast.js +38 -38
  195. package/dist/components/ui/Toaster.js +38 -38
  196. package/dist/components/ui/ToolCallCard.d.ts +1 -1
  197. package/dist/components/ui/ToolCallCard.js +5 -1
  198. package/dist/components/ui/TreeView.js +38 -38
  199. package/dist/components/ui/charts/index.js +1 -1
  200. package/dist/components/ui/icons/index.js +38 -38
  201. package/dist/components/ui/text-effects/index.js +2 -2
  202. package/dist/hooks/use-scroll-to-bottom.d.ts +13 -0
  203. package/dist/hooks/use-scroll-to-bottom.js +2 -0
  204. package/dist/index.js +43 -43
  205. package/dist/internal/local-image-assets.d.ts +12 -0
  206. package/dist/messages/en.js +1 -1
  207. package/dist/messages/it.js +1 -1
  208. package/dist/test/PublicSeedTestProvider.js +2 -2
  209. package/dist/test/simulate-ime-composition.d.ts +54 -0
  210. package/dist/test/simulate-ime-composition.js +55 -0
  211. package/eslint-rules/nadicode/config.js +1 -0
  212. package/eslint-rules/nadicode/index.js +2 -0
  213. package/eslint-rules/nadicode/rules/no-deprecated-ds-import.js +77 -0
  214. package/eslint-rules/nadicode/rules/no-unregistered-glass.js +2 -0
  215. package/package.json +103 -6
  216. package/scripts/ds-check.mjs +94 -73
  217. package/dist/chunk-MLUSJTS2.js +0 -107
  218. package/dist/chunk-TZXZFSD2.js +0 -33
  219. package/dist/{chunk-MX5FUFQR.js → chunk-7A2RXKGH.js} +2 -2
  220. package/dist/{chunk-5DKCZWC6.js → chunk-CQEUNASC.js} +1 -1
  221. package/dist/{chunk-RMLS2QUC.js → chunk-HZERHGBT.js} +1 -1
  222. package/dist/{chunk-WAVU744B.js → chunk-IXQGKJU4.js} +3 -3
  223. package/dist/{chunk-4HRVRW2X.js → chunk-J2DCQDXO.js} +2 -2
  224. package/dist/{chunk-6MFAZU4B.js → chunk-RGE5OQMZ.js} +1 -1
  225. package/dist/{chunk-PJNHVPHF.js → chunk-TYP2MR3Q.js} +1 -1
  226. package/dist/{chunk-TS2JSPQR.js → chunk-U4GYSYGN.js} +1 -1
  227. package/dist/{chunk-EJNF6JLL.js → chunk-VEO56RH4.js} +1 -1
  228. package/dist/{chunk-AURJQZC4.js → chunk-VNNAL4A6.js} +1 -1
  229. package/dist/{chunk-5PORR6LE.js → chunk-XTASI4IY.js} +1 -1
  230. package/dist/{chunk-E4L6LR6P.js → chunk-Z233ZQZE.js} +1 -1
@@ -1,12 +1,13 @@
1
1
  import { m } from './chunk-PD2YEH3H.js';
2
2
  import { bezier } from './chunk-CRY67BIF.js';
3
+ import { CheckIcon } from './chunk-CXACRCZ4.js';
3
4
  import { ChevronDownIcon } from './chunk-HJBXUXTD.js';
4
5
  import { cn } from './chunk-QYZT24TS.js';
5
6
  import * as React from 'react';
6
7
  import { useTranslations } from 'next-intl';
7
8
  import { cva } from 'class-variance-authority';
8
9
  import { useReducedMotion } from 'motion/react';
9
- import { jsxs, jsx } from 'react/jsx-runtime';
10
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
10
11
 
11
12
  var PULSE_TRANSITION = { duration: 1.2, repeat: Infinity, ease: bezier["ease-in-out"] };
12
13
  var thinkingIndicatorVariants = cva(
@@ -29,33 +30,38 @@ var dotSizes = {
29
30
  default: "h-1.5 w-1.5",
30
31
  lg: "h-2 w-2"
31
32
  };
32
- function ThinkingIndicator({ className, size = "default", reasoning, ref, ...props }) {
33
+ function ThinkingIndicator({ className, size = "default", reasoning, state = "thinking", ref, ...props }) {
33
34
  const t = useTranslations("components.thinkingIndicator");
34
35
  const prefersReduced = useReducedMotion();
35
36
  const [expanded, setExpanded] = React.useState(false);
36
37
  const dotSize = dotSizes[size ?? "default"];
37
38
  const reasoningPanelId = React.useId();
38
- return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
39
+ return /* @__PURE__ */ jsxs("div", { ref, role: "status", className: cn("flex flex-col", className), ...props, children: [
39
40
  /* @__PURE__ */ jsxs("div", { className: cn(thinkingIndicatorVariants({ size })), children: [
40
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", role: "group", "aria-label": t("thinking"), children: [0, 1, 2].map((i) => prefersReduced ? /* @__PURE__ */ jsx(
41
- "span",
42
- {
43
- className: cn("rounded-full bg-accent", dotSize)
44
- },
45
- i
46
- ) : /* @__PURE__ */ jsx(
47
- m.span,
48
- {
49
- className: cn("rounded-full bg-accent", dotSize),
50
- animate: { opacity: [0.3, 1, 0.3] },
51
- transition: {
52
- ...PULSE_TRANSITION,
53
- delay: i * 0.2
54
- }
55
- },
56
- i
57
- )) }),
58
- /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: t("thinking") }),
41
+ state === "complete" ? /* @__PURE__ */ jsxs(Fragment, { children: [
42
+ /* @__PURE__ */ jsx(CheckIcon, { size: 14, "aria-hidden": "true", className: "text-success" }),
43
+ /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: t("complete") })
44
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
45
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", role: "group", "aria-label": t("thinking"), children: [0, 1, 2].map((i) => prefersReduced ? /* @__PURE__ */ jsx(
46
+ "span",
47
+ {
48
+ className: cn("rounded-full bg-accent", dotSize)
49
+ },
50
+ i
51
+ ) : /* @__PURE__ */ jsx(
52
+ m.span,
53
+ {
54
+ className: cn("rounded-full bg-accent", dotSize),
55
+ animate: { opacity: [0.3, 1, 0.3] },
56
+ transition: {
57
+ ...PULSE_TRANSITION,
58
+ delay: i * 0.2
59
+ }
60
+ },
61
+ i
62
+ )) }),
63
+ /* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: t("thinking") })
64
+ ] }),
59
65
  !!reasoning && /* @__PURE__ */ jsx(
60
66
  "button",
61
67
  {
@@ -69,6 +75,7 @@ function ThinkingIndicator({ className, size = "default", reasoning, ref, ...pro
69
75
  ChevronDownIcon,
70
76
  {
71
77
  size: 14,
78
+ "aria-hidden": "true",
72
79
  className: cn("transition-transform", expanded && "rotate-180")
73
80
  }
74
81
  )
@@ -1,5 +1,5 @@
1
1
  import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-PXDHNGTG.js';
2
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuCheckboxItem } from './chunk-5DKCZWC6.js';
2
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuCheckboxItem } from './chunk-CQEUNASC.js';
3
3
  import { Input } from './chunk-AP3XXYAY.js';
4
4
  import { Button } from './chunk-7KIDDF3I.js';
5
5
  import { Settings2Icon } from './chunk-TXGANOAX.js';
@@ -0,0 +1,98 @@
1
+ // src/internal/local-image-assets.ts
2
+ function escapeXml(value) {
3
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&apos;");
4
+ }
5
+ function hashString(value) {
6
+ let hash = 0;
7
+ for (let i = 0; i < value.length; i += 1) {
8
+ hash = hash * 31 + value.charCodeAt(i) >>> 0;
9
+ }
10
+ return hash;
11
+ }
12
+ function svgDataUri(svg) {
13
+ return `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`;
14
+ }
15
+ function createLogoDataUri(template) {
16
+ const ring = escapeXml(template.accent);
17
+ const fill = escapeXml(template.accent2);
18
+ const label = escapeXml(template.initials);
19
+ const seed = hashString(template.label);
20
+ const ornament = seed % 3 === 0 ? `<path d="M18 44c10-8 18-12 30-12" stroke="white" stroke-width="3" stroke-linecap="round" opacity="0.85"/>` : seed % 3 === 1 ? `<path d="M20 18l16 28 16-28" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" opacity="0.85"/>` : `<circle cx="34" cy="32" r="13" stroke="white" stroke-width="4" opacity="0.85"/>`;
21
+ return svgDataUri(`
22
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 64" role="img" aria-label="${escapeXml(template.label)} logo">
23
+ <defs>
24
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
25
+ <stop offset="0%" stop-color="${ring}"/>
26
+ <stop offset="100%" stop-color="${fill}"/>
27
+ </linearGradient>
28
+ </defs>
29
+ <rect x="1" y="1" width="158" height="62" rx="18" fill="url(#bg)" opacity="0.95"/>
30
+ <rect x="8" y="8" width="48" height="48" rx="14" fill="rgba(255,255,255,0.12)"/>
31
+ ${ornament}
32
+ <text
33
+ x="80"
34
+ y="40"
35
+ text-anchor="middle"
36
+ fill="white"
37
+ font-family="Inter, ui-sans-serif, system-ui, sans-serif"
38
+ font-size="22"
39
+ font-weight="700"
40
+ letter-spacing="0.12em"
41
+ >${label}</text>
42
+ </svg>
43
+ `);
44
+ }
45
+ function createAvatarDataUri(seed, initials) {
46
+ const hash = hashString(seed);
47
+ const hue = hash % 360;
48
+ const hue2 = (hue + 36) % 360;
49
+ const label = escapeXml(initials.slice(0, 2).toUpperCase());
50
+ return svgDataUri(`
51
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="${escapeXml(seed)} avatar">
52
+ <defs>
53
+ <radialGradient id="bg" cx="30%" cy="30%" r="80%">
54
+ <stop offset="0%" stop-color="hsl(${hue} 75% 62%)"/>
55
+ <stop offset="100%" stop-color="hsl(${hue2} 62% 38%)"/>
56
+ </radialGradient>
57
+ </defs>
58
+ <circle cx="64" cy="64" r="60" fill="url(#bg)"/>
59
+ <circle cx="46" cy="44" r="12" fill="rgba(255,255,255,0.22)"/>
60
+ <path d="M34 92c6-16 18-24 30-24s24 8 30 24" fill="none" stroke="rgba(255,255,255,0.28)" stroke-width="8" stroke-linecap="round"/>
61
+ <text
62
+ x="64"
63
+ y="74"
64
+ text-anchor="middle"
65
+ fill="white"
66
+ font-family="Inter, ui-sans-serif, system-ui, sans-serif"
67
+ font-size="38"
68
+ font-weight="800"
69
+ >${label}</text>
70
+ </svg>
71
+ `);
72
+ }
73
+ var BRAND_LOGO_TEMPLATES = [
74
+ { label: "Nvidia", initials: "NV", accent: "#0e9f6e", accent2: "#084c41" },
75
+ { label: "Column", initials: "CL", accent: "#1d4ed8", accent2: "#312e81" },
76
+ { label: "GitHub", initials: "GH", accent: "#111827", accent2: "#374151" },
77
+ { label: "Nike", initials: "NK", accent: "#0f172a", accent2: "#2563eb" },
78
+ { label: "Lemon Squeezy", initials: "LS", accent: "#eab308", accent2: "#b45309" },
79
+ { label: "Laravel", initials: "LR", accent: "#ef4444", accent2: "#7f1d1d" },
80
+ { label: "Lilly", initials: "LL", accent: "#db2777", accent2: "#831843" },
81
+ { label: "OpenAI", initials: "OA", accent: "#14b8a6", accent2: "#0f766e" },
82
+ { label: "Tailwind CSS", initials: "TW", accent: "#38bdf8", accent2: "#0369a1" },
83
+ { label: "Vercel", initials: "VC", accent: "#020617", accent2: "#334155" },
84
+ { label: "Zapier", initials: "ZI", accent: "#f97316", accent2: "#9a3412" }
85
+ ];
86
+ var LOCAL_CLOUD_LOGOS = BRAND_LOGO_TEMPLATES.map((template, index) => ({
87
+ src: createLogoDataUri(template),
88
+ alt: `${template.label} Logo`,
89
+ height: [20, 16, 16, 20, 16, 28, 20, 24, 16, 20, 20][index]
90
+ }));
91
+ var LOCAL_HERO_LOGOS = BRAND_LOGO_TEMPLATES.slice(0, 8).map((template, index) => ({
92
+ src: createLogoDataUri(template),
93
+ alt: `${template.label} Logo`,
94
+ height: String([20, 16, 16, 20, 20, 16, 28, 24][index])
95
+ }));
96
+ var LOCAL_NIKE_LOGO_SRC = createLogoDataUri(BRAND_LOGO_TEMPLATES[3]);
97
+
98
+ export { LOCAL_CLOUD_LOGOS, LOCAL_HERO_LOGOS, LOCAL_NIKE_LOGO_SRC, createAvatarDataUri };
@@ -0,0 +1,91 @@
1
+ import { useRef, useCallback, useSyncExternalStore, useEffect } from 'react';
2
+ import { useStickToBottom } from 'use-stick-to-bottom';
3
+
4
+ // src/hooks/use-scroll-to-bottom.ts
5
+ var AT_BOTTOM_THRESHOLD_PX = 100;
6
+ var USER_SCROLL_DEBOUNCE_MS = 150;
7
+ var SERVER_SNAPSHOT = true;
8
+ function useScrollToBottom() {
9
+ const {
10
+ scrollRef,
11
+ contentRef,
12
+ scrollToBottom: stbScrollToBottom
13
+ } = useStickToBottom({
14
+ resize: "smooth",
15
+ initial: "smooth"
16
+ });
17
+ const endRef = useRef(null);
18
+ const isAtBottomRef = useRef(true);
19
+ const isUserScrollingRef = useRef(false);
20
+ const checkIfAtBottom = useCallback(() => {
21
+ const container = scrollRef.current;
22
+ if (!container) return true;
23
+ const { scrollTop, scrollHeight, clientHeight } = container;
24
+ return scrollTop + clientHeight >= scrollHeight - AT_BOTTOM_THRESHOLD_PX;
25
+ }, [scrollRef]);
26
+ const subscribe = useCallback((onStoreChange) => {
27
+ const container = scrollRef.current;
28
+ if (!container) return () => {
29
+ };
30
+ isAtBottomRef.current = checkIfAtBottom();
31
+ let scrollTimeout;
32
+ function handleScroll() {
33
+ isUserScrollingRef.current = true;
34
+ clearTimeout(scrollTimeout);
35
+ isAtBottomRef.current = checkIfAtBottom();
36
+ scrollTimeout = setTimeout(() => {
37
+ isUserScrollingRef.current = false;
38
+ }, USER_SCROLL_DEBOUNCE_MS);
39
+ onStoreChange();
40
+ }
41
+ container.addEventListener("scroll", handleScroll, { passive: true });
42
+ return () => {
43
+ container.removeEventListener("scroll", handleScroll);
44
+ clearTimeout(scrollTimeout);
45
+ };
46
+ }, [checkIfAtBottom, scrollRef]);
47
+ const getServerSnapshot = useCallback(() => SERVER_SNAPSHOT, []);
48
+ const isAtBottom = useSyncExternalStore(subscribe, checkIfAtBottom, getServerSnapshot);
49
+ const scrollToBottom = useCallback(
50
+ (behavior = "smooth") => {
51
+ stbScrollToBottom(behavior);
52
+ },
53
+ [stbScrollToBottom]
54
+ );
55
+ useEffect(() => {
56
+ const container = scrollRef.current;
57
+ if (!container) return;
58
+ function scrollIfNeeded() {
59
+ if (isAtBottomRef.current && !isUserScrollingRef.current) {
60
+ requestAnimationFrame(() => {
61
+ stbScrollToBottom("instant");
62
+ isAtBottomRef.current = true;
63
+ });
64
+ }
65
+ }
66
+ const mutationObserver = new MutationObserver(scrollIfNeeded);
67
+ mutationObserver.observe(container, {
68
+ childList: true,
69
+ subtree: true,
70
+ characterData: true
71
+ });
72
+ const resizeObserver = new ResizeObserver(scrollIfNeeded);
73
+ resizeObserver.observe(container);
74
+ for (const child of container.children) {
75
+ resizeObserver.observe(child);
76
+ }
77
+ return () => {
78
+ mutationObserver.disconnect();
79
+ resizeObserver.disconnect();
80
+ };
81
+ }, [scrollRef, stbScrollToBottom]);
82
+ return {
83
+ containerRef: scrollRef,
84
+ contentRef,
85
+ endRef,
86
+ isAtBottom,
87
+ scrollToBottom
88
+ };
89
+ }
90
+
91
+ export { useScrollToBottom };
@@ -1,4 +1,4 @@
1
- import { SidebarProvider, Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarSeparator, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarGroupContent, SidebarMenuBadge, SidebarInset, SidebarTrigger } from './chunk-4HRVRW2X.js';
1
+ import { SidebarProvider, Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarSeparator, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarGroupContent, SidebarMenuBadge, SidebarInset, SidebarTrigger } from './chunk-J2DCQDXO.js';
2
2
  import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbPage, BreadcrumbLink, BreadcrumbSeparator } from './chunk-35EX5FP5.js';
3
3
  import { Avatar, AvatarFallback } from './chunk-NAAU5IWU.js';
4
4
  import { Badge } from './chunk-S4JAHKOP.js';
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  interface ToolCall {
3
+ id: string;
3
4
  toolName: string;
4
5
  args?: Record<string, unknown>;
5
6
  status: 'pending' | 'running' | 'complete' | 'error';
@@ -8,7 +9,11 @@ interface ToolCall {
8
9
  }
9
10
  interface ConversationMessage {
10
11
  id: string;
11
- role: 'user' | 'agent' | 'system';
12
+ /**
13
+ * Message role. Use `"assistant"` for AI messages.
14
+ * @deprecated `"agent"` is accepted for backward compat but will be removed in the next major version.
15
+ */
16
+ role: 'user' | 'assistant' | 'agent' | 'system';
12
17
  content: string;
13
18
  timestamp?: string;
14
19
  toolCalls?: ToolCall[];
@@ -1,121 +1,123 @@
1
1
  'use client';
2
- export { AgentConversationBlock } from '../../chunk-TZXZFSD2.js';
3
- import '../../chunk-MLUSJTS2.js';
4
- import '../../chunk-ZHTQF2KI.js';
2
+ export { AgentConversationBlock } from '../../chunk-4IGBBIYW.js';
3
+ import '../../chunk-4WPZ6T7V.js';
4
+ import '../../chunk-MDAYDDTC.js';
5
+ import '../../chunk-OSNTB6RY.js';
6
+ import '../../chunk-GLU236NN.js';
5
7
  import '../../chunk-PD2YEH3H.js';
6
8
  import '../../chunk-CRY67BIF.js';
7
9
  import '../../chunk-HJC6U46F.js';
8
- import '../../chunk-AUSYEAIJ.js';
10
+ import '../../chunk-I66XWYSS.js';
9
11
  import '../../chunk-GO35FTNJ.js';
10
- import '../../chunk-PSVQ7ZNX.js';
12
+ import '../../chunk-WUO7OONN.js';
11
13
  import '../../chunk-FLF5AMNO.js';
12
- import '../../chunk-WFJQ43SM.js';
14
+ import '../../chunk-3CLXYQKB.js';
13
15
  import '../../chunk-S4GKGKON.js';
14
16
  import '../../chunk-LCDDAE7J.js';
15
17
  import '../../chunk-R674XI7C.js';
16
- import '../../chunk-WUO7OONN.js';
18
+ import '../../chunk-HNY45VUQ.js';
17
19
  import '../../chunk-BPCCTJSK.js';
18
20
  import '../../chunk-CGUCH322.js';
19
21
  import '../../chunk-ELKIUARM.js';
20
- import '../../chunk-ZU2GYVAP.js';
21
22
  import '../../chunk-KSHJQ2VT.js';
22
- import '../../chunk-3CLXYQKB.js';
23
- import '../../chunk-JHQ5NMLZ.js';
24
- import '../../chunk-CRZ2JE24.js';
23
+ import '../../chunk-GAKU7DFY.js';
24
+ import '../../chunk-T6BRD7TS.js';
25
25
  import '../../chunk-TXGANOAX.js';
26
26
  import '../../chunk-OITJWGFV.js';
27
27
  import '../../chunk-Z74D6D2W.js';
28
- import '../../chunk-HNY45VUQ.js';
28
+ import '../../chunk-7WDT2PRI.js';
29
29
  import '../../chunk-IJJI4RQU.js';
30
30
  import '../../chunk-E7RBK6ML.js';
31
31
  import '../../chunk-UBIGDGOP.js';
32
- import '../../chunk-Q7LVUGFL.js';
33
32
  import '../../chunk-ALMGJVMT.js';
34
33
  import '../../chunk-QPXTBZWN.js';
35
- import '../../chunk-GAKU7DFY.js';
36
- import '../../chunk-T6BRD7TS.js';
34
+ import '../../chunk-4NXZIMYZ.js';
37
35
  import '../../chunk-R5XP45PD.js';
38
36
  import '../../chunk-G5EO5FWC.js';
39
37
  import '../../chunk-NCULQXJE.js';
40
38
  import '../../chunk-VDYPDMYR.js';
41
39
  import '../../chunk-WDGIQDQG.js';
42
- import '../../chunk-WKRIKCJC.js';
43
- import '../../chunk-7WDT2PRI.js';
44
- import '../../chunk-AP5Y5M3R.js';
40
+ import '../../chunk-RYOTIXZO.js';
45
41
  import '../../chunk-JZ4G2SJH.js';
46
42
  import '../../chunk-KYGKJ553.js';
47
43
  import '../../chunk-M7YSMMAC.js';
48
44
  import '../../chunk-XQ2UDMPO.js';
49
45
  import '../../chunk-JMCSAGZ3.js';
50
46
  import '../../chunk-QUKDUSHD.js';
51
- import '../../chunk-4NXZIMYZ.js';
52
- import '../../chunk-TBKJ34BB.js';
47
+ import '../../chunk-O74AEVHW.js';
48
+ import '../../chunk-ZUHIWALK.js';
53
49
  import '../../chunk-2IZC7HSV.js';
54
50
  import '../../chunk-2SDZMTB2.js';
55
- import '../../chunk-R3AO6AZM.js';
56
- import '../../chunk-RYOTIXZO.js';
51
+ import '../../chunk-IQEBXXB5.js';
52
+ import '../../chunk-AZUJNRQU.js';
57
53
  import '../../chunk-W3B3UOEG.js';
58
54
  import '../../chunk-ACRVOD7W.js';
59
55
  import '../../chunk-QSU23VYZ.js';
60
56
  import '../../chunk-BJYCQ2NV.js';
61
57
  import '../../chunk-VM462WZC.js';
62
- import '../../chunk-O74AEVHW.js';
63
- import '../../chunk-ZUHIWALK.js';
64
58
  import '../../chunk-5UZDOF6V.js';
65
59
  import '../../chunk-PKVTEDKO.js';
66
60
  import '../../chunk-I3TH7PIB.js';
67
61
  import '../../chunk-WGPK3FQ7.js';
68
62
  import '../../chunk-JL4MVVFH.js';
69
- import '../../chunk-IQEBXXB5.js';
70
- import '../../chunk-AZUJNRQU.js';
63
+ import '../../chunk-4FEAWXJD.js';
64
+ import '../../chunk-JHQTKMKG.js';
71
65
  import '../../chunk-WA45EC4Y.js';
72
66
  import '../../chunk-2MOEOEOI.js';
73
67
  import '../../chunk-5LCXASRW.js';
74
68
  import '../../chunk-2ZJVU7NV.js';
75
69
  import '../../chunk-5ESF6N36.js';
76
70
  import '../../chunk-RBPLOM3A.js';
77
- import '../../chunk-GCUTJI7M.js';
71
+ import '../../chunk-6BAV4TZ5.js';
72
+ import '../../chunk-SW6QPJM4.js';
78
73
  import '../../chunk-2NT57K4U.js';
79
- import '../../chunk-6G3RRWJT.js';
80
74
  import '../../chunk-JRJGSNI4.js';
81
75
  import '../../chunk-RF6ECFS5.js';
82
- import '../../chunk-TV4RSQH4.js';
83
- import '../../chunk-4FEAWXJD.js';
84
- import '../../chunk-JHQTKMKG.js';
76
+ import '../../chunk-KYZT3RNW.js';
77
+ import '../../chunk-UEG2LI7Z.js';
85
78
  import '../../chunk-CI7GPGCJ.js';
86
79
  import '../../chunk-226EBOTK.js';
87
- import '../../chunk-G5YLGJXR.js';
88
- import '../../chunk-G24VV5NO.js';
89
- import '../../chunk-6BAV4TZ5.js';
90
- import '../../chunk-SW6QPJM4.js';
80
+ import '../../chunk-74RKVIBV.js';
91
81
  import '../../chunk-V6WNRZT3.js';
92
82
  import '../../chunk-JBK2LA6U.js';
93
83
  import '../../chunk-55U27XY4.js';
94
84
  import '../../chunk-LSPO6OBI.js';
95
85
  import '../../chunk-Y56WBNCY.js';
96
- import '../../chunk-KYZT3RNW.js';
97
- import '../../chunk-UEG2LI7Z.js';
98
86
  import '../../chunk-JJTQOH7J.js';
99
87
  import '../../chunk-72X6SXOX.js';
100
88
  import '../../chunk-SR5U52V3.js';
101
- import '../../chunk-74RKVIBV.js';
102
89
  import '../../chunk-AWIJHDNK.js';
103
- import '../../chunk-BRP6D56U.js';
104
- import '../../chunk-S733NAYS.js';
105
90
  import '../../chunk-MAUTIHQG.js';
91
+ import '../../chunk-S733NAYS.js';
106
92
  import '../../chunk-666N6OTL.js';
107
93
  import '../../chunk-FMH55OKV.js';
108
94
  import '../../chunk-WXVNTJIB.js';
109
- import '../../chunk-CXACRCZ4.js';
110
95
  import '../../chunk-T7H53CK2.js';
111
- import '../../chunk-BFLN54VR.js';
96
+ import '../../chunk-TBKJ34BB.js';
97
+ import '../../chunk-BRP6D56U.js';
98
+ import '../../chunk-6G3RRWJT.js';
99
+ import '../../chunk-ZU2GYVAP.js';
100
+ import '../../chunk-CRZ2JE24.js';
101
+ import '../../chunk-PSVQ7ZNX.js';
102
+ import '../../chunk-WKRIKCJC.js';
103
+ import '../../chunk-JHQ5NMLZ.js';
104
+ import '../../chunk-WFJQ43SM.js';
105
+ import '../../chunk-AP5Y5M3R.js';
106
+ import '../../chunk-Q7LVUGFL.js';
107
+ import '../../chunk-G5YLGJXR.js';
108
+ import '../../chunk-G24VV5NO.js';
109
+ import '../../chunk-R3AO6AZM.js';
110
+ import '../../chunk-GCUTJI7M.js';
111
+ import '../../chunk-CXACRCZ4.js';
112
112
  import '../../chunk-P6IRHPFM.js';
113
113
  import '../../chunk-SXHYB7JB.js';
114
+ import '../../chunk-BFLN54VR.js';
114
115
  import '../../chunk-ONGJ7AC2.js';
115
116
  import '../../chunk-UHXGBV5N.js';
116
117
  import '../../chunk-UIUMTURU.js';
117
118
  import '../../chunk-PRUXIDBD.js';
118
119
  import '../../chunk-NURPUVUV.js';
120
+ import '../../chunk-TV4RSQH4.js';
119
121
  import '../../chunk-HJBXUXTD.js';
120
122
  import '../../chunk-ASKFAYYR.js';
121
123
  import '../../chunk-QYZT24TS.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { Typography } from '../../chunk-N53OMWW2.js';
3
2
  import { WorkflowGraph } from '../../chunk-VCCI3NRD.js';
3
+ import { Typography } from '../../chunk-N53OMWW2.js';
4
4
  import { Heading } from '../../chunk-WI547C47.js';
5
5
  import { ContextMeter } from '../../chunk-S2WSXZ7Y.js';
6
6
  import { AgentMetricsCard } from '../../chunk-OCQB4IU7.js';
@@ -10,7 +10,11 @@ export interface AgentWorkbenchToolCall {
10
10
  }
11
11
  export interface AgentWorkbenchMessage {
12
12
  id: string;
13
- role: 'user' | 'agent' | 'system';
13
+ /**
14
+ * Message role. Use `"assistant"` for AI messages.
15
+ * @deprecated `"agent"` is accepted for backward compat but will be removed in the next major version.
16
+ */
17
+ role: 'user' | 'assistant' | 'agent' | 'system';
14
18
  content: string;
15
19
  timestamp?: string;
16
20
  toolCalls?: AgentWorkbenchToolCall[];