xertica-ui 2.1.3 → 2.1.4

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 (404) hide show
  1. package/CHANGELOG.md +15 -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/components/assistant/index.ts +6 -6
  6. package/components/assistant/xertica-assistant/parts/AssistantCollapsedView.tsx +97 -0
  7. package/components/assistant/xertica-assistant/parts/AssistantConversationList.tsx +104 -0
  8. package/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.tsx +81 -0
  9. package/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.tsx +86 -0
  10. package/components/assistant/xertica-assistant/parts/AssistantHeader.tsx +77 -0
  11. package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +573 -0
  12. package/components/assistant/xertica-assistant/parts/AssistantTabBar.tsx +65 -0
  13. package/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.tsx +41 -0
  14. package/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.tsx +98 -0
  15. package/components/assistant/xertica-assistant/parts/index.ts +16 -0
  16. package/components/assistant/xertica-assistant/types.ts +139 -0
  17. package/components/assistant/xertica-assistant/use-assistant.ts +5 -10
  18. package/components/assistant/xertica-assistant/xertica-assistant.tsx +125 -1096
  19. package/components/blocks/card-patterns/ActivityCard.tsx +72 -72
  20. package/components/blocks/card-patterns/FeatureCard.tsx +100 -100
  21. package/components/blocks/card-patterns/NotificationCard.tsx +127 -127
  22. package/components/blocks/card-patterns/ProfileCard.tsx +84 -84
  23. package/components/blocks/card-patterns/ProjectCard.tsx +89 -89
  24. package/components/blocks/card-patterns/QuickActionCard.tsx +62 -62
  25. package/components/blocks/card-patterns/card-patterns.stories.tsx +445 -445
  26. package/components/blocks/card-patterns/index.ts +17 -17
  27. package/components/blocks/index.ts +1 -1
  28. package/components/brand/index.ts +6 -6
  29. package/components/brand/theme-toggle/ThemeToggle.tsx +8 -27
  30. package/components/brand/xertica-provider/XerticaProvider.tsx +48 -48
  31. package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
  32. package/components/brand/xertica-provider/xertica-provider.test.tsx +52 -52
  33. package/components/examples/MapExamples.tsx +282 -282
  34. package/components/examples/SimpleFilterableMap.tsx +191 -191
  35. package/components/examples/index.ts +51 -51
  36. package/components/figma/ImageWithFallback.tsx +27 -27
  37. package/components/hooks/index.ts +10 -7
  38. package/components/hooks/use-layout-shortcuts.ts +46 -0
  39. package/components/index.ts +5 -5
  40. package/components/layout/header/header.test.tsx +8 -8
  41. package/components/layout/header/header.tsx +4 -4
  42. package/components/layout/index.ts +2 -2
  43. package/components/layout/sidebar/sidebar.mdx +1 -1
  44. package/components/layout/sidebar/sidebar.test.tsx +11 -11
  45. package/components/layout/sidebar/sidebar.tsx +1 -31
  46. package/components/layout/sidebar/use-sidebar.ts +2 -11
  47. package/components/media/FloatingMediaWrapper.tsx +11 -11
  48. package/components/media/audio-player/AudioPlayer.tsx +140 -215
  49. package/components/media/audio-player/use-audio-player.ts +298 -0
  50. package/components/media/index.ts +3 -3
  51. package/components/pages/home-content/HomeContent.tsx +7 -7
  52. package/components/pages/home-content/home-content.mdx +62 -62
  53. package/components/pages/home-page/HomePage.stories.tsx +39 -39
  54. package/components/pages/home-page/home-page.mdx +53 -53
  55. package/components/pages/index.ts +8 -8
  56. package/components/pages/template-content/template-content.mdx +61 -61
  57. package/components/pages/template-page/TemplatePage.stories.tsx +39 -39
  58. package/components/pages/template-page/template-page.mdx +53 -53
  59. package/components/public-api-smoke.test.tsx +52 -52
  60. package/components/shared/CustomTooltipContent.tsx +52 -0
  61. package/components/shared/assistant-utils.ts +43 -43
  62. package/components/ui/accordion/accordion.mdx +8 -8
  63. package/components/ui/accordion/accordion.stories.tsx +53 -53
  64. package/components/ui/alert/alert.mdx +8 -8
  65. package/components/ui/alert-dialog/alert-dialog.mdx +8 -8
  66. package/components/ui/aspect-ratio/aspect-ratio.mdx +8 -8
  67. package/components/ui/assistant-chart/assistant-chart.mdx +8 -8
  68. package/components/ui/avatar/avatar.mdx +8 -8
  69. package/components/ui/badge/badge.mdx +8 -8
  70. package/components/ui/badge/badge.tsx +9 -9
  71. package/components/ui/breadcrumb/breadcrumb.mdx +8 -8
  72. package/components/ui/button/button.mdx +8 -8
  73. package/components/ui/calendar/calendar.mdx +8 -8
  74. package/components/ui/calendar/calendar.tsx +258 -258
  75. package/components/ui/card/card.mdx +8 -8
  76. package/components/ui/card/card.stories.tsx +245 -245
  77. package/components/ui/carousel/carousel.mdx +8 -8
  78. package/components/ui/chart/chart.mdx +8 -8
  79. package/components/ui/chart/chart.stories.tsx +1303 -1303
  80. package/components/ui/chart/chart.test.tsx +154 -154
  81. package/components/ui/chart/chart.tsx +2367 -2367
  82. package/components/ui/checkbox/checkbox.mdx +8 -8
  83. package/components/ui/checkbox/checkbox.stories.tsx +20 -20
  84. package/components/ui/collapsible/collapsible.mdx +8 -8
  85. package/components/ui/command/command.mdx +8 -8
  86. package/components/ui/context-menu/context-menu.mdx +8 -8
  87. package/components/ui/dialog/dialog.mdx +8 -8
  88. package/components/ui/drawer/drawer.mdx +8 -8
  89. package/components/ui/dropdown-menu/dropdown-menu.mdx +8 -8
  90. package/components/ui/empty/empty.mdx +8 -8
  91. package/components/ui/file-upload/file-upload.mdx +8 -8
  92. package/components/ui/google-maps-loader/google-maps-loader.tsx +2 -2
  93. package/components/ui/hover-card/hover-card.mdx +8 -8
  94. package/components/ui/input/input.mdx +8 -8
  95. package/components/ui/input-otp/input-otp.mdx +8 -8
  96. package/components/ui/input-otp/input-otp.stories.tsx +6 -6
  97. package/components/ui/label/label.mdx +8 -8
  98. package/components/ui/map/map.mdx +8 -8
  99. package/components/ui/map/map.stories.tsx +51 -51
  100. package/components/ui/map/map.tsx +2 -2
  101. package/components/ui/menubar/menubar.mdx +8 -8
  102. package/components/ui/navigation-menu/navigation-menu.mdx +8 -8
  103. package/components/ui/notification-badge/notification-badge.mdx +8 -8
  104. package/components/ui/pagination/pagination.mdx +8 -8
  105. package/components/ui/popover/popover.mdx +8 -8
  106. package/components/ui/progress/progress.mdx +8 -8
  107. package/components/ui/progress/progress.tsx +68 -68
  108. package/components/ui/radio-group/radio-group.mdx +8 -8
  109. package/components/ui/rating/rating.mdx +8 -8
  110. package/components/ui/resizable/resizable.mdx +8 -8
  111. package/components/ui/route-map/route-map.mdx +8 -8
  112. package/components/ui/route-map/route-map.stories.tsx +54 -54
  113. package/components/ui/route-map/route-map.tsx +2 -2
  114. package/components/ui/scroll-area/scroll-area.mdx +8 -8
  115. package/components/ui/search/search.mdx +8 -8
  116. package/components/ui/select/select.mdx +8 -8
  117. package/components/ui/select/select.stories.tsx +9 -9
  118. package/components/ui/separator/separator.mdx +8 -8
  119. package/components/ui/sheet/sheet.mdx +8 -8
  120. package/components/ui/sheet/sheet.stories.tsx +95 -95
  121. package/components/ui/simple-map/simple-map.mdx +8 -8
  122. package/components/ui/simple-map/simple-map.stories.tsx +48 -48
  123. package/components/ui/skeleton/skeleton.mdx +8 -8
  124. package/components/ui/slider/slider.mdx +8 -8
  125. package/components/ui/sonner/sonner.mdx +8 -8
  126. package/components/ui/stats-card/stats-card.mdx +8 -8
  127. package/components/ui/stepper/stepper.mdx +8 -8
  128. package/components/ui/switch/switch.mdx +8 -8
  129. package/components/ui/switch/switch.stories.tsx +20 -20
  130. package/components/ui/table/table.mdx +8 -8
  131. package/components/ui/tabs/tabs.mdx +8 -8
  132. package/components/ui/tabs/tabs.stories.tsx +26 -26
  133. package/components/ui/textarea/textarea.mdx +8 -8
  134. package/components/ui/timeline/timeline.mdx +8 -8
  135. package/components/ui/toggle/toggle.mdx +8 -8
  136. package/components/ui/toggle-group/toggle-group.mdx +8 -8
  137. package/components/ui/tooltip/tooltip.mdx +8 -8
  138. package/components/ui/tree-view/tree-view.mdx +8 -8
  139. package/components.json +1512 -1512
  140. package/contexts/ApiKeyContext.tsx +72 -72
  141. package/contexts/AssistenteContext.tsx +17 -54
  142. package/contexts/BrandColorsContext.tsx +32 -43
  143. package/contexts/LanguageContext.tsx +13 -13
  144. package/contexts/LayoutContext.test.tsx +11 -11
  145. package/contexts/LayoutContext.tsx +24 -50
  146. package/contexts/ThemeContext.tsx +26 -26
  147. package/contexts/theme-data.ts +4 -4
  148. package/dist/{AssistantChart-DoZCyS5r.cjs → AssistantChart-9w31gdAb.cjs} +4 -4
  149. package/dist/{AssistantChart-CldVCVDe.cjs → AssistantChart-BAudAfne.cjs} +5 -5
  150. package/dist/{use-mobile-DRB3BQgD.cjs → AssistantChart-BAx9VQvb.cjs} +209 -1070
  151. package/dist/{AssistantChart-Cu3m7RBo.js → AssistantChart-BP8upjMk.js} +5 -5
  152. package/dist/{use-mobile-BvYdisLP.js → AssistantChart-CVko2A1W.js} +171 -1025
  153. package/dist/{AssistantChart-C_hwFRRr.js → AssistantChart-CVzmmhx4.js} +4 -4
  154. package/dist/{AudioPlayer-C12BjQBV.cjs → AudioPlayer-1ypwE2Wh.cjs} +126 -187
  155. package/dist/{AudioPlayer-DcFKRJE_.js → AudioPlayer-DuKXrCfy.js} +80 -141
  156. package/dist/CustomTooltipContent-DHjkY0ww.js +40 -0
  157. package/dist/CustomTooltipContent-c_K-DWRr.cjs +56 -0
  158. package/dist/{ThemeContext-BoH4NLfN.js → LanguageContext-BwhwC3G2.js} +27 -104
  159. package/dist/{ThemeContext-r69W20Xg.cjs → LanguageContext-DvUt5jBg.cjs} +27 -104
  160. package/dist/{LayoutContext-BvK-ggDa.cjs → LayoutContext-BDmcZfMH.cjs} +8 -20
  161. package/dist/{LayoutContext-BAql6ZRY.js → LayoutContext-dbQvdC4O.js} +8 -20
  162. package/dist/{ThemeContext-C2EwAPDt.js → ThemeContext-BbBNoFTG.js} +2 -2
  163. package/dist/{ThemeContext-vTjumZeM.cjs → ThemeContext-Cmr8Ex8H.cjs} +2 -2
  164. package/dist/ThemeContext-RTy1m2Uq.js +82 -0
  165. package/dist/ThemeContext-bSzuOit2.cjs +81 -0
  166. package/dist/VerifyEmailPage-BE-L9mB7.js +2828 -0
  167. package/dist/{VerifyEmailPage-Cwi3kbol.cjs → VerifyEmailPage-Bae2cBXT.cjs} +7 -7
  168. package/dist/VerifyEmailPage-CR7kb5df.cjs +2827 -0
  169. package/dist/{VerifyEmailPage-C0c2e5n0.js → VerifyEmailPage-C_ihbcth.js} +6 -6
  170. package/dist/VerifyEmailPage-CbgjOF0v.js +2828 -0
  171. package/dist/{VerifyEmailPage-DvMLZgFt.js → VerifyEmailPage-CdYPSJoO.js} +1 -1
  172. package/dist/{VerifyEmailPage-CYXtbKi3.cjs → VerifyEmailPage-DMBh4NM9.cjs} +1 -1
  173. package/dist/VerifyEmailPage-Dt7zgA4w.cjs +2827 -0
  174. package/dist/{XerticaProvider-CEoWMTxu.js → XerticaProvider-BITjgC5p.js} +2 -2
  175. package/dist/{XerticaProvider-CllrbMEJ.cjs → XerticaProvider-By8q3Roe.cjs} +2 -2
  176. package/dist/{XerticaProvider-cI9hSs27.cjs → XerticaProvider-CW9hpCdF.cjs} +9 -8
  177. package/dist/{XerticaProvider-DDuiIcKo.js → XerticaProvider-siSt9uG2.js} +5 -4
  178. package/dist/{LanguageSelector-D6uacAIM.cjs → XerticaXLogo-D8jf0SNv.cjs} +86 -102
  179. package/dist/{LanguageSelector-B5YfbHra.js → XerticaXLogo-fAJMy3H4.js} +87 -103
  180. package/dist/{alert-dialog-s-vmNkJ_.js → alert-dialog-iDe5VE5o.js} +3 -3
  181. package/dist/{alert-dialog-DSKByiKZ.cjs → alert-dialog-yckpaOpy.cjs} +3 -3
  182. package/dist/assistant.cjs.js +1 -1
  183. package/dist/assistant.es.js +1 -1
  184. package/dist/brand.cjs.js +2 -2
  185. package/dist/brand.es.js +2 -2
  186. package/dist/components/assistant/xertica-assistant/parts/AssistantCollapsedView.d.ts +13 -0
  187. package/dist/components/assistant/xertica-assistant/parts/AssistantConversationList.d.ts +16 -0
  188. package/dist/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.d.ts +17 -0
  189. package/dist/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.d.ts +19 -0
  190. package/dist/components/assistant/xertica-assistant/parts/AssistantHeader.d.ts +11 -0
  191. package/dist/components/assistant/xertica-assistant/parts/AssistantMessageBubble.d.ts +29 -0
  192. package/dist/components/assistant/xertica-assistant/parts/AssistantTabBar.d.ts +13 -0
  193. package/dist/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.d.ts +4 -0
  194. package/dist/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.d.ts +17 -0
  195. package/dist/components/assistant/xertica-assistant/parts/index.d.ts +16 -0
  196. package/dist/components/assistant/xertica-assistant/types.d.ts +106 -0
  197. package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +1 -2
  198. package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +2 -96
  199. package/dist/components/hooks/index.d.ts +3 -0
  200. package/dist/components/hooks/use-layout-shortcuts.d.ts +22 -0
  201. package/dist/components/media/audio-player/AudioPlayer.d.ts +4 -1
  202. package/dist/components/media/audio-player/use-audio-player.d.ts +72 -0
  203. package/dist/components/shared/CustomTooltipContent.d.ts +20 -0
  204. package/dist/components/ui/alert/alert.d.ts +1 -1
  205. package/dist/components/ui/badge/badge.d.ts +1 -1
  206. package/dist/components/ui/button/button.d.ts +2 -2
  207. package/dist/contexts/AssistenteContext.d.ts +10 -49
  208. package/dist/{google-maps-loader-Y-QkD-Li.cjs → google-maps-loader-BqsYL48U.cjs} +0 -5
  209. package/dist/{google-maps-loader-CTYySAun.js → google-maps-loader-t2IlYBzw.js} +0 -4
  210. package/dist/hooks.cjs.js +30 -10
  211. package/dist/hooks.es.js +25 -4
  212. package/dist/index-CkTUgOwX.js +8 -0
  213. package/dist/{index-COtD8bRW.cjs → index-D3RLKRAs.cjs} +1 -1
  214. package/dist/index.cjs.js +11 -11
  215. package/dist/index.es.js +11 -11
  216. package/dist/index.umd.js +454 -1027
  217. package/dist/layout.cjs.js +3 -10
  218. package/dist/layout.es.js +3 -10
  219. package/dist/media.cjs.js +1 -1
  220. package/dist/media.es.js +1 -1
  221. package/dist/pages.cjs.js +1 -1
  222. package/dist/pages.es.js +1 -1
  223. package/dist/{sidebar-CK_0ZQHj.cjs → sidebar-CVUGHOS_.cjs} +10 -57
  224. package/dist/{sidebar-CUuOvYhK.js → sidebar-CmvwjnVb.js} +10 -40
  225. package/dist/ui.cjs.js +4 -4
  226. package/dist/ui.es.js +4 -4
  227. package/dist/use-audio-player-Bkh23vQ3.js +177 -0
  228. package/dist/use-audio-player-Dn1NR9xN.cjs +176 -0
  229. package/dist/utils/color-utils.d.ts +51 -0
  230. package/dist/{xertica-assistant-dyP7KHM5.cjs → xertica-assistant-B1IaHXnB.cjs} +388 -529
  231. package/dist/xertica-assistant-BMqdyRVi.js +2082 -0
  232. package/dist/xertica-assistant-Bj3vBCq_.cjs +2081 -0
  233. package/dist/{xertica-assistant-yX1CFBBo.js → xertica-assistant-DPsESB6t.js} +390 -531
  234. package/dist/{CodeBlock-BgfYL_rD.cjs → xertica-assistant-Qp3ydksa.cjs} +51 -263
  235. package/dist/{CodeBlock-DnYNI8rQ.js → xertica-assistant-gnCJdcZY.js} +7 -219
  236. package/dist/xertica-ui.css +2 -2
  237. package/docs/architecture-improvements.md +463 -0
  238. package/docs/architecture.md +1 -1
  239. package/docs/components/assistant-chart.md +1 -1
  240. package/docs/components/audio-player.md +46 -0
  241. package/docs/components/branding.md +251 -0
  242. package/docs/components/calendar.md +154 -154
  243. package/docs/components/card-patterns.md +337 -337
  244. package/docs/components/card.md +235 -235
  245. package/docs/components/code-block.md +108 -0
  246. package/docs/components/formatted-document.md +113 -0
  247. package/docs/components/hooks.md +430 -0
  248. package/docs/components/image-with-fallback.md +106 -0
  249. package/docs/components/map-layers.md +140 -0
  250. package/docs/components/map.md +84 -84
  251. package/docs/components/modern-chat-input.md +163 -0
  252. package/docs/components/pages.md +351 -0
  253. package/docs/components/xertica-provider.md +24 -24
  254. package/docs/decision-tree.md +287 -287
  255. package/docs/doc-audit.md +223 -0
  256. package/docs/getting-started.md +154 -0
  257. package/docs/llms.md +25 -5
  258. package/docs/patterns/detail-page.md +276 -0
  259. package/docs/patterns/settings.md +346 -0
  260. package/docs/patterns/wizard.md +217 -0
  261. package/guidelines/Guidelines.md +252 -252
  262. package/hooks/useTheme.ts +3 -3
  263. package/imports/Podcast.tsx +388 -388
  264. package/imports/XerticaAi.tsx +45 -45
  265. package/imports/XerticaX.tsx +19 -19
  266. package/imports/svg-aueiaqngck.ts +11 -11
  267. package/imports/svg-v9krss1ozd.ts +16 -16
  268. package/imports/svg-vhrdofe3qe.ts +5 -5
  269. package/llms-compact.txt +327 -327
  270. package/llms.txt +160 -160
  271. package/package.json +203 -203
  272. package/styles/xertica/app-overrides/chat.css +61 -61
  273. package/styles/xertica/app-overrides/scrollbar.css +33 -33
  274. package/styles/xertica/integrations/google-maps.css +76 -76
  275. package/styles/xertica/integrations/sonner.css +73 -73
  276. package/templates/CLAUDE.md +182 -182
  277. package/templates/guidelines/Guidelines.md +325 -325
  278. package/templates/package.json +2 -2
  279. package/templates/src/features/auth/index.ts +4 -4
  280. package/templates/src/features/auth/ui/AuthPageShell.tsx +34 -34
  281. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -70
  282. package/templates/src/features/auth/ui/LoginContent.tsx +90 -90
  283. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +151 -151
  284. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +59 -59
  285. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -82
  286. package/templates/src/features/home/index.ts +1 -1
  287. package/templates/src/features/home/ui/HomeContent.tsx +100 -100
  288. package/templates/src/features/template/index.ts +5 -5
  289. package/templates/src/features/template/ui/CrudTemplate.tsx +3 -3
  290. package/templates/src/features/template/ui/DashboardTemplate.tsx +3 -3
  291. package/templates/src/features/template/ui/FormTemplate.tsx +120 -120
  292. package/templates/src/features/template/ui/LoginTemplate.tsx +3 -3
  293. package/templates/src/pages/AssistantPage.tsx +328 -328
  294. package/templates/src/pages/ForgotPasswordPage.tsx +6 -6
  295. package/templates/src/pages/HomePage.tsx +57 -57
  296. package/templates/src/pages/LoginPage.tsx +10 -10
  297. package/templates/src/pages/ResetPasswordPage.tsx +6 -6
  298. package/templates/src/pages/TemplatePage.tsx +30 -30
  299. package/templates/src/pages/VerifyEmailPage.tsx +6 -6
  300. package/templates/src/shared/config/navigation.ts +20 -20
  301. package/templates/src/shared/lib/auth.ts +20 -20
  302. package/templates/src/shared/types/auth.ts +3 -3
  303. package/templates/tsconfig.json +5 -5
  304. package/utils/color-utils.ts +72 -0
  305. package/utils/gemini.ts +140 -140
  306. package/dist/AudioPlayer-B1lt5cPl.cjs +0 -989
  307. package/dist/AudioPlayer-BZ7bibzU.cjs +0 -982
  308. package/dist/AudioPlayer-DMcG_c7L.js +0 -990
  309. package/dist/AudioPlayer-e8LfNoqO.js +0 -983
  310. package/dist/CodeBlock-7TTgmdGG.cjs +0 -2094
  311. package/dist/CodeBlock-BeSt1h5P.js +0 -2078
  312. package/dist/CodeBlock-BlcqlA9M.cjs +0 -2094
  313. package/dist/CodeBlock-Bnmeu5ez.cjs +0 -2094
  314. package/dist/CodeBlock-BtfPlbAI.js +0 -2078
  315. package/dist/CodeBlock-CIySIuYr.js +0 -2078
  316. package/dist/CodeBlock-CuPtUM-7.cjs +0 -2094
  317. package/dist/CodeBlock-D6ffWXgc.js +0 -2078
  318. package/dist/CodeBlock-D8dcwbit.cjs +0 -2094
  319. package/dist/CodeBlock-DMZrFnlw.cjs +0 -2094
  320. package/dist/CodeBlock-DlBehYN8.js +0 -2078
  321. package/dist/CodeBlock-DvKWbSnE.cjs +0 -2094
  322. package/dist/CodeBlock-DwMCfkFY.js +0 -2078
  323. package/dist/CodeBlock-Dy6CNYyj.js +0 -2078
  324. package/dist/CodeBlock-U1pPOQI7.cjs +0 -2094
  325. package/dist/CodeBlock-f_GpNhEB.js +0 -2078
  326. package/dist/CodeBlock-oB6u8nI1.js +0 -2078
  327. package/dist/CodeBlock-tZC31B73.cjs +0 -2094
  328. package/dist/ImageWithFallback-CGtidP6B.cjs +0 -4542
  329. package/dist/ImageWithFallback-lsg3pdFg.js +0 -4508
  330. package/dist/XerticaOrbe-KL1RBHzw.cjs +0 -1354
  331. package/dist/XerticaOrbe-zwS1p2a8.js +0 -1355
  332. package/dist/XerticaProvider-6btlAlzc.js +0 -17
  333. package/dist/XerticaProvider-BNoNOxQ5.cjs +0 -16
  334. package/dist/XerticaProvider-BlY2limY.cjs +0 -38
  335. package/dist/XerticaProvider-hSwhNQex.js +0 -39
  336. package/dist/breadcrumb-CqJ7bHY5.js +0 -161
  337. package/dist/breadcrumb-m9Hb2_XN.cjs +0 -177
  338. package/dist/components/blocks/audio-player/AudioPlayer.d.ts +0 -35
  339. package/dist/components/blocks/audio-player/index.d.ts +0 -1
  340. package/dist/components/blocks/document-editor/DocumentEditor.d.ts +0 -26
  341. package/dist/components/blocks/document-editor/index.d.ts +0 -1
  342. package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +0 -41
  343. package/dist/components/blocks/podcast-player/index.d.ts +0 -1
  344. package/dist/dropdown-menu-BDB5CmQs.cjs +0 -247
  345. package/dist/dropdown-menu-DQidbKBD.js +0 -231
  346. package/dist/google-maps-loader-BFWp6VPd.js +0 -287
  347. package/dist/google-maps-loader-eS3uQ5TA.cjs +0 -287
  348. package/dist/header-Cgy6vYPk.cjs +0 -731
  349. package/dist/header-DRlT4jgI.js +0 -715
  350. package/dist/header-Dux00SI4.cjs +0 -731
  351. package/dist/header-EkGKXPsD.js +0 -715
  352. package/dist/header-WfEywpyc.cjs +0 -731
  353. package/dist/header-tifNQn2U.js +0 -715
  354. package/dist/index-BhapVLVj.js +0 -8
  355. package/dist/index-D6fxYEY8.cjs +0 -7
  356. package/dist/index-DW5tYe26.js +0 -8
  357. package/dist/input-2R4loU86.js +0 -127
  358. package/dist/input-DWANSKGb.cjs +0 -145
  359. package/dist/rich-text-editor-0mraWT5y.cjs +0 -2376
  360. package/dist/rich-text-editor-B6jMRLzk.cjs +0 -1939
  361. package/dist/rich-text-editor-B8_oYcIR.js +0 -1730
  362. package/dist/rich-text-editor-B9UbSXNb.js +0 -1203
  363. package/dist/rich-text-editor-BYuRBNBU.js +0 -2373
  364. package/dist/rich-text-editor-Bb9pySTs.cjs +0 -2374
  365. package/dist/rich-text-editor-BcL6L3cm.cjs +0 -2374
  366. package/dist/rich-text-editor-BoVZYtTs.cjs +0 -2391
  367. package/dist/rich-text-editor-CPV1lEPH.cjs +0 -1748
  368. package/dist/rich-text-editor-CoKqbCtu.cjs +0 -1799
  369. package/dist/rich-text-editor-Cw56T_mB.js +0 -2356
  370. package/dist/rich-text-editor-Cyt8qs2b.js +0 -1921
  371. package/dist/rich-text-editor-D6H84OcX.cjs +0 -1220
  372. package/dist/rich-text-editor-D76gD-QI.js +0 -2328
  373. package/dist/rich-text-editor-DKkokOnA.js +0 -1781
  374. package/dist/rich-text-editor-DNsdpN64.cjs +0 -2359
  375. package/dist/rich-text-editor-DfG8bCyY.js +0 -2358
  376. package/dist/rich-text-editor-Dxjw31Z4.js +0 -2341
  377. package/dist/rich-text-editor-DzP0Epmb.js +0 -2356
  378. package/dist/rich-text-editor-skplNlBM.cjs +0 -2345
  379. package/dist/select-Bkbr0f-Z.cjs +0 -162
  380. package/dist/select-CvIVdX2n.js +0 -145
  381. package/dist/slider-Bc5Hd0y1.js +0 -56
  382. package/dist/slider-N7hFFj6X.cjs +0 -73
  383. package/dist/tooltip-Ded96neP.cjs +0 -137
  384. package/dist/tooltip-HDOoD2-0.js +0 -120
  385. package/dist/use-mobile-B0hNy_Y6.cjs +0 -4303
  386. package/dist/use-mobile-BXuYROXM.js +0 -4202
  387. package/dist/use-mobile-Bbd51ASU.cjs +0 -4392
  388. package/dist/use-mobile-Bk6CX-TC.js +0 -4359
  389. package/dist/use-mobile-BzuxjzNX.cjs +0 -4392
  390. package/dist/use-mobile-CG2-SdXV.cjs +0 -4235
  391. package/dist/use-mobile-CKb5pqTs.js +0 -4269
  392. package/dist/use-mobile-CYuAuGDl.js +0 -4202
  393. package/dist/use-mobile-CaENcqm-.js +0 -4508
  394. package/dist/use-mobile-CbrYgJGJ.js +0 -4203
  395. package/dist/use-mobile-DMOvImGQ.cjs +0 -4542
  396. package/dist/use-mobile-DZvv7QMR.js +0 -4359
  397. package/dist/use-mobile-DdI_TXam.cjs +0 -4235
  398. package/dist/use-mobile-DlceKf8a.js +0 -4359
  399. package/dist/use-mobile-DsOnow1o.cjs +0 -4236
  400. package/dist/use-mobile-Kcj6jSnK.cjs +0 -4392
  401. package/dist/use-mobile-bnKcua_i.js +0 -4202
  402. package/dist/use-mobile-ncXBeE2z.cjs +0 -4235
  403. package/dist/{rich-text-editor-DgF8s7xW.js → rich-text-editor-BmsjY03B.js} +26 -26
  404. package/dist/{rich-text-editor-mWoaSCE4.cjs → rich-text-editor-GS2kpTAK.cjs} +26 -26
@@ -1,325 +1,325 @@
1
- # Project Guidelines — Xertica UI App
2
-
3
- > **Scope**: These guidelines apply to React applications scaffolded with `npx xertica-ui@latest init`. They define the FSD/FDA architecture, import conventions, component rules, and AI agent behavior for this project.
4
- >
5
- > **AI agents**: Read this file first. Then read `node_modules/xertica-ui/llms-compact.txt` for component reference, and `node_modules/xertica-ui/docs/decision-tree.md` before choosing between similar components.
6
-
7
- ---
8
-
9
- ## 1. Architecture — Feature-Sliced Design + Feature-Driven Architecture
10
-
11
- This project follows **FSD (Feature-Sliced Design)** layered architecture combined with **FDA (Feature-Driven Architecture)** vertical slicing. Layers can only import from layers below them.
12
-
13
- ```
14
- src/
15
- ├── app/ # Layer 1 — Application shell (imports from all layers)
16
- │ ├── App.tsx # XerticaProvider + BrowserRouter + AuthGuard
17
- │ └── components/
18
- │ ├── AppLayout.tsx # Sidebar + children + optional XerticaAssistant
19
- │ └── AuthGuard.tsx # Auth state management + all route definitions
20
-
21
- ├── shared/ # Layer 2 — Shared utilities (no business domain)
22
- │ ├── config/
23
- │ │ └── navigation.ts # RouteConfig type, routes[], getRouteByPath()
24
- │ ├── lib/
25
- │ │ └── auth.ts # getStoredUser, storeUser, clearStoredUser
26
- │ └── types/
27
- │ └── auth.ts # User interface
28
-
29
- ├── features/ # Layer 3 — Vertical slices by business capability
30
- │ ├── auth/
31
- │ │ ├── index.ts # Public barrel — import from here, never from /ui/*
32
- │ │ └── ui/
33
- │ │ ├── AuthPageShell.tsx # Split-screen layout for auth pages
34
- │ │ ├── SocialLoginButtons.tsx # Google / MT Login / gov.br buttons
35
- │ │ ├── LoginContent.tsx
36
- │ │ ├── ForgotPasswordContent.tsx
37
- │ │ ├── VerifyEmailContent.tsx
38
- │ │ └── ResetPasswordContent.tsx
39
- │ ├── home/
40
- │ │ ├── index.ts
41
- │ │ └── ui/
42
- │ │ └── HomeContent.tsx
43
- │ └── template/
44
- │ ├── index.ts
45
- │ └── ui/
46
- │ ├── TemplateContent.tsx
47
- │ └── FormTemplate.tsx
48
-
49
- ├── pages/ # Layer 4 — Route entrypoints (thin wrappers only)
50
- │ ├── LoginPage.tsx
51
- │ ├── ForgotPasswordPage.tsx
52
- │ ├── VerifyEmailPage.tsx
53
- │ ├── ResetPasswordPage.tsx
54
- │ ├── HomePage.tsx # AppLayout + HomeContent + XerticaAssistant
55
- │ └── TemplatePage.tsx # AppLayout + TemplateContent + XerticaAssistant
56
-
57
- └── styles/ # Visual tokens and Tailwind entry
58
- ├── index.css # Imports: xertica-ui/style.css, tokens.css, @source
59
- └── xertica/
60
- └── tokens.css # Brand CSS variables — edit here to customize theme
61
- ```
62
-
63
- ---
64
-
65
- ## 2. Layer Responsibilities
66
-
67
- ### `app/`
68
- Initializes the application. Contains only providers, the router, `AuthGuard` (auth state + routes), and `AppLayout` (layout shell). No business logic here.
69
-
70
- ### `shared/`
71
- Framework-agnostic code with no business domain: primitive types, localStorage helpers, navigation config. Importable by any layer. Must not import from `features/` or `pages/`.
72
-
73
- ### `features/`
74
- Each feature is a self-contained vertical slice. The `index.ts` is the only public interface — always import from the barrel, never from internal paths:
75
-
76
- ```tsx
77
- // ✅ Correct
78
- import { LoginContent } from '../features/auth';
79
-
80
- // ❌ Wrong — never import from internal feature paths
81
- import { LoginContent } from '../features/auth/ui/LoginContent';
82
- ```
83
-
84
- Features must not import from each other. If two features share code, extract it to `shared/`.
85
-
86
- ### `pages/`
87
- Thin route wrappers that compose `AppLayout` + feature content + optional `XerticaAssistant`. No logic, no state, no API calls here:
88
-
89
- ```tsx
90
- // ✅ Correct — thin wrapper
91
- export function HomePage({ user, onLogout }: PageProps) {
92
- const { assistenteExpanded, toggleAssistente } = useLayout();
93
- return (
94
- <AppLayout user={user} onLogout={onLogout} assistant={<XerticaAssistant ... />}>
95
- <HomeContent user={user} onLogout={onLogout} />
96
- </AppLayout>
97
- );
98
- }
99
- ```
100
-
101
- ---
102
-
103
- ## 3. Import Rules
104
-
105
- Always use the correct `xertica-ui` subpath for the layer you are in:
106
-
107
- ```tsx
108
- // shared/ui → UI primitives
109
- import { Button, Card, Input, Badge, Table, Dialog, Select } from 'xertica-ui/ui';
110
-
111
- // app layer → providers and brand
112
- import { XerticaProvider, XerticaLogo, ThemeToggle } from 'xertica-ui/brand';
113
-
114
- // features/layout → navigation shell
115
- import { Sidebar, Header } from 'xertica-ui/layout';
116
-
117
- // features/assistant → AI assistant
118
- import { XerticaAssistant, generateDemoResponse } from 'xertica-ui/assistant';
119
-
120
- // features/media → media players
121
- import { VideoPlayer, AudioPlayer } from 'xertica-ui/media';
122
-
123
- // shared/lib → hooks and contexts
124
- import { useLayout, useOptionalLayout, useTheme } from 'xertica-ui/hooks';
125
-
126
- // styles → imported once by src/styles/index.css
127
- import 'xertica-ui/style.css';
128
- ```
129
-
130
- Icons always come from `lucide-react` — never from `xertica-ui`:
131
-
132
- ```tsx
133
- import { Home, Settings, Plus, Trash2, ChevronRight } from 'lucide-react';
134
- ```
135
-
136
- ---
137
-
138
- ## 4. Adding a New Route (Step-by-Step)
139
-
140
- 1. **Create the feature content** — `src/features/<name>/ui/<NameContent>.tsx`
141
- 2. **Export from the barrel** — add to `src/features/<name>/index.ts`
142
- 3. **Create the page** — `src/pages/<NamePage>.tsx` (thin AppLayout wrapper)
143
- 4. **Register the route** — add to `routes` array in `src/shared/config/navigation.ts`:
144
-
145
- ```ts
146
- import { MyIcon } from 'lucide-react';
147
-
148
- export const routes: RouteConfig[] = [
149
- { path: '/home', label: 'Home', icon: Home },
150
- { path: '/my-feature', label: 'My Feature', icon: MyIcon }, // ← add here
151
- ];
152
- ```
153
-
154
- 5. **Register the `<Route>`** — add to `src/app/components/AuthGuard.tsx`:
155
-
156
- ```tsx
157
- import { MyFeaturePage } from '../../pages/MyFeaturePage';
158
-
159
- // inside <Routes>:
160
- <Route path="/my-feature" element={
161
- <ProtectedRoute user={user}>
162
- <MyFeaturePage user={user} onLogout={handleLogout} />
163
- </ProtectedRoute>
164
- } />
165
- ```
166
-
167
- 6. **Add a navigation card** to `HomeContent.tsx` if it's a primary module.
168
-
169
- ---
170
-
171
- ## 5. Non-Negotiable Rules
172
-
173
- ### HTML — never use raw elements for UI
174
-
175
- | ❌ Never | ✅ Always |
176
- |---|---|
177
- | `<button>` | `<Button>` from `xertica-ui/ui` |
178
- | `<input>` | `<Input>` from `xertica-ui/ui` |
179
- | `<select>` | `<Select>` from `xertica-ui/ui` |
180
- | `<h1>` / `<h2>` for page headers | `<PageHeader><PageHeaderHeading>` from `xertica-ui/ui` |
181
- | `<div class="card ...">` | `<Card>` from `xertica-ui/ui` |
182
- | custom scrollable div | `<ScrollArea>` from `xertica-ui/ui` |
183
-
184
- ### Colors — context-dependent rules
185
-
186
- | ❌ Never (any context) | Reason |
187
- |---|---|
188
- | `#3b82f6`, `rgb(59, 130, 246)`, `hsl(...)` | Raw values — non-themeable |
189
- | `style={{ color: '#...' }}` for theming | Non-themeable inline style |
190
-
191
- | ❌ Wrong for semantic/status contexts | ✅ Required instead |
192
- |---|---|
193
- | `bg-red-500` / `text-red-500` for errors | `bg-destructive` / `text-destructive` |
194
- | `bg-green-500` for success states | `bg-success` |
195
- | `bg-yellow-500` for warnings | `bg-warning` |
196
-
197
- > For **layout, spacing, and general non-semantic UI** (custom components, decorative elements where no semantic token applies), standard Tailwind color utilities like `bg-blue-500` or `text-gray-700` are acceptable.
198
-
199
- | ❌ Never | ✅ Always |
200
- |---|---|
201
- | `rounded-lg`, `rounded-xl` | `rounded-[var(--radius)]` |
202
-
203
- ### Layout state — never hardcode
204
-
205
- ```tsx
206
- // ✅ Correct
207
- const { sidebarExpanded, sidebarWidth } = useLayout();
208
- <div style={{ paddingLeft: sidebarExpanded ? `${sidebarWidth}px` : '80px' }}>
209
-
210
- // ✅ Correct for reusable components that may render outside XerticaProvider
211
- const layout = useOptionalLayout();
212
- const fallbackSidebarWidth = layout?.sidebarWidth ?? 80;
213
-
214
- // ❌ Wrong
215
- <div style={{ paddingLeft: '256px' }}>
216
- ```
217
-
218
- ### Destructive actions — always confirm
219
-
220
- ```tsx
221
- // ✅ Always wrap in AlertDialog
222
- <AlertDialog>
223
- <AlertDialogTrigger asChild>
224
- <Button variant="destructive">Delete</Button>
225
- </AlertDialogTrigger>
226
- <AlertDialogContent>
227
- <AlertDialogHeader>
228
- <AlertDialogTitle>Are you sure?</AlertDialogTitle>
229
- <AlertDialogDescription>This action cannot be undone.</AlertDialogDescription>
230
- </AlertDialogHeader>
231
- <AlertDialogFooter>
232
- <AlertDialogCancel>Cancel</AlertDialogCancel>
233
- <AlertDialogAction onClick={handleDelete}>Delete</AlertDialogAction>
234
- </AlertDialogFooter>
235
- </AlertDialogContent>
236
- </AlertDialog>
237
- ```
238
-
239
- ### Page structure — always use PageHeader
240
-
241
- Every page must use `<PageHeader>` for its title and primary actions. Never use raw `<h1>` or `<h2>`:
242
-
243
- ```tsx
244
- <PageHeader>
245
- <PageHeaderHeading>Users</PageHeaderHeading>
246
- <PageHeaderDescription>Manage your team members.</PageHeaderDescription>
247
- <Button><Plus className="size-4 mr-2" />New User</Button>
248
- </PageHeader>
249
- ```
250
-
251
- ### Toast notifications
252
-
253
- ```tsx
254
- import { toast } from 'sonner';
255
-
256
- toast.success('User created successfully');
257
- toast.error('Failed to save changes');
258
- toast.warning('Session expires in 5 minutes');
259
- ```
260
-
261
- Never render `<Toaster>` manually — it is auto-injected by `<XerticaProvider>` in `App.tsx`.
262
-
263
- ---
264
-
265
- ## 6. Theme & Token Customization
266
-
267
- To change the color scheme, edit `src/styles/xertica/tokens.css`. To switch themes via CLI:
268
-
269
- ```bash
270
- npx xertica-ui update
271
- # → select "Theme only"
272
- ```
273
-
274
- The token file uses HSL values and supports both light and dark modes via the `.dark` class on `<html>`.
275
-
276
- Never import or modify anything inside `node_modules/xertica-ui/styles/` — override via `tokens.css` only.
277
-
278
- ---
279
-
280
- ## 7. Authentication Pattern
281
-
282
- The auth flow is managed in `src/app/components/AuthGuard.tsx`:
283
-
284
- - `getStoredUser()` / `storeUser()` / `clearStoredUser()` — from `src/shared/lib/auth.ts`
285
- - Auth pages (`/login`, `/forgot-password`, etc.) redirect to `/home` when user is already logged in
286
- - Protected routes use `<ProtectedRoute user={user}>` wrapper that redirects to `/login` if user is null
287
- - `handleLogin(email, password)` stores the user and navigates to the first protected route
288
- - `handleLogout()` clears storage and navigates to `/login`
289
-
290
- To add social login, extend `handleLogin` logic in `AuthGuard.tsx` and wire the provider button in `SocialLoginButtons.tsx`.
291
-
292
- ---
293
-
294
- ## 8. AI Agent Documentation Reference
295
-
296
- | What you need | Where to read |
297
- |---|---|
298
- | Quick import + rules reference | `node_modules/xertica-ui/llms-compact.txt` |
299
- | Full component API | `node_modules/xertica-ui/llms-full.txt` |
300
- | "Should I use Dialog or Sheet?" | `node_modules/xertica-ui/docs/decision-tree.md` |
301
- | Specific component props | `node_modules/xertica-ui/docs/components/[name].md` |
302
- | All components + their imports | `node_modules/xertica-ui/components.json` |
303
- | Mandatory AI rules | `node_modules/xertica-ui/docs/ai-usage.md` |
304
- | This project's rules (you are here) | `CLAUDE.md` at project root |
305
-
306
- ---
307
-
308
- ## 9. Development Checklist
309
-
310
- Before completing any feature:
311
-
312
- - [ ] Feature content is in `src/features/<name>/ui/`
313
- - [ ] Feature exports via `src/features/<name>/index.ts`
314
- - [ ] Page is a thin wrapper in `src/pages/`
315
- - [ ] Route registered in `src/shared/config/navigation.ts`
316
- - [ ] Route registered in `src/app/components/AuthGuard.tsx`
317
- - [ ] Home navigation card added (if primary module)
318
- - [ ] Only `xertica-ui` components used — no raw HTML elements
319
- - [ ] No raw hex/rgb values — semantic tokens for semantic/status contexts; Tailwind utilities acceptable for non-semantic layout
320
- - [ ] No hardcoded radii — use `rounded-[var(--radius)]`
321
- - [ ] Icons from `lucide-react` only
322
- - [ ] Destructive actions wrapped in `<AlertDialog>`
323
- - [ ] Layout state from `useLayout()` — no hardcoded widths
324
- - [ ] Toast used for action feedback (`toast.success`, `toast.error`)
325
- - [ ] Responsive on mobile, tablet, and desktop
1
+ # Project Guidelines — Xertica UI App
2
+
3
+ > **Scope**: These guidelines apply to React applications scaffolded with `npx xertica-ui@latest init`. They define the FSD/FDA architecture, import conventions, component rules, and AI agent behavior for this project.
4
+ >
5
+ > **AI agents**: Read this file first. Then read `node_modules/xertica-ui/llms-compact.txt` for component reference, and `node_modules/xertica-ui/docs/decision-tree.md` before choosing between similar components.
6
+
7
+ ---
8
+
9
+ ## 1. Architecture — Feature-Sliced Design + Feature-Driven Architecture
10
+
11
+ This project follows **FSD (Feature-Sliced Design)** layered architecture combined with **FDA (Feature-Driven Architecture)** vertical slicing. Layers can only import from layers below them.
12
+
13
+ ```
14
+ src/
15
+ ├── app/ # Layer 1 — Application shell (imports from all layers)
16
+ │ ├── App.tsx # XerticaProvider + BrowserRouter + AuthGuard
17
+ │ └── components/
18
+ │ ├── AppLayout.tsx # Sidebar + children + optional XerticaAssistant
19
+ │ └── AuthGuard.tsx # Auth state management + all route definitions
20
+
21
+ ├── shared/ # Layer 2 — Shared utilities (no business domain)
22
+ │ ├── config/
23
+ │ │ └── navigation.ts # RouteConfig type, routes[], getRouteByPath()
24
+ │ ├── lib/
25
+ │ │ └── auth.ts # getStoredUser, storeUser, clearStoredUser
26
+ │ └── types/
27
+ │ └── auth.ts # User interface
28
+
29
+ ├── features/ # Layer 3 — Vertical slices by business capability
30
+ │ ├── auth/
31
+ │ │ ├── index.ts # Public barrel — import from here, never from /ui/*
32
+ │ │ └── ui/
33
+ │ │ ├── AuthPageShell.tsx # Split-screen layout for auth pages
34
+ │ │ ├── SocialLoginButtons.tsx # Google / MT Login / gov.br buttons
35
+ │ │ ├── LoginContent.tsx
36
+ │ │ ├── ForgotPasswordContent.tsx
37
+ │ │ ├── VerifyEmailContent.tsx
38
+ │ │ └── ResetPasswordContent.tsx
39
+ │ ├── home/
40
+ │ │ ├── index.ts
41
+ │ │ └── ui/
42
+ │ │ └── HomeContent.tsx
43
+ │ └── template/
44
+ │ ├── index.ts
45
+ │ └── ui/
46
+ │ ├── TemplateContent.tsx
47
+ │ └── FormTemplate.tsx
48
+
49
+ ├── pages/ # Layer 4 — Route entrypoints (thin wrappers only)
50
+ │ ├── LoginPage.tsx
51
+ │ ├── ForgotPasswordPage.tsx
52
+ │ ├── VerifyEmailPage.tsx
53
+ │ ├── ResetPasswordPage.tsx
54
+ │ ├── HomePage.tsx # AppLayout + HomeContent + XerticaAssistant
55
+ │ └── TemplatePage.tsx # AppLayout + TemplateContent + XerticaAssistant
56
+
57
+ └── styles/ # Visual tokens and Tailwind entry
58
+ ├── index.css # Imports: xertica-ui/style.css, tokens.css, @source
59
+ └── xertica/
60
+ └── tokens.css # Brand CSS variables — edit here to customize theme
61
+ ```
62
+
63
+ ---
64
+
65
+ ## 2. Layer Responsibilities
66
+
67
+ ### `app/`
68
+ Initializes the application. Contains only providers, the router, `AuthGuard` (auth state + routes), and `AppLayout` (layout shell). No business logic here.
69
+
70
+ ### `shared/`
71
+ Framework-agnostic code with no business domain: primitive types, localStorage helpers, navigation config. Importable by any layer. Must not import from `features/` or `pages/`.
72
+
73
+ ### `features/`
74
+ Each feature is a self-contained vertical slice. The `index.ts` is the only public interface — always import from the barrel, never from internal paths:
75
+
76
+ ```tsx
77
+ // ✅ Correct
78
+ import { LoginContent } from '../features/auth';
79
+
80
+ // ❌ Wrong — never import from internal feature paths
81
+ import { LoginContent } from '../features/auth/ui/LoginContent';
82
+ ```
83
+
84
+ Features must not import from each other. If two features share code, extract it to `shared/`.
85
+
86
+ ### `pages/`
87
+ Thin route wrappers that compose `AppLayout` + feature content + optional `XerticaAssistant`. No logic, no state, no API calls here:
88
+
89
+ ```tsx
90
+ // ✅ Correct — thin wrapper
91
+ export function HomePage({ user, onLogout }: PageProps) {
92
+ const { assistenteExpanded, toggleAssistente } = useLayout();
93
+ return (
94
+ <AppLayout user={user} onLogout={onLogout} assistant={<XerticaAssistant ... />}>
95
+ <HomeContent user={user} onLogout={onLogout} />
96
+ </AppLayout>
97
+ );
98
+ }
99
+ ```
100
+
101
+ ---
102
+
103
+ ## 3. Import Rules
104
+
105
+ Always use the correct `xertica-ui` subpath for the layer you are in:
106
+
107
+ ```tsx
108
+ // shared/ui → UI primitives
109
+ import { Button, Card, Input, Badge, Table, Dialog, Select } from 'xertica-ui/ui';
110
+
111
+ // app layer → providers and brand
112
+ import { XerticaProvider, XerticaLogo, ThemeToggle } from 'xertica-ui/brand';
113
+
114
+ // features/layout → navigation shell
115
+ import { Sidebar, Header } from 'xertica-ui/layout';
116
+
117
+ // features/assistant → AI assistant
118
+ import { XerticaAssistant, generateDemoResponse } from 'xertica-ui/assistant';
119
+
120
+ // features/media → media players
121
+ import { VideoPlayer, AudioPlayer } from 'xertica-ui/media';
122
+
123
+ // shared/lib → hooks and contexts
124
+ import { useLayout, useOptionalLayout, useTheme } from 'xertica-ui/hooks';
125
+
126
+ // styles → imported once by src/styles/index.css
127
+ import 'xertica-ui/style.css';
128
+ ```
129
+
130
+ Icons always come from `lucide-react` — never from `xertica-ui`:
131
+
132
+ ```tsx
133
+ import { Home, Settings, Plus, Trash2, ChevronRight } from 'lucide-react';
134
+ ```
135
+
136
+ ---
137
+
138
+ ## 4. Adding a New Route (Step-by-Step)
139
+
140
+ 1. **Create the feature content** — `src/features/<name>/ui/<NameContent>.tsx`
141
+ 2. **Export from the barrel** — add to `src/features/<name>/index.ts`
142
+ 3. **Create the page** — `src/pages/<NamePage>.tsx` (thin AppLayout wrapper)
143
+ 4. **Register the route** — add to `routes` array in `src/shared/config/navigation.ts`:
144
+
145
+ ```ts
146
+ import { MyIcon } from 'lucide-react';
147
+
148
+ export const routes: RouteConfig[] = [
149
+ { path: '/home', label: 'Home', icon: Home },
150
+ { path: '/my-feature', label: 'My Feature', icon: MyIcon }, // ← add here
151
+ ];
152
+ ```
153
+
154
+ 5. **Register the `<Route>`** — add to `src/app/components/AuthGuard.tsx`:
155
+
156
+ ```tsx
157
+ import { MyFeaturePage } from '../../pages/MyFeaturePage';
158
+
159
+ // inside <Routes>:
160
+ <Route path="/my-feature" element={
161
+ <ProtectedRoute user={user}>
162
+ <MyFeaturePage user={user} onLogout={handleLogout} />
163
+ </ProtectedRoute>
164
+ } />
165
+ ```
166
+
167
+ 6. **Add a navigation card** to `HomeContent.tsx` if it's a primary module.
168
+
169
+ ---
170
+
171
+ ## 5. Non-Negotiable Rules
172
+
173
+ ### HTML — never use raw elements for UI
174
+
175
+ | ❌ Never | ✅ Always |
176
+ |---|---|
177
+ | `<button>` | `<Button>` from `xertica-ui/ui` |
178
+ | `<input>` | `<Input>` from `xertica-ui/ui` |
179
+ | `<select>` | `<Select>` from `xertica-ui/ui` |
180
+ | `<h1>` / `<h2>` for page headers | `<PageHeader><PageHeaderHeading>` from `xertica-ui/ui` |
181
+ | `<div class="card ...">` | `<Card>` from `xertica-ui/ui` |
182
+ | custom scrollable div | `<ScrollArea>` from `xertica-ui/ui` |
183
+
184
+ ### Colors — context-dependent rules
185
+
186
+ | ❌ Never (any context) | Reason |
187
+ |---|---|
188
+ | `#3b82f6`, `rgb(59, 130, 246)`, `hsl(...)` | Raw values — non-themeable |
189
+ | `style={{ color: '#...' }}` for theming | Non-themeable inline style |
190
+
191
+ | ❌ Wrong for semantic/status contexts | ✅ Required instead |
192
+ |---|---|
193
+ | `bg-red-500` / `text-red-500` for errors | `bg-destructive` / `text-destructive` |
194
+ | `bg-green-500` for success states | `bg-success` |
195
+ | `bg-yellow-500` for warnings | `bg-warning` |
196
+
197
+ > For **layout, spacing, and general non-semantic UI** (custom components, decorative elements where no semantic token applies), standard Tailwind color utilities like `bg-blue-500` or `text-gray-700` are acceptable.
198
+
199
+ | ❌ Never | ✅ Always |
200
+ |---|---|
201
+ | `rounded-lg`, `rounded-xl` | `rounded-[var(--radius)]` |
202
+
203
+ ### Layout state — never hardcode
204
+
205
+ ```tsx
206
+ // ✅ Correct
207
+ const { sidebarExpanded, sidebarWidth } = useLayout();
208
+ <div style={{ paddingLeft: sidebarExpanded ? `${sidebarWidth}px` : '80px' }}>
209
+
210
+ // ✅ Correct for reusable components that may render outside XerticaProvider
211
+ const layout = useOptionalLayout();
212
+ const fallbackSidebarWidth = layout?.sidebarWidth ?? 80;
213
+
214
+ // ❌ Wrong
215
+ <div style={{ paddingLeft: '256px' }}>
216
+ ```
217
+
218
+ ### Destructive actions — always confirm
219
+
220
+ ```tsx
221
+ // ✅ Always wrap in AlertDialog
222
+ <AlertDialog>
223
+ <AlertDialogTrigger asChild>
224
+ <Button variant="destructive">Delete</Button>
225
+ </AlertDialogTrigger>
226
+ <AlertDialogContent>
227
+ <AlertDialogHeader>
228
+ <AlertDialogTitle>Are you sure?</AlertDialogTitle>
229
+ <AlertDialogDescription>This action cannot be undone.</AlertDialogDescription>
230
+ </AlertDialogHeader>
231
+ <AlertDialogFooter>
232
+ <AlertDialogCancel>Cancel</AlertDialogCancel>
233
+ <AlertDialogAction onClick={handleDelete}>Delete</AlertDialogAction>
234
+ </AlertDialogFooter>
235
+ </AlertDialogContent>
236
+ </AlertDialog>
237
+ ```
238
+
239
+ ### Page structure — always use PageHeader
240
+
241
+ Every page must use `<PageHeader>` for its title and primary actions. Never use raw `<h1>` or `<h2>`:
242
+
243
+ ```tsx
244
+ <PageHeader>
245
+ <PageHeaderHeading>Users</PageHeaderHeading>
246
+ <PageHeaderDescription>Manage your team members.</PageHeaderDescription>
247
+ <Button><Plus className="size-4 mr-2" />New User</Button>
248
+ </PageHeader>
249
+ ```
250
+
251
+ ### Toast notifications
252
+
253
+ ```tsx
254
+ import { toast } from 'sonner';
255
+
256
+ toast.success('User created successfully');
257
+ toast.error('Failed to save changes');
258
+ toast.warning('Session expires in 5 minutes');
259
+ ```
260
+
261
+ Never render `<Toaster>` manually — it is auto-injected by `<XerticaProvider>` in `App.tsx`.
262
+
263
+ ---
264
+
265
+ ## 6. Theme & Token Customization
266
+
267
+ To change the color scheme, edit `src/styles/xertica/tokens.css`. To switch themes via CLI:
268
+
269
+ ```bash
270
+ npx xertica-ui update
271
+ # → select "Theme only"
272
+ ```
273
+
274
+ The token file uses HSL values and supports both light and dark modes via the `.dark` class on `<html>`.
275
+
276
+ Never import or modify anything inside `node_modules/xertica-ui/styles/` — override via `tokens.css` only.
277
+
278
+ ---
279
+
280
+ ## 7. Authentication Pattern
281
+
282
+ The auth flow is managed in `src/app/components/AuthGuard.tsx`:
283
+
284
+ - `getStoredUser()` / `storeUser()` / `clearStoredUser()` — from `src/shared/lib/auth.ts`
285
+ - Auth pages (`/login`, `/forgot-password`, etc.) redirect to `/home` when user is already logged in
286
+ - Protected routes use `<ProtectedRoute user={user}>` wrapper that redirects to `/login` if user is null
287
+ - `handleLogin(email, password)` stores the user and navigates to the first protected route
288
+ - `handleLogout()` clears storage and navigates to `/login`
289
+
290
+ To add social login, extend `handleLogin` logic in `AuthGuard.tsx` and wire the provider button in `SocialLoginButtons.tsx`.
291
+
292
+ ---
293
+
294
+ ## 8. AI Agent Documentation Reference
295
+
296
+ | What you need | Where to read |
297
+ |---|---|
298
+ | Quick import + rules reference | `node_modules/xertica-ui/llms-compact.txt` |
299
+ | Full component API | `node_modules/xertica-ui/llms-full.txt` |
300
+ | "Should I use Dialog or Sheet?" | `node_modules/xertica-ui/docs/decision-tree.md` |
301
+ | Specific component props | `node_modules/xertica-ui/docs/components/[name].md` |
302
+ | All components + their imports | `node_modules/xertica-ui/components.json` |
303
+ | Mandatory AI rules | `node_modules/xertica-ui/docs/ai-usage.md` |
304
+ | This project's rules (you are here) | `CLAUDE.md` at project root |
305
+
306
+ ---
307
+
308
+ ## 9. Development Checklist
309
+
310
+ Before completing any feature:
311
+
312
+ - [ ] Feature content is in `src/features/<name>/ui/`
313
+ - [ ] Feature exports via `src/features/<name>/index.ts`
314
+ - [ ] Page is a thin wrapper in `src/pages/`
315
+ - [ ] Route registered in `src/shared/config/navigation.ts`
316
+ - [ ] Route registered in `src/app/components/AuthGuard.tsx`
317
+ - [ ] Home navigation card added (if primary module)
318
+ - [ ] Only `xertica-ui` components used — no raw HTML elements
319
+ - [ ] No raw hex/rgb values — semantic tokens for semantic/status contexts; Tailwind utilities acceptable for non-semantic layout
320
+ - [ ] No hardcoded radii — use `rounded-[var(--radius)]`
321
+ - [ ] Icons from `lucide-react` only
322
+ - [ ] Destructive actions wrapped in `<AlertDialog>`
323
+ - [ ] Layout state from `useLayout()` — no hardcoded widths
324
+ - [ ] Toast used for action feedback (`toast.success`, `toast.error`)
325
+ - [ ] Responsive on mobile, tablet, and desktop