@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
@@ -0,0 +1,44 @@
1
+ import { Typography } from './chunk-N53OMWW2.js';
2
+ import { Heading } from './chunk-WI547C47.js';
3
+ import { ScrollFadeIn } from './chunk-I23DDSU7.js';
4
+ import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from './chunk-W4YX7N46.js';
5
+ import { cn } from './chunk-QYZT24TS.js';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var defaultItems = [
9
+ {
10
+ question: "What frameworks are supported?",
11
+ answer: "We support React 18+, Next.js 13+, and any framework that works with Tailwind CSS. Our components are built on Radix UI primitives for maximum accessibility."
12
+ },
13
+ {
14
+ question: "Can I customize the design tokens?",
15
+ answer: "Yes. All colors, spacing, typography, and shadows are driven by a single tokens.config.js file. Change the tokens and every component updates automatically."
16
+ },
17
+ {
18
+ question: "Is dark mode supported?",
19
+ answer: "Both light and dark themes are built in via CSS custom properties. The ThemeProvider handles persistence and system preference detection out of the box."
20
+ },
21
+ {
22
+ question: "How do I get support?",
23
+ answer: "Community support is available on GitHub Discussions. Pro and Enterprise plans include priority email and dedicated Slack channels."
24
+ }
25
+ ];
26
+ function FAQBlock({
27
+ items = defaultItems,
28
+ title = "Frequently asked questions",
29
+ description,
30
+ className
31
+ }) {
32
+ return /* @__PURE__ */ jsx("section", { className: cn("py-16 md:py-24", className), children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-3xl px-6", children: [
33
+ /* @__PURE__ */ jsx(ScrollFadeIn, { children: /* @__PURE__ */ jsxs("div", { className: "mb-12 text-center", children: [
34
+ /* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "text-text-primary", children: title }),
35
+ !!description && /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-4 text-text-secondary", children: description })
36
+ ] }) }),
37
+ /* @__PURE__ */ jsx(Accordion, { type: "single", collapsible: true, className: "w-full", children: items.map((item, index) => /* @__PURE__ */ jsx(ScrollFadeIn, { delay: index * 0.05, children: /* @__PURE__ */ jsxs(AccordionItem, { value: `faq-${index}`, children: [
38
+ /* @__PURE__ */ jsx(AccordionTrigger, { className: "text-left text-base font-medium text-text-primary", children: item.question }),
39
+ /* @__PURE__ */ jsx(AccordionContent, { className: "text-text-secondary leading-relaxed", children: item.answer })
40
+ ] }) }, index)) })
41
+ ] }) });
42
+ }
43
+
44
+ export { FAQBlock };
@@ -0,0 +1,269 @@
1
+ import { NavigationShellPageKit } from './chunk-ZKLB5N3Q.js';
2
+ import { Typography } from './chunk-N53OMWW2.js';
3
+ import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription } from './chunk-HOWTYZL5.js';
4
+ import { Pagination, PaginationContent, PaginationItem, PaginationPrevious, PaginationLink, PaginationNext } from './chunk-2BADJLMV.js';
5
+ import { Heading } from './chunk-WI547C47.js';
6
+ import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-PXDHNGTG.js';
7
+ import { Input } from './chunk-AP3XXYAY.js';
8
+ import { Empty, EmptyTitle, EmptyDescription } from './chunk-55HD4L6G.js';
9
+ import { Card, CardHeader, CardTitle, CardContent } from './chunk-AH6YSYYT.js';
10
+ import { Button } from './chunk-7KIDDF3I.js';
11
+ import { Badge } from './chunk-S4JAHKOP.js';
12
+ import { cn } from './chunk-QYZT24TS.js';
13
+ import { useMemo } from 'react';
14
+ import { jsx, jsxs } from 'react/jsx-runtime';
15
+
16
+ var EMPTY_FILTER_CONTROLS = [];
17
+ var EMPTY_SELECTED_ROW_IDS = [];
18
+ var EMPTY_BULK_ACTIONS = [];
19
+ function toPlainText(value) {
20
+ if (typeof value === "string" || typeof value === "number") {
21
+ return String(value);
22
+ }
23
+ return null;
24
+ }
25
+ function deriveRowLabel(row, columns) {
26
+ if (row.summaryLabel) {
27
+ return row.summaryLabel;
28
+ }
29
+ const firstColumn = columns[0];
30
+ if (!firstColumn) {
31
+ return row.id;
32
+ }
33
+ const firstCellValue = row.cells[firstColumn.id];
34
+ return toPlainText(firstCellValue) ?? row.id;
35
+ }
36
+ function deriveState(state, rows, selectedRowId) {
37
+ if (state) {
38
+ return state;
39
+ }
40
+ if (rows.length === 0) {
41
+ return "empty";
42
+ }
43
+ if (selectedRowId) {
44
+ return "selected-row";
45
+ }
46
+ return "has-data";
47
+ }
48
+ function clampPage(value, min, max) {
49
+ return Math.min(Math.max(value, min), max);
50
+ }
51
+ function CrudListDetailPageKit({
52
+ shell,
53
+ title = "CRUD list detail",
54
+ description = "Browse records, apply filters, and inspect row details without rebuilding route scaffolding.",
55
+ state,
56
+ columns,
57
+ rows,
58
+ filterControls = EMPTY_FILTER_CONTROLS,
59
+ selectedRowId = null,
60
+ selectedRowIds = EMPTY_SELECTED_ROW_IDS,
61
+ onRowSelect,
62
+ bulkActions = EMPTY_BULK_ACTIONS,
63
+ detailPanel,
64
+ emptyState,
65
+ pagination,
66
+ errorMessage,
67
+ listAriaLabel = "CRUD list region",
68
+ headerActions,
69
+ renderCollection,
70
+ className
71
+ }) {
72
+ const selectedRow = useMemo(
73
+ () => selectedRowId ? rows.find((row) => row.id === selectedRowId) ?? null : null,
74
+ [rows, selectedRowId]
75
+ );
76
+ const resolvedState = deriveState(state, rows, selectedRowId);
77
+ const detailMode = detailPanel?.mode ?? "inline";
78
+ const computedSelectedRowIds = useMemo(() => {
79
+ if (selectedRowIds.length > 0) {
80
+ return selectedRowIds;
81
+ }
82
+ if (selectedRowId) {
83
+ return [selectedRowId];
84
+ }
85
+ return EMPTY_SELECTED_ROW_IDS;
86
+ }, [selectedRowId, selectedRowIds]);
87
+ const pages = useMemo(() => {
88
+ const totalPages = Math.max(1, pagination.totalPages);
89
+ const currentPage = clampPage(pagination.page, 1, totalPages);
90
+ const visible = 5;
91
+ const half = Math.floor(visible / 2);
92
+ let start = Math.max(1, currentPage - half);
93
+ const end = Math.min(totalPages, start + visible - 1);
94
+ if (end - start < visible - 1) {
95
+ start = Math.max(1, end - visible + 1);
96
+ }
97
+ return Array.from({ length: end - start + 1 }, (_, index) => start + index);
98
+ }, [pagination.page, pagination.totalPages]);
99
+ const showInlineDetail = Boolean(detailPanel && detailMode === "inline" && selectedRow);
100
+ const showSheetDetail = Boolean(detailPanel && detailMode === "sheet" && selectedRow);
101
+ return /* @__PURE__ */ jsx(NavigationShellPageKit, { ...shell, children: /* @__PURE__ */ jsxs("section", { className: cn("space-y-6", className), children: [
102
+ /* @__PURE__ */ jsxs("header", { className: "space-y-2", children: [
103
+ /* @__PURE__ */ jsx(Heading, { level: 3, children: title }),
104
+ /* @__PURE__ */ jsx(Typography, { variant: "muted", children: description })
105
+ ] }),
106
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [
107
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
108
+ computedSelectedRowIds.length > 0 ? /* @__PURE__ */ jsxs(Badge, { variant: "secondary", children: [
109
+ computedSelectedRowIds.length,
110
+ " selected"
111
+ ] }) : null,
112
+ resolvedState === "loading" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: "Loading" }) : null,
113
+ resolvedState === "filtered" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: "Filtered results" }) : null,
114
+ resolvedState === "error" ? /* @__PURE__ */ jsx(Badge, { variant: "destructive", children: "Error" }) : null
115
+ ] }),
116
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
117
+ bulkActions.map((action) => /* @__PURE__ */ jsx(
118
+ Button,
119
+ {
120
+ variant: "secondary",
121
+ disabled: action.disabled || computedSelectedRowIds.length === 0,
122
+ onClick: () => action.onAction(computedSelectedRowIds, rows),
123
+ children: action.label
124
+ },
125
+ action.id
126
+ )),
127
+ headerActions
128
+ ] })
129
+ ] }),
130
+ filterControls.length > 0 ? /* @__PURE__ */ jsxs(Card, { children: [
131
+ /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(CardTitle, { children: "Filters" }) }),
132
+ /* @__PURE__ */ jsx(CardContent, { className: "grid gap-3 md:grid-cols-2 xl:grid-cols-3", children: filterControls.map((filter) => /* @__PURE__ */ jsxs("label", { className: "space-y-1", children: [
133
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: filter.label }),
134
+ /* @__PURE__ */ jsx(
135
+ Input,
136
+ {
137
+ "aria-label": filter.label,
138
+ value: filter.value,
139
+ placeholder: filter.placeholder,
140
+ onChange: (event) => filter.onChange(event.target.value)
141
+ }
142
+ )
143
+ ] }, filter.id)) })
144
+ ] }) : null,
145
+ /* @__PURE__ */ jsxs("div", { className: cn("grid gap-4", showInlineDetail ? "xl:grid-cols-[minmax(0,1fr)_340px]" : "grid-cols-1"), children: [
146
+ /* @__PURE__ */ jsxs("section", { "aria-label": listAriaLabel, className: "space-y-3", children: [
147
+ resolvedState === "loading" ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: "Loading list data" }) : null,
148
+ resolvedState === "error" ? /* @__PURE__ */ jsx(
149
+ "div",
150
+ {
151
+ role: "alert",
152
+ className: "rounded-md border border-destructive/40 bg-destructive/10 px-4 py-3 text-sm text-destructive",
153
+ children: errorMessage ?? "The list is unavailable. Retry once the data source recovers."
154
+ }
155
+ ) : null,
156
+ (resolvedState === "empty" || resolvedState === "filtered") && rows.length === 0 ? /* @__PURE__ */ jsxs(Empty, { children: [
157
+ /* @__PURE__ */ jsx(EmptyTitle, { children: emptyState?.title ?? "No rows to display" }),
158
+ /* @__PURE__ */ jsx(EmptyDescription, { children: emptyState?.description ?? "Adjust your filters or create a new record to populate this table." })
159
+ ] }) : null,
160
+ resolvedState !== "loading" && resolvedState !== "error" && rows.length > 0 ? renderCollection ? renderCollection({
161
+ rows,
162
+ columns,
163
+ selectedRowId,
164
+ onRowSelect
165
+ }) : /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "p-0", children: /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxs(Table, { children: [
166
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx(TableHead, { className: column.headerClassName, children: column.header }, column.id)) }) }),
167
+ /* @__PURE__ */ jsx(TableBody, { children: rows.map((row) => {
168
+ const rowLabel = deriveRowLabel(row, columns);
169
+ return /* @__PURE__ */ jsx(
170
+ TableRow,
171
+ {
172
+ className: cn(
173
+ selectedRowId === row.id ? "bg-surface-secondary/70" : void 0
174
+ ),
175
+ children: columns.map((column, columnIndex) => {
176
+ const cell = row.cells[column.id] ?? "-";
177
+ if (columnIndex === 0) {
178
+ return /* @__PURE__ */ jsx(TableCell, { className: column.cellClassName, children: /* @__PURE__ */ jsx(
179
+ Button,
180
+ {
181
+ variant: "ghost",
182
+ className: "h-auto w-full justify-start px-0 text-left",
183
+ "aria-label": `Select row ${rowLabel}`,
184
+ onClick: () => onRowSelect?.(row.id),
185
+ children: cell
186
+ }
187
+ ) }, column.id);
188
+ }
189
+ return /* @__PURE__ */ jsx(TableCell, { className: column.cellClassName, children: cell }, column.id);
190
+ })
191
+ },
192
+ row.id
193
+ );
194
+ }) })
195
+ ] }) }) }) }) : null,
196
+ /* @__PURE__ */ jsx(Pagination, { children: /* @__PURE__ */ jsxs(PaginationContent, { children: [
197
+ /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
198
+ PaginationPrevious,
199
+ {
200
+ href: "#",
201
+ onClick: (event) => {
202
+ event.preventDefault();
203
+ if (pagination.page > 1) {
204
+ pagination.onPageChange(pagination.page - 1);
205
+ }
206
+ },
207
+ "aria-disabled": pagination.page <= 1,
208
+ className: pagination.page <= 1 ? "pointer-events-none opacity-50" : void 0
209
+ }
210
+ ) }),
211
+ pages.map((page) => /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
212
+ PaginationLink,
213
+ {
214
+ href: "#",
215
+ isActive: page === pagination.page,
216
+ onClick: (event) => {
217
+ event.preventDefault();
218
+ pagination.onPageChange(page);
219
+ },
220
+ children: page
221
+ }
222
+ ) }, page)),
223
+ /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
224
+ PaginationNext,
225
+ {
226
+ href: "#",
227
+ onClick: (event) => {
228
+ event.preventDefault();
229
+ if (pagination.page < pagination.totalPages) {
230
+ pagination.onPageChange(pagination.page + 1);
231
+ }
232
+ },
233
+ "aria-disabled": pagination.page >= pagination.totalPages,
234
+ className: pagination.page >= pagination.totalPages ? "pointer-events-none opacity-50" : void 0
235
+ }
236
+ ) })
237
+ ] }) })
238
+ ] }),
239
+ showInlineDetail && detailPanel ? /* @__PURE__ */ jsx("aside", { "aria-label": detailPanel.title ?? "Detail panel", children: /* @__PURE__ */ jsxs(Card, { children: [
240
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
241
+ /* @__PURE__ */ jsx(CardTitle, { children: detailPanel.title ?? "Detail" }),
242
+ detailPanel.description ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-text-secondary", children: detailPanel.description }) : null
243
+ ] }),
244
+ /* @__PURE__ */ jsx(CardContent, { children: selectedRow ? detailPanel.renderDetail(selectedRow) : null })
245
+ ] }) }) : null
246
+ ] }),
247
+ showSheetDetail && detailPanel && selectedRow ? /* @__PURE__ */ jsx(
248
+ Sheet,
249
+ {
250
+ open: showSheetDetail,
251
+ onOpenChange: (open) => {
252
+ detailPanel.onOpenChange?.(open);
253
+ if (!open) {
254
+ onRowSelect?.(null);
255
+ }
256
+ },
257
+ children: /* @__PURE__ */ jsxs(SheetContent, { side: "right", children: [
258
+ /* @__PURE__ */ jsxs(SheetHeader, { children: [
259
+ /* @__PURE__ */ jsx(SheetTitle, { children: detailPanel.title ?? "Detail" }),
260
+ detailPanel.description ? /* @__PURE__ */ jsx(SheetDescription, { children: detailPanel.description }) : null
261
+ ] }),
262
+ /* @__PURE__ */ jsx("div", { className: "mt-4", children: detailPanel.renderDetail(selectedRow) })
263
+ ] })
264
+ }
265
+ ) : null
266
+ ] }) });
267
+ }
268
+
269
+ export { CrudListDetailPageKit };
@@ -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,36 @@
1
+ import { CountingNumber } from './chunk-F3T2U7YL.js';
2
+ import { StaggerChildren } from './chunk-DQPK2XRL.js';
3
+ import { Heading } from './chunk-WI547C47.js';
4
+ import { siteConfig } from './chunk-A7NUWD76.js';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var defaultStats = [
8
+ { value: 1200, label: "Stars on GitHub", prefix: "+" },
9
+ { value: 22, label: "Active Users", suffix: " Million" },
10
+ { value: 500, label: "Powered Apps", prefix: "+" }
11
+ ];
12
+ var defaultTitle = `${siteConfig.name} in numbers`;
13
+ var defaultDescription = `The numbers speak for themselves. ${siteConfig.name} powers the next generation of AI interfaces with premium design tokens, glass effects, and accessible components.`;
14
+ function StatsMarketingBlock({
15
+ title = defaultTitle,
16
+ description = defaultDescription,
17
+ stats = defaultStats,
18
+ className
19
+ }) {
20
+ return /* @__PURE__ */ jsx("section", { className: className ?? "py-12 md:py-16", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-5xl space-y-8 px-6 md:space-y-16", children: [
21
+ /* @__PURE__ */ jsxs("div", { className: "relative z-10 mx-auto max-w-xl space-y-6 text-center", children: [
22
+ /* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "text-4xl lg:text-5xl", children: title }),
23
+ /* @__PURE__ */ jsx("p", { className: "text-text-secondary", children: description })
24
+ ] }),
25
+ /* @__PURE__ */ jsx(StaggerChildren, { staggerMs: 150, className: "grid gap-12 divide-y *:text-center md:grid-cols-3 md:gap-2 md:divide-x md:divide-y-0", children: stats.map((stat) => /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
26
+ /* @__PURE__ */ jsxs("div", { className: "text-5xl font-bold tabular-nums", children: [
27
+ stat.prefix,
28
+ /* @__PURE__ */ jsx(CountingNumber, { number: stat.value, inViewOnce: true }),
29
+ stat.suffix
30
+ ] }),
31
+ /* @__PURE__ */ jsx("p", { children: stat.label })
32
+ ] }, stat.label)) })
33
+ ] }) });
34
+ }
35
+
36
+ export { StatsMarketingBlock };
@@ -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 };