xertica-ui 2.1.2 → 2.1.3

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 (402) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +1 -1
  3. package/assets/xertica-logo.svg +37 -37
  4. package/assets/xertica-x-logo.svg +20 -20
  5. package/bin/cli.ts +1 -1
  6. package/bin/generate-tokens.ts +13 -7
  7. package/components/assistant/index.ts +6 -6
  8. package/components/assistant/xertica-assistant/index.ts +2 -0
  9. package/components/assistant/xertica-assistant/use-assistant.ts +564 -0
  10. package/components/assistant/xertica-assistant/xertica-assistant.stories.tsx +200 -0
  11. package/components/assistant/xertica-assistant/xertica-assistant.tsx +183 -474
  12. package/components/blocks/card-patterns/ActivityCard.tsx +72 -72
  13. package/components/blocks/card-patterns/FeatureCard.tsx +100 -100
  14. package/components/blocks/card-patterns/NotificationCard.tsx +127 -127
  15. package/components/blocks/card-patterns/ProfileCard.tsx +84 -84
  16. package/components/blocks/card-patterns/ProjectCard.tsx +89 -89
  17. package/components/blocks/card-patterns/QuickActionCard.tsx +62 -62
  18. package/components/blocks/card-patterns/card-patterns.stories.tsx +445 -445
  19. package/components/blocks/card-patterns/index.ts +17 -17
  20. package/components/blocks/index.ts +1 -1
  21. package/components/brand/index.ts +6 -6
  22. package/components/brand/xertica-provider/XerticaProvider.tsx +48 -48
  23. package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
  24. package/components/brand/xertica-provider/xertica-provider.test.tsx +52 -52
  25. package/components/examples/MapExamples.tsx +282 -282
  26. package/components/examples/SimpleFilterableMap.tsx +191 -191
  27. package/components/examples/index.ts +51 -51
  28. package/components/figma/ImageWithFallback.tsx +27 -27
  29. package/components/hooks/index.ts +7 -7
  30. package/components/index.ts +5 -5
  31. package/components/layout/header/header.test.tsx +8 -8
  32. package/components/layout/header/header.tsx +4 -4
  33. package/components/layout/index.ts +2 -2
  34. package/components/layout/sidebar/index.ts +2 -0
  35. package/components/layout/sidebar/sidebar.mdx +1 -1
  36. package/components/layout/sidebar/sidebar.stories.tsx +160 -8
  37. package/components/layout/sidebar/sidebar.test.tsx +11 -11
  38. package/components/layout/sidebar/sidebar.tsx +610 -471
  39. package/components/layout/sidebar/use-sidebar.ts +113 -0
  40. package/components/media/FloatingMediaWrapper.tsx +11 -11
  41. package/components/media/audio-player/AudioPlayer.tsx +22 -22
  42. package/components/media/index.ts +3 -3
  43. package/components/pages/home-content/HomeContent.tsx +7 -7
  44. package/components/pages/home-content/home-content.mdx +62 -62
  45. package/components/pages/home-page/HomePage.stories.tsx +39 -39
  46. package/components/pages/home-page/HomePage.tsx +1 -1
  47. package/components/pages/home-page/home-page.mdx +53 -53
  48. package/components/pages/index.ts +8 -8
  49. package/components/pages/template-content/TemplateContent.tsx +5 -5
  50. package/components/pages/template-content/template-content.mdx +61 -61
  51. package/components/pages/template-page/TemplatePage.stories.tsx +39 -39
  52. package/components/pages/template-page/TemplatePage.tsx +5 -5
  53. package/components/pages/template-page/template-page.mdx +53 -53
  54. package/components/public-api-smoke.test.tsx +52 -52
  55. package/components/shared/assistant-utils.ts +43 -43
  56. package/components/shared/layout-constants.ts +1 -1
  57. package/components/ui/accordion/accordion.mdx +8 -8
  58. package/components/ui/accordion/accordion.stories.tsx +53 -53
  59. package/components/ui/alert/alert.mdx +8 -8
  60. package/components/ui/alert-dialog/alert-dialog.mdx +8 -8
  61. package/components/ui/aspect-ratio/aspect-ratio.mdx +8 -8
  62. package/components/ui/assistant-chart/assistant-chart.mdx +8 -8
  63. package/components/ui/avatar/avatar.mdx +8 -8
  64. package/components/ui/badge/badge.mdx +8 -8
  65. package/components/ui/badge/badge.tsx +9 -9
  66. package/components/ui/breadcrumb/breadcrumb.mdx +8 -8
  67. package/components/ui/button/button.mdx +8 -8
  68. package/components/ui/calendar/calendar.mdx +8 -8
  69. package/components/ui/calendar/calendar.tsx +258 -258
  70. package/components/ui/card/card.mdx +8 -8
  71. package/components/ui/card/card.stories.tsx +245 -245
  72. package/components/ui/carousel/carousel.mdx +8 -8
  73. package/components/ui/chart/chart.mdx +8 -8
  74. package/components/ui/chart/chart.stories.tsx +1303 -344
  75. package/components/ui/chart/chart.test.tsx +154 -154
  76. package/components/ui/chart/chart.tsx +2367 -1494
  77. package/components/ui/checkbox/checkbox.mdx +8 -8
  78. package/components/ui/checkbox/checkbox.stories.tsx +20 -20
  79. package/components/ui/collapsible/collapsible.mdx +8 -8
  80. package/components/ui/command/command.mdx +8 -8
  81. package/components/ui/context-menu/context-menu.mdx +8 -8
  82. package/components/ui/dialog/dialog.mdx +8 -8
  83. package/components/ui/drawer/drawer.mdx +8 -8
  84. package/components/ui/dropdown-menu/dropdown-menu.mdx +8 -8
  85. package/components/ui/empty/empty.mdx +8 -8
  86. package/components/ui/file-upload/file-upload.mdx +8 -8
  87. package/components/ui/file-upload/file-upload.stories.tsx +100 -0
  88. package/components/ui/file-upload/file-upload.tsx +14 -74
  89. package/components/ui/file-upload/index.ts +1 -0
  90. package/components/ui/file-upload/use-file-upload.ts +181 -0
  91. package/components/ui/google-maps-loader/google-maps-loader.tsx +2 -2
  92. package/components/ui/hover-card/hover-card.mdx +8 -8
  93. package/components/ui/input/input.mdx +8 -8
  94. package/components/ui/input-otp/input-otp.mdx +8 -8
  95. package/components/ui/input-otp/input-otp.stories.tsx +6 -6
  96. package/components/ui/label/label.mdx +8 -8
  97. package/components/ui/map/map.mdx +8 -8
  98. package/components/ui/map/map.stories.tsx +51 -51
  99. package/components/ui/map/map.tsx +2 -2
  100. package/components/ui/menubar/menubar.mdx +8 -8
  101. package/components/ui/navigation-menu/navigation-menu.mdx +8 -8
  102. package/components/ui/notification-badge/notification-badge.mdx +8 -8
  103. package/components/ui/pagination/index.ts +2 -0
  104. package/components/ui/pagination/pagination.mdx +8 -8
  105. package/components/ui/pagination/pagination.stories.tsx +94 -0
  106. package/components/ui/pagination/use-pagination.ts +194 -0
  107. package/components/ui/popover/popover.mdx +8 -8
  108. package/components/ui/progress/progress.mdx +8 -8
  109. package/components/ui/progress/progress.tsx +68 -68
  110. package/components/ui/radio-group/radio-group.mdx +8 -8
  111. package/components/ui/rating/rating.mdx +8 -8
  112. package/components/ui/resizable/resizable.mdx +8 -8
  113. package/components/ui/rich-text-editor/index.ts +2 -0
  114. package/components/ui/rich-text-editor/rich-text-editor.stories.tsx +129 -1
  115. package/components/ui/rich-text-editor/rich-text-editor.tsx +86 -305
  116. package/components/ui/rich-text-editor/use-rich-text-editor.ts +439 -0
  117. package/components/ui/route-map/route-map.mdx +8 -8
  118. package/components/ui/route-map/route-map.stories.tsx +54 -54
  119. package/components/ui/route-map/route-map.tsx +2 -2
  120. package/components/ui/scroll-area/scroll-area.mdx +8 -8
  121. package/components/ui/search/search.mdx +8 -8
  122. package/components/ui/select/select.mdx +8 -8
  123. package/components/ui/select/select.stories.tsx +9 -9
  124. package/components/ui/separator/separator.mdx +8 -8
  125. package/components/ui/sheet/sheet.mdx +8 -8
  126. package/components/ui/sheet/sheet.stories.tsx +95 -95
  127. package/components/ui/simple-map/simple-map.mdx +8 -8
  128. package/components/ui/simple-map/simple-map.stories.tsx +48 -48
  129. package/components/ui/skeleton/skeleton.mdx +8 -8
  130. package/components/ui/slider/slider.mdx +8 -8
  131. package/components/ui/sonner/sonner.mdx +8 -8
  132. package/components/ui/stats-card/stats-card.mdx +8 -8
  133. package/components/ui/stepper/index.ts +3 -1
  134. package/components/ui/stepper/stepper.mdx +8 -8
  135. package/components/ui/stepper/stepper.stories.tsx +116 -0
  136. package/components/ui/stepper/stepper.tsx +4 -4
  137. package/components/ui/stepper/use-stepper.ts +137 -0
  138. package/components/ui/switch/switch.mdx +8 -8
  139. package/components/ui/switch/switch.stories.tsx +20 -20
  140. package/components/ui/table/table.mdx +8 -8
  141. package/components/ui/tabs/tabs.mdx +8 -8
  142. package/components/ui/tabs/tabs.stories.tsx +26 -26
  143. package/components/ui/textarea/textarea.mdx +8 -8
  144. package/components/ui/timeline/timeline.mdx +8 -8
  145. package/components/ui/toggle/toggle.mdx +8 -8
  146. package/components/ui/toggle-group/toggle-group.mdx +8 -8
  147. package/components/ui/tooltip/tooltip.mdx +8 -8
  148. package/components/ui/tree-view/index.ts +4 -1
  149. package/components/ui/tree-view/tree-view.mdx +8 -8
  150. package/components/ui/tree-view/tree-view.stories.tsx +110 -4
  151. package/components/ui/tree-view/tree-view.tsx +17 -125
  152. package/components/ui/tree-view/use-tree-view.ts +229 -0
  153. package/components.json +1512 -1512
  154. package/contexts/ApiKeyContext.tsx +72 -72
  155. package/contexts/BrandColorsContext.tsx +26 -26
  156. package/contexts/LanguageContext.tsx +13 -13
  157. package/contexts/LayoutContext.test.tsx +11 -11
  158. package/contexts/LayoutContext.tsx +29 -29
  159. package/contexts/ThemeContext.tsx +26 -26
  160. package/contexts/theme-data.ts +4 -4
  161. package/dist/{AssistantChart-CVzmmhx4.js → AssistantChart-C_hwFRRr.js} +4 -4
  162. package/dist/{AssistantChart-BAx9VQvb.cjs → AssistantChart-CldVCVDe.cjs} +311 -94
  163. package/dist/{AssistantChart-CVko2A1W.js → AssistantChart-Cu3m7RBo.js} +314 -97
  164. package/dist/{AssistantChart-9w31gdAb.cjs → AssistantChart-DoZCyS5r.cjs} +4 -4
  165. package/dist/AudioPlayer-B1lt5cPl.cjs +989 -0
  166. package/dist/AudioPlayer-BZ7bibzU.cjs +982 -0
  167. package/dist/AudioPlayer-C12BjQBV.cjs +997 -0
  168. package/dist/AudioPlayer-DMcG_c7L.js +990 -0
  169. package/dist/AudioPlayer-DcFKRJE_.js +998 -0
  170. package/dist/AudioPlayer-e8LfNoqO.js +983 -0
  171. package/dist/{xertica-assistant-Qp3ydksa.cjs → CodeBlock-7TTgmdGG.cjs} +263 -51
  172. package/dist/{xertica-assistant-gnCJdcZY.js → CodeBlock-BeSt1h5P.js} +219 -7
  173. package/dist/CodeBlock-BgfYL_rD.cjs +2094 -0
  174. package/dist/CodeBlock-BlcqlA9M.cjs +2094 -0
  175. package/dist/CodeBlock-Bnmeu5ez.cjs +2094 -0
  176. package/dist/CodeBlock-BtfPlbAI.js +2078 -0
  177. package/dist/CodeBlock-CIySIuYr.js +2078 -0
  178. package/dist/CodeBlock-CuPtUM-7.cjs +2094 -0
  179. package/dist/CodeBlock-D6ffWXgc.js +2078 -0
  180. package/dist/CodeBlock-D8dcwbit.cjs +2094 -0
  181. package/dist/CodeBlock-DMZrFnlw.cjs +2094 -0
  182. package/dist/CodeBlock-DlBehYN8.js +2078 -0
  183. package/dist/CodeBlock-DnYNI8rQ.js +2078 -0
  184. package/dist/CodeBlock-DvKWbSnE.cjs +2094 -0
  185. package/dist/CodeBlock-DwMCfkFY.js +2078 -0
  186. package/dist/CodeBlock-Dy6CNYyj.js +2078 -0
  187. package/dist/CodeBlock-U1pPOQI7.cjs +2094 -0
  188. package/dist/CodeBlock-f_GpNhEB.js +2078 -0
  189. package/dist/CodeBlock-oB6u8nI1.js +2078 -0
  190. package/dist/CodeBlock-tZC31B73.cjs +2094 -0
  191. package/dist/ImageWithFallback-CGtidP6B.cjs +4542 -0
  192. package/dist/ImageWithFallback-lsg3pdFg.js +4508 -0
  193. package/dist/LanguageSelector-B5YfbHra.js +231 -0
  194. package/dist/LanguageSelector-D6uacAIM.cjs +230 -0
  195. package/dist/LayoutContext-BAql6ZRY.js +97 -0
  196. package/dist/LayoutContext-BvK-ggDa.cjs +96 -0
  197. package/dist/ThemeContext-BoH4NLfN.js +734 -0
  198. package/dist/{ThemeContext-BbBNoFTG.js → ThemeContext-C2EwAPDt.js} +2 -2
  199. package/dist/ThemeContext-r69W20Xg.cjs +733 -0
  200. package/dist/{ThemeContext-Cmr8Ex8H.cjs → ThemeContext-vTjumZeM.cjs} +2 -2
  201. package/dist/{VerifyEmailPage-BE-L9mB7.js → VerifyEmailPage-C0c2e5n0.js} +7 -7
  202. package/dist/{VerifyEmailPage-DMBh4NM9.cjs → VerifyEmailPage-CYXtbKi3.cjs} +1 -1
  203. package/dist/{VerifyEmailPage-CR7kb5df.cjs → VerifyEmailPage-Cwi3kbol.cjs} +7 -7
  204. package/dist/{VerifyEmailPage-CdYPSJoO.js → VerifyEmailPage-DvMLZgFt.js} +1 -1
  205. package/dist/XerticaOrbe-KL1RBHzw.cjs +1354 -0
  206. package/dist/XerticaOrbe-zwS1p2a8.js +1355 -0
  207. package/dist/XerticaProvider-6btlAlzc.js +17 -0
  208. package/dist/XerticaProvider-BNoNOxQ5.cjs +16 -0
  209. package/dist/XerticaProvider-BlY2limY.cjs +38 -0
  210. package/dist/{XerticaProvider-BITjgC5p.js → XerticaProvider-CEoWMTxu.js} +2 -2
  211. package/dist/{XerticaProvider-By8q3Roe.cjs → XerticaProvider-CllrbMEJ.cjs} +2 -2
  212. package/dist/XerticaProvider-DDuiIcKo.js +39 -0
  213. package/dist/XerticaProvider-cI9hSs27.cjs +38 -0
  214. package/dist/XerticaProvider-hSwhNQex.js +39 -0
  215. package/dist/{alert-dialog-yckpaOpy.cjs → alert-dialog-DSKByiKZ.cjs} +3 -3
  216. package/dist/{alert-dialog-iDe5VE5o.js → alert-dialog-s-vmNkJ_.js} +3 -3
  217. package/dist/assistant.cjs.js +2 -1
  218. package/dist/assistant.es.js +3 -2
  219. package/dist/brand.cjs.js +1 -1
  220. package/dist/brand.es.js +1 -1
  221. package/dist/breadcrumb-CqJ7bHY5.js +161 -0
  222. package/dist/breadcrumb-m9Hb2_XN.cjs +177 -0
  223. package/dist/cli.js +14 -8
  224. package/dist/components/assistant/xertica-assistant/index.d.ts +2 -0
  225. package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +126 -0
  226. package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +7 -2
  227. package/dist/components/blocks/audio-player/AudioPlayer.d.ts +35 -0
  228. package/dist/components/blocks/audio-player/index.d.ts +1 -0
  229. package/dist/components/blocks/document-editor/DocumentEditor.d.ts +26 -0
  230. package/dist/components/blocks/document-editor/index.d.ts +1 -0
  231. package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +41 -0
  232. package/dist/components/blocks/podcast-player/index.d.ts +1 -0
  233. package/dist/components/layout/sidebar/index.d.ts +2 -0
  234. package/dist/components/layout/sidebar/sidebar.d.ts +80 -0
  235. package/dist/components/layout/sidebar/use-sidebar.d.ts +22 -0
  236. package/dist/components/shared/layout-constants.d.ts +1 -1
  237. package/dist/components/ui/button/button.d.ts +1 -1
  238. package/dist/components/ui/chart/chart.d.ts +162 -5
  239. package/dist/components/ui/file-upload/file-upload.d.ts +2 -0
  240. package/dist/components/ui/file-upload/index.d.ts +1 -0
  241. package/dist/components/ui/file-upload/use-file-upload.d.ts +49 -0
  242. package/dist/components/ui/pagination/index.d.ts +2 -0
  243. package/dist/components/ui/pagination/use-pagination.d.ts +78 -0
  244. package/dist/components/ui/rich-text-editor/index.d.ts +2 -0
  245. package/dist/components/ui/rich-text-editor/use-rich-text-editor.d.ts +107 -0
  246. package/dist/components/ui/stepper/index.d.ts +3 -1
  247. package/dist/components/ui/stepper/stepper.d.ts +2 -2
  248. package/dist/components/ui/stepper/use-stepper.d.ts +60 -0
  249. package/dist/components/ui/tree-view/index.d.ts +4 -1
  250. package/dist/components/ui/tree-view/tree-view.d.ts +4 -6
  251. package/dist/components/ui/tree-view/use-tree-view.d.ts +60 -0
  252. package/dist/dropdown-menu-BDB5CmQs.cjs +247 -0
  253. package/dist/dropdown-menu-DQidbKBD.js +231 -0
  254. package/dist/google-maps-loader-BFWp6VPd.js +287 -0
  255. package/dist/{google-maps-loader-t2IlYBzw.js → google-maps-loader-CTYySAun.js} +4 -0
  256. package/dist/{google-maps-loader-BqsYL48U.cjs → google-maps-loader-Y-QkD-Li.cjs} +5 -0
  257. package/dist/google-maps-loader-eS3uQ5TA.cjs +287 -0
  258. package/dist/header-Cgy6vYPk.cjs +731 -0
  259. package/dist/header-DRlT4jgI.js +715 -0
  260. package/dist/header-Dux00SI4.cjs +731 -0
  261. package/dist/header-EkGKXPsD.js +715 -0
  262. package/dist/header-WfEywpyc.cjs +731 -0
  263. package/dist/header-tifNQn2U.js +715 -0
  264. package/dist/hooks.cjs.js +1 -1
  265. package/dist/hooks.es.js +1 -1
  266. package/dist/index-BhapVLVj.js +8 -0
  267. package/dist/{index-D3RLKRAs.cjs → index-COtD8bRW.cjs} +1 -1
  268. package/dist/index-D6fxYEY8.cjs +7 -0
  269. package/dist/index-DW5tYe26.js +8 -0
  270. package/dist/index.cjs.js +19 -8
  271. package/dist/index.es.js +39 -28
  272. package/dist/index.umd.js +1043 -470
  273. package/dist/input-2R4loU86.js +127 -0
  274. package/dist/input-DWANSKGb.cjs +145 -0
  275. package/dist/layout.cjs.js +89 -1
  276. package/dist/layout.es.js +90 -2
  277. package/dist/pages.cjs.js +1 -1
  278. package/dist/pages.es.js +1 -1
  279. package/dist/rich-text-editor-0mraWT5y.cjs +2376 -0
  280. package/dist/rich-text-editor-B6jMRLzk.cjs +1939 -0
  281. package/dist/rich-text-editor-B8_oYcIR.js +1730 -0
  282. package/dist/rich-text-editor-B9UbSXNb.js +1203 -0
  283. package/dist/rich-text-editor-BYuRBNBU.js +2373 -0
  284. package/dist/rich-text-editor-Bb9pySTs.cjs +2374 -0
  285. package/dist/rich-text-editor-BcL6L3cm.cjs +2374 -0
  286. package/dist/rich-text-editor-BoVZYtTs.cjs +2391 -0
  287. package/dist/rich-text-editor-CPV1lEPH.cjs +1748 -0
  288. package/dist/rich-text-editor-CoKqbCtu.cjs +1799 -0
  289. package/dist/rich-text-editor-Cw56T_mB.js +2356 -0
  290. package/dist/rich-text-editor-Cyt8qs2b.js +1921 -0
  291. package/dist/rich-text-editor-D6H84OcX.cjs +1220 -0
  292. package/dist/rich-text-editor-D76gD-QI.js +2328 -0
  293. package/dist/rich-text-editor-DKkokOnA.js +1781 -0
  294. package/dist/rich-text-editor-DNsdpN64.cjs +2359 -0
  295. package/dist/rich-text-editor-DfG8bCyY.js +2358 -0
  296. package/dist/rich-text-editor-DgF8s7xW.js +2949 -0
  297. package/dist/rich-text-editor-Dxjw31Z4.js +2341 -0
  298. package/dist/rich-text-editor-DzP0Epmb.js +2356 -0
  299. package/dist/rich-text-editor-mWoaSCE4.cjs +2966 -0
  300. package/dist/rich-text-editor-skplNlBM.cjs +2345 -0
  301. package/dist/select-Bkbr0f-Z.cjs +162 -0
  302. package/dist/select-CvIVdX2n.js +145 -0
  303. package/dist/sidebar-CK_0ZQHj.cjs +803 -0
  304. package/dist/sidebar-CUuOvYhK.js +787 -0
  305. package/dist/slider-Bc5Hd0y1.js +56 -0
  306. package/dist/slider-N7hFFj6X.cjs +73 -0
  307. package/dist/tooltip-Ded96neP.cjs +137 -0
  308. package/dist/tooltip-HDOoD2-0.js +120 -0
  309. package/dist/ui.cjs.js +14 -4
  310. package/dist/ui.es.js +26 -16
  311. package/dist/use-mobile-B0hNy_Y6.cjs +4303 -0
  312. package/dist/use-mobile-BXuYROXM.js +4202 -0
  313. package/dist/use-mobile-Bbd51ASU.cjs +4392 -0
  314. package/dist/use-mobile-Bk6CX-TC.js +4359 -0
  315. package/dist/use-mobile-BvYdisLP.js +4202 -0
  316. package/dist/use-mobile-BzuxjzNX.cjs +4392 -0
  317. package/dist/use-mobile-CG2-SdXV.cjs +4235 -0
  318. package/dist/use-mobile-CKb5pqTs.js +4269 -0
  319. package/dist/use-mobile-CYuAuGDl.js +4202 -0
  320. package/dist/use-mobile-CaENcqm-.js +4508 -0
  321. package/dist/use-mobile-CbrYgJGJ.js +4203 -0
  322. package/dist/use-mobile-DMOvImGQ.cjs +4542 -0
  323. package/dist/use-mobile-DRB3BQgD.cjs +4235 -0
  324. package/dist/use-mobile-DZvv7QMR.js +4359 -0
  325. package/dist/use-mobile-DdI_TXam.cjs +4235 -0
  326. package/dist/use-mobile-DlceKf8a.js +4359 -0
  327. package/dist/use-mobile-DsOnow1o.cjs +4236 -0
  328. package/dist/use-mobile-Kcj6jSnK.cjs +4392 -0
  329. package/dist/use-mobile-bnKcua_i.js +4202 -0
  330. package/dist/use-mobile-ncXBeE2z.cjs +4235 -0
  331. package/dist/{xertica-assistant-B1IaHXnB.cjs → xertica-assistant-dyP7KHM5.cjs} +533 -392
  332. package/dist/{xertica-assistant-DPsESB6t.js → xertica-assistant-yX1CFBBo.js} +535 -394
  333. package/dist/xertica-ui.css +2 -2
  334. package/docs/ai-usage.md +28 -10
  335. package/docs/architecture.md +76 -0
  336. package/docs/components/assistant.md +159 -0
  337. package/docs/components/calendar.md +154 -154
  338. package/docs/components/card-patterns.md +337 -337
  339. package/docs/components/card.md +235 -235
  340. package/docs/components/chart.md +354 -39
  341. package/docs/components/file-upload.md +119 -2
  342. package/docs/components/map.md +84 -84
  343. package/docs/components/pagination.md +187 -0
  344. package/docs/components/rich-text-editor.md +164 -0
  345. package/docs/components/sidebar.md +153 -4
  346. package/docs/components/stepper.md +157 -12
  347. package/docs/components/tree-view.md +164 -6
  348. package/docs/components/xertica-provider.md +24 -24
  349. package/docs/decision-tree.md +287 -287
  350. package/docs/getting-started.md +1 -1
  351. package/docs/guidelines.md +14 -8
  352. package/docs/layout.md +2 -2
  353. package/docs/llms.md +4 -4
  354. package/guidelines/Guidelines.md +252 -250
  355. package/hooks/useTheme.ts +3 -3
  356. package/imports/Podcast.tsx +388 -388
  357. package/imports/XerticaAi.tsx +45 -45
  358. package/imports/XerticaX.tsx +19 -19
  359. package/imports/svg-aueiaqngck.ts +11 -11
  360. package/imports/svg-v9krss1ozd.ts +16 -16
  361. package/imports/svg-vhrdofe3qe.ts +5 -5
  362. package/llms-compact.txt +327 -327
  363. package/llms.txt +160 -160
  364. package/package.json +203 -203
  365. package/styles/xertica/app-overrides/chat.css +61 -61
  366. package/styles/xertica/app-overrides/scrollbar.css +33 -33
  367. package/styles/xertica/integrations/google-maps.css +76 -76
  368. package/styles/xertica/integrations/sonner.css +73 -73
  369. package/styles/xertica/tokens.css +41 -12
  370. package/templates/CLAUDE.md +182 -172
  371. package/templates/guidelines/Guidelines.md +325 -313
  372. package/templates/package.json +3 -3
  373. package/templates/src/features/auth/index.ts +4 -4
  374. package/templates/src/features/auth/ui/AuthPageShell.tsx +34 -34
  375. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -70
  376. package/templates/src/features/auth/ui/LoginContent.tsx +90 -90
  377. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +151 -151
  378. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +59 -59
  379. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -82
  380. package/templates/src/features/home/index.ts +1 -1
  381. package/templates/src/features/home/ui/HomeContent.tsx +100 -100
  382. package/templates/src/features/template/index.ts +5 -5
  383. package/templates/src/features/template/ui/CrudTemplate.tsx +3 -3
  384. package/templates/src/features/template/ui/DashboardTemplate.tsx +3 -3
  385. package/templates/src/features/template/ui/FormTemplate.tsx +120 -120
  386. package/templates/src/features/template/ui/LoginTemplate.tsx +3 -3
  387. package/templates/src/pages/AssistantPage.tsx +328 -328
  388. package/templates/src/pages/ForgotPasswordPage.tsx +6 -6
  389. package/templates/src/pages/HomePage.tsx +57 -57
  390. package/templates/src/pages/LoginPage.tsx +10 -10
  391. package/templates/src/pages/ResetPasswordPage.tsx +6 -6
  392. package/templates/src/pages/TemplatePage.tsx +30 -30
  393. package/templates/src/pages/VerifyEmailPage.tsx +6 -6
  394. package/templates/src/shared/config/navigation.ts +20 -20
  395. package/templates/src/shared/lib/auth.ts +20 -20
  396. package/templates/src/shared/types/auth.ts +3 -3
  397. package/templates/src/styles/xertica/tokens.css +39 -10
  398. package/templates/tsconfig.json +5 -5
  399. package/utils/gemini.ts +140 -140
  400. package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
  401. package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
  402. package/dist/index-CkTUgOwX.js +0 -8
@@ -1,258 +1,258 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import { ChevronLeft, ChevronRight, ChevronDown } from "lucide-react"
5
- import {
6
- DayPicker,
7
- getDefaultClassNames,
8
- type DayButton,
9
- } from "react-day-picker"
10
-
11
- import { cn } from "../../shared/utils"
12
- import { Button, buttonVariants } from "../button"
13
-
14
- export type CalendarProps = React.ComponentProps<typeof DayPicker> & {
15
- buttonVariant?: React.ComponentProps<typeof Button>["variant"]
16
- }
17
-
18
- /**
19
- * Monthly date picker built on react-day-picker.
20
- *
21
- * @description
22
- * Renders a customized month/year calendar styled for the Xertica UI design system.
23
- * Supports single date selection, date ranges, and disabled date rules.
24
- *
25
- * @ai-rules
26
- * 1. Commonly embedded inside a `<Popover>` to create a full DatePicker in forms.
27
- * 2. Control the selected date via the REQUIRED `selected={Date}` prop.
28
- * 3. For range selection, pass `mode="range"` and `selected={{ from, to }}`.
29
- */
30
- function Calendar({
31
- className,
32
- classNames,
33
- showOutsideDays = true,
34
- captionLayout = "label",
35
- buttonVariant = "ghost",
36
- formatters,
37
- components,
38
- ...props
39
- }: CalendarProps) {
40
- const defaultClassNames = getDefaultClassNames()
41
- const isDropdownCaption = captionLayout.startsWith("dropdown")
42
-
43
- return (
44
- <DayPicker
45
- showOutsideDays={showOutsideDays}
46
- className={cn(
47
- "bg-background group/calendar p-4 [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent font-sans",
48
- String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
49
- String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
50
- className
51
- )}
52
- captionLayout={captionLayout}
53
- formatters={formatters}
54
- classNames={{
55
- root: cn("w-fit", defaultClassNames.root),
56
- months: cn(
57
- "flex gap-6 flex-col md:flex-row relative",
58
- defaultClassNames.months
59
- ),
60
- month: cn("flex flex-col w-full gap-5", defaultClassNames.month),
61
- nav: cn(
62
- "flex items-center gap-2 w-full absolute top-0 inset-x-0 justify-between",
63
- defaultClassNames.nav
64
- ),
65
- button_previous: cn(
66
- buttonVariants({ variant: buttonVariant }),
67
- "size-(--cell-size) aria-disabled:opacity-40 p-0 select-none hover:bg-accent/50 transition-colors duration-200",
68
- defaultClassNames.button_previous
69
- ),
70
- button_next: cn(
71
- buttonVariants({ variant: buttonVariant }),
72
- "size-(--cell-size) aria-disabled:opacity-40 p-0 select-none hover:bg-accent/50 transition-colors duration-200",
73
- defaultClassNames.button_next
74
- ),
75
- month_caption: cn(
76
- "flex items-center justify-center w-full",
77
- isDropdownCaption ? "h-auto px-0" : "h-(--cell-size) px-(--cell-size)",
78
- defaultClassNames.month_caption
79
- ),
80
- dropdowns: cn(
81
- "w-full flex items-center justify-center gap-2",
82
- isDropdownCaption ? "h-auto" : "h-(--cell-size)",
83
- defaultClassNames.dropdowns
84
- ),
85
- dropdown_root: cn(
86
- isDropdownCaption
87
- ? "relative flex min-w-[7rem] items-center rounded-[var(--radius)] border border-border bg-background text-foreground transition-colors outline-none focus-within:ring-2 focus-within:ring-primary focus-within:border-transparent data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50 px-2.5 py-1"
88
- : "relative rounded-[var(--radius)] hover:bg-accent transition-colors",
89
- defaultClassNames.dropdown_root
90
- ),
91
- dropdown: cn(
92
- isDropdownCaption
93
- ? "absolute inset-0 cursor-pointer opacity-0"
94
- : "absolute bg-popover inset-0 opacity-0 cursor-pointer",
95
- defaultClassNames.dropdown
96
- ),
97
- caption_label: cn(
98
- "select-none font-[family-name:var(--font-family,Roboto)] tracking-tight transition-all duration-200",
99
- captionLayout === "label"
100
- ? "rounded-[var(--radius)] px-2 py-1 text-[length:var(--calendar-caption-size)] font-[number:var(--font-weight-semibold)] hover:bg-accent hover:text-accent-foreground"
101
- : "flex h-full w-full items-center justify-between gap-2 rounded-[var(--radius)] text-[length:var(--calendar-caption-size)] font-[number:var(--font-weight-semibold)] [&>svg]:text-muted-foreground [&>svg]:size-4",
102
- defaultClassNames.caption_label
103
- ),
104
- table: "w-full border-collapse mt-1",
105
- weekdays: cn("flex gap-1", defaultClassNames.weekdays),
106
- weekday: cn(
107
- "text-muted-foreground rounded-(--cell-radius) flex-1 select-none text-[length:var(--calendar-weekday-size)] font-[number:var(--font-weight-medium)] uppercase tracking-wider",
108
- defaultClassNames.weekday
109
- ),
110
- week: cn("flex w-full gap-1", defaultClassNames.week),
111
- week_number_header: cn(
112
- "select-none w-(--cell-size)",
113
- defaultClassNames.week_number_header
114
- ),
115
- week_number: cn(
116
- "select-none text-muted-foreground text-[length:var(--calendar-weekday-size)]",
117
- defaultClassNames.week_number
118
- ),
119
- day: cn(
120
- "relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none",
121
- props.showWeekNumber
122
- ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)"
123
- : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
124
- defaultClassNames.day
125
- ),
126
- range_start: cn(
127
- "rounded-l-(--cell-radius) bg-accent/50 relative after:bg-accent/50 after:absolute after:inset-y-0 after:w-2 after:right-0 -z-0 isolate",
128
- defaultClassNames.range_start
129
- ),
130
- range_middle: cn(
131
- "rounded-none bg-accent/30",
132
- defaultClassNames.range_middle
133
- ),
134
- range_end: cn(
135
- "rounded-r-(--cell-radius) bg-accent/50 relative after:bg-accent/50 after:absolute after:inset-y-0 after:w-2 after:left-0 -z-0 isolate",
136
- defaultClassNames.range_end
137
- ),
138
- today: cn(
139
- "bg-accent/60 text-accent-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none font-[number:var(--font-weight-semibold)]",
140
- defaultClassNames.today
141
- ),
142
- outside: cn(
143
- "text-muted-foreground aria-selected:text-muted-foreground",
144
- defaultClassNames.outside
145
- ),
146
- disabled: cn(
147
- "text-muted-foreground/30 opacity-40",
148
- defaultClassNames.disabled
149
- ),
150
- hidden: cn("invisible", defaultClassNames.hidden),
151
- ...classNames,
152
- }}
153
- components={{
154
- Root: ({ className, rootRef, ...props }) => {
155
- return (
156
- <div
157
- data-slot="calendar"
158
- ref={rootRef}
159
- className={cn(className)}
160
- {...props}
161
- />
162
- )
163
- },
164
- Chevron: ({ className, orientation, ...props }) => {
165
- if (orientation === "left") {
166
- return (
167
- <ChevronLeft
168
- className={cn("size-5 transition-transform group-hover:scale-110", className)}
169
- {...props}
170
- />
171
- )
172
- }
173
-
174
- if (orientation === "right") {
175
- return (
176
- <ChevronRight
177
- className={cn("size-5 transition-transform group-hover:scale-110", className)}
178
- {...props}
179
- />
180
- )
181
- }
182
-
183
- return (
184
- <ChevronDown
185
- className={cn("size-4", className)}
186
- {...props}
187
- />
188
- )
189
- },
190
- DayButton: CalendarDayButton,
191
- WeekNumber: ({ children, ...props }) => {
192
- return (
193
- <td {...props}>
194
- <div className="flex size-(--cell-size) items-center justify-center text-center font-[number:var(--font-weight-medium)]">
195
- {children}
196
- </div>
197
- </td>
198
- )
199
- },
200
- ...components,
201
- }}
202
- {...props}
203
- />
204
- )
205
- }
206
-
207
- function CalendarDayButton({
208
- className,
209
- day,
210
- modifiers,
211
- ...props
212
- }: React.ComponentProps<typeof DayButton>) {
213
- const defaultClassNames = getDefaultClassNames()
214
-
215
- const ref = React.useRef<HTMLButtonElement>(null)
216
- React.useEffect(() => {
217
- if (modifiers.focused) ref.current?.focus()
218
- }, [modifiers.focused])
219
-
220
- return (
221
- <Button
222
- ref={ref}
223
- variant="ghost"
224
- size="icon"
225
- data-day={day.date.toLocaleDateString()}
226
- data-selected-single={
227
- modifiers.selected &&
228
- !modifiers.range_start &&
229
- !modifiers.range_end &&
230
- !modifiers.range_middle
231
- }
232
- data-range-start={modifiers.range_start}
233
- data-range-end={modifiers.range_end}
234
- data-range-middle={modifiers.range_middle}
235
- className={cn(
236
- "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col items-center justify-center gap-1 border-0 leading-none transition-all duration-200 cursor-pointer disabled:cursor-not-allowed",
237
- "text-[length:var(--calendar-day-size)] font-[number:var(--font-weight-regular)]",
238
- "hover:bg-accent/70 hover:text-accent-foreground hover:scale-105",
239
- "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[selected-single=true]:font-[number:var(--font-weight-semibold)] data-[selected-single=true]:shadow-sm",
240
- "data-[range-middle=true]:bg-accent/50 data-[range-middle=true]:text-foreground",
241
- "data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-start=true]:font-[number:var(--font-weight-semibold)] data-[range-start=true]:shadow-sm",
242
- "data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-end=true]:font-[number:var(--font-weight-semibold)] data-[range-end=true]:shadow-sm",
243
- "group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 group-data-[focused=true]/day:ring-2 group-data-[focused=true]/day:ring-offset-2 group-data-[focused=true]/day:ring-offset-background",
244
- "data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius)",
245
- "data-[range-middle=true]:rounded-none",
246
- "data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius)",
247
- "[&>span]:opacity-80",
248
- defaultClassNames.day,
249
- className
250
- )}
251
- {...props}
252
- >
253
- {day.date.getDate()}
254
- </Button>
255
- )
256
- }
257
-
258
- export { Calendar, CalendarDayButton }
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { ChevronLeft, ChevronRight, ChevronDown } from "lucide-react"
5
+ import {
6
+ DayPicker,
7
+ getDefaultClassNames,
8
+ type DayButton,
9
+ } from "react-day-picker"
10
+
11
+ import { cn } from "../../shared/utils"
12
+ import { Button, buttonVariants } from "../button"
13
+
14
+ export type CalendarProps = React.ComponentProps<typeof DayPicker> & {
15
+ buttonVariant?: React.ComponentProps<typeof Button>["variant"]
16
+ }
17
+
18
+ /**
19
+ * Monthly date picker built on react-day-picker.
20
+ *
21
+ * @description
22
+ * Renders a customized month/year calendar styled for the Xertica UI design system.
23
+ * Supports single date selection, date ranges, and disabled date rules.
24
+ *
25
+ * @ai-rules
26
+ * 1. Commonly embedded inside a `<Popover>` to create a full DatePicker in forms.
27
+ * 2. Control the selected date via the REQUIRED `selected={Date}` prop.
28
+ * 3. For range selection, pass `mode="range"` and `selected={{ from, to }}`.
29
+ */
30
+ function Calendar({
31
+ className,
32
+ classNames,
33
+ showOutsideDays = true,
34
+ captionLayout = "label",
35
+ buttonVariant = "ghost",
36
+ formatters,
37
+ components,
38
+ ...props
39
+ }: CalendarProps) {
40
+ const defaultClassNames = getDefaultClassNames()
41
+ const isDropdownCaption = captionLayout.startsWith("dropdown")
42
+
43
+ return (
44
+ <DayPicker
45
+ showOutsideDays={showOutsideDays}
46
+ className={cn(
47
+ "bg-background group/calendar p-4 [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent font-sans",
48
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
49
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
50
+ className
51
+ )}
52
+ captionLayout={captionLayout}
53
+ formatters={formatters}
54
+ classNames={{
55
+ root: cn("w-fit", defaultClassNames.root),
56
+ months: cn(
57
+ "flex gap-6 flex-col md:flex-row relative",
58
+ defaultClassNames.months
59
+ ),
60
+ month: cn("flex flex-col w-full gap-5", defaultClassNames.month),
61
+ nav: cn(
62
+ "flex items-center gap-2 w-full absolute top-0 inset-x-0 justify-between",
63
+ defaultClassNames.nav
64
+ ),
65
+ button_previous: cn(
66
+ buttonVariants({ variant: buttonVariant }),
67
+ "size-(--cell-size) aria-disabled:opacity-40 p-0 select-none hover:bg-accent/50 transition-colors duration-200",
68
+ defaultClassNames.button_previous
69
+ ),
70
+ button_next: cn(
71
+ buttonVariants({ variant: buttonVariant }),
72
+ "size-(--cell-size) aria-disabled:opacity-40 p-0 select-none hover:bg-accent/50 transition-colors duration-200",
73
+ defaultClassNames.button_next
74
+ ),
75
+ month_caption: cn(
76
+ "flex items-center justify-center w-full",
77
+ isDropdownCaption ? "h-auto px-0" : "h-(--cell-size) px-(--cell-size)",
78
+ defaultClassNames.month_caption
79
+ ),
80
+ dropdowns: cn(
81
+ "w-full flex items-center justify-center gap-2",
82
+ isDropdownCaption ? "h-auto" : "h-(--cell-size)",
83
+ defaultClassNames.dropdowns
84
+ ),
85
+ dropdown_root: cn(
86
+ isDropdownCaption
87
+ ? "relative flex min-w-[7rem] items-center rounded-[var(--radius)] border border-border bg-background text-foreground transition-colors outline-none focus-within:ring-2 focus-within:ring-primary focus-within:border-transparent data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50 px-2.5 py-1"
88
+ : "relative rounded-[var(--radius)] hover:bg-accent transition-colors",
89
+ defaultClassNames.dropdown_root
90
+ ),
91
+ dropdown: cn(
92
+ isDropdownCaption
93
+ ? "absolute inset-0 cursor-pointer opacity-0"
94
+ : "absolute bg-popover inset-0 opacity-0 cursor-pointer",
95
+ defaultClassNames.dropdown
96
+ ),
97
+ caption_label: cn(
98
+ "select-none font-[family-name:var(--font-family,Roboto)] tracking-tight transition-all duration-200",
99
+ captionLayout === "label"
100
+ ? "rounded-[var(--radius)] px-2 py-1 text-[length:var(--calendar-caption-size)] font-[number:var(--font-weight-semibold)] hover:bg-accent hover:text-accent-foreground"
101
+ : "flex h-full w-full items-center justify-between gap-2 rounded-[var(--radius)] text-[length:var(--calendar-caption-size)] font-[number:var(--font-weight-semibold)] [&>svg]:text-muted-foreground [&>svg]:size-4",
102
+ defaultClassNames.caption_label
103
+ ),
104
+ table: "w-full border-collapse mt-1",
105
+ weekdays: cn("flex gap-1", defaultClassNames.weekdays),
106
+ weekday: cn(
107
+ "text-muted-foreground rounded-(--cell-radius) flex-1 select-none text-[length:var(--calendar-weekday-size)] font-[number:var(--font-weight-medium)] uppercase tracking-wider",
108
+ defaultClassNames.weekday
109
+ ),
110
+ week: cn("flex w-full gap-1", defaultClassNames.week),
111
+ week_number_header: cn(
112
+ "select-none w-(--cell-size)",
113
+ defaultClassNames.week_number_header
114
+ ),
115
+ week_number: cn(
116
+ "select-none text-muted-foreground text-[length:var(--calendar-weekday-size)]",
117
+ defaultClassNames.week_number
118
+ ),
119
+ day: cn(
120
+ "relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none",
121
+ props.showWeekNumber
122
+ ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)"
123
+ : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
124
+ defaultClassNames.day
125
+ ),
126
+ range_start: cn(
127
+ "rounded-l-(--cell-radius) bg-accent/50 relative after:bg-accent/50 after:absolute after:inset-y-0 after:w-2 after:right-0 -z-0 isolate",
128
+ defaultClassNames.range_start
129
+ ),
130
+ range_middle: cn(
131
+ "rounded-none bg-accent/30",
132
+ defaultClassNames.range_middle
133
+ ),
134
+ range_end: cn(
135
+ "rounded-r-(--cell-radius) bg-accent/50 relative after:bg-accent/50 after:absolute after:inset-y-0 after:w-2 after:left-0 -z-0 isolate",
136
+ defaultClassNames.range_end
137
+ ),
138
+ today: cn(
139
+ "bg-accent/60 text-accent-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none font-[number:var(--font-weight-semibold)]",
140
+ defaultClassNames.today
141
+ ),
142
+ outside: cn(
143
+ "text-muted-foreground aria-selected:text-muted-foreground",
144
+ defaultClassNames.outside
145
+ ),
146
+ disabled: cn(
147
+ "text-muted-foreground/30 opacity-40",
148
+ defaultClassNames.disabled
149
+ ),
150
+ hidden: cn("invisible", defaultClassNames.hidden),
151
+ ...classNames,
152
+ }}
153
+ components={{
154
+ Root: ({ className, rootRef, ...props }) => {
155
+ return (
156
+ <div
157
+ data-slot="calendar"
158
+ ref={rootRef}
159
+ className={cn(className)}
160
+ {...props}
161
+ />
162
+ )
163
+ },
164
+ Chevron: ({ className, orientation, ...props }) => {
165
+ if (orientation === "left") {
166
+ return (
167
+ <ChevronLeft
168
+ className={cn("size-5 transition-transform group-hover:scale-110", className)}
169
+ {...props}
170
+ />
171
+ )
172
+ }
173
+
174
+ if (orientation === "right") {
175
+ return (
176
+ <ChevronRight
177
+ className={cn("size-5 transition-transform group-hover:scale-110", className)}
178
+ {...props}
179
+ />
180
+ )
181
+ }
182
+
183
+ return (
184
+ <ChevronDown
185
+ className={cn("size-4", className)}
186
+ {...props}
187
+ />
188
+ )
189
+ },
190
+ DayButton: CalendarDayButton,
191
+ WeekNumber: ({ children, ...props }) => {
192
+ return (
193
+ <td {...props}>
194
+ <div className="flex size-(--cell-size) items-center justify-center text-center font-[number:var(--font-weight-medium)]">
195
+ {children}
196
+ </div>
197
+ </td>
198
+ )
199
+ },
200
+ ...components,
201
+ }}
202
+ {...props}
203
+ />
204
+ )
205
+ }
206
+
207
+ function CalendarDayButton({
208
+ className,
209
+ day,
210
+ modifiers,
211
+ ...props
212
+ }: React.ComponentProps<typeof DayButton>) {
213
+ const defaultClassNames = getDefaultClassNames()
214
+
215
+ const ref = React.useRef<HTMLButtonElement>(null)
216
+ React.useEffect(() => {
217
+ if (modifiers.focused) ref.current?.focus()
218
+ }, [modifiers.focused])
219
+
220
+ return (
221
+ <Button
222
+ ref={ref}
223
+ variant="ghost"
224
+ size="icon"
225
+ data-day={day.date.toLocaleDateString()}
226
+ data-selected-single={
227
+ modifiers.selected &&
228
+ !modifiers.range_start &&
229
+ !modifiers.range_end &&
230
+ !modifiers.range_middle
231
+ }
232
+ data-range-start={modifiers.range_start}
233
+ data-range-end={modifiers.range_end}
234
+ data-range-middle={modifiers.range_middle}
235
+ className={cn(
236
+ "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col items-center justify-center gap-1 border-0 leading-none transition-all duration-200 cursor-pointer disabled:cursor-not-allowed",
237
+ "text-[length:var(--calendar-day-size)] font-[number:var(--font-weight-regular)]",
238
+ "hover:bg-accent/70 hover:text-accent-foreground hover:scale-105",
239
+ "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[selected-single=true]:font-[number:var(--font-weight-semibold)] data-[selected-single=true]:shadow-sm",
240
+ "data-[range-middle=true]:bg-accent/50 data-[range-middle=true]:text-foreground",
241
+ "data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-start=true]:font-[number:var(--font-weight-semibold)] data-[range-start=true]:shadow-sm",
242
+ "data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-end=true]:font-[number:var(--font-weight-semibold)] data-[range-end=true]:shadow-sm",
243
+ "group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 group-data-[focused=true]/day:ring-2 group-data-[focused=true]/day:ring-offset-2 group-data-[focused=true]/day:ring-offset-background",
244
+ "data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius)",
245
+ "data-[range-middle=true]:rounded-none",
246
+ "data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius)",
247
+ "[&>span]:opacity-80",
248
+ defaultClassNames.day,
249
+ className
250
+ )}
251
+ {...props}
252
+ >
253
+ {day.date.getDate()}
254
+ </Button>
255
+ )
256
+ }
257
+
258
+ export { Calendar, CalendarDayButton }
@@ -10,14 +10,14 @@ import * as CardStories from './card.stories';
10
10
 
11
11
  <Primary />
12
12
 
13
- ---
14
-
15
- ## Variations
16
-
17
- <Stories />
18
-
19
- ---
20
-
13
+ ---
14
+
15
+ ## Variations
16
+
17
+ <Stories />
18
+
19
+ ---
20
+
21
21
  ## AI Best Practices
22
22
 
23
23
  > [!IMPORTANT]