xertica-ui 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +1 -1
  3. package/assets/xertica-logo.svg +37 -37
  4. package/assets/xertica-x-logo.svg +20 -20
  5. package/bin/cli.ts +1 -1
  6. package/bin/generate-tokens.ts +13 -7
  7. package/components/assistant/index.ts +6 -6
  8. package/components/assistant/xertica-assistant/index.ts +2 -0
  9. package/components/assistant/xertica-assistant/use-assistant.ts +564 -0
  10. package/components/assistant/xertica-assistant/xertica-assistant.stories.tsx +200 -0
  11. package/components/assistant/xertica-assistant/xertica-assistant.tsx +183 -474
  12. package/components/blocks/card-patterns/ActivityCard.tsx +72 -72
  13. package/components/blocks/card-patterns/FeatureCard.tsx +100 -100
  14. package/components/blocks/card-patterns/NotificationCard.tsx +127 -127
  15. package/components/blocks/card-patterns/ProfileCard.tsx +84 -84
  16. package/components/blocks/card-patterns/ProjectCard.tsx +89 -89
  17. package/components/blocks/card-patterns/QuickActionCard.tsx +62 -62
  18. package/components/blocks/card-patterns/card-patterns.stories.tsx +445 -445
  19. package/components/blocks/card-patterns/index.ts +17 -17
  20. package/components/blocks/index.ts +1 -1
  21. package/components/brand/index.ts +6 -6
  22. package/components/brand/xertica-provider/XerticaProvider.tsx +48 -48
  23. package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
  24. package/components/brand/xertica-provider/xertica-provider.test.tsx +52 -52
  25. package/components/examples/MapExamples.tsx +282 -282
  26. package/components/examples/SimpleFilterableMap.tsx +191 -191
  27. package/components/examples/index.ts +51 -51
  28. package/components/figma/ImageWithFallback.tsx +27 -27
  29. package/components/hooks/index.ts +7 -7
  30. package/components/index.ts +5 -5
  31. package/components/layout/header/header.test.tsx +8 -8
  32. package/components/layout/header/header.tsx +4 -4
  33. package/components/layout/index.ts +2 -2
  34. package/components/layout/sidebar/index.ts +2 -0
  35. package/components/layout/sidebar/sidebar.mdx +1 -1
  36. package/components/layout/sidebar/sidebar.stories.tsx +160 -8
  37. package/components/layout/sidebar/sidebar.test.tsx +11 -11
  38. package/components/layout/sidebar/sidebar.tsx +610 -471
  39. package/components/layout/sidebar/use-sidebar.ts +113 -0
  40. package/components/media/FloatingMediaWrapper.tsx +11 -11
  41. package/components/media/audio-player/AudioPlayer.tsx +22 -22
  42. package/components/media/index.ts +3 -3
  43. package/components/pages/home-content/HomeContent.tsx +7 -7
  44. package/components/pages/home-content/home-content.mdx +62 -62
  45. package/components/pages/home-page/HomePage.stories.tsx +39 -39
  46. package/components/pages/home-page/HomePage.tsx +1 -1
  47. package/components/pages/home-page/home-page.mdx +53 -53
  48. package/components/pages/index.ts +8 -8
  49. package/components/pages/template-content/TemplateContent.tsx +5 -5
  50. package/components/pages/template-content/template-content.mdx +61 -61
  51. package/components/pages/template-page/TemplatePage.stories.tsx +39 -39
  52. package/components/pages/template-page/TemplatePage.tsx +5 -5
  53. package/components/pages/template-page/template-page.mdx +53 -53
  54. package/components/public-api-smoke.test.tsx +52 -52
  55. package/components/shared/assistant-utils.ts +43 -43
  56. package/components/shared/layout-constants.ts +1 -1
  57. package/components/ui/accordion/accordion.mdx +8 -8
  58. package/components/ui/accordion/accordion.stories.tsx +53 -53
  59. package/components/ui/alert/alert.mdx +8 -8
  60. package/components/ui/alert-dialog/alert-dialog.mdx +8 -8
  61. package/components/ui/aspect-ratio/aspect-ratio.mdx +8 -8
  62. package/components/ui/assistant-chart/assistant-chart.mdx +8 -8
  63. package/components/ui/avatar/avatar.mdx +8 -8
  64. package/components/ui/badge/badge.mdx +8 -8
  65. package/components/ui/badge/badge.tsx +9 -9
  66. package/components/ui/breadcrumb/breadcrumb.mdx +8 -8
  67. package/components/ui/button/button.mdx +8 -8
  68. package/components/ui/calendar/calendar.mdx +8 -8
  69. package/components/ui/calendar/calendar.tsx +258 -258
  70. package/components/ui/card/card.mdx +8 -8
  71. package/components/ui/card/card.stories.tsx +245 -245
  72. package/components/ui/carousel/carousel.mdx +8 -8
  73. package/components/ui/chart/chart.mdx +8 -8
  74. package/components/ui/chart/chart.stories.tsx +1303 -344
  75. package/components/ui/chart/chart.test.tsx +154 -154
  76. package/components/ui/chart/chart.tsx +2367 -1494
  77. package/components/ui/checkbox/checkbox.mdx +8 -8
  78. package/components/ui/checkbox/checkbox.stories.tsx +20 -20
  79. package/components/ui/collapsible/collapsible.mdx +8 -8
  80. package/components/ui/command/command.mdx +8 -8
  81. package/components/ui/context-menu/context-menu.mdx +8 -8
  82. package/components/ui/dialog/dialog.mdx +8 -8
  83. package/components/ui/drawer/drawer.mdx +8 -8
  84. package/components/ui/dropdown-menu/dropdown-menu.mdx +8 -8
  85. package/components/ui/empty/empty.mdx +8 -8
  86. package/components/ui/file-upload/file-upload.mdx +8 -8
  87. package/components/ui/file-upload/file-upload.stories.tsx +100 -0
  88. package/components/ui/file-upload/file-upload.tsx +14 -74
  89. package/components/ui/file-upload/index.ts +1 -0
  90. package/components/ui/file-upload/use-file-upload.ts +181 -0
  91. package/components/ui/google-maps-loader/google-maps-loader.tsx +2 -2
  92. package/components/ui/hover-card/hover-card.mdx +8 -8
  93. package/components/ui/input/input.mdx +8 -8
  94. package/components/ui/input-otp/input-otp.mdx +8 -8
  95. package/components/ui/input-otp/input-otp.stories.tsx +6 -6
  96. package/components/ui/label/label.mdx +8 -8
  97. package/components/ui/map/map.mdx +8 -8
  98. package/components/ui/map/map.stories.tsx +51 -51
  99. package/components/ui/map/map.tsx +2 -2
  100. package/components/ui/menubar/menubar.mdx +8 -8
  101. package/components/ui/navigation-menu/navigation-menu.mdx +8 -8
  102. package/components/ui/notification-badge/notification-badge.mdx +8 -8
  103. package/components/ui/pagination/index.ts +2 -0
  104. package/components/ui/pagination/pagination.mdx +8 -8
  105. package/components/ui/pagination/pagination.stories.tsx +94 -0
  106. package/components/ui/pagination/use-pagination.ts +194 -0
  107. package/components/ui/popover/popover.mdx +8 -8
  108. package/components/ui/progress/progress.mdx +8 -8
  109. package/components/ui/progress/progress.tsx +68 -68
  110. package/components/ui/radio-group/radio-group.mdx +8 -8
  111. package/components/ui/rating/rating.mdx +8 -8
  112. package/components/ui/resizable/resizable.mdx +8 -8
  113. package/components/ui/rich-text-editor/index.ts +2 -0
  114. package/components/ui/rich-text-editor/rich-text-editor.stories.tsx +129 -1
  115. package/components/ui/rich-text-editor/rich-text-editor.tsx +86 -305
  116. package/components/ui/rich-text-editor/use-rich-text-editor.ts +439 -0
  117. package/components/ui/route-map/route-map.mdx +8 -8
  118. package/components/ui/route-map/route-map.stories.tsx +54 -54
  119. package/components/ui/route-map/route-map.tsx +2 -2
  120. package/components/ui/scroll-area/scroll-area.mdx +8 -8
  121. package/components/ui/search/search.mdx +8 -8
  122. package/components/ui/select/select.mdx +8 -8
  123. package/components/ui/select/select.stories.tsx +9 -9
  124. package/components/ui/separator/separator.mdx +8 -8
  125. package/components/ui/sheet/sheet.mdx +8 -8
  126. package/components/ui/sheet/sheet.stories.tsx +95 -95
  127. package/components/ui/simple-map/simple-map.mdx +8 -8
  128. package/components/ui/simple-map/simple-map.stories.tsx +48 -48
  129. package/components/ui/skeleton/skeleton.mdx +8 -8
  130. package/components/ui/slider/slider.mdx +8 -8
  131. package/components/ui/sonner/sonner.mdx +8 -8
  132. package/components/ui/stats-card/stats-card.mdx +8 -8
  133. package/components/ui/stepper/index.ts +3 -1
  134. package/components/ui/stepper/stepper.mdx +8 -8
  135. package/components/ui/stepper/stepper.stories.tsx +116 -0
  136. package/components/ui/stepper/stepper.tsx +4 -4
  137. package/components/ui/stepper/use-stepper.ts +137 -0
  138. package/components/ui/switch/switch.mdx +8 -8
  139. package/components/ui/switch/switch.stories.tsx +20 -20
  140. package/components/ui/table/table.mdx +8 -8
  141. package/components/ui/tabs/tabs.mdx +8 -8
  142. package/components/ui/tabs/tabs.stories.tsx +26 -26
  143. package/components/ui/textarea/textarea.mdx +8 -8
  144. package/components/ui/timeline/timeline.mdx +8 -8
  145. package/components/ui/toggle/toggle.mdx +8 -8
  146. package/components/ui/toggle-group/toggle-group.mdx +8 -8
  147. package/components/ui/tooltip/tooltip.mdx +8 -8
  148. package/components/ui/tree-view/index.ts +4 -1
  149. package/components/ui/tree-view/tree-view.mdx +8 -8
  150. package/components/ui/tree-view/tree-view.stories.tsx +110 -4
  151. package/components/ui/tree-view/tree-view.tsx +17 -125
  152. package/components/ui/tree-view/use-tree-view.ts +229 -0
  153. package/components.json +1512 -1512
  154. package/contexts/ApiKeyContext.tsx +72 -72
  155. package/contexts/BrandColorsContext.tsx +26 -26
  156. package/contexts/LanguageContext.tsx +13 -13
  157. package/contexts/LayoutContext.test.tsx +11 -11
  158. package/contexts/LayoutContext.tsx +29 -29
  159. package/contexts/ThemeContext.tsx +26 -26
  160. package/contexts/theme-data.ts +4 -4
  161. package/dist/{AssistantChart-CVzmmhx4.js → AssistantChart-C_hwFRRr.js} +4 -4
  162. package/dist/{AssistantChart-BAx9VQvb.cjs → AssistantChart-CldVCVDe.cjs} +311 -94
  163. package/dist/{AssistantChart-CVko2A1W.js → AssistantChart-Cu3m7RBo.js} +314 -97
  164. package/dist/{AssistantChart-9w31gdAb.cjs → AssistantChart-DoZCyS5r.cjs} +4 -4
  165. package/dist/AudioPlayer-B1lt5cPl.cjs +989 -0
  166. package/dist/AudioPlayer-BZ7bibzU.cjs +982 -0
  167. package/dist/AudioPlayer-C12BjQBV.cjs +997 -0
  168. package/dist/AudioPlayer-DMcG_c7L.js +990 -0
  169. package/dist/AudioPlayer-DcFKRJE_.js +998 -0
  170. package/dist/AudioPlayer-e8LfNoqO.js +983 -0
  171. package/dist/{xertica-assistant-Qp3ydksa.cjs → CodeBlock-7TTgmdGG.cjs} +263 -51
  172. package/dist/{xertica-assistant-gnCJdcZY.js → CodeBlock-BeSt1h5P.js} +219 -7
  173. package/dist/CodeBlock-BgfYL_rD.cjs +2094 -0
  174. package/dist/CodeBlock-BlcqlA9M.cjs +2094 -0
  175. package/dist/CodeBlock-Bnmeu5ez.cjs +2094 -0
  176. package/dist/CodeBlock-BtfPlbAI.js +2078 -0
  177. package/dist/CodeBlock-CIySIuYr.js +2078 -0
  178. package/dist/CodeBlock-CuPtUM-7.cjs +2094 -0
  179. package/dist/CodeBlock-D6ffWXgc.js +2078 -0
  180. package/dist/CodeBlock-D8dcwbit.cjs +2094 -0
  181. package/dist/CodeBlock-DMZrFnlw.cjs +2094 -0
  182. package/dist/CodeBlock-DlBehYN8.js +2078 -0
  183. package/dist/CodeBlock-DnYNI8rQ.js +2078 -0
  184. package/dist/CodeBlock-DvKWbSnE.cjs +2094 -0
  185. package/dist/CodeBlock-DwMCfkFY.js +2078 -0
  186. package/dist/CodeBlock-Dy6CNYyj.js +2078 -0
  187. package/dist/CodeBlock-U1pPOQI7.cjs +2094 -0
  188. package/dist/CodeBlock-f_GpNhEB.js +2078 -0
  189. package/dist/CodeBlock-oB6u8nI1.js +2078 -0
  190. package/dist/CodeBlock-tZC31B73.cjs +2094 -0
  191. package/dist/ImageWithFallback-CGtidP6B.cjs +4542 -0
  192. package/dist/ImageWithFallback-lsg3pdFg.js +4508 -0
  193. package/dist/LanguageSelector-B5YfbHra.js +231 -0
  194. package/dist/LanguageSelector-D6uacAIM.cjs +230 -0
  195. package/dist/LayoutContext-BAql6ZRY.js +97 -0
  196. package/dist/LayoutContext-BvK-ggDa.cjs +96 -0
  197. package/dist/ThemeContext-BoH4NLfN.js +734 -0
  198. package/dist/{ThemeContext-BbBNoFTG.js → ThemeContext-C2EwAPDt.js} +2 -2
  199. package/dist/ThemeContext-r69W20Xg.cjs +733 -0
  200. package/dist/{ThemeContext-Cmr8Ex8H.cjs → ThemeContext-vTjumZeM.cjs} +2 -2
  201. package/dist/{VerifyEmailPage-BE-L9mB7.js → VerifyEmailPage-C0c2e5n0.js} +7 -7
  202. package/dist/{VerifyEmailPage-DMBh4NM9.cjs → VerifyEmailPage-CYXtbKi3.cjs} +1 -1
  203. package/dist/{VerifyEmailPage-CR7kb5df.cjs → VerifyEmailPage-Cwi3kbol.cjs} +7 -7
  204. package/dist/{VerifyEmailPage-CdYPSJoO.js → VerifyEmailPage-DvMLZgFt.js} +1 -1
  205. package/dist/XerticaOrbe-KL1RBHzw.cjs +1354 -0
  206. package/dist/XerticaOrbe-zwS1p2a8.js +1355 -0
  207. package/dist/XerticaProvider-6btlAlzc.js +17 -0
  208. package/dist/XerticaProvider-BNoNOxQ5.cjs +16 -0
  209. package/dist/XerticaProvider-BlY2limY.cjs +38 -0
  210. package/dist/{XerticaProvider-BITjgC5p.js → XerticaProvider-CEoWMTxu.js} +2 -2
  211. package/dist/{XerticaProvider-By8q3Roe.cjs → XerticaProvider-CllrbMEJ.cjs} +2 -2
  212. package/dist/XerticaProvider-DDuiIcKo.js +39 -0
  213. package/dist/XerticaProvider-cI9hSs27.cjs +38 -0
  214. package/dist/XerticaProvider-hSwhNQex.js +39 -0
  215. package/dist/{alert-dialog-yckpaOpy.cjs → alert-dialog-DSKByiKZ.cjs} +3 -3
  216. package/dist/{alert-dialog-iDe5VE5o.js → alert-dialog-s-vmNkJ_.js} +3 -3
  217. package/dist/assistant.cjs.js +2 -1
  218. package/dist/assistant.es.js +3 -2
  219. package/dist/brand.cjs.js +1 -1
  220. package/dist/brand.es.js +1 -1
  221. package/dist/breadcrumb-CqJ7bHY5.js +161 -0
  222. package/dist/breadcrumb-m9Hb2_XN.cjs +177 -0
  223. package/dist/cli.js +14 -8
  224. package/dist/components/assistant/xertica-assistant/index.d.ts +2 -0
  225. package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +126 -0
  226. package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +7 -2
  227. package/dist/components/blocks/audio-player/AudioPlayer.d.ts +35 -0
  228. package/dist/components/blocks/audio-player/index.d.ts +1 -0
  229. package/dist/components/blocks/document-editor/DocumentEditor.d.ts +26 -0
  230. package/dist/components/blocks/document-editor/index.d.ts +1 -0
  231. package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +41 -0
  232. package/dist/components/blocks/podcast-player/index.d.ts +1 -0
  233. package/dist/components/layout/sidebar/index.d.ts +2 -0
  234. package/dist/components/layout/sidebar/sidebar.d.ts +80 -0
  235. package/dist/components/layout/sidebar/use-sidebar.d.ts +22 -0
  236. package/dist/components/shared/layout-constants.d.ts +1 -1
  237. package/dist/components/ui/button/button.d.ts +1 -1
  238. package/dist/components/ui/chart/chart.d.ts +162 -5
  239. package/dist/components/ui/file-upload/file-upload.d.ts +2 -0
  240. package/dist/components/ui/file-upload/index.d.ts +1 -0
  241. package/dist/components/ui/file-upload/use-file-upload.d.ts +49 -0
  242. package/dist/components/ui/pagination/index.d.ts +2 -0
  243. package/dist/components/ui/pagination/use-pagination.d.ts +78 -0
  244. package/dist/components/ui/rich-text-editor/index.d.ts +2 -0
  245. package/dist/components/ui/rich-text-editor/use-rich-text-editor.d.ts +107 -0
  246. package/dist/components/ui/stepper/index.d.ts +3 -1
  247. package/dist/components/ui/stepper/stepper.d.ts +2 -2
  248. package/dist/components/ui/stepper/use-stepper.d.ts +60 -0
  249. package/dist/components/ui/tree-view/index.d.ts +4 -1
  250. package/dist/components/ui/tree-view/tree-view.d.ts +4 -6
  251. package/dist/components/ui/tree-view/use-tree-view.d.ts +60 -0
  252. package/dist/dropdown-menu-BDB5CmQs.cjs +247 -0
  253. package/dist/dropdown-menu-DQidbKBD.js +231 -0
  254. package/dist/google-maps-loader-BFWp6VPd.js +287 -0
  255. package/dist/{google-maps-loader-t2IlYBzw.js → google-maps-loader-CTYySAun.js} +4 -0
  256. package/dist/{google-maps-loader-BqsYL48U.cjs → google-maps-loader-Y-QkD-Li.cjs} +5 -0
  257. package/dist/google-maps-loader-eS3uQ5TA.cjs +287 -0
  258. package/dist/header-Cgy6vYPk.cjs +731 -0
  259. package/dist/header-DRlT4jgI.js +715 -0
  260. package/dist/header-Dux00SI4.cjs +731 -0
  261. package/dist/header-EkGKXPsD.js +715 -0
  262. package/dist/header-WfEywpyc.cjs +731 -0
  263. package/dist/header-tifNQn2U.js +715 -0
  264. package/dist/hooks.cjs.js +1 -1
  265. package/dist/hooks.es.js +1 -1
  266. package/dist/index-BhapVLVj.js +8 -0
  267. package/dist/{index-D3RLKRAs.cjs → index-COtD8bRW.cjs} +1 -1
  268. package/dist/index-D6fxYEY8.cjs +7 -0
  269. package/dist/index-DW5tYe26.js +8 -0
  270. package/dist/index.cjs.js +19 -8
  271. package/dist/index.es.js +39 -28
  272. package/dist/index.umd.js +1043 -470
  273. package/dist/input-2R4loU86.js +127 -0
  274. package/dist/input-DWANSKGb.cjs +145 -0
  275. package/dist/layout.cjs.js +89 -1
  276. package/dist/layout.es.js +90 -2
  277. package/dist/pages.cjs.js +1 -1
  278. package/dist/pages.es.js +1 -1
  279. package/dist/rich-text-editor-0mraWT5y.cjs +2376 -0
  280. package/dist/rich-text-editor-B6jMRLzk.cjs +1939 -0
  281. package/dist/rich-text-editor-B8_oYcIR.js +1730 -0
  282. package/dist/rich-text-editor-B9UbSXNb.js +1203 -0
  283. package/dist/rich-text-editor-BYuRBNBU.js +2373 -0
  284. package/dist/rich-text-editor-Bb9pySTs.cjs +2374 -0
  285. package/dist/rich-text-editor-BcL6L3cm.cjs +2374 -0
  286. package/dist/rich-text-editor-BoVZYtTs.cjs +2391 -0
  287. package/dist/rich-text-editor-CPV1lEPH.cjs +1748 -0
  288. package/dist/rich-text-editor-CoKqbCtu.cjs +1799 -0
  289. package/dist/rich-text-editor-Cw56T_mB.js +2356 -0
  290. package/dist/rich-text-editor-Cyt8qs2b.js +1921 -0
  291. package/dist/rich-text-editor-D6H84OcX.cjs +1220 -0
  292. package/dist/rich-text-editor-D76gD-QI.js +2328 -0
  293. package/dist/rich-text-editor-DKkokOnA.js +1781 -0
  294. package/dist/rich-text-editor-DNsdpN64.cjs +2359 -0
  295. package/dist/rich-text-editor-DfG8bCyY.js +2358 -0
  296. package/dist/rich-text-editor-DgF8s7xW.js +2949 -0
  297. package/dist/rich-text-editor-Dxjw31Z4.js +2341 -0
  298. package/dist/rich-text-editor-DzP0Epmb.js +2356 -0
  299. package/dist/rich-text-editor-mWoaSCE4.cjs +2966 -0
  300. package/dist/rich-text-editor-skplNlBM.cjs +2345 -0
  301. package/dist/select-Bkbr0f-Z.cjs +162 -0
  302. package/dist/select-CvIVdX2n.js +145 -0
  303. package/dist/sidebar-CK_0ZQHj.cjs +803 -0
  304. package/dist/sidebar-CUuOvYhK.js +787 -0
  305. package/dist/slider-Bc5Hd0y1.js +56 -0
  306. package/dist/slider-N7hFFj6X.cjs +73 -0
  307. package/dist/tooltip-Ded96neP.cjs +137 -0
  308. package/dist/tooltip-HDOoD2-0.js +120 -0
  309. package/dist/ui.cjs.js +14 -4
  310. package/dist/ui.es.js +26 -16
  311. package/dist/use-mobile-B0hNy_Y6.cjs +4303 -0
  312. package/dist/use-mobile-BXuYROXM.js +4202 -0
  313. package/dist/use-mobile-Bbd51ASU.cjs +4392 -0
  314. package/dist/use-mobile-Bk6CX-TC.js +4359 -0
  315. package/dist/use-mobile-BvYdisLP.js +4202 -0
  316. package/dist/use-mobile-BzuxjzNX.cjs +4392 -0
  317. package/dist/use-mobile-CG2-SdXV.cjs +4235 -0
  318. package/dist/use-mobile-CKb5pqTs.js +4269 -0
  319. package/dist/use-mobile-CYuAuGDl.js +4202 -0
  320. package/dist/use-mobile-CaENcqm-.js +4508 -0
  321. package/dist/use-mobile-CbrYgJGJ.js +4203 -0
  322. package/dist/use-mobile-DMOvImGQ.cjs +4542 -0
  323. package/dist/use-mobile-DRB3BQgD.cjs +4235 -0
  324. package/dist/use-mobile-DZvv7QMR.js +4359 -0
  325. package/dist/use-mobile-DdI_TXam.cjs +4235 -0
  326. package/dist/use-mobile-DlceKf8a.js +4359 -0
  327. package/dist/use-mobile-DsOnow1o.cjs +4236 -0
  328. package/dist/use-mobile-Kcj6jSnK.cjs +4392 -0
  329. package/dist/use-mobile-bnKcua_i.js +4202 -0
  330. package/dist/use-mobile-ncXBeE2z.cjs +4235 -0
  331. package/dist/{xertica-assistant-B1IaHXnB.cjs → xertica-assistant-dyP7KHM5.cjs} +533 -392
  332. package/dist/{xertica-assistant-DPsESB6t.js → xertica-assistant-yX1CFBBo.js} +535 -394
  333. package/dist/xertica-ui.css +2 -2
  334. package/docs/ai-usage.md +28 -10
  335. package/docs/architecture.md +76 -0
  336. package/docs/components/assistant.md +159 -0
  337. package/docs/components/calendar.md +154 -154
  338. package/docs/components/card-patterns.md +337 -337
  339. package/docs/components/card.md +235 -235
  340. package/docs/components/chart.md +354 -39
  341. package/docs/components/file-upload.md +119 -2
  342. package/docs/components/map.md +84 -84
  343. package/docs/components/pagination.md +187 -0
  344. package/docs/components/rich-text-editor.md +164 -0
  345. package/docs/components/sidebar.md +153 -4
  346. package/docs/components/stepper.md +157 -12
  347. package/docs/components/tree-view.md +164 -6
  348. package/docs/components/xertica-provider.md +24 -24
  349. package/docs/decision-tree.md +287 -287
  350. package/docs/getting-started.md +1 -1
  351. package/docs/guidelines.md +14 -8
  352. package/docs/layout.md +2 -2
  353. package/docs/llms.md +4 -4
  354. package/guidelines/Guidelines.md +252 -250
  355. package/hooks/useTheme.ts +3 -3
  356. package/imports/Podcast.tsx +388 -388
  357. package/imports/XerticaAi.tsx +45 -45
  358. package/imports/XerticaX.tsx +19 -19
  359. package/imports/svg-aueiaqngck.ts +11 -11
  360. package/imports/svg-v9krss1ozd.ts +16 -16
  361. package/imports/svg-vhrdofe3qe.ts +5 -5
  362. package/llms-compact.txt +327 -327
  363. package/llms.txt +160 -160
  364. package/package.json +203 -203
  365. package/styles/xertica/app-overrides/chat.css +61 -61
  366. package/styles/xertica/app-overrides/scrollbar.css +33 -33
  367. package/styles/xertica/integrations/google-maps.css +76 -76
  368. package/styles/xertica/integrations/sonner.css +73 -73
  369. package/styles/xertica/tokens.css +41 -12
  370. package/templates/CLAUDE.md +182 -172
  371. package/templates/guidelines/Guidelines.md +325 -313
  372. package/templates/package.json +3 -3
  373. package/templates/src/features/auth/index.ts +4 -4
  374. package/templates/src/features/auth/ui/AuthPageShell.tsx +34 -34
  375. package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -70
  376. package/templates/src/features/auth/ui/LoginContent.tsx +90 -90
  377. package/templates/src/features/auth/ui/ResetPasswordContent.tsx +151 -151
  378. package/templates/src/features/auth/ui/SocialLoginButtons.tsx +59 -59
  379. package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -82
  380. package/templates/src/features/home/index.ts +1 -1
  381. package/templates/src/features/home/ui/HomeContent.tsx +100 -100
  382. package/templates/src/features/template/index.ts +5 -5
  383. package/templates/src/features/template/ui/CrudTemplate.tsx +3 -3
  384. package/templates/src/features/template/ui/DashboardTemplate.tsx +3 -3
  385. package/templates/src/features/template/ui/FormTemplate.tsx +120 -120
  386. package/templates/src/features/template/ui/LoginTemplate.tsx +3 -3
  387. package/templates/src/pages/AssistantPage.tsx +328 -328
  388. package/templates/src/pages/ForgotPasswordPage.tsx +6 -6
  389. package/templates/src/pages/HomePage.tsx +57 -57
  390. package/templates/src/pages/LoginPage.tsx +10 -10
  391. package/templates/src/pages/ResetPasswordPage.tsx +6 -6
  392. package/templates/src/pages/TemplatePage.tsx +30 -30
  393. package/templates/src/pages/VerifyEmailPage.tsx +6 -6
  394. package/templates/src/shared/config/navigation.ts +20 -20
  395. package/templates/src/shared/lib/auth.ts +20 -20
  396. package/templates/src/shared/types/auth.ts +3 -3
  397. package/templates/src/styles/xertica/tokens.css +39 -10
  398. package/templates/tsconfig.json +5 -5
  399. package/utils/gemini.ts +140 -140
  400. package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
  401. package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
  402. package/dist/index-CkTUgOwX.js +0 -8
@@ -1,151 +1,151 @@
1
- import React, { useState } from 'react';
2
- import { Button, Input, Label } from 'xertica-ui/ui';
3
- import { XerticaLogo } from 'xertica-ui/brand';
4
- import { ArrowLeft, CheckCircle2, AlertCircle } from 'lucide-react';
5
- import { useNavigate } from 'react-router-dom';
6
- import { AuthPageShell } from './AuthPageShell';
7
-
8
- export function ResetPasswordContent() {
9
- const navigate = useNavigate();
10
- const [password, setPassword] = useState('');
11
- const [confirmPassword, setConfirmPassword] = useState('');
12
- const [isLoading, setIsLoading] = useState(false);
13
- const [error, setError] = useState('');
14
- const [passwordStrength, setPasswordStrength] = useState<'weak' | 'medium' | 'strong' | null>(null);
15
-
16
- const checkPasswordStrength = (pwd: string) => {
17
- if (pwd.length === 0) { setPasswordStrength(null); return; }
18
- if (pwd.length < 6) setPasswordStrength('weak');
19
- else if (pwd.length < 10) setPasswordStrength('medium');
20
- else setPasswordStrength('strong');
21
- };
22
-
23
- const handlePasswordChange = (value: string) => {
24
- setPassword(value);
25
- checkPasswordStrength(value);
26
- setError('');
27
- };
28
-
29
- const handleSubmit = async (e: React.FormEvent) => {
30
- e.preventDefault();
31
- setError('');
32
- if (password.length < 6) { setError('A senha deve ter no mínimo 6 caracteres'); return; }
33
- if (password !== confirmPassword) { setError('As senhas não coincidem'); return; }
34
- setIsLoading(true);
35
- await new Promise(resolve => setTimeout(resolve, 1500));
36
- navigate('/login', { state: { resetSuccess: true } });
37
- setIsLoading(false);
38
- };
39
-
40
- const getStrengthColor = () => {
41
- switch (passwordStrength) {
42
- case 'weak': return 'text-destructive';
43
- case 'medium': return 'text-[var(--chart-3)]';
44
- case 'strong': return 'text-[var(--chart-2)]';
45
- default: return 'text-muted-foreground';
46
- }
47
- };
48
-
49
- const getStrengthText = () => {
50
- switch (passwordStrength) {
51
- case 'weak': return 'Senha fraca';
52
- case 'medium': return 'Senha média';
53
- case 'strong': return 'Senha forte';
54
- default: return '';
55
- }
56
- };
57
-
58
- return (
59
- <AuthPageShell
60
- imageSrc="https://images.unsplash.com/photo-1555949963-aa79dcee981c?w=1200&h=800&fit=crop&auto=format"
61
- imageAlt="Segurança e proteção"
62
- >
63
- <button
64
- onClick={() => navigate('/login')}
65
- className="flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors"
66
- >
67
- <ArrowLeft className="w-4 h-4" />
68
- <span className="text-small">Voltar para login</span>
69
- </button>
70
-
71
- <div className="text-center">
72
- <div className="flex items-center justify-center mb-4">
73
- <XerticaLogo className="h-12 w-auto text-primary dark:text-foreground" variant="theme" />
74
- </div>
75
- <h2 className="text-sm text-muted-foreground">Redefinir senha</h2>
76
- <p className="mt-2 text-muted-foreground">Crie uma nova senha segura para sua conta</p>
77
- </div>
78
-
79
- <form className="space-y-6" onSubmit={handleSubmit}>
80
- <div className="space-y-2">
81
- <Label htmlFor="password">Nova senha</Label>
82
- <Input
83
- id="password"
84
- name="password"
85
- type="password"
86
- required
87
- className="w-full"
88
- placeholder="••••••••"
89
- value={password}
90
- onChange={e => handlePasswordChange(e.target.value)}
91
- />
92
- {passwordStrength && (
93
- <div className="flex items-center gap-2">
94
- <div className="flex-1 h-1 bg-muted rounded-full overflow-hidden">
95
- <div
96
- className={`h-full transition-all duration-300 ${
97
- passwordStrength === 'weak'
98
- ? 'w-1/3 bg-destructive'
99
- : passwordStrength === 'medium'
100
- ? 'w-2/3 bg-[var(--chart-3)]'
101
- : 'w-full bg-[var(--chart-2)]'
102
- }`}
103
- />
104
- </div>
105
- <span className={`text-small ${getStrengthColor()}`}>{getStrengthText()}</span>
106
- </div>
107
- )}
108
- </div>
109
-
110
- <div className="space-y-2">
111
- <Label htmlFor="confirmPassword">Confirmar senha</Label>
112
- <Input
113
- id="confirmPassword"
114
- name="confirmPassword"
115
- type="password"
116
- required
117
- className="w-full"
118
- placeholder="••••••••"
119
- value={confirmPassword}
120
- onChange={e => { setConfirmPassword(e.target.value); setError(''); }}
121
- />
122
- </div>
123
-
124
- <div className="bg-accent rounded-[var(--radius)] p-4 space-y-2">
125
- <p className="text-sm">Requisitos da senha:</p>
126
- <div className="space-y-1">
127
- <div className="flex items-center gap-2">
128
- <CheckCircle2 className={`w-4 h-4 ${password.length >= 6 ? 'text-[var(--chart-2)]' : 'text-muted-foreground'}`} />
129
- <span className="text-sm text-muted-foreground">Mínimo de 6 caracteres</span>
130
- </div>
131
- <div className="flex items-center gap-2">
132
- <CheckCircle2 className={`w-4 h-4 ${password === confirmPassword && password.length > 0 ? 'text-[var(--chart-2)]' : 'text-muted-foreground'}`} />
133
- <span className="text-sm text-muted-foreground">Senhas coincidem</span>
134
- </div>
135
- </div>
136
- </div>
137
-
138
- {error && (
139
- <div className="flex items-center gap-2 text-destructive bg-destructive/10 rounded-[var(--radius)] p-3">
140
- <AlertCircle className="w-4 h-4 flex-shrink-0" />
141
- <span className="text-sm">{error}</span>
142
- </div>
143
- )}
144
-
145
- <Button type="submit" className="w-full" disabled={isLoading}>
146
- {isLoading ? 'Redefinindo...' : 'Redefinir senha'}
147
- </Button>
148
- </form>
149
- </AuthPageShell>
150
- );
151
- }
1
+ import React, { useState } from 'react';
2
+ import { Button, Input, Label } from 'xertica-ui/ui';
3
+ import { XerticaLogo } from 'xertica-ui/brand';
4
+ import { ArrowLeft, CheckCircle2, AlertCircle } from 'lucide-react';
5
+ import { useNavigate } from 'react-router-dom';
6
+ import { AuthPageShell } from './AuthPageShell';
7
+
8
+ export function ResetPasswordContent() {
9
+ const navigate = useNavigate();
10
+ const [password, setPassword] = useState('');
11
+ const [confirmPassword, setConfirmPassword] = useState('');
12
+ const [isLoading, setIsLoading] = useState(false);
13
+ const [error, setError] = useState('');
14
+ const [passwordStrength, setPasswordStrength] = useState<'weak' | 'medium' | 'strong' | null>(null);
15
+
16
+ const checkPasswordStrength = (pwd: string) => {
17
+ if (pwd.length === 0) { setPasswordStrength(null); return; }
18
+ if (pwd.length < 6) setPasswordStrength('weak');
19
+ else if (pwd.length < 10) setPasswordStrength('medium');
20
+ else setPasswordStrength('strong');
21
+ };
22
+
23
+ const handlePasswordChange = (value: string) => {
24
+ setPassword(value);
25
+ checkPasswordStrength(value);
26
+ setError('');
27
+ };
28
+
29
+ const handleSubmit = async (e: React.FormEvent) => {
30
+ e.preventDefault();
31
+ setError('');
32
+ if (password.length < 6) { setError('A senha deve ter no mínimo 6 caracteres'); return; }
33
+ if (password !== confirmPassword) { setError('As senhas não coincidem'); return; }
34
+ setIsLoading(true);
35
+ await new Promise(resolve => setTimeout(resolve, 1500));
36
+ navigate('/login', { state: { resetSuccess: true } });
37
+ setIsLoading(false);
38
+ };
39
+
40
+ const getStrengthColor = () => {
41
+ switch (passwordStrength) {
42
+ case 'weak': return 'text-destructive';
43
+ case 'medium': return 'text-[var(--chart-3)]';
44
+ case 'strong': return 'text-[var(--chart-2)]';
45
+ default: return 'text-muted-foreground';
46
+ }
47
+ };
48
+
49
+ const getStrengthText = () => {
50
+ switch (passwordStrength) {
51
+ case 'weak': return 'Senha fraca';
52
+ case 'medium': return 'Senha média';
53
+ case 'strong': return 'Senha forte';
54
+ default: return '';
55
+ }
56
+ };
57
+
58
+ return (
59
+ <AuthPageShell
60
+ imageSrc="https://images.unsplash.com/photo-1555949963-aa79dcee981c?w=1200&h=800&fit=crop&auto=format"
61
+ imageAlt="Segurança e proteção"
62
+ >
63
+ <button
64
+ onClick={() => navigate('/login')}
65
+ className="flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors"
66
+ >
67
+ <ArrowLeft className="w-4 h-4" />
68
+ <span className="text-small">Voltar para login</span>
69
+ </button>
70
+
71
+ <div className="text-center">
72
+ <div className="flex items-center justify-center mb-4">
73
+ <XerticaLogo className="h-12 w-auto text-primary dark:text-foreground" variant="theme" />
74
+ </div>
75
+ <h2 className="text-sm text-muted-foreground">Redefinir senha</h2>
76
+ <p className="mt-2 text-muted-foreground">Crie uma nova senha segura para sua conta</p>
77
+ </div>
78
+
79
+ <form className="space-y-6" onSubmit={handleSubmit}>
80
+ <div className="space-y-2">
81
+ <Label htmlFor="password">Nova senha</Label>
82
+ <Input
83
+ id="password"
84
+ name="password"
85
+ type="password"
86
+ required
87
+ className="w-full"
88
+ placeholder="••••••••"
89
+ value={password}
90
+ onChange={e => handlePasswordChange(e.target.value)}
91
+ />
92
+ {passwordStrength && (
93
+ <div className="flex items-center gap-2">
94
+ <div className="flex-1 h-1 bg-muted rounded-full overflow-hidden">
95
+ <div
96
+ className={`h-full transition-all duration-300 ${
97
+ passwordStrength === 'weak'
98
+ ? 'w-1/3 bg-destructive'
99
+ : passwordStrength === 'medium'
100
+ ? 'w-2/3 bg-[var(--chart-3)]'
101
+ : 'w-full bg-[var(--chart-2)]'
102
+ }`}
103
+ />
104
+ </div>
105
+ <span className={`text-small ${getStrengthColor()}`}>{getStrengthText()}</span>
106
+ </div>
107
+ )}
108
+ </div>
109
+
110
+ <div className="space-y-2">
111
+ <Label htmlFor="confirmPassword">Confirmar senha</Label>
112
+ <Input
113
+ id="confirmPassword"
114
+ name="confirmPassword"
115
+ type="password"
116
+ required
117
+ className="w-full"
118
+ placeholder="••••••••"
119
+ value={confirmPassword}
120
+ onChange={e => { setConfirmPassword(e.target.value); setError(''); }}
121
+ />
122
+ </div>
123
+
124
+ <div className="bg-accent rounded-[var(--radius)] p-4 space-y-2">
125
+ <p className="text-sm">Requisitos da senha:</p>
126
+ <div className="space-y-1">
127
+ <div className="flex items-center gap-2">
128
+ <CheckCircle2 className={`w-4 h-4 ${password.length >= 6 ? 'text-[var(--chart-2)]' : 'text-muted-foreground'}`} />
129
+ <span className="text-sm text-muted-foreground">Mínimo de 6 caracteres</span>
130
+ </div>
131
+ <div className="flex items-center gap-2">
132
+ <CheckCircle2 className={`w-4 h-4 ${password === confirmPassword && password.length > 0 ? 'text-[var(--chart-2)]' : 'text-muted-foreground'}`} />
133
+ <span className="text-sm text-muted-foreground">Senhas coincidem</span>
134
+ </div>
135
+ </div>
136
+ </div>
137
+
138
+ {error && (
139
+ <div className="flex items-center gap-2 text-destructive bg-destructive/10 rounded-[var(--radius)] p-3">
140
+ <AlertCircle className="w-4 h-4 flex-shrink-0" />
141
+ <span className="text-sm">{error}</span>
142
+ </div>
143
+ )}
144
+
145
+ <Button type="submit" className="w-full" disabled={isLoading}>
146
+ {isLoading ? 'Redefinindo...' : 'Redefinir senha'}
147
+ </Button>
148
+ </form>
149
+ </AuthPageShell>
150
+ );
151
+ }
@@ -1,59 +1,59 @@
1
- import React from 'react';
2
- import { Button } from 'xertica-ui/ui';
3
- import { Lock } from 'lucide-react';
4
-
5
- interface SocialLoginButtonsProps {
6
- onSocialLogin: (provider: string) => void;
7
- }
8
-
9
- export function SocialLoginButtons({ onSocialLogin }: SocialLoginButtonsProps) {
10
- return (
11
- <>
12
- <div className="relative">
13
- <div className="absolute inset-0 flex items-center">
14
- <div className="w-full border-t border-border" />
15
- </div>
16
- <div className="relative flex justify-center text-sm">
17
- <span className="bg-muted px-2 text-muted-foreground">ou continuar com</span>
18
- </div>
19
- </div>
20
-
21
- <div className="space-y-3">
22
- <Button
23
- type="button"
24
- variant="outline"
25
- className="w-full justify-center"
26
- onClick={() => onSocialLogin('Google')}
27
- >
28
- <svg className="w-5 h-5 mr-2" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
29
- <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z" />
30
- <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z" />
31
- <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z" />
32
- <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z" />
33
- <path fill="none" d="M0 0h48v48H0z" />
34
- </svg>
35
- <span>Entrar com Google</span>
36
- </Button>
37
-
38
- <Button
39
- type="button"
40
- variant="outline"
41
- className="w-full justify-center"
42
- onClick={() => onSocialLogin('MT Login')}
43
- >
44
- <Lock className="w-5 h-5 mr-2 text-[var(--chart-4)]" />
45
- <span>Entrar com MT Login</span>
46
- </Button>
47
-
48
- <Button
49
- type="button"
50
- variant="outline"
51
- className="w-full justify-center font-normal"
52
- onClick={() => onSocialLogin('gov.br')}
53
- >
54
- <span>Entrar com <strong className="font-semibold">gov.br</strong></span>
55
- </Button>
56
- </div>
57
- </>
58
- );
59
- }
1
+ import React from 'react';
2
+ import { Button } from 'xertica-ui/ui';
3
+ import { Lock } from 'lucide-react';
4
+
5
+ interface SocialLoginButtonsProps {
6
+ onSocialLogin: (provider: string) => void;
7
+ }
8
+
9
+ export function SocialLoginButtons({ onSocialLogin }: SocialLoginButtonsProps) {
10
+ return (
11
+ <>
12
+ <div className="relative">
13
+ <div className="absolute inset-0 flex items-center">
14
+ <div className="w-full border-t border-border" />
15
+ </div>
16
+ <div className="relative flex justify-center text-sm">
17
+ <span className="bg-muted px-2 text-muted-foreground">ou continuar com</span>
18
+ </div>
19
+ </div>
20
+
21
+ <div className="space-y-3">
22
+ <Button
23
+ type="button"
24
+ variant="outline"
25
+ className="w-full justify-center"
26
+ onClick={() => onSocialLogin('Google')}
27
+ >
28
+ <svg className="w-5 h-5 mr-2" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
29
+ <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z" />
30
+ <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z" />
31
+ <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z" />
32
+ <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z" />
33
+ <path fill="none" d="M0 0h48v48H0z" />
34
+ </svg>
35
+ <span>Entrar com Google</span>
36
+ </Button>
37
+
38
+ <Button
39
+ type="button"
40
+ variant="outline"
41
+ className="w-full justify-center"
42
+ onClick={() => onSocialLogin('MT Login')}
43
+ >
44
+ <Lock className="w-5 h-5 mr-2 text-[var(--chart-4)]" />
45
+ <span>Entrar com MT Login</span>
46
+ </Button>
47
+
48
+ <Button
49
+ type="button"
50
+ variant="outline"
51
+ className="w-full justify-center font-normal"
52
+ onClick={() => onSocialLogin('gov.br')}
53
+ >
54
+ <span>Entrar com <strong className="font-semibold">gov.br</strong></span>
55
+ </Button>
56
+ </div>
57
+ </>
58
+ );
59
+ }
@@ -1,82 +1,82 @@
1
- import React, { useState } from 'react';
2
- import { Button } from 'xertica-ui/ui';
3
- import { XerticaLogo } from 'xertica-ui/brand';
4
- import { ArrowLeft, Mail, CheckCircle2 } from 'lucide-react';
5
- import { useNavigate, useLocation } from 'react-router-dom';
6
- import { AuthPageShell } from './AuthPageShell';
7
- import { SocialLoginButtons } from './SocialLoginButtons';
8
-
9
- export function VerifyEmailContent() {
10
- const navigate = useNavigate();
11
- const location = useLocation();
12
- const email = location.state?.email || 'seu@email.com';
13
- const [isResending, setIsResending] = useState(false);
14
- const [resendSuccess, setResendSuccess] = useState(false);
15
-
16
- const handleResend = async () => {
17
- setIsResending(true);
18
- setResendSuccess(false);
19
- await new Promise(resolve => setTimeout(resolve, 1500));
20
- setIsResending(false);
21
- setResendSuccess(true);
22
- setTimeout(() => setResendSuccess(false), 3000);
23
- };
24
-
25
- return (
26
- <AuthPageShell
27
- imageSrc="https://images.unsplash.com/photo-1563986768609-322da13575f3?w=1200&h=800&fit=crop&auto=format"
28
- imageAlt="Email e comunicação"
29
- >
30
- <div className="text-center">
31
- <div className="flex items-center justify-center mb-4">
32
- <XerticaLogo className="h-12 w-auto text-primary dark:text-foreground" variant="theme" />
33
- </div>
34
- <div className="flex items-center justify-center mb-4">
35
- <div className="p-4 bg-primary/10 rounded-[var(--radius)]">
36
- <Mail className="w-12 h-12 text-primary" />
37
- </div>
38
- </div>
39
- <h2 className="text-sm text-muted-foreground">Verifique seu email</h2>
40
- <p className="mt-2 text-muted-foreground">
41
- Enviamos instruções para redefinir sua senha para:
42
- </p>
43
- <p className="mt-1 text-primary">{email}</p>
44
- </div>
45
-
46
- <div className="bg-accent rounded-[var(--radius)] p-4 space-y-3">
47
- <p className="text-muted-foreground">
48
- Siga as instruções no email para redefinir sua senha. O link expira em 24 horas.
49
- </p>
50
- <div className="flex items-start gap-2 text-muted-foreground">
51
- <CheckCircle2 className="w-4 h-4 mt-0.5 flex-shrink-0 text-[var(--chart-2)]" />
52
- <span className="text-sm">Verifique a caixa de spam se não encontrar o email</span>
53
- </div>
54
- </div>
55
-
56
- {resendSuccess && (
57
- <div className="bg-[var(--chart-2)]/10 border border-[var(--chart-2)]/20 rounded-[var(--radius)] p-3 flex items-center gap-2">
58
- <CheckCircle2 className="w-5 h-5 text-[var(--chart-2)] flex-shrink-0" />
59
- <span className="text-sm text-[var(--chart-2)]">Email reenviado com sucesso!</span>
60
- </div>
61
- )}
62
-
63
- <div className="space-y-3">
64
- <p className="text-center text-muted-foreground">Não recebeu o email?</p>
65
- <Button variant="outline" className="w-full" onClick={handleResend} disabled={isResending}>
66
- {isResending ? 'Reenviando...' : 'Reenviar email'}
67
- </Button>
68
- <Button
69
- type="button"
70
- onClick={() => navigate('/login')}
71
- variant="outline"
72
- className="w-full text-muted-foreground hover:text-foreground"
73
- >
74
- <ArrowLeft className="w-4 h-4 mr-2" />
75
- Voltar para login
76
- </Button>
77
- </div>
78
-
79
- <SocialLoginButtons onSocialLogin={provider => console.log(`Login com ${provider}`)} />
80
- </AuthPageShell>
81
- );
82
- }
1
+ import React, { useState } from 'react';
2
+ import { Button } from 'xertica-ui/ui';
3
+ import { XerticaLogo } from 'xertica-ui/brand';
4
+ import { ArrowLeft, Mail, CheckCircle2 } from 'lucide-react';
5
+ import { useNavigate, useLocation } from 'react-router-dom';
6
+ import { AuthPageShell } from './AuthPageShell';
7
+ import { SocialLoginButtons } from './SocialLoginButtons';
8
+
9
+ export function VerifyEmailContent() {
10
+ const navigate = useNavigate();
11
+ const location = useLocation();
12
+ const email = location.state?.email || 'seu@email.com';
13
+ const [isResending, setIsResending] = useState(false);
14
+ const [resendSuccess, setResendSuccess] = useState(false);
15
+
16
+ const handleResend = async () => {
17
+ setIsResending(true);
18
+ setResendSuccess(false);
19
+ await new Promise(resolve => setTimeout(resolve, 1500));
20
+ setIsResending(false);
21
+ setResendSuccess(true);
22
+ setTimeout(() => setResendSuccess(false), 3000);
23
+ };
24
+
25
+ return (
26
+ <AuthPageShell
27
+ imageSrc="https://images.unsplash.com/photo-1563986768609-322da13575f3?w=1200&h=800&fit=crop&auto=format"
28
+ imageAlt="Email e comunicação"
29
+ >
30
+ <div className="text-center">
31
+ <div className="flex items-center justify-center mb-4">
32
+ <XerticaLogo className="h-12 w-auto text-primary dark:text-foreground" variant="theme" />
33
+ </div>
34
+ <div className="flex items-center justify-center mb-4">
35
+ <div className="p-4 bg-primary/10 rounded-[var(--radius)]">
36
+ <Mail className="w-12 h-12 text-primary" />
37
+ </div>
38
+ </div>
39
+ <h2 className="text-sm text-muted-foreground">Verifique seu email</h2>
40
+ <p className="mt-2 text-muted-foreground">
41
+ Enviamos instruções para redefinir sua senha para:
42
+ </p>
43
+ <p className="mt-1 text-primary">{email}</p>
44
+ </div>
45
+
46
+ <div className="bg-accent rounded-[var(--radius)] p-4 space-y-3">
47
+ <p className="text-muted-foreground">
48
+ Siga as instruções no email para redefinir sua senha. O link expira em 24 horas.
49
+ </p>
50
+ <div className="flex items-start gap-2 text-muted-foreground">
51
+ <CheckCircle2 className="w-4 h-4 mt-0.5 flex-shrink-0 text-[var(--chart-2)]" />
52
+ <span className="text-sm">Verifique a caixa de spam se não encontrar o email</span>
53
+ </div>
54
+ </div>
55
+
56
+ {resendSuccess && (
57
+ <div className="bg-[var(--chart-2)]/10 border border-[var(--chart-2)]/20 rounded-[var(--radius)] p-3 flex items-center gap-2">
58
+ <CheckCircle2 className="w-5 h-5 text-[var(--chart-2)] flex-shrink-0" />
59
+ <span className="text-sm text-[var(--chart-2)]">Email reenviado com sucesso!</span>
60
+ </div>
61
+ )}
62
+
63
+ <div className="space-y-3">
64
+ <p className="text-center text-muted-foreground">Não recebeu o email?</p>
65
+ <Button variant="outline" className="w-full" onClick={handleResend} disabled={isResending}>
66
+ {isResending ? 'Reenviando...' : 'Reenviar email'}
67
+ </Button>
68
+ <Button
69
+ type="button"
70
+ onClick={() => navigate('/login')}
71
+ variant="outline"
72
+ className="w-full text-muted-foreground hover:text-foreground"
73
+ >
74
+ <ArrowLeft className="w-4 h-4 mr-2" />
75
+ Voltar para login
76
+ </Button>
77
+ </div>
78
+
79
+ <SocialLoginButtons onSocialLogin={provider => console.log(`Login com ${provider}`)} />
80
+ </AuthPageShell>
81
+ );
82
+ }
@@ -1 +1 @@
1
- export { HomeContent } from './ui/HomeContent';
1
+ export { HomeContent } from './ui/HomeContent';