xertica-ui 2.5.2 → 2.6.0

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 (577) hide show
  1. package/CHANGELOG.md +687 -656
  2. package/README.md +482 -482
  3. package/assets/xertica-logo.svg +37 -37
  4. package/assets/xertica-x-logo.svg +20 -20
  5. package/bin/cli.ts +1293 -1256
  6. package/bin/generate-tokens.ts +256 -262
  7. package/bin/language-config.test.ts +32 -0
  8. package/bin/language-config.ts +36 -11
  9. package/components/Introduction.mdx +121 -121
  10. package/components/assistant/code-block/CodeBlock.tsx +7 -6
  11. package/components/assistant/code-block/code-block.mdx +38 -38
  12. package/components/assistant/code-block/code-block.test.tsx +2 -1
  13. package/components/assistant/formatted-document/FormattedDocument.tsx +3 -0
  14. package/components/assistant/formatted-document/formatted-document.mdx +31 -31
  15. package/components/assistant/formatted-document/formatted-document.test.tsx +5 -4
  16. package/components/assistant/markdown-message/MarkdownMessage.tsx +1 -1
  17. package/components/assistant/markdown-message/markdown-message.mdx +44 -44
  18. package/components/assistant/modern-chat-input/modern-chat-input.mdx +71 -71
  19. package/components/assistant/modern-chat-input/modern-chat-input.test.tsx +3 -2
  20. package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +1 -1
  21. package/components/assistant/xertica-assistant/types.ts +3 -2
  22. package/components/assistant/xertica-assistant/use-assistant.ts +5 -4
  23. package/components/assistant/xertica-assistant/xertica-assistant.mdx +66 -66
  24. package/components/assistant/xertica-assistant/xertica-assistant.test.tsx +2 -1
  25. package/components/blocks/card-patterns/card-patterns.mdx +123 -123
  26. package/components/brand/branding/branding.mdx +27 -27
  27. package/components/brand/language-selector/language-selector.mdx +126 -126
  28. package/components/brand/theme-toggle/theme-toggle.mdx +47 -47
  29. package/components/brand/theme-toggle/theme-toggle.test.tsx +6 -2
  30. package/components/brand/xertica-logo/xertica-logo.mdx +56 -56
  31. package/components/brand/xertica-orbe/xertica-orbe.mdx +38 -38
  32. package/components/brand/xertica-provider/XerticaProvider.tsx +112 -112
  33. package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
  34. package/components/brand/xertica-provider/xertica-provider.test.tsx +25 -13
  35. package/components/brand/xertica-xlogo/xertica-xlogo.mdx +55 -55
  36. package/components/examples/DrawingMapExample.tsx +1 -4
  37. package/components/layout/header/header.mdx +117 -117
  38. package/components/layout/header/header.test.tsx +2 -1
  39. package/components/layout/sidebar/sidebar.mdx +99 -99
  40. package/components/layout/sidebar/sidebar.stories.tsx +1033 -1033
  41. package/components/layout/sidebar/sidebar.test.tsx +2 -1
  42. package/components/layout/sidebar/sidebar.tsx +1509 -1501
  43. package/components/media/audio-player/AudioPlayer.mdx +67 -67
  44. package/components/media/audio-player/AudioPlayer.test.tsx +2 -1
  45. package/components/media/floating-media-wrapper.mdx +74 -74
  46. package/components/media/video-player/VideoPlayer.mdx +102 -102
  47. package/components/media/video-player/VideoPlayer.test.tsx +3 -2
  48. package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +188 -188
  49. package/components/pages/forgot-password-page/forgot-password-page.mdx +60 -60
  50. package/components/pages/forgot-password-page/forgot-password-page.test.tsx +2 -1
  51. package/components/pages/home-content/HomeContent.tsx +2 -3
  52. package/components/pages/home-content/home-content.mdx +62 -62
  53. package/components/pages/home-page/HomePage.stories.tsx +8 -15
  54. package/components/pages/home-page/home-page.mdx +53 -53
  55. package/components/pages/home-page/home-page.test.tsx +2 -1
  56. package/components/pages/login-page/LoginPage.mdx +31 -31
  57. package/components/pages/login-page/LoginPage.tsx +218 -218
  58. package/components/pages/login-page/login-page.test.tsx +2 -1
  59. package/components/pages/reset-password-page/ResetPasswordPage.tsx +243 -243
  60. package/components/pages/reset-password-page/reset-password-page.mdx +63 -63
  61. package/components/pages/template-content/TemplateContent.tsx +2 -3
  62. package/components/pages/template-content/template-content.mdx +61 -61
  63. package/components/pages/template-page/TemplatePage.stories.tsx +32 -32
  64. package/components/pages/template-page/template-page.mdx +53 -53
  65. package/components/pages/template-page/template-page.test.tsx +2 -1
  66. package/components/pages/verify-email-page/VerifyEmailPage.tsx +206 -206
  67. package/components/pages/verify-email-page/verify-email-page.mdx +55 -55
  68. package/components/public-api-smoke.test.tsx +10 -6
  69. package/components/shared/assistant-utils.ts +3 -2
  70. package/components/shared/navigation.ts +2 -2
  71. package/components/ui/accordion/accordion.mdx +29 -29
  72. package/components/ui/alert/alert.mdx +29 -29
  73. package/components/ui/alert-dialog/alert-dialog.mdx +26 -26
  74. package/components/ui/aspect-ratio/aspect-ratio.mdx +25 -25
  75. package/components/ui/assistant-chart/AssistantChart.tsx +8 -2
  76. package/components/ui/assistant-chart/assistant-chart.mdx +25 -25
  77. package/components/ui/avatar/avatar.mdx +26 -26
  78. package/components/ui/badge/badge.mdx +28 -28
  79. package/components/ui/breadcrumb/breadcrumb.mdx +26 -26
  80. package/components/ui/button/button.mdx +29 -29
  81. package/components/ui/calendar/calendar.mdx +26 -26
  82. package/components/ui/card/card.mdx +26 -26
  83. package/components/ui/carousel/carousel.mdx +26 -26
  84. package/components/ui/chart/chart.mdx +26 -26
  85. package/components/ui/chart/chart.test.tsx +178 -178
  86. package/components/ui/chart/chart.tsx +2252 -2245
  87. package/components/ui/checkbox/checkbox.mdx +26 -26
  88. package/components/ui/collapsible/collapsible.mdx +25 -25
  89. package/components/ui/command/command.mdx +26 -26
  90. package/components/ui/context-menu/context-menu.mdx +26 -26
  91. package/components/ui/dialog/dialog.mdx +26 -26
  92. package/components/ui/drawer/drawer.mdx +26 -26
  93. package/components/ui/dropdown-menu/dropdown-menu.mdx +26 -26
  94. package/components/ui/empty/empty.mdx +26 -26
  95. package/components/ui/file-upload/file-upload.mdx +26 -26
  96. package/components/ui/form/form.mdx +20 -20
  97. package/components/ui/google-maps-loader/google-maps-loader.mdx +68 -68
  98. package/components/ui/hover-card/hover-card.mdx +26 -26
  99. package/components/ui/input/input.mdx +29 -29
  100. package/components/ui/input-otp/input-otp.mdx +26 -26
  101. package/components/ui/label/label.mdx +25 -25
  102. package/components/ui/map/map.mdx +26 -26
  103. package/components/ui/map/map.tsx +6 -1
  104. package/components/ui/menubar/menubar.mdx +26 -26
  105. package/components/ui/navigation-menu/navigation-menu.mdx +26 -26
  106. package/components/ui/notification-badge/notification-badge.mdx +26 -26
  107. package/components/ui/page-header/page-header.mdx +44 -44
  108. package/components/ui/pagination/pagination.mdx +26 -26
  109. package/components/ui/popover/popover.mdx +26 -26
  110. package/components/ui/progress/progress.mdx +25 -25
  111. package/components/ui/radio-group/radio-group.mdx +26 -26
  112. package/components/ui/rating/rating.mdx +26 -26
  113. package/components/ui/resizable/resizable.mdx +26 -26
  114. package/components/ui/resizable/resizable.tsx +13 -8
  115. package/components/ui/rich-text-editor/rich-text-editor.mdx +47 -47
  116. package/components/ui/route-map/route-map.mdx +26 -26
  117. package/components/ui/scroll-area/scroll-area.mdx +25 -25
  118. package/components/ui/search/search.mdx +27 -27
  119. package/components/ui/select/select.mdx +26 -26
  120. package/components/ui/separator/separator.mdx +25 -25
  121. package/components/ui/sheet/sheet.mdx +26 -26
  122. package/components/ui/simple-map/simple-map.mdx +25 -25
  123. package/components/ui/skeleton/skeleton.mdx +25 -25
  124. package/components/ui/slider/slider.mdx +26 -26
  125. package/components/ui/sonner/sonner.mdx +26 -26
  126. package/components/ui/stats-card/stats-card.mdx +26 -26
  127. package/components/ui/stats-card/stats-card.stories.tsx +117 -117
  128. package/components/ui/stats-card/stats-card.tsx +109 -109
  129. package/components/ui/stepper/stepper.mdx +26 -26
  130. package/components/ui/switch/switch.mdx +25 -25
  131. package/components/ui/table/table.mdx +27 -27
  132. package/components/ui/tabs/tabs.mdx +26 -26
  133. package/components/ui/textarea/textarea.mdx +25 -25
  134. package/components/ui/timeline/timeline.mdx +26 -26
  135. package/components/ui/toggle/toggle.mdx +26 -26
  136. package/components/ui/toggle-group/toggle-group.mdx +26 -26
  137. package/components/ui/tooltip/tooltip.mdx +26 -26
  138. package/components/ui/tree-view/tree-view.mdx +26 -26
  139. package/components.json +511 -511
  140. package/contexts/BrandColorsContext.tsx +282 -282
  141. package/contexts/i18n-singleton.test.tsx +57 -0
  142. package/contexts/theme-data.ts +391 -391
  143. package/dist/{AssistantChart-DMJJ_Amf.js → AssistantChart-BMNSA_Pk.js} +5 -5
  144. package/dist/{AssistantChart-D0A1FPYt.cjs → AssistantChart-BzM7plyc.cjs} +150 -114
  145. package/dist/{AssistantChart-BXU1ACnh.js → AssistantChart-C842evTi.js} +134 -240
  146. package/dist/{AssistantChart-BZTPJ5dP.cjs → AssistantChart-CVF2uh37.cjs} +5 -5
  147. package/dist/{AssistantChart-COGiOV-g.cjs → AssistantChart-JooMdVQU.cjs} +17 -7
  148. package/dist/{AssistantChart-CWX1OWNM.js → AssistantChart-KHS-tp-L.js} +17 -7
  149. package/dist/{BrandColorsContext-BwY-b6M4.cjs → BrandColorsContext-B4_81eas.cjs} +2 -2
  150. package/dist/{BrandColorsContext-BMRJ04Wf.js → BrandColorsContext-DbK5LnQ_.js} +2 -2
  151. package/dist/{CodeBlock-CjeFavqV.js → CodeBlock-DiKO8ocT.js} +11 -11
  152. package/dist/{CodeBlock-CV6dtsTM.cjs → CodeBlock-ZYThr7Kn.cjs} +12 -9
  153. package/dist/{XerticaXLogo-mqjoBiLI.js → LanguageSelector-CmTj3lWq.js} +85 -82
  154. package/dist/{XerticaXLogo-BX3ueACh.js → LanguageSelector-DxW6o7bt.js} +81 -81
  155. package/dist/{XerticaXLogo-uQgwns_E.cjs → LanguageSelector-Sw73qvWV.cjs} +84 -81
  156. package/dist/{ThemeContext-BgclCB35.js → ThemeContext-BGeh_Kdr.js} +290 -212
  157. package/dist/{ThemeContext-BblcjQup.cjs → ThemeContext-D50irx5T.cjs} +291 -205
  158. package/dist/{VerifyEmailPage-C_Zk6Gen.cjs → VerifyEmailPage-B6bOrybJ.cjs} +17 -17
  159. package/dist/{VerifyEmailPage-B31mCrMc.js → VerifyEmailPage-BRE5Fz59.js} +8 -8
  160. package/dist/{VerifyEmailPage-BJjAMUTW.js → VerifyEmailPage-BcCluouh.js} +151 -78
  161. package/dist/VerifyEmailPage-Bx1sr0uQ.cjs +3298 -0
  162. package/dist/{VerifyEmailPage-X14vhdyl.js → VerifyEmailPage-DUYyXCX9.js} +12 -12
  163. package/dist/VerifyEmailPage-DXXMHbzq.js +3289 -0
  164. package/dist/{VerifyEmailPage-u_Dn7t1U.cjs → VerifyEmailPage-DpYtFk35.cjs} +21 -21
  165. package/dist/{VerifyEmailPage-Cyl55sJb.js → VerifyEmailPage-NXKWW3Dk.js} +134 -64
  166. package/dist/{VerifyEmailPage-Bv8Ah_TK.cjs → VerifyEmailPage-QrCz4Wqr.cjs} +143 -73
  167. package/dist/{VerifyEmailPage-CkBYfsNy.cjs → VerifyEmailPage-ZmQra0Wi.cjs} +160 -87
  168. package/dist/{XerticaProvider-BErr83Bg.js → XerticaProvider-BF3q_myt.js} +5 -4
  169. package/dist/{XerticaProvider-CeS5G_n5.cjs → XerticaProvider-C_JSOz1U.cjs} +2 -2
  170. package/dist/{XerticaProvider-CwOkHxiT.cjs → XerticaProvider-D5zjrqZq.cjs} +5 -4
  171. package/dist/{XerticaProvider-ra2NciRq.js → XerticaProvider-KTGl4Cn1.js} +2 -2
  172. package/dist/{alert-dialog-DqlRW_An.js → alert-dialog-BrpwXKwS.js} +3 -3
  173. package/dist/{alert-dialog-DhwPioBa.cjs → alert-dialog-CZU1Zase.cjs} +3 -3
  174. package/dist/{alert-dialog-KpoabzJb.js → alert-dialog-ClRoLH7l.js} +40 -56
  175. package/dist/{alert-dialog-B4M3vQKS.cjs → alert-dialog-DBBqvU-V.cjs} +53 -38
  176. package/dist/assistant.cjs.js +2 -2
  177. package/dist/assistant.es.js +2 -2
  178. package/dist/brand.cjs.js +6 -6
  179. package/dist/brand.es.js +2 -2
  180. package/dist/cli.js +63 -21
  181. package/dist/components/assistant/code-block/CodeBlock.d.ts +2 -1
  182. package/dist/components/assistant/formatted-document/FormattedDocument.d.ts +2 -1
  183. package/dist/components/assistant/markdown-message/MarkdownMessage.d.ts +2 -1
  184. package/dist/components/assistant/modern-chat-input/ModernChatInput.d.ts +2 -1
  185. package/dist/components/assistant/xertica-assistant/parts/AssistantCollapsedView.d.ts +2 -1
  186. package/dist/components/assistant/xertica-assistant/parts/AssistantConversationList.d.ts +2 -1
  187. package/dist/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.d.ts +2 -1
  188. package/dist/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.d.ts +2 -1
  189. package/dist/components/assistant/xertica-assistant/parts/AssistantHeader.d.ts +2 -1
  190. package/dist/components/assistant/xertica-assistant/parts/AssistantMessageBubble.d.ts +2 -1
  191. package/dist/components/assistant/xertica-assistant/parts/AssistantTabBar.d.ts +2 -1
  192. package/dist/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.d.ts +2 -1
  193. package/dist/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.d.ts +2 -1
  194. package/dist/components/assistant/xertica-assistant/types.d.ts +3 -2
  195. package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +1 -1
  196. package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +2 -1
  197. package/dist/components/blocks/card-patterns/ActivityCard.d.ts +1 -1
  198. package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +1 -1
  199. package/dist/components/blocks/card-patterns/FeatureCard.d.ts +1 -1
  200. package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +1 -1
  201. package/dist/components/blocks/card-patterns/NotificationCard.d.ts +1 -1
  202. package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +1 -1
  203. package/dist/components/blocks/card-patterns/ProfileCard.d.ts +1 -1
  204. package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +1 -1
  205. package/dist/components/blocks/card-patterns/ProjectCard.d.ts +1 -1
  206. package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +1 -1
  207. package/dist/components/blocks/card-patterns/QuickActionCard.d.ts +1 -1
  208. package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +1 -1
  209. package/dist/components/brand/language-selector/LanguageSelector.d.ts +2 -1
  210. package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +2 -1
  211. package/dist/components/brand/xertica-logo/XerticaLogo.d.ts +2 -1
  212. package/dist/components/brand/xertica-orbe/XerticaOrbe.d.ts +2 -1
  213. package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +1 -1
  214. package/dist/components/brand/xertica-xlogo/XerticaXLogo.d.ts +2 -1
  215. package/dist/components/examples/DrawingMapExample.d.ts +2 -1
  216. package/dist/components/examples/FilterableMapExample.d.ts +1 -1
  217. package/dist/components/examples/MapShowcase.d.ts +2 -1
  218. package/dist/components/examples/SimpleFilterableMap.d.ts +2 -1
  219. package/dist/components/figma/ImageWithFallback.d.ts +1 -1
  220. package/dist/components/layout/header/header.d.ts +1 -1
  221. package/dist/components/layout/sidebar/sidebar.d.ts +25 -13
  222. package/dist/components/media/FloatingMediaWrapper.d.ts +1 -1
  223. package/dist/components/media/audio-player/AudioPlayer.d.ts +2 -1
  224. package/dist/components/media/video-player/VideoPlayer.d.ts +2 -1
  225. package/dist/components/pages/forgot-password-page/ForgotPasswordPage.d.ts +2 -1
  226. package/dist/components/pages/home-content/HomeContent.d.ts +2 -1
  227. package/dist/components/pages/home-page/HomePage.d.ts +2 -1
  228. package/dist/components/pages/login-page/LoginPage.d.ts +2 -1
  229. package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +2 -1
  230. package/dist/components/pages/template-content/TemplateContent.d.ts +2 -1
  231. package/dist/components/pages/template-page/TemplatePage.d.ts +2 -1
  232. package/dist/components/pages/verify-email-page/VerifyEmailPage.d.ts +2 -1
  233. package/dist/components/shared/CustomTooltipContent.d.ts +1 -1
  234. package/dist/components/shared/assistant-utils.d.ts +3 -2
  235. package/dist/components/shared/error-boundary.d.ts +4 -4
  236. package/dist/components/shared/error-fallbacks.d.ts +4 -3
  237. package/dist/components/shared/navigation.d.ts +6 -2
  238. package/dist/components/ui/accordion/accordion.d.ts +4 -4
  239. package/dist/components/ui/alert/alert.d.ts +3 -3
  240. package/dist/components/ui/alert-dialog/alert-dialog.d.ts +10 -10
  241. package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +1 -1
  242. package/dist/components/ui/assistant-chart/AssistantChart.d.ts +4 -3
  243. package/dist/components/ui/avatar/avatar.d.ts +3 -3
  244. package/dist/components/ui/badge/badge.d.ts +1 -1
  245. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +7 -7
  246. package/dist/components/ui/calendar/calendar.d.ts +2 -2
  247. package/dist/components/ui/card/card.d.ts +7 -7
  248. package/dist/components/ui/carousel/carousel.d.ts +5 -5
  249. package/dist/components/ui/chart/chart.d.ts +16 -16
  250. package/dist/components/ui/collapsible/collapsible.d.ts +3 -3
  251. package/dist/components/ui/command/command.d.ts +9 -9
  252. package/dist/components/ui/context-menu/context-menu.d.ts +15 -15
  253. package/dist/components/ui/dialog/dialog.d.ts +9 -9
  254. package/dist/components/ui/drawer/drawer.d.ts +10 -10
  255. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +15 -15
  256. package/dist/components/ui/form/form.d.ts +7 -7
  257. package/dist/components/ui/google-maps-loader/google-maps-loader.d.ts +3 -3
  258. package/dist/components/ui/hover-card/hover-card.d.ts +3 -3
  259. package/dist/components/ui/input-otp/input-otp.d.ts +4 -4
  260. package/dist/components/ui/label/label.d.ts +1 -1
  261. package/dist/components/ui/menubar/menubar.d.ts +16 -16
  262. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +8 -8
  263. package/dist/components/ui/page-header/page-header.d.ts +3 -3
  264. package/dist/components/ui/pagination/pagination.d.ts +7 -7
  265. package/dist/components/ui/popover/popover.d.ts +4 -4
  266. package/dist/components/ui/progress/progress.d.ts +1 -1
  267. package/dist/components/ui/resizable/resizable.d.ts +11 -7
  268. package/dist/components/ui/rich-text-editor/rich-text-editor.d.ts +1 -1
  269. package/dist/components/ui/scroll-area/scroll-area.d.ts +2 -2
  270. package/dist/components/ui/separator/separator.d.ts +1 -1
  271. package/dist/components/ui/sheet/sheet.d.ts +10 -10
  272. package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
  273. package/dist/components/ui/sonner/sonner.d.ts +2 -1
  274. package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +1 -1
  275. package/dist/components/ui/table/table.d.ts +8 -8
  276. package/dist/components/ui/tabs/tabs.d.ts +4 -4
  277. package/dist/components/ui/tooltip/tooltip.d.ts +4 -4
  278. package/dist/contexts/ApiKeyContext.d.ts +2 -2
  279. package/dist/contexts/AssistenteContext.d.ts +1 -1
  280. package/dist/contexts/AuthContext.d.ts +1 -1
  281. package/dist/contexts/LanguageContext.d.ts +2 -2
  282. package/dist/contexts/LayoutContext.d.ts +2 -2
  283. package/dist/contexts/ThemeContext.d.ts +1 -1
  284. package/dist/features/assistant/hooks/useAssistantConfig.d.ts +1 -1
  285. package/dist/features/home/hooks/useDashboardStats.d.ts +1 -1
  286. package/dist/features/home/hooks/useFeatureCards.d.ts +1 -1
  287. package/dist/features/home/hooks/useTeamMembers.d.ts +1 -1
  288. package/dist/{google-maps-loader-BCe58h9D.js → google-maps-loader-BOug999f.js} +0 -4
  289. package/dist/{google-maps-loader-casMyxlo.cjs → google-maps-loader-DfeBRI8Q.cjs} +0 -5
  290. package/dist/hooks.cjs.js +2 -2
  291. package/dist/hooks.es.js +2 -2
  292. package/dist/{index-9GWd0qxq.cjs → index-BQjx1Mdf.cjs} +1 -1
  293. package/dist/index-Bei5DzAL.js +6 -0
  294. package/dist/index.cjs.js +18 -18
  295. package/dist/index.es.js +12 -12
  296. package/dist/{input-cc-PTD4R.js → input-B0_vbA3g.js} +3 -61
  297. package/dist/{input-C_UiS2Py.cjs → input-ByYuOv8A.cjs} +1 -62
  298. package/dist/layout.cjs.js +1 -1
  299. package/dist/layout.es.js +1 -1
  300. package/dist/pages.cjs.js +1 -1
  301. package/dist/pages.es.js +1 -1
  302. package/dist/{rich-text-editor-DxO1Hz3a.cjs → rich-text-editor-BuqSu718.cjs} +70 -5
  303. package/dist/{rich-text-editor-DqLICivI.js → rich-text-editor-CV8FtA_l.js} +68 -6
  304. package/dist/{rich-text-editor-DloeW0wc.js → rich-text-editor-DV1SixzE.js} +61 -3
  305. package/dist/{rich-text-editor-B2CKz7nx.cjs → rich-text-editor-DnSDglzW.cjs} +63 -2
  306. package/dist/{sidebar-BS1p2V7t.cjs → sidebar-BGJ0j567.cjs} +367 -9
  307. package/dist/{sidebar-3XyzjVBw.js → sidebar-BI6mZlC8.js} +364 -6
  308. package/dist/{sidebar-DyYvgyBj.cjs → sidebar-BtmotOg-.cjs} +367 -9
  309. package/dist/{sidebar-Duermn32.js → sidebar-D3EgGVxF.js} +77 -63
  310. package/dist/{sidebar-CLmIjgNd.cjs → sidebar-DDTqMGnR.cjs} +80 -66
  311. package/dist/{sidebar-B4ZWaMrE.js → sidebar-I7EXyf5D.js} +364 -6
  312. package/dist/ui.cjs.js +7 -7
  313. package/dist/ui.es.js +5 -5
  314. package/dist/{xertica-assistant-QFUnv5I2.cjs → xertica-assistant-BrF9jScR.cjs} +4 -4
  315. package/dist/{xertica-assistant-BbgzsgsG.js → xertica-assistant-CJVnvMqU.js} +55 -45
  316. package/dist/{xertica-assistant-d2qs2Vd9.cjs → xertica-assistant-CKPtc1z5.cjs} +58 -40
  317. package/dist/{xertica-assistant-CyikE3N_.js → xertica-assistant-CsBsxTsI.js} +2 -2
  318. package/dist/{xertica-assistant-CIaUlbIt.cjs → xertica-assistant-DER0brPQ.cjs} +6 -5
  319. package/dist/{xertica-assistant-B1NaSFFj.js → xertica-assistant-DQCjpk5M.js} +4 -3
  320. package/dist/{xertica-assistant-B687qEPU.js → xertica-assistant-Dk-9AJzw.js} +16 -7
  321. package/dist/{xertica-assistant-sOHwTgIP.cjs → xertica-assistant-DxhIKvuY.cjs} +18 -9
  322. package/dist/xertica-ui.css +2 -2
  323. package/docs/components/audio-player.md +1 -1
  324. package/docs/components/sidebar.md +331 -331
  325. package/docs/components/stats-card.md +138 -138
  326. package/docs/components/toggle.md +12 -0
  327. package/docs/doc-audit.md +35 -229
  328. package/docs/i18n.md +31 -10
  329. package/docs/llms.md +6 -4
  330. package/llms-compact.txt +444 -444
  331. package/llms-full.txt +12144 -12144
  332. package/llms.txt +187 -187
  333. package/package.json +223 -219
  334. package/scripts/a11y-audit.mjs +162 -162
  335. package/scripts/fix-stories.cjs +19 -19
  336. package/styles/globals.css +0 -1
  337. package/styles/xertica/base.css +8 -0
  338. package/styles/xertica/tokens.css +240 -240
  339. package/templates/.env.example +2 -2
  340. package/templates/.prettierignore +4 -4
  341. package/templates/.prettierrc +10 -10
  342. package/templates/guidelines/Guidelines.md +865 -865
  343. package/templates/index.html +13 -13
  344. package/templates/package.json +69 -69
  345. package/templates/src/app/components/AuthGuard.tsx +11 -0
  346. package/templates/src/features/auth/ui/AuthPageShell.tsx +32 -32
  347. package/templates/src/features/home/ui/HomeContent.tsx +2 -3
  348. package/templates/src/features/settings/index.ts +2 -0
  349. package/templates/src/features/settings/ui/SettingsContent.tsx +134 -0
  350. package/templates/src/features/template/ui/TemplateContent.tsx +2 -3
  351. package/templates/src/i18n.ts +36 -13
  352. package/templates/src/locales/en/pages/settings.json +15 -0
  353. package/templates/src/locales/es/pages/settings.json +15 -0
  354. package/templates/src/locales/pt-BR/pages/settings.json +15 -0
  355. package/templates/src/pages/SettingsPage.tsx +28 -0
  356. package/templates/src/shared/config/navigation.ts +2 -2
  357. package/templates/src/styles/xertica/tokens.css +240 -240
  358. package/templates/vite.config.d.ts +2 -2
  359. package/templates/vite.config.js +20 -20
  360. package/utils/gemini.ts +2 -2
  361. package/dist/AssistantChart-9w31gdAb.cjs +0 -3363
  362. package/dist/AssistantChart-BAudAfne.cjs +0 -3591
  363. package/dist/AssistantChart-BAx9VQvb.cjs +0 -3374
  364. package/dist/AssistantChart-BP8upjMk.js +0 -3565
  365. package/dist/AssistantChart-CVko2A1W.js +0 -3348
  366. package/dist/AssistantChart-CVzmmhx4.js +0 -3337
  367. package/dist/AssistantChart-CeU2dIb6.js +0 -3469
  368. package/dist/AssistantChart-DO5UuX4J.cjs +0 -3495
  369. package/dist/AudioPlayer-1ypwE2Wh.cjs +0 -936
  370. package/dist/AudioPlayer-BJ2IuRQW.cjs +0 -1275
  371. package/dist/AudioPlayer-BWDW6TN9.cjs +0 -1279
  372. package/dist/AudioPlayer-CM962GEh.js +0 -1280
  373. package/dist/AudioPlayer-CbZId7cj.cjs +0 -998
  374. package/dist/AudioPlayer-DU8zt8-z.js +0 -999
  375. package/dist/AudioPlayer-DuKXrCfy.js +0 -937
  376. package/dist/AudioPlayer-Xxma6_-H.js +0 -1276
  377. package/dist/BrandColorsContext-DLVJgtmH.js +0 -666
  378. package/dist/BrandColorsContext-DZT7JjeD.js +0 -659
  379. package/dist/BrandColorsContext-GUyFmkX0.cjs +0 -665
  380. package/dist/BrandColorsContext-awnBCmC4.cjs +0 -666
  381. package/dist/CodeBlock-C2ZUXt8V.js +0 -219
  382. package/dist/CodeBlock-C5oYnLQp.cjs +0 -218
  383. package/dist/CodeBlock-DuxdtN-l.js +0 -219
  384. package/dist/CodeBlock-POVYONvC.cjs +0 -218
  385. package/dist/CustomTooltipContent-BT6brkVJ.cjs +0 -49
  386. package/dist/CustomTooltipContent-CfOfikhq.js +0 -33
  387. package/dist/CustomTooltipContent-DHjkY0ww.js +0 -40
  388. package/dist/CustomTooltipContent-c_K-DWRr.cjs +0 -56
  389. package/dist/FeatureCard-9GhnlgL3.js +0 -336
  390. package/dist/FeatureCard-Bcb3Zi54.js +0 -302
  391. package/dist/FeatureCard-Cfs6Ishq.js +0 -485
  392. package/dist/FeatureCard-CkPd2psQ.cjs +0 -301
  393. package/dist/FeatureCard-Dkp-xmzM.cjs +0 -335
  394. package/dist/FeatureCard-ie3L8Fpr.cjs +0 -484
  395. package/dist/FeatureCardSkeleton-CAgu8stE.js +0 -27
  396. package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +0 -26
  397. package/dist/LanguageContext-BwhwC3G2.js +0 -657
  398. package/dist/LanguageContext-DvUt5jBg.cjs +0 -656
  399. package/dist/LayoutContext-BDmcZfMH.cjs +0 -84
  400. package/dist/LayoutContext-C4kKN9RV.cjs +0 -93
  401. package/dist/LayoutContext-CGEe1oPq.js +0 -94
  402. package/dist/LayoutContext-CwT5KLiW.cjs +0 -104
  403. package/dist/LayoutContext-DVLCsoQn.js +0 -105
  404. package/dist/LayoutContext-dbQvdC4O.js +0 -85
  405. package/dist/ThemeContext-BbBNoFTG.js +0 -735
  406. package/dist/ThemeContext-Bo-W2WZH.js +0 -1856
  407. package/dist/ThemeContext-CP3a0jxy.cjs +0 -1855
  408. package/dist/ThemeContext-Cmr8Ex8H.cjs +0 -734
  409. package/dist/ThemeContext-CpqYShLq.cjs +0 -324
  410. package/dist/ThemeContext-D3LzacmG.js +0 -188
  411. package/dist/ThemeContext-DQUOeziy.cjs +0 -1855
  412. package/dist/ThemeContext-Du2nE1PL.js +0 -325
  413. package/dist/ThemeContext-GeEBTJ3q.cjs +0 -1621
  414. package/dist/ThemeContext-JyLK9B1o.js +0 -1622
  415. package/dist/ThemeContext-RTy1m2Uq.js +0 -82
  416. package/dist/ThemeContext-U4dEYc6C.cjs +0 -187
  417. package/dist/ThemeContext-bSzuOit2.cjs +0 -81
  418. package/dist/ThemeContext-ept8jhXI.js +0 -1856
  419. package/dist/VerifyEmailPage-BE-L9mB7.js +0 -2828
  420. package/dist/VerifyEmailPage-BIBOKV7Z.js +0 -3214
  421. package/dist/VerifyEmailPage-BRSP-Pwt.cjs +0 -3196
  422. package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
  423. package/dist/VerifyEmailPage-BiRm7Nh4.cjs +0 -3213
  424. package/dist/VerifyEmailPage-Bvfv8HVQ.js +0 -3214
  425. package/dist/VerifyEmailPage-CR7kb5df.cjs +0 -2827
  426. package/dist/VerifyEmailPage-C_ihbcth.js +0 -2828
  427. package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
  428. package/dist/VerifyEmailPage-CdYPSJoO.js +0 -2828
  429. package/dist/VerifyEmailPage-D-FRj5TU.cjs +0 -3213
  430. package/dist/VerifyEmailPage-DF2ilhum.cjs +0 -3210
  431. package/dist/VerifyEmailPage-DMBh4NM9.cjs +0 -2827
  432. package/dist/VerifyEmailPage-DTtFfC-J.js +0 -3197
  433. package/dist/VerifyEmailPage-Dt7zgA4w.cjs +0 -2827
  434. package/dist/VerifyEmailPage-EhudUdqF.js +0 -3211
  435. package/dist/VerifyEmailPage-RrUApqBN.js +0 -3214
  436. package/dist/VerifyEmailPage-VoMI7MYH.cjs +0 -3213
  437. package/dist/VerifyEmailPage-hdB8JQGv.cjs +0 -3213
  438. package/dist/VerifyEmailPage-vYHbYK3q.js +0 -3214
  439. package/dist/XerticaOrbe-BCUVSPPB.cjs +0 -1924
  440. package/dist/XerticaOrbe-BGIB1CTK.js +0 -1355
  441. package/dist/XerticaOrbe-By8eEvR-.js +0 -1925
  442. package/dist/XerticaOrbe-FWGjBj0U.cjs +0 -1354
  443. package/dist/XerticaProvider-AChwphCO.cjs +0 -48
  444. package/dist/XerticaProvider-AbWlr7Af.cjs +0 -48
  445. package/dist/XerticaProvider-B8CaV7xu.cjs +0 -39
  446. package/dist/XerticaProvider-BITjgC5p.js +0 -39
  447. package/dist/XerticaProvider-BSyFrmC0.js +0 -49
  448. package/dist/XerticaProvider-By8q3Roe.cjs +0 -38
  449. package/dist/XerticaProvider-CUYJZc32.js +0 -49
  450. package/dist/XerticaProvider-CW9hpCdF.cjs +0 -39
  451. package/dist/XerticaProvider-CWgby5mY.js +0 -49
  452. package/dist/XerticaProvider-CWs6EwNa.js +0 -49
  453. package/dist/XerticaProvider-CiNKjMx1.cjs +0 -48
  454. package/dist/XerticaProvider-CjQAQPcn.cjs +0 -48
  455. package/dist/XerticaProvider-D5lLumH-.js +0 -49
  456. package/dist/XerticaProvider-DQtvJU7m.js +0 -40
  457. package/dist/XerticaProvider-DUOJg9iX.js +0 -49
  458. package/dist/XerticaProvider-Dl_b72_l.cjs +0 -51
  459. package/dist/XerticaProvider-qQUDop71.cjs +0 -48
  460. package/dist/XerticaProvider-siSt9uG2.js +0 -40
  461. package/dist/XerticaXLogo-8TTzBjHw.cjs +0 -251
  462. package/dist/XerticaXLogo-B2svDGZh.cjs +0 -251
  463. package/dist/XerticaXLogo-BWaag64t.js +0 -252
  464. package/dist/XerticaXLogo-CFuIlYFH.js +0 -252
  465. package/dist/XerticaXLogo-CU-U-GP4.cjs +0 -251
  466. package/dist/XerticaXLogo-ChryA6xj.js +0 -252
  467. package/dist/XerticaXLogo-CowGv7BC.js +0 -252
  468. package/dist/XerticaXLogo-CziKMQil.cjs +0 -242
  469. package/dist/XerticaXLogo-D8jf0SNv.cjs +0 -214
  470. package/dist/XerticaXLogo-DHz5SugF.js +0 -252
  471. package/dist/XerticaXLogo-DTee_y8X.cjs +0 -251
  472. package/dist/XerticaXLogo-DfUvz-lD.js +0 -243
  473. package/dist/XerticaXLogo-DzXKZBtG.js +0 -231
  474. package/dist/XerticaXLogo-fAJMy3H4.js +0 -215
  475. package/dist/XerticaXLogo-kslQ8Tk_.cjs +0 -251
  476. package/dist/XerticaXLogo-xWbElCZj.cjs +0 -230
  477. package/dist/alert-dialog-iDe5VE5o.js +0 -842
  478. package/dist/alert-dialog-yckpaOpy.cjs +0 -865
  479. package/dist/avatar-Cq5_E8r9.cjs +0 -78
  480. package/dist/avatar-CuYu2MKt.cjs +0 -72
  481. package/dist/avatar-Cxyofu1H.js +0 -56
  482. package/dist/avatar-DSBfJMRJ.js +0 -62
  483. package/dist/breadcrumb-CVzzzqfo.js +0 -103
  484. package/dist/breadcrumb-DIJ0X3Ot.js +0 -96
  485. package/dist/breadcrumb-DjSxkjlQ.cjs +0 -95
  486. package/dist/breadcrumb-DnDlQFg2.cjs +0 -102
  487. package/dist/button-0CXwCRTm.cjs +0 -85
  488. package/dist/button-Bnv9SvYK.cjs +0 -79
  489. package/dist/button-C6uvh0rV.js +0 -63
  490. package/dist/button-qkz7Icqf.js +0 -69
  491. package/dist/card-B8-Gl5DL.js +0 -73
  492. package/dist/card-Bv_c57KU.cjs +0 -72
  493. package/dist/card-DJTsYhLL.cjs +0 -89
  494. package/dist/card-fi8zAN-I.js +0 -90
  495. package/dist/dropdown-menu-B_uEXNc4.cjs +0 -220
  496. package/dist/dropdown-menu-CFuCssWA.js +0 -204
  497. package/dist/dropdown-menu-Ze1YZFyc.cjs +0 -247
  498. package/dist/dropdown-menu-nc_Lvg-u.js +0 -231
  499. package/dist/google-maps-loader-BVoVhUwA.js +0 -316
  500. package/dist/google-maps-loader-BqsYL48U.cjs +0 -285
  501. package/dist/google-maps-loader-DjJaYhV6.cjs +0 -316
  502. package/dist/google-maps-loader-t2IlYBzw.js +0 -286
  503. package/dist/index-B7A523O_.js +0 -8
  504. package/dist/index-BabBx2pa.js +0 -6
  505. package/dist/index-CkTUgOwX.js +0 -8
  506. package/dist/index-D3RLKRAs.cjs +0 -7
  507. package/dist/index-DmHhnb7a.cjs +0 -7
  508. package/dist/index.umd.js +0 -13712
  509. package/dist/input-CNFHVKvo.cjs +0 -145
  510. package/dist/input-CPl84zAx.cjs +0 -151
  511. package/dist/input-D-6IsAca.js +0 -133
  512. package/dist/input-wPYg0d0P.js +0 -127
  513. package/dist/progress-BLwqortq.cjs +0 -105
  514. package/dist/progress-Cs9i4DPx.js +0 -81
  515. package/dist/progress-D9mtsf6j.js +0 -89
  516. package/dist/progress-DDeuWPZw.cjs +0 -97
  517. package/dist/rich-text-editor-1UW3Y2JK.js +0 -2891
  518. package/dist/rich-text-editor-BM-LPpTh.js +0 -2902
  519. package/dist/rich-text-editor-BmsjY03B.js +0 -2949
  520. package/dist/rich-text-editor-BrdC5evx.js +0 -2244
  521. package/dist/rich-text-editor-CyggTOLQ.cjs +0 -2908
  522. package/dist/rich-text-editor-DbV-S7Fi.cjs +0 -2261
  523. package/dist/rich-text-editor-DoCkKhzk.cjs +0 -2919
  524. package/dist/rich-text-editor-GS2kpTAK.cjs +0 -2966
  525. package/dist/routes.d.ts +0 -10
  526. package/dist/select-Cmb8zF7w.cjs +0 -156
  527. package/dist/select-CprSNX0z.js +0 -139
  528. package/dist/select-DT7Zjn42.cjs +0 -162
  529. package/dist/select-En8DkoaQ.js +0 -145
  530. package/dist/sidebar-B3EYhli0.cjs +0 -800
  531. package/dist/sidebar-B9NR0lCe.cjs +0 -800
  532. package/dist/sidebar-BcJ6LxvX.cjs +0 -733
  533. package/dist/sidebar-BvF5I2Ue.cjs +0 -800
  534. package/dist/sidebar-C5B_LHek.cjs +0 -795
  535. package/dist/sidebar-CA6_ek3f.js +0 -801
  536. package/dist/sidebar-CRMiBtAi.js +0 -801
  537. package/dist/sidebar-CVUGHOS_.cjs +0 -756
  538. package/dist/sidebar-CZ2mWaMM.cjs +0 -800
  539. package/dist/sidebar-CmvwjnVb.js +0 -757
  540. package/dist/sidebar-CplprZpM.js +0 -801
  541. package/dist/sidebar-Dz7bd3zP.js +0 -796
  542. package/dist/sidebar-KIS0C2JH.js +0 -801
  543. package/dist/sidebar-OTO_up7Z.js +0 -801
  544. package/dist/sidebar-WoKvFWCN.js +0 -717
  545. package/dist/sidebar-zowjejT2.cjs +0 -800
  546. package/dist/skeleton-4zoHiFJ_.cjs +0 -83
  547. package/dist/skeleton-C4bHqUBf.js +0 -84
  548. package/dist/slider-C0JKA9k3.js +0 -56
  549. package/dist/slider-CPmwzm_3.cjs +0 -73
  550. package/dist/slider-DcJharR9.cjs +0 -73
  551. package/dist/slider-Pay3fka2.js +0 -56
  552. package/dist/sonner-DeUIj0Zg.cjs +0 -63
  553. package/dist/sonner-g9RIfi35.js +0 -47
  554. package/dist/tooltip-CNtsL5cB.cjs +0 -71
  555. package/dist/tooltip-CTyZCD8h.js +0 -55
  556. package/dist/tooltip-CwgSdy3h.cjs +0 -67
  557. package/dist/tooltip-D-OrYnKO.js +0 -51
  558. package/dist/use-audio-player-BJFV24XW.js +0 -188
  559. package/dist/use-audio-player-Bkh23vQ3.js +0 -177
  560. package/dist/use-audio-player-Dn1NR9xN.cjs +0 -176
  561. package/dist/use-audio-player-DyVYlOnR.cjs +0 -187
  562. package/dist/use-mobile-BB4M_4Ru.cjs +0 -47
  563. package/dist/use-mobile-CLu9nqGL.js +0 -31
  564. package/dist/use-mobile-CNwiBNxu.js +0 -33
  565. package/dist/use-mobile-Dlf74ufz.cjs +0 -49
  566. package/dist/xertica-assistant-B1IaHXnB.cjs +0 -1894
  567. package/dist/xertica-assistant-BMqdyRVi.js +0 -2082
  568. package/dist/xertica-assistant-Bj3vBCq_.cjs +0 -2081
  569. package/dist/xertica-assistant-CfBCo21g.js +0 -2148
  570. package/dist/xertica-assistant-DIM_Do1k.js +0 -1866
  571. package/dist/xertica-assistant-DPsESB6t.js +0 -1878
  572. package/dist/xertica-assistant-DrsRwla1.cjs +0 -2147
  573. package/dist/xertica-assistant-Qp3ydksa.cjs +0 -1882
  574. package/dist/xertica-assistant-gnCJdcZY.js +0 -1866
  575. package/dist/xertica-assistant-yyrR0JKl.cjs +0 -1882
  576. package/styles/xertica/app-overrides/scrollbar.css +0 -33
  577. package/dist/{XerticaXLogo-qBPhwK3g.cjs → LanguageSelector-1cINLJ23.cjs} +80 -80
@@ -1,138 +1,138 @@
1
- # StatsCard
2
-
3
- ## Overview
4
-
5
- A pre-built KPI (Key Performance Indicator) card for dashboard overview pages. Renders a metric title, a large value, an optional trend indicator with automatic up/down/neutral icon, and an optional icon.
6
-
7
- Built on top of `<Card>`. Use it for dashboard stat widgets where a consistent metric display is needed.
8
-
9
- ---
10
-
11
- ## When to Use
12
-
13
- - Dashboard overview pages to show summary metrics (revenue, users, conversion)
14
- - KPI widgets that need to show value + trend direction
15
-
16
- ## When NOT to Use
17
-
18
- - For arbitrary content — use `<Card>` directly.
19
- - When you need to heavily customize layout — compose from `<Card>` primitives instead.
20
-
21
- ---
22
-
23
- ## Props
24
-
25
- | Prop | Type | Required | Description |
26
- | ------------- | ----------------------------------- | -------- | --------------------------------------------------------------------------------------------------------- |
27
- | `title` | `string` | **Yes** | Metric label (short) |
28
- | `value` | `string \| number` | **Yes** | The displayed metric value |
29
- | `description` | `string` | No | Additional supplementary text below the value |
30
- | `trend` | `{ value: number; label?: string }` | No | Trend object. `value` is a number (positive = up, negative = down). `label` overrides `description` text. |
31
- | `icon` | `ReactNode` | No | Icon from `lucide-react` |
32
- | `iconColor` | `string` | No | Tailwind class for the icon text/foreground color (defaults to `text-muted-foreground`) |
33
- | `iconBg` | `string` | No | Tailwind class for the icon background color (defaults to `bg-muted`) |
34
- | `className` | `string` | No | Additional CSS classes |
35
-
36
- ### trend
37
-
38
- The `trend` prop controls the automatic trend icon and color:
39
-
40
- - `trend.value > 0` → shows `TrendingUp` icon in green
41
- - `trend.value < 0` → shows `TrendingDown` icon in red (destructive)
42
- - `trend.value === 0` → shows `Minus` icon in muted
43
-
44
- The numeric value is displayed as an absolute percentage: `Math.abs(trend.value)%`.
45
-
46
- ---
47
-
48
- ## Examples
49
-
50
- ### Basic KPI Card
51
-
52
- ```tsx
53
- import { StatsCard } from 'xertica-ui/ui';
54
- import { DollarSign } from 'lucide-react';
55
-
56
- <StatsCard
57
- title="Total Revenue"
58
- value="$45,231.89"
59
- trend={{ value: 20.1, label: 'from last month' }}
60
- icon={<DollarSign className="size-5" />}
61
- />;
62
- ```
63
-
64
- ### Custom Icon Colors
65
-
66
- ```tsx
67
- import { StatsCard } from 'xertica-ui/ui';
68
- import { Users } from 'lucide-react';
69
-
70
- <StatsCard
71
- title="Active Users"
72
- value="2,350"
73
- trend={{ value: 8.2, label: 'new this week' }}
74
- icon={<Users className="size-5" />}
75
- iconBg="bg-primary/10"
76
- iconColor="text-primary"
77
- />;
78
- ```
79
-
80
- ### Negative Trend
81
-
82
- ```tsx
83
- <StatsCard
84
- title="Churn Rate"
85
- value="3.2%"
86
- trend={{ value: -0.8, label: 'vs last quarter' }}
87
- icon={<TrendingDown className="size-5" />}
88
- />
89
- ```
90
-
91
- ### Stats Grid (4 columns)
92
-
93
- ```tsx
94
- <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
95
- <StatsCard
96
- title="Revenue"
97
- value="$45,231"
98
- trend={{ value: 20.1, label: 'from last month' }}
99
- icon={<DollarSign className="size-5" />}
100
- />
101
- <StatsCard
102
- title="Active Users"
103
- value="2,350"
104
- trend={{ value: 8.2, label: 'new this week' }}
105
- icon={<Users className="size-5" />}
106
- />
107
- <StatsCard
108
- title="Conversion"
109
- value="3.6%"
110
- trend={{ value: -0.4, label: 'vs last month' }}
111
- icon={<Activity className="size-5" />}
112
- />
113
- <StatsCard
114
- title="Avg. Ticket"
115
- value="$89.40"
116
- description="All time average"
117
- icon={<ShoppingCart className="size-5" />}
118
- />
119
- </div>
120
- ```
121
-
122
- ---
123
-
124
- ## AI Rules
125
-
126
- - `trend.value` is a **numeric percentage** (e.g., `20.1` for +20.1%) — the component displays `Math.abs(value)%` automatically.
127
- - Do NOT pre-format the trend value as a string — pass the raw number.
128
- - `value` IS pre-formatted as a display string: `"$45,231"`, `"3.6%"`, `"2,350"`.
129
- - Icons render inside a rounded background. By default, background is `bg-muted` and color is `text-muted-foreground`, but they can be customized using `iconBg` and `iconColor` props. Use `size-5` for the icon.
130
- - Always use in a 4-column responsive grid for dashboard overviews.
131
- - `trend.label` takes precedence over `description` for below-value text.
132
-
133
- ---
134
-
135
- ## Related Components
136
-
137
- - [`Card`](./card.md) — The underlying primitive
138
- - [Dashboard Pattern](../patterns/dashboard.md) — Standard usage context
1
+ # StatsCard
2
+
3
+ ## Overview
4
+
5
+ A pre-built KPI (Key Performance Indicator) card for dashboard overview pages. Renders a metric title, a large value, an optional trend indicator with automatic up/down/neutral icon, and an optional icon.
6
+
7
+ Built on top of `<Card>`. Use it for dashboard stat widgets where a consistent metric display is needed.
8
+
9
+ ---
10
+
11
+ ## When to Use
12
+
13
+ - Dashboard overview pages to show summary metrics (revenue, users, conversion)
14
+ - KPI widgets that need to show value + trend direction
15
+
16
+ ## When NOT to Use
17
+
18
+ - For arbitrary content — use `<Card>` directly.
19
+ - When you need to heavily customize layout — compose from `<Card>` primitives instead.
20
+
21
+ ---
22
+
23
+ ## Props
24
+
25
+ | Prop | Type | Required | Description |
26
+ | ------------- | ----------------------------------- | -------- | --------------------------------------------------------------------------------------------------------- |
27
+ | `title` | `string` | **Yes** | Metric label (short) |
28
+ | `value` | `string \| number` | **Yes** | The displayed metric value |
29
+ | `description` | `string` | No | Additional supplementary text below the value |
30
+ | `trend` | `{ value: number; label?: string }` | No | Trend object. `value` is a number (positive = up, negative = down). `label` overrides `description` text. |
31
+ | `icon` | `ReactNode` | No | Icon from `lucide-react` |
32
+ | `iconColor` | `string` | No | Tailwind class for the icon text/foreground color (defaults to `text-muted-foreground`) |
33
+ | `iconBg` | `string` | No | Tailwind class for the icon background color (defaults to `bg-muted`) |
34
+ | `className` | `string` | No | Additional CSS classes |
35
+
36
+ ### trend
37
+
38
+ The `trend` prop controls the automatic trend icon and color:
39
+
40
+ - `trend.value > 0` → shows `TrendingUp` icon in green
41
+ - `trend.value < 0` → shows `TrendingDown` icon in red (destructive)
42
+ - `trend.value === 0` → shows `Minus` icon in muted
43
+
44
+ The numeric value is displayed as an absolute percentage: `Math.abs(trend.value)%`.
45
+
46
+ ---
47
+
48
+ ## Examples
49
+
50
+ ### Basic KPI Card
51
+
52
+ ```tsx
53
+ import { StatsCard } from 'xertica-ui/ui';
54
+ import { DollarSign } from 'lucide-react';
55
+
56
+ <StatsCard
57
+ title="Total Revenue"
58
+ value="$45,231.89"
59
+ trend={{ value: 20.1, label: 'from last month' }}
60
+ icon={<DollarSign className="size-5" />}
61
+ />;
62
+ ```
63
+
64
+ ### Custom Icon Colors
65
+
66
+ ```tsx
67
+ import { StatsCard } from 'xertica-ui/ui';
68
+ import { Users } from 'lucide-react';
69
+
70
+ <StatsCard
71
+ title="Active Users"
72
+ value="2,350"
73
+ trend={{ value: 8.2, label: 'new this week' }}
74
+ icon={<Users className="size-5" />}
75
+ iconBg="bg-primary/10"
76
+ iconColor="text-primary"
77
+ />;
78
+ ```
79
+
80
+ ### Negative Trend
81
+
82
+ ```tsx
83
+ <StatsCard
84
+ title="Churn Rate"
85
+ value="3.2%"
86
+ trend={{ value: -0.8, label: 'vs last quarter' }}
87
+ icon={<TrendingDown className="size-5" />}
88
+ />
89
+ ```
90
+
91
+ ### Stats Grid (4 columns)
92
+
93
+ ```tsx
94
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
95
+ <StatsCard
96
+ title="Revenue"
97
+ value="$45,231"
98
+ trend={{ value: 20.1, label: 'from last month' }}
99
+ icon={<DollarSign className="size-5" />}
100
+ />
101
+ <StatsCard
102
+ title="Active Users"
103
+ value="2,350"
104
+ trend={{ value: 8.2, label: 'new this week' }}
105
+ icon={<Users className="size-5" />}
106
+ />
107
+ <StatsCard
108
+ title="Conversion"
109
+ value="3.6%"
110
+ trend={{ value: -0.4, label: 'vs last month' }}
111
+ icon={<Activity className="size-5" />}
112
+ />
113
+ <StatsCard
114
+ title="Avg. Ticket"
115
+ value="$89.40"
116
+ description="All time average"
117
+ icon={<ShoppingCart className="size-5" />}
118
+ />
119
+ </div>
120
+ ```
121
+
122
+ ---
123
+
124
+ ## AI Rules
125
+
126
+ - `trend.value` is a **numeric percentage** (e.g., `20.1` for +20.1%) — the component displays `Math.abs(value)%` automatically.
127
+ - Do NOT pre-format the trend value as a string — pass the raw number.
128
+ - `value` IS pre-formatted as a display string: `"$45,231"`, `"3.6%"`, `"2,350"`.
129
+ - Icons render inside a rounded background. By default, background is `bg-muted` and color is `text-muted-foreground`, but they can be customized using `iconBg` and `iconColor` props. Use `size-5` for the icon.
130
+ - Always use in a 4-column responsive grid for dashboard overviews.
131
+ - `trend.label` takes precedence over `description` for below-value text.
132
+
133
+ ---
134
+
135
+ ## Related Components
136
+
137
+ - [`Card`](./card.md) — The underlying primitive
138
+ - [Dashboard Pattern](../patterns/dashboard.md) — Standard usage context
@@ -56,6 +56,18 @@ const [bold, setBold] = useState(false);
56
56
 
57
57
  ---
58
58
 
59
+ ## AI Rules
60
+
61
+ > [!IMPORTANT]
62
+ >
63
+ > - **Icon-only toggles require `aria-label`** — never render a `<Toggle>` with only an icon and no accessible name.
64
+ > - **Do not use `<Toggle>` for immediate actions** — use `<Button>`; `<Toggle>` is for persistent on/off state.
65
+ > - **Do not use `<Toggle>` for settings** — use `<Switch>` or `<Checkbox>` for clearer on/off semantics.
66
+ > - **For mutually exclusive sets, use `<ToggleGroup>`** instead of managing multiple `<Toggle>` states manually.
67
+ > - **Never use a raw `<button>`** to emulate a pressable state — always use `<Toggle>`.
68
+
69
+ ---
70
+
59
71
  ## Related Components
60
72
 
61
73
  - [`ToggleGroup`](./toggle-group.md) — Multiple related toggles with exclusion
package/docs/doc-audit.md CHANGED
@@ -1,244 +1,50 @@
1
1
  # Xertica UI — Auditoria de Documentação
2
2
 
3
- > **Status (2026-05-21):** ⚠️ **SUPERSEDED** — este relatório data de 2026-05-19 e a maioria dos itens TODO foi resolvida nas auditorias posteriores. Itens marcados ou listados como "Sem Doc" nas tabelas abaixo **podem já estar concluídos**.
4
- >
5
- > Antes de seguir qualquer recomendação aqui, verifique se a documentação correspondente já existe em `docs/components/`. A inventário real abaixo foi atualizado para refletir o estado em 2026-05-21:
6
- >
7
- > | Categoria | Total | Com Doc | Sem Doc |
8
- > | ----------------------------------------------- | --------------------- | ------------------------------------------ | ------- |
9
- > | Componentes UI (`components/ui/`) | 65 | 65 | 0 |
10
- > | Componentes Assistant (`components/assistant/`) | 5 | 5 | 0 |
11
- > | Componentes Brand (`components/brand/`) | 7 | 7 | 0 |
12
- > | Componentes Layout (`components/layout/`) | 2 | 2 | 0 |
13
- > | Componentes Media (`components/media/`) | 3 | 3 | 0 |
14
- > | Componentes Blocks (`components/blocks/`) | 6 cards + 6 skeletons | card-patterns.md (cobre cards + skeletons) | 0 |
15
- > | Páginas (`components/pages/`) | 8 | pages.md (cobertura agregada) | 0 |
16
- > | Hooks/Contextos | 9 hooks | hooks.md (cobertura agregada) | 0 |
17
- > | Utilitários (`components/figma/`) | 1 | image-with-fallback.md | 0 |
18
- >
19
- > **Lacunas ainda em aberto (verificar antes de fechar):**
20
- >
21
- > - Storybook `.mdx` para os 6 card skeletons (existe `.md`, mas não `.mdx`)
22
- > - `lib/query-client.ts` — singleton não documentado externamente (intencionalmente interno)
23
- >
24
- > **Última auditoria completa:** ver mensagem do agente em 2026-05-21 que cobriu i18n flexibilidade, skeletons, queryKey language-aware, e correções em `hooks.md`, `branding.md`, `card-patterns.md`, `language-selector.md`, `architecture.md`, `getting-started.md`, `state-management.md`, `components.json`.
25
-
26
- ---
27
-
28
- ## Resumo Executivo (histórico, possivelmente desatualizado)
29
-
30
- | Categoria | Total no Código | Com Doc | Sem Doc |
31
- | ----------------------------------------------- | --------------- | --------------------- | ------- |
32
- | Componentes UI (`components/ui/`) | 65 | 65 | 0 |
33
- | Componentes Assistant (`components/assistant/`) | 5 | 2 | **3** |
34
- | Componentes Brand (`components/brand/`) | 7 | 6 | **1** |
35
- | Componentes Layout (`components/layout/`) | 2 | 2 | 0 |
36
- | Componentes Media (`components/media/`) | 3 | 3 | 0 |
37
- | Componentes Blocks (`components/blocks/`) | 6 cards | 1 doc (card-patterns) | 0 |
38
- | Páginas (`components/pages/`) | 8 | 0 | **8** |
39
- | Hooks/Contextos (`components/hooks/`) | 6 hooks | 1 (use-mobile) | **5** |
40
- | Utilitários (`components/figma/`) | 1 | 0 | **1** |
41
-
42
- ---
43
-
44
- ## 1. Componentes SEM Documentação
45
-
46
- ### 1.1 Componentes Assistant — Sem doc própria
47
-
48
- O [`docs/llms.md`](./llms.md) menciona estes três como _"in Storybook"_, mas não há arquivo `.md` em `docs/components/`:
49
-
50
- | Componente | Arquivo | Importação | Status |
51
- | ------------------- | ------------------------------------------ | ---------------------- | ---------- |
52
- | `CodeBlock` | `components/assistant/code-block/` | `xertica-ui/assistant` | ❌ Sem doc |
53
- | `ModernChatInput` | `components/assistant/modern-chat-input/` | `xertica-ui/assistant` | ❌ Sem doc |
54
- | `FormattedDocument` | `components/assistant/formatted-document/` | `xertica-ui/assistant` | ❌ Sem doc |
55
-
56
- **Impacto:** Agentes de IA não conseguem usar esses componentes corretamente sem prop tables e exemplos.
57
-
58
- ---
59
-
60
- ### 1.2 Componente Brand — Sem doc
61
-
62
- | Componente | Arquivo | Status |
63
- | ---------- | ---------------------------- | ------------------------------------------- |
64
- | `Branding` | `components/brand/branding/` | ❌ Sem doc (apenas `.mdx` e `.stories.tsx`) |
65
-
66
- ---
67
-
68
- ### 1.3 Hook `useMapLayers` — Sem doc
69
-
70
- O hook [`useMapLayers`](../components/ui/map-layers/map-layers.tsx) é exportado publicamente via `xertica-ui/ui` mas não tem documentação em `docs/components/`. Está relacionado ao sistema de mapas mas não aparece no catálogo do [`docs/llms.md`](./llms.md).
71
-
72
- ---
73
-
74
- ### 1.4 Utilitário `ImageWithFallback` — Sem doc
75
-
76
- | Componente | Arquivo | Status |
77
- | ------------------- | ---------------------------------------- | ---------- |
78
- | `ImageWithFallback` | `components/figma/ImageWithFallback.tsx` | ❌ Sem doc |
79
-
80
- Exportado publicamente via `xertica-ui` mas sem documentação.
81
-
82
- ---
83
-
84
- ### 1.5 Páginas — Completamente sem documentação
85
-
86
- Nenhuma das 8 páginas-template tem documentação em `docs/`:
87
-
88
- | Página | Arquivo |
89
- | -------------------- | ---------------------------------------- |
90
- | `LoginPage` | `components/pages/login-page/` |
91
- | `ForgotPasswordPage` | `components/pages/forgot-password-page/` |
92
- | `ResetPasswordPage` | `components/pages/reset-password-page/` |
93
- | `VerifyEmailPage` | `components/pages/verify-email-page/` |
94
- | `HomePage` | `components/pages/home-page/` |
95
- | `HomeContent` | `components/pages/home-content/` |
96
- | `TemplatePage` | `components/pages/template-page/` |
97
- | `TemplateContent` | `components/pages/template-content/` |
98
-
99
- **Impacto:** Desenvolvedores e agentes de IA não sabem que essas páginas existem, quais props aceitam, ou como customizá-las. O [`docs/llms.md`](./llms.md) menciona "8 Page Templates" nas estatísticas mas não lista nenhuma delas no catálogo.
100
-
101
- ---
102
-
103
- ### 1.6 Hooks/Contextos — Sem documentação
104
-
105
- O subpath `xertica-ui/hooks` exporta 6 hooks mas apenas `useMobile` tem doc:
3
+ > **Status (2026-06-25):** **ATUAL** — esta auditoria substitui integralmente o relatório histórico de 2026-05-19. O conteúdo abaixo reflete o estado verificado da documentação contra o código-fonte.
106
4
 
107
- | Hook | Contexto | Status |
108
- | --------------------------- | -------------------- | ------------------------------------------------------------------------------- |
109
- | `useLayout` | `LayoutContext` | ✅ Documentado em [`docs/layout.md`](./layout.md) |
110
- | `useMobile` / `useIsMobile` | `use-mobile` | ✅ Documentado em [`docs/components/use-mobile.md`](./components/use-mobile.md) |
111
- | `useTheme` | `ThemeContext` | ❌ Sem doc |
112
- | `useLanguage` | `LanguageContext` | ❌ Sem doc |
113
- | `useBrandColors` | `BrandColorsContext` | ❌ Sem doc |
114
- | `useAssistente` | `AssistenteContext` | ❌ Sem doc |
115
- | `useApiKey` | `ApiKeyContext` | ❌ Sem doc |
5
+ ## Resumo Executivo
116
6
 
117
- **Impacto:** Agentes de IA não sabem como acessar o tema atual, idioma, cores da marca ou estado do assistente programaticamente.
7
+ A documentação está **completa e em bom estado**. Todos os componentes públicos, hooks, contextos e páginas-template possuem cobertura em `docs/`. Nenhum arquivo de documentação está truncado ou contém seções vazias.
118
8
 
119
- ---
9
+ | Categoria | Total no Código | Com Doc | Sem Doc |
10
+ | -------------------------------- | --------------- | ------- | ------- |
11
+ | Componentes UI (`components/ui/`) | 60 | 60 | 0 |
12
+ | Componentes Assistant (`components/assistant/`) | 5 | 5 | 0 |
13
+ | Componentes Brand (`components/brand/`) | 6\* | 6 | 0 |
14
+ | Componentes Layout (`components/layout/`)| 2 | 2 | 0 |
15
+ | Componentes Media (`components/media/`) | 3 | 3 | 0 |
16
+ | Componentes Blocks (`components/blocks/`)| 12 (6 cards + 6 skeletons) | `card-patterns.md` (cobertura agregada) | 0 |
17
+ | Páginas (`components/pages/`) | 8 | `pages.md` (cobertura agregada) | 0 |
18
+ | Hooks/Contextos | 10 | `hooks.md` + `use-mobile.md` + `layout.md` | 0 |
19
+ | Utilitários (`components/figma/`) | 1 | `image-with-fallback.md` | 0 |
120
20
 
121
- ## 2. Problemas de Qualidade nos Docs Existentes
21
+ \* `components/brand/branding/` existe apenas como showcase de Storybook (`.stories.tsx` + `.mdx`), não é um export público.
122
22
 
123
- ### 2.1 `docs/architecture.md` — Título incorreto
124
-
125
- O arquivo [`docs/architecture.md`](./architecture.md) tem como título `# Xertica UI Documentation Audit Report` (linha 1), mas deveria ser `# Xertica UI Architecture`. Isso confunde agentes de IA que buscam documentação de arquitetura.
126
-
127
- ---
128
-
129
- ### 2.2 `docs/components/assistant-chart.md` — Doc muito rasa
130
-
131
- O doc do [`AssistantChart`](./components/assistant-chart.md) tem apenas 47 linhas e contém uma regra problemática:
132
-
133
- > _"Data Format: Ensure your data objects contain keys that match the `dataKey` set in the internal implementation (currently `month`, `desktop`, and `mobile`)."_
134
-
135
- Isso sugere que o componente só aceita dados com essas chaves específicas, o que é enganoso. Faltam:
136
-
137
- - Explicação de como usar `dataKey` customizado
138
- - Exemplos com dados reais de negócio
139
- - Seção "When to Use / When NOT to Use"
140
-
141
- ---
142
-
143
- ### 2.3 `docs/llms.md` — Estatísticas desatualizadas e catálogo incompleto
144
-
145
- - **Linha 6:** `Total Components: 97` — o número real é maior (inclui páginas, hooks adicionais, `useMapLayers`, etc.)
146
- - **Seção AI Features:** `CodeBlock`, `ModernChatInput`, `FormattedDocument` listados como _"in Storybook"_ sem link de doc — isso instrui agentes a não usá-los quando na verdade são componentes públicos
147
- - **Seção Pages:** não existe no catálogo — as 8 páginas-template são invisíveis para agentes de IA
148
- - **Seção Hooks:** `useTheme`, `useLanguage`, `useBrandColors`, `useAssistente`, `useApiKey` não estão listados
149
-
150
- ---
151
-
152
- ### 2.4 `docs/components/floating-media-wrapper.md` — Doc incompleta
153
-
154
- O arquivo tem apenas 64 linhas e está truncado — a seção "Related Components" (linha 60) não tem conteúdo.
155
-
156
- ---
157
-
158
- ### 2.5 `docs/components/xertica-provider.md` — Seção "AI Rules" incompleta
159
-
160
- O arquivo tem 65 linhas e a seção `## AI Rules` (linha 60) está vazia/truncada.
161
-
162
- ---
163
-
164
- ## 3. Padrões (Patterns) Faltando
165
-
166
- Os 5 padrões existentes cobrem casos básicos, mas faltam padrões para fluxos muito comuns:
167
-
168
- | Padrão Faltando | Descrição |
169
- | ---------------------------- | -------------------------------------------------------------------------------- |
170
- | **Wizard / Multi-step Form** | Formulário com `Stepper` + validação por etapa + `useStepper` |
171
- | **Detail Page** | Página de detalhe de registro com `PageHeader` + back button + seções com `Card` |
172
- | **Settings Page** | Página de configurações com `Tabs` + seções de formulário + `Switch` |
173
- | **Empty + Loading States** | Padrão completo de `Skeleton` → `Empty` → dados com `Table` |
174
- | **File Upload Form** | Formulário com `FileUpload` integrado ao `react-hook-form` |
175
-
176
- ---
177
-
178
- ## 4. Docs Gerais — Pontos de Melhoria
179
-
180
- ### 4.1 `docs/getting-started.md` — Falta seção de troubleshooting
181
-
182
- Não há seção de problemas comuns (ex: componentes sem estilo = CSS não importado, erros de TypeScript com subpath imports, etc.).
183
-
184
- ### 4.2 `docs/installation.md` — Falta menção ao `moduleResolution`
185
-
186
- O arquivo [`docs/architecture.md`](./architecture.md) menciona que TypeScript precisa de `"moduleResolution": "bundler"` para subpath exports, mas [`docs/installation.md`](./installation.md) não menciona isso — é um erro de configuração muito comum.
187
-
188
- ### 4.3 `docs/ai-usage.md` — Falta regra sobre páginas-template
189
-
190
- Não há instrução para agentes de IA sobre quando usar as páginas-template (`LoginPage`, `TemplatePage`, etc.) vs. compor do zero.
191
-
192
- ---
193
-
194
- ## 5. Priorização das Lacunas
195
-
196
- ### 🔴 Alta Prioridade (impacto direto em agentes de IA e desenvolvedores)
23
+ > Notas de contagem:
24
+ >
25
+ > - `components/ui/` contém 64 diretórios, dos quais 60 são componentes documentados. Os 4 restantes são módulos internos de configuração/re-export: `map-config`, `map-layers` (hook `useMapLayers`, documentado em `map-layers.md`), `map.exports`, e `google-maps-loader` (documentado em `google-maps-loader.md`).
26
+ > - `AssistantChart` reside em `components/ui/assistant-chart/` e é contado como componente UI; aparece de forma cruzada na seção "AI Features" do catálogo de `llms.md`.
197
27
 
198
- 1. **Criar `docs/components/code-block.md`** componente usado internamente e externamente
199
- 2. **Criar `docs/components/modern-chat-input.md`** — componente de input do assistente
200
- 3. **Criar `docs/components/formatted-document.md`** — componente de documento do assistente
201
- 4. **Criar `docs/components/pages.md`** (ou docs individuais) — 8 páginas-template completamente invisíveis
202
- 5. **Criar `docs/components/hooks.md`** — documentar `useTheme`, `useLanguage`, `useBrandColors`, `useAssistente`, `useApiKey`
203
- 6. **Atualizar `docs/llms.md`** — corrigir estatísticas, adicionar páginas e hooks ao catálogo, adicionar links para docs dos componentes assistant
28
+ ## Verificações de Qualidade (2026-06-25)
204
29
 
205
- ### 🟡 Média Prioridade (melhoria de qualidade)
30
+ | Item | Resultado |
31
+ | ---------------------------------------------------------------- | --------- |
32
+ | `docs/architecture.md` — título H1 correto (`# Xertica UI — Architecture`) | ✅ OK |
33
+ | `docs/installation.md` — menciona `moduleResolution: "bundler"` | ✅ OK |
34
+ | `docs/getting-started.md` — possui seção de Troubleshooting | ✅ OK |
35
+ | `docs/llms.md` — estatísticas reconciliadas com subtotais | ✅ Corrigido |
36
+ | Seções truncadas / vazias em `docs/components/` | ✅ Nenhuma encontrada |
37
+ | Marcadores TODO / WIP / placeholder reais | ✅ Nenhum encontrado |
206
38
 
207
- 7. **Corrigir título de `docs/architecture.md`**
208
- 8. **Expandir `docs/components/assistant-chart.md`** — remover restrição enganosa de dataKey
209
- 9. **Completar `docs/components/floating-media-wrapper.md`** — seção "Related Components"
210
- 10. **Completar `docs/components/xertica-provider.md`** — seção "AI Rules"
211
- 11. **Criar `docs/components/map-layers.md`** — documentar `useMapLayers`
212
- 12. **Adicionar `"moduleResolution": "bundler"` em `docs/installation.md`**
39
+ ## Padrões (`docs/patterns/`)
213
40
 
214
- ### 🟢 Baixa Prioridade (melhorias incrementais)
41
+ Cobertura atual: `analytics`, `crud`, `dashboard`, `detail-page`, `form`, `login`, `settings`, `wizard` (8 padrões). Os fluxos comuns identificados em auditorias anteriores (wizard/multi-step, detail page, settings page) já estão documentados.
215
42
 
216
- 13. **Criar padrão `docs/patterns/wizard.md`** — multi-step form com Stepper
217
- 14. **Criar padrão `docs/patterns/detail-page.md`** — página de detalhe
218
- 15. **Criar padrão `docs/patterns/settings.md`** — página de configurações
219
- 16. **Adicionar seção de troubleshooting em `docs/getting-started.md`**
220
- 17. **Criar `docs/components/image-with-fallback.md`** — utilitário de imagem
221
- 18. **Criar `docs/components/branding.md`** — componente de branding
43
+ ## Pontos de Atenção Menores
222
44
 
223
- ---
45
+ - **Convenção de seção "AI Rules":** padronizada em todos os docs de componentes. Verificar novos docs para garantir uso de "AI Rules" (e não variações como "AI Best Practices").
46
+ - **`lib/query-client.ts`:** singleton intencionalmente interno; não exposto na API pública e não documentado externamente por design.
224
47
 
225
- ## 6. Checklist de Ações
48
+ ## Histórico
226
49
 
227
- - [ ] `docs/components/code-block.md` criar
228
- - [ ] `docs/components/modern-chat-input.md` — criar
229
- - [ ] `docs/components/formatted-document.md` — criar
230
- - [ ] `docs/components/pages.md` — criar (ou 8 docs individuais)
231
- - [ ] `docs/components/hooks.md` — criar (useTheme, useLanguage, useBrandColors, useAssistente, useApiKey)
232
- - [ ] `docs/llms.md` — atualizar estatísticas + adicionar páginas + hooks + links dos assistant components
233
- - [ ] `docs/architecture.md` — corrigir título (linha 1)
234
- - [ ] `docs/components/assistant-chart.md` — expandir e corrigir regra de dataKey
235
- - [ ] `docs/components/floating-media-wrapper.md` — completar seção "Related Components"
236
- - [ ] `docs/components/xertica-provider.md` — completar seção "AI Rules"
237
- - [ ] `docs/components/map-layers.md` — criar
238
- - [ ] `docs/installation.md` — adicionar requisito de `moduleResolution`
239
- - [ ] `docs/patterns/wizard.md` — criar
240
- - [ ] `docs/patterns/detail-page.md` — criar
241
- - [ ] `docs/patterns/settings.md` — criar
242
- - [ ] `docs/getting-started.md` — adicionar seção de troubleshooting
243
- - [ ] `docs/components/image-with-fallback.md` — criar
244
- - [ ] `docs/components/branding.md` — criar
50
+ O relatório original (2026-05-19) listava lacunas em componentes Assistant, páginas-template, hooks e utilitários. Todas foram resolvidas em auditorias subsequentes (2026-05-21 em diante). Aquele conteúdo foi removido deste arquivo por estar desatualizado e contradizer o estado real verificado.
package/docs/i18n.md CHANGED
@@ -99,20 +99,40 @@ const es = bundleLang(
99
99
  const savedLanguage =
100
100
  typeof window !== 'undefined' ? (localStorage.getItem('xertica_language') ?? 'pt-BR') : 'pt-BR';
101
101
 
102
- i18n.use(initReactI18next).init({
103
- resources: {
104
- 'pt-BR': { translation: ptBR },
105
- en: { translation: en },
106
- es: { translation: es },
107
- },
108
- lng: savedLanguage,
109
- fallbackLng: 'pt-BR',
110
- interpolation: { escapeValue: false }, // React escapes already
111
- });
102
+ // Guard against the i18next singleton being initialized twice: node_modules/i18next
103
+ // is a single instance shared (hoisted) between this app and xertica-ui itself, and
104
+ // `i18n.init()` fully replaces the resource store rather than merging. Whichever
105
+ // side calls `.init()` last would otherwise silently wipe the other's resources.
106
+ const defaultResourcesByLang: Record<string, Record<string, unknown>> = {
107
+ 'pt-BR': ptBR,
108
+ en,
109
+ es,
110
+ };
111
+
112
+ if (!i18n.isInitialized) {
113
+ i18n.use(initReactI18next).init({
114
+ resources: {
115
+ 'pt-BR': { translation: ptBR },
116
+ en: { translation: en },
117
+ es: { translation: es },
118
+ },
119
+ lng: savedLanguage,
120
+ fallbackLng: 'pt-BR',
121
+ interpolation: { escapeValue: false }, // React escapes already
122
+ });
123
+ } else {
124
+ // Already initialized by the other side — merge in without overwriting
125
+ // keys that have already been registered.
126
+ for (const [lang, resources] of Object.entries(defaultResourcesByLang)) {
127
+ i18n.addResourceBundle(lang, 'translation', resources, true, false);
128
+ }
129
+ }
112
130
 
113
131
  export default i18n;
114
132
  ```
115
133
 
134
+ > This guard is generated automatically by `npx xertica-ui@latest init` / `update` — you don't need to hand-write it unless you're authoring `src/i18n.ts` from scratch.
135
+
116
136
  ### 4. Initialize before rendering
117
137
 
118
138
  ```ts
@@ -478,3 +498,4 @@ const {
478
498
  - **The set of available languages is runtime-configurable** — pass `availableLanguages` to `<XerticaProvider>` to add, remove, or restrict to a single locale. Never modify `DEFAULT_LANGUAGES` directly
479
499
  - **The `LanguageSelector` auto-hides when `isMonolingual` is true** — do not conditionally render it yourself; pass it `showWhenMonolingual` if you want it visible
480
500
  - **`Language` is typed as `string`** (not a strict union) to support runtime-added locales. Use `LanguageDefinition['code']` from `useLanguage().availableLanguages` for autocomplete
501
+ - **i18next is a shared singleton** between this app and xertica-ui — `node_modules/i18next` is hoisted to a single instance, and `i18n.init()` fully replaces the resource store rather than merging. `src/i18n.ts` (and the library's own bootstrap) guard `.init()` with `i18n.isInitialized` and fall back to `addResourceBundle(..., true, false)` on the second call, so neither side wipes the other's resources and an app-customized key always wins over the design system's default