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,13 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { ChevronRight, ChevronDown } from "lucide-react";
3
3
  import { cn } from "../../shared/utils";
4
-
5
- export interface TreeNode {
6
- id: string;
7
- label: string;
8
- icon?: React.ReactNode;
9
- children?: TreeNode[];
10
- }
4
+ import { useTreeView, type TreeNode } from "./use-tree-view";
11
5
 
12
6
  interface TreeViewProps extends React.HTMLAttributes<HTMLDivElement> {
13
7
  data: TreeNode[];
@@ -29,6 +23,8 @@ interface TreeViewProps extends React.HTMLAttributes<HTMLDivElement> {
29
23
  * and collapsed independently. Supports custom icons per node, controlled
30
24
  * selection, and full WAI-ARIA keyboard navigation.
31
25
  *
26
+ * Headless logic is available via `useTreeView` for custom tree UIs.
27
+ *
32
28
  * @ai-rules
33
29
  * 1. Each `TreeNode` must have a unique `id`.
34
30
  * 2. Leaf nodes (no `children`) do not render expand arrows.
@@ -38,114 +34,14 @@ interface TreeViewProps extends React.HTMLAttributes<HTMLDivElement> {
38
34
  */
39
35
  const TreeView = React.forwardRef<HTMLDivElement, TreeViewProps>(
40
36
  ({ className, data, onNodeClick, onNodeSelect, defaultExpanded = [], selectedNodeId, ...props }, ref) => {
41
- const [expanded, setExpanded] = React.useState<Set<string>>(new Set(defaultExpanded));
42
- const [internalSelectedId, setInternalSelectedId] = React.useState<string | undefined>(undefined);
43
- const nodeRefs = React.useRef<Map<string, HTMLButtonElement>>(new Map());
44
-
45
- const isControlled = selectedNodeId !== undefined;
46
- const effectiveSelectedId = isControlled ? selectedNodeId : internalSelectedId;
47
-
48
- const toggleExpand = (nodeId: string) => {
49
- setExpanded(prev => {
50
- const next = new Set(prev);
51
- next.has(nodeId) ? next.delete(nodeId) : next.add(nodeId);
52
- return next;
53
- });
54
- };
55
-
56
- // Build an ordered list of all currently visible nodes (respects expand state)
57
- const getVisibleNodes = React.useCallback((): TreeNode[] => {
58
- const result: TreeNode[] = [];
59
- const traverse = (nodes: TreeNode[]) => {
60
- for (const node of nodes) {
61
- result.push(node);
62
- if (node.children?.length && expanded.has(node.id)) traverse(node.children);
63
- }
64
- };
65
- traverse(data);
66
- return result;
67
- }, [data, expanded]);
68
-
69
- // Find the parent of a given node id
70
- const findParent = (nodes: TreeNode[], targetId: string): TreeNode | null => {
71
- for (const n of nodes) {
72
- if (n.children?.some(c => c.id === targetId)) return n;
73
- if (n.children) {
74
- const found = findParent(n.children, targetId);
75
- if (found) return found;
76
- }
77
- }
78
- return null;
79
- };
80
-
81
- const handleSelect = (node: TreeNode) => {
82
- if (!isControlled) setInternalSelectedId(node.id);
83
- onNodeSelect?.(node);
84
- onNodeClick?.(node);
85
- };
86
-
87
- const handleKeyDown = (e: React.KeyboardEvent, node: TreeNode) => {
88
- const visibleNodes = getVisibleNodes();
89
- const idx = visibleNodes.findIndex(n => n.id === node.id);
90
- const hasChildren = !!(node.children?.length);
91
- const isExpanded = expanded.has(node.id);
92
-
93
- const focusNode = (id: string) => {
94
- nodeRefs.current.get(id)?.focus();
95
- };
96
-
97
- switch (e.key) {
98
- case 'ArrowDown': {
99
- e.preventDefault();
100
- const next = visibleNodes[idx + 1];
101
- if (next) focusNode(next.id);
102
- break;
103
- }
104
- case 'ArrowUp': {
105
- e.preventDefault();
106
- const prev = visibleNodes[idx - 1];
107
- if (prev) focusNode(prev.id);
108
- break;
109
- }
110
- case 'ArrowRight': {
111
- e.preventDefault();
112
- if (hasChildren && !isExpanded) {
113
- toggleExpand(node.id);
114
- } else if (hasChildren && isExpanded && node.children?.length) {
115
- focusNode(node.children[0].id);
116
- }
117
- break;
118
- }
119
- case 'ArrowLeft': {
120
- e.preventDefault();
121
- if (hasChildren && isExpanded) {
122
- toggleExpand(node.id);
123
- } else {
124
- const parent = findParent(data, node.id);
125
- if (parent) focusNode(parent.id);
126
- }
127
- break;
128
- }
129
- case 'Home': {
130
- e.preventDefault();
131
- if (visibleNodes.length > 0) focusNode(visibleNodes[0].id);
132
- break;
133
- }
134
- case 'End': {
135
- e.preventDefault();
136
- const last = visibleNodes[visibleNodes.length - 1];
137
- if (last) focusNode(last.id);
138
- break;
139
- }
140
- case 'Enter':
141
- case ' ': {
142
- e.preventDefault();
143
- if (hasChildren) toggleExpand(node.id);
144
- handleSelect(node);
145
- break;
146
- }
147
- }
148
- };
37
+ const {
38
+ expanded,
39
+ effectiveSelectedId,
40
+ getNodeRef,
41
+ toggleExpand,
42
+ handleSelect,
43
+ handleKeyDown,
44
+ } = useTreeView({ data, defaultExpanded, selectedNodeId, onNodeClick, onNodeSelect });
149
45
 
150
46
  return (
151
47
  <div ref={ref} className={cn("w-full", className)} role="tree" {...props}>
@@ -159,7 +55,7 @@ const TreeView = React.forwardRef<HTMLDivElement, TreeViewProps>(
159
55
  onToggle={toggleExpand}
160
56
  onSelect={handleSelect}
161
57
  onKeyDown={handleKeyDown}
162
- nodeRefs={nodeRefs}
58
+ getNodeRef={getNodeRef}
163
59
  />
164
60
  ))}
165
61
  </div>
@@ -176,11 +72,11 @@ interface TreeNodeComponentProps {
176
72
  onToggle: (nodeId: string) => void;
177
73
  onSelect: (node: TreeNode) => void;
178
74
  onKeyDown: (e: React.KeyboardEvent, node: TreeNode) => void;
179
- nodeRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;
75
+ getNodeRef: (nodeId: string) => (el: HTMLButtonElement | null) => void;
180
76
  }
181
77
 
182
78
  const TreeNodeComponent: React.FC<TreeNodeComponentProps> = ({
183
- node, level, expanded, selectedId, onToggle, onSelect, onKeyDown, nodeRefs,
79
+ node, level, expanded, selectedId, onToggle, onSelect, onKeyDown, getNodeRef,
184
80
  }) => {
185
81
  const hasChildren = !!(node.children?.length);
186
82
  const isExpanded = expanded.has(node.id);
@@ -191,15 +87,10 @@ const TreeNodeComponent: React.FC<TreeNodeComponentProps> = ({
191
87
  onSelect(node);
192
88
  };
193
89
 
194
- const setRef = (el: HTMLButtonElement | null) => {
195
- if (el) nodeRefs.current.set(node.id, el);
196
- else nodeRefs.current.delete(node.id);
197
- };
198
-
199
90
  return (
200
91
  <div role="none">
201
92
  <button
202
- ref={setRef}
93
+ ref={getNodeRef(node.id)}
203
94
  role="treeitem"
204
95
  aria-expanded={hasChildren ? isExpanded : undefined}
205
96
  aria-selected={isSelected}
@@ -235,7 +126,7 @@ const TreeNodeComponent: React.FC<TreeNodeComponentProps> = ({
235
126
  onToggle={onToggle}
236
127
  onSelect={onSelect}
237
128
  onKeyDown={onKeyDown}
238
- nodeRefs={nodeRefs}
129
+ getNodeRef={getNodeRef}
239
130
  />
240
131
  ))}
241
132
  </div>
@@ -246,3 +137,4 @@ const TreeNodeComponent: React.FC<TreeNodeComponentProps> = ({
246
137
 
247
138
  export { TreeView };
248
139
  export type { TreeViewProps };
140
+ export type { TreeNode } from './use-tree-view';
@@ -0,0 +1,229 @@
1
+ import { useState, useRef, useCallback } from 'react';
2
+
3
+ // ─────────────────────────────────────────────────────────────────────────────
4
+ // Types
5
+ // ─────────────────────────────────────────────────────────────────────────────
6
+
7
+ export interface TreeNode {
8
+ id: string;
9
+ label: string;
10
+ icon?: React.ReactNode;
11
+ children?: TreeNode[];
12
+ }
13
+
14
+ export interface UseTreeViewProps {
15
+ /** The tree data to manage. */
16
+ data: TreeNode[];
17
+ /** Node IDs that are expanded by default (uncontrolled). */
18
+ defaultExpanded?: string[];
19
+ /**
20
+ * Controlled selected node ID.
21
+ * When provided, selection state is managed externally.
22
+ */
23
+ selectedNodeId?: string;
24
+ /** Called when a node is clicked or activated via keyboard. */
25
+ onNodeClick?: (node: TreeNode) => void;
26
+ /** Called when a node becomes the selected item. */
27
+ onNodeSelect?: (node: TreeNode) => void;
28
+ }
29
+
30
+ export interface UseTreeViewReturn {
31
+ // ── State ─────────────────────────────────────────────────────────────────
32
+ /** Set of currently expanded node IDs. */
33
+ expanded: Set<string>;
34
+ /** The currently selected node ID (controlled or internal). */
35
+ effectiveSelectedId: string | undefined;
36
+
37
+ // ── Refs ──────────────────────────────────────────────────────────────────
38
+ /**
39
+ * Map of node ID → button element.
40
+ * Attach via the `setRef` helper returned by `getNodeRef`.
41
+ */
42
+ nodeRefs: React.MutableRefObject<Map<string, HTMLButtonElement>>;
43
+
44
+ // ── Helpers ───────────────────────────────────────────────────────────────
45
+ /** Returns a ref-setter callback for a given node ID. */
46
+ getNodeRef: (nodeId: string) => (el: HTMLButtonElement | null) => void;
47
+
48
+ // ── Handlers ──────────────────────────────────────────────────────────────
49
+ /** Toggle the expanded state of a node. */
50
+ toggleExpand: (nodeId: string) => void;
51
+ /** Select a node (updates internal state if uncontrolled, fires callbacks). */
52
+ handleSelect: (node: TreeNode) => void;
53
+ /**
54
+ * Full WAI-ARIA keyboard handler.
55
+ * Attach to `onKeyDown` of each tree-item button.
56
+ */
57
+ handleKeyDown: (e: React.KeyboardEvent, node: TreeNode) => void;
58
+
59
+ // ── Computed ──────────────────────────────────────────────────────────────
60
+ /** Returns the ordered list of all currently visible nodes (respects expand state). */
61
+ getVisibleNodes: () => TreeNode[];
62
+ }
63
+
64
+ // ─────────────────────────────────────────────────────────────────────────────
65
+ // Hook
66
+ // ─────────────────────────────────────────────────────────────────────────────
67
+
68
+ /**
69
+ * Headless hook for hierarchical tree-view logic.
70
+ *
71
+ * @description
72
+ * Manages expand/collapse state, selection (controlled or uncontrolled),
73
+ * WAI-ARIA keyboard navigation (Arrow keys, Home, End, Enter/Space),
74
+ * and focus management via node refs. Pair with any custom tree UI.
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * const { expanded, effectiveSelectedId, toggleExpand, handleSelect, handleKeyDown, getNodeRef } =
79
+ * useTreeView({ data, onNodeSelect });
80
+ * ```
81
+ */
82
+ export function useTreeView({
83
+ data,
84
+ defaultExpanded = [],
85
+ selectedNodeId,
86
+ onNodeClick,
87
+ onNodeSelect,
88
+ }: UseTreeViewProps): UseTreeViewReturn {
89
+ const [expanded, setExpanded] = useState<Set<string>>(new Set(defaultExpanded));
90
+ const [internalSelectedId, setInternalSelectedId] = useState<string | undefined>(undefined);
91
+ const nodeRefs = useRef<Map<string, HTMLButtonElement>>(new Map());
92
+
93
+ const isControlled = selectedNodeId !== undefined;
94
+ const effectiveSelectedId = isControlled ? selectedNodeId : internalSelectedId;
95
+
96
+ // ── Helpers ───────────────────────────────────────────────────────────────
97
+
98
+ const getNodeRef = useCallback(
99
+ (nodeId: string) => (el: HTMLButtonElement | null) => {
100
+ if (el) nodeRefs.current.set(nodeId, el);
101
+ else nodeRefs.current.delete(nodeId);
102
+ },
103
+ []
104
+ );
105
+
106
+ const getVisibleNodes = useCallback((): TreeNode[] => {
107
+ const result: TreeNode[] = [];
108
+ const traverse = (nodes: TreeNode[]) => {
109
+ for (const node of nodes) {
110
+ result.push(node);
111
+ if (node.children?.length && expanded.has(node.id)) traverse(node.children);
112
+ }
113
+ };
114
+ traverse(data);
115
+ return result;
116
+ }, [data, expanded]);
117
+
118
+ const findParent = useCallback(
119
+ (nodes: TreeNode[], targetId: string): TreeNode | null => {
120
+ for (const n of nodes) {
121
+ if (n.children?.some(c => c.id === targetId)) return n;
122
+ if (n.children) {
123
+ const found = findParent(n.children, targetId);
124
+ if (found) return found;
125
+ }
126
+ }
127
+ return null;
128
+ },
129
+ // findParent is a pure recursive function over `data` — no reactive deps needed
130
+ // eslint-disable-next-line react-hooks/exhaustive-deps
131
+ []
132
+ );
133
+
134
+ // ── Handlers ──────────────────────────────────────────────────────────────
135
+
136
+ const toggleExpand = useCallback((nodeId: string) => {
137
+ setExpanded(prev => {
138
+ const next = new Set(prev);
139
+ next.has(nodeId) ? next.delete(nodeId) : next.add(nodeId);
140
+ return next;
141
+ });
142
+ }, []);
143
+
144
+ const handleSelect = useCallback(
145
+ (node: TreeNode) => {
146
+ if (!isControlled) setInternalSelectedId(node.id);
147
+ onNodeSelect?.(node);
148
+ onNodeClick?.(node);
149
+ },
150
+ [isControlled, onNodeClick, onNodeSelect]
151
+ );
152
+
153
+ const handleKeyDown = useCallback(
154
+ (e: React.KeyboardEvent, node: TreeNode) => {
155
+ const visibleNodes = getVisibleNodes();
156
+ const idx = visibleNodes.findIndex(n => n.id === node.id);
157
+ const hasChildren = !!(node.children?.length);
158
+ const isExpanded = expanded.has(node.id);
159
+
160
+ const focusNode = (id: string) => {
161
+ nodeRefs.current.get(id)?.focus();
162
+ };
163
+
164
+ switch (e.key) {
165
+ case 'ArrowDown': {
166
+ e.preventDefault();
167
+ const next = visibleNodes[idx + 1];
168
+ if (next) focusNode(next.id);
169
+ break;
170
+ }
171
+ case 'ArrowUp': {
172
+ e.preventDefault();
173
+ const prev = visibleNodes[idx - 1];
174
+ if (prev) focusNode(prev.id);
175
+ break;
176
+ }
177
+ case 'ArrowRight': {
178
+ e.preventDefault();
179
+ if (hasChildren && !isExpanded) {
180
+ toggleExpand(node.id);
181
+ } else if (hasChildren && isExpanded && node.children?.length) {
182
+ focusNode(node.children[0].id);
183
+ }
184
+ break;
185
+ }
186
+ case 'ArrowLeft': {
187
+ e.preventDefault();
188
+ if (hasChildren && isExpanded) {
189
+ toggleExpand(node.id);
190
+ } else {
191
+ const parent = findParent(data, node.id);
192
+ if (parent) focusNode(parent.id);
193
+ }
194
+ break;
195
+ }
196
+ case 'Home': {
197
+ e.preventDefault();
198
+ if (visibleNodes.length > 0) focusNode(visibleNodes[0].id);
199
+ break;
200
+ }
201
+ case 'End': {
202
+ e.preventDefault();
203
+ const last = visibleNodes[visibleNodes.length - 1];
204
+ if (last) focusNode(last.id);
205
+ break;
206
+ }
207
+ case 'Enter':
208
+ case ' ': {
209
+ e.preventDefault();
210
+ if (hasChildren) toggleExpand(node.id);
211
+ handleSelect(node);
212
+ break;
213
+ }
214
+ }
215
+ },
216
+ [data, expanded, findParent, getVisibleNodes, handleSelect, toggleExpand]
217
+ );
218
+
219
+ return {
220
+ expanded,
221
+ effectiveSelectedId,
222
+ nodeRefs,
223
+ getNodeRef,
224
+ toggleExpand,
225
+ handleSelect,
226
+ handleKeyDown,
227
+ getVisibleNodes,
228
+ };
229
+ }