xertica-ui 2.5.3 → 2.7.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 (635) hide show
  1. package/CHANGELOG.md +705 -664
  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 +384 -359
  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 +10 -10
  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/{templates/src/features/auth/ui → components/blocks/auth}/AuthPageShell.tsx +37 -32
  26. package/components/blocks/auth/PasswordStrengthMeter.tsx +41 -0
  27. package/components/blocks/auth/SocialLoginButtons.tsx +95 -0
  28. package/components/blocks/auth/index.ts +11 -0
  29. package/components/blocks/auth/usePasswordStrength.ts +13 -0
  30. package/components/blocks/card-patterns/card-patterns.mdx +123 -123
  31. package/components/blocks/index.ts +1 -0
  32. package/components/brand/branding/branding.mdx +27 -27
  33. package/components/brand/language-selector/language-selector.mdx +126 -126
  34. package/components/brand/theme-toggle/theme-toggle.mdx +47 -47
  35. package/components/brand/theme-toggle/theme-toggle.test.tsx +6 -2
  36. package/components/brand/xertica-logo/xertica-logo.mdx +56 -56
  37. package/components/brand/xertica-orbe/xertica-orbe.mdx +38 -38
  38. package/components/brand/xertica-provider/XerticaProvider.tsx +112 -112
  39. package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
  40. package/components/brand/xertica-provider/xertica-provider.test.tsx +25 -13
  41. package/components/brand/xertica-xlogo/xertica-xlogo.mdx +55 -55
  42. package/components/examples/DrawingMapExample.tsx +1 -4
  43. package/components/layout/header/header.mdx +117 -117
  44. package/components/layout/header/header.test.tsx +2 -1
  45. package/components/layout/sidebar/sidebar.mdx +99 -99
  46. package/components/layout/sidebar/sidebar.stories.tsx +1033 -1033
  47. package/components/layout/sidebar/sidebar.test.tsx +2 -1
  48. package/components/layout/sidebar/sidebar.tsx +1509 -1506
  49. package/components/media/audio-player/AudioPlayer.mdx +67 -67
  50. package/components/media/audio-player/AudioPlayer.test.tsx +2 -1
  51. package/components/media/floating-media-wrapper.mdx +74 -74
  52. package/components/media/video-player/VideoPlayer.mdx +102 -102
  53. package/components/media/video-player/VideoPlayer.test.tsx +3 -2
  54. package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +94 -188
  55. package/components/pages/forgot-password-page/forgot-password-page.mdx +60 -60
  56. package/components/pages/forgot-password-page/forgot-password-page.test.tsx +2 -1
  57. package/components/pages/home-content/HomeContent.tsx +119 -119
  58. package/components/pages/home-content/home-content.mdx +62 -62
  59. package/components/pages/home-page/HomePage.stories.tsx +8 -15
  60. package/components/pages/home-page/home-page.mdx +53 -53
  61. package/components/pages/home-page/home-page.test.tsx +2 -1
  62. package/components/pages/login-page/LoginPage.mdx +31 -31
  63. package/components/pages/login-page/LoginPage.tsx +125 -218
  64. package/components/pages/login-page/login-page.test.tsx +2 -1
  65. package/components/pages/reset-password-page/ResetPasswordPage.tsx +153 -243
  66. package/components/pages/reset-password-page/reset-password-page.mdx +63 -63
  67. package/components/pages/template-content/TemplateContent.tsx +1353 -1353
  68. package/components/pages/template-content/template-content.mdx +61 -61
  69. package/components/pages/template-page/TemplatePage.stories.tsx +32 -32
  70. package/components/pages/template-page/template-page.mdx +53 -53
  71. package/components/pages/template-page/template-page.test.tsx +2 -1
  72. package/components/pages/verify-email-page/VerifyEmailPage.tsx +104 -206
  73. package/components/pages/verify-email-page/verify-email-page.mdx +55 -55
  74. package/components/public-api-smoke.test.tsx +10 -6
  75. package/components/shared/assistant-utils.ts +3 -2
  76. package/components/shared/navigation.ts +2 -2
  77. package/components/ui/accordion/accordion.mdx +29 -29
  78. package/components/ui/alert/alert.mdx +29 -29
  79. package/components/ui/alert-dialog/alert-dialog.mdx +26 -26
  80. package/components/ui/aspect-ratio/aspect-ratio.mdx +25 -25
  81. package/components/ui/assistant-chart/AssistantChart.tsx +8 -2
  82. package/components/ui/assistant-chart/assistant-chart.mdx +25 -25
  83. package/components/ui/avatar/avatar.mdx +26 -26
  84. package/components/ui/badge/badge.mdx +28 -28
  85. package/components/ui/breadcrumb/breadcrumb.mdx +26 -26
  86. package/components/ui/button/button.mdx +29 -29
  87. package/components/ui/calendar/calendar.mdx +26 -26
  88. package/components/ui/card/card.mdx +26 -26
  89. package/components/ui/carousel/carousel.mdx +26 -26
  90. package/components/ui/chart/chart.mdx +26 -26
  91. package/components/ui/chart/chart.test.tsx +178 -178
  92. package/components/ui/chart/chart.tsx +2252 -2245
  93. package/components/ui/checkbox/checkbox.mdx +26 -26
  94. package/components/ui/collapsible/collapsible.mdx +25 -25
  95. package/components/ui/command/command.mdx +26 -26
  96. package/components/ui/context-menu/context-menu.mdx +26 -26
  97. package/components/ui/dialog/dialog.mdx +26 -26
  98. package/components/ui/drawer/drawer.mdx +26 -26
  99. package/components/ui/dropdown-menu/dropdown-menu.mdx +26 -26
  100. package/components/ui/empty/empty.mdx +26 -26
  101. package/components/ui/file-upload/file-upload.mdx +26 -26
  102. package/components/ui/form/form.mdx +20 -20
  103. package/components/ui/google-maps-loader/google-maps-loader.mdx +68 -68
  104. package/components/ui/hover-card/hover-card.mdx +26 -26
  105. package/components/ui/input/input.mdx +29 -29
  106. package/components/ui/input-otp/input-otp.mdx +26 -26
  107. package/components/ui/label/label.mdx +25 -25
  108. package/components/ui/map/map.mdx +26 -26
  109. package/components/ui/map/map.tsx +6 -1
  110. package/components/ui/menubar/menubar.mdx +26 -26
  111. package/components/ui/navigation-menu/navigation-menu.mdx +26 -26
  112. package/components/ui/notification-badge/notification-badge.mdx +26 -26
  113. package/components/ui/page-header/page-header.mdx +44 -44
  114. package/components/ui/pagination/pagination.mdx +26 -26
  115. package/components/ui/popover/popover.mdx +26 -26
  116. package/components/ui/progress/progress.mdx +25 -25
  117. package/components/ui/radio-group/radio-group.mdx +26 -26
  118. package/components/ui/rating/rating.mdx +26 -26
  119. package/components/ui/resizable/resizable.mdx +26 -26
  120. package/components/ui/resizable/resizable.tsx +13 -8
  121. package/components/ui/rich-text-editor/rich-text-editor.mdx +47 -47
  122. package/components/ui/route-map/route-map.mdx +26 -26
  123. package/components/ui/scroll-area/scroll-area.mdx +25 -25
  124. package/components/ui/search/search.mdx +27 -27
  125. package/components/ui/select/select.mdx +26 -26
  126. package/components/ui/separator/separator.mdx +25 -25
  127. package/components/ui/sheet/sheet.mdx +26 -26
  128. package/components/ui/simple-map/simple-map.mdx +25 -25
  129. package/components/ui/skeleton/skeleton.mdx +25 -25
  130. package/components/ui/slider/slider.mdx +26 -26
  131. package/components/ui/sonner/sonner.mdx +26 -26
  132. package/components/ui/stats-card/stats-card.mdx +26 -26
  133. package/components/ui/stats-card/stats-card.stories.tsx +117 -117
  134. package/components/ui/stats-card/stats-card.tsx +109 -109
  135. package/components/ui/stepper/stepper.mdx +26 -26
  136. package/components/ui/switch/switch.mdx +25 -25
  137. package/components/ui/table/table.mdx +27 -27
  138. package/components/ui/tabs/tabs.mdx +26 -26
  139. package/components/ui/textarea/textarea.mdx +25 -25
  140. package/components/ui/timeline/timeline.mdx +26 -26
  141. package/components/ui/toggle/toggle.mdx +26 -26
  142. package/components/ui/toggle-group/toggle-group.mdx +26 -26
  143. package/components/ui/tooltip/tooltip.mdx +26 -26
  144. package/components/ui/tree-view/tree-view.mdx +26 -26
  145. package/components.json +511 -511
  146. package/contexts/BrandColorsContext.tsx +282 -282
  147. package/contexts/i18n-singleton.test.tsx +57 -0
  148. package/contexts/theme-data.ts +391 -391
  149. package/dist/{AssistantChart-DNdwuS-t.js → AssistantChart-BMNSA_Pk.js} +4 -4
  150. package/dist/{AssistantChart-COGiOV-g.cjs → AssistantChart-BzM7plyc.cjs} +31 -21
  151. package/dist/{AssistantChart-CWX1OWNM.js → AssistantChart-C842evTi.js} +31 -21
  152. package/dist/{AssistantChart-D0A1FPYt.cjs → AssistantChart-CImCNLfD.cjs} +150 -114
  153. package/dist/{AssistantChart-BW9JK6jw.cjs → AssistantChart-CVF2uh37.cjs} +4 -4
  154. package/dist/{AssistantChart-BXU1ACnh.js → AssistantChart-DfdIfmQr.js} +134 -240
  155. package/dist/{AssistantChart-BZTPJ5dP.cjs → AssistantChart-JooMdVQU.cjs} +5 -5
  156. package/dist/{AssistantChart-DMJJ_Amf.js → AssistantChart-KHS-tp-L.js} +5 -5
  157. package/dist/{BrandColorsContext-BwY-b6M4.cjs → BrandColorsContext-B4_81eas.cjs} +2 -2
  158. package/dist/{BrandColorsContext-BMRJ04Wf.js → BrandColorsContext-DbK5LnQ_.js} +2 -2
  159. package/dist/{CodeBlock-CjeFavqV.js → CodeBlock-DiKO8ocT.js} +11 -11
  160. package/dist/{CodeBlock-CV6dtsTM.cjs → CodeBlock-ZYThr7Kn.cjs} +12 -9
  161. package/dist/{FeatureCard-Cfs6Ishq.js → FeatureCard-BhpfmPPx.js} +20 -20
  162. package/dist/{FeatureCard-ie3L8Fpr.cjs → FeatureCard-D-5yS_OD.cjs} +31 -18
  163. package/dist/{progress-DDeuWPZw.cjs → ImageWithFallback-CfkAkctC.cjs} +34 -9
  164. package/dist/{progress-Cs9i4DPx.js → ImageWithFallback-bw-CxxDc.js} +27 -10
  165. package/dist/LanguageContext-CX_zdxre.js +1912 -0
  166. package/dist/LanguageContext-CjhSSqJT.cjs +1917 -0
  167. package/dist/LanguageSelector-BR3Ss0k_.js +46 -0
  168. package/dist/LanguageSelector-CHOLPmHr.cjs +48 -0
  169. package/dist/{XerticaXLogo-mqjoBiLI.js → LanguageSelector-CmTj3lWq.js} +85 -82
  170. package/dist/{XerticaXLogo-BX3ueACh.js → LanguageSelector-DxW6o7bt.js} +81 -81
  171. package/dist/{XerticaXLogo-uQgwns_E.cjs → LanguageSelector-Sw73qvWV.cjs} +84 -81
  172. package/dist/PasswordStrengthMeter-C8irs0G1.js +173 -0
  173. package/dist/PasswordStrengthMeter-MLzhax-d.cjs +179 -0
  174. package/dist/{ThemeContext-BgclCB35.js → ThemeContext-BGeh_Kdr.js} +290 -212
  175. package/dist/{ThemeContext-bSzuOit2.cjs → ThemeContext-CEY9pCn-.cjs} +15 -10
  176. package/dist/{ThemeContext-BblcjQup.cjs → ThemeContext-D50irx5T.cjs} +291 -205
  177. package/dist/{ThemeContext-RTy1m2Uq.js → ThemeContext-Dk3tH7Ym.js} +14 -13
  178. package/dist/{XerticaXLogo-CFuIlYFH.js → ThemeToggle-BpM_iHh8.js} +56 -93
  179. package/dist/{XerticaXLogo-CziKMQil.cjs → ThemeToggle-CZRlv0d4.cjs} +62 -85
  180. package/dist/{VerifyEmailPage-C_Zk6Gen.cjs → VerifyEmailPage-B6bOrybJ.cjs} +17 -17
  181. package/dist/VerifyEmailPage-BKiaw2YK.js +2954 -0
  182. package/dist/{VerifyEmailPage-B31mCrMc.js → VerifyEmailPage-BRE5Fz59.js} +8 -8
  183. package/dist/{VerifyEmailPage-Cyl55sJb.js → VerifyEmailPage-BcCluouh.js} +135 -65
  184. package/dist/VerifyEmailPage-Beaicc6V.cjs +2963 -0
  185. package/dist/VerifyEmailPage-BehPBp0F.cjs +2963 -0
  186. package/dist/VerifyEmailPage-Bx1sr0uQ.cjs +3298 -0
  187. package/dist/{VerifyEmailPage-Bci0bA-P.js → VerifyEmailPage-DUYyXCX9.js} +3 -3
  188. package/dist/VerifyEmailPage-DXXMHbzq.js +3289 -0
  189. package/dist/VerifyEmailPage-Djb6hthM.js +2954 -0
  190. package/dist/{VerifyEmailPage-u_Dn7t1U.cjs → VerifyEmailPage-DpYtFk35.cjs} +21 -21
  191. package/dist/{VerifyEmailPage-X14vhdyl.js → VerifyEmailPage-NXKWW3Dk.js} +12 -12
  192. package/dist/{VerifyEmailPage-C7KiYXrm.cjs → VerifyEmailPage-QrCz4Wqr.cjs} +11 -11
  193. package/dist/{VerifyEmailPage-Bv8Ah_TK.cjs → VerifyEmailPage-ZmQra0Wi.cjs} +144 -74
  194. package/dist/{XerticaProvider-BErr83Bg.js → XerticaProvider-BF3q_myt.js} +5 -4
  195. package/dist/{XerticaProvider-B8CaV7xu.cjs → XerticaProvider-BijpC_py.cjs} +18 -11
  196. package/dist/{XerticaProvider-DQtvJU7m.js → XerticaProvider-C2wDRQhT.js} +17 -13
  197. package/dist/{XerticaProvider-CeS5G_n5.cjs → XerticaProvider-C_JSOz1U.cjs} +2 -2
  198. package/dist/{XerticaProvider-CwOkHxiT.cjs → XerticaProvider-D5zjrqZq.cjs} +5 -4
  199. package/dist/{XerticaProvider-ra2NciRq.js → XerticaProvider-KTGl4Cn1.js} +2 -2
  200. package/dist/{alert-dialog-DqlRW_An.js → alert-dialog-BrpwXKwS.js} +3 -3
  201. package/dist/{alert-dialog-yckpaOpy.cjs → alert-dialog-BzIcTKn_.cjs} +173 -166
  202. package/dist/{alert-dialog-DhwPioBa.cjs → alert-dialog-CZU1Zase.cjs} +3 -3
  203. package/dist/{alert-dialog-KpoabzJb.js → alert-dialog-ClRoLH7l.js} +40 -56
  204. package/dist/{alert-dialog-B4M3vQKS.cjs → alert-dialog-DBBqvU-V.cjs} +53 -38
  205. package/dist/{alert-dialog-iDe5VE5o.js → alert-dialog-kty5pxQp.js} +160 -183
  206. package/dist/assistant.cjs.js +2 -2
  207. package/dist/assistant.es.js +2 -2
  208. package/dist/blocks.cjs.js +7 -3
  209. package/dist/blocks.es.js +2 -2
  210. package/dist/brand.cjs.js +7 -6
  211. package/dist/brand.es.js +3 -2
  212. package/dist/cli.js +63 -21
  213. package/dist/components/assistant/code-block/CodeBlock.d.ts +2 -1
  214. package/dist/components/assistant/formatted-document/FormattedDocument.d.ts +2 -1
  215. package/dist/components/assistant/markdown-message/MarkdownMessage.d.ts +2 -1
  216. package/dist/components/assistant/modern-chat-input/ModernChatInput.d.ts +2 -1
  217. package/dist/components/assistant/xertica-assistant/parts/AssistantCollapsedView.d.ts +2 -1
  218. package/dist/components/assistant/xertica-assistant/parts/AssistantConversationList.d.ts +2 -1
  219. package/dist/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.d.ts +2 -1
  220. package/dist/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.d.ts +2 -1
  221. package/dist/components/assistant/xertica-assistant/parts/AssistantHeader.d.ts +2 -1
  222. package/dist/components/assistant/xertica-assistant/parts/AssistantMessageBubble.d.ts +2 -1
  223. package/dist/components/assistant/xertica-assistant/parts/AssistantTabBar.d.ts +2 -1
  224. package/dist/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.d.ts +2 -1
  225. package/dist/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.d.ts +2 -1
  226. package/dist/components/assistant/xertica-assistant/types.d.ts +3 -2
  227. package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +1 -1
  228. package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +2 -1
  229. package/dist/components/blocks/auth/AuthPageShell.d.ts +12 -0
  230. package/dist/components/blocks/auth/PasswordStrengthMeter.d.ts +7 -0
  231. package/dist/components/blocks/auth/SocialLoginButtons.d.ts +8 -0
  232. package/dist/components/blocks/auth/index.d.ts +8 -0
  233. package/dist/components/blocks/auth/usePasswordStrength.d.ts +3 -0
  234. package/dist/components/blocks/card-patterns/ActivityCard.d.ts +1 -1
  235. package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +1 -1
  236. package/dist/components/blocks/card-patterns/FeatureCard.d.ts +1 -1
  237. package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +1 -1
  238. package/dist/components/blocks/card-patterns/NotificationCard.d.ts +1 -1
  239. package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +1 -1
  240. package/dist/components/blocks/card-patterns/ProfileCard.d.ts +1 -1
  241. package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +1 -1
  242. package/dist/components/blocks/card-patterns/ProjectCard.d.ts +1 -1
  243. package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +1 -1
  244. package/dist/components/blocks/card-patterns/QuickActionCard.d.ts +1 -1
  245. package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +1 -1
  246. package/dist/components/blocks/index.d.ts +1 -0
  247. package/dist/components/brand/language-selector/LanguageSelector.d.ts +2 -1
  248. package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +2 -1
  249. package/dist/components/brand/xertica-logo/XerticaLogo.d.ts +2 -1
  250. package/dist/components/brand/xertica-orbe/XerticaOrbe.d.ts +2 -1
  251. package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +1 -1
  252. package/dist/components/brand/xertica-xlogo/XerticaXLogo.d.ts +2 -1
  253. package/dist/components/examples/DrawingMapExample.d.ts +2 -1
  254. package/dist/components/examples/FilterableMapExample.d.ts +1 -1
  255. package/dist/components/examples/MapShowcase.d.ts +2 -1
  256. package/dist/components/examples/SimpleFilterableMap.d.ts +2 -1
  257. package/dist/components/figma/ImageWithFallback.d.ts +1 -1
  258. package/dist/components/layout/header/header.d.ts +1 -1
  259. package/dist/components/layout/sidebar/sidebar.d.ts +25 -13
  260. package/dist/components/media/FloatingMediaWrapper.d.ts +1 -1
  261. package/dist/components/media/audio-player/AudioPlayer.d.ts +2 -1
  262. package/dist/components/media/video-player/VideoPlayer.d.ts +2 -1
  263. package/dist/components/pages/forgot-password-page/ForgotPasswordPage.d.ts +2 -1
  264. package/dist/components/pages/home-content/HomeContent.d.ts +2 -1
  265. package/dist/components/pages/home-page/HomePage.d.ts +2 -1
  266. package/dist/components/pages/login-page/LoginPage.d.ts +2 -1
  267. package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +3 -2
  268. package/dist/components/pages/template-content/TemplateContent.d.ts +2 -1
  269. package/dist/components/pages/template-page/TemplatePage.d.ts +2 -1
  270. package/dist/components/pages/verify-email-page/VerifyEmailPage.d.ts +2 -1
  271. package/dist/components/shared/CustomTooltipContent.d.ts +1 -1
  272. package/dist/components/shared/assistant-utils.d.ts +3 -2
  273. package/dist/components/shared/error-boundary.d.ts +4 -4
  274. package/dist/components/shared/error-fallbacks.d.ts +4 -3
  275. package/dist/components/shared/navigation.d.ts +6 -2
  276. package/dist/components/ui/accordion/accordion.d.ts +4 -4
  277. package/dist/components/ui/alert/alert.d.ts +3 -3
  278. package/dist/components/ui/alert-dialog/alert-dialog.d.ts +10 -10
  279. package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +1 -1
  280. package/dist/components/ui/assistant-chart/AssistantChart.d.ts +4 -3
  281. package/dist/components/ui/avatar/avatar.d.ts +3 -3
  282. package/dist/components/ui/badge/badge.d.ts +1 -1
  283. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +7 -7
  284. package/dist/components/ui/calendar/calendar.d.ts +2 -2
  285. package/dist/components/ui/card/card.d.ts +7 -7
  286. package/dist/components/ui/carousel/carousel.d.ts +5 -5
  287. package/dist/components/ui/chart/chart.d.ts +16 -16
  288. package/dist/components/ui/collapsible/collapsible.d.ts +3 -3
  289. package/dist/components/ui/command/command.d.ts +9 -9
  290. package/dist/components/ui/context-menu/context-menu.d.ts +15 -15
  291. package/dist/components/ui/dialog/dialog.d.ts +9 -9
  292. package/dist/components/ui/drawer/drawer.d.ts +10 -10
  293. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +15 -15
  294. package/dist/components/ui/form/form.d.ts +7 -7
  295. package/dist/components/ui/google-maps-loader/google-maps-loader.d.ts +3 -3
  296. package/dist/components/ui/hover-card/hover-card.d.ts +3 -3
  297. package/dist/components/ui/input-otp/input-otp.d.ts +4 -4
  298. package/dist/components/ui/label/label.d.ts +1 -1
  299. package/dist/components/ui/menubar/menubar.d.ts +16 -16
  300. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +8 -8
  301. package/dist/components/ui/page-header/page-header.d.ts +3 -3
  302. package/dist/components/ui/pagination/pagination.d.ts +7 -7
  303. package/dist/components/ui/popover/popover.d.ts +4 -4
  304. package/dist/components/ui/progress/progress.d.ts +1 -1
  305. package/dist/components/ui/resizable/resizable.d.ts +11 -7
  306. package/dist/components/ui/rich-text-editor/rich-text-editor.d.ts +1 -1
  307. package/dist/components/ui/scroll-area/scroll-area.d.ts +2 -2
  308. package/dist/components/ui/separator/separator.d.ts +1 -1
  309. package/dist/components/ui/sheet/sheet.d.ts +10 -10
  310. package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
  311. package/dist/components/ui/sonner/sonner.d.ts +2 -1
  312. package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +1 -1
  313. package/dist/components/ui/table/table.d.ts +8 -8
  314. package/dist/components/ui/tabs/tabs.d.ts +4 -4
  315. package/dist/components/ui/tooltip/tooltip.d.ts +4 -4
  316. package/dist/contexts/ApiKeyContext.d.ts +2 -2
  317. package/dist/contexts/AssistenteContext.d.ts +1 -1
  318. package/dist/contexts/AuthContext.d.ts +1 -1
  319. package/dist/contexts/LanguageContext.d.ts +2 -2
  320. package/dist/contexts/LayoutContext.d.ts +2 -2
  321. package/dist/contexts/ThemeContext.d.ts +1 -1
  322. package/dist/features/assistant/hooks/useAssistantConfig.d.ts +1 -1
  323. package/dist/features/home/hooks/useDashboardStats.d.ts +1 -1
  324. package/dist/features/home/hooks/useFeatureCards.d.ts +1 -1
  325. package/dist/features/home/hooks/useTeamMembers.d.ts +1 -1
  326. package/dist/{google-maps-loader-BCe58h9D.js → google-maps-loader-BOug999f.js} +0 -4
  327. package/dist/{google-maps-loader-casMyxlo.cjs → google-maps-loader-DfeBRI8Q.cjs} +0 -5
  328. package/dist/hooks.cjs.js +6 -5
  329. package/dist/hooks.es.js +3 -2
  330. package/dist/{index-9GWd0qxq.cjs → index-BQjx1Mdf.cjs} +1 -1
  331. package/dist/index-Bei5DzAL.js +6 -0
  332. package/dist/index.cjs.js +32 -27
  333. package/dist/index.es.js +15 -14
  334. package/dist/layout.cjs.js +1 -1
  335. package/dist/layout.es.js +1 -1
  336. package/dist/pages.cjs.js +1 -1
  337. package/dist/pages.es.js +1 -1
  338. package/dist/{rich-text-editor-B2CKz7nx.cjs → rich-text-editor-BuqSu718.cjs} +68 -3
  339. package/dist/{rich-text-editor-DloeW0wc.js → rich-text-editor-CV8FtA_l.js} +66 -4
  340. package/dist/{sidebar-B4ZWaMrE.js → sidebar-B7YzwAp3.js} +365 -6
  341. package/dist/{sidebar-CLmIjgNd.cjs → sidebar-BGJ0j567.cjs} +84 -67
  342. package/dist/{sidebar-Duermn32.js → sidebar-BI6mZlC8.js} +81 -64
  343. package/dist/{sidebar-BS1p2V7t.cjs → sidebar-BtmotOg-.cjs} +367 -9
  344. package/dist/{sidebar-DyYvgyBj.cjs → sidebar-Cb0U7NsV.cjs} +368 -9
  345. package/dist/{sidebar-QwCoeoZ_.js → sidebar-D3EgGVxF.js} +1 -1
  346. package/dist/{sidebar-CQn_rwxP.cjs → sidebar-DDTqMGnR.cjs} +4 -4
  347. package/dist/{sidebar-3XyzjVBw.js → sidebar-I7EXyf5D.js} +364 -6
  348. package/dist/ui.cjs.js +9 -9
  349. package/dist/ui.es.js +5 -5
  350. package/dist/{xertica-assistant-BbgzsgsG.js → xertica-assistant-8fh8KA2K.js} +60 -51
  351. package/dist/{xertica-assistant-d2qs2Vd9.cjs → xertica-assistant-BjfG3zyL.cjs} +63 -46
  352. package/dist/{xertica-assistant-B687qEPU.js → xertica-assistant-CJVnvMqU.js} +17 -8
  353. package/dist/{xertica-assistant-sOHwTgIP.cjs → xertica-assistant-CKPtc1z5.cjs} +19 -10
  354. package/dist/{xertica-assistant-QFUnv5I2.cjs → xertica-assistant-DER0brPQ.cjs} +6 -5
  355. package/dist/{xertica-assistant-CyikE3N_.js → xertica-assistant-DQCjpk5M.js} +4 -3
  356. package/dist/{xertica-assistant-B1NaSFFj.js → xertica-assistant-Dk-9AJzw.js} +6 -5
  357. package/dist/{xertica-assistant-CIaUlbIt.cjs → xertica-assistant-DxhIKvuY.cjs} +8 -7
  358. package/dist/xertica-ui.css +2 -2
  359. package/docs/components/audio-player.md +1 -1
  360. package/docs/components/sidebar.md +331 -331
  361. package/docs/components/stats-card.md +138 -138
  362. package/docs/components/toggle.md +12 -0
  363. package/docs/doc-audit.md +35 -229
  364. package/docs/i18n.md +33 -10
  365. package/docs/llms.md +6 -4
  366. package/llms-compact.txt +444 -444
  367. package/llms-full.txt +12144 -12144
  368. package/llms.txt +187 -187
  369. package/package.json +223 -219
  370. package/scripts/a11y-audit.mjs +162 -162
  371. package/scripts/fix-stories.cjs +19 -19
  372. package/styles/globals.css +0 -1
  373. package/styles/xertica/base.css +8 -0
  374. package/styles/xertica/tokens.css +240 -240
  375. package/templates/.env.example +2 -2
  376. package/templates/.prettierignore +4 -4
  377. package/templates/.prettierrc +10 -10
  378. package/templates/guidelines/Guidelines.md +865 -865
  379. package/templates/index.html +13 -13
  380. package/templates/package.json +69 -69
  381. package/templates/src/app/components/AuthGuard.tsx +11 -0
  382. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +1 -2
  383. package/templates/src/features/auth/ui/LoginContent.tsx +1 -2
  384. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +3 -57
  385. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +1 -2
  386. package/templates/src/features/home/index.ts +0 -10
  387. package/templates/src/features/home/ui/HomeContent.tsx +62 -116
  388. package/templates/src/features/settings/index.ts +2 -0
  389. package/templates/src/features/settings/ui/SettingsContent.tsx +134 -0
  390. package/templates/src/features/template/index.ts +0 -4
  391. package/templates/src/features/template/ui/TemplateContent.tsx +68 -1321
  392. package/templates/src/i18n.ts +36 -13
  393. package/templates/src/locales/en/pages/settings.json +15 -0
  394. package/templates/src/locales/en/pages/templates.json +5 -313
  395. package/templates/src/locales/es/pages/settings.json +15 -0
  396. package/templates/src/locales/es/pages/templates.json +5 -313
  397. package/templates/src/locales/pt-BR/pages/settings.json +15 -0
  398. package/templates/src/locales/pt-BR/pages/templates.json +5 -313
  399. package/templates/src/pages/SettingsPage.tsx +28 -0
  400. package/templates/src/shared/config/navigation.ts +2 -2
  401. package/templates/src/styles/xertica/tokens.css +240 -240
  402. package/utils/gemini.ts +2 -2
  403. package/dist/AssistantChart-9w31gdAb.cjs +0 -3363
  404. package/dist/AssistantChart-BAudAfne.cjs +0 -3591
  405. package/dist/AssistantChart-BAx9VQvb.cjs +0 -3374
  406. package/dist/AssistantChart-BP8upjMk.js +0 -3565
  407. package/dist/AssistantChart-CVko2A1W.js +0 -3348
  408. package/dist/AssistantChart-CVzmmhx4.js +0 -3337
  409. package/dist/AssistantChart-CeU2dIb6.js +0 -3469
  410. package/dist/AssistantChart-DO5UuX4J.cjs +0 -3495
  411. package/dist/AudioPlayer-1ypwE2Wh.cjs +0 -936
  412. package/dist/AudioPlayer-BJ2IuRQW.cjs +0 -1275
  413. package/dist/AudioPlayer-BWDW6TN9.cjs +0 -1279
  414. package/dist/AudioPlayer-CM962GEh.js +0 -1280
  415. package/dist/AudioPlayer-CbZId7cj.cjs +0 -998
  416. package/dist/AudioPlayer-DU8zt8-z.js +0 -999
  417. package/dist/AudioPlayer-DuKXrCfy.js +0 -937
  418. package/dist/AudioPlayer-Xxma6_-H.js +0 -1276
  419. package/dist/BrandColorsContext-DLVJgtmH.js +0 -666
  420. package/dist/BrandColorsContext-DZT7JjeD.js +0 -659
  421. package/dist/BrandColorsContext-GUyFmkX0.cjs +0 -665
  422. package/dist/BrandColorsContext-awnBCmC4.cjs +0 -666
  423. package/dist/CodeBlock-C2ZUXt8V.js +0 -219
  424. package/dist/CodeBlock-C5oYnLQp.cjs +0 -218
  425. package/dist/CodeBlock-DuxdtN-l.js +0 -219
  426. package/dist/CodeBlock-POVYONvC.cjs +0 -218
  427. package/dist/CustomTooltipContent-BT6brkVJ.cjs +0 -49
  428. package/dist/CustomTooltipContent-CfOfikhq.js +0 -33
  429. package/dist/CustomTooltipContent-DHjkY0ww.js +0 -40
  430. package/dist/CustomTooltipContent-c_K-DWRr.cjs +0 -56
  431. package/dist/FeatureCard-9GhnlgL3.js +0 -336
  432. package/dist/FeatureCard-Bcb3Zi54.js +0 -302
  433. package/dist/FeatureCard-CkPd2psQ.cjs +0 -301
  434. package/dist/FeatureCard-Dkp-xmzM.cjs +0 -335
  435. package/dist/FeatureCardSkeleton-CAgu8stE.js +0 -27
  436. package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +0 -26
  437. package/dist/LanguageContext-BwhwC3G2.js +0 -657
  438. package/dist/LanguageContext-DvUt5jBg.cjs +0 -656
  439. package/dist/LayoutContext-BDmcZfMH.cjs +0 -84
  440. package/dist/LayoutContext-C4kKN9RV.cjs +0 -93
  441. package/dist/LayoutContext-CGEe1oPq.js +0 -94
  442. package/dist/LayoutContext-CwT5KLiW.cjs +0 -104
  443. package/dist/LayoutContext-DVLCsoQn.js +0 -105
  444. package/dist/LayoutContext-dbQvdC4O.js +0 -85
  445. package/dist/ThemeContext-BbBNoFTG.js +0 -735
  446. package/dist/ThemeContext-Bo-W2WZH.js +0 -1856
  447. package/dist/ThemeContext-CP3a0jxy.cjs +0 -1855
  448. package/dist/ThemeContext-Cmr8Ex8H.cjs +0 -734
  449. package/dist/ThemeContext-CpqYShLq.cjs +0 -324
  450. package/dist/ThemeContext-D3LzacmG.js +0 -188
  451. package/dist/ThemeContext-DQUOeziy.cjs +0 -1855
  452. package/dist/ThemeContext-Du2nE1PL.js +0 -325
  453. package/dist/ThemeContext-GeEBTJ3q.cjs +0 -1621
  454. package/dist/ThemeContext-JyLK9B1o.js +0 -1622
  455. package/dist/ThemeContext-U4dEYc6C.cjs +0 -187
  456. package/dist/ThemeContext-ept8jhXI.js +0 -1856
  457. package/dist/VerifyEmailPage-BE-L9mB7.js +0 -2828
  458. package/dist/VerifyEmailPage-BIBOKV7Z.js +0 -3214
  459. package/dist/VerifyEmailPage-BJjAMUTW.js +0 -3223
  460. package/dist/VerifyEmailPage-BRSP-Pwt.cjs +0 -3196
  461. package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
  462. package/dist/VerifyEmailPage-BiRm7Nh4.cjs +0 -3213
  463. package/dist/VerifyEmailPage-Bvfv8HVQ.js +0 -3214
  464. package/dist/VerifyEmailPage-CR7kb5df.cjs +0 -2827
  465. package/dist/VerifyEmailPage-C_ihbcth.js +0 -2828
  466. package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
  467. package/dist/VerifyEmailPage-CdYPSJoO.js +0 -2828
  468. package/dist/VerifyEmailPage-CkBYfsNy.cjs +0 -3232
  469. package/dist/VerifyEmailPage-D-FRj5TU.cjs +0 -3213
  470. package/dist/VerifyEmailPage-DF2ilhum.cjs +0 -3210
  471. package/dist/VerifyEmailPage-DMBh4NM9.cjs +0 -2827
  472. package/dist/VerifyEmailPage-DTtFfC-J.js +0 -3197
  473. package/dist/VerifyEmailPage-Dt7zgA4w.cjs +0 -2827
  474. package/dist/VerifyEmailPage-EhudUdqF.js +0 -3211
  475. package/dist/VerifyEmailPage-RrUApqBN.js +0 -3214
  476. package/dist/VerifyEmailPage-VoMI7MYH.cjs +0 -3213
  477. package/dist/VerifyEmailPage-hdB8JQGv.cjs +0 -3213
  478. package/dist/VerifyEmailPage-vYHbYK3q.js +0 -3214
  479. package/dist/XerticaOrbe-BCUVSPPB.cjs +0 -1924
  480. package/dist/XerticaOrbe-BGIB1CTK.js +0 -1355
  481. package/dist/XerticaOrbe-By8eEvR-.js +0 -1925
  482. package/dist/XerticaOrbe-FWGjBj0U.cjs +0 -1354
  483. package/dist/XerticaProvider-AChwphCO.cjs +0 -48
  484. package/dist/XerticaProvider-AbWlr7Af.cjs +0 -48
  485. package/dist/XerticaProvider-BITjgC5p.js +0 -39
  486. package/dist/XerticaProvider-BSyFrmC0.js +0 -49
  487. package/dist/XerticaProvider-By8q3Roe.cjs +0 -38
  488. package/dist/XerticaProvider-CUYJZc32.js +0 -49
  489. package/dist/XerticaProvider-CW9hpCdF.cjs +0 -39
  490. package/dist/XerticaProvider-CWgby5mY.js +0 -49
  491. package/dist/XerticaProvider-CWs6EwNa.js +0 -49
  492. package/dist/XerticaProvider-CiNKjMx1.cjs +0 -48
  493. package/dist/XerticaProvider-CjQAQPcn.cjs +0 -48
  494. package/dist/XerticaProvider-D5lLumH-.js +0 -49
  495. package/dist/XerticaProvider-DUOJg9iX.js +0 -49
  496. package/dist/XerticaProvider-Dl_b72_l.cjs +0 -51
  497. package/dist/XerticaProvider-qQUDop71.cjs +0 -48
  498. package/dist/XerticaProvider-siSt9uG2.js +0 -40
  499. package/dist/XerticaXLogo-8TTzBjHw.cjs +0 -251
  500. package/dist/XerticaXLogo-B2svDGZh.cjs +0 -251
  501. package/dist/XerticaXLogo-BWaag64t.js +0 -252
  502. package/dist/XerticaXLogo-CU-U-GP4.cjs +0 -251
  503. package/dist/XerticaXLogo-ChryA6xj.js +0 -252
  504. package/dist/XerticaXLogo-CowGv7BC.js +0 -252
  505. package/dist/XerticaXLogo-D8jf0SNv.cjs +0 -214
  506. package/dist/XerticaXLogo-DHz5SugF.js +0 -252
  507. package/dist/XerticaXLogo-DTee_y8X.cjs +0 -251
  508. package/dist/XerticaXLogo-DfUvz-lD.js +0 -243
  509. package/dist/XerticaXLogo-DzXKZBtG.js +0 -231
  510. package/dist/XerticaXLogo-fAJMy3H4.js +0 -215
  511. package/dist/XerticaXLogo-kslQ8Tk_.cjs +0 -251
  512. package/dist/XerticaXLogo-xWbElCZj.cjs +0 -230
  513. package/dist/avatar-Cq5_E8r9.cjs +0 -78
  514. package/dist/avatar-CuYu2MKt.cjs +0 -72
  515. package/dist/avatar-Cxyofu1H.js +0 -56
  516. package/dist/avatar-DSBfJMRJ.js +0 -62
  517. package/dist/breadcrumb-CVzzzqfo.js +0 -103
  518. package/dist/breadcrumb-DIJ0X3Ot.js +0 -96
  519. package/dist/breadcrumb-DjSxkjlQ.cjs +0 -95
  520. package/dist/breadcrumb-DnDlQFg2.cjs +0 -102
  521. package/dist/button-0CXwCRTm.cjs +0 -85
  522. package/dist/button-Bnv9SvYK.cjs +0 -79
  523. package/dist/button-C6uvh0rV.js +0 -63
  524. package/dist/button-qkz7Icqf.js +0 -69
  525. package/dist/card-B8-Gl5DL.js +0 -73
  526. package/dist/card-Bv_c57KU.cjs +0 -72
  527. package/dist/card-DJTsYhLL.cjs +0 -89
  528. package/dist/card-fi8zAN-I.js +0 -90
  529. package/dist/dropdown-menu-B_uEXNc4.cjs +0 -220
  530. package/dist/dropdown-menu-CFuCssWA.js +0 -204
  531. package/dist/dropdown-menu-Ze1YZFyc.cjs +0 -247
  532. package/dist/dropdown-menu-nc_Lvg-u.js +0 -231
  533. package/dist/google-maps-loader-BVoVhUwA.js +0 -316
  534. package/dist/google-maps-loader-BqsYL48U.cjs +0 -285
  535. package/dist/google-maps-loader-DjJaYhV6.cjs +0 -316
  536. package/dist/google-maps-loader-t2IlYBzw.js +0 -286
  537. package/dist/index-B7A523O_.js +0 -8
  538. package/dist/index-BabBx2pa.js +0 -6
  539. package/dist/index-CkTUgOwX.js +0 -8
  540. package/dist/index-D3RLKRAs.cjs +0 -7
  541. package/dist/index-DmHhnb7a.cjs +0 -7
  542. package/dist/index.umd.js +0 -13712
  543. package/dist/input-CNFHVKvo.cjs +0 -145
  544. package/dist/input-CPl84zAx.cjs +0 -151
  545. package/dist/input-C_UiS2Py.cjs +0 -152
  546. package/dist/input-D-6IsAca.js +0 -133
  547. package/dist/input-cc-PTD4R.js +0 -123
  548. package/dist/input-wPYg0d0P.js +0 -127
  549. package/dist/progress-BLwqortq.cjs +0 -105
  550. package/dist/progress-D9mtsf6j.js +0 -89
  551. package/dist/rich-text-editor-1UW3Y2JK.js +0 -2891
  552. package/dist/rich-text-editor-BM-LPpTh.js +0 -2902
  553. package/dist/rich-text-editor-BmsjY03B.js +0 -2949
  554. package/dist/rich-text-editor-BrdC5evx.js +0 -2244
  555. package/dist/rich-text-editor-CyggTOLQ.cjs +0 -2908
  556. package/dist/rich-text-editor-DbV-S7Fi.cjs +0 -2261
  557. package/dist/rich-text-editor-DoCkKhzk.cjs +0 -2919
  558. package/dist/rich-text-editor-DqLICivI.js +0 -2832
  559. package/dist/rich-text-editor-DxO1Hz3a.cjs +0 -2903
  560. package/dist/rich-text-editor-GS2kpTAK.cjs +0 -2966
  561. package/dist/routes.d.ts +0 -10
  562. package/dist/select-Cmb8zF7w.cjs +0 -156
  563. package/dist/select-CprSNX0z.js +0 -139
  564. package/dist/select-DT7Zjn42.cjs +0 -162
  565. package/dist/select-En8DkoaQ.js +0 -145
  566. package/dist/sidebar-B3EYhli0.cjs +0 -800
  567. package/dist/sidebar-B9NR0lCe.cjs +0 -800
  568. package/dist/sidebar-BcJ6LxvX.cjs +0 -733
  569. package/dist/sidebar-BvF5I2Ue.cjs +0 -800
  570. package/dist/sidebar-C5B_LHek.cjs +0 -795
  571. package/dist/sidebar-CA6_ek3f.js +0 -801
  572. package/dist/sidebar-CRMiBtAi.js +0 -801
  573. package/dist/sidebar-CVUGHOS_.cjs +0 -756
  574. package/dist/sidebar-CZ2mWaMM.cjs +0 -800
  575. package/dist/sidebar-CmvwjnVb.js +0 -757
  576. package/dist/sidebar-CplprZpM.js +0 -801
  577. package/dist/sidebar-Dz7bd3zP.js +0 -796
  578. package/dist/sidebar-KIS0C2JH.js +0 -801
  579. package/dist/sidebar-OTO_up7Z.js +0 -801
  580. package/dist/sidebar-WoKvFWCN.js +0 -717
  581. package/dist/sidebar-zowjejT2.cjs +0 -800
  582. package/dist/skeleton-4zoHiFJ_.cjs +0 -83
  583. package/dist/skeleton-C4bHqUBf.js +0 -84
  584. package/dist/slider-C0JKA9k3.js +0 -56
  585. package/dist/slider-CPmwzm_3.cjs +0 -73
  586. package/dist/slider-DcJharR9.cjs +0 -73
  587. package/dist/slider-Pay3fka2.js +0 -56
  588. package/dist/sonner-DeUIj0Zg.cjs +0 -63
  589. package/dist/sonner-g9RIfi35.js +0 -47
  590. package/dist/tooltip-CNtsL5cB.cjs +0 -71
  591. package/dist/tooltip-CTyZCD8h.js +0 -55
  592. package/dist/tooltip-CwgSdy3h.cjs +0 -67
  593. package/dist/tooltip-D-OrYnKO.js +0 -51
  594. package/dist/use-audio-player-BJFV24XW.js +0 -188
  595. package/dist/use-audio-player-Bkh23vQ3.js +0 -177
  596. package/dist/use-audio-player-Dn1NR9xN.cjs +0 -176
  597. package/dist/use-audio-player-DyVYlOnR.cjs +0 -187
  598. package/dist/use-mobile-BB4M_4Ru.cjs +0 -47
  599. package/dist/use-mobile-CLu9nqGL.js +0 -31
  600. package/dist/use-mobile-CNwiBNxu.js +0 -33
  601. package/dist/use-mobile-Dlf74ufz.cjs +0 -49
  602. package/dist/xertica-assistant-B1IaHXnB.cjs +0 -1894
  603. package/dist/xertica-assistant-BMqdyRVi.js +0 -2082
  604. package/dist/xertica-assistant-Bj3vBCq_.cjs +0 -2081
  605. package/dist/xertica-assistant-CfBCo21g.js +0 -2148
  606. package/dist/xertica-assistant-DIM_Do1k.js +0 -1866
  607. package/dist/xertica-assistant-DPsESB6t.js +0 -1878
  608. package/dist/xertica-assistant-DrsRwla1.cjs +0 -2147
  609. package/dist/xertica-assistant-Qp3ydksa.cjs +0 -1882
  610. package/dist/xertica-assistant-gnCJdcZY.js +0 -1866
  611. package/dist/xertica-assistant-yyrR0JKl.cjs +0 -1882
  612. package/styles/xertica/app-overrides/scrollbar.css +0 -33
  613. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +0 -78
  614. package/templates/src/features/home/data/mock.ts +0 -41
  615. package/templates/src/features/home/hooks/useFeatureCards.ts +0 -20
  616. package/templates/src/features/home/store/dashboardStore.ts +0 -25
  617. package/templates/src/features/template/ui/CrudTemplate.tsx +0 -112
  618. package/templates/src/features/template/ui/DashboardTemplate.tsx +0 -110
  619. package/templates/src/features/template/ui/FormTemplate.tsx +0 -117
  620. package/templates/src/features/template/ui/LoginTemplate.tsx +0 -59
  621. package/templates/src/locales/en/pages/crudTemplate.json +0 -25
  622. package/templates/src/locales/en/pages/dashboardTemplate.json +0 -20
  623. package/templates/src/locales/en/pages/formTemplate.json +0 -16
  624. package/templates/src/locales/en/pages/loginTemplate.json +0 -9
  625. package/templates/src/locales/es/pages/crudTemplate.json +0 -25
  626. package/templates/src/locales/es/pages/dashboardTemplate.json +0 -20
  627. package/templates/src/locales/es/pages/formTemplate.json +0 -16
  628. package/templates/src/locales/es/pages/loginTemplate.json +0 -9
  629. package/templates/src/locales/pt-BR/pages/crudTemplate.json +0 -25
  630. package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +0 -20
  631. package/templates/src/locales/pt-BR/pages/formTemplate.json +0 -16
  632. package/templates/src/locales/pt-BR/pages/loginTemplate.json +0 -9
  633. package/templates/vite.config.d.ts +0 -2
  634. package/templates/vite.config.js +0 -20
  635. package/dist/{XerticaXLogo-qBPhwK3g.cjs → LanguageSelector-1cINLJ23.cjs} +80 -80
package/CHANGELOG.md CHANGED
@@ -1,664 +1,705 @@
1
- # Changelog
2
-
3
- All notable changes to `xertica-ui` will be documented in this file.
4
-
5
- Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
- Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ---
9
-
10
- ## [Unreleased]
11
-
12
- ---
13
-
14
- ## [2.5.3] — 2026-06-23
15
-
16
- ### Fixed
17
-
18
- - **Sidebar vazamento horizontal causado pelo `ScrollArea` do Radix UI** o `@radix-ui/react-scroll-area` v1.x injeta `style={{ minWidth: "100%", display: "table" }}` no viewport interno, ignorando o `overflow: hidden` dos ancestors e causando scroll horizontal indesejado na sidebar. Substituídos os dois usos de `<ScrollArea>` no `SidebarNav` (variant `assistant` e accordion de overflow mobile) por `<div>` nativa com `style={{ overflowY: 'auto', overflowX: 'hidden' }}`. O import de `ScrollArea` foi removido do arquivo.
19
-
20
- ---
21
-
22
- ## [2.5.2]2026-06-23
23
-
24
- ### Fixed
25
-
26
- - **TypeScript — erros de tipos `recharts` 3.x no `chart.tsx`** — `TooltipPayload`, `LegendPayload` e `DefaultTooltipContentProps` foram removidos do namespace raiz do recharts 3. Corrigido importando os tipos diretamente de `recharts/types/component/DefaultTooltipContent` e `recharts/types/component/DefaultLegendContent`, anotando explicitamente os parâmetros `item`, `index` e `v` nos callbacks de `payload.map` e `formatter`.
27
-
28
- ### Added
29
-
30
- - **Sidebar — Overflow de `navigationGroups` no variant `default`** — quando a lista de grupos de navegação excede a altura disponível da sidebar, os grupos excedentes são movidos para um botão "mais opções" (`MoreVertical`). No **desktop** abre um `Popover` lateral direito com todos os grupos e itens restantes. No **mobile** expande um accordion inline (abaixo do botão, com animação Framer Motion) e a área de navegação passa a usar `ScrollArea` do design system para scroll, evitando que o conteúdo fique fora da área visível.
31
- - **Storybook — Sidebar `WithSubitemsDesktop` e `WithSubitemsMobile`** — exemplos expandidos com 4 grupos (Principal, Comercial, Comunicação, Administração) e ~18 itens raiz com múltiplos subitens, suficientes para ultrapassar a altura da tela e demonstrar o comportamento de overflow em qualquer resolução.
32
-
33
- ---
34
-
35
- ## [2.5.1] — 2026-06-22
36
-
37
- ### Fixed
38
-
39
- - **CLI `update Theme` tema atual não era pré-selecionado** — o prompt de seleção de tema sempre iniciava no índice 0 (`xertica-original`), independente do tema instalado. Corrigido lendo `themeId` do `.xertica.json` e calculando o índice inicial correspondente. O nome do tema atual é exibido antes da seleção.
40
- - **CLI `update Theme` `themeId` não era persistido** — após trocar o tema, o `.xertica.json` não era atualizado com o novo `themeId`, fazendo com que execuções futuras continuassem sem memória da escolha. Corrigido com `writeXerticaConfig(targetDir, { themeId: selectedTheme.id })` após a escrita do `tokens.css`.
41
- - **CLI `init` — `themeId` não era salvo em `.xertica.json`** — o tema escolhido durante `init` não era persistido no arquivo de configuração do projeto. Corrigido passando `themeId: response.theme` ao `writeXerticaConfig`.
42
- - **`generate-tokens.ts` — `--sidebar-border` no dark mode estava hardcoded** — o valor `rgba(65, 61, 107, 1)` (indigo fixo) era usado para todos os temas. Corrigido usando `colors.darkBorder` para que cada tema utilize sua própria cor de borda tingida.
43
- - **`XerticaConfig` — campo `themeId` faltando na interface** — adicionado campo opcional `themeId?: string` à interface `XerticaConfig` em `bin/cli.ts`.
44
- - **Erros de TypeScript do `recharts` 3.x** atualização da biblioteca quebrou os tipos de `ChartTooltipContent` e `ChartLegendContent`. Corrigido:
45
- - `ChartTooltipContent`: migrado de `React.ComponentProps<typeof Tooltip>` (que omite `payload`/`label` no recharts 3) para tipos explícitos usando `RechartsPrimitive.TooltipPayload` e `DefaultTooltipContentProps['formatter']`
46
- - `ChartLegendContent`: substituído `Pick<LegendProps, 'payload' | 'verticalAlign'>` por `{ payload?: LegendPayload[]; verticalAlign?: ... }` (recharts 3 removeu `payload` de `LegendProps`)
47
- - `DonutBreakdownChart`: removida prop `activeIndex` do `<Pie>` (não existe mais no recharts 3)
48
- - `PieMetricChart`: adicionado guard `if (midAngle == null || percent == null) return null` no callback de label
49
- - `chart.test.tsx`: adicionado `graphicalItemId` obrigatório ao mock de payload
50
-
51
- ### Changed
52
-
53
- - **CLI `update → Theme`** — exibe o tema atual antes do prompt de seleção com `chalk.gray('Current theme: ...')`.
54
-
55
- ---
56
-
57
- ## [2.5.0] — 2026-06-22
58
-
59
- ### Added
60
-
61
- - **Sidebar — Subitens inline no mobile** — em viewports mobile (< 768 px) os itens com `children` agora expandem/colapsam de forma inline (accordion) abaixo do item pai, em vez de abrir um `DropdownMenu` lateral que ficava invisível fora dos limites do container. O botão `ChevronRight` rotaciona 90° ao abrir e os filhos surgem com animação via Framer Motion. No desktop o comportamento de dropdown lateral permanece inalterado.
62
-
63
- - **StorybookStories de sidebar com subitens (desktop e mobile)** — adicionadas duas novas stories na documentação da `Sidebar`:
64
- - `WithSubitemsDesktop` — sidebar iniciada expandida mostrando o botão `ChevronRight` nos itens com filhos e o dropdown lateral ao clicar.
65
- - `WithSubitemsMobile` — simula um viewport de 375 px com header de app mobile (botão hambúrguer). Ao abrir, a sidebar cobre a tela inteira e os subitens expandem inline, permitindo inspeção e ajuste do visual mobile.
66
-
67
- - **Tema de cores Dark mode tingido por hue**todos os tokens de superfície do dark mode (`--background`, `--card`, `--popover`, `--muted`, `--secondary`, `--accent`, `--border`, `--input`) agora são tingidos com a hue da cor primária do tema ativo, em vez de cinza-zinc neutro para todos os temas:
68
- - **primary / xertica-original**: fundo `#05050d` (azul-índigo muito sutil)
69
- - **blue**: fundo `#03050f` (azul marinho profundo)
70
- - **violet**: fundo `#07040f` (violeta escuro)
71
- - **rose**: fundo `#0f0305` (rosa/vermelho escuro)
72
- - **emerald**: fundo `#030f08` (verde escuro)
73
- - **amber**: fundo `#0f0a03` (âmbar escuro)
74
- - **orange**: fundo `#0f0703` (laranja escuro)
75
- - **zinc / slate**: mantêm o azul-índigo sutil (alinhado com o tema default)
76
-
77
- - **`BrandColorsContext` — novos campos `darkBackground`, `darkCard`, `darkMuted`, `darkBorder`** — a interface `BrandColors` em `contexts/theme-data.ts` ganhou 4 novos campos que definem as cores de superfície específicas de cada tema no dark mode. Todos os 9 temas foram atualizados com valores correspondentes.
78
-
79
- - **`XerticaProvider` — nova prop `defaultColorTheme`** — aceita o ID de um `ColorTheme` (ex: `'blue'`, `'rose'`, `'emerald'`) para selecionar o tema de cor completo via props, sem a limitação de passar apenas um hex isolado via `primaryColor`.
80
-
81
- - **Storybook troca de temas de cor funcional** — o toolbar `Brand Color` agora troca o tema completo (primary, sidebar, charts **e** superfícies dark) com total fidelidade. Os valores do toolbar foram migrados de hex brutos para IDs de tema (`xertica-original`, `blue`, `violet`, etc.).
82
-
83
- ### Fixed
84
-
85
- - **`BrandColorsContext` — tokens de superfície dark não refletiam no Storybook** — o `applyColors()` injetava o style tag com `document.head.prepend()`, colocando-o antes de todos os outros estilos. Como os tokens de cor do `tokens.css` apareciam depois (e com seletores de maior especificidade como `:root[data-mode='dark']`), sobrescreviam os valores injetados. Corrigido com três ajustes:
86
- 1. `prepend` `appendChild` para que o style injetado sempre apareça por último no `<head>` e vença na cascata de mesma especificidade.
87
- 2. Os tokens de primary/sidebar/charts/semantic passaram a ser aplicados via `root.style.setProperty()` (inline style no `<html>`), que tem especificidade máxima e sempre vence qualquer regra de stylesheet.
88
- 3. O bloco dark de superfícies usa o seletor `:root[data-mode='dark'], .dark` para igualar a especificidade do `tokens.css` e ser decidido pela ordem de aparição.
89
-
90
- - **`TemplatePage.stories.tsx` erro ao renderizar no Storybook** — o componente `TemplatePage` usa `useAuth()` internamente, mas o decorator das stories não incluía `AuthProvider`. Ao carregar a página de documentação, o hook lançava `"useAuth must be used within <AuthProvider>"`. Corrigido adicionando `AuthProvider` dentro do `MemoryRouter` no decorator.
91
-
92
- - **Sidebar — `isMobileViewport` não consumido em `SidebarNav`** — o valor já existia no `SidebarContext` mas não era lido pelo `SidebarNav`, impedindo a bifurcação entre accordion (mobile) e dropdown (desktop).
93
-
94
- ### Changed
95
-
96
- - **`BrandColorsContext.applyColors` — estratégia de injeção de CSS** — tokens de primary aplicados via inline style (máxima prioridade); tokens de superfície dark injetados via `<style>` tag no final do `<head>`.
97
-
98
- - **Storybook `preview.tsx`toolbar `brandColor`** — os itens do toolbar passaram de hex brutos para IDs de tema; o decorator usa `defaultColorTheme` em vez de `primaryColor` no `XerticaProvider`.
99
-
100
- - **`bin/generate-tokens.ts`** — o bloco dark mode agora usa `colors.darkBackground`, `colors.darkCard`, `colors.darkMuted` e `colors.darkBorder` em vez de valores zinc hardcoded, gerando CSS correto para todos os temas.
101
-
102
- - **Três arquivos `tokens.css`** (`styles/xertica/`, `src/styles/xertica/`, `templates/src/styles/xertica/`) atualizados com os valores dark tingidos para o tema xertica-original (azul-índigo).
103
-
104
- ---
105
-
106
- ## [2.4.1]2026-06-17
107
-
108
- ### Changed
109
-
110
- - **StatsCard Cores de ícone customizáveis** — Adicionadas as propriedades `iconColor` e `iconBg` ao `StatsCard`, permitindo customizar a cor do ícone e o fundo do ícone (que anteriormente eram fixos em `text-muted-foreground` e `bg-muted`). Documentação e histórias do Storybook foram atualizadas correspondendo a essas propriedades.
111
-
112
- ---
113
-
114
- ## [2.4.0] 2026-06-16
115
-
116
- ### Added
117
-
118
- - **CLIAtivação/Desativação de Dark Mode** nova funcionalidade no CLI para ativar ou desativar o dark mode ao criar (`init`) ou atualizar (`update`) o projeto. A escolha do usuário é armazenada em `.xertica.json` na raiz e gera `disableDarkMode={true}` dentro do `<XerticaProvider>` em `App.tsx`. O botão `ThemeToggle` e a aba de switch de temas nas configurações ocultam-se automaticamente caso o dark mode esteja desativado.
119
-
120
- ### Fixed
121
-
122
- - **LayoutCorreção do scroll vertical** — ajustado o comportamento do scroll vertical para travar o viewport com `h-screen overflow-hidden` em `App.tsx` e `AuthGuard.tsx`, bem como `height: 100%; overflow: hidden` no `html, body` em `index.css` e `base.css`. Páginas de autenticação (como login, recuperação de senha, etc.) agora possuem rolagem interna (`h-full overflow-y-auto`), impedindo que o scroll global suba/desloque o cabeçalho (`Header`) e o assistente virtual.
123
-
124
- ---
125
-
126
- ## [2.3.0] 2026-06-15
127
-
128
- ### Added
129
-
130
- - **CLI — Suporte a AI Assistant no `init`** — novo prompt `Include AI Assistant?` (confirm, default: true). Quando desativado, os arquivos `src/features/assistant/`, `src/pages/AssistantPage.tsx` e a rota `/assistente` são omitidos inteiramente. A escolha é persistida em `.xertica.json` na raiz do projeto gerado.
131
- - **CLI`update` Assistant** — nova opção no menu de update para adicionar ou remover o AI Assistant de um projeto existente. Detecta o estado atual via `.xertica.json` (com fallback por presença de arquivos). Ao adicionar: copia `features/assistant/` e `AssistantPage.tsx`. Ao remover: deleta esses arquivos. Em ambos os casos regenera `AuthGuard.tsx`, `HomePage.tsx` e `TemplatePage.tsx` para refletir o novo estado.
132
- - **CLI — `.xertica.json`** — novo arquivo de configuração persistido na raiz do projeto gerado. Armazena flags de features (`hasAssistant`) para que o `update` possa ler o estado atual sem inferir pelos arquivos.
133
- - **CLI — `cli:dev` e `cli:run`** — novos scripts em `package.json` para desenvolvimento e teste local do CLI sem publicar no npm. `cli:dev` compila em modo watch; `cli:run` executa `dist/cli.js` diretamente.
134
- - **CLI — Versão no banner** — `init` e `update` exibem a versão atual na linha de abertura (`v2.3.0`).
135
- - **Geradores de página com/sem assistente** — `generateHomePage(hasAssistant)` e `generateTemplatePage(hasAssistant)` geram versões das páginas sem dependências do assistente quando ele não está incluído, prevenindo erros de import.
136
- - **Design system — Token `--mobile-content-padding`** — novo token CSS em `tokens.css` (`1.25rem`) que controla o padding horizontal do conteúdo em telas mobile. Também mapeado no `theme-map.css` como `--spacing-mobile-content-padding`. A variante `@custom-variant mobile` foi adicionada em `base.css`.
137
- - **i18n`assistant.page.*` nos locales da lib** — as 12 chaves da seção `assistant.page` (`today`, `yesterday`, `thisWeek`, `searchConversations`, `rename`, `delete`, `cancel`, `save`, `deleteConversationTitle`, `deleteConversationDesc`, `renameConversationTitle`, `conversationNameLabel`) foram adicionadas aos locales internos da lib (`locales/pt-BR|en|es/components/assistant.json`). Anteriormente existiam nos locales dos templates, causando chaves brutas na `AssistantPage`.
138
-
139
- ### Fixed
140
-
141
- - **Buildesbuild 0.28 + Tailwind v4 target incompatibility** — `vite.config.ts` agora define `build.target: 'esnext'` e `optimizeDeps.esbuildOptions.target: 'esnext'`, eliminando os 1205 erros `Transforming destructuring to the configured target environment is not supported yet` causados pelo esbuild 0.28 ao tentar fazer downcompile de ES2020+.
142
- - **CLI — Remoção do assistente não detectava estado atual** — quando `.xertica.json` não existia (projeto gerado antes desta versão), `currentlyHas` era sempre `false` mesmo com os arquivos do assistente presentes. Agora há fallback por presença de `src/features/assistant/` e `src/pages/AssistantPage.tsx`.
143
- - **CLI Imports quebrados após remoção do assistente** — `HomePage.tsx` e `TemplatePage.tsx` importavam `../features/assistant` diretamente. Após remoção, esses imports ficavam quebrados. Resolvido: essas páginas agora são geradas dinamicamente pelo CLI (com/sem imports do assistente) em vez de copiadas estaticamente.
144
- - **i18n — Chaves `assistant.page.*` apareciam como texto bruto** — o bundle compilado da lib não incluía a seção `page` nos locales do assistente. Como a lib inicializa o i18next com seus próprios recursos antes do projeto consumidor, as chaves não eram encontradas.
145
-
146
- ### Changed
147
-
148
- - **Padding mobile global** — os containers de conteúdo (`HomeContent`, `TemplateContent`) em `components/pages/` e `templates/src/features/` mudaram de `p-2` para `p-5` em mobile (equivalente a `1.25rem`, alinhado ao token `--mobile-content-padding`). Em `sm:` e `md:` o comportamento permanece inalterado (`p-4` e `p-6` respectivamente).
149
- - **CLI — `update` → Project files → pages** — ao atualizar páginas, `HomePage.tsx` e `TemplatePage.tsx` agora são regeneradas dinamicamente respeitando o estado atual do assistente (lido de `.xertica.json` ou inferido pela presença de `AssistantPage.tsx`), em vez de sobrescritas com a cópia estática do template.
150
-
151
- ---
152
-
153
- ## [2.2.1] — 2026-05-21
154
-
155
- ### Added
156
-
157
- - **i18n — Cobertura completa na página de Template** — `TemplateContent.tsx` e os 4 starter templates (`LoginTemplate`, `FormTemplate`, `DashboardTemplate`, `CrudTemplate`) estão 100% traduzidos (pt-BR, en, es). Anteriormente a maioria dos textos era hard-coded em PT-BR.
158
- - **i18n — Namespace `templates.*` completo** — novo namespace com 539 chaves cobrindo todos os textos visíveis: seções, alertas, abas, formulários, tabela de dados, configurações, botões (variantes/tamanhos), badges, dialogs, sidebar, componentes avançados (Pagination, Stepper, TreeView, RichTextEditor) e rodapé. Suporte completo para `<Trans>` com interpolação de `<code>` nas descrições técnicas.
159
- - **i18nNovos namespaces de starter templates** — 4 novos arquivos de locale por idioma: `loginTemplate`, `formTemplate`, `dashboardTemplate`, `crudTemplate` (total de 12 novos JSONs × 2 mirrors = 24 arquivos).
160
- - **i18n — Estrutura de locales reorganizada** — os monolitos `locales/<lang>.json` foram divididos em pastas por categoria:
161
- - `locales/<lang>/{common,nav,errors,languageSelector,themeToggle}.json` (transversal)
162
- - `locales/<lang>/pages/{home,templates,login,resetPassword,verifyEmail,loginTemplate,formTemplate,dashboardTemplate,crudTemplate}.json`
163
- - `locales/<lang>/components/{assistant,sidebar,media,projectCard,profileCard,notificationCard,activityCard,stats,team}.json`
164
- - **i18n — Loader via `import.meta.glob`** — `i18n.ts` (base e templates) substituiu os 57 imports estáticos por 3 chamadas `import.meta.glob('./locales/<lang>/**/*.json', { eager: true })` + função `bundleLang()`. Adicionar um novo arquivo JSON é suficiente — sem tocar no `i18n.ts`.
165
- - **CLI — Locale em pastas** — `syncLocaleFiles` e `generateI18nFile` em `bin/language-config.ts` atualizados para copiar/gerar a nova estrutura de pastas. Projetos legados com `<lang>.json` flat são migrados automaticamente no próximo `update`.
166
- - **`templates/vite.config.ts` — aliases de monorepo** — aliases automáticos detectam se o `vite.config.ts` está dentro do monorepo (`../components/index.ts` existe) e apontam `xertica-ui/*` diretamente para o source TypeScript, permitindo HMR sem rebuild da lib. Em projetos gerados pelo CLI, o check retorna `false` e `xertica-ui` resolve do `node_modules` normalmente.
167
- - **CLILanguage selection on `init`** — `npx xertica-ui init` now prompts for the languages the project should support (multi-select with `pt-BR`, `en`, `es`; all selected by default; minimum 1). The CLI:
168
- - Copies **only** the locale folders for the selected languages into `src/locales/` (no orphan locales)
169
- - Generates `src/i18n.ts` with `import.meta.glob` calls for exactly those languages
170
- - Injects the `availableLanguages` prop into the generated `src/app/App.tsx`
171
- - Persists the selection in `src/locales/.languages.json` (schema v1)
172
- - **CLI — `update` → Languages** — new option in the `update` command lets users add or remove languages later. Shows a diff (`+ es`, `- en`) before confirming. Regenerates `App.tsx`, `i18n.ts`, copies new locale folders, and prunes removed ones.
173
- - **CLI — Monolingual auto-detection** when only one language is selected, the generated `App.tsx` includes a banner comment documenting that the `LanguageSelector` will auto-hide.
174
- - **`bin/language-config.ts`**new module encapsulating the supported-language registry (`SUPPORTED_LANGUAGES`), code generators (`generateI18nFile`, `generateAppTsx`), and persistence helpers (`readLanguagesConfig`, `writeLanguagesConfig`, `syncLocaleFiles`).
175
-
176
- ### Fixed
177
-
178
- - **Dark mode toggle no CLI** — `XerticaProvider` no `templates/src/app/App.tsx` era gerado com `disableDarkMode` hard-coded, tornando o `ThemeToggle` um no-op. Removido de `App.tsx`, do template literal do CLI em `bin/language-config.ts` e do exemplo em `templates/CLAUDE.md`.
179
-
180
- ### Changed
181
-
182
- - **CLI`update` Project files (`app` branch)** — instead of blindly overwriting `App.tsx` and `i18n.ts` with the static template (which would erase the user's language selection), the update flow now reads the persisted selection from `src/locales/.languages.json` and regenerates these files honoring it. Projects scaffolded before this feature shipped get their selection inferred from the locale files present and the inferred config is written back.
183
- - **`DashboardTemplate`**`StatsCard` deixou de chamar `useTranslation()` internamente; o sufixo de tendência (`lastMonth`) é resolvido no pai e passado como prop, reduzindo o número de subscribers i18n de 5 para 1.
184
- - **`TemplateContent`dialog inputs controlados** — os `Input` do dialog "Editar Perfil" foram convertidos de `defaultValue` (uncontrolled) para `value`/`onChange` com lazy `useState`, garantindo que o valor reflita o idioma ativo no momento da montagem sem sobrescrever edições do usuário.
185
- - **`TemplateContent` — `treeData` movido para dentro do componente** — os labels dos nós do TreeView (`Components`, `UI`, `Button`…) agora reagem ao switch de idioma em tempo real, pois `treeData` é construído após `const { t } = useTranslation()`.
186
-
187
- ---
188
-
189
- ## [2.1.11] 2026-05-20
190
-
191
- ### Fixed
192
-
193
- - **CLI Initialization** — Correções essenciais no comando `init`:
194
- - `i18n.ts` e o diretório `locales/` agora são copiados corretamente, restaurando as traduções na aplicação gerada.
195
- - `AuthContext.tsx` e dependências agora são incluídas, habilitando o hook `useAuth`.
196
- - A geração do `AuthGuard.tsx` foi reconstruída de forma dinâmica para consumir corretamente o `useAuth()` e garantir integridade das rotas protegidas e abertas, suportando _lazy loading_ dinâmico das rotas de acordo com a seleção do usuário.
197
- - O diretório `features/assistant/` agora é sempre copiado visto que o `AppLayout` depende nativamente da `AssistantPage`.
198
- - **Template Lints** Resolução de diversos `unused-vars` (variáveis e imports órfãos) espalhados pelo `HomeContent.tsx`, `TemplateContent.tsx`, `AssistantPage.tsx` e `AuthContext.tsx`, garantindo que o `npm run check` (`tsc` + `eslint`) execute com 100% de sucesso imediatamente após a geração do projeto.
199
- - **`LanguageSelector` e `LanguageContext`**Correção de bugs na seleção de idiomas e fallback:
200
- - `LanguageContext.tsx` agora valida de forma robusta e intercepta valores legados como `'PT'` no `localStorage`, realizando um _fallback_ seguro para `'pt-BR'`.
201
- - O componente `LanguageSelector.tsx` foi ajustado na sua composição com Radix UI: a dependência restritiva do `<SelectValue>` foi removida no trigger, evitando a sobrescrita do conteúdo. Agora o componente exibe a variante `minimal` (como `PT`, `EN`, `ES`) perfeitamente, sincronizada com o estado global de tradução.
202
-
203
- ---
204
-
205
- ## [2.1.10]2026-05-20
206
-
207
- ### Added
208
-
209
- - **`AuthContext` / `useAuth()`** novo contexto de autenticação em `contexts/AuthContext.tsx`. `AuthProvider` gerencia sessão via `localStorage`, expõe `user`, `isLoading`, `login(email, password) → boolean` e `logout()`. `isLoading` previne flashes de redirect durante hidratação. O `AuthProvider` deve ser montado dentro do `<Router>` (depende de `useNavigate`).
210
- - **`ErrorBoundary` três variantes pré-configuradas** em `components/shared/error-boundary.tsx`:
211
- - `AppErrorBoundary` envolve todo o `App` antes dos providers; fallback full-screen com inline styles (funciona mesmo se o Tailwind falhar)
212
- - `PageErrorBoundary` envolve `<Routes>` / `<AuthGuard>`; captura lazy-chunk failures e erros de renderização de página
213
- - `SectionErrorBoundary` — envolve seções isoladas (tabelas, charts, assistente); um seção quebrada não derruba a página
214
- - Props: `onError` (callback para Sentry/Datadog), `resetKeys` (auto-reset quando um valor muda, ex: `[location.pathname]`)
215
- - **i18n completo com `i18next` + `react-i18next`** integração completa de internacionalização:
216
- - Arquivo `i18n.ts` configurado com `pt-BR` (padrão), `en` e `es`
217
- - Locale files em `locales/pt-BR.json`, `en.json`, `es.json` com namespaces: `common`, `nav`, `home`, `stats`, `team`, `assistant`, `languageSelector`
218
- - `LanguageContext.setLanguage()` agora chama `i18n.changeLanguage()` — todos os `useTranslation()` re-renderizam
219
- - `HomeContent.tsx` e `TemplateContent.tsx` usam `useTranslation()` para todos os textos
220
- - Mock data usa `i18n.t()` (instância) para responder ao idioma ativo no `queryFn`
221
- - **`features/` — camada de estado separada da UI**:
222
- - `features/home/data/mock.ts` — tipos + dados mock + funções `fetch*()` (swap point para API real)
223
- - `features/home/hooks/` — `useDashboardStats`, `useTeamMembers`, `useFeatureCards` (TanStack React Query)
224
- - `features/home/store/dashboardStore.ts` Zustand (progress, slider, switch, activeTab)
225
- - `features/assistant/data/mock.ts` — `AssistantConfig` + `fetchAssistantConfig()`
226
- - `features/assistant/hooks/useAssistantConfig.ts` — React Query, staleTime 30 min
227
- - **`QueryClientProvider`** adicionado ao stack de providers em `App.tsx` como camada mais externa (abaixo de `AppErrorBoundary`)
228
- - **Lazy loading** em todas as rotas via `React.lazy()` + `<Suspense fallback={null}>` — cada página é um chunk separado
229
- - **`ProtectedRoute` + `GuestRoute`** como componentes de guarda de rota baseados em `useAuth()` — eliminam lógica de redirect do `AuthGuard`
230
- - **`components/shared/navigation.ts`**fonte canônica de `RouteConfig`, `routes[]`, `getRouteByPath` e `isValidRoute` para o app devops (substituiu `routes.tsx` na raiz)
231
-
232
- ### Changed
233
-
234
- - **`LanguageSelector` refatorado para usar `LanguageContext` e `i18next`** removidos `useState` local, props `initialLanguage` e `onLanguageChange`. O componente agora lê de `useLanguage()` e chama `i18n.changeLanguage()` diretamente. `aria-label` e labels dos itens são traduzidos via `useTranslation()`. **Breaking**: `initialLanguage` e `onLanguageChange` foram removidos da API pública.
235
- - **`LanguageContext` — conectado ao `i18next`** — `setLanguage(lang)` persiste no `localStorage` E chama `i18n.changeLanguage(lang)` em uma única operação. Type mismatch corrigido: `LanguageSelector` usava `'pt'`, contexto usava `'pt-BR'` — unificado para `'pt-BR'`.
236
- - **`App.tsx` — limpeza da lógica de tema duplicada** — removidos IIFE top-level e `useLayoutEffect` que manipulavam `localStorage`/`classList` para garantir light mode. O `ThemeProvider` já gerencia isso corretamente; as camadas redundantes conflitavam.
237
- - **`HomePage` + `TemplatePage` sem props `user`/`onLogout`** ambos consomem `useAuth()` diretamente; prop-drilling eliminado em toda a árvore de páginas (`HomeContent`, `TemplateContent`, `AppLayout`).
238
- - **`routes.tsx` deletado** conteúdo movido para `components/shared/navigation.ts`; todos os imports atualizados.
239
-
240
- ### Fixed
241
-
242
- - **`useRichTextEditor` `wordCount`/`characterCount` agora são `useState`** as IIFEs que calculavam os contadores a cada render foram substituídas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente após cada digitação; um `useEffect([value])` os sincroniza quando o valor é alterado externamente.
243
- - **`useRichTextEditor` — `eslint-disable` removido do effect de seleção** — o effect único de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantém `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
244
- - **`useAssistant` — timers vazados corrigidos** — `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
245
- - **`useAssistant` — hydration one-shot de `initialMessages`** — `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
246
- - **`useAssistant`scroll condicional ≤ 120px** — o auto-scroll só aciona `scrollIntoView` quando o usuário está a menos de 120 px do fundo, preservando a posição durante leitura de histórico.
247
- - **`useAudioPlayer` — `eslint-disable` removido do effect de modo-switch** — `currentTimeRef` e `isPlayingRef` (latest-ref pattern) substituem referências diretas ao estado dentro do effect `[isFloating, variant]`, eliminando a necessidade do disable de lint.
248
- - **`useStepper` — `initialStep` inválido** — lazy initializer com `Math.min(Math.max(1, initialStep), totalSteps)` garante que o estado inicial nunca fique fora do intervalo `[1, totalSteps]`.
249
- - **`useTreeView` — `Space` e `Enter` separados** — `Space` expande/colapsa nós-pai e seleciona folhas; `Enter` expande/colapsa e sempre seleciona, alinhando com WAI-ARIA Tree Pattern 1.2.
250
- - **`sidebar.tsx` — loop de re-render corrigido** dependência do effect de overflow revertida de `navigationItems` para `navigationItems.length` para evitar loop causado pela nova referência de array gerada pelo `useMemo` a cada mudança de rota.
251
- - **`useAssistant` — `setConversas(savedConversations)` em loop corrigido** removido `useEffect` que chamava `setConversas` com `savedConversations = []` (default do destructuring), causando re-render infinito.
252
-
253
- ### Changed (continued)
254
-
255
- - **`RichTextEditor` ARIA no `contentEditable`** — adicionados `role="textbox"`, `aria-multiline`, `aria-label`, `aria-readonly` e `aria-disabled` no div editável. Removido o texto "Auto-save ativo" do rodapé.
256
- - **`Stepper` — ARIA de lista** o wrapper dos steps recebe `role="list"` + `aria-label="Progresso: etapa N de M"`. Cada `<Step>` recebe `role="listitem"`, `aria-current="step"` (quando ativo) e `aria-label` composto com status.
257
- - **`Pagination` — prop `disabled` em `PaginationLink`** `PaginationLink` aceita `disabled?: boolean`; aplica `pointer-events-none opacity-50`, `aria-disabled`, `tabIndex={-1}` e remove `href`. `PaginationPrevious` e `PaginationNext` repassam `disabled`.
258
- - **`usePagination` algoritmo deduplicado com `Set`** reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez.
259
- - **`TreeView` prop `ariaLabel` + roving tabindex** `<TreeView>` aceita `ariaLabel?: string`; roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id`.
260
- - **`DashboardBarChart` `topOfStack` com `useMemo`** — IIFE extraída para `React.useMemo([stacked, chartSeries])` antes do `return`.
261
- - **`useAssistant` `conversasFiltradas` com `useMemo`** e tipos fortalecidos (`handleEnviarMensagem: (arg?: string | ActionType) => Promise<void>`).
262
- - **`sidebar.tsx`ARIA** — botão de toggle recebe `aria-expanded` e `aria-controls="sidebar-nav"`; `<nav>` recebe `id="sidebar-nav"` e `aria-label="Navegação principal"`. `navigationItems` memoizado com `useMemo`.
263
-
264
- ---
265
-
266
- - **`useRichTextEditor``wordCount`/`characterCount` agora são `useState`** as IIFEs que calculavam os contadores a cada render foram substituídas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente após cada digitação; um `useEffect([value])` os sincroniza quando o valor é alterado externamente.
267
- - **`useRichTextEditor``eslint-disable` removido do effect de seleção** o effect único de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantém `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
268
- - **`useAssistant` timers vazados corrigidos** `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
269
- - **`useAssistant` hydration one-shot de `initialMessages`** `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
270
- - **`useAssistant` scroll condicional 120px** o auto-scroll aciona `scrollIntoView` quando o usuário está a menos de 120 px do fundo, preservando a posição durante leitura de histórico.
271
- - **`useAudioPlayer``eslint-disable` removido do effect de modo-switch** `currentTimeRef` e `isPlayingRef` (latest-ref pattern) substituem referências diretas ao estado dentro do effect `[isFloating, variant]`, eliminando a necessidade do disable de lint.
272
- - **`useStepper` — `initialStep` inválido** — lazy initializer com `Math.min(Math.max(1, initialStep), totalSteps)` garante que o estado inicial nunca fique fora do intervalo `[1, totalSteps]`.
273
- - **`useTreeView` — `Space` e `Enter` separados** — `Space` expande/colapsa nós-pai e seleciona folhas; `Enter` expande/colapsa e sempre seleciona, alinhando com WAI-ARIA Tree Pattern 1.2.
274
-
275
- ### Changed
276
-
277
- - **`RichTextEditor` — ARIA no `contentEditable`**adicionados `role="textbox"`, `aria-multiline`, `aria-label`, `aria-readonly` e `aria-disabled` no div editável. Removido o texto "Auto-save ativo" do rodapé (informação sem valor de UX).
278
- - **`Stepper` — ARIA de lista**o wrapper dos steps recebe `role="list"` + `aria-label="Progresso: etapa N de M"`. Cada `<Step>` recebe `role="listitem"`, `aria-current="step"` (quando ativo) e `aria-label` composto com status (atual/concluída).
279
- - **`Pagination` — prop `disabled` em `PaginationLink`** — `PaginationLink` aceita `disabled?: boolean`; quando ativo aplica `pointer-events-none opacity-50`, `aria-disabled`, `tabIndex={-1}` e remove `href`. `PaginationPrevious` e `PaginationNext` repassam `disabled` ao link.
280
- - **`usePagination` — algoritmo deduplicado com `Set`** — o cálculo de `items` foi reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez, eliminando edge cases do algoritmo anterior com `leftSibling === 2` / `rightSibling === totalPages - 1`.
281
- - **`TreeView` — prop `ariaLabel` + roving tabindex** — `<TreeView>` aceita `ariaLabel?: string` (padrão `"Navegação em árvore"`) aplicado ao `role="tree"`. O `tabIndex` de cada item usa roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id` em vez de `isSelected ? 0 : -1`.
282
- - **`DashboardBarChart` — `topOfStack` com `useMemo`** — a IIFE que calculava o conjunto de barras do topo do stack no JSX foi extraída para `React.useMemo([stacked, chartSeries])` antes do `return`, separando lógica de render.
283
- - **`useAssistant` — `conversasFiltradas` com `useMemo`** — substituída computação inline por `useMemo([conversas, abaSelecionada])`.
284
- - **`useAssistant` — sincronização de `conversas` com `savedConversations`** adicionado `useEffect([savedConversations])` que mantém `conversas` em sync com a prop `savedConversations`.
285
- - **`useAssistant` — tipos fortalecidos** — `handleEnviarMensagem` tipado como `(arg?: string | ActionType) => Promise<void>` na interface e na implementação, substituindo `string | any`.
286
- - **`sidebar.tsx` — ARIA e `useMemo`** — botão de toggle recebe `aria-expanded` e `aria-controls="sidebar-nav"`; o `<nav>` recebe `id="sidebar-nav"` e `aria-label="Navegação principal"`. `labelTranslations` e `navigationItems` memoizados com `useMemo`; dependência do effect de overflow atualizada de `navigationItems.length` para `navigationItems`.
287
-
288
- ---
289
-
290
- ## [2.1.4]2026-05-19
291
-
292
- ### Changed
293
-
294
- - **`XerticaAssistant` — decomposição em sub-componentes** — o componente monolítico (1 468 linhas) foi dividido em 9 sub-componentes focados em `parts/`: `AssistantHeader`, `AssistantCollapsedView`, `AssistantTabBar`, `AssistantWelcomeScreen`, `AssistantMessageBubble`, `AssistantTypingIndicator`, `AssistantConversationList`, `AssistantFeedbackDialog` e `AssistantDocumentEditor`. A API pública (`XerticaAssistantProps`) permanece 100% compatível.
295
- - **`useAudioPlayer` — headless hook** — toda a lógica do `AudioPlayer` foi extraída para `components/media/audio-player/use-audio-player.ts`. O componente `AudioPlayer` agora consome o hook internamente; API pública inalterada. O hook é exportado via `components/hooks/index.ts`.
296
- - **`useLayoutShortcuts` — headless hook**registro de atalhos de teclado (Ctrl+B, Ctrl+I) extraído do `LayoutContext` para `components/hooks/use-layout-shortcuts.ts`. Exportado via `components/hooks/index.ts`.
297
- - **`CustomTooltipContent` — componente compartilhado** — implementação duplicada de tooltip customizado (existia em `sidebar.tsx` e `xertica-assistant.tsx`) consolidada em `components/shared/CustomTooltipContent.tsx`.
298
- - **`useIsMobile` — fonte única de detecção mobile** — `use-sidebar.ts`, `use-assistant.ts`, `LayoutContext.tsx` e `AudioPlayer.tsx` agora importam de `components/shared/use-mobile.ts` em vez de duplicar a lógica de `matchMedia`.
299
- - **`utils/color-utils.ts` — utilitários de cor**funções `hexToRgb`, `hexToRgba` e `isLightColor` extraídas do `BrandColorsContext` para `utils/color-utils.ts` como funções puras reutilizáveis.
300
- - **`ThemeToggle` — usa `useTheme()`** substituída referência direta ao `localStorage` pelo hook `useTheme()` do `ThemeContext`.
301
- - **`types.ts` — fonte única de tipos do assistente** — `Message`, `Conversation`, `Suggestion`, `MockResponse`, `SearchResult`, `SearchSource`, `SearchCommand` e enums relacionados movidos para `components/assistant/xertica-assistant/types.ts`. `xertica-assistant.tsx` e `AssistenteContext.tsx` re-exportam os tipos para backward compatibility.
302
-
303
- ---
304
-
305
- ## [2.1.3] — 2026-05-16
306
-
307
- ### Added
308
-
309
- - **Headless hooks 4 new logic-only hooks** — all logic extracted from their UI components into standalone, tree-shakeable hooks:
310
- - **`useFileUpload`**drag state, file validation (size + count), error messaging, and hidden input ref. Props: `maxFiles`, `maxSize`, `onFilesChange`, `onError`, `disabled`. Returns: `files`, `dragActive`, `errorMessage`, `inputRef`, `handleFiles`, `handleDrag`, `handleDrop`, `handleChange`, `removeFile`, `openFileDialog`.
311
- - **`usePagination`**computes the full page item list (page numbers + ellipsis markers) and exposes navigation helpers. Supports controlled (`page` prop) and uncontrolled modes. Props: `totalItems`, `pageSize`, `initialPage`, `page`, `onPageChange`, `siblingCount`. Returns: `currentPage`, `totalPages`, `startIndex`, `endIndex`, `canGoPrev`, `canGoNext`, `isFirstPage`, `isLastPage`, `items: PaginationPageItem[]`, `goTo`, `next`, `prev`, `first`, `last`.
312
- - **`useStepper`**step navigation with optional async `onBeforeNext` guard for per-step validation. Supports controlled (`step` prop) and uncontrolled modes. Props: `totalSteps`, `initialStep`, `step`, `onStepChange`, `onBeforeNext`. Returns: `currentStep`, `totalSteps`, `isFirstStep`, `isLastStep`, `canGoPrev`, `canGoNext`, `next` (async), `prev`, `goTo`, `reset`.
313
- - **`useTreeView`**expand/collapse state, single-node selection, full WAI-ARIA keyboard navigation (Arrow keys, Home, End, Space), and DOM focus management via `nodeRefs`. Supports controlled `selectedNodeId`. Returns: `expanded`, `effectiveSelectedId`, `nodeRefs`, `getNodeRef`, `toggleExpand`, `handleSelect`, `handleKeyDown`, `getVisibleNodes`.
314
- - **New chart types4 new Recharts wrappers** added to `components/ui/chart/chart.tsx`:
315
- - **`RadarMetricChart`** — multi-axis radar chart with optional fill, dots, and multi-series overlay.
316
- - **`PieMetricChart`** — pie chart with optional percentage labels and exploded slice support.
317
- - **`RadialBarMetricChart`** — radial bar chart with stacked rings and configurable arc angle.
318
- - **`GaugeChart`**pure SVG semicircle gauge with needle, threshold color zones, and optional label. Supports `thresholds` array for dynamic color changes at value breakpoints.
319
- - **Chart color tokens expanded** — added `--chart-6`, `--chart-7`, `--chart-8` tokens to `styles/xertica/tokens.css`, `templates/src/styles/xertica/tokens.css`, and `bin/generate-tokens.ts`. All 8 chart tokens now use a vibrant, accessible palette.
320
- - **Headless hook stories** added `HeadlessHook` story variant to `file-upload.stories.tsx`, `pagination.stories.tsx`, `stepper.stories.tsx`, and `tree-view.stories.tsx` demonstrating fully custom UIs built with each hook.
321
-
322
- ### Fixed
323
-
324
- - **`GaugeChart` — filled-blob visual bug for values > 50%** — the SVG arc `largeArc` flag was set to `1` when `percent > 0.5`, causing the arc command to draw the reflex arc (> 180°) which rendered as a solid filled blob. Since the gauge is a semicircle (max 180°), `largeArc` is always `0`. Removed the conditional entirely and hardcoded `0` for both arc commands.
325
- - **`GaugeChart` — needle overlapping value text** — the value text at `y=cy+4` was directly behind the needle pivot circle. Fixed by expanding the SVG `viewBox` from `"0 0 200 110"` to `"0 0 200 130"` and moving the value text to `y=cy+18` (13 px below the needle base circle bottom) and the label text to `y=cy+36`.
326
-
327
- ### Changed
328
-
329
- - **`FileUpload` component** — refactored to consume `useFileUpload` internally; public API unchanged.
330
- - **`TreeView` component** — refactored to consume `useTreeView` internally; public API unchanged.
331
- - **`Stepper` component** refactored to consume `useStepper` internally; public API unchanged.
332
- - **Documentation** — updated `docs/components/chart.md`, `docs/components/file-upload.md`, `docs/components/pagination.md`, `docs/components/stepper.md`, and `docs/components/tree-view.md` with full hook API reference, props/return tables, controlled/uncontrolled examples, and AI Rules sections.
333
-
334
- ---
335
-
336
- ## [2.1.2]2026-05-14
337
-
338
- ### Fixed
339
-
340
- - **`MarkdownMessage` — suporte a tabelas GFM** — o parser regex do componente não convertia blocos de tabela Markdown (`| col | col |`) em HTML. Adicionada transformação de tabelas GFM completa (header, separador, linhas de dados) com estilos do design system (`border-border`, `hover:bg-muted/50`, `rounded-[var(--radius)]`, `overflow-x-auto`). A transformação roda antes das substituições de quebra de linha para evitar `<br/>` dentro das células.
341
-
342
- ### Added
343
-
344
- - **Template — `AssistantPage`** — nova página de assistente completa: sidebar em modo `assistant` aberta por padrão (largura 320px), botão "Nova Conversa" (`variant="secondary"`), busca de conversas com filtro em tempo real, histórico de 8 conversas de exemplo em 3 grupos (Hoje / Ontem / Esta semana), modal de exclusão com `AlertDialog`, modal de renomeação com `Dialog` + `Input`, simulação de conteúdo ao selecionar conversa via `initialMessages`, botão "Voltar" em `variant` primário no `Header`.
345
- - **Template — `AppLayout`** — novas props `sidebarVariant?: 'default' | 'assistant'` e `sidebarProps?: Record<string, any>` para permitir que páginas customizem a sidebar sem quebrar o contrato do layout.
346
-
347
- ---
348
-
349
- ## [2.1.1] — 2026-05-14
350
-
351
- ### Fixed
352
-
353
- - **XerticaAssistanttab bar oculta em modo chat-only** — quando `showHistory` e `showFavorites` estão ambas desativadas, a barra de abas (incluindo a aba "Chat") deixa de ser renderizada, eliminando a exibição de uma aba isolada sem alternativas de navegação.
354
- - **`xertica-ui/style.css`import duplo de Roboto removido** o `@import url(Google Fonts/Roboto)` foi removido de `styles/globals.css`. A importação da fonte passa a ser responsabilidade do app consumidor, eliminando o alerta `@import must precede all other statements` do PostCSS quando o CSS compilado era injetado após o output do Tailwind v4.
355
-
356
- ---
357
-
358
- ## [2.1.0]2026-05-13
359
-
360
- ### Added
361
-
362
- - **`components/blocks/card-patterns/`** — novo domínio `blocks/` com 6 componentes de alto nível compostos exclusivamente de primitivos `ui/`:
363
- - **`FeatureCard`** — ícone com fundo colorido, título, badge opcional, descrição e botão de ação. Suporta 10 tokens de cor (`primary`, `chart-1..5`, `success`, `info`, `warning`, `destructive`). Replica o padrão de cards da Home page.
364
- - **`ActivityCard`** — feed de atividades recentes com avatar, descrição de ação, timestamp e badge por tipo (`create`, `update`, `delete`, `comment`, `deploy`).
365
- - **`ProfileCard`**card de usuário/membro com avatar, badge de status (`online`, `offline`, `away`, `busy`), linha de stats e ações primária/secundária.
366
- - **`ProjectCard`**status de projeto com badge, barra de progresso (usa `Progress` com variant semântica por status), stack de avatares de membros e data limite.
367
- - **`QuickActionCard`** — tile de ação rápida com ícone em caixa colorida, badge e botão full-width.
368
- - **`NotificationCard`** — lista de notificações com indicador de não-lido, badge de tipo, "Marcar todas como lidas" e "Ver todas".
369
- - **Exportação do domínio `blocks/`** — todos os componentes disponíveis via `import { ... } from 'xertica-ui'` e via `components/blocks/index.ts`.
370
- - **Subpath público `xertica-ui/blocks`** `FeatureCard`, `ActivityCard`, `ProfileCard`, `ProjectCard`, `QuickActionCard` e `NotificationCard` agora podem ser importados diretamente de `xertica-ui/blocks`.
371
- - **Subpath público `xertica-ui/pages`** `LoginPage`, `HomePage`, `TemplatePage`, `ForgotPasswordPage`, `ResetPasswordPage`, `VerifyEmailPage` e seus contents agora são publicados com entrypoint dedicado.
372
- - **Documentação**criado `docs/components/card-patterns.md` com props, exemplos e layout de dashboard completo para todos os 6 block components.
373
-
374
- ### Changed
375
-
376
- - **Calendar — dropdown caption styling** — quando `captionLayout="dropdown"` ou variações, os seletores de mês/ano agora têm visual de input (borda, fundo `bg-background`, focus ring `ring-primary`, `rounded-[var(--radius)]`, padding compacto fixo `px-2.5 py-1`). O `caption_label` em modo dropdown passa a usar `h-full w-full` com layout flexível.
377
- - **Calendarprop `size` removida** — o tamanho e o arredondamento do trigger ("Pick a date") são responsabilidade do elemento trigger, não do `Calendar`. A story `InPopover` demonstra o padrão correto com `triggerSizeClasses` aplicado diretamente ao `<Button>` com `rounded-[var(--radius)]` para alinhar com o token do `Input`.
378
- - **Card stories** — enriquecidas com 3 novas variações: `WithAction` (uso de `CardAction` no header), `TeamMember` (grid de member cards com avatar e status), `SettingsCard` (lista de settings com `Separator` e `Badge`). Background `bg-muted` adicionado via decorator global da stories file para contraste com o fundo dos cards.
379
- - **Storybook — docs stories** — adicionado `render: (args) => <Component {...args} />` no nível do `meta` em todos os 60 arquivos de stories em `components/ui/`. Resolve o problema onde stories com apenas `args` (sem `render` explícito) mostravam a mesma variação repetida na aba Docs por dependerem do `projectAnnotations.render` implícito do framework React.
380
- - **Storybook — `preview.tsx`** — `min-h-screen` passou a ser condicional a `layout: 'fullscreen'`, resolvendo a altura excessiva dos exemplos na aba Docs.
381
- - **Template npm** — `templates/package.json` atualizado para `2.1.0` e dependência `xertica-ui` para `^2.1.0`.
382
- - **Template version badge** — o template passa a exibir um indicador visual discreto da versão do pacote `xertica-ui` usada pelo projeto.
383
- - **Documentação** — atualizados `calendar.md` (props `captionLayout`/`buttonVariant`, nota sobre `size` no trigger), `card.md` (`CardAction` na anatomia, exemplos WithAction/Stats/TeamMember/Settings), `chart.md` (nova seção Stacked Bar Chart), `architecture.md` (domínio `blocks/` com árvore de arquivos).
384
-
385
- ### Fixed
386
-
387
- - **Chart — stacked bar radius** — em `DashboardBarChart` com `stacked`, apenas a série no topo de cada `stackId` recebe `radius={[4,4,0,0]}`; as demais recebem `radius={[0,0,0,0]}`. Elimina a borda arredondada no topo das barras intermediárias e inferiores da pilha.
388
- - **`FeatureCard` — badge overflow** — alterado de `flex items-center` para `flex flex-wrap` no container título+badge, garantindo que o badge quebre para a linha seguinte em vez de vazar fora do card quando o título ocupa toda a largura disponível.
389
-
390
- ---
391
-
392
- ## [2.0.6] — 2026-05-13
393
-
394
- ### Added
395
-
396
- - **Contrato de independência dos componentes** — documentado que `xertica-ui/style.css` é a única importação global obrigatória e que componentes públicos devem funcionar isoladamente sempre que possível.
397
- - **`useOptionalLayout`** — nova API compatível para componentes reutilizáveis consumirem o layout com fallback seguro, mantendo `useLayout` como hook estrito para apps que querem falhar cedo.
398
- - **Smoke tests de API pública** — adicionada validação de import/render dos subpaths públicos (`ui`, `brand`, `layout`, `assistant`, `media` e `hooks`).
399
- - **Exports públicos de Maps** `useMapLayers`, `GOOGLE_MAPS_ID` e `GOOGLE_MAPS_LIBRARIES` agora são expostos pelo subpath `xertica-ui/ui`.
400
-
401
- ### Changed
402
-
403
- - **`XerticaProvider` completo** passa a compor providers de theme, brand colors, language, layout, assistant, API keys, Google Maps, tooltip e toaster como wrapper de conveniência para apps consumidores.
404
- - **Componentes com contexto de layout** `Header`, `Sidebar`, páginas e componentes de mídia foram ajustados para renderizar com fallback interno quando importados sem provider.
405
- - **Arquitetura FSD/FDA** tipos compartilhados do assistant foram movidos para camada neutra, evitando dependência runtime de `components/shared` para implementação de feature.
406
- - **Documentação LLM e componentes** README, docs de provider/mapa, `llms.txt`, `llms-compact.txt` e `docs/llms.md` foram alinhados ao contrato de independência e aos subpaths consumíveis.
407
- - **Storybook Docs de UI** páginas MDX dos componentes de UI agora renderizam as variações reais das stories, evitando repetição do mesmo exemplo nos blocos de variação.
408
- - **Storybook Maps** stories de mapa usam um frame responsivo mais largo para melhorar a visualização na aba Docs.
409
-
410
- ### Fixed
411
-
412
- - **Guards de browser/SSR**providers e componentes browser-only agora protegem acessos a `window`, `document`, `localStorage`, `navigator` e scripts externos.
413
- - **Google Maps sem configuração** — componentes relacionados a Maps renderizam estados de configuração/erro sem quebrar a aplicação consumidora.
414
-
415
- ---
416
-
417
- ## [2.0.5] 2026-05-12
418
-
419
- ### Added
420
-
421
- - **`llms-compact.txt`** — novo arquivo de referência compacto para LLMs, sintetizando todos os componentes em formato reduzido ideal para contextos de tokens limitados.
422
- - **`docs/decision-tree.md`**guia de árvore de decisão para agentes de IA selecionarem o componente correto com base nos requisitos da UI.
423
- - **`templates/CLAUDE.md`** `CLAUDE.md` agora é scaffolded automaticamente em projetos criados via `npx xertica-ui@latest init`, fornecendo contexto arquitetural (FSD/FDA, subpath imports, tokens semânticos) para Claude Code e outros assistentes de IA.
424
- - **Storybook stories** — adicionadas stories interativas para Accordion, AlertDialog, Button, Checkbox, Dialog, Input, Switch, Tabs, HomePage e TemplatePage.
425
- - **`components/pages/home-page/home-page.mdx`** e **`template-page.mdx`** — novas entradas de documentação MDX para as page components.
426
-
427
- ### Changed
428
-
429
- - **`guidelines/Guidelines.md`**reescrita completa do guia de arquitetura FSD/FDA: maior detalhamento de responsabilidades por camada, convenções de import e fluxo de adição de novas rotas.
430
- - **`components.json`** — atualização completa do registro de componentes, cobrindo todos os 97 componentes com metadados de subpath, props e variantes.
431
- - **`llms.txt`** — seção de subpath imports e mapeamento de camadas FSD/FDA atualizados.
432
- - **`vite.config.ts`** — ajustes no build multi-entry para garantir correta emissão dos arquivos CJS/ESM.
433
-
434
- ### Fixed
435
-
436
- - **`npx xertica-ui init` usa versão em cache** — documentado que o npx armazena pacotes em cache localmente sem TTL curto. Sempre use `npx xertica-ui@latest init` para garantir a versão mais recente. O `templates/CLAUDE.md` scaffolded no projeto gerado inclui essa orientação.
437
-
438
- ---
439
-
440
- ## [2.0.3]2026-05-11
441
-
442
- ### Added
443
-
444
- - **CLI `update` — atualização de projeto** — novo modo no comando `update` permite atualizar os arquivos do projeto (app shell, shared, features, pages) para qualquer versão publicada do `xertica-ui`, com seleção granular de quais partes atualizar e confirmação antes de sobrescrever.
445
-
446
- ---
447
-
448
- ## [2.0.2]2026-05-11
449
-
450
- ### Fixed
451
-
452
- - **CLI rewritten for FSD/FDA structure** — `npx xertica-ui@latest init` agora copia corretamente a estrutura Feature-Sliced Design:
453
- - Removida cópia de `src/app/routes.tsx` (arquivo não existe mais após refatoração)
454
- - Adicionada cópia de `src/app/components/AppLayout.tsx`
455
- - Adicionada cópia completa de `src/shared/` (`auth.ts`, `navigation.ts`, `types/auth.ts`)
456
- - Adicionada cópia de `src/features/auth|home|template` conforme seleções do usuário
457
- - Cópia de pages corrigida de `src/app/pages/` → `src/pages/`
458
- - `AuthGuard.tsx` agora gerado dinamicamente com imports e rotas apenas das páginas selecionadas
459
- - **`generateDemoResponse` exportado via `xertica-ui/assistant`** — estava ausente do barrel causando `SyntaxError: does not provide an export named 'generateDemoResponse'`
460
- - **Build corrigido: UMD → CJS** — múltiplos entry points não são suportados com formato UMD no Vite; migrado para CJS (todos os `*.umd.js` → `*.cjs.js` no `package.json` exports)
461
-
462
- ---
463
-
464
- ## [2.0.0]2026-05-11
465
-
466
- ### Added
467
-
468
- - **Subpath exports** — The package now exposes 6 granular entry points alongside the full root barrel:
469
- - `xertica-ui/ui` — all UI primitives (Button, Card, Input, Table, Dialog, etc.)
470
- - `xertica-ui/layout`Sidebar and Header
471
- - `xertica-ui/brand`XerticaProvider, XerticaLogo, XerticaXLogo, XerticaOrbe, ThemeToggle, LanguageSelector
472
- - `xertica-ui/assistant`XerticaAssistant, MarkdownMessage, CodeBlock, FormattedDocument, ModernChatInput
473
- - `xertica-ui/media`VideoPlayer, AudioPlayer, FloatingMediaWrapper
474
- - `xertica-ui/hooks` — useLayout, useTheme, useLanguage, useBrandColors, useAssistente, useApiKey
475
- - Root `from 'xertica-ui'` remains fully supported for backward compatibility.
476
- - **`ImageWithFallback` added to `xertica-ui/ui`** — previously only in the root barrel; now accessible via the `/ui` subpath.
477
- - **Multi-entry Vite build** — `vite.config.ts` now uses `lib.entry` as an object (7 entry points). Output filenames follow `[entryName].[format].js` pattern.
478
- - **CLI template — FSD/FDA architecture** — The scaffolded template was restructured to follow Feature-Sliced Design + Feature-Driven Architecture:
479
- - `src/app/` — BrowserRouter, XerticaProvider, AuthGuard (auth state + route definitions), AppLayout (Sidebar + children shell)
480
- - `src/shared/` — `config/navigation.ts` (route registry), `lib/auth.ts` (localStorage helpers), `types/auth.ts` (User interface)
481
- - `src/features/auth/ui/`LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent; with shared `AuthPageShell` and `SocialLoginButtons` DRY extractions
482
- - `src/features/home/ui/` — HomeContent
483
- - `src/features/template/ui/` — TemplateContent, FormTemplate
484
- - `src/pages/` — thin page wrappers (LoginPage, HomePage, TemplatePage, ForgotPasswordPage, VerifyEmailPage, ResetPasswordPage)
485
- - **`templates/guidelines/Guidelines.md`**new architecture guide documenting FSD/FDA layers, layer responsibilities, and "Adding New Routes" step-by-step.
486
-
487
- ### Changed
488
-
489
- - **Template imports** All template source files updated to use subpath imports (`xertica-ui/ui`, `xertica-ui/brand`, `xertica-ui/layout`, `xertica-ui/assistant`, `xertica-ui/hooks`) instead of the root barrel.
490
- - **`FormTemplate.tsx` rewritten** — Removed dependency on `@hookform/resolvers/zod`, `react-hook-form`, and `zod` (packages not included in the CLI template's `package.json`). Now uses plain React `useState` + inline validation with only `xertica-ui/ui` primitives.
491
- - **`tsconfig.build.json`** — `include` array updated to cover all new barrel source directories (`components/**/*`, `contexts/**/*`, `hooks/**/*`).
492
- - **Documentation** (`llms.txt`, `llms-full.txt`) — Added subpath import reference table and FSD/FDA layer mapping.
493
-
494
- ### Fixed
495
-
496
- - **Stale compiled artifacts** Removed `App.js`, `App.d.ts`, `main.js`, `main.d.ts` from `templates/src/app/` that were being resolved by Vite's extension priority (`.js` before `.tsx`), causing `Failed to fetch dynamically imported module` errors after the FSD restructure.
497
-
498
- ---
499
-
500
- ## [1.10.0]2026-05-08
501
-
502
- ### Added
503
-
504
- - **Semantic Variants** — Added `success`, `info`, and `warning` variants to components that lacked them:
505
- - **Button**now supports 9 variants: `default`, `secondary`, `outline`, `ghost`, `destructive`, `link`, `success`, `info`, `warning`.
506
- - **Progress** — new `variant` prop (`default`, `success`, `info`, `warning`, `destructive`) colors both the track and the indicator.
507
- - **NotificationBadge** — added `secondary`, `outline`, `success`, `info`, `warning`; standardized `default` to primary color for consistency with Badge and Button.
508
- - **TimelineDot** — added `info` and `outline` variants; replaced hardcoded `rgb()` values with semantic CSS tokens (`bg-success`, `bg-warning`).
509
- - **DialogBody** — new sub-component for the Dialog. When used, `DialogHeader` and `DialogFooter` stay pinned while `DialogBody` scrolls independently. Exported from `xertica-ui`.
510
- - **Dialog height management** — `DialogContent` now has `max-h-[calc(100dvh-2rem)] overflow-hidden`. The close button (×) is pinned and never scrolls with content. `size="full"` fills the full viewport height.
511
- - **Header `breadcrumbSlot`**new prop accepting any `ReactNode` rendered immediately after the breadcrumb/title area (badges, buttons, status chips, etc.).
512
- - **Sidebar default variant groups** — `variant="default"` now renders `navigationGroups` with labeled group headers. Each `RouteConfig` supports a `children` field (sub-routes shown in a contextual `DropdownMenu` via a `ChevronRight` button at the end of the item).
513
-
514
- ### Fixed
515
-
516
- - **Search double clear icon** — `type="search"` caused browsers to inject a native clear button on top of the custom × icon. Changed to `type="text"`.
517
- - **CSS `@source` path** CLI template `src/styles/index.css` had `../node_modules/xertica-ui` (one level short); corrected to `../../node_modules/xertica-ui/components`.
518
- - **`theme-map.css` incomplete** — `--color-success`, `--color-info`, `--color-warning` and their `foreground` variants were missing, preventing `bg-success`, `text-info`, etc. from being generated in the compiled library CSS.
519
-
520
- ### Changed
521
-
522
- - **Storybook argTypes** Multiple components had controls missing from the Storybook panel: Badge (`success`/`info`/`warning` options), Select (`size`), Avatar (`size`), Rating (`readonly` casing), Timeline (`dotVariant`), Dialog (`size` available in all stories). All corrected.
523
- - **LLM documentation** (`llms-full.txt`)Updated Badge, Button, Dialog, Header, NotificationBadge, Progress, Search, Sidebar, and Timeline sections to reflect current APIs.
524
-
525
- ---
526
-
527
- ## [1.9.0] — 2026-05-05
528
-
529
- ### Added
530
-
531
- - **Standardized Form Sizing System** Implemented a unified `size` prop (`sm`, `md`, `lg`) across all form-related components for perfect visual alignment in grid layouts:
532
- - **Text Components** — `Input`, `SelectTrigger`, `Textarea`, `Search`, and `InputOTPSlot` now share consistent height/padding/font-size tokens.
533
- - **Toggle Components** `Checkbox`, `RadioGroupItem`, and `Switch` now feature dynamic sizing for both containers and internal indicators (check icon, dot, thumb).
534
- - **Labels** — `Label` component now supports `size` to match the text size of the associated input.
535
- - **Reference Guide** — Added `docs/form-sizing.md` as a comprehensive guide for the standardized sizing scale.
536
- - **Assistant Individual Controls** — Added granular control props to `XerticaAssistant` to toggle specific features independently:
537
- - `showHistory`, `showFavorites`, `allowAudioInput`, `allowFileUpload`, `allowDocCreation`, `allowPodcastGen`, `allowResearchGen`.
538
- - **Header Breadcrumb Navigation** — Standardized `Header` to use breadcrumbs as the default navigation pattern:
539
- - Added support for `react-router-dom` links in breadcrumbs to prevent page reloads.
540
- - Configurable hierarchy levels and labels directly via props.
541
-
542
- ### Changed
543
-
544
- - **Form Component Architecture** — Migrated form elements from legacy tokens to standardized design system tokens (`bg-background`, `border-border`) for better theme consistency.
545
- - **Documentation & Storybook** — Updated all 9 affected form components with new "Sizes" sections in Storybook (Stories + MDX) and enriched LLM-facing markdown documentation.
546
- - **Unit Testing** — Updated test suites for `Checkbox`, `RadioGroup`, `Switch`, `InputOTP`, `Label`, `Search`, `Select`, and `Textarea` to verify sizing variant classes.
547
-
548
- ### Fixed
549
-
550
- - **Search Component** — Removed obsolete `loading` prop which was causing TypeScript errors and was redundant with the current design system patterns.
551
- - **SelectTrigger Sizing** — Standardized `md` height to `h-10` (40px) to match the rest of the form system.
552
-
553
- ---
554
-
555
- ## [1.8.0] — 2026-04-27
556
-
557
- ### Added
558
-
559
- - **VideoPlayer UI Enhancements** — Added gradient overlay on controls for improved contrast against video content:
560
- - Gradient: `from-black/60 via-black/30 to-transparent` with `pt-12` spacing
561
- - White progress bar with `bg-white/30` track, `bg-white` fill, and `rounded-r-sm` on filled portion
562
- - White icons with `drop-shadow-md` for visibility
563
- - Buttons use `text-white hover:text-white hover:bg-black/50` for proper hover states
564
- - **Slider Visual Fixes** — Improved progress bar alignment:
565
- - Added left margin `ml-2` to track for thumb alignment
566
- - Added `rounded-r-sm` to Range for filled portion
567
- - Adjusted track/margins for proper visual alignment at full value
568
-
569
- ### Changed
570
-
571
- - **Documentation** — Updated component counts across all docs:
572
- - `llms.txt`: 75 97 components
573
- - `llms-full.txt`: Added statistics table
574
- - `docs/llms.md`: Added statistics section
575
- - `Introduction.mdx`: Added "97 Components" badge
576
- - **components.json** — 75 89 components (added missing Media, Assistant, Pages, and Map components)
577
-
578
- ### Fixed
579
-
580
- - **Slider Progress Bar** Fixed visual gap where thumb doesn't align with filled bar at end position by adjusting track margins
581
-
582
- ---
583
-
584
- ## [1.7.0] — 2026-04-23
585
-
586
- ### Fixed
587
-
588
- - **CLI CSS Theme Import** — Corrected `@theme` → `@theme inline` in both the library's `index.css` and the generated template `src/styles/index.css`. Plain `@theme {}` was causing Tailwind v4 to resolve color tokens statically at build time using the library's defaults, preventing consumer `tokens.css` overrides from propagating into utility classes (`bg-destructive`, `bg-primary`, alert colors, etc.).
589
- - **Dark Mode `--primary`** — Added missing `--primary: var(--xertica-primary)` in the dark mode block of `tokens.css` (library, template, and generator). Components using `bg-primary` were not picking up the dark mode brand color.
590
- - **Dark Mode Chart Tokens** — Generator (`bin/generate-tokens.ts`) now includes `--chart-1` through `--chart-5` in the dark mode section for all generated `tokens.css` files.
591
-
592
- ### Added
593
-
594
- - **CLI `update` command** — `npx xertica-ui@latest update` prompts the user to select a new color theme and overwrites `src/styles/xertica/tokens.css` with the newly generated tokens, preserving all other project files.
595
- - **Template `@theme inline` mapping** — Generated `src/styles/index.css` now includes a complete `@theme inline {}` block mapping all tokens (sidebar, charts, gradients, brand, radii) to CSS variable aliases, ensuring full theme coverage for consumer projects.
596
- - **Documentation**`docs/getting-started.md` updated with CLI `update` command reference and a new "CSS Setup (Critical)" section explaining the `@theme inline` requirement.
597
-
598
- ---
599
-
600
- ## [1.6.0]2026-04-20
601
-
602
- ### Added
603
-
604
- - **`docs/llms.md`** Master LLM/AI-agent entrypoint index with full component catalog, token quick reference, and reading order guide.
605
- - **`docs/layout.md`** Complete `LayoutContext` and `useLayout()` API reference.
606
- - **`docs/components/route-map.md`** New documentation for `RouteMap` component.
607
- - **`docs/components/use-mobile.md`** New documentation for `useMobile` / `useIsMobile` hooks.
608
- - **`Header`** — New props: `user` (profile with avatar, name, email, and dropdown menu items), `actions` (custom icon action buttons), `showSettings` / `onSettingsClick`, `showLogout` / `onLogoutClick`. Fixed render order: Language → Theme → Actions → Settings → User → Logout.
609
- - **`Sidebar`** — New `width` prop (`expandedWidth: number`) for configuring the expanded sidebar pixel width. Width is now read and stored via `LayoutContext.sidebarWidth`.
610
-
611
- ### Changed
612
-
613
- - **Documentation** All 61 component docs, 5 pattern docs, and 6 root docs fully rewritten in English with standardized structure (Overview, When to Use, Anatomy, Props table, Examples, AI Rules, Related Components).
614
- - **JSDoc** — All Portuguese JSDoc comments in `components/ui/` translated to English and enriched with accurate `@ai-rules`.
615
- - **`README.md`** Complete rewrite in English, restructured for npm page quality (quick start, install guide, component catalog, token reference, AI agent entrypoint, troubleshooting).
616
- - **`package.json`** — Version bumped to `1.6.0`. Description translated to English.
617
-
618
- ### Fixed
619
-
620
- - **`docs/components/page-header.md`** — Was documenting a wrong API (`title/description/actions`). Now correctly documents the real API: `breadcrumbs[]`, `showLanguageSelector`, `rightContent`, `PageHeaderHeading`, `PageHeaderDescription`.
621
- - **`docs/components/stepper.md`** Was documenting a `steps[]` array prop. Now correctly documents the composable `<Stepper currentStep> + <Step step label>` API (1-indexed).
622
- - **`docs/components/empty.md`** — Was documenting single-prop component. Now correctly documents the composable sub-component pattern: `Empty > EmptyIcon > EmptyTitle > EmptyDescription > EmptyAction`.
623
- - **`docs/components/stats-card.md`** — `trend` was documented as a string. Now correctly documented as `{ value: number; label?: string }`.
624
- - **`docs/components/chart.md`** — Was documenting raw Recharts usage. Now correctly documents the `ChartContainer + ChartConfig + var(--color-*)` pattern.
625
-
626
- ---
627
-
628
- ## [1.5.2] — 2026-04-15
629
-
630
- ### Fixed
631
-
632
- - Resolved regression where modal components (Dialog/AlertDialog) failed to render in projects initialized via the CLI.
633
- - Implemented robust CSS integration using Tailwind v4 theme mappings.
634
- - Ensured Radix UI portals correctly inherit theme variables.
635
-
636
- ---
637
-
638
- ## [1.5.1] — 2026-04-14
639
-
640
- ### Changed
641
-
642
- - Sidebar: Added `assistente` variant with fixed areas, searchable navigation, and grouped navigation structures.
643
- - Template page updated to demonstrate the assistant sidebar variant.
644
-
645
- ---
646
-
647
- ## [1.5.0]2026-04-13
648
-
649
- ### Added
650
-
651
- - `Sidebar` — `width` / `expandedWidth` prop for configurable expanded sidebar width.
652
- - `LayoutContext` — `sidebarWidth` and `setSidebarWidth` for global sidebar width management.
653
- - `Header` — User profile section with avatar, dropdown menu, settings button, and logout button.
654
- - `StatsCard`KPI metric card component.
655
- - `Timeline`Chronological event list with dot variants.
656
- - `TreeView`Hierarchical tree navigation.
657
- - `Rating`Star-based rating input.
658
- - `FileUpload` — Drag-and-drop file input.
659
- - `Search` — Pre-built search input with icon and clear button.
660
- - `NotificationBadge` — Dot/count badge overlay.
661
- - `RouteMap` Google Maps route display and direction calculation.
662
- - `Stepper` Multi-step progress indicator.
663
- - `Map`Advanced Google Maps integration with markers, circles, polygons, and layers.
664
- - `XerticaAssistant` Embedded Gemini AI assistant panel.
1
+ # Changelog
2
+
3
+ All notable changes to `xertica-ui` will be documented in this file.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
+ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [Unreleased]
11
+
12
+ ---
13
+
14
+ ## [2.7.0] — 2026-07-07
15
+
16
+ ### Added
17
+
18
+ - **`xertica-ui/blocks` ganha um novo namespace `auth`** `AuthPageShell` (layout de imagem hero + seletor de idioma + painel de formulário centralizado), `SocialLoginButtons` (com prop `providers` configurável, default `['google', 'mtLogin', 'govBr']`, para projetos que não usam todos os provedores de login social), `usePasswordStrength` e `PasswordStrengthMeter`. Extraídos da duplicação entre `components/pages/{login,forgot-password,reset-password,verify-email}-page/*` e `templates/src/features/auth/ui/*`, que agora consomem a mesma fonte via `xertica-ui/blocks`.
19
+
20
+ ### Fixed
21
+
22
+ - **Assistente de IA — clique numa sugestão inicial rolava a página e deslocava o header** — o efeito de auto-scroll de `use-assistant.ts` media `messagesEndRef.current.parentElement` (uma `<div>` sem overflow próprio) em vez do viewport real do `ScrollArea` do Radix, fazendo a checagem "está perto do fim da rolagem" ser sempre verdadeira inclusive na primeira mensagem, na transição da tela de boas-vindas para a conversa. Sem `block: 'nearest'`, o `scrollIntoView` podia rolar a janela inteira. Corrigido para medir o `[data-radix-scroll-area-viewport]` correto e conter o scroll dentro dele.
23
+ - **`components/pages/forgot-password-page/ForgotPasswordPage.tsx` tinha texto hardcoded em português**, sem passar por `useTranslation()` como as demais páginas de auth. Convertido para `t('forgotPassword.xxx')`, com as chaves adicionadas em `locales/*/pages/forgotPassword.json` (en/es/pt-BR) na raiz.
24
+
25
+ ### Changed
26
+
27
+ - **`templates/src/features/home` e `templates/src/features/template` reduzidos a placeholders mínimos** — esse conteúdo é vitrine de exemplo, feito para ser substituído pelo consumidor do `npx xertica-ui init`, não para ficar sincronizado com a lib. Removido código morto (`CrudTemplate`, `DashboardTemplate`, `FormTemplate`, `LoginTemplate`, `dashboardStore`, `mock.ts`, `useFeatureCards`) e os locales órfãos correspondentes nos 3 idiomas.
28
+ - Removidos `templates/vite.config.js`/`vite.config.d.ts` — artefatos de build obsoletos e versionados por engano desde a v2.1.0, que faziam o Vite carregar uma versão desatualizada da config (sem os aliases de desenvolvimento do monorepo) em vez do `vite.config.ts` atual.
29
+
30
+ ---
31
+
32
+ ## [2.6.0] — 2026-07-06
33
+
34
+ ### Security
35
+
36
+ - **XSS — `MarkdownMessage.tsx` escapava HTML de forma incorreta (no-op)** — `replace(/</g, '<')` e `replace(/>/g, '>')` substituíam os caracteres por eles mesmos, não escapando nada apesar de parecer uma chamada de sanitização. Corrigido para usar entidades HTML reais (`&lt;`, `&gt;`).
37
+ - **XSS — `FormattedDocument.tsx` não escapava HTML antes de renderizar via `dangerouslySetInnerHTML`** — adicionado o mesmo escape (`&lt;`/`&gt;`) como primeira etapa da conversão de markdown.
38
+ - **XSS — `map.tsx` renderizava `iconSvg` de marcadores sem sanitização** — adicionado `dompurify` (perfil `svg`/`svgFilters`) para sanitizar o SVG mantendo a marcação válida, ao invés de injetar a string diretamente via `dangerouslySetInnerHTML`.
39
+ - **`.npmrc` com tokens de autenticação estava versionado no repositório** — removido do tracking (`git rm --cached`); o arquivo permanece no `.gitignore` para não ser versionado novamente. Rotação dos tokens expostos é uma ação separada, de responsabilidade da equipe.
40
+ - **`overrides` de `undici`/`react-router`/`esbuild` sem limite de versão** — trocado de ranges abertos (`>=`) para ranges com caret (`^0.28.1`, `^7.15.1`, `^7.28.0`), evitando que uma dependência transitiva quebre a suíte de testes ao saltar de major version silenciosamente.
41
+
42
+ ### Added
43
+
44
+ - **Rota `/settings` e `SettingsPage`** — o botão de Configurações na Sidebar e o `onNavigateSettings` do `XerticaAssistant` navegavam para uma rota inexistente. Criada a feature `features/settings` (conta, preferências de tema/idioma, logout com confirmação) e registrada a rota em `generateAuthGuard()`/`AuthGuard.tsx`. A feature e a página são sempre incluídas pelo CLI (`init`/`update`), já que o botão de Configurações é renderizado incondicionalmente na Sidebar.
45
+ - **CLI `init` agora copia `.gitignore`/`.prettierrc` para o projeto gerado** antes esses arquivos existiam apenas em `templates/` e nunca chegavam ao projeto scaffolded. `update` faz backfill apenas quando o arquivo não existe, preservando customizações.
46
+ - **`prepublishOnly` agora roda a suíte de testes unitários** (`npm run test:unit`, novo script equivalente a `vitest run --project unit`) antes do build, evitando publicar um pacote com testes quebrados.
47
+
48
+ ### Changed
49
+
50
+ - Removidos comentários de raciocínio interno (rascunho/dúvidas) deixados em `bin/generate-tokens.ts`.
51
+ - `coverage/` e `.playwright-mcp/` — artefatos de teste que estavam versionados por engano — removidos do tracking e adicionados ao `.gitignore`.
52
+
53
+ ---
54
+
55
+ ## [2.5.3] — 2026-06-23
56
+
57
+ ### Fixed
58
+
59
+ - **Sidebar — vazamento horizontal causado pelo `ScrollArea` do Radix UI** — o `@radix-ui/react-scroll-area` v1.x injeta `style={{ minWidth: "100%", display: "table" }}` no viewport interno, ignorando o `overflow: hidden` dos ancestors e causando scroll horizontal indesejado na sidebar. Substituídos os dois usos de `<ScrollArea>` no `SidebarNav` (variant `assistant` e accordion de overflow mobile) por `<div>` nativa com `style={{ overflowY: 'auto', overflowX: 'hidden' }}`. O import de `ScrollArea` foi removido do arquivo.
60
+
61
+ ---
62
+
63
+ ## [2.5.2]2026-06-23
64
+
65
+ ### Fixed
66
+
67
+ - **TypeScript erros de tipos `recharts` 3.x no `chart.tsx`**`TooltipPayload`, `LegendPayload` e `DefaultTooltipContentProps` foram removidos do namespace raiz do recharts 3. Corrigido importando os tipos diretamente de `recharts/types/component/DefaultTooltipContent` e `recharts/types/component/DefaultLegendContent`, anotando explicitamente os parâmetros `item`, `index` e `v` nos callbacks de `payload.map` e `formatter`.
68
+
69
+ ### Added
70
+
71
+ - **Sidebar Overflow de `navigationGroups` no variant `default`** — quando a lista de grupos de navegação excede a altura disponível da sidebar, os grupos excedentes são movidos para um botão "mais opções" (`MoreVertical`). No **desktop** abre um `Popover` lateral direito com todos os grupos e itens restantes. No **mobile** expande um accordion inline (abaixo do botão, com animação Framer Motion) e a área de navegação passa a usar `ScrollArea` do design system para scroll, evitando que o conteúdo fique fora da área visível.
72
+ - **Storybook Sidebar `WithSubitemsDesktop` e `WithSubitemsMobile`** — exemplos expandidos com 4 grupos (Principal, Comercial, Comunicação, Administração) e ~18 itens raiz com múltiplos subitens, suficientes para ultrapassar a altura da tela e demonstrar o comportamento de overflow em qualquer resolução.
73
+
74
+ ---
75
+
76
+ ## [2.5.1] — 2026-06-22
77
+
78
+ ### Fixed
79
+
80
+ - **CLI `update → Theme` — tema atual não era pré-selecionado** — o prompt de seleção de tema sempre iniciava no índice 0 (`xertica-original`), independente do tema instalado. Corrigido lendo `themeId` do `.xertica.json` e calculando o índice inicial correspondente. O nome do tema atual é exibido antes da seleção.
81
+ - **CLI `update Theme` `themeId` não era persistido** — após trocar o tema, o `.xertica.json` não era atualizado com o novo `themeId`, fazendo com que execuções futuras continuassem sem memória da escolha. Corrigido com `writeXerticaConfig(targetDir, { themeId: selectedTheme.id })` após a escrita do `tokens.css`.
82
+ - **CLI `init` — `themeId` não era salvo em `.xertica.json`** — o tema escolhido durante `init` não era persistido no arquivo de configuração do projeto. Corrigido passando `themeId: response.theme` ao `writeXerticaConfig`.
83
+ - **`generate-tokens.ts` — `--sidebar-border` no dark mode estava hardcoded** — o valor `rgba(65, 61, 107, 1)` (indigo fixo) era usado para todos os temas. Corrigido usando `colors.darkBorder` para que cada tema utilize sua própria cor de borda tingida.
84
+ - **`XerticaConfig` — campo `themeId` faltando na interface** — adicionado campo opcional `themeId?: string` à interface `XerticaConfig` em `bin/cli.ts`.
85
+ - **Erros de TypeScript do `recharts` 3.x** atualização da biblioteca quebrou os tipos de `ChartTooltipContent` e `ChartLegendContent`. Corrigido:
86
+ - `ChartTooltipContent`: migrado de `React.ComponentProps<typeof Tooltip>` (que omite `payload`/`label` no recharts 3) para tipos explícitos usando `RechartsPrimitive.TooltipPayload` e `DefaultTooltipContentProps['formatter']`
87
+ - `ChartLegendContent`: substituído `Pick<LegendProps, 'payload' | 'verticalAlign'>` por `{ payload?: LegendPayload[]; verticalAlign?: ... }` (recharts 3 removeu `payload` de `LegendProps`)
88
+ - `DonutBreakdownChart`: removida prop `activeIndex` do `<Pie>` (não existe mais no recharts 3)
89
+ - `PieMetricChart`: adicionado guard `if (midAngle == null || percent == null) return null` no callback de label
90
+ - `chart.test.tsx`: adicionado `graphicalItemId` obrigatório ao mock de payload
91
+
92
+ ### Changed
93
+
94
+ - **CLI `update → Theme`** — exibe o tema atual antes do prompt de seleção com `chalk.gray('Current theme: ...')`.
95
+
96
+ ---
97
+
98
+ ## [2.5.0]2026-06-22
99
+
100
+ ### Added
101
+
102
+ - **Sidebar Subitens inline no mobile** — em viewports mobile (< 768 px) os itens com `children` agora expandem/colapsam de forma inline (accordion) abaixo do item pai, em vez de abrir um `DropdownMenu` lateral que ficava invisível fora dos limites do container. O botão `ChevronRight` rotaciona 90° ao abrir e os filhos surgem com animação via Framer Motion. No desktop o comportamento de dropdown lateral permanece inalterado.
103
+
104
+ - **Storybook — Stories de sidebar com subitens (desktop e mobile)** — adicionadas duas novas stories na documentação da `Sidebar`:
105
+ - `WithSubitemsDesktop` — sidebar iniciada expandida mostrando o botão `ChevronRight` nos itens com filhos e o dropdown lateral ao clicar.
106
+ - `WithSubitemsMobile`simula um viewport de 375 px com header de app mobile (botão hambúrguer). Ao abrir, a sidebar cobre a tela inteira e os subitens expandem inline, permitindo inspeção e ajuste do visual mobile.
107
+
108
+ - **Tema de cores — Dark mode tingido por hue** — todos os tokens de superfície do dark mode (`--background`, `--card`, `--popover`, `--muted`, `--secondary`, `--accent`, `--border`, `--input`) agora são tingidos com a hue da cor primária do tema ativo, em vez de cinza-zinc neutro para todos os temas:
109
+ - **primary / xertica-original**: fundo `#05050d` (azul-índigo muito sutil)
110
+ - **blue**: fundo `#03050f` (azul marinho profundo)
111
+ - **violet**: fundo `#07040f` (violeta escuro)
112
+ - **rose**: fundo `#0f0305` (rosa/vermelho escuro)
113
+ - **emerald**: fundo `#030f08` (verde escuro)
114
+ - **amber**: fundo `#0f0a03` (âmbar escuro)
115
+ - **orange**: fundo `#0f0703` (laranja escuro)
116
+ - **zinc / slate**: mantêm o azul-índigo sutil (alinhado com o tema default)
117
+
118
+ - **`BrandColorsContext`novos campos `darkBackground`, `darkCard`, `darkMuted`, `darkBorder`** a interface `BrandColors` em `contexts/theme-data.ts` ganhou 4 novos campos que definem as cores de superfície específicas de cada tema no dark mode. Todos os 9 temas foram atualizados com valores correspondentes.
119
+
120
+ - **`XerticaProvider` — nova prop `defaultColorTheme`** — aceita o ID de um `ColorTheme` (ex: `'blue'`, `'rose'`, `'emerald'`) para selecionar o tema de cor completo via props, sem a limitação de passar apenas um hex isolado via `primaryColor`.
121
+
122
+ - **Storybooktroca de temas de cor funcional** — o toolbar `Brand Color` agora troca o tema completo (primary, sidebar, charts **e** superfícies dark) com total fidelidade. Os valores do toolbar foram migrados de hex brutos para IDs de tema (`xertica-original`, `blue`, `violet`, etc.).
123
+
124
+ ### Fixed
125
+
126
+ - **`BrandColorsContext` — tokens de superfície dark não refletiam no Storybook** — o `applyColors()` injetava o style tag com `document.head.prepend()`, colocando-o antes de todos os outros estilos. Como os tokens de cor do `tokens.css` apareciam depois (e com seletores de maior especificidade como `:root[data-mode='dark']`), sobrescreviam os valores injetados. Corrigido com três ajustes:
127
+ 1. `prepend` → `appendChild` para que o style injetado sempre apareça por último no `<head>` e vença na cascata de mesma especificidade.
128
+ 2. Os tokens de primary/sidebar/charts/semantic passaram a ser aplicados via `root.style.setProperty()` (inline style no `<html>`), que tem especificidade máxima e sempre vence qualquer regra de stylesheet.
129
+ 3. O bloco dark de superfícies usa o seletor `:root[data-mode='dark'], .dark` para igualar a especificidade do `tokens.css` e ser decidido pela ordem de aparição.
130
+
131
+ - **`TemplatePage.stories.tsx`erro ao renderizar no Storybook** — o componente `TemplatePage` usa `useAuth()` internamente, mas o decorator das stories não incluía `AuthProvider`. Ao carregar a página de documentação, o hook lançava `"useAuth must be used within <AuthProvider>"`. Corrigido adicionando `AuthProvider` dentro do `MemoryRouter` no decorator.
132
+
133
+ - **Sidebar — `isMobileViewport` não consumido em `SidebarNav`** — o valor existia no `SidebarContext` mas não era lido pelo `SidebarNav`, impedindo a bifurcação entre accordion (mobile) e dropdown (desktop).
134
+
135
+ ### Changed
136
+
137
+ - **`BrandColorsContext.applyColors`estratégia de injeção de CSS** — tokens de primary aplicados via inline style (máxima prioridade); tokens de superfície dark injetados via `<style>` tag no final do `<head>`.
138
+
139
+ - **Storybook `preview.tsx` — toolbar `brandColor`** — os itens do toolbar passaram de hex brutos para IDs de tema; o decorator usa `defaultColorTheme` em vez de `primaryColor` no `XerticaProvider`.
140
+
141
+ - **`bin/generate-tokens.ts`**o bloco dark mode agora usa `colors.darkBackground`, `colors.darkCard`, `colors.darkMuted` e `colors.darkBorder` em vez de valores zinc hardcoded, gerando CSS correto para todos os temas.
142
+
143
+ - **Três arquivos `tokens.css`** (`styles/xertica/`, `src/styles/xertica/`, `templates/src/styles/xertica/`) atualizados com os valores dark tingidos para o tema xertica-original (azul-índigo).
144
+
145
+ ---
146
+
147
+ ## [2.4.1] — 2026-06-17
148
+
149
+ ### Changed
150
+
151
+ - **StatsCard — Cores de ícone customizáveis** — Adicionadas as propriedades `iconColor` e `iconBg` ao `StatsCard`, permitindo customizar a cor do ícone e o fundo do ícone (que anteriormente eram fixos em `text-muted-foreground` e `bg-muted`). Documentação e histórias do Storybook foram atualizadas correspondendo a essas propriedades.
152
+
153
+ ---
154
+
155
+ ## [2.4.0] — 2026-06-16
156
+
157
+ ### Added
158
+
159
+ - **CLIAtivação/Desativação de Dark Mode** — nova funcionalidade no CLI para ativar ou desativar o dark mode ao criar (`init`) ou atualizar (`update`) o projeto. A escolha do usuário é armazenada em `.xertica.json` na raiz e gera `disableDarkMode={true}` dentro do `<XerticaProvider>` em `App.tsx`. O botão `ThemeToggle` e a aba de switch de temas nas configurações ocultam-se automaticamente caso o dark mode esteja desativado.
160
+
161
+ ### Fixed
162
+
163
+ - **Layout — Correção do scroll vertical** — ajustado o comportamento do scroll vertical para travar o viewport com `h-screen overflow-hidden` em `App.tsx` e `AuthGuard.tsx`, bem como `height: 100%; overflow: hidden` no `html, body` em `index.css` e `base.css`. Páginas de autenticação (como login, recuperação de senha, etc.) agora possuem rolagem interna (`h-full overflow-y-auto`), impedindo que o scroll global suba/desloque o cabeçalho (`Header`) e o assistente virtual.
164
+
165
+ ---
166
+
167
+ ## [2.3.0]2026-06-15
168
+
169
+ ### Added
170
+
171
+ - **CLI Suporte a AI Assistant no `init`** — novo prompt `Include AI Assistant?` (confirm, default: true). Quando desativado, os arquivos `src/features/assistant/`, `src/pages/AssistantPage.tsx` e a rota `/assistente` são omitidos inteiramente. A escolha é persistida em `.xertica.json` na raiz do projeto gerado.
172
+ - **CLI — `update` → Assistant** — nova opção no menu de update para adicionar ou remover o AI Assistant de um projeto existente. Detecta o estado atual via `.xertica.json` (com fallback por presença de arquivos). Ao adicionar: copia `features/assistant/` e `AssistantPage.tsx`. Ao remover: deleta esses arquivos. Em ambos os casos regenera `AuthGuard.tsx`, `HomePage.tsx` e `TemplatePage.tsx` para refletir o novo estado.
173
+ - **CLI — `.xertica.json`**novo arquivo de configuração persistido na raiz do projeto gerado. Armazena flags de features (`hasAssistant`) para que o `update` possa ler o estado atual sem inferir pelos arquivos.
174
+ - **CLI`cli:dev` e `cli:run`** novos scripts em `package.json` para desenvolvimento e teste local do CLI sem publicar no npm. `cli:dev` compila em modo watch; `cli:run` executa `dist/cli.js` diretamente.
175
+ - **CLI — Versão no banner** — `init` e `update` exibem a versão atual na linha de abertura (`v2.3.0`).
176
+ - **Geradores de página com/sem assistente** — `generateHomePage(hasAssistant)` e `generateTemplatePage(hasAssistant)` geram versões das páginas sem dependências do assistente quando ele não está incluído, prevenindo erros de import.
177
+ - **Design system — Token `--mobile-content-padding`** — novo token CSS em `tokens.css` (`1.25rem`) que controla o padding horizontal do conteúdo em telas mobile. Também mapeado no `theme-map.css` como `--spacing-mobile-content-padding`. A variante `@custom-variant mobile` foi adicionada em `base.css`.
178
+ - **i18n `assistant.page.*` nos locales da lib** — as 12 chaves da seção `assistant.page` (`today`, `yesterday`, `thisWeek`, `searchConversations`, `rename`, `delete`, `cancel`, `save`, `deleteConversationTitle`, `deleteConversationDesc`, `renameConversationTitle`, `conversationNameLabel`) foram adicionadas aos locales internos da lib (`locales/pt-BR|en|es/components/assistant.json`). Anteriormente existiam nos locales dos templates, causando chaves brutas na `AssistantPage`.
179
+
180
+ ### Fixed
181
+
182
+ - **Buildesbuild 0.28 + Tailwind v4 target incompatibility** — `vite.config.ts` agora define `build.target: 'esnext'` e `optimizeDeps.esbuildOptions.target: 'esnext'`, eliminando os 1205 erros `Transforming destructuring to the configured target environment is not supported yet` causados pelo esbuild 0.28 ao tentar fazer downcompile de ES2020+.
183
+ - **CLIRemoção do assistente não detectava estado atual** — quando `.xertica.json` não existia (projeto gerado antes desta versão), `currentlyHas` era sempre `false` mesmo com os arquivos do assistente presentes. Agora fallback por presença de `src/features/assistant/` e `src/pages/AssistantPage.tsx`.
184
+ - **CLIImports quebrados após remoção do assistente** — `HomePage.tsx` e `TemplatePage.tsx` importavam `../features/assistant` diretamente. Após remoção, esses imports ficavam quebrados. Resolvido: essas páginas agora são geradas dinamicamente pelo CLI (com/sem imports do assistente) em vez de copiadas estaticamente.
185
+ - **i18nChaves `assistant.page.*` apareciam como texto bruto** — o bundle compilado da lib não incluía a seção `page` nos locales do assistente. Como a lib inicializa o i18next com seus próprios recursos antes do projeto consumidor, as chaves não eram encontradas.
186
+
187
+ ### Changed
188
+
189
+ - **Padding mobile global** — os containers de conteúdo (`HomeContent`, `TemplateContent`) em `components/pages/` e `templates/src/features/` mudaram de `p-2` para `p-5` em mobile (equivalente a `1.25rem`, alinhado ao token `--mobile-content-padding`). Em `sm:` e `md:` o comportamento permanece inalterado (`p-4` e `p-6` respectivamente).
190
+ - **CLI — `update` → Project files → pages** — ao atualizar páginas, `HomePage.tsx` e `TemplatePage.tsx` agora são regeneradas dinamicamente respeitando o estado atual do assistente (lido de `.xertica.json` ou inferido pela presença de `AssistantPage.tsx`), em vez de sobrescritas com a cópia estática do template.
191
+
192
+ ---
193
+
194
+ ## [2.2.1] 2026-05-21
195
+
196
+ ### Added
197
+
198
+ - **i18nCobertura completa na página de Template** `TemplateContent.tsx` e os 4 starter templates (`LoginTemplate`, `FormTemplate`, `DashboardTemplate`, `CrudTemplate`) estão 100% traduzidos (pt-BR, en, es). Anteriormente a maioria dos textos era hard-coded em PT-BR.
199
+ - **i18n Namespace `templates.*` completo** novo namespace com 539 chaves cobrindo todos os textos visíveis: seções, alertas, abas, formulários, tabela de dados, configurações, botões (variantes/tamanhos), badges, dialogs, sidebar, componentes avançados (Pagination, Stepper, TreeView, RichTextEditor) e rodapé. Suporte completo para `<Trans>` com interpolação de `<code>` nas descrições técnicas.
200
+ - **i18n Novos namespaces de starter templates** 4 novos arquivos de locale por idioma: `loginTemplate`, `formTemplate`, `dashboardTemplate`, `crudTemplate` (total de 12 novos JSONs × 2 mirrors = 24 arquivos).
201
+ - **i18n Estrutura de locales reorganizada** os monolitos `locales/<lang>.json` foram divididos em pastas por categoria:
202
+ - `locales/<lang>/{common,nav,errors,languageSelector,themeToggle}.json` (transversal)
203
+ - `locales/<lang>/pages/{home,templates,login,resetPassword,verifyEmail,loginTemplate,formTemplate,dashboardTemplate,crudTemplate}.json`
204
+ - `locales/<lang>/components/{assistant,sidebar,media,projectCard,profileCard,notificationCard,activityCard,stats,team}.json`
205
+ - **i18n — Loader via `import.meta.glob`**`i18n.ts` (base e templates) substituiu os 57 imports estáticos por 3 chamadas `import.meta.glob('./locales/<lang>/**/*.json', { eager: true })` + função `bundleLang()`. Adicionar um novo arquivo JSON é suficiente — sem tocar no `i18n.ts`.
206
+ - **CLI — Locale em pastas** — `syncLocaleFiles` e `generateI18nFile` em `bin/language-config.ts` atualizados para copiar/gerar a nova estrutura de pastas. Projetos legados com `<lang>.json` flat são migrados automaticamente no próximo `update`.
207
+ - **`templates/vite.config.ts` — aliases de monorepo** — aliases automáticos detectam se o `vite.config.ts` está dentro do monorepo (`../components/index.ts` existe) e apontam `xertica-ui/*` diretamente para o source TypeScript, permitindo HMR sem rebuild da lib. Em projetos gerados pelo CLI, o check retorna `false` e `xertica-ui` resolve do `node_modules` normalmente.
208
+ - **CLI — Language selection on `init`** — `npx xertica-ui init` now prompts for the languages the project should support (multi-select with `pt-BR`, `en`, `es`; all selected by default; minimum 1). The CLI:
209
+ - Copies **only** the locale folders for the selected languages into `src/locales/` (no orphan locales)
210
+ - Generates `src/i18n.ts` with `import.meta.glob` calls for exactly those languages
211
+ - Injects the `availableLanguages` prop into the generated `src/app/App.tsx`
212
+ - Persists the selection in `src/locales/.languages.json` (schema v1)
213
+ - **CLI — `update` → Languages** new option in the `update` command lets users add or remove languages later. Shows a diff (`+ es`, `- en`) before confirming. Regenerates `App.tsx`, `i18n.ts`, copies new locale folders, and prunes removed ones.
214
+ - **CLI Monolingual auto-detection** — when only one language is selected, the generated `App.tsx` includes a banner comment documenting that the `LanguageSelector` will auto-hide.
215
+ - **`bin/language-config.ts`** new module encapsulating the supported-language registry (`SUPPORTED_LANGUAGES`), code generators (`generateI18nFile`, `generateAppTsx`), and persistence helpers (`readLanguagesConfig`, `writeLanguagesConfig`, `syncLocaleFiles`).
216
+
217
+ ### Fixed
218
+
219
+ - **Dark mode toggle no CLI** — `XerticaProvider` no `templates/src/app/App.tsx` era gerado com `disableDarkMode` hard-coded, tornando o `ThemeToggle` um no-op. Removido de `App.tsx`, do template literal do CLI em `bin/language-config.ts` e do exemplo em `templates/CLAUDE.md`.
220
+
221
+ ### Changed
222
+
223
+ - **CLI — `update` → Project files (`app` branch)** — instead of blindly overwriting `App.tsx` and `i18n.ts` with the static template (which would erase the user's language selection), the update flow now reads the persisted selection from `src/locales/.languages.json` and regenerates these files honoring it. Projects scaffolded before this feature shipped get their selection inferred from the locale files present and the inferred config is written back.
224
+ - **`DashboardTemplate`** — `StatsCard` deixou de chamar `useTranslation()` internamente; o sufixo de tendência (`lastMonth`) é resolvido no pai e passado como prop, reduzindo o número de subscribers i18n de 5 para 1.
225
+ - **`TemplateContent` — dialog inputs controlados** — os `Input` do dialog "Editar Perfil" foram convertidos de `defaultValue` (uncontrolled) para `value`/`onChange` com lazy `useState`, garantindo que o valor reflita o idioma ativo no momento da montagem sem sobrescrever edições do usuário.
226
+ - **`TemplateContent``treeData` movido para dentro do componente** os labels dos nós do TreeView (`Components`, `UI`, `Button`…) agora reagem ao switch de idioma em tempo real, pois `treeData` é construído após `const { t } = useTranslation()`.
227
+
228
+ ---
229
+
230
+ ## [2.1.11]2026-05-20
231
+
232
+ ### Fixed
233
+
234
+ - **CLI Initialization**Correções essenciais no comando `init`:
235
+ - `i18n.ts` e o diretório `locales/` agora são copiados corretamente, restaurando as traduções na aplicação gerada.
236
+ - `AuthContext.tsx` e dependências agora são incluídas, habilitando o hook `useAuth`.
237
+ - A geração do `AuthGuard.tsx` foi reconstruída de forma dinâmica para consumir corretamente o `useAuth()` e garantir integridade das rotas protegidas e abertas, suportando _lazy loading_ dinâmico das rotas de acordo com a seleção do usuário.
238
+ - O diretório `features/assistant/` agora é sempre copiado visto que o `AppLayout` depende nativamente da `AssistantPage`.
239
+ - **Template Lints** — Resolução de diversos `unused-vars` (variáveis e imports órfãos) espalhados pelo `HomeContent.tsx`, `TemplateContent.tsx`, `AssistantPage.tsx` e `AuthContext.tsx`, garantindo que o `npm run check` (`tsc` + `eslint`) execute com 100% de sucesso imediatamente após a geração do projeto.
240
+ - **`LanguageSelector` e `LanguageContext`** — Correção de bugs na seleção de idiomas e fallback:
241
+ - `LanguageContext.tsx` agora valida de forma robusta e intercepta valores legados como `'PT'` no `localStorage`, realizando um _fallback_ seguro para `'pt-BR'`.
242
+ - O componente `LanguageSelector.tsx` foi ajustado na sua composição com Radix UI: a dependência restritiva do `<SelectValue>` foi removida no trigger, evitando a sobrescrita do conteúdo. Agora o componente exibe a variante `minimal` (como `PT`, `EN`, `ES`) perfeitamente, sincronizada com o estado global de tradução.
243
+
244
+ ---
245
+
246
+ ## [2.1.10]2026-05-20
247
+
248
+ ### Added
249
+
250
+ - **`AuthContext` / `useAuth()`** novo contexto de autenticação em `contexts/AuthContext.tsx`. `AuthProvider` gerencia sessão via `localStorage`, expõe `user`, `isLoading`, `login(email, password) → boolean` e `logout()`. `isLoading` previne flashes de redirect durante hidratação. O `AuthProvider` deve ser montado dentro do `<Router>` (depende de `useNavigate`).
251
+ - **`ErrorBoundary` — três variantes pré-configuradas** em `components/shared/error-boundary.tsx`:
252
+ - `AppErrorBoundary` — envolve todo o `App` antes dos providers; fallback full-screen com inline styles (funciona mesmo se o Tailwind falhar)
253
+ - `PageErrorBoundary` — envolve `<Routes>` / `<AuthGuard>`; captura lazy-chunk failures e erros de renderização de página
254
+ - `SectionErrorBoundary` — envolve seções isoladas (tabelas, charts, assistente); um seção quebrada não derruba a página
255
+ - Props: `onError` (callback para Sentry/Datadog), `resetKeys` (auto-reset quando um valor muda, ex: `[location.pathname]`)
256
+ - **i18n completo com `i18next` + `react-i18next`** integração completa de internacionalização:
257
+ - Arquivo `i18n.ts` configurado com `pt-BR` (padrão), `en` e `es`
258
+ - Locale files em `locales/pt-BR.json`, `en.json`, `es.json` com namespaces: `common`, `nav`, `home`, `stats`, `team`, `assistant`, `languageSelector`
259
+ - `LanguageContext.setLanguage()` agora chama `i18n.changeLanguage()` — todos os `useTranslation()` re-renderizam
260
+ - `HomeContent.tsx` e `TemplateContent.tsx` usam `useTranslation()` para todos os textos
261
+ - Mock data usa `i18n.t()` (instância) para responder ao idioma ativo no `queryFn`
262
+ - **`features/`camada de estado separada da UI**:
263
+ - `features/home/data/mock.ts` — tipos + dados mock + funções `fetch*()` (swap point para API real)
264
+ - `features/home/hooks/` — `useDashboardStats`, `useTeamMembers`, `useFeatureCards` (TanStack React Query)
265
+ - `features/home/store/dashboardStore.ts` — Zustand (progress, slider, switch, activeTab)
266
+ - `features/assistant/data/mock.ts` — `AssistantConfig` + `fetchAssistantConfig()`
267
+ - `features/assistant/hooks/useAssistantConfig.ts` — React Query, staleTime 30 min
268
+ - **`QueryClientProvider`** adicionado ao stack de providers em `App.tsx` como camada mais externa (abaixo de `AppErrorBoundary`)
269
+ - **Lazy loading** em todas as rotas via `React.lazy()` + `<Suspense fallback={null}>` cada página é um chunk separado
270
+ - **`ProtectedRoute` + `GuestRoute`** como componentes de guarda de rota baseados em `useAuth()` eliminam lógica de redirect do `AuthGuard`
271
+ - **`components/shared/navigation.ts`**fonte canônica de `RouteConfig`, `routes[]`, `getRouteByPath` e `isValidRoute` para o app devops (substituiu `routes.tsx` na raiz)
272
+
273
+ ### Changed
274
+
275
+ - **`LanguageSelector` — refatorado para usar `LanguageContext` e `i18next`** — removidos `useState` local, props `initialLanguage` e `onLanguageChange`. O componente agora lê de `useLanguage()` e chama `i18n.changeLanguage()` diretamente. `aria-label` e labels dos itens são traduzidos via `useTranslation()`. **Breaking**: `initialLanguage` e `onLanguageChange` foram removidos da API pública.
276
+ - **`LanguageContext` — conectado ao `i18next`** — `setLanguage(lang)` persiste no `localStorage` E chama `i18n.changeLanguage(lang)` em uma única operação. Type mismatch corrigido: `LanguageSelector` usava `'pt'`, contexto usava `'pt-BR'` — unificado para `'pt-BR'`.
277
+ - **`App.tsx` — limpeza da lógica de tema duplicada** removidos IIFE top-level e `useLayoutEffect` que manipulavam `localStorage`/`classList` para garantir light mode. O `ThemeProvider` gerencia isso corretamente; as camadas redundantes conflitavam.
278
+ - **`HomePage` + `TemplatePage` sem props `user`/`onLogout`**ambos consomem `useAuth()` diretamente; prop-drilling eliminado em toda a árvore de páginas (`HomeContent`, `TemplateContent`, `AppLayout`).
279
+ - **`routes.tsx` deletado** conteúdo movido para `components/shared/navigation.ts`; todos os imports atualizados.
280
+
281
+ ### Fixed
282
+
283
+ - **`useRichTextEditor` — `wordCount`/`characterCount` agora são `useState`** — as IIFEs que calculavam os contadores a cada render foram substituídas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente após cada digitação; um `useEffect([value])` os sincroniza quando o valor é alterado externamente.
284
+ - **`useRichTextEditor` — `eslint-disable` removido do effect de seleção** — o effect único de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantém `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
285
+ - **`useAssistant` — timers vazados corrigidos** — `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
286
+ - **`useAssistant` — hydration one-shot de `initialMessages`** — `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
287
+ - **`useAssistant` — scroll condicional ≤ 120px** — o auto-scroll só aciona `scrollIntoView` quando o usuário está a menos de 120 px do fundo, preservando a posição durante leitura de histórico.
288
+ - **`useAudioPlayer` — `eslint-disable` removido do effect de modo-switch** — `currentTimeRef` e `isPlayingRef` (latest-ref pattern) substituem referências diretas ao estado dentro do effect `[isFloating, variant]`, eliminando a necessidade do disable de lint.
289
+ - **`useStepper` — `initialStep` inválido** — lazy initializer com `Math.min(Math.max(1, initialStep), totalSteps)` garante que o estado inicial nunca fique fora do intervalo `[1, totalSteps]`.
290
+ - **`useTreeView``Space` e `Enter` separados** — `Space` expande/colapsa nós-pai e seleciona folhas; `Enter` expande/colapsa e sempre seleciona, alinhando com WAI-ARIA Tree Pattern 1.2.
291
+ - **`sidebar.tsx` — loop de re-render corrigido** — dependência do effect de overflow revertida de `navigationItems` para `navigationItems.length` para evitar loop causado pela nova referência de array gerada pelo `useMemo` a cada mudança de rota.
292
+ - **`useAssistant` — `setConversas(savedConversations)` em loop corrigido** — removido `useEffect` que chamava `setConversas` com `savedConversations = []` (default do destructuring), causando re-render infinito.
293
+
294
+ ### Changed (continued)
295
+
296
+ - **`RichTextEditor` — ARIA no `contentEditable`** adicionados `role="textbox"`, `aria-multiline`, `aria-label`, `aria-readonly` e `aria-disabled` no div editável. Removido o texto "Auto-save ativo" do rodapé.
297
+ - **`Stepper` — ARIA de lista** — o wrapper dos steps recebe `role="list"` + `aria-label="Progresso: etapa N de M"`. Cada `<Step>` recebe `role="listitem"`, `aria-current="step"` (quando ativo) e `aria-label` composto com status.
298
+ - **`Pagination` — prop `disabled` em `PaginationLink`** — `PaginationLink` aceita `disabled?: boolean`; aplica `pointer-events-none opacity-50`, `aria-disabled`, `tabIndex={-1}` e remove `href`. `PaginationPrevious` e `PaginationNext` repassam `disabled`.
299
+ - **`usePagination` — algoritmo deduplicado com `Set`** reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez.
300
+ - **`TreeView` — prop `ariaLabel` + roving tabindex** `<TreeView>` aceita `ariaLabel?: string`; roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id`.
301
+ - **`DashboardBarChart` — `topOfStack` com `useMemo`** IIFE extraída para `React.useMemo([stacked, chartSeries])` antes do `return`.
302
+ - **`useAssistant` — `conversasFiltradas` com `useMemo`** e tipos fortalecidos (`handleEnviarMensagem: (arg?: string | ActionType) => Promise<void>`).
303
+ - **`sidebar.tsx` — ARIA** — botão de toggle recebe `aria-expanded` e `aria-controls="sidebar-nav"`; `<nav>` recebe `id="sidebar-nav"` e `aria-label="Navegação principal"`. `navigationItems` memoizado com `useMemo`.
304
+
305
+ ---
306
+
307
+ - **`useRichTextEditor` — `wordCount`/`characterCount` agora são `useState`** — as IIFEs que calculavam os contadores a cada render foram substituídas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente após cada digitação; um `useEffect([value])` os sincroniza quando o valor é alterado externamente.
308
+ - **`useRichTextEditor` — `eslint-disable` removido do effect de seleção** — o effect único de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantém `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
309
+ - **`useAssistant`timers vazados corrigidos** — `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
310
+ - **`useAssistant`hydration one-shot de `initialMessages`** `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
311
+ - **`useAssistant`scroll condicional 120px** o auto-scroll aciona `scrollIntoView` quando o usuário está a menos de 120 px do fundo, preservando a posição durante leitura de histórico.
312
+ - **`useAudioPlayer` — `eslint-disable` removido do effect de modo-switch** `currentTimeRef` e `isPlayingRef` (latest-ref pattern) substituem referências diretas ao estado dentro do effect `[isFloating, variant]`, eliminando a necessidade do disable de lint.
313
+ - **`useStepper``initialStep` inválido** lazy initializer com `Math.min(Math.max(1, initialStep), totalSteps)` garante que o estado inicial nunca fique fora do intervalo `[1, totalSteps]`.
314
+ - **`useTreeView` `Space` e `Enter` separados** `Space` expande/colapsa nós-pai e seleciona folhas; `Enter` expande/colapsa e sempre seleciona, alinhando com WAI-ARIA Tree Pattern 1.2.
315
+
316
+ ### Changed
317
+
318
+ - **`RichTextEditor`ARIA no `contentEditable`** adicionados `role="textbox"`, `aria-multiline`, `aria-label`, `aria-readonly` e `aria-disabled` no div editável. Removido o texto "Auto-save ativo" do rodapé (informação sem valor de UX).
319
+ - **`Stepper` ARIA de lista** — o wrapper dos steps recebe `role="list"` + `aria-label="Progresso: etapa N de M"`. Cada `<Step>` recebe `role="listitem"`, `aria-current="step"` (quando ativo) e `aria-label` composto com status (atual/concluída).
320
+ - **`Pagination` prop `disabled` em `PaginationLink`** — `PaginationLink` aceita `disabled?: boolean`; quando ativo aplica `pointer-events-none opacity-50`, `aria-disabled`, `tabIndex={-1}` e remove `href`. `PaginationPrevious` e `PaginationNext` repassam `disabled` ao link.
321
+ - **`usePagination` — algoritmo deduplicado com `Set`** — o cálculo de `items` foi reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez, eliminando edge cases do algoritmo anterior com `leftSibling === 2` / `rightSibling === totalPages - 1`.
322
+ - **`TreeView` — prop `ariaLabel` + roving tabindex** — `<TreeView>` aceita `ariaLabel?: string` (padrão `"Navegação em árvore"`) aplicado ao `role="tree"`. O `tabIndex` de cada item usa roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id` em vez de `isSelected ? 0 : -1`.
323
+ - **`DashboardBarChart` — `topOfStack` com `useMemo`** — a IIFE que calculava o conjunto de barras do topo do stack no JSX foi extraída para `React.useMemo([stacked, chartSeries])` antes do `return`, separando lógica de render.
324
+ - **`useAssistant` — `conversasFiltradas` com `useMemo`** substituída computação inline por `useMemo([conversas, abaSelecionada])`.
325
+ - **`useAssistant` — sincronização de `conversas` com `savedConversations`** adicionado `useEffect([savedConversations])` que mantém `conversas` em sync com a prop `savedConversations`.
326
+ - **`useAssistant` — tipos fortalecidos** — `handleEnviarMensagem` tipado como `(arg?: string | ActionType) => Promise<void>` na interface e na implementação, substituindo `string | any`.
327
+ - **`sidebar.tsx` — ARIA e `useMemo`** — botão de toggle recebe `aria-expanded` e `aria-controls="sidebar-nav"`; o `<nav>` recebe `id="sidebar-nav"` e `aria-label="Navegação principal"`. `labelTranslations` e `navigationItems` memoizados com `useMemo`; dependência do effect de overflow atualizada de `navigationItems.length` para `navigationItems`.
328
+
329
+ ---
330
+
331
+ ## [2.1.4]2026-05-19
332
+
333
+ ### Changed
334
+
335
+ - **`XerticaAssistant` — decomposição em sub-componentes** — o componente monolítico (1 468 linhas) foi dividido em 9 sub-componentes focados em `parts/`: `AssistantHeader`, `AssistantCollapsedView`, `AssistantTabBar`, `AssistantWelcomeScreen`, `AssistantMessageBubble`, `AssistantTypingIndicator`, `AssistantConversationList`, `AssistantFeedbackDialog` e `AssistantDocumentEditor`. A API pública (`XerticaAssistantProps`) permanece 100% compatível.
336
+ - **`useAudioPlayer`headless hook** — toda a lógica do `AudioPlayer` foi extraída para `components/media/audio-player/use-audio-player.ts`. O componente `AudioPlayer` agora consome o hook internamente; API pública inalterada. O hook é exportado via `components/hooks/index.ts`.
337
+ - **`useLayoutShortcuts` — headless hook** — registro de atalhos de teclado (Ctrl+B, Ctrl+I) extraído do `LayoutContext` para `components/hooks/use-layout-shortcuts.ts`. Exportado via `components/hooks/index.ts`.
338
+ - **`CustomTooltipContent` — componente compartilhado** — implementação duplicada de tooltip customizado (existia em `sidebar.tsx` e `xertica-assistant.tsx`) consolidada em `components/shared/CustomTooltipContent.tsx`.
339
+ - **`useIsMobile` — fonte única de detecção mobile** — `use-sidebar.ts`, `use-assistant.ts`, `LayoutContext.tsx` e `AudioPlayer.tsx` agora importam de `components/shared/use-mobile.ts` em vez de duplicar a lógica de `matchMedia`.
340
+ - **`utils/color-utils.ts` — utilitários de cor** — funções `hexToRgb`, `hexToRgba` e `isLightColor` extraídas do `BrandColorsContext` para `utils/color-utils.ts` como funções puras reutilizáveis.
341
+ - **`ThemeToggle` — usa `useTheme()`** — substituída referência direta ao `localStorage` pelo hook `useTheme()` do `ThemeContext`.
342
+ - **`types.ts` — fonte única de tipos do assistente** — `Message`, `Conversation`, `Suggestion`, `MockResponse`, `SearchResult`, `SearchSource`, `SearchCommand` e enums relacionados movidos para `components/assistant/xertica-assistant/types.ts`. `xertica-assistant.tsx` e `AssistenteContext.tsx` re-exportam os tipos para backward compatibility.
343
+
344
+ ---
345
+
346
+ ## [2.1.3] — 2026-05-16
347
+
348
+ ### Added
349
+
350
+ - **Headless hooks — 4 new logic-only hooks** — all logic extracted from their UI components into standalone, tree-shakeable hooks:
351
+ - **`useFileUpload`** — drag state, file validation (size + count), error messaging, and hidden input ref. Props: `maxFiles`, `maxSize`, `onFilesChange`, `onError`, `disabled`. Returns: `files`, `dragActive`, `errorMessage`, `inputRef`, `handleFiles`, `handleDrag`, `handleDrop`, `handleChange`, `removeFile`, `openFileDialog`.
352
+ - **`usePagination`** — computes the full page item list (page numbers + ellipsis markers) and exposes navigation helpers. Supports controlled (`page` prop) and uncontrolled modes. Props: `totalItems`, `pageSize`, `initialPage`, `page`, `onPageChange`, `siblingCount`. Returns: `currentPage`, `totalPages`, `startIndex`, `endIndex`, `canGoPrev`, `canGoNext`, `isFirstPage`, `isLastPage`, `items: PaginationPageItem[]`, `goTo`, `next`, `prev`, `first`, `last`.
353
+ - **`useStepper`**step navigation with optional async `onBeforeNext` guard for per-step validation. Supports controlled (`step` prop) and uncontrolled modes. Props: `totalSteps`, `initialStep`, `step`, `onStepChange`, `onBeforeNext`. Returns: `currentStep`, `totalSteps`, `isFirstStep`, `isLastStep`, `canGoPrev`, `canGoNext`, `next` (async), `prev`, `goTo`, `reset`.
354
+ - **`useTreeView`**expand/collapse state, single-node selection, full WAI-ARIA keyboard navigation (Arrow keys, Home, End, Space), and DOM focus management via `nodeRefs`. Supports controlled `selectedNodeId`. Returns: `expanded`, `effectiveSelectedId`, `nodeRefs`, `getNodeRef`, `toggleExpand`, `handleSelect`, `handleKeyDown`, `getVisibleNodes`.
355
+ - **New chart types — 4 new Recharts wrappers** added to `components/ui/chart/chart.tsx`:
356
+ - **`RadarMetricChart`** — multi-axis radar chart with optional fill, dots, and multi-series overlay.
357
+ - **`PieMetricChart`** — pie chart with optional percentage labels and exploded slice support.
358
+ - **`RadialBarMetricChart`**radial bar chart with stacked rings and configurable arc angle.
359
+ - **`GaugeChart`** — pure SVG semicircle gauge with needle, threshold color zones, and optional label. Supports `thresholds` array for dynamic color changes at value breakpoints.
360
+ - **Chart color tokens expanded** — added `--chart-6`, `--chart-7`, `--chart-8` tokens to `styles/xertica/tokens.css`, `templates/src/styles/xertica/tokens.css`, and `bin/generate-tokens.ts`. All 8 chart tokens now use a vibrant, accessible palette.
361
+ - **Headless hook stories** — added `HeadlessHook` story variant to `file-upload.stories.tsx`, `pagination.stories.tsx`, `stepper.stories.tsx`, and `tree-view.stories.tsx` demonstrating fully custom UIs built with each hook.
362
+
363
+ ### Fixed
364
+
365
+ - **`GaugeChart`filled-blob visual bug for values > 50%** the SVG arc `largeArc` flag was set to `1` when `percent > 0.5`, causing the arc command to draw the reflex arc (> 180°) which rendered as a solid filled blob. Since the gauge is a semicircle (max 180°), `largeArc` is always `0`. Removed the conditional entirely and hardcoded `0` for both arc commands.
366
+ - **`GaugeChart`needle overlapping value text** the value text at `y=cy+4` was directly behind the needle pivot circle. Fixed by expanding the SVG `viewBox` from `"0 0 200 110"` to `"0 0 200 130"` and moving the value text to `y=cy+18` (13 px below the needle base circle bottom) and the label text to `y=cy+36`.
367
+
368
+ ### Changed
369
+
370
+ - **`FileUpload` component** — refactored to consume `useFileUpload` internally; public API unchanged.
371
+ - **`TreeView` component** — refactored to consume `useTreeView` internally; public API unchanged.
372
+ - **`Stepper` component** — refactored to consume `useStepper` internally; public API unchanged.
373
+ - **Documentation** — updated `docs/components/chart.md`, `docs/components/file-upload.md`, `docs/components/pagination.md`, `docs/components/stepper.md`, and `docs/components/tree-view.md` with full hook API reference, props/return tables, controlled/uncontrolled examples, and AI Rules sections.
374
+
375
+ ---
376
+
377
+ ## [2.1.2]2026-05-14
378
+
379
+ ### Fixed
380
+
381
+ - **`MarkdownMessage` — suporte a tabelas GFM** — o parser regex do componente não convertia blocos de tabela Markdown (`| col | col |`) em HTML. Adicionada transformação de tabelas GFM completa (header, separador, linhas de dados) com estilos do design system (`border-border`, `hover:bg-muted/50`, `rounded-[var(--radius)]`, `overflow-x-auto`). A transformação roda antes das substituições de quebra de linha para evitar `<br/>` dentro das células.
382
+
383
+ ### Added
384
+
385
+ - **Template — `AssistantPage`** — nova página de assistente completa: sidebar em modo `assistant` aberta por padrão (largura 320px), botão "Nova Conversa" (`variant="secondary"`), busca de conversas com filtro em tempo real, histórico de 8 conversas de exemplo em 3 grupos (Hoje / Ontem / Esta semana), modal de exclusão com `AlertDialog`, modal de renomeação com `Dialog` + `Input`, simulação de conteúdo ao selecionar conversa via `initialMessages`, botão "Voltar" em `variant` primário no `Header`.
386
+ - **Template — `AppLayout`** — novas props `sidebarVariant?: 'default' | 'assistant'` e `sidebarProps?: Record<string, any>` para permitir que páginas customizem a sidebar sem quebrar o contrato do layout.
387
+
388
+ ---
389
+
390
+ ## [2.1.1] — 2026-05-14
391
+
392
+ ### Fixed
393
+
394
+ - **XerticaAssistant — tab bar oculta em modo chat-only** — quando `showHistory` e `showFavorites` estão ambas desativadas, a barra de abas (incluindo a aba "Chat") deixa de ser renderizada, eliminando a exibição de uma aba isolada sem alternativas de navegação.
395
+ - **`xertica-ui/style.css` — import duplo de Roboto removido** — o `@import url(Google Fonts/Roboto)` foi removido de `styles/globals.css`. A importação da fonte passa a ser responsabilidade do app consumidor, eliminando o alerta `@import must precede all other statements` do PostCSS quando o CSS compilado era injetado após o output do Tailwind v4.
396
+
397
+ ---
398
+
399
+ ## [2.1.0]2026-05-13
400
+
401
+ ### Added
402
+
403
+ - **`components/blocks/card-patterns/`**novo domínio `blocks/` com 6 componentes de alto nível compostos exclusivamente de primitivos `ui/`:
404
+ - **`FeatureCard`** — ícone com fundo colorido, título, badge opcional, descrição e botão de ação. Suporta 10 tokens de cor (`primary`, `chart-1..5`, `success`, `info`, `warning`, `destructive`). Replica o padrão de cards da Home page.
405
+ - **`ActivityCard`**feed de atividades recentes com avatar, descrição de ação, timestamp e badge por tipo (`create`, `update`, `delete`, `comment`, `deploy`).
406
+ - **`ProfileCard`** card de usuário/membro com avatar, badge de status (`online`, `offline`, `away`, `busy`), linha de stats e ações primária/secundária.
407
+ - **`ProjectCard`** status de projeto com badge, barra de progresso (usa `Progress` com variant semântica por status), stack de avatares de membros e data limite.
408
+ - **`QuickActionCard`**tile de ação rápida com ícone em caixa colorida, badge e botão full-width.
409
+ - **`NotificationCard`** — lista de notificações com indicador de não-lido, badge de tipo, "Marcar todas como lidas" e "Ver todas".
410
+ - **Exportação do domínio `blocks/`** — todos os componentes disponíveis via `import { ... } from 'xertica-ui'` e via `components/blocks/index.ts`.
411
+ - **Subpath público `xertica-ui/blocks`** — `FeatureCard`, `ActivityCard`, `ProfileCard`, `ProjectCard`, `QuickActionCard` e `NotificationCard` agora podem ser importados diretamente de `xertica-ui/blocks`.
412
+ - **Subpath público `xertica-ui/pages`**`LoginPage`, `HomePage`, `TemplatePage`, `ForgotPasswordPage`, `ResetPasswordPage`, `VerifyEmailPage` e seus contents agora são publicados com entrypoint dedicado.
413
+ - **Documentação** — criado `docs/components/card-patterns.md` com props, exemplos e layout de dashboard completo para todos os 6 block components.
414
+
415
+ ### Changed
416
+
417
+ - **Calendar — dropdown caption styling** — quando `captionLayout="dropdown"` ou variações, os seletores de mês/ano agora têm visual de input (borda, fundo `bg-background`, focus ring `ring-primary`, `rounded-[var(--radius)]`, padding compacto fixo `px-2.5 py-1`). O `caption_label` em modo dropdown passa a usar `h-full w-full` com layout flexível.
418
+ - **Calendar — prop `size` removida** — o tamanho e o arredondamento do trigger ("Pick a date") são responsabilidade do elemento trigger, não do `Calendar`. A story `InPopover` demonstra o padrão correto com `triggerSizeClasses` aplicado diretamente ao `<Button>` com `rounded-[var(--radius)]` para alinhar com o token do `Input`.
419
+ - **Card stories** — enriquecidas com 3 novas variações: `WithAction` (uso de `CardAction` no header), `TeamMember` (grid de member cards com avatar e status), `SettingsCard` (lista de settings com `Separator` e `Badge`). Background `bg-muted` adicionado via decorator global da stories file para contraste com o fundo dos cards.
420
+ - **Storybook — docs stories** — adicionado `render: (args) => <Component {...args} />` no nível do `meta` em todos os 60 arquivos de stories em `components/ui/`. Resolve o problema onde stories com apenas `args` (sem `render` explícito) mostravam a mesma variação repetida na aba Docs por dependerem do `projectAnnotations.render` implícito do framework React.
421
+ - **Storybook — `preview.tsx`** — `min-h-screen` passou a ser condicional a `layout: 'fullscreen'`, resolvendo a altura excessiva dos exemplos na aba Docs.
422
+ - **Template npm** `templates/package.json` atualizado para `2.1.0` e dependência `xertica-ui` para `^2.1.0`.
423
+ - **Template version badge** o template passa a exibir um indicador visual discreto da versão do pacote `xertica-ui` usada pelo projeto.
424
+ - **Documentação** — atualizados `calendar.md` (props `captionLayout`/`buttonVariant`, nota sobre `size` no trigger), `card.md` (`CardAction` na anatomia, exemplos WithAction/Stats/TeamMember/Settings), `chart.md` (nova seção Stacked Bar Chart), `architecture.md` (domínio `blocks/` com árvore de arquivos).
425
+
426
+ ### Fixed
427
+
428
+ - **Chart — stacked bar radius** — em `DashboardBarChart` com `stacked`, apenas a série no topo de cada `stackId` recebe `radius={[4,4,0,0]}`; as demais recebem `radius={[0,0,0,0]}`. Elimina a borda arredondada no topo das barras intermediárias e inferiores da pilha.
429
+ - **`FeatureCard`badge overflow** alterado de `flex items-center` para `flex flex-wrap` no container título+badge, garantindo que o badge quebre para a linha seguinte em vez de vazar fora do card quando o título ocupa toda a largura disponível.
430
+
431
+ ---
432
+
433
+ ## [2.0.6] — 2026-05-13
434
+
435
+ ### Added
436
+
437
+ - **Contrato de independência dos componentes** — documentado que `xertica-ui/style.css` é a única importação global obrigatória e que componentes públicos devem funcionar isoladamente sempre que possível.
438
+ - **`useOptionalLayout`** — nova API compatível para componentes reutilizáveis consumirem o layout com fallback seguro, mantendo `useLayout` como hook estrito para apps que querem falhar cedo.
439
+ - **Smoke tests de API pública** — adicionada validação de import/render dos subpaths públicos (`ui`, `brand`, `layout`, `assistant`, `media` e `hooks`).
440
+ - **Exports públicos de Maps** `useMapLayers`, `GOOGLE_MAPS_ID` e `GOOGLE_MAPS_LIBRARIES` agora são expostos pelo subpath `xertica-ui/ui`.
441
+
442
+ ### Changed
443
+
444
+ - **`XerticaProvider` completo** — passa a compor providers de theme, brand colors, language, layout, assistant, API keys, Google Maps, tooltip e toaster como wrapper de conveniência para apps consumidores.
445
+ - **Componentes com contexto de layout** — `Header`, `Sidebar`, páginas e componentes de mídia foram ajustados para renderizar com fallback interno quando importados sem provider.
446
+ - **Arquitetura FSD/FDA** — tipos compartilhados do assistant foram movidos para camada neutra, evitando dependência runtime de `components/shared` para implementação de feature.
447
+ - **Documentação LLM e componentes** — README, docs de provider/mapa, `llms.txt`, `llms-compact.txt` e `docs/llms.md` foram alinhados ao contrato de independência e aos subpaths consumíveis.
448
+ - **Storybook Docs de UI** páginas MDX dos componentes de UI agora renderizam as variações reais das stories, evitando repetição do mesmo exemplo nos blocos de variação.
449
+ - **Storybook Maps** — stories de mapa usam um frame responsivo mais largo para melhorar a visualização na aba Docs.
450
+
451
+ ### Fixed
452
+
453
+ - **Guards de browser/SSR** — providers e componentes browser-only agora protegem acessos a `window`, `document`, `localStorage`, `navigator` e scripts externos.
454
+ - **Google Maps sem configuração** — componentes relacionados a Maps renderizam estados de configuração/erro sem quebrar a aplicação consumidora.
455
+
456
+ ---
457
+
458
+ ## [2.0.5] 2026-05-12
459
+
460
+ ### Added
461
+
462
+ - **`llms-compact.txt`** — novo arquivo de referência compacto para LLMs, sintetizando todos os componentes em formato reduzido ideal para contextos de tokens limitados.
463
+ - **`docs/decision-tree.md`** — guia de árvore de decisão para agentes de IA selecionarem o componente correto com base nos requisitos da UI.
464
+ - **`templates/CLAUDE.md`**`CLAUDE.md` agora é scaffolded automaticamente em projetos criados via `npx xertica-ui@latest init`, fornecendo contexto arquitetural (FSD/FDA, subpath imports, tokens semânticos) para Claude Code e outros assistentes de IA.
465
+ - **Storybook stories** — adicionadas stories interativas para Accordion, AlertDialog, Button, Checkbox, Dialog, Input, Switch, Tabs, HomePage e TemplatePage.
466
+ - **`components/pages/home-page/home-page.mdx`** e **`template-page.mdx`** — novas entradas de documentação MDX para as page components.
467
+
468
+ ### Changed
469
+
470
+ - **`guidelines/Guidelines.md`**reescrita completa do guia de arquitetura FSD/FDA: maior detalhamento de responsabilidades por camada, convenções de import e fluxo de adição de novas rotas.
471
+ - **`components.json`**atualização completa do registro de componentes, cobrindo todos os 97 componentes com metadados de subpath, props e variantes.
472
+ - **`llms.txt`**seção de subpath imports e mapeamento de camadas FSD/FDA atualizados.
473
+ - **`vite.config.ts`**ajustes no build multi-entry para garantir correta emissão dos arquivos CJS/ESM.
474
+
475
+ ### Fixed
476
+
477
+ - **`npx xertica-ui init` usa versão em cache** — documentado que o npx armazena pacotes em cache localmente sem TTL curto. Sempre use `npx xertica-ui@latest init` para garantir a versão mais recente. O `templates/CLAUDE.md` scaffolded no projeto gerado inclui essa orientação.
478
+
479
+ ---
480
+
481
+ ## [2.0.3]2026-05-11
482
+
483
+ ### Added
484
+
485
+ - **CLI `update` atualização de projeto** novo modo no comando `update` permite atualizar os arquivos do projeto (app shell, shared, features, pages) para qualquer versão publicada do `xertica-ui`, com seleção granular de quais partes atualizar e confirmação antes de sobrescrever.
486
+
487
+ ---
488
+
489
+ ## [2.0.2]2026-05-11
490
+
491
+ ### Fixed
492
+
493
+ - **CLI rewritten for FSD/FDA structure** — `npx xertica-ui@latest init` agora copia corretamente a estrutura Feature-Sliced Design:
494
+ - Removida cópia de `src/app/routes.tsx` (arquivo não existe mais após refatoração)
495
+ - Adicionada cópia de `src/app/components/AppLayout.tsx`
496
+ - Adicionada cópia completa de `src/shared/` (`auth.ts`, `navigation.ts`, `types/auth.ts`)
497
+ - Adicionada cópia de `src/features/auth|home|template` conforme seleções do usuário
498
+ - Cópia de pages corrigida de `src/app/pages/` → `src/pages/`
499
+ - `AuthGuard.tsx` agora gerado dinamicamente com imports e rotas apenas das páginas selecionadas
500
+ - **`generateDemoResponse` exportado via `xertica-ui/assistant`** estava ausente do barrel causando `SyntaxError: does not provide an export named 'generateDemoResponse'`
501
+ - **Build corrigido: UMD → CJS** — múltiplos entry points não são suportados com formato UMD no Vite; migrado para CJS (todos os `*.umd.js` → `*.cjs.js` no `package.json` exports)
502
+
503
+ ---
504
+
505
+ ## [2.0.0]2026-05-11
506
+
507
+ ### Added
508
+
509
+ - **Subpath exports** — The package now exposes 6 granular entry points alongside the full root barrel:
510
+ - `xertica-ui/ui` all UI primitives (Button, Card, Input, Table, Dialog, etc.)
511
+ - `xertica-ui/layout`Sidebar and Header
512
+ - `xertica-ui/brand` XerticaProvider, XerticaLogo, XerticaXLogo, XerticaOrbe, ThemeToggle, LanguageSelector
513
+ - `xertica-ui/assistant` — XerticaAssistant, MarkdownMessage, CodeBlock, FormattedDocument, ModernChatInput
514
+ - `xertica-ui/media` — VideoPlayer, AudioPlayer, FloatingMediaWrapper
515
+ - `xertica-ui/hooks` — useLayout, useTheme, useLanguage, useBrandColors, useAssistente, useApiKey
516
+ - Root `from 'xertica-ui'` remains fully supported for backward compatibility.
517
+ - **`ImageWithFallback` added to `xertica-ui/ui`** previously only in the root barrel; now accessible via the `/ui` subpath.
518
+ - **Multi-entry Vite build** — `vite.config.ts` now uses `lib.entry` as an object (7 entry points). Output filenames follow `[entryName].[format].js` pattern.
519
+ - **CLI template — FSD/FDA architecture** — The scaffolded template was restructured to follow Feature-Sliced Design + Feature-Driven Architecture:
520
+ - `src/app/` — BrowserRouter, XerticaProvider, AuthGuard (auth state + route definitions), AppLayout (Sidebar + children shell)
521
+ - `src/shared/` — `config/navigation.ts` (route registry), `lib/auth.ts` (localStorage helpers), `types/auth.ts` (User interface)
522
+ - `src/features/auth/ui/`LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent; with shared `AuthPageShell` and `SocialLoginButtons` DRY extractions
523
+ - `src/features/home/ui/`HomeContent
524
+ - `src/features/template/ui/` — TemplateContent, FormTemplate
525
+ - `src/pages/` — thin page wrappers (LoginPage, HomePage, TemplatePage, ForgotPasswordPage, VerifyEmailPage, ResetPasswordPage)
526
+ - **`templates/guidelines/Guidelines.md`** — new architecture guide documenting FSD/FDA layers, layer responsibilities, and "Adding New Routes" step-by-step.
527
+
528
+ ### Changed
529
+
530
+ - **Template imports** — All template source files updated to use subpath imports (`xertica-ui/ui`, `xertica-ui/brand`, `xertica-ui/layout`, `xertica-ui/assistant`, `xertica-ui/hooks`) instead of the root barrel.
531
+ - **`FormTemplate.tsx` rewritten** Removed dependency on `@hookform/resolvers/zod`, `react-hook-form`, and `zod` (packages not included in the CLI template's `package.json`). Now uses plain React `useState` + inline validation with only `xertica-ui/ui` primitives.
532
+ - **`tsconfig.build.json`** — `include` array updated to cover all new barrel source directories (`components/**/*`, `contexts/**/*`, `hooks/**/*`).
533
+ - **Documentation** (`llms.txt`, `llms-full.txt`) Added subpath import reference table and FSD/FDA layer mapping.
534
+
535
+ ### Fixed
536
+
537
+ - **Stale compiled artifacts** — Removed `App.js`, `App.d.ts`, `main.js`, `main.d.ts` from `templates/src/app/` that were being resolved by Vite's extension priority (`.js` before `.tsx`), causing `Failed to fetch dynamically imported module` errors after the FSD restructure.
538
+
539
+ ---
540
+
541
+ ## [1.10.0] — 2026-05-08
542
+
543
+ ### Added
544
+
545
+ - **Semantic Variants** — Added `success`, `info`, and `warning` variants to components that lacked them:
546
+ - **Button** — now supports 9 variants: `default`, `secondary`, `outline`, `ghost`, `destructive`, `link`, `success`, `info`, `warning`.
547
+ - **Progress** — new `variant` prop (`default`, `success`, `info`, `warning`, `destructive`) colors both the track and the indicator.
548
+ - **NotificationBadge** — added `secondary`, `outline`, `success`, `info`, `warning`; standardized `default` to primary color for consistency with Badge and Button.
549
+ - **TimelineDot** — added `info` and `outline` variants; replaced hardcoded `rgb()` values with semantic CSS tokens (`bg-success`, `bg-warning`).
550
+ - **DialogBody** — new sub-component for the Dialog. When used, `DialogHeader` and `DialogFooter` stay pinned while `DialogBody` scrolls independently. Exported from `xertica-ui`.
551
+ - **Dialog height management** — `DialogContent` now has `max-h-[calc(100dvh-2rem)] overflow-hidden`. The close button (×) is pinned and never scrolls with content. `size="full"` fills the full viewport height.
552
+ - **Header `breadcrumbSlot`** — new prop accepting any `ReactNode` rendered immediately after the breadcrumb/title area (badges, buttons, status chips, etc.).
553
+ - **Sidebar default variant groups** — `variant="default"` now renders `navigationGroups` with labeled group headers. Each `RouteConfig` supports a `children` field (sub-routes shown in a contextual `DropdownMenu` via a `ChevronRight` button at the end of the item).
554
+
555
+ ### Fixed
556
+
557
+ - **Search double clear icon** — `type="search"` caused browsers to inject a native clear button on top of the custom × icon. Changed to `type="text"`.
558
+ - **CSS `@source` path** — CLI template `src/styles/index.css` had `../node_modules/xertica-ui` (one level short); corrected to `../../node_modules/xertica-ui/components`.
559
+ - **`theme-map.css` incomplete** — `--color-success`, `--color-info`, `--color-warning` and their `foreground` variants were missing, preventing `bg-success`, `text-info`, etc. from being generated in the compiled library CSS.
560
+
561
+ ### Changed
562
+
563
+ - **Storybook argTypes** Multiple components had controls missing from the Storybook panel: Badge (`success`/`info`/`warning` options), Select (`size`), Avatar (`size`), Rating (`readonly` casing), Timeline (`dotVariant`), Dialog (`size` available in all stories). All corrected.
564
+ - **LLM documentation** (`llms-full.txt`) Updated Badge, Button, Dialog, Header, NotificationBadge, Progress, Search, Sidebar, and Timeline sections to reflect current APIs.
565
+
566
+ ---
567
+
568
+ ## [1.9.0] — 2026-05-05
569
+
570
+ ### Added
571
+
572
+ - **Standardized Form Sizing System** — Implemented a unified `size` prop (`sm`, `md`, `lg`) across all form-related components for perfect visual alignment in grid layouts:
573
+ - **Text Components** — `Input`, `SelectTrigger`, `Textarea`, `Search`, and `InputOTPSlot` now share consistent height/padding/font-size tokens.
574
+ - **Toggle Components** — `Checkbox`, `RadioGroupItem`, and `Switch` now feature dynamic sizing for both containers and internal indicators (check icon, dot, thumb).
575
+ - **Labels** — `Label` component now supports `size` to match the text size of the associated input.
576
+ - **Reference Guide** — Added `docs/form-sizing.md` as a comprehensive guide for the standardized sizing scale.
577
+ - **Assistant Individual Controls** — Added granular control props to `XerticaAssistant` to toggle specific features independently:
578
+ - `showHistory`, `showFavorites`, `allowAudioInput`, `allowFileUpload`, `allowDocCreation`, `allowPodcastGen`, `allowResearchGen`.
579
+ - **Header Breadcrumb Navigation** — Standardized `Header` to use breadcrumbs as the default navigation pattern:
580
+ - Added support for `react-router-dom` links in breadcrumbs to prevent page reloads.
581
+ - Configurable hierarchy levels and labels directly via props.
582
+
583
+ ### Changed
584
+
585
+ - **Form Component Architecture** — Migrated form elements from legacy tokens to standardized design system tokens (`bg-background`, `border-border`) for better theme consistency.
586
+ - **Documentation & Storybook** — Updated all 9 affected form components with new "Sizes" sections in Storybook (Stories + MDX) and enriched LLM-facing markdown documentation.
587
+ - **Unit Testing** — Updated test suites for `Checkbox`, `RadioGroup`, `Switch`, `InputOTP`, `Label`, `Search`, `Select`, and `Textarea` to verify sizing variant classes.
588
+
589
+ ### Fixed
590
+
591
+ - **Search Component** — Removed obsolete `loading` prop which was causing TypeScript errors and was redundant with the current design system patterns.
592
+ - **SelectTrigger Sizing** — Standardized `md` height to `h-10` (40px) to match the rest of the form system.
593
+
594
+ ---
595
+
596
+ ## [1.8.0]2026-04-27
597
+
598
+ ### Added
599
+
600
+ - **VideoPlayer UI Enhancements** Added gradient overlay on controls for improved contrast against video content:
601
+ - Gradient: `from-black/60 via-black/30 to-transparent` with `pt-12` spacing
602
+ - White progress bar with `bg-white/30` track, `bg-white` fill, and `rounded-r-sm` on filled portion
603
+ - White icons with `drop-shadow-md` for visibility
604
+ - Buttons use `text-white hover:text-white hover:bg-black/50` for proper hover states
605
+ - **Slider Visual Fixes** Improved progress bar alignment:
606
+ - Added left margin `ml-2` to track for thumb alignment
607
+ - Added `rounded-r-sm` to Range for filled portion
608
+ - Adjusted track/margins for proper visual alignment at full value
609
+
610
+ ### Changed
611
+
612
+ - **Documentation** — Updated component counts across all docs:
613
+ - `llms.txt`: 75 97 components
614
+ - `llms-full.txt`: Added statistics table
615
+ - `docs/llms.md`: Added statistics section
616
+ - `Introduction.mdx`: Added "97 Components" badge
617
+ - **components.json** — 75 → 89 components (added missing Media, Assistant, Pages, and Map components)
618
+
619
+ ### Fixed
620
+
621
+ - **Slider Progress Bar** Fixed visual gap where thumb doesn't align with filled bar at end position by adjusting track margins
622
+
623
+ ---
624
+
625
+ ## [1.7.0] — 2026-04-23
626
+
627
+ ### Fixed
628
+
629
+ - **CLI CSS Theme Import** — Corrected `@theme` → `@theme inline` in both the library's `index.css` and the generated template `src/styles/index.css`. Plain `@theme {}` was causing Tailwind v4 to resolve color tokens statically at build time using the library's defaults, preventing consumer `tokens.css` overrides from propagating into utility classes (`bg-destructive`, `bg-primary`, alert colors, etc.).
630
+ - **Dark Mode `--primary`** — Added missing `--primary: var(--xertica-primary)` in the dark mode block of `tokens.css` (library, template, and generator). Components using `bg-primary` were not picking up the dark mode brand color.
631
+ - **Dark Mode Chart Tokens** — Generator (`bin/generate-tokens.ts`) now includes `--chart-1` through `--chart-5` in the dark mode section for all generated `tokens.css` files.
632
+
633
+ ### Added
634
+
635
+ - **CLI `update` command** — `npx xertica-ui@latest update` prompts the user to select a new color theme and overwrites `src/styles/xertica/tokens.css` with the newly generated tokens, preserving all other project files.
636
+ - **Template `@theme inline` mapping** — Generated `src/styles/index.css` now includes a complete `@theme inline {}` block mapping all tokens (sidebar, charts, gradients, brand, radii) to CSS variable aliases, ensuring full theme coverage for consumer projects.
637
+ - **Documentation** — `docs/getting-started.md` updated with CLI `update` command reference and a new "CSS Setup (Critical)" section explaining the `@theme inline` requirement.
638
+
639
+ ---
640
+
641
+ ## [1.6.0] — 2026-04-20
642
+
643
+ ### Added
644
+
645
+ - **`docs/llms.md`** — Master LLM/AI-agent entrypoint index with full component catalog, token quick reference, and reading order guide.
646
+ - **`docs/layout.md`** — Complete `LayoutContext` and `useLayout()` API reference.
647
+ - **`docs/components/route-map.md`**New documentation for `RouteMap` component.
648
+ - **`docs/components/use-mobile.md`** — New documentation for `useMobile` / `useIsMobile` hooks.
649
+ - **`Header`** — New props: `user` (profile with avatar, name, email, and dropdown menu items), `actions` (custom icon action buttons), `showSettings` / `onSettingsClick`, `showLogout` / `onLogoutClick`. Fixed render order: Language → Theme → Actions → Settings → User → Logout.
650
+ - **`Sidebar`** — New `width` prop (`expandedWidth: number`) for configuring the expanded sidebar pixel width. Width is now read and stored via `LayoutContext.sidebarWidth`.
651
+
652
+ ### Changed
653
+
654
+ - **Documentation**All 61 component docs, 5 pattern docs, and 6 root docs fully rewritten in English with standardized structure (Overview, When to Use, Anatomy, Props table, Examples, AI Rules, Related Components).
655
+ - **JSDoc**All Portuguese JSDoc comments in `components/ui/` translated to English and enriched with accurate `@ai-rules`.
656
+ - **`README.md`**Complete rewrite in English, restructured for npm page quality (quick start, install guide, component catalog, token reference, AI agent entrypoint, troubleshooting).
657
+ - **`package.json`**Version bumped to `1.6.0`. Description translated to English.
658
+
659
+ ### Fixed
660
+
661
+ - **`docs/components/page-header.md`** — Was documenting a wrong API (`title/description/actions`). Now correctly documents the real API: `breadcrumbs[]`, `showLanguageSelector`, `rightContent`, `PageHeaderHeading`, `PageHeaderDescription`.
662
+ - **`docs/components/stepper.md`** — Was documenting a `steps[]` array prop. Now correctly documents the composable `<Stepper currentStep> + <Step step label>` API (1-indexed).
663
+ - **`docs/components/empty.md`**Was documenting single-prop component. Now correctly documents the composable sub-component pattern: `Empty > EmptyIcon > EmptyTitle > EmptyDescription > EmptyAction`.
664
+ - **`docs/components/stats-card.md`** — `trend` was documented as a string. Now correctly documented as `{ value: number; label?: string }`.
665
+ - **`docs/components/chart.md`** — Was documenting raw Recharts usage. Now correctly documents the `ChartContainer + ChartConfig + var(--color-*)` pattern.
666
+
667
+ ---
668
+
669
+ ## [1.5.2] — 2026-04-15
670
+
671
+ ### Fixed
672
+
673
+ - Resolved regression where modal components (Dialog/AlertDialog) failed to render in projects initialized via the CLI.
674
+ - Implemented robust CSS integration using Tailwind v4 theme mappings.
675
+ - Ensured Radix UI portals correctly inherit theme variables.
676
+
677
+ ---
678
+
679
+ ## [1.5.1] — 2026-04-14
680
+
681
+ ### Changed
682
+
683
+ - Sidebar: Added `assistente` variant with fixed areas, searchable navigation, and grouped navigation structures.
684
+ - Template page updated to demonstrate the assistant sidebar variant.
685
+
686
+ ---
687
+
688
+ ## [1.5.0] — 2026-04-13
689
+
690
+ ### Added
691
+
692
+ - `Sidebar` — `width` / `expandedWidth` prop for configurable expanded sidebar width.
693
+ - `LayoutContext` — `sidebarWidth` and `setSidebarWidth` for global sidebar width management.
694
+ - `Header` — User profile section with avatar, dropdown menu, settings button, and logout button.
695
+ - `StatsCard` — KPI metric card component.
696
+ - `Timeline` — Chronological event list with dot variants.
697
+ - `TreeView` — Hierarchical tree navigation.
698
+ - `Rating` — Star-based rating input.
699
+ - `FileUpload` — Drag-and-drop file input.
700
+ - `Search` — Pre-built search input with icon and clear button.
701
+ - `NotificationBadge` — Dot/count badge overlay.
702
+ - `RouteMap` — Google Maps route display and direction calculation.
703
+ - `Stepper` — Multi-step progress indicator.
704
+ - `Map` — Advanced Google Maps integration with markers, circles, polygons, and layers.
705
+ - `XerticaAssistant` — Embedded Gemini AI assistant panel.