xertica-ui 2.1.10 → 2.1.11

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 (945) hide show
  1. package/CHANGELOG.md +504 -469
  2. package/README.md +382 -299
  3. package/assets/xertica-logo.svg +37 -37
  4. package/assets/xertica-x-logo.svg +20 -20
  5. package/bin/cli.ts +745 -548
  6. package/bin/generate-tokens.ts +262 -262
  7. package/bin/language-config.ts +301 -0
  8. package/components/assets/xertica-orbe-animation.ts +1162 -1162
  9. package/components/assistant/code-block/CodeBlock.tsx +268 -266
  10. package/components/assistant/code-block/code-block.stories.tsx +57 -57
  11. package/components/assistant/code-block/code-block.test.tsx +44 -44
  12. package/components/assistant/code-block/index.ts +1 -1
  13. package/components/assistant/formatted-document/FormattedDocument.tsx +147 -145
  14. package/components/assistant/formatted-document/formatted-document.stories.tsx +51 -51
  15. package/components/assistant/formatted-document/formatted-document.test.tsx +42 -42
  16. package/components/assistant/formatted-document/index.ts +1 -1
  17. package/components/assistant/index.ts +6 -6
  18. package/components/assistant/markdown-message/MarkdownMessage.tsx +152 -152
  19. package/components/assistant/markdown-message/index.ts +1 -1
  20. package/components/assistant/markdown-message/markdown-message.stories.tsx +50 -50
  21. package/components/assistant/markdown-message/markdown-message.test.tsx +33 -33
  22. package/components/assistant/modern-chat-input/ModernChatInput.tsx +36 -31
  23. package/components/assistant/modern-chat-input/index.ts +1 -1
  24. package/components/assistant/modern-chat-input/modern-chat-input.stories.tsx +131 -131
  25. package/components/assistant/modern-chat-input/modern-chat-input.test.tsx +79 -79
  26. package/components/assistant/xertica-assistant/index.ts +3 -3
  27. package/components/assistant/xertica-assistant/parts/AssistantCollapsedView.tsx +99 -97
  28. package/components/assistant/xertica-assistant/parts/AssistantConversationList.tsx +106 -104
  29. package/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.tsx +81 -79
  30. package/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.tsx +78 -74
  31. package/components/assistant/xertica-assistant/parts/AssistantHeader.tsx +75 -73
  32. package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +560 -558
  33. package/components/assistant/xertica-assistant/parts/AssistantTabBar.tsx +67 -65
  34. package/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.tsx +41 -41
  35. package/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.tsx +103 -101
  36. package/components/assistant/xertica-assistant/parts/index.ts +16 -16
  37. package/components/assistant/xertica-assistant/types.ts +134 -134
  38. package/components/assistant/xertica-assistant/use-assistant.ts +615 -608
  39. package/components/assistant/xertica-assistant/xertica-assistant.stories.tsx +407 -407
  40. package/components/assistant/xertica-assistant/xertica-assistant.test.tsx +65 -65
  41. package/components/assistant/xertica-assistant/xertica-assistant.tsx +613 -609
  42. package/components/blocks/card-patterns/ActivityCard.tsx +100 -81
  43. package/components/blocks/card-patterns/ActivityCardSkeleton.tsx +56 -0
  44. package/components/blocks/card-patterns/FeatureCard.tsx +109 -109
  45. package/components/blocks/card-patterns/FeatureCardSkeleton.tsx +63 -0
  46. package/components/blocks/card-patterns/NotificationCard.tsx +140 -137
  47. package/components/blocks/card-patterns/NotificationCardSkeleton.tsx +81 -0
  48. package/components/blocks/card-patterns/ProfileCard.tsx +114 -100
  49. package/components/blocks/card-patterns/ProfileCardSkeleton.tsx +69 -0
  50. package/components/blocks/card-patterns/ProjectCard.tsx +123 -110
  51. package/components/blocks/card-patterns/ProjectCardSkeleton.tsx +72 -0
  52. package/components/blocks/card-patterns/QuickActionCard.tsx +68 -68
  53. package/components/blocks/card-patterns/QuickActionCardSkeleton.tsx +44 -0
  54. package/components/blocks/card-patterns/card-patterns.mdx +123 -0
  55. package/components/blocks/card-patterns/card-patterns.stories.tsx +594 -515
  56. package/components/blocks/card-patterns/index.ts +29 -17
  57. package/components/blocks/index.ts +1 -1
  58. package/components/brand/branding/branding.stories.tsx +57 -57
  59. package/components/brand/index.ts +6 -6
  60. package/components/brand/language-selector/LanguageSelector.tsx +47 -12
  61. package/components/brand/language-selector/index.ts +1 -1
  62. package/components/brand/language-selector/language-selector.mdx +126 -57
  63. package/components/brand/language-selector/language-selector.stories.tsx +66 -16
  64. package/components/brand/language-selector/language-selector.test.tsx +64 -8
  65. package/components/brand/theme-toggle/ThemeToggle.tsx +70 -68
  66. package/components/brand/theme-toggle/index.ts +1 -1
  67. package/components/brand/theme-toggle/theme-toggle.stories.tsx +34 -34
  68. package/components/brand/theme-toggle/theme-toggle.test.tsx +34 -34
  69. package/components/brand/xertica-logo/XerticaLogo.stories.tsx +82 -82
  70. package/components/brand/xertica-logo/XerticaLogo.tsx +104 -104
  71. package/components/brand/xertica-logo/index.ts +1 -1
  72. package/components/brand/xertica-logo/xertica-logo.test.tsx +26 -26
  73. package/components/brand/xertica-orbe/XerticaOrbe.tsx +1927 -1927
  74. package/components/brand/xertica-orbe/index.ts +1 -1
  75. package/components/brand/xertica-orbe/xertica-orbe.stories.tsx +40 -40
  76. package/components/brand/xertica-orbe/xertica-orbe.test.tsx +19 -19
  77. package/components/brand/xertica-provider/XerticaProvider.tsx +38 -2
  78. package/components/brand/xertica-provider/index.ts +1 -1
  79. package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
  80. package/components/brand/xertica-provider/xertica-provider.test.tsx +74 -74
  81. package/components/brand/xertica-xlogo/XerticaXLogo.stories.tsx +79 -79
  82. package/components/brand/xertica-xlogo/XerticaXLogo.tsx +65 -65
  83. package/components/brand/xertica-xlogo/index.ts +1 -1
  84. package/components/brand/xertica-xlogo/xertica-xlogo.test.tsx +16 -16
  85. package/components/examples/ApiKeyMapExample.tsx +71 -71
  86. package/components/examples/DrawingMapExample.tsx +565 -565
  87. package/components/examples/FilterableMapExample.tsx +393 -393
  88. package/components/examples/LocationPickerExample.tsx +348 -348
  89. package/components/examples/MapExamples.tsx +268 -268
  90. package/components/examples/MapGmpExample.tsx +169 -169
  91. package/components/examples/MapShowcase.tsx +471 -471
  92. package/components/examples/RouteMapExamples.tsx +329 -329
  93. package/components/examples/SidebarLogoExample.tsx +65 -65
  94. package/components/examples/SimpleFilterableMap.tsx +219 -219
  95. package/components/examples/index.ts +45 -45
  96. package/components/figma/ImageWithFallback.tsx +27 -27
  97. package/components/hooks/index.ts +13 -13
  98. package/components/hooks/use-layout-shortcuts.ts +43 -43
  99. package/components/index.ts +90 -77
  100. package/components/layout/header/header.stories.tsx +204 -204
  101. package/components/layout/header/header.test.tsx +75 -75
  102. package/components/layout/header/header.tsx +349 -349
  103. package/components/layout/header/index.ts +1 -1
  104. package/components/layout/index.ts +2 -2
  105. package/components/layout/sidebar/index.ts +3 -3
  106. package/components/layout/sidebar/sidebar.mdx +1 -1
  107. package/components/layout/sidebar/sidebar.stories.tsx +586 -586
  108. package/components/layout/sidebar/sidebar.test.tsx +76 -76
  109. package/components/layout/sidebar/sidebar.tsx +1073 -1068
  110. package/components/layout/sidebar/use-sidebar.ts +104 -104
  111. package/components/media/FloatingMediaWrapper.tsx +371 -368
  112. package/components/media/audio-player/AudioPlayer.stories.tsx +124 -124
  113. package/components/media/audio-player/AudioPlayer.test.tsx +106 -106
  114. package/components/media/audio-player/AudioPlayer.tsx +765 -762
  115. package/components/media/audio-player/index.ts +1 -1
  116. package/components/media/audio-player/use-audio-player.ts +312 -312
  117. package/components/media/index.ts +3 -3
  118. package/components/media/video-player/VideoPlayer.stories.tsx +98 -98
  119. package/components/media/video-player/VideoPlayer.test.tsx +73 -73
  120. package/components/media/video-player/VideoPlayer.tsx +310 -308
  121. package/components/media/video-player/index.ts +1 -1
  122. package/components/pages/forgot-password-page/ForgotPasswordPage.stories.tsx +24 -24
  123. package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +188 -188
  124. package/components/pages/forgot-password-page/forgot-password-page.test.tsx +45 -45
  125. package/components/pages/forgot-password-page/index.ts +1 -1
  126. package/components/pages/home-content/HomeContent.stories.tsx +43 -43
  127. package/components/pages/home-content/HomeContent.tsx +120 -125
  128. package/components/pages/home-content/home-content.mdx +62 -62
  129. package/components/pages/home-content/index.ts +1 -1
  130. package/components/pages/home-page/HomePage.stories.tsx +39 -39
  131. package/components/pages/home-page/HomePage.tsx +74 -75
  132. package/components/pages/home-page/home-page.mdx +53 -53
  133. package/components/pages/home-page/home-page.test.tsx +53 -53
  134. package/components/pages/home-page/index.ts +1 -1
  135. package/components/pages/index.ts +8 -8
  136. package/components/pages/login-page/LoginPage.stories.tsx +39 -39
  137. package/components/pages/login-page/LoginPage.tsx +216 -216
  138. package/components/pages/login-page/index.ts +1 -1
  139. package/components/pages/login-page/login-page.test.tsx +63 -63
  140. package/components/pages/reset-password-page/ResetPasswordPage.stories.tsx +24 -24
  141. package/components/pages/reset-password-page/ResetPasswordPage.tsx +239 -237
  142. package/components/pages/reset-password-page/index.ts +1 -1
  143. package/components/pages/template-content/TemplateContent.stories.tsx +43 -43
  144. package/components/pages/template-content/TemplateContent.tsx +1249 -1237
  145. package/components/pages/template-content/index.ts +1 -1
  146. package/components/pages/template-content/template-content.mdx +61 -61
  147. package/components/pages/template-page/TemplatePage.stories.tsx +39 -39
  148. package/components/pages/template-page/TemplatePage.tsx +62 -62
  149. package/components/pages/template-page/index.ts +1 -1
  150. package/components/pages/template-page/template-page.mdx +53 -53
  151. package/components/pages/template-page/template-page.test.tsx +52 -52
  152. package/components/pages/verify-email-page/VerifyEmailPage.stories.tsx +41 -41
  153. package/components/pages/verify-email-page/VerifyEmailPage.tsx +206 -206
  154. package/components/pages/verify-email-page/index.ts +1 -1
  155. package/components/public-api-smoke.test.tsx +52 -52
  156. package/components/shared/CustomTooltipContent.tsx +48 -48
  157. package/components/shared/assistant-utils.test.ts +16 -16
  158. package/components/shared/assistant-utils.ts +225 -225
  159. package/components/shared/error-boundary.stories.tsx +132 -132
  160. package/components/shared/error-boundary.tsx +154 -154
  161. package/components/shared/error-fallbacks.tsx +226 -226
  162. package/components/shared/layout-constants.ts +8 -8
  163. package/components/shared/navigation.ts +35 -35
  164. package/components/shared/use-mobile.test.ts +16 -16
  165. package/components/shared/use-mobile.ts +36 -36
  166. package/components/shared/utils.test.ts +14 -14
  167. package/components/shared/utils.ts +6 -6
  168. package/components/ui/accordion/accordion.mdx +8 -8
  169. package/components/ui/accordion/accordion.stories.tsx +105 -105
  170. package/components/ui/accordion/accordion.test.tsx +59 -59
  171. package/components/ui/accordion/accordion.tsx +77 -77
  172. package/components/ui/accordion/index.ts +1 -1
  173. package/components/ui/alert/alert.mdx +8 -8
  174. package/components/ui/alert/alert.stories.tsx +86 -86
  175. package/components/ui/alert/alert.test.tsx +53 -53
  176. package/components/ui/alert/alert.tsx +93 -93
  177. package/components/ui/alert/index.ts +1 -1
  178. package/components/ui/alert-dialog/alert-dialog.mdx +8 -8
  179. package/components/ui/alert-dialog/alert-dialog.stories.tsx +84 -84
  180. package/components/ui/alert-dialog/alert-dialog.test.tsx +70 -70
  181. package/components/ui/alert-dialog/alert-dialog.tsx +149 -149
  182. package/components/ui/alert-dialog/index.ts +1 -1
  183. package/components/ui/aspect-ratio/aspect-ratio.mdx +8 -8
  184. package/components/ui/aspect-ratio/aspect-ratio.stories.tsx +46 -46
  185. package/components/ui/aspect-ratio/aspect-ratio.test.tsx +28 -28
  186. package/components/ui/aspect-ratio/aspect-ratio.tsx +20 -20
  187. package/components/ui/aspect-ratio/index.ts +1 -1
  188. package/components/ui/assistant-chart/AssistantChart.tsx +64 -64
  189. package/components/ui/assistant-chart/assistant-chart.mdx +8 -8
  190. package/components/ui/assistant-chart/assistant-chart.stories.tsx +44 -44
  191. package/components/ui/assistant-chart/assistant-chart.test.tsx +46 -46
  192. package/components/ui/assistant-chart/index.ts +1 -1
  193. package/components/ui/avatar/avatar.mdx +8 -8
  194. package/components/ui/avatar/avatar.stories.tsx +86 -86
  195. package/components/ui/avatar/avatar.test.tsx +55 -55
  196. package/components/ui/avatar/avatar.tsx +71 -71
  197. package/components/ui/avatar/index.ts +1 -1
  198. package/components/ui/badge/badge.mdx +8 -8
  199. package/components/ui/badge/badge.stories.tsx +72 -72
  200. package/components/ui/badge/badge.test.tsx +40 -40
  201. package/components/ui/badge/badge.tsx +58 -58
  202. package/components/ui/badge/index.ts +1 -1
  203. package/components/ui/breadcrumb/breadcrumb.mdx +8 -8
  204. package/components/ui/breadcrumb/breadcrumb.stories.tsx +123 -123
  205. package/components/ui/breadcrumb/breadcrumb.test.tsx +70 -70
  206. package/components/ui/breadcrumb/breadcrumb.tsx +114 -114
  207. package/components/ui/breadcrumb/index.ts +1 -1
  208. package/components/ui/button/button.mdx +8 -8
  209. package/components/ui/button/button.stories.tsx +183 -183
  210. package/components/ui/button/button.test.tsx +64 -64
  211. package/components/ui/button/button.tsx +98 -98
  212. package/components/ui/button/index.ts +1 -1
  213. package/components/ui/calendar/calendar.mdx +8 -8
  214. package/components/ui/calendar/calendar.stories.tsx +108 -108
  215. package/components/ui/calendar/calendar.test.tsx +53 -53
  216. package/components/ui/calendar/calendar.tsx +230 -230
  217. package/components/ui/calendar/index.ts +1 -1
  218. package/components/ui/card/card.mdx +8 -8
  219. package/components/ui/card/card.stories.tsx +301 -301
  220. package/components/ui/card/card.test.tsx +55 -55
  221. package/components/ui/card/card.tsx +83 -83
  222. package/components/ui/card/index.ts +1 -1
  223. package/components/ui/carousel/carousel.mdx +8 -8
  224. package/components/ui/carousel/carousel.stories.tsx +80 -80
  225. package/components/ui/carousel/carousel.test.tsx +75 -75
  226. package/components/ui/carousel/carousel.tsx +242 -242
  227. package/components/ui/carousel/index.ts +1 -1
  228. package/components/ui/chart/chart.mdx +8 -8
  229. package/components/ui/chart/chart.stories.tsx +1328 -1328
  230. package/components/ui/chart/chart.test.tsx +178 -178
  231. package/components/ui/chart/chart.tsx +2232 -2232
  232. package/components/ui/chart/index.ts +1 -1
  233. package/components/ui/checkbox/checkbox.mdx +8 -8
  234. package/components/ui/checkbox/checkbox.stories.tsx +109 -109
  235. package/components/ui/checkbox/checkbox.test.tsx +49 -49
  236. package/components/ui/checkbox/checkbox.tsx +68 -68
  237. package/components/ui/checkbox/index.ts +1 -1
  238. package/components/ui/collapsible/collapsible.mdx +8 -8
  239. package/components/ui/collapsible/collapsible.stories.tsx +45 -45
  240. package/components/ui/collapsible/collapsible.test.tsx +51 -51
  241. package/components/ui/collapsible/collapsible.tsx +32 -32
  242. package/components/ui/collapsible/index.ts +1 -1
  243. package/components/ui/command/command.mdx +8 -8
  244. package/components/ui/command/command.stories.tsx +134 -134
  245. package/components/ui/command/command.test.tsx +48 -48
  246. package/components/ui/command/command.tsx +163 -163
  247. package/components/ui/command/index.ts +1 -1
  248. package/components/ui/context-menu/context-menu.mdx +8 -8
  249. package/components/ui/context-menu/context-menu.stories.tsx +76 -76
  250. package/components/ui/context-menu/context-menu.test.tsx +61 -61
  251. package/components/ui/context-menu/context-menu.tsx +236 -236
  252. package/components/ui/context-menu/index.ts +1 -1
  253. package/components/ui/dialog/dialog.mdx +8 -8
  254. package/components/ui/dialog/dialog.stories.tsx +174 -174
  255. package/components/ui/dialog/dialog.test.tsx +78 -78
  256. package/components/ui/dialog/dialog.tsx +189 -189
  257. package/components/ui/dialog/index.ts +1 -1
  258. package/components/ui/drawer/drawer.mdx +8 -8
  259. package/components/ui/drawer/drawer.stories.tsx +71 -71
  260. package/components/ui/drawer/drawer.test.tsx +67 -67
  261. package/components/ui/drawer/drawer.tsx +146 -146
  262. package/components/ui/drawer/index.ts +1 -1
  263. package/components/ui/dropdown-menu/dropdown-menu.mdx +8 -8
  264. package/components/ui/dropdown-menu/dropdown-menu.stories.tsx +156 -156
  265. package/components/ui/dropdown-menu/dropdown-menu.test.tsx +62 -62
  266. package/components/ui/dropdown-menu/dropdown-menu.tsx +240 -240
  267. package/components/ui/dropdown-menu/index.ts +1 -1
  268. package/components/ui/empty/empty.mdx +8 -8
  269. package/components/ui/empty/empty.stories.tsx +85 -85
  270. package/components/ui/empty/empty.test.tsx +31 -31
  271. package/components/ui/empty/empty.tsx +88 -88
  272. package/components/ui/empty/index.ts +1 -1
  273. package/components/ui/file-upload/file-upload.mdx +8 -8
  274. package/components/ui/file-upload/file-upload.stories.tsx +144 -144
  275. package/components/ui/file-upload/file-upload.test.tsx +65 -65
  276. package/components/ui/file-upload/file-upload.tsx +142 -142
  277. package/components/ui/file-upload/index.ts +2 -2
  278. package/components/ui/file-upload/use-file-upload.ts +177 -177
  279. package/components/ui/form/form.stories.tsx +85 -85
  280. package/components/ui/form/form.test.tsx +75 -75
  281. package/components/ui/form/form.tsx +163 -163
  282. package/components/ui/form/index.ts +1 -1
  283. package/components/ui/google-maps-loader/google-maps-loader.test.tsx +35 -35
  284. package/components/ui/google-maps-loader/google-maps-loader.tsx +465 -465
  285. package/components/ui/google-maps-loader/index.ts +1 -1
  286. package/components/ui/hover-card/hover-card.mdx +8 -8
  287. package/components/ui/hover-card/hover-card.stories.tsx +61 -61
  288. package/components/ui/hover-card/hover-card.test.tsx +48 -48
  289. package/components/ui/hover-card/hover-card.tsx +50 -50
  290. package/components/ui/hover-card/index.ts +1 -1
  291. package/components/ui/index.ts +400 -400
  292. package/components/ui/input/index.ts +1 -1
  293. package/components/ui/input/input.mdx +8 -8
  294. package/components/ui/input/input.stories.tsx +153 -153
  295. package/components/ui/input/input.test.tsx +47 -47
  296. package/components/ui/input/input.tsx +57 -57
  297. package/components/ui/input-otp/index.ts +1 -1
  298. package/components/ui/input-otp/input-otp.mdx +8 -8
  299. package/components/ui/input-otp/input-otp.stories.tsx +120 -120
  300. package/components/ui/input-otp/input-otp.test.tsx +74 -74
  301. package/components/ui/input-otp/input-otp.tsx +101 -101
  302. package/components/ui/label/index.ts +1 -1
  303. package/components/ui/label/label.mdx +8 -8
  304. package/components/ui/label/label.stories.tsx +74 -74
  305. package/components/ui/label/label.test.tsx +45 -45
  306. package/components/ui/label/label.tsx +53 -53
  307. package/components/ui/map/index.ts +1 -1
  308. package/components/ui/map/map.mdx +8 -8
  309. package/components/ui/map/map.stories.tsx +86 -86
  310. package/components/ui/map/map.test.tsx +82 -82
  311. package/components/ui/map/map.tsx +506 -506
  312. package/components/ui/map/mock.test.tsx +13 -13
  313. package/components/ui/map-config/index.ts +1 -1
  314. package/components/ui/map-config/map-config.ts +18 -18
  315. package/components/ui/map-layers/index.ts +1 -1
  316. package/components/ui/map-layers/map-layers.test.tsx +48 -48
  317. package/components/ui/map-layers/map-layers.tsx +126 -126
  318. package/components/ui/map.exports/index.ts +1 -1
  319. package/components/ui/map.exports/map.exports.ts +31 -31
  320. package/components/ui/menubar/index.ts +1 -1
  321. package/components/ui/menubar/menubar.mdx +8 -8
  322. package/components/ui/menubar/menubar.stories.tsx +130 -130
  323. package/components/ui/menubar/menubar.test.tsx +53 -53
  324. package/components/ui/menubar/menubar.tsx +265 -265
  325. package/components/ui/navigation-menu/index.ts +1 -1
  326. package/components/ui/navigation-menu/navigation-menu.mdx +8 -8
  327. package/components/ui/navigation-menu/navigation-menu.stories.tsx +126 -126
  328. package/components/ui/navigation-menu/navigation-menu.test.tsx +47 -47
  329. package/components/ui/navigation-menu/navigation-menu.tsx +165 -165
  330. package/components/ui/notification-badge/index.ts +1 -1
  331. package/components/ui/notification-badge/notification-badge.mdx +8 -8
  332. package/components/ui/notification-badge/notification-badge.stories.tsx +66 -66
  333. package/components/ui/notification-badge/notification-badge.test.tsx +61 -61
  334. package/components/ui/notification-badge/notification-badge.tsx +91 -91
  335. package/components/ui/page-header/index.ts +1 -1
  336. package/components/ui/page-header/page-header.stories.tsx +69 -69
  337. package/components/ui/page-header/page-header.test.tsx +37 -37
  338. package/components/ui/page-header/page-header.tsx +124 -124
  339. package/components/ui/pagination/index.ts +3 -3
  340. package/components/ui/pagination/pagination.mdx +8 -8
  341. package/components/ui/pagination/pagination.stories.tsx +210 -210
  342. package/components/ui/pagination/pagination.test.tsx +63 -63
  343. package/components/ui/pagination/pagination.tsx +140 -140
  344. package/components/ui/pagination/use-pagination.ts +173 -173
  345. package/components/ui/popover/index.ts +1 -1
  346. package/components/ui/popover/popover.mdx +8 -8
  347. package/components/ui/popover/popover.stories.tsx +73 -73
  348. package/components/ui/popover/popover.test.tsx +48 -48
  349. package/components/ui/popover/popover.tsx +54 -54
  350. package/components/ui/progress/index.ts +1 -1
  351. package/components/ui/progress/progress.mdx +8 -8
  352. package/components/ui/progress/progress.stories.tsx +55 -55
  353. package/components/ui/progress/progress.test.tsx +23 -23
  354. package/components/ui/progress/progress.tsx +68 -68
  355. package/components/ui/radio-group/index.ts +1 -1
  356. package/components/ui/radio-group/radio-group.mdx +8 -8
  357. package/components/ui/radio-group/radio-group.stories.tsx +114 -114
  358. package/components/ui/radio-group/radio-group.test.tsx +78 -78
  359. package/components/ui/radio-group/radio-group.tsx +93 -93
  360. package/components/ui/rating/index.ts +1 -1
  361. package/components/ui/rating/rating.mdx +8 -8
  362. package/components/ui/rating/rating.stories.tsx +50 -50
  363. package/components/ui/rating/rating.test.tsx +48 -48
  364. package/components/ui/rating/rating.tsx +145 -145
  365. package/components/ui/resizable/index.ts +1 -1
  366. package/components/ui/resizable/resizable.mdx +8 -8
  367. package/components/ui/resizable/resizable.stories.tsx +88 -88
  368. package/components/ui/resizable/resizable.test.tsx +61 -61
  369. package/components/ui/resizable/resizable.tsx +452 -452
  370. package/components/ui/rich-text-editor/index.ts +7 -7
  371. package/components/ui/rich-text-editor/rich-text-editor.stories.tsx +290 -290
  372. package/components/ui/rich-text-editor/rich-text-editor.test.tsx +86 -86
  373. package/components/ui/rich-text-editor/rich-text-editor.tsx +634 -634
  374. package/components/ui/rich-text-editor/use-rich-text-editor.ts +453 -453
  375. package/components/ui/route-map/index.ts +1 -1
  376. package/components/ui/route-map/route-map.mdx +8 -8
  377. package/components/ui/route-map/route-map.stories.tsx +48 -48
  378. package/components/ui/route-map/route-map.test.tsx +108 -108
  379. package/components/ui/route-map/route-map.tsx +349 -349
  380. package/components/ui/scroll-area/index.ts +1 -1
  381. package/components/ui/scroll-area/scroll-area.mdx +8 -8
  382. package/components/ui/scroll-area/scroll-area.stories.tsx +31 -31
  383. package/components/ui/scroll-area/scroll-area.test.tsx +27 -27
  384. package/components/ui/scroll-area/scroll-area.tsx +70 -70
  385. package/components/ui/search/index.ts +1 -1
  386. package/components/ui/search/search.mdx +8 -8
  387. package/components/ui/search/search.stories.tsx +107 -107
  388. package/components/ui/search/search.test.tsx +67 -67
  389. package/components/ui/search/search.tsx +141 -141
  390. package/components/ui/select/index.ts +1 -1
  391. package/components/ui/select/select.mdx +8 -8
  392. package/components/ui/select/select.stories.tsx +163 -163
  393. package/components/ui/select/select.test.tsx +99 -99
  394. package/components/ui/select/select.tsx +195 -195
  395. package/components/ui/separator/index.ts +1 -1
  396. package/components/ui/separator/separator.mdx +8 -8
  397. package/components/ui/separator/separator.stories.tsx +55 -55
  398. package/components/ui/separator/separator.test.tsx +23 -23
  399. package/components/ui/separator/separator.tsx +39 -39
  400. package/components/ui/sheet/index.ts +1 -1
  401. package/components/ui/sheet/sheet.mdx +8 -8
  402. package/components/ui/sheet/sheet.stories.tsx +93 -93
  403. package/components/ui/sheet/sheet.test.tsx +62 -62
  404. package/components/ui/sheet/sheet.tsx +149 -149
  405. package/components/ui/simple-map/index.ts +1 -1
  406. package/components/ui/simple-map/simple-map.mdx +8 -8
  407. package/components/ui/simple-map/simple-map.stories.tsx +44 -44
  408. package/components/ui/simple-map/simple-map.test.tsx +36 -36
  409. package/components/ui/simple-map/simple-map.tsx +92 -92
  410. package/components/ui/skeleton/index.ts +1 -1
  411. package/components/ui/skeleton/skeleton.mdx +8 -8
  412. package/components/ui/skeleton/skeleton.stories.tsx +36 -36
  413. package/components/ui/skeleton/skeleton.test.tsx +19 -19
  414. package/components/ui/skeleton/skeleton.tsx +25 -25
  415. package/components/ui/slider/index.ts +1 -1
  416. package/components/ui/slider/slider.mdx +8 -8
  417. package/components/ui/slider/slider.stories.tsx +44 -44
  418. package/components/ui/slider/slider.test.tsx +25 -25
  419. package/components/ui/slider/slider.tsx +66 -66
  420. package/components/ui/sonner/index.ts +1 -1
  421. package/components/ui/sonner/sonner.mdx +8 -8
  422. package/components/ui/sonner/sonner.stories.tsx +41 -41
  423. package/components/ui/sonner/sonner.test.tsx +24 -24
  424. package/components/ui/sonner/sonner.tsx +74 -74
  425. package/components/ui/stats-card/index.ts +2 -1
  426. package/components/ui/stats-card/stats-card-skeleton.tsx +62 -0
  427. package/components/ui/stats-card/stats-card.mdx +8 -8
  428. package/components/ui/stats-card/stats-card.stories.tsx +99 -77
  429. package/components/ui/stats-card/stats-card.test.tsx +34 -34
  430. package/components/ui/stats-card/stats-card.tsx +93 -93
  431. package/components/ui/stepper/index.ts +3 -3
  432. package/components/ui/stepper/stepper.mdx +8 -8
  433. package/components/ui/stepper/stepper.stories.tsx +171 -171
  434. package/components/ui/stepper/stepper.test.tsx +47 -47
  435. package/components/ui/stepper/stepper.tsx +190 -190
  436. package/components/ui/stepper/use-stepper.ts +139 -139
  437. package/components/ui/switch/index.ts +1 -1
  438. package/components/ui/switch/switch.mdx +8 -8
  439. package/components/ui/switch/switch.stories.tsx +93 -93
  440. package/components/ui/switch/switch.test.tsx +44 -44
  441. package/components/ui/switch/switch.tsx +70 -70
  442. package/components/ui/table/index.ts +1 -1
  443. package/components/ui/table/table.mdx +8 -8
  444. package/components/ui/table/table.stories.tsx +114 -114
  445. package/components/ui/table/table.test.tsx +43 -43
  446. package/components/ui/table/table.tsx +104 -104
  447. package/components/ui/tabs/index.ts +1 -1
  448. package/components/ui/tabs/tabs.mdx +8 -8
  449. package/components/ui/tabs/tabs.stories.tsx +140 -140
  450. package/components/ui/tabs/tabs.test.tsx +50 -50
  451. package/components/ui/tabs/tabs.tsx +66 -66
  452. package/components/ui/textarea/index.ts +1 -1
  453. package/components/ui/textarea/textarea.mdx +8 -8
  454. package/components/ui/textarea/textarea.stories.tsx +69 -69
  455. package/components/ui/textarea/textarea.test.tsx +41 -41
  456. package/components/ui/textarea/textarea.tsx +61 -61
  457. package/components/ui/timeline/index.ts +1 -1
  458. package/components/ui/timeline/timeline.mdx +8 -8
  459. package/components/ui/timeline/timeline.stories.tsx +97 -97
  460. package/components/ui/timeline/timeline.test.tsx +53 -53
  461. package/components/ui/timeline/timeline.tsx +124 -124
  462. package/components/ui/toggle/index.ts +1 -1
  463. package/components/ui/toggle/toggle.mdx +8 -8
  464. package/components/ui/toggle/toggle.stories.tsx +56 -56
  465. package/components/ui/toggle/toggle.test.tsx +32 -32
  466. package/components/ui/toggle/toggle.tsx +55 -55
  467. package/components/ui/toggle-group/index.ts +1 -1
  468. package/components/ui/toggle-group/toggle-group.mdx +8 -8
  469. package/components/ui/toggle-group/toggle-group.stories.tsx +66 -66
  470. package/components/ui/toggle-group/toggle-group.test.tsx +47 -47
  471. package/components/ui/toggle-group/toggle-group.tsx +79 -79
  472. package/components/ui/tooltip/index.ts +1 -1
  473. package/components/ui/tooltip/tooltip.mdx +8 -8
  474. package/components/ui/tooltip/tooltip.stories.tsx +83 -83
  475. package/components/ui/tooltip/tooltip.test.tsx +39 -39
  476. package/components/ui/tooltip/tooltip.tsx +69 -69
  477. package/components/ui/tree-view/index.ts +4 -4
  478. package/components/ui/tree-view/tree-view.mdx +8 -8
  479. package/components/ui/tree-view/tree-view.stories.tsx +154 -154
  480. package/components/ui/tree-view/tree-view.test.tsx +58 -58
  481. package/components/ui/tree-view/tree-view.tsx +171 -171
  482. package/components/ui/tree-view/use-tree-view.ts +237 -237
  483. package/components.json +892 -892
  484. package/contexts/ApiKeyContext.test.tsx +26 -26
  485. package/contexts/ApiKeyContext.tsx +196 -196
  486. package/contexts/AssistenteContext.test.tsx +17 -17
  487. package/contexts/AssistenteContext.tsx +113 -113
  488. package/contexts/AuthContext.tsx +118 -118
  489. package/contexts/BrandColorsContext.test.tsx +21 -21
  490. package/contexts/BrandColorsContext.tsx +251 -251
  491. package/contexts/LanguageContext.test.tsx +108 -16
  492. package/contexts/LanguageContext.tsx +202 -17
  493. package/contexts/LayoutContext.test.tsx +29 -29
  494. package/contexts/LayoutContext.tsx +140 -140
  495. package/contexts/ThemeContext.test.tsx +38 -38
  496. package/contexts/ThemeContext.tsx +111 -111
  497. package/contexts/index.ts +8 -8
  498. package/contexts/theme-data.ts +340 -340
  499. package/dist/{AssistantChart-DoZCyS5r.cjs → AssistantChart-9w31gdAb.cjs} +4 -4
  500. package/dist/{AssistantChart-CldVCVDe.cjs → AssistantChart-BAudAfne.cjs} +5 -5
  501. package/dist/{AssistantChart-Bdd44uBn.cjs → AssistantChart-BAx9VQvb.cjs} +127 -388
  502. package/dist/{AssistantChart-Cu3m7RBo.js → AssistantChart-BP8upjMk.js} +5 -5
  503. package/dist/{use-mobile-BXuYROXM.js → AssistantChart-BXU1ACnh.js} +958 -1671
  504. package/dist/{AssistantChart-CFhDdGyU.js → AssistantChart-CVko2A1W.js} +130 -391
  505. package/dist/{AssistantChart-C_hwFRRr.js → AssistantChart-CVzmmhx4.js} +4 -4
  506. package/dist/{use-mobile-CG2-SdXV.cjs → AssistantChart-D0A1FPYt.cjs} +980 -1700
  507. package/dist/{AudioPlayer-IAU5q5T1.cjs → AudioPlayer-1ypwE2Wh.cjs} +1 -1
  508. package/dist/AudioPlayer-BWDW6TN9.cjs +1279 -0
  509. package/dist/AudioPlayer-CM962GEh.js +1280 -0
  510. package/dist/{AudioPlayer-CySJIyvL.js → AudioPlayer-DuKXrCfy.js} +1 -1
  511. package/dist/CodeBlock-CV6dtsTM.cjs +220 -0
  512. package/dist/CodeBlock-CjeFavqV.js +221 -0
  513. package/dist/{FeatureCard-DbHWCb4E.js → FeatureCard-Cfs6Ishq.js} +221 -37
  514. package/dist/FeatureCard-ie3L8Fpr.cjs +484 -0
  515. package/dist/FeatureCardSkeleton-CAgu8stE.js +27 -0
  516. package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +26 -0
  517. package/dist/{LanguageContext-CS14yCpi.js → LanguageContext-BwhwC3G2.js} +2 -2
  518. package/dist/{LanguageContext-B_KFTCzT.cjs → LanguageContext-DvUt5jBg.cjs} +2 -2
  519. package/dist/{ThemeContext-C2EwAPDt.js → ThemeContext-BbBNoFTG.js} +2 -2
  520. package/dist/{ThemeContext-vTjumZeM.cjs → ThemeContext-Cmr8Ex8H.cjs} +2 -2
  521. package/dist/ThemeContext-CpqYShLq.cjs +324 -0
  522. package/dist/{ThemeContext-CQSo4Iwc.js → ThemeContext-D3LzacmG.js} +8 -1
  523. package/dist/ThemeContext-Du2nE1PL.js +325 -0
  524. package/dist/{ThemeContext-CGk3KK0k.cjs → ThemeContext-U4dEYc6C.cjs} +8 -1
  525. package/dist/{VerifyEmailPage-C0c2e5n0.js → VerifyEmailPage-BE-L9mB7.js} +7 -7
  526. package/dist/{VerifyEmailPage--1Vurewl.cjs → VerifyEmailPage-BRSP-Pwt.cjs} +3 -3
  527. package/dist/{VerifyEmailPage-Cwi3kbol.cjs → VerifyEmailPage-Bae2cBXT.cjs} +7 -7
  528. package/dist/{VerifyEmailPage-BComraR7.cjs → VerifyEmailPage-CR7kb5df.cjs} +22 -12
  529. package/dist/{VerifyEmailPage-MTD7AG1Z.js → VerifyEmailPage-C_ihbcth.js} +4 -4
  530. package/dist/{VerifyEmailPage-1WwWczAn.js → VerifyEmailPage-CbgjOF0v.js} +22 -12
  531. package/dist/{VerifyEmailPage-DvMLZgFt.js → VerifyEmailPage-CdYPSJoO.js} +1 -1
  532. package/dist/{VerifyEmailPage-s-1X3LDJ.cjs → VerifyEmailPage-DF2ilhum.cjs} +1049 -665
  533. package/dist/{VerifyEmailPage-CYXtbKi3.cjs → VerifyEmailPage-DMBh4NM9.cjs} +1 -1
  534. package/dist/{VerifyEmailPage-CgMxRb4z.js → VerifyEmailPage-DTtFfC-J.js} +3 -3
  535. package/dist/{VerifyEmailPage-CFLMls1p.cjs → VerifyEmailPage-Dt7zgA4w.cjs} +4 -4
  536. package/dist/VerifyEmailPage-EhudUdqF.js +3211 -0
  537. package/dist/{XerticaProvider-D-yNhF94.cjs → XerticaProvider-B8CaV7xu.cjs} +1 -1
  538. package/dist/{XerticaProvider-CEoWMTxu.js → XerticaProvider-BITjgC5p.js} +2 -2
  539. package/dist/{XerticaProvider-CllrbMEJ.cjs → XerticaProvider-By8q3Roe.cjs} +2 -2
  540. package/dist/{XerticaProvider-ET0ihewn.cjs → XerticaProvider-CW9hpCdF.cjs} +2 -2
  541. package/dist/XerticaProvider-CWgby5mY.js +49 -0
  542. package/dist/XerticaProvider-CjQAQPcn.cjs +48 -0
  543. package/dist/{XerticaProvider-DYq4JWtg.js → XerticaProvider-DQtvJU7m.js} +1 -1
  544. package/dist/{XerticaProvider-B7EVH-NF.js → XerticaProvider-siSt9uG2.js} +2 -2
  545. package/dist/{LanguageSelector-D6uacAIM.cjs → XerticaXLogo-CU-U-GP4.cjs} +136 -115
  546. package/dist/{XerticaXLogo-CQUUjXoH.cjs → XerticaXLogo-CziKMQil.cjs} +8 -8
  547. package/dist/{LanguageSelector-B5YfbHra.js → XerticaXLogo-DHz5SugF.js} +136 -115
  548. package/dist/{XerticaXLogo-Cmsp-Eey.js → XerticaXLogo-DfUvz-lD.js} +9 -9
  549. package/dist/{alert-dialog-s-vmNkJ_.js → alert-dialog-iDe5VE5o.js} +3 -3
  550. package/dist/{alert-dialog-DSKByiKZ.cjs → alert-dialog-yckpaOpy.cjs} +3 -3
  551. package/dist/assistant.cjs.js +2 -2
  552. package/dist/assistant.es.js +2 -2
  553. package/dist/blocks.cjs.js +8 -1
  554. package/dist/blocks.es.js +10 -3
  555. package/dist/brand.cjs.js +2 -2
  556. package/dist/brand.es.js +2 -2
  557. package/dist/cli.js +482 -164
  558. package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +19 -0
  559. package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +18 -0
  560. package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +21 -0
  561. package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +20 -0
  562. package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +18 -0
  563. package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +16 -0
  564. package/dist/components/blocks/card-patterns/index.d.ts +12 -0
  565. package/dist/components/brand/language-selector/LanguageSelector.d.ts +15 -1
  566. package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +29 -1
  567. package/dist/components/index.d.ts +3 -0
  568. package/dist/components/ui/stats-card/index.d.ts +1 -0
  569. package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +25 -0
  570. package/dist/contexts/LanguageContext.d.ts +66 -5
  571. package/dist/features/assistant/data/mock.d.ts +2 -2
  572. package/dist/features/assistant/hooks/useAssistantConfig.d.ts +0 -1
  573. package/dist/features/assistant/index.d.ts +1 -1
  574. package/dist/features/home/hooks/useDashboardStats.d.ts +0 -1
  575. package/dist/features/home/hooks/useFeatureCards.d.ts +0 -1
  576. package/dist/features/home/hooks/useTeamMembers.d.ts +0 -1
  577. package/dist/features/home/index.d.ts +3 -3
  578. package/dist/{google-maps-loader-Y-QkD-Li.cjs → google-maps-loader-BqsYL48U.cjs} +0 -5
  579. package/dist/{google-maps-loader-CTYySAun.js → google-maps-loader-t2IlYBzw.js} +0 -4
  580. package/dist/hooks.cjs.js +2 -1
  581. package/dist/hooks.es.js +2 -1
  582. package/dist/i18n.d.ts +12 -0
  583. package/dist/index-CkTUgOwX.js +8 -0
  584. package/dist/{index-COtD8bRW.cjs → index-D3RLKRAs.cjs} +1 -1
  585. package/dist/index.cjs.js +34 -19
  586. package/dist/index.es.js +71 -56
  587. package/dist/index.umd.js +454 -1027
  588. package/dist/layout.cjs.js +1 -1
  589. package/dist/layout.es.js +1 -1
  590. package/dist/media.cjs.js +1 -1
  591. package/dist/media.es.js +1 -1
  592. package/dist/pages.cjs.js +1 -1
  593. package/dist/pages.es.js +1 -1
  594. package/dist/{rich-text-editor-Bp3zQqMC.js → rich-text-editor-1UW3Y2JK.js} +989 -1052
  595. package/dist/{rich-text-editor-CeucBdIv.cjs → rich-text-editor-CyggTOLQ.cjs} +989 -1052
  596. package/dist/{sidebar-q7P2Godd.cjs → sidebar-C5B_LHek.cjs} +1 -1
  597. package/dist/{sidebar-LluMXfam.js → sidebar-CA6_ek3f.js} +269 -227
  598. package/dist/{sidebar-BxGXsDAd.cjs → sidebar-CVUGHOS_.cjs} +8 -16
  599. package/dist/{sidebar-BViy8Eeu.js → sidebar-CmvwjnVb.js} +9 -17
  600. package/dist/{sidebar-BbVIQvlP.js → sidebar-Dz7bd3zP.js} +1 -1
  601. package/dist/{sidebar-DQj1z3jG.cjs → sidebar-zowjejT2.cjs} +269 -227
  602. package/dist/skeleton-4zoHiFJ_.cjs +83 -0
  603. package/dist/skeleton-C4bHqUBf.js +84 -0
  604. package/dist/ui.cjs.js +12 -11
  605. package/dist/ui.es.js +46 -45
  606. package/dist/{use-audio-player-nv8ZSGa1.js → use-audio-player-Bkh23vQ3.js} +3 -7
  607. package/dist/{use-audio-player-NKsWyjWu.cjs → use-audio-player-Dn1NR9xN.cjs} +3 -7
  608. package/dist/{xertica-assistant-dyP7KHM5.cjs → xertica-assistant-B1IaHXnB.cjs} +388 -529
  609. package/dist/{xertica-assistant-ciJaWqm1.js → xertica-assistant-BMqdyRVi.js} +10 -28
  610. package/dist/{xertica-assistant-BdiZag0h.js → xertica-assistant-BbgzsgsG.js} +539 -562
  611. package/dist/{xertica-assistant-V_IdW4WF.cjs → xertica-assistant-Bj3vBCq_.cjs} +9 -27
  612. package/dist/{xertica-assistant-yX1CFBBo.js → xertica-assistant-DPsESB6t.js} +390 -531
  613. package/dist/{CodeBlock-7TTgmdGG.cjs → xertica-assistant-Qp3ydksa.cjs} +51 -263
  614. package/dist/{xertica-assistant-DUBpmEgo.cjs → xertica-assistant-d2qs2Vd9.cjs} +538 -561
  615. package/dist/{CodeBlock-DnYNI8rQ.js → xertica-assistant-gnCJdcZY.js} +7 -219
  616. package/dist/xertica-ui.css +2 -2
  617. package/docs/ai-usage.md +195 -195
  618. package/docs/architecture-improvements.md +476 -476
  619. package/docs/architecture.md +295 -273
  620. package/docs/components/accordion.md +109 -109
  621. package/docs/components/alert-dialog.md +127 -127
  622. package/docs/components/alert.md +106 -106
  623. package/docs/components/aspect-ratio.md +58 -58
  624. package/docs/components/assistant-chart.md +47 -47
  625. package/docs/components/assistant.md +426 -426
  626. package/docs/components/audio-player.md +167 -167
  627. package/docs/components/avatar.md +101 -101
  628. package/docs/components/badge.md +84 -84
  629. package/docs/components/branding.md +252 -249
  630. package/docs/components/breadcrumb.md +104 -104
  631. package/docs/components/button.md +156 -156
  632. package/docs/components/calendar.md +141 -141
  633. package/docs/components/card-patterns.md +445 -376
  634. package/docs/components/card.md +245 -245
  635. package/docs/components/carousel.md +100 -100
  636. package/docs/components/chart.md +638 -638
  637. package/docs/components/checkbox.md +88 -88
  638. package/docs/components/code-block.md +105 -105
  639. package/docs/components/collapsible.md +86 -86
  640. package/docs/components/command.md +113 -113
  641. package/docs/components/context-menu.md +81 -81
  642. package/docs/components/dialog.md +198 -198
  643. package/docs/components/drawer.md +105 -105
  644. package/docs/components/dropdown-menu.md +127 -127
  645. package/docs/components/empty.md +127 -127
  646. package/docs/components/error-boundary.md +191 -191
  647. package/docs/components/file-upload.md +189 -189
  648. package/docs/components/floating-media-wrapper.md +63 -63
  649. package/docs/components/form.md +177 -177
  650. package/docs/components/formatted-document.md +105 -105
  651. package/docs/components/google-maps-loader.md +44 -44
  652. package/docs/components/header.md +177 -177
  653. package/docs/components/hooks.md +430 -425
  654. package/docs/components/hover-card.md +86 -86
  655. package/docs/components/image-with-fallback.md +107 -107
  656. package/docs/components/input-otp.md +95 -95
  657. package/docs/components/input.md +130 -130
  658. package/docs/components/label.md +69 -69
  659. package/docs/components/language-selector.md +71 -16
  660. package/docs/components/map-layers.md +138 -138
  661. package/docs/components/map.md +84 -84
  662. package/docs/components/markdown-message.md +47 -47
  663. package/docs/components/menubar.md +89 -89
  664. package/docs/components/modern-chat-input.md +164 -164
  665. package/docs/components/navigation-menu.md +83 -83
  666. package/docs/components/notification-badge.md +78 -78
  667. package/docs/components/page-header.md +93 -93
  668. package/docs/components/pages.md +309 -309
  669. package/docs/components/pagination.md +334 -334
  670. package/docs/components/popover.md +116 -116
  671. package/docs/components/progress.md +103 -103
  672. package/docs/components/radio-group.md +133 -133
  673. package/docs/components/rating.md +77 -77
  674. package/docs/components/resizable.md +84 -84
  675. package/docs/components/rich-text-editor.md +255 -255
  676. package/docs/components/route-map.md +124 -124
  677. package/docs/components/scroll-area.md +58 -58
  678. package/docs/components/search.md +87 -87
  679. package/docs/components/select.md +144 -144
  680. package/docs/components/separator.md +58 -58
  681. package/docs/components/sheet.md +122 -122
  682. package/docs/components/sidebar.md +314 -314
  683. package/docs/components/simple-map.md +51 -51
  684. package/docs/components/skeleton.md +99 -99
  685. package/docs/components/slider.md +84 -84
  686. package/docs/components/sonner.md +115 -115
  687. package/docs/components/stats-card.md +120 -120
  688. package/docs/components/stepper.md +268 -268
  689. package/docs/components/switch.md +106 -106
  690. package/docs/components/table.md +138 -138
  691. package/docs/components/tabs.md +117 -117
  692. package/docs/components/textarea.md +86 -86
  693. package/docs/components/theme-toggle.md +73 -73
  694. package/docs/components/timeline.md +121 -121
  695. package/docs/components/toggle-group.md +68 -68
  696. package/docs/components/toggle.md +62 -62
  697. package/docs/components/tooltip.md +116 -116
  698. package/docs/components/tree-view.md +238 -238
  699. package/docs/components/use-mobile.md +96 -96
  700. package/docs/components/video-player.md +68 -68
  701. package/docs/components/xertica-logo.md +36 -36
  702. package/docs/components/xertica-orbe.md +35 -35
  703. package/docs/components/xertica-provider.md +65 -65
  704. package/docs/components/xertica-xlogo.md +35 -35
  705. package/docs/decision-tree.md +293 -293
  706. package/docs/doc-audit.md +243 -224
  707. package/docs/form-sizing.md +162 -162
  708. package/docs/getting-started.md +591 -568
  709. package/docs/guidelines.md +328 -222
  710. package/docs/i18n.md +265 -32
  711. package/docs/installation.md +267 -267
  712. package/docs/layout.md +143 -143
  713. package/docs/llms.md +295 -295
  714. package/docs/patterns/analytics.md +194 -194
  715. package/docs/patterns/crud.md +149 -149
  716. package/docs/patterns/dashboard.md +138 -138
  717. package/docs/patterns/detail-page.md +296 -296
  718. package/docs/patterns/form.md +241 -241
  719. package/docs/patterns/login.md +156 -156
  720. package/docs/patterns/settings.md +368 -368
  721. package/docs/patterns/wizard.md +213 -213
  722. package/docs/state-management.md +289 -283
  723. package/guidelines/Guidelines.md +399 -257
  724. package/hooks/useTheme.test.tsx +16 -16
  725. package/hooks/useTheme.ts +4 -4
  726. package/imports/Podcast.tsx +540 -540
  727. package/imports/XerticaAi.tsx +46 -46
  728. package/imports/XerticaX.tsx +15 -15
  729. package/imports/svg-aueiaqngck.ts +20 -20
  730. package/imports/svg-v9krss1ozd.ts +23 -23
  731. package/imports/svg-vhrdofe3qe.ts +6 -6
  732. package/llms.txt +186 -186
  733. package/mcp/resources.json +22 -22
  734. package/mcp/tools.json +35 -35
  735. package/package.json +213 -213
  736. package/scripts/ai-validator.ts +91 -91
  737. package/scripts/cleanup-case-dupes.ts +62 -62
  738. package/scripts/generate-ai-manifests.ts +107 -107
  739. package/styles/globals.css +13 -13
  740. package/styles/xertica/app-overrides/chat.css +61 -61
  741. package/styles/xertica/app-overrides/scrollbar.css +33 -33
  742. package/styles/xertica/base.css +71 -71
  743. package/styles/xertica/integrations/google-maps.css +76 -76
  744. package/styles/xertica/integrations/sonner.css +73 -73
  745. package/styles/xertica/theme-map.css +99 -99
  746. package/styles/xertica/tokens.css +236 -236
  747. package/templates/.prettierignore +4 -4
  748. package/templates/.prettierrc +10 -10
  749. package/templates/CLAUDE.md +180 -180
  750. package/templates/eslint.config.js +26 -26
  751. package/templates/guidelines/Guidelines.md +543 -335
  752. package/templates/package.json +69 -69
  753. package/templates/postcss.config.js +6 -6
  754. package/templates/src/app/App.tsx +46 -46
  755. package/templates/src/app/components/AppLayout.tsx +55 -55
  756. package/templates/src/app/components/AuthGuard.tsx +82 -82
  757. package/templates/src/app/context/AuthContext.tsx +108 -108
  758. package/templates/src/features/assistant/data/mock.ts +21 -12
  759. package/templates/src/features/assistant/hooks/useAssistantConfig.ts +4 -3
  760. package/templates/src/features/assistant/index.ts +5 -5
  761. package/templates/src/features/auth/index.ts +4 -4
  762. package/templates/src/features/auth/ui/AuthPageShell.tsx +32 -32
  763. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -70
  764. package/templates/src/features/auth/ui/LoginContent.tsx +90 -90
  765. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +177 -177
  766. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +73 -73
  767. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -82
  768. package/templates/src/features/home/data/mock.ts +35 -35
  769. package/templates/src/features/home/hooks/useFeatureCards.ts +4 -3
  770. package/templates/src/features/home/index.ts +11 -11
  771. package/templates/src/features/home/store/dashboardStore.ts +25 -25
  772. package/templates/src/features/home/ui/HomeContent.tsx +119 -121
  773. package/templates/src/features/template/index.ts +5 -5
  774. package/templates/src/features/template/ui/CrudTemplate.tsx +100 -100
  775. package/templates/src/features/template/ui/DashboardTemplate.tsx +94 -94
  776. package/templates/src/features/template/ui/FormTemplate.tsx +117 -117
  777. package/templates/src/features/template/ui/LoginTemplate.tsx +52 -52
  778. package/templates/src/features/template/ui/TemplateContent.tsx +1193 -1199
  779. package/templates/src/i18n.ts +47 -8
  780. package/templates/src/locales/en.json +229 -2
  781. package/templates/src/locales/es.json +229 -2
  782. package/templates/src/locales/pt-BR.json +229 -2
  783. package/templates/src/main.tsx +11 -11
  784. package/templates/src/pages/AssistantPage.tsx +463 -463
  785. package/templates/src/pages/ForgotPasswordPage.tsx +6 -6
  786. package/templates/src/pages/HomePage.tsx +49 -50
  787. package/templates/src/pages/LoginPage.tsx +10 -10
  788. package/templates/src/pages/ResetPasswordPage.tsx +6 -6
  789. package/templates/src/pages/TemplatePage.tsx +28 -28
  790. package/templates/src/pages/VerifyEmailPage.tsx +6 -6
  791. package/templates/src/shared/config/navigation.ts +19 -19
  792. package/templates/src/shared/error-boundary.tsx +154 -154
  793. package/templates/src/shared/error-fallbacks.tsx +226 -226
  794. package/templates/src/shared/lib/auth.ts +20 -20
  795. package/templates/src/shared/types/auth.ts +3 -3
  796. package/templates/src/styles/index.css +95 -95
  797. package/templates/src/styles/xertica/tokens.css +236 -236
  798. package/templates/tsconfig.json +25 -25
  799. package/templates/tsconfig.node.json +12 -12
  800. package/templates/vite-env.d.ts +1 -1
  801. package/templates/vite.config.ts +22 -22
  802. package/utils/color-utils.ts +72 -72
  803. package/utils/demo-responses.test.ts +10 -10
  804. package/utils/demo-responses.ts +151 -151
  805. package/utils/gemini.test.ts +25 -25
  806. package/utils/gemini.ts +155 -155
  807. package/dist/AssistantChart-DIpshm3i.js +0 -4784
  808. package/dist/AssistantChart-zjsy2GaZ.cjs +0 -4810
  809. package/dist/AudioPlayer-B1lt5cPl.cjs +0 -989
  810. package/dist/AudioPlayer-BZ7bibzU.cjs +0 -982
  811. package/dist/AudioPlayer-C12BjQBV.cjs +0 -997
  812. package/dist/AudioPlayer-CFeV8t-5.cjs +0 -936
  813. package/dist/AudioPlayer-CGRUtUdN.js +0 -937
  814. package/dist/AudioPlayer-DMcG_c7L.js +0 -990
  815. package/dist/AudioPlayer-DcFKRJE_.js +0 -998
  816. package/dist/AudioPlayer-e8LfNoqO.js +0 -983
  817. package/dist/CodeBlock-BeSt1h5P.js +0 -2078
  818. package/dist/CodeBlock-BgfYL_rD.cjs +0 -2094
  819. package/dist/CodeBlock-BlcqlA9M.cjs +0 -2094
  820. package/dist/CodeBlock-Bnmeu5ez.cjs +0 -2094
  821. package/dist/CodeBlock-BtfPlbAI.js +0 -2078
  822. package/dist/CodeBlock-CIySIuYr.js +0 -2078
  823. package/dist/CodeBlock-CuPtUM-7.cjs +0 -2094
  824. package/dist/CodeBlock-D6ffWXgc.js +0 -2078
  825. package/dist/CodeBlock-D8dcwbit.cjs +0 -2094
  826. package/dist/CodeBlock-DMZrFnlw.cjs +0 -2094
  827. package/dist/CodeBlock-DlBehYN8.js +0 -2078
  828. package/dist/CodeBlock-DvKWbSnE.cjs +0 -2094
  829. package/dist/CodeBlock-DwMCfkFY.js +0 -2078
  830. package/dist/CodeBlock-Dy6CNYyj.js +0 -2078
  831. package/dist/CodeBlock-U1pPOQI7.cjs +0 -2094
  832. package/dist/CodeBlock-f_GpNhEB.js +0 -2078
  833. package/dist/CodeBlock-oB6u8nI1.js +0 -2078
  834. package/dist/CodeBlock-tZC31B73.cjs +0 -2094
  835. package/dist/FeatureCard-CxC-7C-C.cjs +0 -300
  836. package/dist/ImageWithFallback-CGtidP6B.cjs +0 -4542
  837. package/dist/ImageWithFallback-lsg3pdFg.js +0 -4508
  838. package/dist/LayoutContext-BAql6ZRY.js +0 -97
  839. package/dist/LayoutContext-BvK-ggDa.cjs +0 -96
  840. package/dist/ThemeContext-BoH4NLfN.js +0 -734
  841. package/dist/ThemeContext-r69W20Xg.cjs +0 -733
  842. package/dist/VerifyEmailPage-COiyNl1y.js +0 -2825
  843. package/dist/VerifyEmailPage-CqKsR2v8.js +0 -2827
  844. package/dist/VerifyEmailPage-DjQKRlUS.cjs +0 -2824
  845. package/dist/XerticaOrbe-KL1RBHzw.cjs +0 -1354
  846. package/dist/XerticaOrbe-zwS1p2a8.js +0 -1355
  847. package/dist/XerticaProvider-6btlAlzc.js +0 -17
  848. package/dist/XerticaProvider-BNoNOxQ5.cjs +0 -16
  849. package/dist/XerticaProvider-BlY2limY.cjs +0 -38
  850. package/dist/XerticaProvider-DDuiIcKo.js +0 -39
  851. package/dist/XerticaProvider-cI9hSs27.cjs +0 -38
  852. package/dist/XerticaProvider-hSwhNQex.js +0 -39
  853. package/dist/breadcrumb-CqJ7bHY5.js +0 -161
  854. package/dist/breadcrumb-m9Hb2_XN.cjs +0 -177
  855. package/dist/components/assistant/xertica-assistant/hooks/index.d.ts +0 -6
  856. package/dist/components/assistant/xertica-assistant/hooks/use-assistant-conversations.d.ts +0 -21
  857. package/dist/components/assistant/xertica-assistant/hooks/use-assistant-messages.d.ts +0 -49
  858. package/dist/components/assistant/xertica-assistant/hooks/use-assistant-suggestions.d.ts +0 -16
  859. package/dist/components/blocks/audio-player/AudioPlayer.d.ts +0 -35
  860. package/dist/components/blocks/audio-player/index.d.ts +0 -1
  861. package/dist/components/blocks/document-editor/DocumentEditor.d.ts +0 -26
  862. package/dist/components/blocks/document-editor/index.d.ts +0 -1
  863. package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +0 -41
  864. package/dist/components/blocks/podcast-player/index.d.ts +0 -1
  865. package/dist/components/ui/chart/parts/chart-dashboard.d.ts +0 -113
  866. package/dist/components/ui/chart/parts/chart-metric.d.ts +0 -118
  867. package/dist/components/ui/chart/parts/chart-primitives.d.ts +0 -101
  868. package/dist/components/ui/chart/parts/chart-shared.d.ts +0 -20
  869. package/dist/components/ui/chart/parts/chart-utils.d.ts +0 -12
  870. package/dist/components/ui/chart/parts/index.d.ts +0 -5
  871. package/dist/dropdown-menu-BDB5CmQs.cjs +0 -247
  872. package/dist/dropdown-menu-DQidbKBD.js +0 -231
  873. package/dist/google-maps-loader-BFWp6VPd.js +0 -287
  874. package/dist/google-maps-loader-eS3uQ5TA.cjs +0 -287
  875. package/dist/header-Cgy6vYPk.cjs +0 -731
  876. package/dist/header-DRlT4jgI.js +0 -715
  877. package/dist/header-Dux00SI4.cjs +0 -731
  878. package/dist/header-EkGKXPsD.js +0 -715
  879. package/dist/header-WfEywpyc.cjs +0 -731
  880. package/dist/header-tifNQn2U.js +0 -715
  881. package/dist/index-BhapVLVj.js +0 -8
  882. package/dist/index-D6fxYEY8.cjs +0 -7
  883. package/dist/index-DW5tYe26.js +0 -8
  884. package/dist/input-2R4loU86.js +0 -127
  885. package/dist/input-DWANSKGb.cjs +0 -145
  886. package/dist/progress-DPtzoVV8.js +0 -175
  887. package/dist/progress-EeaoqqUs.cjs +0 -191
  888. package/dist/rich-text-editor-0mraWT5y.cjs +0 -2376
  889. package/dist/rich-text-editor-B6jMRLzk.cjs +0 -1939
  890. package/dist/rich-text-editor-B8_oYcIR.js +0 -1730
  891. package/dist/rich-text-editor-B9UbSXNb.js +0 -1203
  892. package/dist/rich-text-editor-BYuRBNBU.js +0 -2373
  893. package/dist/rich-text-editor-Bb9pySTs.cjs +0 -2374
  894. package/dist/rich-text-editor-BcL6L3cm.cjs +0 -2374
  895. package/dist/rich-text-editor-BoVZYtTs.cjs +0 -2391
  896. package/dist/rich-text-editor-CMgSN_w2.js +0 -1189
  897. package/dist/rich-text-editor-CPV1lEPH.cjs +0 -1748
  898. package/dist/rich-text-editor-CoKqbCtu.cjs +0 -1799
  899. package/dist/rich-text-editor-Cw56T_mB.js +0 -2356
  900. package/dist/rich-text-editor-Cyt8qs2b.js +0 -1921
  901. package/dist/rich-text-editor-D6H84OcX.cjs +0 -1220
  902. package/dist/rich-text-editor-D76gD-QI.js +0 -2328
  903. package/dist/rich-text-editor-DKkokOnA.js +0 -1781
  904. package/dist/rich-text-editor-DNsdpN64.cjs +0 -2359
  905. package/dist/rich-text-editor-DfG8bCyY.js +0 -2358
  906. package/dist/rich-text-editor-Dxjw31Z4.js +0 -2341
  907. package/dist/rich-text-editor-DzP0Epmb.js +0 -2356
  908. package/dist/rich-text-editor-lyYE2ZG5.cjs +0 -1207
  909. package/dist/rich-text-editor-skplNlBM.cjs +0 -2345
  910. package/dist/select-Bkbr0f-Z.cjs +0 -162
  911. package/dist/select-CvIVdX2n.js +0 -145
  912. package/dist/sidebar-CK_0ZQHj.cjs +0 -803
  913. package/dist/sidebar-CUuOvYhK.js +0 -787
  914. package/dist/sidebar-Djn5syhi.cjs +0 -786
  915. package/dist/sidebar-_rT7rBMk.js +0 -787
  916. package/dist/slider-Bc5Hd0y1.js +0 -56
  917. package/dist/slider-N7hFFj6X.cjs +0 -73
  918. package/dist/tooltip-Ded96neP.cjs +0 -137
  919. package/dist/tooltip-HDOoD2-0.js +0 -120
  920. package/dist/use-audio-player-BkmEmj8Q.js +0 -185
  921. package/dist/use-audio-player-CLFTWFW1.cjs +0 -184
  922. package/dist/use-file-upload-BcjEo2S5.js +0 -404
  923. package/dist/use-file-upload-CRJR68Tj.cjs +0 -403
  924. package/dist/use-mobile-B0hNy_Y6.cjs +0 -4303
  925. package/dist/use-mobile-Bbd51ASU.cjs +0 -4392
  926. package/dist/use-mobile-Bk6CX-TC.js +0 -4359
  927. package/dist/use-mobile-BvYdisLP.js +0 -4202
  928. package/dist/use-mobile-BzuxjzNX.cjs +0 -4392
  929. package/dist/use-mobile-CKb5pqTs.js +0 -4269
  930. package/dist/use-mobile-CYuAuGDl.js +0 -4202
  931. package/dist/use-mobile-CaENcqm-.js +0 -4508
  932. package/dist/use-mobile-CbrYgJGJ.js +0 -4203
  933. package/dist/use-mobile-DMOvImGQ.cjs +0 -4542
  934. package/dist/use-mobile-DRB3BQgD.cjs +0 -4235
  935. package/dist/use-mobile-DZvv7QMR.js +0 -4359
  936. package/dist/use-mobile-DdI_TXam.cjs +0 -4235
  937. package/dist/use-mobile-DlceKf8a.js +0 -4359
  938. package/dist/use-mobile-DsOnow1o.cjs +0 -4236
  939. package/dist/use-mobile-Kcj6jSnK.cjs +0 -4392
  940. package/dist/use-mobile-bnKcua_i.js +0 -4202
  941. package/dist/use-mobile-ncXBeE2z.cjs +0 -4235
  942. package/dist/use-rich-text-editor-DjiddBGv.js +0 -282
  943. package/dist/use-rich-text-editor-lpeswbCs.cjs +0 -281
  944. package/dist/{rich-text-editor-DgF8s7xW.js → rich-text-editor-BmsjY03B.js} +26 -26
  945. package/dist/{rich-text-editor-mWoaSCE4.cjs → rich-text-editor-GS2kpTAK.cjs} +26 -26
package/CHANGELOG.md CHANGED
@@ -1,469 +1,504 @@
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
- ## [2.1.10] — 2026-05-20
11
-
12
- ### Added
13
-
14
- - **`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`).
15
- - **`ErrorBoundary` três variantes pré-configuradas** em `components/shared/error-boundary.tsx`:
16
- - `AppErrorBoundary` — envolve todo o `App` antes dos providers; fallback full-screen com inline styles (funciona mesmo se o Tailwind falhar)
17
- - `PageErrorBoundary` envolve `<Routes>` / `<AuthGuard>`; captura lazy-chunk failures e erros de renderização de página
18
- - `SectionErrorBoundary` envolve seções isoladas (tabelas, charts, assistente); um seção quebrada não derruba a página
19
- - Props: `onError` (callback para Sentry/Datadog), `resetKeys` (auto-reset quando um valor muda, ex: `[location.pathname]`)
20
- - **i18n completo com `i18next` + `react-i18next`** integração completa de internacionalização:
21
- - Arquivo `i18n.ts` configurado com `pt-BR` (padrão), `en` e `es`
22
- - Locale files em `locales/pt-BR.json`, `en.json`, `es.json` com namespaces: `common`, `nav`, `home`, `stats`, `team`, `assistant`, `languageSelector`
23
- - `LanguageContext.setLanguage()` agora chama `i18n.changeLanguage()` — todos os `useTranslation()` re-renderizam
24
- - `HomeContent.tsx` e `TemplateContent.tsx` usam `useTranslation()` para todos os textos
25
- - Mock data usa `i18n.t()` (instância) para responder ao idioma ativo no `queryFn`
26
- - **`features/` — camada de estado separada da UI**:
27
- - `features/home/data/mock.ts` — tipos + dados mock + funções `fetch*()` (swap point para API real)
28
- - `features/home/hooks/` — `useDashboardStats`, `useTeamMembers`, `useFeatureCards` (TanStack React Query)
29
- - `features/home/store/dashboardStore.ts`Zustand (progress, slider, switch, activeTab)
30
- - `features/assistant/data/mock.ts` — `AssistantConfig` + `fetchAssistantConfig()`
31
- - `features/assistant/hooks/useAssistantConfig.ts` — React Query, staleTime 30 min
32
- - **`QueryClientProvider`** adicionado ao stack de providers em `App.tsx` como camada mais externa (abaixo de `AppErrorBoundary`)
33
- - **Lazy loading** em todas as rotas via `React.lazy()` + `<Suspense fallback={null}>` — cada página é um chunk separado
34
- - **`ProtectedRoute` + `GuestRoute`** como componentes de guarda de rota baseados em `useAuth()` eliminam lógica de redirect do `AuthGuard`
35
- - **`components/shared/navigation.ts`** fonte canônica de `RouteConfig`, `routes[]`, `getRouteByPath` e `isValidRoute` para o app devops (substituiu `routes.tsx` na raiz)
36
-
37
- ### Changed
38
-
39
- - **`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.
40
- - **`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'`.
41
- - **`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.
42
- - **`HomePage` + `TemplatePage` — sem props `user`/`onLogout`** — ambos consomem `useAuth()` diretamente; prop-drilling eliminado em toda a árvore de páginas (`HomeContent`, `TemplateContent`, `AppLayout`).
43
- - **`routes.tsx` deletado** — conteúdo movido para `components/shared/navigation.ts`; todos os imports atualizados.
44
-
45
- ### Fixed
46
-
47
- - **`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.
48
- - **`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.
49
- - **`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`.
50
- - **`useAssistant` — hydration one-shot de `initialMessages`** `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
51
- - **`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.
52
- - **`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.
53
- - **`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]`.
54
- - **`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.
55
- - **`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.
56
- - **`useAssistant` `setConversas(savedConversations)` em loop corrigido** — removido `useEffect` que chamava `setConversas` com `savedConversations = []` (default do destructuring), causando re-render infinito.
57
-
58
- ### Changed (continued)
59
-
60
- - **`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é.
61
- - **`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.
62
- - **`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`.
63
- - **`usePagination` — algoritmo deduplicado com `Set`** — reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez.
64
- - **`TreeView` — prop `ariaLabel` + roving tabindex** `<TreeView>` aceita `ariaLabel?: string`; roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id`.
65
- - **`DashboardBarChart` — `topOfStack` com `useMemo`** — IIFE extraída para `React.useMemo([stacked, chartSeries])` antes do `return`.
66
- - **`useAssistant` — `conversasFiltradas` com `useMemo`** e tipos fortalecidos (`handleEnviarMensagem: (arg?: string | ActionType) => Promise<void>`).
67
- - **`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`.
68
-
69
- ---
70
-
71
- - **`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.
72
- - **`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.
73
- - **`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`.
74
- - **`useAssistant` — hydration one-shot de `initialMessages`** — `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
75
- - **`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.
76
- - **`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.
77
- - **`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]`.
78
- - **`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.
79
-
80
- ### Changed
81
-
82
- - **`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).
83
- - **`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).
84
- - **`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.
85
- - **`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`.
86
- - **`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`.
87
- - **`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.
88
- - **`useAssistant` — `conversasFiltradas` com `useMemo`** substituída computação inline por `useMemo([conversas, abaSelecionada])`.
89
- - **`useAssistant` — sincronização de `conversas` com `savedConversations`** adicionado `useEffect([savedConversations])` que mantém `conversas` em sync com a prop `savedConversations`.
90
- - **`useAssistant` — tipos fortalecidos** — `handleEnviarMensagem` tipado como `(arg?: string | ActionType) => Promise<void>` na interface e na implementação, substituindo `string | any`.
91
- - **`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`.
92
-
93
- ---
94
-
95
- ## [2.1.4]2026-05-19
96
-
97
- ### Changed
98
-
99
- - **`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.
100
- - **`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`.
101
- - **`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`.
102
- - **`CustomTooltipContent` — componente compartilhado** — implementação duplicada de tooltip customizado (existia em `sidebar.tsx` e `xertica-assistant.tsx`) consolidada em `components/shared/CustomTooltipContent.tsx`.
103
- - **`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`.
104
- - **`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.
105
- - **`ThemeToggle` — usa `useTheme()`** — substituída referência direta ao `localStorage` pelo hook `useTheme()` do `ThemeContext`.
106
- - **`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.
107
-
108
- ---
109
-
110
- ## [2.1.3]2026-05-16
111
-
112
- ### Added
113
-
114
- - **Headless hooks — 4 new logic-only hooks** — all logic extracted from their UI components into standalone, tree-shakeable hooks:
115
- - **`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`.
116
- - **`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`.
117
- - **`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`.
118
- - **`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`.
119
- - **New chart types4 new Recharts wrappers** added to `components/ui/chart/chart.tsx`:
120
- - **`RadarMetricChart`** — multi-axis radar chart with optional fill, dots, and multi-series overlay.
121
- - **`PieMetricChart`**pie chart with optional percentage labels and exploded slice support.
122
- - **`RadialBarMetricChart`** — radial bar chart with stacked rings and configurable arc angle.
123
- - **`GaugeChart`**pure SVG semicircle gauge with needle, threshold color zones, and optional label. Supports `thresholds` array for dynamic color changes at value breakpoints.
124
- - **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.
125
- - **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.
126
-
127
- ### Fixed
128
-
129
- - **`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.
130
- - **`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`.
131
-
132
- ### Changed
133
-
134
- - **`FileUpload` component** — refactored to consume `useFileUpload` internally; public API unchanged.
135
- - **`TreeView` component** — refactored to consume `useTreeView` internally; public API unchanged.
136
- - **`Stepper` component** — refactored to consume `useStepper` internally; public API unchanged.
137
- - **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.
138
-
139
- ---
140
-
141
- ## [2.1.2]2026-05-14
142
-
143
- ### Fixed
144
-
145
- - **`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.
146
-
147
- ### Added
148
-
149
- - **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`.
150
- - **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.
151
-
152
- ---
153
-
154
- ## [2.1.1]2026-05-14
155
-
156
- ### Fixed
157
-
158
- - **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.
159
- - **`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.
160
-
161
- ---
162
-
163
- ## [2.1.0] — 2026-05-13
164
-
165
- ### Added
166
-
167
- - **`components/blocks/card-patterns/`** — novo domínio `blocks/` com 6 componentes de alto nível compostos exclusivamente de primitivos `ui/`:
168
- - **`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.
169
- - **`ActivityCard`**feed de atividades recentes com avatar, descrição de ação, timestamp e badge por tipo (`create`, `update`, `delete`, `comment`, `deploy`).
170
- - **`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.
171
- - **`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.
172
- - **`QuickActionCard`**tile de ação rápida com ícone em caixa colorida, badge e botão full-width.
173
- - **`NotificationCard`** — lista de notificações com indicador de não-lido, badge de tipo, "Marcar todas como lidas" e "Ver todas".
174
- - **Exportação do domínio `blocks/`** — todos os componentes disponíveis via `import { ... } from 'xertica-ui'` e via `components/blocks/index.ts`.
175
- - **Subpath público `xertica-ui/blocks`** — `FeatureCard`, `ActivityCard`, `ProfileCard`, `ProjectCard`, `QuickActionCard` e `NotificationCard` agora podem ser importados diretamente de `xertica-ui/blocks`.
176
- - **Subpath público `xertica-ui/pages`** — `LoginPage`, `HomePage`, `TemplatePage`, `ForgotPasswordPage`, `ResetPasswordPage`, `VerifyEmailPage` e seus contents agora são publicados com entrypoint dedicado.
177
- - **Documentação** — criado `docs/components/card-patterns.md` com props, exemplos e layout de dashboard completo para todos os 6 block components.
178
-
179
- ### Changed
180
-
181
- - **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.
182
- - **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`.
183
- - **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.
184
- - **Storybookdocs 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.
185
- - **Storybook — `preview.tsx`** — `min-h-screen` passou a ser condicional a `layout: 'fullscreen'`, resolvendo a altura excessiva dos exemplos na aba Docs.
186
- - **Template npm** — `templates/package.json` atualizado para `2.1.0` e dependência `xertica-ui` para `^2.1.0`.
187
- - **Template version badge** — o template passa a exibir um indicador visual discreto da versão do pacote `xertica-ui` usada pelo projeto.
188
- - **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).
189
-
190
- ### Fixed
191
-
192
- - **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.
193
- - **`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.
194
-
195
- ---
196
-
197
- ## [2.0.6] — 2026-05-13
198
-
199
- ### Added
200
-
201
- - **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.
202
- - **`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.
203
- - **Smoke tests de API pública** adicionada validação de import/render dos subpaths públicos (`ui`, `brand`, `layout`, `assistant`, `media` e `hooks`).
204
- - **Exports públicos de Maps** `useMapLayers`, `GOOGLE_MAPS_ID` e `GOOGLE_MAPS_LIBRARIES` agora são expostos pelo subpath `xertica-ui/ui`.
205
-
206
- ### Changed
207
-
208
- - **`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.
209
- - **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.
210
- - **Arquitetura FSD/FDA**tipos compartilhados do assistant foram movidos para camada neutra, evitando dependência runtime de `components/shared` para implementação de feature.
211
- - **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.
212
- - **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.
213
- - **Storybook Maps** — stories de mapa usam um frame responsivo mais largo para melhorar a visualização na aba Docs.
214
-
215
- ### Fixed
216
-
217
- - **Guards de browser/SSR** — providers e componentes browser-only agora protegem acessos a `window`, `document`, `localStorage`, `navigator` e scripts externos.
218
- - **Google Maps sem configuração** — componentes relacionados a Maps renderizam estados de configuração/erro sem quebrar a aplicação consumidora.
219
-
220
- ---
221
-
222
- ## [2.0.5]2026-05-12
223
-
224
- ### Added
225
-
226
- - **`llms-compact.txt`** — novo arquivo de referência compacto para LLMs, sintetizando todos os componentes em formato reduzido ideal para contextos de tokens limitados.
227
- - **`docs/decision-tree.md`**guia de árvore de decisão para agentes de IA selecionarem o componente correto com base nos requisitos da UI.
228
- - **`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.
229
- - **Storybook stories** — adicionadas stories interativas para Accordion, AlertDialog, Button, Checkbox, Dialog, Input, Switch, Tabs, HomePage e TemplatePage.
230
- - **`components/pages/home-page/home-page.mdx`** e **`template-page.mdx`** — novas entradas de documentação MDX para as page components.
231
-
232
- ### Changed
233
-
234
- - **`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.
235
- - **`components.json`** — atualização completa do registro de componentes, cobrindo todos os 97 componentes com metadados de subpath, props e variantes.
236
- - **`llms.txt`**seção de subpath imports e mapeamento de camadas FSD/FDA atualizados.
237
- - **`vite.config.ts`** — ajustes no build multi-entry para garantir correta emissão dos arquivos CJS/ESM.
238
-
239
- ### Fixed
240
-
241
- - **`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.
242
-
243
- ---
244
-
245
- ## [2.0.3]2026-05-11
246
-
247
- ### Added
248
-
249
- - **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.
250
-
251
- ---
252
-
253
- ## [2.0.2]2026-05-11
254
-
255
- ### Fixed
256
-
257
- - **CLI rewritten for FSD/FDA structure** `npx xertica-ui@latest init` agora copia corretamente a estrutura Feature-Sliced Design:
258
- - Removida cópia de `src/app/routes.tsx` (arquivo não existe mais após refatoração)
259
- - Adicionada cópia de `src/app/components/AppLayout.tsx`
260
- - Adicionada cópia completa de `src/shared/` (`auth.ts`, `navigation.ts`, `types/auth.ts`)
261
- - Adicionada cópia de `src/features/auth|home|template` conforme seleções do usuário
262
- - Cópia de pages corrigida de `src/app/pages/` `src/pages/`
263
- - `AuthGuard.tsx` agora gerado dinamicamente com imports e rotas apenas das páginas selecionadas
264
- - **`generateDemoResponse` exportado via `xertica-ui/assistant`** estava ausente do barrel causando `SyntaxError: does not provide an export named 'generateDemoResponse'`
265
- - **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)
266
-
267
- ---
268
-
269
- ## [2.0.0]2026-05-11
270
-
271
- ### Added
272
-
273
- - **Subpath exports** — The package now exposes 6 granular entry points alongside the full root barrel:
274
- - `xertica-ui/ui` — all UI primitives (Button, Card, Input, Table, Dialog, etc.)
275
- - `xertica-ui/layout` — Sidebar and Header
276
- - `xertica-ui/brand` XerticaProvider, XerticaLogo, XerticaXLogo, XerticaOrbe, ThemeToggle, LanguageSelector
277
- - `xertica-ui/assistant` — XerticaAssistant, MarkdownMessage, CodeBlock, FormattedDocument, ModernChatInput
278
- - `xertica-ui/media` — VideoPlayer, AudioPlayer, FloatingMediaWrapper
279
- - `xertica-ui/hooks` — useLayout, useTheme, useLanguage, useBrandColors, useAssistente, useApiKey
280
- - Root `from 'xertica-ui'` remains fully supported for backward compatibility.
281
- - **`ImageWithFallback` added to `xertica-ui/ui`** — previously only in the root barrel; now accessible via the `/ui` subpath.
282
- - **Multi-entry Vite build** — `vite.config.ts` now uses `lib.entry` as an object (7 entry points). Output filenames follow `[entryName].[format].js` pattern.
283
- - **CLI template — FSD/FDA architecture** — The scaffolded template was restructured to follow Feature-Sliced Design + Feature-Driven Architecture:
284
- - `src/app/`BrowserRouter, XerticaProvider, AuthGuard (auth state + route definitions), AppLayout (Sidebar + children shell)
285
- - `src/shared/` — `config/navigation.ts` (route registry), `lib/auth.ts` (localStorage helpers), `types/auth.ts` (User interface)
286
- - `src/features/auth/ui/` — LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent; with shared `AuthPageShell` and `SocialLoginButtons` DRY extractions
287
- - `src/features/home/ui/` — HomeContent
288
- - `src/features/template/ui/`TemplateContent, FormTemplate
289
- - `src/pages/` — thin page wrappers (LoginPage, HomePage, TemplatePage, ForgotPasswordPage, VerifyEmailPage, ResetPasswordPage)
290
- - **`templates/guidelines/Guidelines.md`** — new architecture guide documenting FSD/FDA layers, layer responsibilities, and "Adding New Routes" step-by-step.
291
-
292
- ### Changed
293
-
294
- - **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.
295
- - **`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.
296
- - **`tsconfig.build.json`** `include` array updated to cover all new barrel source directories (`components/**/*`, `contexts/**/*`, `hooks/**/*`).
297
- - **Documentation** (`llms.txt`, `llms-full.txt`) Added subpath import reference table and FSD/FDA layer mapping.
298
-
299
- ### Fixed
300
-
301
- - **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.
302
-
303
- ---
304
-
305
- ## [1.10.0] — 2026-05-08
306
-
307
- ### Added
308
-
309
- - **Semantic Variants** Added `success`, `info`, and `warning` variants to components that lacked them:
310
- - **Button** — now supports 9 variants: `default`, `secondary`, `outline`, `ghost`, `destructive`, `link`, `success`, `info`, `warning`.
311
- - **Progress** — new `variant` prop (`default`, `success`, `info`, `warning`, `destructive`) colors both the track and the indicator.
312
- - **NotificationBadge** — added `secondary`, `outline`, `success`, `info`, `warning`; standardized `default` to primary color for consistency with Badge and Button.
313
- - **TimelineDot** — added `info` and `outline` variants; replaced hardcoded `rgb()` values with semantic CSS tokens (`bg-success`, `bg-warning`).
314
- - **DialogBody**new sub-component for the Dialog. When used, `DialogHeader` and `DialogFooter` stay pinned while `DialogBody` scrolls independently. Exported from `xertica-ui`.
315
- - **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.
316
- - **Header `breadcrumbSlot`** — new prop accepting any `ReactNode` rendered immediately after the breadcrumb/title area (badges, buttons, status chips, etc.).
317
- - **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).
318
-
319
- ### Fixed
320
-
321
- - **Search double clear icon** `type="search"` caused browsers to inject a native clear button on top of the custom × icon. Changed to `type="text"`.
322
- - **CSS `@source` path** — CLI template `src/styles/index.css` had `../node_modules/xertica-ui` (one level short); corrected to `../../node_modules/xertica-ui/components`.
323
- - **`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.
324
-
325
- ### Changed
326
-
327
- - **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.
328
- - **LLM documentation** (`llms-full.txt`) — Updated Badge, Button, Dialog, Header, NotificationBadge, Progress, Search, Sidebar, and Timeline sections to reflect current APIs.
329
-
330
- ---
331
-
332
- ## [1.9.0]2026-05-05
333
-
334
- ### Added
335
-
336
- - **Standardized Form Sizing System** — Implemented a unified `size` prop (`sm`, `md`, `lg`) across all form-related components for perfect visual alignment in grid layouts:
337
- - **Text Components** — `Input`, `SelectTrigger`, `Textarea`, `Search`, and `InputOTPSlot` now share consistent height/padding/font-size tokens.
338
- - **Toggle Components** — `Checkbox`, `RadioGroupItem`, and `Switch` now feature dynamic sizing for both containers and internal indicators (check icon, dot, thumb).
339
- - **Labels** — `Label` component now supports `size` to match the text size of the associated input.
340
- - **Reference Guide** Added `docs/form-sizing.md` as a comprehensive guide for the standardized sizing scale.
341
- - **Assistant Individual Controls** — Added granular control props to `XerticaAssistant` to toggle specific features independently:
342
- - `showHistory`, `showFavorites`, `allowAudioInput`, `allowFileUpload`, `allowDocCreation`, `allowPodcastGen`, `allowResearchGen`.
343
- - **Header Breadcrumb Navigation** — Standardized `Header` to use breadcrumbs as the default navigation pattern:
344
- - Added support for `react-router-dom` links in breadcrumbs to prevent page reloads.
345
- - Configurable hierarchy levels and labels directly via props.
346
-
347
- ### Changed
348
-
349
- - **Form Component Architecture** — Migrated form elements from legacy tokens to standardized design system tokens (`bg-background`, `border-border`) for better theme consistency.
350
- - **Documentation & Storybook** — Updated all 9 affected form components with new "Sizes" sections in Storybook (Stories + MDX) and enriched LLM-facing markdown documentation.
351
- - **Unit Testing**Updated test suites for `Checkbox`, `RadioGroup`, `Switch`, `InputOTP`, `Label`, `Search`, `Select`, and `Textarea` to verify sizing variant classes.
352
-
353
- ### Fixed
354
-
355
- - **Search Component** — Removed obsolete `loading` prop which was causing TypeScript errors and was redundant with the current design system patterns.
356
- - **SelectTrigger Sizing** — Standardized `md` height to `h-10` (40px) to match the rest of the form system.
357
-
358
- ---
359
-
360
- ## [1.8.0] — 2026-04-27
361
-
362
- ### Added
363
-
364
- - **VideoPlayer UI Enhancements** — Added gradient overlay on controls for improved contrast against video content:
365
- - Gradient: `from-black/60 via-black/30 to-transparent` with `pt-12` spacing
366
- - White progress bar with `bg-white/30` track, `bg-white` fill, and `rounded-r-sm` on filled portion
367
- - White icons with `drop-shadow-md` for visibility
368
- - Buttons use `text-white hover:text-white hover:bg-black/50` for proper hover states
369
- - **Slider Visual Fixes** — Improved progress bar alignment:
370
- - Added left margin `ml-2` to track for thumb alignment
371
- - Added `rounded-r-sm` to Range for filled portion
372
- - Adjusted track/margins for proper visual alignment at full value
373
-
374
- ### Changed
375
-
376
- - **Documentation** — Updated component counts across all docs:
377
- - `llms.txt`: 75 97 components
378
- - `llms-full.txt`: Added statistics table
379
- - `docs/llms.md`: Added statistics section
380
- - `Introduction.mdx`: Added "97 Components" badge
381
- - **components.json** — 75 → 89 components (added missing Media, Assistant, Pages, and Map components)
382
-
383
- ### Fixed
384
-
385
- - **Slider Progress Bar** — Fixed visual gap where thumb doesn't align with filled bar at end position by adjusting track margins
386
-
387
- ---
388
-
389
- ## [1.7.0] — 2026-04-23
390
-
391
- ### Fixed
392
-
393
- - **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.).
394
- - **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.
395
- - **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.
396
-
397
- ### Added
398
-
399
- - **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.
400
- - **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.
401
- - **Documentation** `docs/getting-started.md` updated with CLI `update` command reference and a new "CSS Setup (Critical)" section explaining the `@theme inline` requirement.
402
-
403
- ---
404
-
405
- ## [1.6.0] 2026-04-20
406
-
407
- ### Added
408
-
409
- - **`docs/llms.md`** — Master LLM/AI-agent entrypoint index with full component catalog, token quick reference, and reading order guide.
410
- - **`docs/layout.md`** — Complete `LayoutContext` and `useLayout()` API reference.
411
- - **`docs/components/route-map.md`**New documentation for `RouteMap` component.
412
- - **`docs/components/use-mobile.md`** New documentation for `useMobile` / `useIsMobile` hooks.
413
- - **`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.
414
- - **`Sidebar`** — New `width` prop (`expandedWidth: number`) for configuring the expanded sidebar pixel width. Width is now read and stored via `LayoutContext.sidebarWidth`.
415
-
416
- ### Changed
417
-
418
- - **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).
419
- - **JSDoc** — All Portuguese JSDoc comments in `components/ui/` translated to English and enriched with accurate `@ai-rules`.
420
- - **`README.md`** Complete rewrite in English, restructured for npm page quality (quick start, install guide, component catalog, token reference, AI agent entrypoint, troubleshooting).
421
- - **`package.json`** — Version bumped to `1.6.0`. Description translated to English.
422
-
423
- ### Fixed
424
-
425
- - **`docs/components/page-header.md`** — Was documenting a wrong API (`title/description/actions`). Now correctly documents the real API: `breadcrumbs[]`, `showLanguageSelector`, `rightContent`, `PageHeaderHeading`, `PageHeaderDescription`.
426
- - **`docs/components/stepper.md`** — Was documenting a `steps[]` array prop. Now correctly documents the composable `<Stepper currentStep> + <Step step label>` API (1-indexed).
427
- - **`docs/components/empty.md`** — Was documenting single-prop component. Now correctly documents the composable sub-component pattern: `Empty > EmptyIcon > EmptyTitle > EmptyDescription > EmptyAction`.
428
- - **`docs/components/stats-card.md`** `trend` was documented as a string. Now correctly documented as `{ value: number; label?: string }`.
429
- - **`docs/components/chart.md`** — Was documenting raw Recharts usage. Now correctly documents the `ChartContainer + ChartConfig + var(--color-*)` pattern.
430
-
431
- ---
432
-
433
- ## [1.5.2] — 2026-04-15
434
-
435
- ### Fixed
436
-
437
- - Resolved regression where modal components (Dialog/AlertDialog) failed to render in projects initialized via the CLI.
438
- - Implemented robust CSS integration using Tailwind v4 theme mappings.
439
- - Ensured Radix UI portals correctly inherit theme variables.
440
-
441
- ---
442
-
443
- ## [1.5.1] — 2026-04-14
444
-
445
- ### Changed
446
-
447
- - Sidebar: Added `assistente` variant with fixed areas, searchable navigation, and grouped navigation structures.
448
- - Template page updated to demonstrate the assistant sidebar variant.
449
-
450
- ---
451
-
452
- ## [1.5.0] — 2026-04-13
453
-
454
- ### Added
455
-
456
- - `Sidebar``width` / `expandedWidth` prop for configurable expanded sidebar width.
457
- - `LayoutContext` — `sidebarWidth` and `setSidebarWidth` for global sidebar width management.
458
- - `Header` — User profile section with avatar, dropdown menu, settings button, and logout button.
459
- - `StatsCard` — KPI metric card component.
460
- - `Timeline` Chronological event list with dot variants.
461
- - `TreeView` Hierarchical tree navigation.
462
- - `Rating`Star-based rating input.
463
- - `FileUpload` Drag-and-drop file input.
464
- - `Search`Pre-built search input with icon and clear button.
465
- - `NotificationBadge` — Dot/count badge overlay.
466
- - `RouteMap` — Google Maps route display and direction calculation.
467
- - `Stepper` — Multi-step progress indicator.
468
- - `Map`Advanced Google Maps integration with markers, circles, polygons, and layers.
469
- - `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
+ ### Added
13
+
14
+ - **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:
15
+ - Copies **only** the JSON files for the selected languages into `src/locales/` (no orphan locales)
16
+ - Generates `src/i18n.ts` with imports/resources for exactly those languages
17
+ - Injects the `availableLanguages` prop into the generated `src/app/App.tsx`
18
+ - Persists the selection in `src/locales/.languages.json` (schema v1)
19
+ - **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 JSONs, and prunes removed ones.
20
+ - **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.
21
+ - **`bin/language-config.ts`** new module encapsulating the supported-language registry (`SUPPORTED_LANGUAGES`), code generators (`generateI18nFile`, `generateAppTsx`), and persistence helpers (`readLanguagesConfig`, `writeLanguagesConfig`, `syncLocaleFiles`).
22
+
23
+ ### Changed
24
+
25
+ - **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.
26
+
27
+ ---
28
+
29
+ ## [2.1.11]2026-05-20
30
+
31
+ ### Fixed
32
+
33
+ - **CLI Initialization** Correções essenciais no comando `init`:
34
+ - `i18n.ts` e o diretório `locales/` agora são copiados corretamente, restaurando as traduções na aplicação gerada.
35
+ - `AuthContext.tsx` e dependências agora são incluídas, habilitando o hook `useAuth`.
36
+ - 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.
37
+ - O diretório `features/assistant/` agora é sempre copiado visto que o `AppLayout` depende nativamente da `AssistantPage`.
38
+ - **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.
39
+ - **`LanguageSelector` e `LanguageContext`** — Correção de bugs na seleção de idiomas e fallback:
40
+ - `LanguageContext.tsx` agora valida de forma robusta e intercepta valores legados como `'PT'` no `localStorage`, realizando um *fallback* seguro para `'pt-BR'`.
41
+ - 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.
42
+
43
+ ---
44
+
45
+ ## [2.1.10] — 2026-05-20
46
+
47
+ ### Added
48
+
49
+ - **`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`).
50
+ - **`ErrorBoundary` — três variantes pré-configuradas** em `components/shared/error-boundary.tsx`:
51
+ - `AppErrorBoundary`envolve todo o `App` antes dos providers; fallback full-screen com inline styles (funciona mesmo se o Tailwind falhar)
52
+ - `PageErrorBoundary`envolve `<Routes>` / `<AuthGuard>`; captura lazy-chunk failures e erros de renderização de página
53
+ - `SectionErrorBoundary` — envolve seções isoladas (tabelas, charts, assistente); um seção quebrada não derruba a página
54
+ - Props: `onError` (callback para Sentry/Datadog), `resetKeys` (auto-reset quando um valor muda, ex: `[location.pathname]`)
55
+ - **i18n completo com `i18next` + `react-i18next`** integração completa de internacionalização:
56
+ - Arquivo `i18n.ts` configurado com `pt-BR` (padrão), `en` e `es`
57
+ - Locale files em `locales/pt-BR.json`, `en.json`, `es.json` com namespaces: `common`, `nav`, `home`, `stats`, `team`, `assistant`, `languageSelector`
58
+ - `LanguageContext.setLanguage()` agora chama `i18n.changeLanguage()` — todos os `useTranslation()` re-renderizam
59
+ - `HomeContent.tsx` e `TemplateContent.tsx` usam `useTranslation()` para todos os textos
60
+ - Mock data usa `i18n.t()` (instância) para responder ao idioma ativo no `queryFn`
61
+ - **`features/`camada de estado separada da UI**:
62
+ - `features/home/data/mock.ts` — tipos + dados mock + funções `fetch*()` (swap point para API real)
63
+ - `features/home/hooks/``useDashboardStats`, `useTeamMembers`, `useFeatureCards` (TanStack React Query)
64
+ - `features/home/store/dashboardStore.ts` — Zustand (progress, slider, switch, activeTab)
65
+ - `features/assistant/data/mock.ts` — `AssistantConfig` + `fetchAssistantConfig()`
66
+ - `features/assistant/hooks/useAssistantConfig.ts`React Query, staleTime 30 min
67
+ - **`QueryClientProvider`** adicionado ao stack de providers em `App.tsx` como camada mais externa (abaixo de `AppErrorBoundary`)
68
+ - **Lazy loading** em todas as rotas via `React.lazy()` + `<Suspense fallback={null}>` — cada página é um chunk separado
69
+ - **`ProtectedRoute` + `GuestRoute`** como componentes de guarda de rota baseados em `useAuth()` — eliminam lógica de redirect do `AuthGuard`
70
+ - **`components/shared/navigation.ts`** — fonte canônica de `RouteConfig`, `routes[]`, `getRouteByPath` e `isValidRoute` para o app devops (substituiu `routes.tsx` na raiz)
71
+
72
+ ### Changed
73
+
74
+ - **`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.
75
+ - **`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'`.
76
+ - **`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.
77
+ - **`HomePage` + `TemplatePage` sem props `user`/`onLogout`** ambos consomem `useAuth()` diretamente; prop-drilling eliminado em toda a árvore de páginas (`HomeContent`, `TemplateContent`, `AppLayout`).
78
+ - **`routes.tsx` deletado** — conteúdo movido para `components/shared/navigation.ts`; todos os imports atualizados.
79
+
80
+ ### Fixed
81
+
82
+ - **`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.
83
+ - **`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.
84
+ - **`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`.
85
+ - **`useAssistant` — hydration one-shot de `initialMessages`** — `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
86
+ - **`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.
87
+ - **`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.
88
+ - **`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]`.
89
+ - **`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.
90
+ - **`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.
91
+ - **`useAssistant` — `setConversas(savedConversations)` em loop corrigido** removido `useEffect` que chamava `setConversas` com `savedConversations = []` (default do destructuring), causando re-render infinito.
92
+
93
+ ### Changed (continued)
94
+
95
+ - **`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é.
96
+ - **`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.
97
+ - **`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`.
98
+ - **`usePagination` — algoritmo deduplicado com `Set`** — reescrito usando `Set<number>` para garantir que cada página apareça exatamente uma vez.
99
+ - **`TreeView` — prop `ariaLabel` + roving tabindex** — `<TreeView>` aceita `ariaLabel?: string`; roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id`.
100
+ - **`DashboardBarChart` — `topOfStack` com `useMemo`** IIFE extraída para `React.useMemo([stacked, chartSeries])` antes do `return`.
101
+ - **`useAssistant` — `conversasFiltradas` com `useMemo`** e tipos fortalecidos (`handleEnviarMensagem: (arg?: string | ActionType) => Promise<void>`).
102
+ - **`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`.
103
+
104
+ ---
105
+
106
+ - **`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.
107
+ - **`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.
108
+ - **`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`.
109
+ - **`useAssistant` — hydration one-shot de `initialMessages`** — `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histórico em re-renders.
110
+ - **`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.
111
+ - **`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.
112
+ - **`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]`.
113
+ - **`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.
114
+
115
+ ### Changed
116
+
117
+ - **`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).
118
+ - **`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).
119
+ - **`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.
120
+ - **`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`.
121
+ - **`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`.
122
+ - **`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.
123
+ - **`useAssistant``conversasFiltradas` com `useMemo`** substituída computação inline por `useMemo([conversas, abaSelecionada])`.
124
+ - **`useAssistant`sincronização de `conversas` com `savedConversations`** adicionado `useEffect([savedConversations])` que mantém `conversas` em sync com a prop `savedConversations`.
125
+ - **`useAssistant` tipos fortalecidos** — `handleEnviarMensagem` tipado como `(arg?: string | ActionType) => Promise<void>` na interface e na implementação, substituindo `string | any`.
126
+ - **`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`.
127
+
128
+ ---
129
+
130
+ ## [2.1.4]2026-05-19
131
+
132
+ ### Changed
133
+
134
+ - **`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.
135
+ - **`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`.
136
+ - **`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`.
137
+ - **`CustomTooltipContent` — componente compartilhado** — implementação duplicada de tooltip customizado (existia em `sidebar.tsx` e `xertica-assistant.tsx`) consolidada em `components/shared/CustomTooltipContent.tsx`.
138
+ - **`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`.
139
+ - **`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.
140
+ - **`ThemeToggle` — usa `useTheme()`** — substituída referência direta ao `localStorage` pelo hook `useTheme()` do `ThemeContext`.
141
+ - **`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.
142
+
143
+ ---
144
+
145
+ ## [2.1.3]2026-05-16
146
+
147
+ ### Added
148
+
149
+ - **Headless hooks4 new logic-only hooks** all logic extracted from their UI components into standalone, tree-shakeable hooks:
150
+ - **`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`.
151
+ - **`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`.
152
+ - **`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`.
153
+ - **`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`.
154
+ - **New chart types 4 new Recharts wrappers** added to `components/ui/chart/chart.tsx`:
155
+ - **`RadarMetricChart`** — multi-axis radar chart with optional fill, dots, and multi-series overlay.
156
+ - **`PieMetricChart`** — pie chart with optional percentage labels and exploded slice support.
157
+ - **`RadialBarMetricChart`** — radial bar chart with stacked rings and configurable arc angle.
158
+ - **`GaugeChart`**pure SVG semicircle gauge with needle, threshold color zones, and optional label. Supports `thresholds` array for dynamic color changes at value breakpoints.
159
+ - **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.
160
+ - **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.
161
+
162
+ ### Fixed
163
+
164
+ - **`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.
165
+ - **`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`.
166
+
167
+ ### Changed
168
+
169
+ - **`FileUpload` component** refactored to consume `useFileUpload` internally; public API unchanged.
170
+ - **`TreeView` component** refactored to consume `useTreeView` internally; public API unchanged.
171
+ - **`Stepper` component** refactored to consume `useStepper` internally; public API unchanged.
172
+ - **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.
173
+
174
+ ---
175
+
176
+ ## [2.1.2] 2026-05-14
177
+
178
+ ### Fixed
179
+
180
+ - **`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.
181
+
182
+ ### Added
183
+
184
+ - **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`.
185
+ - **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.
186
+
187
+ ---
188
+
189
+ ## [2.1.1] — 2026-05-14
190
+
191
+ ### Fixed
192
+
193
+ - **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.
194
+ - **`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.
195
+
196
+ ---
197
+
198
+ ## [2.1.0] — 2026-05-13
199
+
200
+ ### Added
201
+
202
+ - **`components/blocks/card-patterns/`**novo domínio `blocks/` com 6 componentes de alto nível compostos exclusivamente de primitivos `ui/`:
203
+ - **`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.
204
+ - **`ActivityCard`** feed de atividades recentes com avatar, descrição de ação, timestamp e badge por tipo (`create`, `update`, `delete`, `comment`, `deploy`).
205
+ - **`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.
206
+ - **`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.
207
+ - **`QuickActionCard`** — tile de ação rápida com ícone em caixa colorida, badge e botão full-width.
208
+ - **`NotificationCard`**lista de notificações com indicador de não-lido, badge de tipo, "Marcar todas como lidas" e "Ver todas".
209
+ - **Exportação do domínio `blocks/`**todos os componentes disponíveis via `import { ... } from 'xertica-ui'` e via `components/blocks/index.ts`.
210
+ - **Subpath público `xertica-ui/blocks`**`FeatureCard`, `ActivityCard`, `ProfileCard`, `ProjectCard`, `QuickActionCard` e `NotificationCard` agora podem ser importados diretamente de `xertica-ui/blocks`.
211
+ - **Subpath público `xertica-ui/pages`**`LoginPage`, `HomePage`, `TemplatePage`, `ForgotPasswordPage`, `ResetPasswordPage`, `VerifyEmailPage` e seus contents agora são publicados com entrypoint dedicado.
212
+ - **Documentação** — criado `docs/components/card-patterns.md` com props, exemplos e layout de dashboard completo para todos os 6 block components.
213
+
214
+ ### Changed
215
+
216
+ - **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.
217
+ - **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`.
218
+ - **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.
219
+ - **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.
220
+ - **Storybook — `preview.tsx`** — `min-h-screen` passou a ser condicional a `layout: 'fullscreen'`, resolvendo a altura excessiva dos exemplos na aba Docs.
221
+ - **Template npm** — `templates/package.json` atualizado para `2.1.0` e dependência `xertica-ui` para `^2.1.0`.
222
+ - **Template version badge** o template passa a exibir um indicador visual discreto da versão do pacote `xertica-ui` usada pelo projeto.
223
+ - **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).
224
+
225
+ ### Fixed
226
+
227
+ - **Chartstacked 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.
228
+ - **`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.
229
+
230
+ ---
231
+
232
+ ## [2.0.6] — 2026-05-13
233
+
234
+ ### Added
235
+
236
+ - **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.
237
+ - **`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.
238
+ - **Smoke tests de API pública** — adicionada validação de import/render dos subpaths públicos (`ui`, `brand`, `layout`, `assistant`, `media` e `hooks`).
239
+ - **Exports públicos de Maps** — `useMapLayers`, `GOOGLE_MAPS_ID` e `GOOGLE_MAPS_LIBRARIES` agora são expostos pelo subpath `xertica-ui/ui`.
240
+
241
+ ### Changed
242
+
243
+ - **`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.
244
+ - **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.
245
+ - **Arquitetura FSD/FDA** tipos compartilhados do assistant foram movidos para camada neutra, evitando dependência runtime de `components/shared` para implementação de feature.
246
+ - **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.
247
+ - **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.
248
+ - **Storybook Maps** — stories de mapa usam um frame responsivo mais largo para melhorar a visualização na aba Docs.
249
+
250
+ ### Fixed
251
+
252
+ - **Guards de browser/SSR** — providers e componentes browser-only agora protegem acessos a `window`, `document`, `localStorage`, `navigator` e scripts externos.
253
+ - **Google Maps sem configuração** componentes relacionados a Maps renderizam estados de configuração/erro sem quebrar a aplicação consumidora.
254
+
255
+ ---
256
+
257
+ ## [2.0.5]2026-05-12
258
+
259
+ ### Added
260
+
261
+ - **`llms-compact.txt`** novo arquivo de referência compacto para LLMs, sintetizando todos os componentes em formato reduzido ideal para contextos de tokens limitados.
262
+ - **`docs/decision-tree.md`** — guia de árvore de decisão para agentes de IA selecionarem o componente correto com base nos requisitos da UI.
263
+ - **`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.
264
+ - **Storybook stories** adicionadas stories interativas para Accordion, AlertDialog, Button, Checkbox, Dialog, Input, Switch, Tabs, HomePage e TemplatePage.
265
+ - **`components/pages/home-page/home-page.mdx`** e **`template-page.mdx`**novas entradas de documentação MDX para as page components.
266
+
267
+ ### Changed
268
+
269
+ - **`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.
270
+ - **`components.json`** — atualização completa do registro de componentes, cobrindo todos os 97 componentes com metadados de subpath, props e variantes.
271
+ - **`llms.txt`** — seção de subpath imports e mapeamento de camadas FSD/FDA atualizados.
272
+ - **`vite.config.ts`** — ajustes no build multi-entry para garantir correta emissão dos arquivos CJS/ESM.
273
+
274
+ ### Fixed
275
+
276
+ - **`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.
277
+
278
+ ---
279
+
280
+ ## [2.0.3] 2026-05-11
281
+
282
+ ### Added
283
+
284
+ - **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.
285
+
286
+ ---
287
+
288
+ ## [2.0.2]2026-05-11
289
+
290
+ ### Fixed
291
+
292
+ - **CLI rewritten for FSD/FDA structure** — `npx xertica-ui@latest init` agora copia corretamente a estrutura Feature-Sliced Design:
293
+ - Removida cópia de `src/app/routes.tsx` (arquivo não existe mais após refatoração)
294
+ - Adicionada cópia de `src/app/components/AppLayout.tsx`
295
+ - Adicionada cópia completa de `src/shared/` (`auth.ts`, `navigation.ts`, `types/auth.ts`)
296
+ - Adicionada cópia de `src/features/auth|home|template` conforme seleções do usuário
297
+ - Cópia de pages corrigida de `src/app/pages/` `src/pages/`
298
+ - `AuthGuard.tsx` agora gerado dinamicamente com imports e rotas apenas das páginas selecionadas
299
+ - **`generateDemoResponse` exportado via `xertica-ui/assistant`** — estava ausente do barrel causando `SyntaxError: does not provide an export named 'generateDemoResponse'`
300
+ - **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)
301
+
302
+ ---
303
+
304
+ ## [2.0.0] — 2026-05-11
305
+
306
+ ### Added
307
+
308
+ - **Subpath exports** — The package now exposes 6 granular entry points alongside the full root barrel:
309
+ - `xertica-ui/ui`all UI primitives (Button, Card, Input, Table, Dialog, etc.)
310
+ - `xertica-ui/layout` Sidebar and Header
311
+ - `xertica-ui/brand` XerticaProvider, XerticaLogo, XerticaXLogo, XerticaOrbe, ThemeToggle, LanguageSelector
312
+ - `xertica-ui/assistant` XerticaAssistant, MarkdownMessage, CodeBlock, FormattedDocument, ModernChatInput
313
+ - `xertica-ui/media` VideoPlayer, AudioPlayer, FloatingMediaWrapper
314
+ - `xertica-ui/hooks`useLayout, useTheme, useLanguage, useBrandColors, useAssistente, useApiKey
315
+ - Root `from 'xertica-ui'` remains fully supported for backward compatibility.
316
+ - **`ImageWithFallback` added to `xertica-ui/ui`** — previously only in the root barrel; now accessible via the `/ui` subpath.
317
+ - **Multi-entry Vite build** — `vite.config.ts` now uses `lib.entry` as an object (7 entry points). Output filenames follow `[entryName].[format].js` pattern.
318
+ - **CLI template — FSD/FDA architecture** — The scaffolded template was restructured to follow Feature-Sliced Design + Feature-Driven Architecture:
319
+ - `src/app/` — BrowserRouter, XerticaProvider, AuthGuard (auth state + route definitions), AppLayout (Sidebar + children shell)
320
+ - `src/shared/` — `config/navigation.ts` (route registry), `lib/auth.ts` (localStorage helpers), `types/auth.ts` (User interface)
321
+ - `src/features/auth/ui/`LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent; with shared `AuthPageShell` and `SocialLoginButtons` DRY extractions
322
+ - `src/features/home/ui/` HomeContent
323
+ - `src/features/template/ui/`TemplateContent, FormTemplate
324
+ - `src/pages/` — thin page wrappers (LoginPage, HomePage, TemplatePage, ForgotPasswordPage, VerifyEmailPage, ResetPasswordPage)
325
+ - **`templates/guidelines/Guidelines.md`** — new architecture guide documenting FSD/FDA layers, layer responsibilities, and "Adding New Routes" step-by-step.
326
+
327
+ ### Changed
328
+
329
+ - **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.
330
+ - **`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.
331
+ - **`tsconfig.build.json`** — `include` array updated to cover all new barrel source directories (`components/**/*`, `contexts/**/*`, `hooks/**/*`).
332
+ - **Documentation** (`llms.txt`, `llms-full.txt`)Added subpath import reference table and FSD/FDA layer mapping.
333
+
334
+ ### Fixed
335
+
336
+ - **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.
337
+
338
+ ---
339
+
340
+ ## [1.10.0]2026-05-08
341
+
342
+ ### Added
343
+
344
+ - **Semantic Variants** Added `success`, `info`, and `warning` variants to components that lacked them:
345
+ - **Button** now supports 9 variants: `default`, `secondary`, `outline`, `ghost`, `destructive`, `link`, `success`, `info`, `warning`.
346
+ - **Progress** — new `variant` prop (`default`, `success`, `info`, `warning`, `destructive`) colors both the track and the indicator.
347
+ - **NotificationBadge** — added `secondary`, `outline`, `success`, `info`, `warning`; standardized `default` to primary color for consistency with Badge and Button.
348
+ - **TimelineDot** — added `info` and `outline` variants; replaced hardcoded `rgb()` values with semantic CSS tokens (`bg-success`, `bg-warning`).
349
+ - **DialogBody** — new sub-component for the Dialog. When used, `DialogHeader` and `DialogFooter` stay pinned while `DialogBody` scrolls independently. Exported from `xertica-ui`.
350
+ - **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.
351
+ - **Header `breadcrumbSlot`**new prop accepting any `ReactNode` rendered immediately after the breadcrumb/title area (badges, buttons, status chips, etc.).
352
+ - **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).
353
+
354
+ ### Fixed
355
+
356
+ - **Search double clear icon** — `type="search"` caused browsers to inject a native clear button on top of the custom × icon. Changed to `type="text"`.
357
+ - **CSS `@source` path** — CLI template `src/styles/index.css` had `../node_modules/xertica-ui` (one level short); corrected to `../../node_modules/xertica-ui/components`.
358
+ - **`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.
359
+
360
+ ### Changed
361
+
362
+ - **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.
363
+ - **LLM documentation** (`llms-full.txt`) — Updated Badge, Button, Dialog, Header, NotificationBadge, Progress, Search, Sidebar, and Timeline sections to reflect current APIs.
364
+
365
+ ---
366
+
367
+ ## [1.9.0] 2026-05-05
368
+
369
+ ### Added
370
+
371
+ - **Standardized Form Sizing System** — Implemented a unified `size` prop (`sm`, `md`, `lg`) across all form-related components for perfect visual alignment in grid layouts:
372
+ - **Text Components** `Input`, `SelectTrigger`, `Textarea`, `Search`, and `InputOTPSlot` now share consistent height/padding/font-size tokens.
373
+ - **Toggle Components** — `Checkbox`, `RadioGroupItem`, and `Switch` now feature dynamic sizing for both containers and internal indicators (check icon, dot, thumb).
374
+ - **Labels** — `Label` component now supports `size` to match the text size of the associated input.
375
+ - **Reference Guide** — Added `docs/form-sizing.md` as a comprehensive guide for the standardized sizing scale.
376
+ - **Assistant Individual Controls** — Added granular control props to `XerticaAssistant` to toggle specific features independently:
377
+ - `showHistory`, `showFavorites`, `allowAudioInput`, `allowFileUpload`, `allowDocCreation`, `allowPodcastGen`, `allowResearchGen`.
378
+ - **Header Breadcrumb Navigation** — Standardized `Header` to use breadcrumbs as the default navigation pattern:
379
+ - Added support for `react-router-dom` links in breadcrumbs to prevent page reloads.
380
+ - Configurable hierarchy levels and labels directly via props.
381
+
382
+ ### Changed
383
+
384
+ - **Form Component Architecture** — Migrated form elements from legacy tokens to standardized design system tokens (`bg-background`, `border-border`) for better theme consistency.
385
+ - **Documentation & Storybook** — Updated all 9 affected form components with new "Sizes" sections in Storybook (Stories + MDX) and enriched LLM-facing markdown documentation.
386
+ - **Unit Testing** — Updated test suites for `Checkbox`, `RadioGroup`, `Switch`, `InputOTP`, `Label`, `Search`, `Select`, and `Textarea` to verify sizing variant classes.
387
+
388
+ ### Fixed
389
+
390
+ - **Search Component** — Removed obsolete `loading` prop which was causing TypeScript errors and was redundant with the current design system patterns.
391
+ - **SelectTrigger Sizing** — Standardized `md` height to `h-10` (40px) to match the rest of the form system.
392
+
393
+ ---
394
+
395
+ ## [1.8.0]2026-04-27
396
+
397
+ ### Added
398
+
399
+ - **VideoPlayer UI Enhancements** — Added gradient overlay on controls for improved contrast against video content:
400
+ - Gradient: `from-black/60 via-black/30 to-transparent` with `pt-12` spacing
401
+ - White progress bar with `bg-white/30` track, `bg-white` fill, and `rounded-r-sm` on filled portion
402
+ - White icons with `drop-shadow-md` for visibility
403
+ - Buttons use `text-white hover:text-white hover:bg-black/50` for proper hover states
404
+ - **Slider Visual Fixes** — Improved progress bar alignment:
405
+ - Added left margin `ml-2` to track for thumb alignment
406
+ - Added `rounded-r-sm` to Range for filled portion
407
+ - Adjusted track/margins for proper visual alignment at full value
408
+
409
+ ### Changed
410
+
411
+ - **Documentation**Updated component counts across all docs:
412
+ - `llms.txt`: 75 97 components
413
+ - `llms-full.txt`: Added statistics table
414
+ - `docs/llms.md`: Added statistics section
415
+ - `Introduction.mdx`: Added "97 Components" badge
416
+ - **components.json** — 75 → 89 components (added missing Media, Assistant, Pages, and Map components)
417
+
418
+ ### Fixed
419
+
420
+ - **Slider Progress Bar** Fixed visual gap where thumb doesn't align with filled bar at end position by adjusting track margins
421
+
422
+ ---
423
+
424
+ ## [1.7.0] — 2026-04-23
425
+
426
+ ### Fixed
427
+
428
+ - **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.).
429
+ - **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.
430
+ - **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.
431
+
432
+ ### Added
433
+
434
+ - **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.
435
+ - **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.
436
+ - **Documentation** — `docs/getting-started.md` updated with CLI `update` command reference and a new "CSS Setup (Critical)" section explaining the `@theme inline` requirement.
437
+
438
+ ---
439
+
440
+ ## [1.6.0] — 2026-04-20
441
+
442
+ ### Added
443
+
444
+ - **`docs/llms.md`** — Master LLM/AI-agent entrypoint index with full component catalog, token quick reference, and reading order guide.
445
+ - **`docs/layout.md`** — Complete `LayoutContext` and `useLayout()` API reference.
446
+ - **`docs/components/route-map.md`** — New documentation for `RouteMap` component.
447
+ - **`docs/components/use-mobile.md`** New documentation for `useMobile` / `useIsMobile` hooks.
448
+ - **`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.
449
+ - **`Sidebar`** — New `width` prop (`expandedWidth: number`) for configuring the expanded sidebar pixel width. Width is now read and stored via `LayoutContext.sidebarWidth`.
450
+
451
+ ### Changed
452
+
453
+ - **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).
454
+ - **JSDoc** — All Portuguese JSDoc comments in `components/ui/` translated to English and enriched with accurate `@ai-rules`.
455
+ - **`README.md`** — Complete rewrite in English, restructured for npm page quality (quick start, install guide, component catalog, token reference, AI agent entrypoint, troubleshooting).
456
+ - **`package.json`**Version bumped to `1.6.0`. Description translated to English.
457
+
458
+ ### Fixed
459
+
460
+ - **`docs/components/page-header.md`** — Was documenting a wrong API (`title/description/actions`). Now correctly documents the real API: `breadcrumbs[]`, `showLanguageSelector`, `rightContent`, `PageHeaderHeading`, `PageHeaderDescription`.
461
+ - **`docs/components/stepper.md`** — Was documenting a `steps[]` array prop. Now correctly documents the composable `<Stepper currentStep> + <Step step label>` API (1-indexed).
462
+ - **`docs/components/empty.md`**Was documenting single-prop component. Now correctly documents the composable sub-component pattern: `Empty > EmptyIcon > EmptyTitle > EmptyDescription > EmptyAction`.
463
+ - **`docs/components/stats-card.md`** — `trend` was documented as a string. Now correctly documented as `{ value: number; label?: string }`.
464
+ - **`docs/components/chart.md`**Was documenting raw Recharts usage. Now correctly documents the `ChartContainer + ChartConfig + var(--color-*)` pattern.
465
+
466
+ ---
467
+
468
+ ## [1.5.2]2026-04-15
469
+
470
+ ### Fixed
471
+
472
+ - Resolved regression where modal components (Dialog/AlertDialog) failed to render in projects initialized via the CLI.
473
+ - Implemented robust CSS integration using Tailwind v4 theme mappings.
474
+ - Ensured Radix UI portals correctly inherit theme variables.
475
+
476
+ ---
477
+
478
+ ## [1.5.1] — 2026-04-14
479
+
480
+ ### Changed
481
+
482
+ - Sidebar: Added `assistente` variant with fixed areas, searchable navigation, and grouped navigation structures.
483
+ - Template page updated to demonstrate the assistant sidebar variant.
484
+
485
+ ---
486
+
487
+ ## [1.5.0] — 2026-04-13
488
+
489
+ ### Added
490
+
491
+ - `Sidebar` — `width` / `expandedWidth` prop for configurable expanded sidebar width.
492
+ - `LayoutContext` — `sidebarWidth` and `setSidebarWidth` for global sidebar width management.
493
+ - `Header` — User profile section with avatar, dropdown menu, settings button, and logout button.
494
+ - `StatsCard` — KPI metric card component.
495
+ - `Timeline` — Chronological event list with dot variants.
496
+ - `TreeView` — Hierarchical tree navigation.
497
+ - `Rating` — Star-based rating input.
498
+ - `FileUpload` — Drag-and-drop file input.
499
+ - `Search` — Pre-built search input with icon and clear button.
500
+ - `NotificationBadge` — Dot/count badge overlay.
501
+ - `RouteMap` — Google Maps route display and direction calculation.
502
+ - `Stepper` — Multi-step progress indicator.
503
+ - `Map` — Advanced Google Maps integration with markers, circles, polygons, and layers.
504
+ - `XerticaAssistant` — Embedded Gemini AI assistant panel.