@vadimcomanescu/nadicode-design-system 2.0.6 → 2.0.8

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 (339) hide show
  1. package/.agents/skills/seed/SKILL.md +17 -8
  2. package/.agents/skills/seed/contract.md +5 -4
  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/recipes/marketing-shell.md +10 -19
  6. package/.agents/skills/seed/recipes/navigation-shell.md +5 -5
  7. package/.agents/skills/seed/recipes/service-detail.md +1 -1
  8. package/.agents/skills/seed/references/blocks.md +30 -26
  9. package/.agents/skills/seed/references/brand-override.md +3 -1
  10. package/.agents/skills/seed/references/components.md +22 -2
  11. package/.agents/skills/seed/references/dashboard-patterns.md +12 -12
  12. package/.agents/skills/seed/references/nextjs.md +20 -80
  13. package/.agents/skills/seed/references/tokens.md +57 -248
  14. package/README.md +43 -215
  15. package/contracts/block-props-schemas.json +2186 -0
  16. package/contracts/component-props-schemas.json +8322 -0
  17. package/contracts/consumer-contract.json +178 -0
  18. package/contracts/consumer-intent-map.json +707 -0
  19. package/contracts/message-catalog-contract.json +820 -0
  20. package/contracts/page-kit-props-schemas.json +1894 -0
  21. package/contracts/public-surface-registry.json +6162 -0
  22. package/contracts/public-surface-registry.schema.json +227 -0
  23. package/contracts/release-governance-baseline.json +850 -0
  24. package/contracts/spec-manifest.json +46 -0
  25. package/css/tokens.css +300 -122
  26. package/dist/catalog.json +2166 -162
  27. package/dist/chunk-2BADJLMV.js +117 -0
  28. package/dist/chunk-35EX5FP5.js +106 -0
  29. package/dist/chunk-4IGBBIYW.js +47 -0
  30. package/dist/chunk-4WPZ6T7V.js +186 -0
  31. package/dist/chunk-5PZ4VR2D.js +142 -0
  32. package/dist/chunk-5UESKK6S.js +76 -0
  33. package/dist/chunk-7A2RXKGH.js +205 -0
  34. package/dist/{chunk-DF47R6LN.js → chunk-AWIG4QN6.js} +9 -9
  35. package/dist/chunk-AYWL4IYM.js +67 -0
  36. package/dist/chunk-C7WHMSF3.js +114 -0
  37. package/dist/{chunk-SV3KZ6CB.js → chunk-DSMGCFMJ.js} +7 -2
  38. package/dist/{chunk-4K3PATUT.js → chunk-EEL4RAPC.js} +13 -1
  39. package/dist/{chunk-ILIHQ2KZ.js → chunk-EK43W2Y6.js} +16 -10
  40. package/dist/chunk-FV2G6SAF.js +134 -0
  41. package/dist/chunk-FX23F33E.js +57 -0
  42. package/dist/chunk-GJPTPLCQ.js +52 -0
  43. package/dist/chunk-HJ3A2YNO.js +163 -0
  44. package/dist/chunk-HJZRSPWB.js +38 -0
  45. package/dist/chunk-HWHJ6IRQ.js +78 -0
  46. package/dist/chunk-HZERHGBT.js +77 -0
  47. package/dist/{chunk-AUSYEAIJ.js → chunk-I66XWYSS.js} +32 -8
  48. package/dist/chunk-IXQGKJU4.js +183 -0
  49. package/dist/chunk-JDJY4ABS.js +60 -0
  50. package/dist/chunk-K7NQ6ZAW.js +84 -0
  51. package/dist/chunk-KWILREVQ.js +147 -0
  52. package/dist/chunk-LCKLZ4XK.js +60 -0
  53. package/dist/{chunk-WI37ZYIF.js → chunk-M4XKO45H.js} +13 -1
  54. package/dist/chunk-NEHCPO53.js +44 -0
  55. package/dist/chunk-OJ7OO3QB.js +269 -0
  56. package/dist/{chunk-ZHTQF2KI.js → chunk-OSNTB6RY.js} +29 -22
  57. package/dist/{chunk-GMMPLZLC.js → chunk-PDSQC6VE.js} +1 -1
  58. package/dist/chunk-QIHA7S3A.js +36 -0
  59. package/dist/chunk-QQOWC53X.js +98 -0
  60. package/dist/chunk-RKQPU75I.js +126 -0
  61. package/dist/chunk-U4GYSYGN.js +120 -0
  62. package/dist/chunk-UGV45DH3.js +18 -0
  63. package/dist/chunk-VBZQ4DBE.js +52 -0
  64. package/dist/{chunk-LQLFA2EL.js → chunk-VDONTZZX.js} +2 -2
  65. package/dist/chunk-VEO56RH4.js +105 -0
  66. package/dist/chunk-VJ5VD4UT.js +91 -0
  67. package/dist/{chunk-RWNJ54CI.js → chunk-VN475YZS.js} +1 -1
  68. package/dist/chunk-VNNAL4A6.js +110 -0
  69. package/dist/chunk-VZCB4APK.js +94 -0
  70. package/dist/chunk-W7FXDRQJ.js +94 -0
  71. package/dist/{chunk-5I3FWRC5.js → chunk-WOYBVPXK.js} +10 -10
  72. package/dist/chunk-WST5NLLC.js +73 -0
  73. package/dist/chunk-X6VXWEDO.js +125 -0
  74. package/dist/chunk-XTASI4IY.js +60 -0
  75. package/dist/chunk-Z233ZQZE.js +33 -0
  76. package/dist/chunk-ZKLB5N3Q.js +110 -0
  77. package/dist/chunk-ZM2NODUK.js +39 -0
  78. package/dist/components/blocks/AccountLockedBlock.js +7 -57
  79. package/dist/components/blocks/ActivityFeedBlock.js +6 -39
  80. package/dist/components/blocks/AgentConversationBlock.d.ts +6 -1
  81. package/dist/components/blocks/AgentConversationBlock.js +45 -71
  82. package/dist/components/blocks/AgentRunOverviewBlock.js +1 -1
  83. package/dist/components/blocks/AgentWorkbenchBlock.d.ts +5 -1
  84. package/dist/components/blocks/AgentWorkbenchBlock.js +47 -46
  85. package/dist/components/blocks/AudioVisualizerBlock.d.ts +1 -1
  86. package/dist/components/blocks/AudioVisualizerBlock.js +2 -2
  87. package/dist/components/blocks/AuthLayout.js +2 -2
  88. package/dist/components/blocks/AuthSuccessBlock.js +5 -60
  89. package/dist/components/blocks/BannerBlock.js +38 -38
  90. package/dist/components/blocks/BarChartBlock.d.ts +1 -1
  91. package/dist/components/blocks/BarChartBlock.js +2 -2
  92. package/dist/components/blocks/CallToActionBlock.d.ts +1 -1
  93. package/dist/components/blocks/CallToActionBlock.js +7 -53
  94. package/dist/components/blocks/ChangelogBlock.js +45 -142
  95. package/dist/components/blocks/ChartBlock.js +38 -38
  96. package/dist/components/blocks/ChartCollectionBlock.js +3 -3
  97. package/dist/components/blocks/ChatLayout.d.ts +4 -1
  98. package/dist/components/blocks/ChatLayout.js +39 -39
  99. package/dist/components/blocks/CodeBlock.js +7 -60
  100. package/dist/components/blocks/ComparisonBlock.js +9 -94
  101. package/dist/components/blocks/ContactBlock.js +11 -120
  102. package/dist/components/blocks/CreateBlock.js +39 -39
  103. package/dist/components/blocks/DataGridBlock.js +40 -40
  104. package/dist/components/blocks/DirectoryBlock.js +43 -43
  105. package/dist/components/blocks/FAQBlock.js +44 -82
  106. package/dist/components/blocks/FeatureBlock.d.ts +10 -14
  107. package/dist/components/blocks/FeatureBlock.js +54 -196
  108. package/dist/components/blocks/FeatureGridBlock.d.ts +1 -1
  109. package/dist/components/blocks/FeatureGridBlock.js +2 -2
  110. package/dist/components/blocks/FooterBlock.d.ts +2 -2
  111. package/dist/components/blocks/FooterBlock.js +11 -67
  112. package/dist/components/blocks/GalleryBlock.js +38 -38
  113. package/dist/components/blocks/HeaderBlock.d.ts +2 -2
  114. package/dist/components/blocks/HeaderBlock.js +39 -39
  115. package/dist/components/blocks/HeatmapChartBlock.d.ts +1 -1
  116. package/dist/components/blocks/HeatmapChartBlock.js +1 -1
  117. package/dist/components/blocks/HeroBlock.d.ts +6 -3
  118. package/dist/components/blocks/HeroBlock.js +53 -236
  119. package/dist/components/blocks/HeroSectionBlock.d.ts +1 -1
  120. package/dist/components/blocks/HeroSectionBlock.js +59 -63
  121. package/dist/components/blocks/IntegrationsBlock.d.ts +1 -1
  122. package/dist/components/blocks/IntegrationsBlock.js +42 -42
  123. package/dist/components/blocks/InteractiveAreaChartBlock.d.ts +1 -1
  124. package/dist/components/blocks/InteractiveAreaChartBlock.js +40 -40
  125. package/dist/components/blocks/KanbanDemoBlock.js +3 -3
  126. package/dist/components/blocks/LoginBlock.js +2 -2
  127. package/dist/components/blocks/LogoCloud.js +2 -13
  128. package/dist/components/blocks/NavUser.js +42 -42
  129. package/dist/components/blocks/NewsletterBlock.js +11 -84
  130. package/dist/components/blocks/NotFoundBlock.js +41 -41
  131. package/dist/components/blocks/OnboardingBlock.js +38 -38
  132. package/dist/components/blocks/PasswordRecoveryBlock.js +14 -142
  133. package/dist/components/blocks/PricingBlock.d.ts +1 -1
  134. package/dist/components/blocks/PricingBlock.js +13 -112
  135. package/dist/components/blocks/ProcessFlowBlock.js +10 -77
  136. package/dist/components/blocks/ResetPasswordBlock.js +11 -125
  137. package/dist/components/blocks/SettingsLayout.js +42 -42
  138. package/dist/components/blocks/SignUpBlock.d.ts +1 -1
  139. package/dist/components/blocks/SignUpBlock.js +3 -3
  140. package/dist/components/blocks/SocialProofBlock.d.ts +7 -11
  141. package/dist/components/blocks/SocialProofBlock.js +10 -108
  142. package/dist/components/blocks/StatsBlock.d.ts +1 -1
  143. package/dist/components/blocks/StatsBlock.js +40 -40
  144. package/dist/components/blocks/StatsMarketingBlock.d.ts +1 -1
  145. package/dist/components/blocks/StatsMarketingBlock.js +7 -38
  146. package/dist/components/blocks/TeamBlock.d.ts +1 -1
  147. package/dist/components/blocks/TeamBlock.js +4 -52
  148. package/dist/components/blocks/TestimonialsBlock.d.ts +1 -1
  149. package/dist/components/blocks/TestimonialsBlock.js +5 -133
  150. package/dist/components/blocks/TwoFactorChallengeBlock.js +46 -131
  151. package/dist/components/blocks/TwoFactorSetupBlock.js +53 -220
  152. package/dist/components/blocks/UsageDonutBlock.d.ts +1 -1
  153. package/dist/components/blocks/UsageDonutBlock.js +2 -2
  154. package/dist/components/blocks/VoiceAgentCard.d.ts +3 -1
  155. package/dist/components/blocks/VoiceAgentCard.js +7 -76
  156. package/dist/components/blocks/WizardBlock.js +39 -39
  157. package/dist/components/blocks/user/InviteUserModal.js +38 -38
  158. package/dist/components/logos/index.js +2 -2
  159. package/dist/components/page-kits/AccountLockedPageKit.d.ts +10 -0
  160. package/dist/components/page-kits/AccountLockedPageKit.js +48 -0
  161. package/dist/components/page-kits/AgentsChatPageKit.d.ts +46 -0
  162. package/dist/components/page-kits/AgentsChatPageKit.js +290 -0
  163. package/dist/components/page-kits/AnalyticsPageKit.d.ts +49 -0
  164. package/dist/components/page-kits/AnalyticsPageKit.js +277 -0
  165. package/dist/components/page-kits/BlogContentPageKit.d.ts +64 -0
  166. package/dist/components/page-kits/BlogContentPageKit.js +296 -0
  167. package/dist/components/page-kits/CheckoutPageKit.d.ts +36 -0
  168. package/dist/components/page-kits/CheckoutPageKit.js +209 -0
  169. package/dist/components/page-kits/CompanySuitePageKit.d.ts +25 -0
  170. package/dist/components/page-kits/CompanySuitePageKit.js +240 -0
  171. package/dist/components/page-kits/CrudFormPageKit.d.ts +54 -0
  172. package/dist/components/page-kits/CrudFormPageKit.js +138 -0
  173. package/dist/components/page-kits/CrudListDetailPageKit.d.ts +70 -0
  174. package/dist/components/page-kits/CrudListDetailPageKit.js +138 -0
  175. package/dist/components/page-kits/DashboardPageKit.d.ts +39 -0
  176. package/dist/components/page-kits/DashboardPageKit.js +284 -0
  177. package/dist/components/page-kits/ErrorPageKit.d.ts +22 -0
  178. package/dist/components/page-kits/ErrorPageKit.js +55 -0
  179. package/dist/components/page-kits/KanbanBoardPageKit.d.ts +31 -0
  180. package/dist/components/page-kits/KanbanBoardPageKit.js +305 -0
  181. package/dist/components/page-kits/LandingPageKit.d.ts +29 -0
  182. package/dist/components/page-kits/LandingPageKit.js +222 -0
  183. package/dist/components/page-kits/LoginPageKit.d.ts +16 -0
  184. package/dist/components/page-kits/LoginPageKit.js +43 -0
  185. package/dist/components/page-kits/MarketingShellPageKit.d.ts +21 -0
  186. package/dist/components/page-kits/MarketingShellPageKit.js +131 -0
  187. package/dist/components/page-kits/NavigationShellPageKit.d.ts +41 -0
  188. package/dist/components/page-kits/NavigationShellPageKit.js +132 -0
  189. package/dist/components/page-kits/OnboardingPageKit.d.ts +26 -0
  190. package/dist/components/page-kits/OnboardingPageKit.js +248 -0
  191. package/dist/components/page-kits/PricingPageKit.d.ts +41 -0
  192. package/dist/components/page-kits/PricingPageKit.js +279 -0
  193. package/dist/components/page-kits/ProfileSettingsPageKit.d.ts +50 -0
  194. package/dist/components/page-kits/ProfileSettingsPageKit.js +171 -0
  195. package/dist/components/page-kits/RecoveryPageKit.d.ts +17 -0
  196. package/dist/components/page-kits/RecoveryPageKit.js +58 -0
  197. package/dist/components/page-kits/ResetPageKit.d.ts +14 -0
  198. package/dist/components/page-kits/ResetPageKit.js +52 -0
  199. package/dist/components/page-kits/ServiceSuitePageKit.d.ts +25 -0
  200. package/dist/components/page-kits/ServiceSuitePageKit.js +321 -0
  201. package/dist/components/page-kits/SettingsPageKit.d.ts +27 -0
  202. package/dist/components/page-kits/SettingsPageKit.js +11 -0
  203. package/dist/components/page-kits/SignupPageKit.d.ts +15 -0
  204. package/dist/components/page-kits/SignupPageKit.js +41 -0
  205. package/dist/components/page-kits/SuccessPageKit.d.ts +15 -0
  206. package/dist/components/page-kits/SuccessPageKit.js +146 -0
  207. package/dist/components/page-kits/TeamSettingsPageKit.d.ts +50 -0
  208. package/dist/components/page-kits/TeamSettingsPageKit.js +297 -0
  209. package/dist/components/page-kits/TwoFactorPageKit.d.ts +16 -0
  210. package/dist/components/page-kits/TwoFactorPageKit.js +156 -0
  211. package/dist/components/page-kits/VerifyEmailPageKit.d.ts +15 -0
  212. package/dist/components/page-kits/VerifyEmailPageKit.js +146 -0
  213. package/dist/components/page-kits/VoiceAgentsPageKit.d.ts +35 -0
  214. package/dist/components/page-kits/VoiceAgentsPageKit.js +250 -0
  215. package/dist/components/ui/Accordion.js +38 -38
  216. package/dist/components/ui/AgentMessageBubble.d.ts +20 -4
  217. package/dist/components/ui/AgentMessageBubble.js +39 -39
  218. package/dist/components/ui/AgentStatus.d.ts +1 -1
  219. package/dist/components/ui/AgentStatus.js +5 -10
  220. package/dist/components/ui/AgentTerminal.d.ts +4 -1
  221. package/dist/components/ui/AgentTerminal.js +3 -1
  222. package/dist/components/ui/AgentTimeline.d.ts +2 -2
  223. package/dist/components/ui/AgentTimeline.js +15 -6
  224. package/dist/components/ui/AnimatedDialog.js +38 -38
  225. package/dist/components/ui/AnimatedSheet.js +38 -38
  226. package/dist/components/ui/ApprovalCard.js +1 -1
  227. package/dist/components/ui/AudioWaveform.js +2 -76
  228. package/dist/components/ui/AvatarUpload.js +1 -1
  229. package/dist/components/ui/Breadcrumb.js +41 -143
  230. package/dist/components/ui/Calendar.js +38 -38
  231. package/dist/components/ui/Carousel.js +38 -38
  232. package/dist/components/ui/ChartCard.js +5 -38
  233. package/dist/components/ui/ChatActions.d.ts +14 -0
  234. package/dist/components/ui/ChatActions.js +52 -0
  235. package/dist/components/ui/ChatBranch.d.ts +18 -0
  236. package/dist/components/ui/ChatBranch.js +84 -0
  237. package/dist/components/ui/ChatChainOfThought.d.ts +25 -0
  238. package/dist/components/ui/ChatChainOfThought.js +99 -0
  239. package/dist/components/ui/ChatConfirmation.d.ts +37 -0
  240. package/dist/components/ui/ChatConfirmation.js +115 -0
  241. package/dist/components/ui/ChatGreeting.d.ts +18 -0
  242. package/dist/components/ui/ChatGreeting.js +80 -0
  243. package/dist/components/ui/ChatMessage.d.ts +40 -0
  244. package/dist/components/ui/ChatMessage.js +96 -0
  245. package/dist/components/ui/ChatPlan.d.ts +29 -0
  246. package/dist/components/ui/ChatPlan.js +86 -0
  247. package/dist/components/ui/ChatPromptInput.d.ts +32 -0
  248. package/dist/components/ui/ChatPromptInput.js +193 -0
  249. package/dist/components/ui/ChatPromptInputAttachments.d.ts +9 -0
  250. package/dist/components/ui/ChatPromptInputAttachments.js +145 -0
  251. package/dist/components/ui/ChatQueue.d.ts +32 -0
  252. package/dist/components/ui/ChatQueue.js +93 -0
  253. package/dist/components/ui/ChatReasoning.d.ts +20 -0
  254. package/dist/components/ui/ChatReasoning.js +91 -0
  255. package/dist/components/ui/ChatResponse.d.ts +14 -0
  256. package/dist/components/ui/ChatResponse.js +25 -0
  257. package/dist/components/ui/ChatShimmer.d.ts +23 -0
  258. package/dist/components/ui/ChatShimmer.js +6 -0
  259. package/dist/components/ui/ChatSources.d.ts +30 -0
  260. package/dist/components/ui/ChatSources.js +113 -0
  261. package/dist/components/ui/ChatSuggestion.d.ts +13 -0
  262. package/dist/components/ui/ChatSuggestion.js +41 -0
  263. package/dist/components/ui/ChatThinkingMessage.d.ts +12 -0
  264. package/dist/components/ui/ChatThinkingMessage.js +55 -0
  265. package/dist/components/ui/ChatToolCall.d.ts +41 -0
  266. package/dist/components/ui/ChatToolCall.js +192 -0
  267. package/dist/components/ui/CheckStatus.d.ts +1 -1
  268. package/dist/components/ui/Checkbox.js +38 -38
  269. package/dist/components/ui/CheckoutForm.js +38 -38
  270. package/dist/components/ui/CheckoutFormDemo.js +43 -44
  271. package/dist/components/ui/Combobox.js +38 -38
  272. package/dist/components/ui/Command.js +38 -38
  273. package/dist/components/ui/ContextMenu.js +38 -38
  274. package/dist/components/ui/Conversation.d.ts +21 -0
  275. package/dist/components/ui/Conversation.js +196 -0
  276. package/dist/components/ui/ConversationThread.d.ts +8 -2
  277. package/dist/components/ui/ConversationThread.js +34 -16
  278. package/dist/components/ui/DataFreshness.js +2 -73
  279. package/dist/components/ui/DataTable.js +40 -40
  280. package/dist/components/ui/DatePicker.js +38 -38
  281. package/dist/components/ui/DateRangePicker.js +38 -38
  282. package/dist/components/ui/Dialog.js +38 -38
  283. package/dist/components/ui/DropdownMenu.js +39 -39
  284. package/dist/components/ui/FileUpload.js +38 -38
  285. package/dist/components/ui/InputOTP.js +38 -38
  286. package/dist/components/ui/KanbanBoard.js +2 -2
  287. package/dist/components/ui/LanguageSwitcher.js +38 -38
  288. package/dist/components/ui/Menubar.js +38 -38
  289. package/dist/components/ui/MouseEffect.js +1 -1
  290. package/dist/components/ui/NativeSelect.js +2 -18
  291. package/dist/components/ui/NavigationMenu.js +38 -38
  292. package/dist/components/ui/NotificationCenter.js +38 -38
  293. package/dist/components/ui/Pagination.js +42 -153
  294. package/dist/components/ui/RadioGroup.js +38 -38
  295. package/dist/components/ui/Resizable.js +38 -38
  296. package/dist/components/ui/SearchCommand.js +38 -38
  297. package/dist/components/ui/Select.js +38 -38
  298. package/dist/components/ui/SettingsModal.js +38 -38
  299. package/dist/components/ui/ShaderBackground.js +2 -2
  300. package/dist/components/ui/Sheet.js +38 -38
  301. package/dist/components/ui/Sidebar.js +41 -41
  302. package/dist/components/ui/StyleToggle.js +1 -1
  303. package/dist/components/ui/TagInput.js +38 -38
  304. package/dist/components/ui/ThemeToggle.js +39 -39
  305. package/dist/components/ui/ThinkingIndicator.d.ts +3 -1
  306. package/dist/components/ui/ThinkingIndicator.js +2 -1
  307. package/dist/components/ui/Toast.js +38 -38
  308. package/dist/components/ui/Toaster.js +38 -38
  309. package/dist/components/ui/ToolCallCard.d.ts +1 -1
  310. package/dist/components/ui/ToolCallCard.js +5 -1
  311. package/dist/components/ui/TreeView.js +38 -38
  312. package/dist/components/ui/charts/index.js +1 -1
  313. package/dist/components/ui/icons/index.js +38 -38
  314. package/dist/components/ui/text-effects/index.js +2 -2
  315. package/dist/hooks/use-scroll-to-bottom.d.ts +13 -0
  316. package/dist/hooks/use-scroll-to-bottom.js +2 -0
  317. package/dist/hooks/use-shader-preset.js +2 -2
  318. package/dist/index.js +43 -43
  319. package/dist/internal/local-image-assets.d.ts +12 -0
  320. package/dist/lib/shader-presets.js +1 -1
  321. package/dist/lib/tokens.config.d.ts +19 -0
  322. package/dist/messages/en.js +1 -1
  323. package/dist/messages/it.js +1 -1
  324. package/dist/test/PublicSeedTestProvider.js +2 -2
  325. package/dist/test/simulate-ime-composition.d.ts +54 -0
  326. package/dist/test/simulate-ime-composition.js +55 -0
  327. package/eslint-rules/nadicode/config.js +2 -0
  328. package/eslint-rules/nadicode/index.js +4 -0
  329. package/eslint-rules/nadicode/rules/no-deprecated-ds-import.js +77 -0
  330. package/eslint-rules/nadicode/rules/no-forbidden-page-kit-import.js +99 -0
  331. package/eslint-rules/nadicode/rules/no-unregistered-glass.js +2 -0
  332. package/package.json +895 -686
  333. package/scripts/ds-check.mjs +102 -73
  334. package/src/lib/tokens.config.js +63 -41
  335. package/dist/chunk-MLUSJTS2.js +0 -107
  336. package/dist/{chunk-5DKCZWC6.js → chunk-CQEUNASC.js} +1 -1
  337. package/dist/{chunk-4HRVRW2X.js → chunk-J2DCQDXO.js} +2 -2
  338. package/dist/{chunk-6MFAZU4B.js → chunk-RGE5OQMZ.js} +1 -1
  339. package/dist/{chunk-PJNHVPHF.js → chunk-TYP2MR3Q.js} +1 -1
@@ -10,12 +10,18 @@ var bubbleVariants = cva(
10
10
  variants: {
11
11
  role: {
12
12
  user: "ml-auto bg-primary/10 border-primary/20 text-text-primary",
13
+ assistant: "mr-auto glass-panel border-border text-text-primary",
13
14
  agent: "mr-auto glass-panel border-border text-text-primary",
14
15
  system: "mx-auto bg-muted border-border text-text-secondary text-center text-xs"
16
+ },
17
+ status: {
18
+ default: "",
19
+ error: "border-destructive/40 bg-destructive/5"
15
20
  }
16
21
  },
17
22
  defaultVariants: {
18
- role: "agent"
23
+ role: "assistant",
24
+ status: "default"
19
25
  }
20
26
  }
21
27
  );
@@ -26,6 +32,7 @@ function AgentMessageBubble({
26
32
  avatar,
27
33
  timestamp,
28
34
  toolCalls,
35
+ status = "default",
29
36
  actions,
30
37
  isStreaming,
31
38
  ref,
@@ -45,11 +52,28 @@ function AgentMessageBubble({
45
52
  children: [
46
53
  avatar && role !== "system" && /* @__PURE__ */ jsx("div", { className: "flex-shrink-0", "aria-hidden": "true", children: avatar }),
47
54
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 min-w-0", children: [
48
- /* @__PURE__ */ jsxs("div", { className: cn(bubbleVariants({ role })), children: [
49
- /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap break-words", children: content }),
50
- isStreaming && /* @__PURE__ */ jsx("span", { className: "inline-block w-1.5 h-4 ml-0.5 bg-accent animate-pulse rounded-sm" })
51
- ] }),
52
- !!toolCalls && /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5 mt-1.5", children: toolCalls }),
55
+ /* @__PURE__ */ jsxs(
56
+ "div",
57
+ {
58
+ className: cn(bubbleVariants({ role, status })),
59
+ ...isStreaming ? { "aria-live": "polite" } : {},
60
+ children: [
61
+ /* @__PURE__ */ jsx("p", { className: "whitespace-pre-wrap break-words", children: content }),
62
+ !!isStreaming && /* @__PURE__ */ jsx("span", { className: "inline-block w-1.5 h-4 ml-0.5 bg-accent animate-pulse rounded-sm" })
63
+ ]
64
+ }
65
+ ),
66
+ !!toolCalls && (Array.isArray(toolCalls) ? toolCalls.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5 mt-1.5", children: toolCalls.map((tc) => /* @__PURE__ */ jsx(
67
+ "span",
68
+ {
69
+ className: cn(
70
+ "inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs",
71
+ tc.state === "error" ? "border-destructive/30 text-destructive" : tc.state === "complete" ? "border-success/30 text-success" : tc.state === "running" ? "border-accent/30 text-accent" : "border-border text-text-tertiary"
72
+ ),
73
+ children: tc.name
74
+ },
75
+ tc.id
76
+ )) }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5 mt-1.5", children: toolCalls })),
53
77
  /* @__PURE__ */ jsxs(
54
78
  "div",
55
79
  {
@@ -67,7 +91,7 @@ function AgentMessageBubble({
67
91
  onClick: actions.onCopy,
68
92
  className: "hover:text-text-secondary transition-colors",
69
93
  "aria-label": "Copy message",
70
- children: /* @__PURE__ */ jsx(CopyIcon, { size: 12 })
94
+ children: /* @__PURE__ */ jsx(CopyIcon, { size: 12, "aria-hidden": "true" })
71
95
  }
72
96
  ),
73
97
  actions.onRetry && /* @__PURE__ */ jsx(
@@ -77,7 +101,7 @@ function AgentMessageBubble({
77
101
  onClick: actions.onRetry,
78
102
  className: "hover:text-text-secondary transition-colors",
79
103
  "aria-label": "Retry message",
80
- children: /* @__PURE__ */ jsx(RefreshCWIcon, { size: 12 })
104
+ children: /* @__PURE__ */ jsx(RefreshCWIcon, { size: 12, "aria-hidden": "true" })
81
105
  }
82
106
  )
83
107
  ] })
@@ -0,0 +1,183 @@
1
+ import { useSafeTimeout } from './chunk-MDAYDDTC.js';
2
+ import { StaggerChildren } from './chunk-DQPK2XRL.js';
3
+ import { InputOTP, InputOTPGroup, InputOTPSlot } from './chunk-WN5ONOHC.js';
4
+ import { FormWizard } from './chunk-T5LXQNIP.js';
5
+ import { Checkbox } from './chunk-756Q7AC5.js';
6
+ import { Label } from './chunk-LIBXYD5Q.js';
7
+ import { Empty, EmptyDescription } from './chunk-55HD4L6G.js';
8
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent } from './chunk-VJIL7W55.js';
9
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent } from './chunk-AH6YSYYT.js';
10
+ import { Button } from './chunk-7KIDDF3I.js';
11
+ import { m, scaleIn } from './chunk-PD2YEH3H.js';
12
+ import { ShieldIcon } from './chunk-P6IRHPFM.js';
13
+ import { Badge } from './chunk-S4JAHKOP.js';
14
+ import { CopyIcon } from './chunk-TV4RSQH4.js';
15
+ import { cn } from './chunk-QYZT24TS.js';
16
+ import * as React from 'react';
17
+ import { useReducedMotion } from 'motion/react';
18
+ import { jsxs, jsx } from 'react/jsx-runtime';
19
+
20
+ var DEFAULT_BACKUP_CODES = [
21
+ "a1b2-c3d4",
22
+ "e5f6-g7h8",
23
+ "i9j0-k1l2",
24
+ "m3n4-o5p6",
25
+ "q7r8-s9t0",
26
+ "u1v2-w3x4",
27
+ "y5z6-a7b8",
28
+ "c9d0-e1f2"
29
+ ];
30
+ function TwoFactorSetupBlock({
31
+ className,
32
+ qrCodeUrl,
33
+ secret = "JBSWY3DPEHPK3PXP",
34
+ backupCodes = DEFAULT_BACKUP_CODES,
35
+ onVerify,
36
+ onComplete,
37
+ title = "Set up two-factor authentication",
38
+ description = "Add an extra layer of security to your account"
39
+ }) {
40
+ const prefersReduced = useReducedMotion();
41
+ const [otpCode, setOtpCode] = React.useState("");
42
+ const [verified, setVerified] = React.useState(false);
43
+ const [verifying, setVerifying] = React.useState(false);
44
+ const [verifyError, setVerifyError] = React.useState();
45
+ const [savedCodes, setSavedCodes] = React.useState(false);
46
+ const [copied, setCopied] = React.useState(false);
47
+ const setSafeTimeout = useSafeTimeout();
48
+ const copyToClipboard = (text) => {
49
+ navigator.clipboard.writeText(text);
50
+ setCopied(true);
51
+ setSafeTimeout(() => setCopied(false), 2e3);
52
+ };
53
+ const copyAllCodes = () => {
54
+ copyToClipboard(backupCodes.join("\n"));
55
+ };
56
+ const downloadCodes = () => {
57
+ const blob = new Blob([backupCodes.join("\n")], { type: "text/plain" });
58
+ const url = URL.createObjectURL(blob);
59
+ const a = document.createElement("a");
60
+ a.href = url;
61
+ a.download = "backup-codes.txt";
62
+ a.click();
63
+ URL.revokeObjectURL(url);
64
+ };
65
+ const handleVerify = (value) => {
66
+ setOtpCode(value);
67
+ setVerifyError(void 0);
68
+ setVerified(false);
69
+ if (value.length !== 6) {
70
+ setVerifying(false);
71
+ return;
72
+ }
73
+ if (!onVerify) {
74
+ setVerified(true);
75
+ return;
76
+ }
77
+ setVerifying(true);
78
+ void Promise.resolve(onVerify(value)).then((ok) => {
79
+ if (ok) {
80
+ setVerified(true);
81
+ return;
82
+ }
83
+ setVerifyError("Verification failed. Please try again.");
84
+ }).catch(() => {
85
+ setVerifyError("Verification failed. Please try again.");
86
+ }).finally(() => {
87
+ setVerifying(false);
88
+ });
89
+ };
90
+ const steps = [
91
+ {
92
+ id: "scan",
93
+ title: "Scan QR code",
94
+ content: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
95
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: qrCodeUrl ? /* @__PURE__ */ jsx("img", { src: qrCodeUrl, alt: "QR Code", className: "h-48 w-48 rounded-lg border border-border" }) : /* @__PURE__ */ jsx(Empty, { className: "h-48 w-48", children: /* @__PURE__ */ jsx(EmptyDescription, { children: "QR Code" }) }) }),
96
+ /* @__PURE__ */ jsxs(Collapsible, { children: [
97
+ /* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "default", className: "w-full text-text-tertiary", children: [
98
+ "Can",
99
+ "'",
100
+ "t scan? Enter code manually"
101
+ ] }) }),
102
+ /* @__PURE__ */ jsx(CollapsibleContent, { className: "pt-2", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 rounded-md border border-border bg-surface p-4", children: [
103
+ /* @__PURE__ */ jsx("code", { className: "flex-1 text-sm font-mono text-text-primary break-all", children: secret }),
104
+ /* @__PURE__ */ jsx(
105
+ Button,
106
+ {
107
+ variant: "ghost",
108
+ size: "icon",
109
+ onClick: () => copyToClipboard(secret),
110
+ children: /* @__PURE__ */ jsx(CopyIcon, { size: 14 })
111
+ }
112
+ )
113
+ ] }) })
114
+ ] })
115
+ ] })
116
+ },
117
+ {
118
+ id: "verify",
119
+ title: "Verify code",
120
+ content: /* @__PURE__ */ jsxs("div", { className: "space-y-4 text-center", children: [
121
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: "Enter the 6-digit code from your authenticator app" }),
122
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(InputOTP, { maxLength: 6, value: otpCode, onChange: handleVerify, children: /* @__PURE__ */ jsxs(InputOTPGroup, { children: [
123
+ /* @__PURE__ */ jsx(InputOTPSlot, { index: 0 }),
124
+ /* @__PURE__ */ jsx(InputOTPSlot, { index: 1 }),
125
+ /* @__PURE__ */ jsx(InputOTPSlot, { index: 2 }),
126
+ /* @__PURE__ */ jsx(InputOTPSlot, { index: 3 }),
127
+ /* @__PURE__ */ jsx(InputOTPSlot, { index: 4 }),
128
+ /* @__PURE__ */ jsx(InputOTPSlot, { index: 5 })
129
+ ] }) }) }),
130
+ !!verifying && /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: "Verifying..." }),
131
+ !!verifyError && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-destructive", children: verifyError }),
132
+ !!verified && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-success", children: "Code verified successfully" })
133
+ ] }),
134
+ validate: () => verified
135
+ },
136
+ {
137
+ id: "backup",
138
+ title: "Save backup codes",
139
+ content: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
140
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: "Save these backup codes in a secure location. Each code can only be used once." }),
141
+ /* @__PURE__ */ jsx(StaggerChildren, { staggerMs: 40, className: "grid grid-cols-2 gap-2", children: backupCodes.map((code) => /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "justify-center font-mono text-xs py-1.5", children: code }, code)) }),
142
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
143
+ /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "default", className: "flex-1", onClick: copyAllCodes, children: [
144
+ /* @__PURE__ */ jsx(CopyIcon, { size: 14, className: "mr-2" }),
145
+ copied ? "Copied!" : "Copy all"
146
+ ] }),
147
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "default", className: "flex-1", onClick: downloadCodes, children: "Download" })
148
+ ] }),
149
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 pt-2", children: [
150
+ /* @__PURE__ */ jsx(
151
+ Checkbox,
152
+ {
153
+ id: "saved-codes",
154
+ checked: savedCodes,
155
+ onCheckedChange: (v) => setSavedCodes(v === true)
156
+ }
157
+ ),
158
+ /* @__PURE__ */ jsx(Label, { htmlFor: "saved-codes", className: "text-sm", children: "I have saved my backup codes" })
159
+ ] })
160
+ ] }),
161
+ validate: () => savedCodes
162
+ }
163
+ ];
164
+ return /* @__PURE__ */ jsx(m.div, { ...prefersReduced ? {} : scaleIn, className: cn("w-full max-w-lg mx-auto", className), children: /* @__PURE__ */ jsxs(Card, { children: [
165
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
166
+ /* @__PURE__ */ jsx(ShieldIcon, { size: 32, className: "text-text-secondary" }),
167
+ /* @__PURE__ */ jsxs("div", { children: [
168
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-xl", children: title }),
169
+ /* @__PURE__ */ jsx(CardDescription, { children: description })
170
+ ] })
171
+ ] }) }),
172
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
173
+ FormWizard,
174
+ {
175
+ steps,
176
+ onComplete,
177
+ completeLabel: "Done"
178
+ }
179
+ ) })
180
+ ] }) });
181
+ }
182
+
183
+ export { TwoFactorSetupBlock };
@@ -0,0 +1,60 @@
1
+ import { m } from './chunk-PD2YEH3H.js';
2
+ import { cn } from './chunk-QYZT24TS.js';
3
+ import { memo, useMemo } from 'react';
4
+ import { useReducedMotion } from 'motion/react';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ function ChatShimmerInner({
8
+ children,
9
+ as: Component = "span",
10
+ className,
11
+ duration = 2,
12
+ spread = 2,
13
+ ref
14
+ }) {
15
+ const prefersReduced = useReducedMotion();
16
+ const dynamicSpread = useMemo(
17
+ () => (children?.length ?? 0) * spread,
18
+ [children, spread]
19
+ );
20
+ const style = {
21
+ "--spread": `${dynamicSpread}px`,
22
+ backgroundImage: "var(--bg), linear-gradient(var(--color-text-secondary), var(--color-text-secondary))"
23
+ };
24
+ if (prefersReduced) {
25
+ return /* @__PURE__ */ jsx(
26
+ Component,
27
+ {
28
+ ref,
29
+ className: cn("inline-block text-text-secondary", className),
30
+ "data-shimmer": "true",
31
+ children
32
+ }
33
+ );
34
+ }
35
+ const MotionComponent = m[Component];
36
+ return /* @__PURE__ */ jsx(
37
+ MotionComponent,
38
+ {
39
+ ref,
40
+ className: cn(
41
+ "inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent",
42
+ "[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-text-primary),#0000_calc(50%+var(--spread)))] [background-repeat:no-repeat,padding-box]",
43
+ className
44
+ ),
45
+ "data-shimmer": "true",
46
+ style,
47
+ initial: { backgroundPosition: "100% center" },
48
+ animate: { backgroundPosition: "0% center" },
49
+ transition: {
50
+ repeat: Number.POSITIVE_INFINITY,
51
+ duration,
52
+ ease: "linear"
53
+ },
54
+ children
55
+ }
56
+ );
57
+ }
58
+ var ChatShimmer = memo(ChatShimmerInner);
59
+
60
+ export { ChatShimmer };
@@ -0,0 +1,84 @@
1
+ import { Shine } from './chunk-DARC2ACH.js';
2
+ import { useSafeTimeout } from './chunk-MDAYDDTC.js';
3
+ import { Typography } from './chunk-N53OMWW2.js';
4
+ import { Spinner } from './chunk-ZLSWCV55.js';
5
+ import { Heading } from './chunk-WI547C47.js';
6
+ import { Input } from './chunk-AP3XXYAY.js';
7
+ import { ScrollFadeIn } from './chunk-I23DDSU7.js';
8
+ import { Button } from './chunk-7KIDDF3I.js';
9
+ import { CheckIcon } from './chunk-CXACRCZ4.js';
10
+ import { cn } from './chunk-QYZT24TS.js';
11
+ import { useState } from 'react';
12
+ import { jsx, jsxs } from 'react/jsx-runtime';
13
+
14
+ function NewsletterBlock({
15
+ onSubscribe,
16
+ title = "Stay in the loop",
17
+ description = "Get notified about new components, updates, and design system tips. No spam.",
18
+ className
19
+ }) {
20
+ const [email, setEmail] = useState("");
21
+ const [status, setStatus] = useState("idle");
22
+ const setSafeTimeout = useSafeTimeout();
23
+ const handleSubmit = async (e) => {
24
+ e.preventDefault();
25
+ if (!email.trim()) return;
26
+ setStatus("loading");
27
+ try {
28
+ await onSubscribe?.(email);
29
+ } catch {
30
+ }
31
+ setSafeTimeout(() => {
32
+ setStatus("success");
33
+ setSafeTimeout(() => {
34
+ setStatus("idle");
35
+ setEmail("");
36
+ }, 3e3);
37
+ }, 600);
38
+ };
39
+ return /* @__PURE__ */ jsx("section", { className: cn("py-16 md:py-24", className), children: /* @__PURE__ */ jsx("div", { className: "mx-auto max-w-xl px-6", children: /* @__PURE__ */ jsx(ScrollFadeIn, { children: /* @__PURE__ */ jsx(Shine, { enableOnHover: true, loop: true, loopDelay: 300, color: "var(--color-accent)", opacity: 0.1, children: /* @__PURE__ */ jsxs("div", { className: "glass-panel rounded-2xl border border-border/50 p-8 text-center sm:p-12", children: [
40
+ /* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "text-text-primary", children: title }),
41
+ /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-4 text-text-secondary", children: description }),
42
+ status === "success" ? /* @__PURE__ */ jsxs("div", { className: "mt-8 flex items-center justify-center gap-2 text-success", children: [
43
+ /* @__PURE__ */ jsx(CheckIcon, { size: 20 }),
44
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium", children: [
45
+ "You",
46
+ "'",
47
+ "re subscribed!"
48
+ ] })
49
+ ] }) : /* @__PURE__ */ jsxs(
50
+ "form",
51
+ {
52
+ onSubmit: handleSubmit,
53
+ className: "mt-8 flex flex-col gap-4 sm:flex-row",
54
+ children: [
55
+ /* @__PURE__ */ jsx(
56
+ Input,
57
+ {
58
+ name: "email",
59
+ type: "email",
60
+ placeholder: "you@example.com",
61
+ value: email,
62
+ onChange: (e) => setEmail(e.target.value),
63
+ required: true,
64
+ className: "flex-1"
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsx(
68
+ Button,
69
+ {
70
+ type: "submit",
71
+ variant: "accent",
72
+ disabled: status === "loading",
73
+ className: "shrink-0",
74
+ children: status === "loading" ? /* @__PURE__ */ jsx(Spinner, { className: "h-4 w-4" }) : "Subscribe"
75
+ }
76
+ )
77
+ ]
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "mt-4 text-text-tertiary", children: "Unsubscribe anytime. We respect your inbox." })
81
+ ] }) }) }) }) });
82
+ }
83
+
84
+ export { NewsletterBlock };
@@ -0,0 +1,147 @@
1
+ import { NavigationShellPageKit } from './chunk-ZKLB5N3Q.js';
2
+ import { Typography } from './chunk-N53OMWW2.js';
3
+ import { Textarea } from './chunk-4OBE2FS2.js';
4
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-WH62BE24.js';
5
+ import { Heading } from './chunk-WI547C47.js';
6
+ import { FieldSet, Field, FieldLabel, FieldDescription, FieldError } from './chunk-RX5EUODB.js';
7
+ import { Input } from './chunk-AP3XXYAY.js';
8
+ import { Card, CardHeader, CardTitle, CardContent } from './chunk-AH6YSYYT.js';
9
+ import { Button } from './chunk-7KIDDF3I.js';
10
+ import { Badge } from './chunk-S4JAHKOP.js';
11
+ import { cn } from './chunk-QYZT24TS.js';
12
+ import { jsx, jsxs } from 'react/jsx-runtime';
13
+
14
+ var EMPTY_SECTIONS = [];
15
+ var ALERT_CLASS = "rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive";
16
+ function renderFieldInput(field, onFieldChange) {
17
+ const disabled = field.disabled || field.readOnly;
18
+ if (field.type === "textarea") {
19
+ return /* @__PURE__ */ jsx(
20
+ Textarea,
21
+ {
22
+ id: field.id,
23
+ value: field.value,
24
+ placeholder: field.placeholder,
25
+ disabled,
26
+ readOnly: field.readOnly,
27
+ onChange: (event) => onFieldChange?.(field.id, event.target.value)
28
+ }
29
+ );
30
+ }
31
+ if (field.type === "select") {
32
+ return /* @__PURE__ */ jsxs(
33
+ Select,
34
+ {
35
+ value: field.value,
36
+ disabled,
37
+ onValueChange: (value) => onFieldChange?.(field.id, value),
38
+ children: [
39
+ /* @__PURE__ */ jsx(SelectTrigger, { id: field.id, "aria-label": field.label, children: /* @__PURE__ */ jsx(SelectValue, { placeholder: field.placeholder ?? "Select value" }) }),
40
+ /* @__PURE__ */ jsx(SelectContent, { children: (field.options ?? []).map((option) => /* @__PURE__ */ jsx(SelectItem, { value: option.value, children: option.label }, option.value)) })
41
+ ]
42
+ }
43
+ );
44
+ }
45
+ return /* @__PURE__ */ jsx(
46
+ Input,
47
+ {
48
+ id: field.id,
49
+ type: field.type ?? "text",
50
+ value: field.value,
51
+ placeholder: field.placeholder,
52
+ disabled,
53
+ readOnly: field.readOnly,
54
+ onChange: (event) => onFieldChange?.(field.id, event.target.value)
55
+ }
56
+ );
57
+ }
58
+ function CrudFormPageKit({
59
+ shell,
60
+ title = "CRUD form",
61
+ description = "Create and edit entities through a stable form contract with explicit save and error states.",
62
+ state = "pristine",
63
+ sections = EMPTY_SECTIONS,
64
+ onFieldChange,
65
+ actions,
66
+ validationMessage,
67
+ fatalErrorMessage,
68
+ savedMessage = "Changes saved.",
69
+ className
70
+ }) {
71
+ const isBusy = state === "submitting" || state === "validating";
72
+ return /* @__PURE__ */ jsx(NavigationShellPageKit, { ...shell, children: /* @__PURE__ */ jsxs("section", { className: cn("space-y-6", className), children: [
73
+ /* @__PURE__ */ jsxs("header", { className: "space-y-2", children: [
74
+ /* @__PURE__ */ jsx(Heading, { level: 3, children: title }),
75
+ /* @__PURE__ */ jsx(Typography, { variant: "muted", children: description })
76
+ ] }),
77
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
78
+ state === "dirty" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: "Unsaved changes" }) : null,
79
+ state === "validating" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: "Validating" }) : null,
80
+ state === "submitting" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: "Saving" }) : null,
81
+ state === "saved" ? /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: "Saved" }) : null
82
+ ] }),
83
+ state === "validation-error" ? /* @__PURE__ */ jsx("div", { role: "alert", className: ALERT_CLASS, children: validationMessage ?? "Validation failed. Resolve field errors and retry." }) : null,
84
+ state === "fatal-error" ? /* @__PURE__ */ jsx("div", { role: "alert", className: ALERT_CLASS, children: fatalErrorMessage ?? "The form failed to load. Retry or contact support." }) : null,
85
+ state === "saved" ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-success", children: savedMessage }) : null,
86
+ /* @__PURE__ */ jsx("div", { className: "grid gap-4", children: sections.map((section) => /* @__PURE__ */ jsxs(Card, { children: [
87
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
88
+ /* @__PURE__ */ jsxs(CardTitle, { className: "flex items-center gap-2", children: [
89
+ /* @__PURE__ */ jsx("span", { children: section.title }),
90
+ section.optional ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: "Optional" }) : null
91
+ ] }),
92
+ section.description ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: section.description }) : null
93
+ ] }),
94
+ /* @__PURE__ */ jsxs(CardContent, { className: "space-y-4", children: [
95
+ section.content ? /* @__PURE__ */ jsx("div", { children: section.content }) : null,
96
+ section.fields && section.fields.length > 0 ? /* @__PURE__ */ jsx(FieldSet, { children: section.fields.map((field) => /* @__PURE__ */ jsxs(Field, { children: [
97
+ /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: field.id, children: [
98
+ field.label,
99
+ field.required ? /* @__PURE__ */ jsx("span", { className: "ml-1 text-destructive", children: "*" }) : null
100
+ ] }),
101
+ renderFieldInput(field, onFieldChange),
102
+ field.description ? /* @__PURE__ */ jsx(FieldDescription, { children: field.description }) : null,
103
+ field.errorMessage ? /* @__PURE__ */ jsx(FieldError, { children: field.errorMessage }) : null
104
+ ] }, field.id)) }) : null
105
+ ] })
106
+ ] }, section.id)) }),
107
+ actions ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [
108
+ actions.secondary ? /* @__PURE__ */ jsx(
109
+ Button,
110
+ {
111
+ variant: "ghost",
112
+ onClick: actions.secondary.onAction,
113
+ disabled: actions.secondary.disabled || isBusy,
114
+ children: actions.secondary.label
115
+ }
116
+ ) : null,
117
+ actions.tertiary ? /* @__PURE__ */ jsx(
118
+ Button,
119
+ {
120
+ variant: "outline",
121
+ onClick: actions.tertiary.onAction,
122
+ disabled: actions.tertiary.disabled || isBusy,
123
+ children: actions.tertiary.label
124
+ }
125
+ ) : null,
126
+ actions.destructive ? /* @__PURE__ */ jsx(
127
+ Button,
128
+ {
129
+ variant: "destructive",
130
+ onClick: actions.destructive.onAction,
131
+ disabled: actions.destructive.disabled || isBusy,
132
+ children: actions.destructive.label
133
+ }
134
+ ) : null,
135
+ actions.primary ? /* @__PURE__ */ jsx(
136
+ Button,
137
+ {
138
+ onClick: actions.primary.onAction,
139
+ disabled: actions.primary.disabled || isBusy,
140
+ children: actions.primary.label
141
+ }
142
+ ) : null
143
+ ] }) : null
144
+ ] }) });
145
+ }
146
+
147
+ export { CrudFormPageKit };
@@ -0,0 +1,60 @@
1
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent } from './chunk-AH6YSYYT.js';
2
+ import { Button } from './chunk-7KIDDF3I.js';
3
+ import { useMotionConfig, m, scaleIn, motionSpring } from './chunk-PD2YEH3H.js';
4
+ import { cn } from './chunk-QYZT24TS.js';
5
+ import * as React from 'react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ function AuthSuccessBlock({
9
+ className,
10
+ icon,
11
+ title,
12
+ description,
13
+ buttonText = "Continue",
14
+ onContinue,
15
+ autoRedirectSeconds
16
+ }) {
17
+ const motionConfig = useMotionConfig();
18
+ const [countdown, setCountdown] = React.useState(autoRedirectSeconds ?? 0);
19
+ React.useEffect(() => {
20
+ if (!autoRedirectSeconds) return;
21
+ setCountdown(autoRedirectSeconds);
22
+ const interval = setInterval(() => {
23
+ setCountdown((prev) => {
24
+ if (prev <= 1) {
25
+ clearInterval(interval);
26
+ onContinue?.();
27
+ return 0;
28
+ }
29
+ return prev - 1;
30
+ });
31
+ }, 1e3);
32
+ return () => clearInterval(interval);
33
+ }, [autoRedirectSeconds, onContinue]);
34
+ return /* @__PURE__ */ jsx(m.div, { ...scaleIn, className: cn("w-full max-w-sm mx-auto", className), children: /* @__PURE__ */ jsxs(Card, { children: [
35
+ /* @__PURE__ */ jsxs(CardHeader, { className: "text-center", children: [
36
+ /* @__PURE__ */ jsx(
37
+ m.div,
38
+ {
39
+ className: "mx-auto mb-2",
40
+ initial: { scale: 0.8, opacity: 0 },
41
+ animate: { scale: 1, opacity: 1 },
42
+ transition: { ...motionSpring.bouncy, ...motionConfig },
43
+ children: /* @__PURE__ */ jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-success/10 shadow-[0_0_24px_rgb(var(--color-success)/0.2)]", children: icon })
44
+ }
45
+ ),
46
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-2xl", children: title }),
47
+ /* @__PURE__ */ jsx(CardDescription, { children: description })
48
+ ] }),
49
+ /* @__PURE__ */ jsxs(CardContent, { className: "grid gap-4", children: [
50
+ autoRedirectSeconds !== void 0 && countdown > 0 && /* @__PURE__ */ jsxs("p", { className: "text-center text-sm text-text-tertiary tabular-nums", children: [
51
+ "Redirecting in ",
52
+ countdown,
53
+ "..."
54
+ ] }),
55
+ /* @__PURE__ */ jsx(Button, { variant: "accent", className: "w-full", onClick: onContinue, children: buttonText })
56
+ ] })
57
+ ] }) });
58
+ }
59
+
60
+ export { AuthSuccessBlock };
@@ -98,6 +98,7 @@ var seedMessagesIt = {
98
98
  },
99
99
  "thinkingIndicator": {
100
100
  "thinking": "In elaborazione",
101
+ "complete": "Completo",
101
102
  "showReasoning": "Mostra ragionamento",
102
103
  "hideReasoning": "Nascondi ragionamento"
103
104
  },
@@ -150,8 +151,19 @@ var seedMessagesIt = {
150
151
  "agentTeamPanel": {
151
152
  "agentTeam": "Team agente"
152
153
  },
154
+ "agentConversationBlock": {
155
+ "noMessages": "Nessun messaggio"
156
+ },
157
+ "agentStatus": {
158
+ "idle": "Inattivo",
159
+ "thinking": "In elaborazione...",
160
+ "streaming": "In streaming",
161
+ "error": "Errore",
162
+ "complete": "Completato"
163
+ },
153
164
  "agentTimeline": {
154
- "timeline": "Cronologia"
165
+ "timeline": "Cronologia",
166
+ "noEvents": "Nessun evento"
155
167
  },
156
168
  "morphingText": {
157
169
  "morphingText": "Testo in trasformazione"