xertica-ui 2.5.3 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +705 -664
- package/README.md +482 -482
- package/assets/xertica-logo.svg +37 -37
- package/assets/xertica-x-logo.svg +20 -20
- package/bin/cli.ts +1293 -1256
- package/bin/generate-tokens.ts +256 -262
- package/bin/language-config.test.ts +32 -0
- package/bin/language-config.ts +384 -359
- package/components/Introduction.mdx +121 -121
- package/components/assistant/code-block/CodeBlock.tsx +7 -6
- package/components/assistant/code-block/code-block.mdx +38 -38
- package/components/assistant/code-block/code-block.test.tsx +2 -1
- package/components/assistant/formatted-document/FormattedDocument.tsx +3 -0
- package/components/assistant/formatted-document/formatted-document.mdx +31 -31
- package/components/assistant/formatted-document/formatted-document.test.tsx +5 -4
- package/components/assistant/markdown-message/MarkdownMessage.tsx +1 -1
- package/components/assistant/markdown-message/markdown-message.mdx +44 -44
- package/components/assistant/modern-chat-input/modern-chat-input.mdx +71 -71
- package/components/assistant/modern-chat-input/modern-chat-input.test.tsx +3 -2
- package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +1 -1
- package/components/assistant/xertica-assistant/types.ts +3 -2
- package/components/assistant/xertica-assistant/use-assistant.ts +10 -10
- package/components/assistant/xertica-assistant/xertica-assistant.mdx +66 -66
- package/components/assistant/xertica-assistant/xertica-assistant.test.tsx +2 -1
- package/{templates/src/features/auth/ui → components/blocks/auth}/AuthPageShell.tsx +37 -32
- package/components/blocks/auth/PasswordStrengthMeter.tsx +41 -0
- package/components/blocks/auth/SocialLoginButtons.tsx +95 -0
- package/components/blocks/auth/index.ts +11 -0
- package/components/blocks/auth/usePasswordStrength.ts +13 -0
- package/components/blocks/card-patterns/card-patterns.mdx +123 -123
- package/components/blocks/index.ts +1 -0
- package/components/brand/branding/branding.mdx +27 -27
- package/components/brand/language-selector/language-selector.mdx +126 -126
- package/components/brand/theme-toggle/theme-toggle.mdx +47 -47
- package/components/brand/theme-toggle/theme-toggle.test.tsx +6 -2
- package/components/brand/xertica-logo/xertica-logo.mdx +56 -56
- package/components/brand/xertica-orbe/xertica-orbe.mdx +38 -38
- package/components/brand/xertica-provider/XerticaProvider.tsx +112 -112
- package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
- package/components/brand/xertica-provider/xertica-provider.test.tsx +25 -13
- package/components/brand/xertica-xlogo/xertica-xlogo.mdx +55 -55
- package/components/examples/DrawingMapExample.tsx +1 -4
- package/components/layout/header/header.mdx +117 -117
- package/components/layout/header/header.test.tsx +2 -1
- package/components/layout/sidebar/sidebar.mdx +99 -99
- package/components/layout/sidebar/sidebar.stories.tsx +1033 -1033
- package/components/layout/sidebar/sidebar.test.tsx +2 -1
- package/components/layout/sidebar/sidebar.tsx +1509 -1506
- package/components/media/audio-player/AudioPlayer.mdx +67 -67
- package/components/media/audio-player/AudioPlayer.test.tsx +2 -1
- package/components/media/floating-media-wrapper.mdx +74 -74
- package/components/media/video-player/VideoPlayer.mdx +102 -102
- package/components/media/video-player/VideoPlayer.test.tsx +3 -2
- package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +94 -188
- package/components/pages/forgot-password-page/forgot-password-page.mdx +60 -60
- package/components/pages/forgot-password-page/forgot-password-page.test.tsx +2 -1
- package/components/pages/home-content/HomeContent.tsx +119 -119
- package/components/pages/home-content/home-content.mdx +62 -62
- package/components/pages/home-page/HomePage.stories.tsx +8 -15
- package/components/pages/home-page/home-page.mdx +53 -53
- package/components/pages/home-page/home-page.test.tsx +2 -1
- package/components/pages/login-page/LoginPage.mdx +31 -31
- package/components/pages/login-page/LoginPage.tsx +125 -218
- package/components/pages/login-page/login-page.test.tsx +2 -1
- package/components/pages/reset-password-page/ResetPasswordPage.tsx +153 -243
- package/components/pages/reset-password-page/reset-password-page.mdx +63 -63
- package/components/pages/template-content/TemplateContent.tsx +1353 -1353
- package/components/pages/template-content/template-content.mdx +61 -61
- package/components/pages/template-page/TemplatePage.stories.tsx +32 -32
- package/components/pages/template-page/template-page.mdx +53 -53
- package/components/pages/template-page/template-page.test.tsx +2 -1
- package/components/pages/verify-email-page/VerifyEmailPage.tsx +104 -206
- package/components/pages/verify-email-page/verify-email-page.mdx +55 -55
- package/components/public-api-smoke.test.tsx +10 -6
- package/components/shared/assistant-utils.ts +3 -2
- package/components/shared/navigation.ts +2 -2
- package/components/ui/accordion/accordion.mdx +29 -29
- package/components/ui/alert/alert.mdx +29 -29
- package/components/ui/alert-dialog/alert-dialog.mdx +26 -26
- package/components/ui/aspect-ratio/aspect-ratio.mdx +25 -25
- package/components/ui/assistant-chart/AssistantChart.tsx +8 -2
- package/components/ui/assistant-chart/assistant-chart.mdx +25 -25
- package/components/ui/avatar/avatar.mdx +26 -26
- package/components/ui/badge/badge.mdx +28 -28
- package/components/ui/breadcrumb/breadcrumb.mdx +26 -26
- package/components/ui/button/button.mdx +29 -29
- package/components/ui/calendar/calendar.mdx +26 -26
- package/components/ui/card/card.mdx +26 -26
- package/components/ui/carousel/carousel.mdx +26 -26
- package/components/ui/chart/chart.mdx +26 -26
- package/components/ui/chart/chart.test.tsx +178 -178
- package/components/ui/chart/chart.tsx +2252 -2245
- package/components/ui/checkbox/checkbox.mdx +26 -26
- package/components/ui/collapsible/collapsible.mdx +25 -25
- package/components/ui/command/command.mdx +26 -26
- package/components/ui/context-menu/context-menu.mdx +26 -26
- package/components/ui/dialog/dialog.mdx +26 -26
- package/components/ui/drawer/drawer.mdx +26 -26
- package/components/ui/dropdown-menu/dropdown-menu.mdx +26 -26
- package/components/ui/empty/empty.mdx +26 -26
- package/components/ui/file-upload/file-upload.mdx +26 -26
- package/components/ui/form/form.mdx +20 -20
- package/components/ui/google-maps-loader/google-maps-loader.mdx +68 -68
- package/components/ui/hover-card/hover-card.mdx +26 -26
- package/components/ui/input/input.mdx +29 -29
- package/components/ui/input-otp/input-otp.mdx +26 -26
- package/components/ui/label/label.mdx +25 -25
- package/components/ui/map/map.mdx +26 -26
- package/components/ui/map/map.tsx +6 -1
- package/components/ui/menubar/menubar.mdx +26 -26
- package/components/ui/navigation-menu/navigation-menu.mdx +26 -26
- package/components/ui/notification-badge/notification-badge.mdx +26 -26
- package/components/ui/page-header/page-header.mdx +44 -44
- package/components/ui/pagination/pagination.mdx +26 -26
- package/components/ui/popover/popover.mdx +26 -26
- package/components/ui/progress/progress.mdx +25 -25
- package/components/ui/radio-group/radio-group.mdx +26 -26
- package/components/ui/rating/rating.mdx +26 -26
- package/components/ui/resizable/resizable.mdx +26 -26
- package/components/ui/resizable/resizable.tsx +13 -8
- package/components/ui/rich-text-editor/rich-text-editor.mdx +47 -47
- package/components/ui/route-map/route-map.mdx +26 -26
- package/components/ui/scroll-area/scroll-area.mdx +25 -25
- package/components/ui/search/search.mdx +27 -27
- package/components/ui/select/select.mdx +26 -26
- package/components/ui/separator/separator.mdx +25 -25
- package/components/ui/sheet/sheet.mdx +26 -26
- package/components/ui/simple-map/simple-map.mdx +25 -25
- package/components/ui/skeleton/skeleton.mdx +25 -25
- package/components/ui/slider/slider.mdx +26 -26
- package/components/ui/sonner/sonner.mdx +26 -26
- package/components/ui/stats-card/stats-card.mdx +26 -26
- package/components/ui/stats-card/stats-card.stories.tsx +117 -117
- package/components/ui/stats-card/stats-card.tsx +109 -109
- package/components/ui/stepper/stepper.mdx +26 -26
- package/components/ui/switch/switch.mdx +25 -25
- package/components/ui/table/table.mdx +27 -27
- package/components/ui/tabs/tabs.mdx +26 -26
- package/components/ui/textarea/textarea.mdx +25 -25
- package/components/ui/timeline/timeline.mdx +26 -26
- package/components/ui/toggle/toggle.mdx +26 -26
- package/components/ui/toggle-group/toggle-group.mdx +26 -26
- package/components/ui/tooltip/tooltip.mdx +26 -26
- package/components/ui/tree-view/tree-view.mdx +26 -26
- package/components.json +511 -511
- package/contexts/BrandColorsContext.tsx +282 -282
- package/contexts/i18n-singleton.test.tsx +57 -0
- package/contexts/theme-data.ts +391 -391
- package/dist/{AssistantChart-DNdwuS-t.js → AssistantChart-BMNSA_Pk.js} +4 -4
- package/dist/{AssistantChart-COGiOV-g.cjs → AssistantChart-BzM7plyc.cjs} +31 -21
- package/dist/{AssistantChart-CWX1OWNM.js → AssistantChart-C842evTi.js} +31 -21
- package/dist/{AssistantChart-D0A1FPYt.cjs → AssistantChart-CImCNLfD.cjs} +150 -114
- package/dist/{AssistantChart-BW9JK6jw.cjs → AssistantChart-CVF2uh37.cjs} +4 -4
- package/dist/{AssistantChart-BXU1ACnh.js → AssistantChart-DfdIfmQr.js} +134 -240
- package/dist/{AssistantChart-BZTPJ5dP.cjs → AssistantChart-JooMdVQU.cjs} +5 -5
- package/dist/{AssistantChart-DMJJ_Amf.js → AssistantChart-KHS-tp-L.js} +5 -5
- package/dist/{BrandColorsContext-BwY-b6M4.cjs → BrandColorsContext-B4_81eas.cjs} +2 -2
- package/dist/{BrandColorsContext-BMRJ04Wf.js → BrandColorsContext-DbK5LnQ_.js} +2 -2
- package/dist/{CodeBlock-CjeFavqV.js → CodeBlock-DiKO8ocT.js} +11 -11
- package/dist/{CodeBlock-CV6dtsTM.cjs → CodeBlock-ZYThr7Kn.cjs} +12 -9
- package/dist/{FeatureCard-Cfs6Ishq.js → FeatureCard-BhpfmPPx.js} +20 -20
- package/dist/{FeatureCard-ie3L8Fpr.cjs → FeatureCard-D-5yS_OD.cjs} +31 -18
- package/dist/{progress-DDeuWPZw.cjs → ImageWithFallback-CfkAkctC.cjs} +34 -9
- package/dist/{progress-Cs9i4DPx.js → ImageWithFallback-bw-CxxDc.js} +27 -10
- package/dist/LanguageContext-CX_zdxre.js +1912 -0
- package/dist/LanguageContext-CjhSSqJT.cjs +1917 -0
- package/dist/LanguageSelector-BR3Ss0k_.js +46 -0
- package/dist/LanguageSelector-CHOLPmHr.cjs +48 -0
- package/dist/{XerticaXLogo-mqjoBiLI.js → LanguageSelector-CmTj3lWq.js} +85 -82
- package/dist/{XerticaXLogo-BX3ueACh.js → LanguageSelector-DxW6o7bt.js} +81 -81
- package/dist/{XerticaXLogo-uQgwns_E.cjs → LanguageSelector-Sw73qvWV.cjs} +84 -81
- package/dist/PasswordStrengthMeter-C8irs0G1.js +173 -0
- package/dist/PasswordStrengthMeter-MLzhax-d.cjs +179 -0
- package/dist/{ThemeContext-BgclCB35.js → ThemeContext-BGeh_Kdr.js} +290 -212
- package/dist/{ThemeContext-bSzuOit2.cjs → ThemeContext-CEY9pCn-.cjs} +15 -10
- package/dist/{ThemeContext-BblcjQup.cjs → ThemeContext-D50irx5T.cjs} +291 -205
- package/dist/{ThemeContext-RTy1m2Uq.js → ThemeContext-Dk3tH7Ym.js} +14 -13
- package/dist/{XerticaXLogo-CFuIlYFH.js → ThemeToggle-BpM_iHh8.js} +56 -93
- package/dist/{XerticaXLogo-CziKMQil.cjs → ThemeToggle-CZRlv0d4.cjs} +62 -85
- package/dist/{VerifyEmailPage-C_Zk6Gen.cjs → VerifyEmailPage-B6bOrybJ.cjs} +17 -17
- package/dist/VerifyEmailPage-BKiaw2YK.js +2954 -0
- package/dist/{VerifyEmailPage-B31mCrMc.js → VerifyEmailPage-BRE5Fz59.js} +8 -8
- package/dist/{VerifyEmailPage-Cyl55sJb.js → VerifyEmailPage-BcCluouh.js} +135 -65
- package/dist/VerifyEmailPage-Beaicc6V.cjs +2963 -0
- package/dist/VerifyEmailPage-BehPBp0F.cjs +2963 -0
- package/dist/VerifyEmailPage-Bx1sr0uQ.cjs +3298 -0
- package/dist/{VerifyEmailPage-Bci0bA-P.js → VerifyEmailPage-DUYyXCX9.js} +3 -3
- package/dist/VerifyEmailPage-DXXMHbzq.js +3289 -0
- package/dist/VerifyEmailPage-Djb6hthM.js +2954 -0
- package/dist/{VerifyEmailPage-u_Dn7t1U.cjs → VerifyEmailPage-DpYtFk35.cjs} +21 -21
- package/dist/{VerifyEmailPage-X14vhdyl.js → VerifyEmailPage-NXKWW3Dk.js} +12 -12
- package/dist/{VerifyEmailPage-C7KiYXrm.cjs → VerifyEmailPage-QrCz4Wqr.cjs} +11 -11
- package/dist/{VerifyEmailPage-Bv8Ah_TK.cjs → VerifyEmailPage-ZmQra0Wi.cjs} +144 -74
- package/dist/{XerticaProvider-BErr83Bg.js → XerticaProvider-BF3q_myt.js} +5 -4
- package/dist/{XerticaProvider-B8CaV7xu.cjs → XerticaProvider-BijpC_py.cjs} +18 -11
- package/dist/{XerticaProvider-DQtvJU7m.js → XerticaProvider-C2wDRQhT.js} +17 -13
- package/dist/{XerticaProvider-CeS5G_n5.cjs → XerticaProvider-C_JSOz1U.cjs} +2 -2
- package/dist/{XerticaProvider-CwOkHxiT.cjs → XerticaProvider-D5zjrqZq.cjs} +5 -4
- package/dist/{XerticaProvider-ra2NciRq.js → XerticaProvider-KTGl4Cn1.js} +2 -2
- package/dist/{alert-dialog-DqlRW_An.js → alert-dialog-BrpwXKwS.js} +3 -3
- package/dist/{alert-dialog-yckpaOpy.cjs → alert-dialog-BzIcTKn_.cjs} +173 -166
- package/dist/{alert-dialog-DhwPioBa.cjs → alert-dialog-CZU1Zase.cjs} +3 -3
- package/dist/{alert-dialog-KpoabzJb.js → alert-dialog-ClRoLH7l.js} +40 -56
- package/dist/{alert-dialog-B4M3vQKS.cjs → alert-dialog-DBBqvU-V.cjs} +53 -38
- package/dist/{alert-dialog-iDe5VE5o.js → alert-dialog-kty5pxQp.js} +160 -183
- package/dist/assistant.cjs.js +2 -2
- package/dist/assistant.es.js +2 -2
- package/dist/blocks.cjs.js +7 -3
- package/dist/blocks.es.js +2 -2
- package/dist/brand.cjs.js +7 -6
- package/dist/brand.es.js +3 -2
- package/dist/cli.js +63 -21
- package/dist/components/assistant/code-block/CodeBlock.d.ts +2 -1
- package/dist/components/assistant/formatted-document/FormattedDocument.d.ts +2 -1
- package/dist/components/assistant/markdown-message/MarkdownMessage.d.ts +2 -1
- package/dist/components/assistant/modern-chat-input/ModernChatInput.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantCollapsedView.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantConversationList.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantHeader.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantMessageBubble.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantTabBar.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/types.d.ts +3 -2
- package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +1 -1
- package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +2 -1
- package/dist/components/blocks/auth/AuthPageShell.d.ts +12 -0
- package/dist/components/blocks/auth/PasswordStrengthMeter.d.ts +7 -0
- package/dist/components/blocks/auth/SocialLoginButtons.d.ts +8 -0
- package/dist/components/blocks/auth/index.d.ts +8 -0
- package/dist/components/blocks/auth/usePasswordStrength.d.ts +3 -0
- package/dist/components/blocks/card-patterns/ActivityCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/FeatureCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/NotificationCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProfileCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProjectCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/QuickActionCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/index.d.ts +1 -0
- package/dist/components/brand/language-selector/LanguageSelector.d.ts +2 -1
- package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +2 -1
- package/dist/components/brand/xertica-logo/XerticaLogo.d.ts +2 -1
- package/dist/components/brand/xertica-orbe/XerticaOrbe.d.ts +2 -1
- package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +1 -1
- package/dist/components/brand/xertica-xlogo/XerticaXLogo.d.ts +2 -1
- package/dist/components/examples/DrawingMapExample.d.ts +2 -1
- package/dist/components/examples/FilterableMapExample.d.ts +1 -1
- package/dist/components/examples/MapShowcase.d.ts +2 -1
- package/dist/components/examples/SimpleFilterableMap.d.ts +2 -1
- package/dist/components/figma/ImageWithFallback.d.ts +1 -1
- package/dist/components/layout/header/header.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar.d.ts +25 -13
- package/dist/components/media/FloatingMediaWrapper.d.ts +1 -1
- package/dist/components/media/audio-player/AudioPlayer.d.ts +2 -1
- package/dist/components/media/video-player/VideoPlayer.d.ts +2 -1
- package/dist/components/pages/forgot-password-page/ForgotPasswordPage.d.ts +2 -1
- package/dist/components/pages/home-content/HomeContent.d.ts +2 -1
- package/dist/components/pages/home-page/HomePage.d.ts +2 -1
- package/dist/components/pages/login-page/LoginPage.d.ts +2 -1
- package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +3 -2
- package/dist/components/pages/template-content/TemplateContent.d.ts +2 -1
- package/dist/components/pages/template-page/TemplatePage.d.ts +2 -1
- package/dist/components/pages/verify-email-page/VerifyEmailPage.d.ts +2 -1
- package/dist/components/shared/CustomTooltipContent.d.ts +1 -1
- package/dist/components/shared/assistant-utils.d.ts +3 -2
- package/dist/components/shared/error-boundary.d.ts +4 -4
- package/dist/components/shared/error-fallbacks.d.ts +4 -3
- package/dist/components/shared/navigation.d.ts +6 -2
- package/dist/components/ui/accordion/accordion.d.ts +4 -4
- package/dist/components/ui/alert/alert.d.ts +3 -3
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts +10 -10
- package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +1 -1
- package/dist/components/ui/assistant-chart/AssistantChart.d.ts +4 -3
- package/dist/components/ui/avatar/avatar.d.ts +3 -3
- package/dist/components/ui/badge/badge.d.ts +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb.d.ts +7 -7
- package/dist/components/ui/calendar/calendar.d.ts +2 -2
- package/dist/components/ui/card/card.d.ts +7 -7
- package/dist/components/ui/carousel/carousel.d.ts +5 -5
- package/dist/components/ui/chart/chart.d.ts +16 -16
- package/dist/components/ui/collapsible/collapsible.d.ts +3 -3
- package/dist/components/ui/command/command.d.ts +9 -9
- package/dist/components/ui/context-menu/context-menu.d.ts +15 -15
- package/dist/components/ui/dialog/dialog.d.ts +9 -9
- package/dist/components/ui/drawer/drawer.d.ts +10 -10
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +15 -15
- package/dist/components/ui/form/form.d.ts +7 -7
- package/dist/components/ui/google-maps-loader/google-maps-loader.d.ts +3 -3
- package/dist/components/ui/hover-card/hover-card.d.ts +3 -3
- package/dist/components/ui/input-otp/input-otp.d.ts +4 -4
- package/dist/components/ui/label/label.d.ts +1 -1
- package/dist/components/ui/menubar/menubar.d.ts +16 -16
- package/dist/components/ui/navigation-menu/navigation-menu.d.ts +8 -8
- package/dist/components/ui/page-header/page-header.d.ts +3 -3
- package/dist/components/ui/pagination/pagination.d.ts +7 -7
- package/dist/components/ui/popover/popover.d.ts +4 -4
- package/dist/components/ui/progress/progress.d.ts +1 -1
- package/dist/components/ui/resizable/resizable.d.ts +11 -7
- package/dist/components/ui/rich-text-editor/rich-text-editor.d.ts +1 -1
- package/dist/components/ui/scroll-area/scroll-area.d.ts +2 -2
- package/dist/components/ui/separator/separator.d.ts +1 -1
- package/dist/components/ui/sheet/sheet.d.ts +10 -10
- package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
- package/dist/components/ui/sonner/sonner.d.ts +2 -1
- package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +1 -1
- package/dist/components/ui/table/table.d.ts +8 -8
- package/dist/components/ui/tabs/tabs.d.ts +4 -4
- package/dist/components/ui/tooltip/tooltip.d.ts +4 -4
- package/dist/contexts/ApiKeyContext.d.ts +2 -2
- package/dist/contexts/AssistenteContext.d.ts +1 -1
- package/dist/contexts/AuthContext.d.ts +1 -1
- package/dist/contexts/LanguageContext.d.ts +2 -2
- package/dist/contexts/LayoutContext.d.ts +2 -2
- package/dist/contexts/ThemeContext.d.ts +1 -1
- package/dist/features/assistant/hooks/useAssistantConfig.d.ts +1 -1
- package/dist/features/home/hooks/useDashboardStats.d.ts +1 -1
- package/dist/features/home/hooks/useFeatureCards.d.ts +1 -1
- package/dist/features/home/hooks/useTeamMembers.d.ts +1 -1
- package/dist/{google-maps-loader-BCe58h9D.js → google-maps-loader-BOug999f.js} +0 -4
- package/dist/{google-maps-loader-casMyxlo.cjs → google-maps-loader-DfeBRI8Q.cjs} +0 -5
- package/dist/hooks.cjs.js +6 -5
- package/dist/hooks.es.js +3 -2
- package/dist/{index-9GWd0qxq.cjs → index-BQjx1Mdf.cjs} +1 -1
- package/dist/index-Bei5DzAL.js +6 -0
- package/dist/index.cjs.js +32 -27
- package/dist/index.es.js +15 -14
- package/dist/layout.cjs.js +1 -1
- package/dist/layout.es.js +1 -1
- package/dist/pages.cjs.js +1 -1
- package/dist/pages.es.js +1 -1
- package/dist/{rich-text-editor-B2CKz7nx.cjs → rich-text-editor-BuqSu718.cjs} +68 -3
- package/dist/{rich-text-editor-DloeW0wc.js → rich-text-editor-CV8FtA_l.js} +66 -4
- package/dist/{sidebar-B4ZWaMrE.js → sidebar-B7YzwAp3.js} +365 -6
- package/dist/{sidebar-CLmIjgNd.cjs → sidebar-BGJ0j567.cjs} +84 -67
- package/dist/{sidebar-Duermn32.js → sidebar-BI6mZlC8.js} +81 -64
- package/dist/{sidebar-BS1p2V7t.cjs → sidebar-BtmotOg-.cjs} +367 -9
- package/dist/{sidebar-DyYvgyBj.cjs → sidebar-Cb0U7NsV.cjs} +368 -9
- package/dist/{sidebar-QwCoeoZ_.js → sidebar-D3EgGVxF.js} +1 -1
- package/dist/{sidebar-CQn_rwxP.cjs → sidebar-DDTqMGnR.cjs} +4 -4
- package/dist/{sidebar-3XyzjVBw.js → sidebar-I7EXyf5D.js} +364 -6
- package/dist/ui.cjs.js +9 -9
- package/dist/ui.es.js +5 -5
- package/dist/{xertica-assistant-BbgzsgsG.js → xertica-assistant-8fh8KA2K.js} +60 -51
- package/dist/{xertica-assistant-d2qs2Vd9.cjs → xertica-assistant-BjfG3zyL.cjs} +63 -46
- package/dist/{xertica-assistant-B687qEPU.js → xertica-assistant-CJVnvMqU.js} +17 -8
- package/dist/{xertica-assistant-sOHwTgIP.cjs → xertica-assistant-CKPtc1z5.cjs} +19 -10
- package/dist/{xertica-assistant-QFUnv5I2.cjs → xertica-assistant-DER0brPQ.cjs} +6 -5
- package/dist/{xertica-assistant-CyikE3N_.js → xertica-assistant-DQCjpk5M.js} +4 -3
- package/dist/{xertica-assistant-B1NaSFFj.js → xertica-assistant-Dk-9AJzw.js} +6 -5
- package/dist/{xertica-assistant-CIaUlbIt.cjs → xertica-assistant-DxhIKvuY.cjs} +8 -7
- package/dist/xertica-ui.css +2 -2
- package/docs/components/audio-player.md +1 -1
- package/docs/components/sidebar.md +331 -331
- package/docs/components/stats-card.md +138 -138
- package/docs/components/toggle.md +12 -0
- package/docs/doc-audit.md +35 -229
- package/docs/i18n.md +33 -10
- package/docs/llms.md +6 -4
- package/llms-compact.txt +444 -444
- package/llms-full.txt +12144 -12144
- package/llms.txt +187 -187
- package/package.json +223 -219
- package/scripts/a11y-audit.mjs +162 -162
- package/scripts/fix-stories.cjs +19 -19
- package/styles/globals.css +0 -1
- package/styles/xertica/base.css +8 -0
- package/styles/xertica/tokens.css +240 -240
- package/templates/.env.example +2 -2
- package/templates/.prettierignore +4 -4
- package/templates/.prettierrc +10 -10
- package/templates/guidelines/Guidelines.md +865 -865
- package/templates/index.html +13 -13
- package/templates/package.json +69 -69
- package/templates/src/app/components/AuthGuard.tsx +11 -0
- package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +1 -2
- package/templates/src/features/auth/ui/LoginContent.tsx +1 -2
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +3 -57
- package/templates/src/features/auth/ui/VerifyEmailContent.tsx +1 -2
- package/templates/src/features/home/index.ts +0 -10
- package/templates/src/features/home/ui/HomeContent.tsx +62 -116
- package/templates/src/features/settings/index.ts +2 -0
- package/templates/src/features/settings/ui/SettingsContent.tsx +134 -0
- package/templates/src/features/template/index.ts +0 -4
- package/templates/src/features/template/ui/TemplateContent.tsx +68 -1321
- package/templates/src/i18n.ts +36 -13
- package/templates/src/locales/en/pages/settings.json +15 -0
- package/templates/src/locales/en/pages/templates.json +5 -313
- package/templates/src/locales/es/pages/settings.json +15 -0
- package/templates/src/locales/es/pages/templates.json +5 -313
- package/templates/src/locales/pt-BR/pages/settings.json +15 -0
- package/templates/src/locales/pt-BR/pages/templates.json +5 -313
- package/templates/src/pages/SettingsPage.tsx +28 -0
- package/templates/src/shared/config/navigation.ts +2 -2
- package/templates/src/styles/xertica/tokens.css +240 -240
- package/utils/gemini.ts +2 -2
- package/dist/AssistantChart-9w31gdAb.cjs +0 -3363
- package/dist/AssistantChart-BAudAfne.cjs +0 -3591
- package/dist/AssistantChart-BAx9VQvb.cjs +0 -3374
- package/dist/AssistantChart-BP8upjMk.js +0 -3565
- package/dist/AssistantChart-CVko2A1W.js +0 -3348
- package/dist/AssistantChart-CVzmmhx4.js +0 -3337
- package/dist/AssistantChart-CeU2dIb6.js +0 -3469
- package/dist/AssistantChart-DO5UuX4J.cjs +0 -3495
- package/dist/AudioPlayer-1ypwE2Wh.cjs +0 -936
- package/dist/AudioPlayer-BJ2IuRQW.cjs +0 -1275
- package/dist/AudioPlayer-BWDW6TN9.cjs +0 -1279
- package/dist/AudioPlayer-CM962GEh.js +0 -1280
- package/dist/AudioPlayer-CbZId7cj.cjs +0 -998
- package/dist/AudioPlayer-DU8zt8-z.js +0 -999
- package/dist/AudioPlayer-DuKXrCfy.js +0 -937
- package/dist/AudioPlayer-Xxma6_-H.js +0 -1276
- package/dist/BrandColorsContext-DLVJgtmH.js +0 -666
- package/dist/BrandColorsContext-DZT7JjeD.js +0 -659
- package/dist/BrandColorsContext-GUyFmkX0.cjs +0 -665
- package/dist/BrandColorsContext-awnBCmC4.cjs +0 -666
- package/dist/CodeBlock-C2ZUXt8V.js +0 -219
- package/dist/CodeBlock-C5oYnLQp.cjs +0 -218
- package/dist/CodeBlock-DuxdtN-l.js +0 -219
- package/dist/CodeBlock-POVYONvC.cjs +0 -218
- package/dist/CustomTooltipContent-BT6brkVJ.cjs +0 -49
- package/dist/CustomTooltipContent-CfOfikhq.js +0 -33
- package/dist/CustomTooltipContent-DHjkY0ww.js +0 -40
- package/dist/CustomTooltipContent-c_K-DWRr.cjs +0 -56
- package/dist/FeatureCard-9GhnlgL3.js +0 -336
- package/dist/FeatureCard-Bcb3Zi54.js +0 -302
- package/dist/FeatureCard-CkPd2psQ.cjs +0 -301
- package/dist/FeatureCard-Dkp-xmzM.cjs +0 -335
- package/dist/FeatureCardSkeleton-CAgu8stE.js +0 -27
- package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +0 -26
- package/dist/LanguageContext-BwhwC3G2.js +0 -657
- package/dist/LanguageContext-DvUt5jBg.cjs +0 -656
- package/dist/LayoutContext-BDmcZfMH.cjs +0 -84
- package/dist/LayoutContext-C4kKN9RV.cjs +0 -93
- package/dist/LayoutContext-CGEe1oPq.js +0 -94
- package/dist/LayoutContext-CwT5KLiW.cjs +0 -104
- package/dist/LayoutContext-DVLCsoQn.js +0 -105
- package/dist/LayoutContext-dbQvdC4O.js +0 -85
- package/dist/ThemeContext-BbBNoFTG.js +0 -735
- package/dist/ThemeContext-Bo-W2WZH.js +0 -1856
- package/dist/ThemeContext-CP3a0jxy.cjs +0 -1855
- package/dist/ThemeContext-Cmr8Ex8H.cjs +0 -734
- package/dist/ThemeContext-CpqYShLq.cjs +0 -324
- package/dist/ThemeContext-D3LzacmG.js +0 -188
- package/dist/ThemeContext-DQUOeziy.cjs +0 -1855
- package/dist/ThemeContext-Du2nE1PL.js +0 -325
- package/dist/ThemeContext-GeEBTJ3q.cjs +0 -1621
- package/dist/ThemeContext-JyLK9B1o.js +0 -1622
- package/dist/ThemeContext-U4dEYc6C.cjs +0 -187
- package/dist/ThemeContext-ept8jhXI.js +0 -1856
- package/dist/VerifyEmailPage-BE-L9mB7.js +0 -2828
- package/dist/VerifyEmailPage-BIBOKV7Z.js +0 -3214
- package/dist/VerifyEmailPage-BJjAMUTW.js +0 -3223
- package/dist/VerifyEmailPage-BRSP-Pwt.cjs +0 -3196
- package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
- package/dist/VerifyEmailPage-BiRm7Nh4.cjs +0 -3213
- package/dist/VerifyEmailPage-Bvfv8HVQ.js +0 -3214
- package/dist/VerifyEmailPage-CR7kb5df.cjs +0 -2827
- package/dist/VerifyEmailPage-C_ihbcth.js +0 -2828
- package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
- package/dist/VerifyEmailPage-CdYPSJoO.js +0 -2828
- package/dist/VerifyEmailPage-CkBYfsNy.cjs +0 -3232
- package/dist/VerifyEmailPage-D-FRj5TU.cjs +0 -3213
- package/dist/VerifyEmailPage-DF2ilhum.cjs +0 -3210
- package/dist/VerifyEmailPage-DMBh4NM9.cjs +0 -2827
- package/dist/VerifyEmailPage-DTtFfC-J.js +0 -3197
- package/dist/VerifyEmailPage-Dt7zgA4w.cjs +0 -2827
- package/dist/VerifyEmailPage-EhudUdqF.js +0 -3211
- package/dist/VerifyEmailPage-RrUApqBN.js +0 -3214
- package/dist/VerifyEmailPage-VoMI7MYH.cjs +0 -3213
- package/dist/VerifyEmailPage-hdB8JQGv.cjs +0 -3213
- package/dist/VerifyEmailPage-vYHbYK3q.js +0 -3214
- package/dist/XerticaOrbe-BCUVSPPB.cjs +0 -1924
- package/dist/XerticaOrbe-BGIB1CTK.js +0 -1355
- package/dist/XerticaOrbe-By8eEvR-.js +0 -1925
- package/dist/XerticaOrbe-FWGjBj0U.cjs +0 -1354
- package/dist/XerticaProvider-AChwphCO.cjs +0 -48
- package/dist/XerticaProvider-AbWlr7Af.cjs +0 -48
- package/dist/XerticaProvider-BITjgC5p.js +0 -39
- package/dist/XerticaProvider-BSyFrmC0.js +0 -49
- package/dist/XerticaProvider-By8q3Roe.cjs +0 -38
- package/dist/XerticaProvider-CUYJZc32.js +0 -49
- package/dist/XerticaProvider-CW9hpCdF.cjs +0 -39
- package/dist/XerticaProvider-CWgby5mY.js +0 -49
- package/dist/XerticaProvider-CWs6EwNa.js +0 -49
- package/dist/XerticaProvider-CiNKjMx1.cjs +0 -48
- package/dist/XerticaProvider-CjQAQPcn.cjs +0 -48
- package/dist/XerticaProvider-D5lLumH-.js +0 -49
- package/dist/XerticaProvider-DUOJg9iX.js +0 -49
- package/dist/XerticaProvider-Dl_b72_l.cjs +0 -51
- package/dist/XerticaProvider-qQUDop71.cjs +0 -48
- package/dist/XerticaProvider-siSt9uG2.js +0 -40
- package/dist/XerticaXLogo-8TTzBjHw.cjs +0 -251
- package/dist/XerticaXLogo-B2svDGZh.cjs +0 -251
- package/dist/XerticaXLogo-BWaag64t.js +0 -252
- package/dist/XerticaXLogo-CU-U-GP4.cjs +0 -251
- package/dist/XerticaXLogo-ChryA6xj.js +0 -252
- package/dist/XerticaXLogo-CowGv7BC.js +0 -252
- package/dist/XerticaXLogo-D8jf0SNv.cjs +0 -214
- package/dist/XerticaXLogo-DHz5SugF.js +0 -252
- package/dist/XerticaXLogo-DTee_y8X.cjs +0 -251
- package/dist/XerticaXLogo-DfUvz-lD.js +0 -243
- package/dist/XerticaXLogo-DzXKZBtG.js +0 -231
- package/dist/XerticaXLogo-fAJMy3H4.js +0 -215
- package/dist/XerticaXLogo-kslQ8Tk_.cjs +0 -251
- package/dist/XerticaXLogo-xWbElCZj.cjs +0 -230
- package/dist/avatar-Cq5_E8r9.cjs +0 -78
- package/dist/avatar-CuYu2MKt.cjs +0 -72
- package/dist/avatar-Cxyofu1H.js +0 -56
- package/dist/avatar-DSBfJMRJ.js +0 -62
- package/dist/breadcrumb-CVzzzqfo.js +0 -103
- package/dist/breadcrumb-DIJ0X3Ot.js +0 -96
- package/dist/breadcrumb-DjSxkjlQ.cjs +0 -95
- package/dist/breadcrumb-DnDlQFg2.cjs +0 -102
- package/dist/button-0CXwCRTm.cjs +0 -85
- package/dist/button-Bnv9SvYK.cjs +0 -79
- package/dist/button-C6uvh0rV.js +0 -63
- package/dist/button-qkz7Icqf.js +0 -69
- package/dist/card-B8-Gl5DL.js +0 -73
- package/dist/card-Bv_c57KU.cjs +0 -72
- package/dist/card-DJTsYhLL.cjs +0 -89
- package/dist/card-fi8zAN-I.js +0 -90
- package/dist/dropdown-menu-B_uEXNc4.cjs +0 -220
- package/dist/dropdown-menu-CFuCssWA.js +0 -204
- package/dist/dropdown-menu-Ze1YZFyc.cjs +0 -247
- package/dist/dropdown-menu-nc_Lvg-u.js +0 -231
- package/dist/google-maps-loader-BVoVhUwA.js +0 -316
- package/dist/google-maps-loader-BqsYL48U.cjs +0 -285
- package/dist/google-maps-loader-DjJaYhV6.cjs +0 -316
- package/dist/google-maps-loader-t2IlYBzw.js +0 -286
- package/dist/index-B7A523O_.js +0 -8
- package/dist/index-BabBx2pa.js +0 -6
- package/dist/index-CkTUgOwX.js +0 -8
- package/dist/index-D3RLKRAs.cjs +0 -7
- package/dist/index-DmHhnb7a.cjs +0 -7
- package/dist/index.umd.js +0 -13712
- package/dist/input-CNFHVKvo.cjs +0 -145
- package/dist/input-CPl84zAx.cjs +0 -151
- package/dist/input-C_UiS2Py.cjs +0 -152
- package/dist/input-D-6IsAca.js +0 -133
- package/dist/input-cc-PTD4R.js +0 -123
- package/dist/input-wPYg0d0P.js +0 -127
- package/dist/progress-BLwqortq.cjs +0 -105
- package/dist/progress-D9mtsf6j.js +0 -89
- package/dist/rich-text-editor-1UW3Y2JK.js +0 -2891
- package/dist/rich-text-editor-BM-LPpTh.js +0 -2902
- package/dist/rich-text-editor-BmsjY03B.js +0 -2949
- package/dist/rich-text-editor-BrdC5evx.js +0 -2244
- package/dist/rich-text-editor-CyggTOLQ.cjs +0 -2908
- package/dist/rich-text-editor-DbV-S7Fi.cjs +0 -2261
- package/dist/rich-text-editor-DoCkKhzk.cjs +0 -2919
- package/dist/rich-text-editor-DqLICivI.js +0 -2832
- package/dist/rich-text-editor-DxO1Hz3a.cjs +0 -2903
- package/dist/rich-text-editor-GS2kpTAK.cjs +0 -2966
- package/dist/routes.d.ts +0 -10
- package/dist/select-Cmb8zF7w.cjs +0 -156
- package/dist/select-CprSNX0z.js +0 -139
- package/dist/select-DT7Zjn42.cjs +0 -162
- package/dist/select-En8DkoaQ.js +0 -145
- package/dist/sidebar-B3EYhli0.cjs +0 -800
- package/dist/sidebar-B9NR0lCe.cjs +0 -800
- package/dist/sidebar-BcJ6LxvX.cjs +0 -733
- package/dist/sidebar-BvF5I2Ue.cjs +0 -800
- package/dist/sidebar-C5B_LHek.cjs +0 -795
- package/dist/sidebar-CA6_ek3f.js +0 -801
- package/dist/sidebar-CRMiBtAi.js +0 -801
- package/dist/sidebar-CVUGHOS_.cjs +0 -756
- package/dist/sidebar-CZ2mWaMM.cjs +0 -800
- package/dist/sidebar-CmvwjnVb.js +0 -757
- package/dist/sidebar-CplprZpM.js +0 -801
- package/dist/sidebar-Dz7bd3zP.js +0 -796
- package/dist/sidebar-KIS0C2JH.js +0 -801
- package/dist/sidebar-OTO_up7Z.js +0 -801
- package/dist/sidebar-WoKvFWCN.js +0 -717
- package/dist/sidebar-zowjejT2.cjs +0 -800
- package/dist/skeleton-4zoHiFJ_.cjs +0 -83
- package/dist/skeleton-C4bHqUBf.js +0 -84
- package/dist/slider-C0JKA9k3.js +0 -56
- package/dist/slider-CPmwzm_3.cjs +0 -73
- package/dist/slider-DcJharR9.cjs +0 -73
- package/dist/slider-Pay3fka2.js +0 -56
- package/dist/sonner-DeUIj0Zg.cjs +0 -63
- package/dist/sonner-g9RIfi35.js +0 -47
- package/dist/tooltip-CNtsL5cB.cjs +0 -71
- package/dist/tooltip-CTyZCD8h.js +0 -55
- package/dist/tooltip-CwgSdy3h.cjs +0 -67
- package/dist/tooltip-D-OrYnKO.js +0 -51
- package/dist/use-audio-player-BJFV24XW.js +0 -188
- package/dist/use-audio-player-Bkh23vQ3.js +0 -177
- package/dist/use-audio-player-Dn1NR9xN.cjs +0 -176
- package/dist/use-audio-player-DyVYlOnR.cjs +0 -187
- package/dist/use-mobile-BB4M_4Ru.cjs +0 -47
- package/dist/use-mobile-CLu9nqGL.js +0 -31
- package/dist/use-mobile-CNwiBNxu.js +0 -33
- package/dist/use-mobile-Dlf74ufz.cjs +0 -49
- package/dist/xertica-assistant-B1IaHXnB.cjs +0 -1894
- package/dist/xertica-assistant-BMqdyRVi.js +0 -2082
- package/dist/xertica-assistant-Bj3vBCq_.cjs +0 -2081
- package/dist/xertica-assistant-CfBCo21g.js +0 -2148
- package/dist/xertica-assistant-DIM_Do1k.js +0 -1866
- package/dist/xertica-assistant-DPsESB6t.js +0 -1878
- package/dist/xertica-assistant-DrsRwla1.cjs +0 -2147
- package/dist/xertica-assistant-Qp3ydksa.cjs +0 -1882
- package/dist/xertica-assistant-gnCJdcZY.js +0 -1866
- package/dist/xertica-assistant-yyrR0JKl.cjs +0 -1882
- package/styles/xertica/app-overrides/scrollbar.css +0 -33
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +0 -78
- package/templates/src/features/home/data/mock.ts +0 -41
- package/templates/src/features/home/hooks/useFeatureCards.ts +0 -20
- package/templates/src/features/home/store/dashboardStore.ts +0 -25
- package/templates/src/features/template/ui/CrudTemplate.tsx +0 -112
- package/templates/src/features/template/ui/DashboardTemplate.tsx +0 -110
- package/templates/src/features/template/ui/FormTemplate.tsx +0 -117
- package/templates/src/features/template/ui/LoginTemplate.tsx +0 -59
- package/templates/src/locales/en/pages/crudTemplate.json +0 -25
- package/templates/src/locales/en/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/en/pages/formTemplate.json +0 -16
- package/templates/src/locales/en/pages/loginTemplate.json +0 -9
- package/templates/src/locales/es/pages/crudTemplate.json +0 -25
- package/templates/src/locales/es/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/es/pages/formTemplate.json +0 -16
- package/templates/src/locales/es/pages/loginTemplate.json +0 -9
- package/templates/src/locales/pt-BR/pages/crudTemplate.json +0 -25
- package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/pt-BR/pages/formTemplate.json +0 -16
- package/templates/src/locales/pt-BR/pages/loginTemplate.json +0 -9
- package/templates/vite.config.d.ts +0 -2
- package/templates/vite.config.js +0 -20
- package/dist/{XerticaXLogo-qBPhwK3g.cjs → LanguageSelector-1cINLJ23.cjs} +80 -80
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** @vitest-environment jsdom */
|
|
2
|
-
import {
|
|
2
|
+
import { screen, fireEvent } from '@testing-library/react';
|
|
3
|
+
import { renderWithProviders as render } from '../../../test/render';
|
|
3
4
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
4
5
|
import { ThemeToggle } from './ThemeToggle';
|
|
5
6
|
import React from 'react';
|
|
@@ -7,6 +8,7 @@ import React from 'react';
|
|
|
7
8
|
describe('ThemeToggle', () => {
|
|
8
9
|
beforeEach(() => {
|
|
9
10
|
document.documentElement.classList.remove('dark');
|
|
11
|
+
window.localStorage.clear();
|
|
10
12
|
});
|
|
11
13
|
|
|
12
14
|
it('toggles theme when clicked', () => {
|
|
@@ -26,7 +28,9 @@ describe('ThemeToggle', () => {
|
|
|
26
28
|
});
|
|
27
29
|
|
|
28
30
|
it('detects initial dark theme', () => {
|
|
29
|
-
|
|
31
|
+
// ThemeProvider resolves its initial theme from localStorage (storageKey
|
|
32
|
+
// 'xertica-theme'), not from a pre-existing class on <html>.
|
|
33
|
+
window.localStorage.setItem('xertica-theme', 'dark');
|
|
30
34
|
render(<ThemeToggle />);
|
|
31
35
|
// Check aria-label or specific icon
|
|
32
36
|
expect(screen.getByLabelText('Mudar para tema claro')).toBeInTheDocument();
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description } from '@storybook/addon-docs/blocks';
|
|
2
|
-
|
|
3
|
-
<Meta title="Brand/XerticaLogo" />
|
|
4
|
-
|
|
5
|
-
<Title>XerticaLogo</Title>
|
|
6
|
-
<Subtitle>Full Xertica.ai wordmark (X-symbol + text) as a responsive SVG.</Subtitle>
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
`XerticaLogo` renders the complete Xertica brand identity — the X symbol alongside the wordmark text. It adapts to different backgrounds through its `variant` prop and supports a direct `color` override for edge cases.
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
import { XerticaLogo } from 'xertica-ui/brand';
|
|
16
|
-
|
|
17
|
-
<XerticaLogo className="h-8 w-auto" />
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Props
|
|
23
|
-
|
|
24
|
-
| Prop | Type | Default | Description |
|
|
25
|
-
|---|---|---|---|
|
|
26
|
-
| `variant` | `'default' \| 'white' \| 'theme'` | `'default'` | Color variant. `default` uses `var(--primary)`, `white` forces white fill, `theme` inherits `currentColor`. |
|
|
27
|
-
| `color` | `string` | — | Direct color override (CSS color value). Overrides `variant`. |
|
|
28
|
-
| `className` | `string` | `'w-auto h-8'` | Additional CSS classes applied to the SVG element. |
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Variants
|
|
33
|
-
|
|
34
|
-
```tsx
|
|
35
|
-
// Light background — primary brand color
|
|
36
|
-
<XerticaLogo variant="default" className="h-8 w-auto" />
|
|
37
|
-
|
|
38
|
-
// Dark background — white fill
|
|
39
|
-
<XerticaLogo variant="white" className="h-8 w-auto" />
|
|
40
|
-
|
|
41
|
-
// Inherits text color from parent (useful on colored backgrounds)
|
|
42
|
-
<XerticaLogo variant="theme" className="h-8 w-auto" />
|
|
43
|
-
|
|
44
|
-
// Direct color override
|
|
45
|
-
<XerticaLogo color="#1D4ED8" className="h-8 w-auto" />
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## AI Best Practices
|
|
51
|
-
|
|
52
|
-
> [!IMPORTANT]
|
|
53
|
-
> - **Variant selection** — Use `default` on light/neutral backgrounds, `white` on dark or colored backgrounds, and `theme` when the logo should inherit the surrounding text color.
|
|
54
|
-
> - **Sizing** — Always set a height (`h-*`) and use `w-auto` to preserve the correct aspect ratio. Never set both width and height to fixed values.
|
|
55
|
-
> - **Icon-only contexts** — Use `XerticaXLogo` instead of `XerticaLogo` in compact spaces such as collapsed sidebars, favicons, or avatars.
|
|
56
|
-
> - **No `dark` or `brand` variants** — These are not valid. Use `default` for brand-color rendering.
|
|
1
|
+
import { Meta, Title, Subtitle, Description } from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Brand/XerticaLogo" />
|
|
4
|
+
|
|
5
|
+
<Title>XerticaLogo</Title>
|
|
6
|
+
<Subtitle>Full Xertica.ai wordmark (X-symbol + text) as a responsive SVG.</Subtitle>
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
`XerticaLogo` renders the complete Xertica brand identity — the X symbol alongside the wordmark text. It adapts to different backgrounds through its `variant` prop and supports a direct `color` override for edge cases.
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { XerticaLogo } from 'xertica-ui/brand';
|
|
16
|
+
|
|
17
|
+
<XerticaLogo className="h-8 w-auto" />
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Props
|
|
23
|
+
|
|
24
|
+
| Prop | Type | Default | Description |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| `variant` | `'default' \| 'white' \| 'theme'` | `'default'` | Color variant. `default` uses `var(--primary)`, `white` forces white fill, `theme` inherits `currentColor`. |
|
|
27
|
+
| `color` | `string` | — | Direct color override (CSS color value). Overrides `variant`. |
|
|
28
|
+
| `className` | `string` | `'w-auto h-8'` | Additional CSS classes applied to the SVG element. |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Variants
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
// Light background — primary brand color
|
|
36
|
+
<XerticaLogo variant="default" className="h-8 w-auto" />
|
|
37
|
+
|
|
38
|
+
// Dark background — white fill
|
|
39
|
+
<XerticaLogo variant="white" className="h-8 w-auto" />
|
|
40
|
+
|
|
41
|
+
// Inherits text color from parent (useful on colored backgrounds)
|
|
42
|
+
<XerticaLogo variant="theme" className="h-8 w-auto" />
|
|
43
|
+
|
|
44
|
+
// Direct color override
|
|
45
|
+
<XerticaLogo color="#1D4ED8" className="h-8 w-auto" />
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## AI Best Practices
|
|
51
|
+
|
|
52
|
+
> [!IMPORTANT]
|
|
53
|
+
> - **Variant selection** — Use `default` on light/neutral backgrounds, `white` on dark or colored backgrounds, and `theme` when the logo should inherit the surrounding text color.
|
|
54
|
+
> - **Sizing** — Always set a height (`h-*`) and use `w-auto` to preserve the correct aspect ratio. Never set both width and height to fixed values.
|
|
55
|
+
> - **Icon-only contexts** — Use `XerticaXLogo` instead of `XerticaLogo` in compact spaces such as collapsed sidebars, favicons, or avatars.
|
|
56
|
+
> - **No `dark` or `brand` variants** — These are not valid. Use `default` for brand-color rendering.
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as XerticaOrbeStories from './xertica-orbe.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={XerticaOrbeStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>The iconic animated "core" of the Xertica AI assistant.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Usage Patterns
|
|
16
|
-
|
|
17
|
-
### Hero Visualization
|
|
18
|
-
Large-scale orbe for splash screens or empty state illustrations.
|
|
19
|
-
|
|
20
|
-
<Canvas>
|
|
21
|
-
<XerticaOrbeStories.Default />
|
|
22
|
-
</Canvas>
|
|
23
|
-
|
|
24
|
-
### Status Indicator
|
|
25
|
-
Compact version used in toolbars or chat headers to represent assistant presence.
|
|
26
|
-
|
|
27
|
-
<Canvas>
|
|
28
|
-
<XerticaOrbeStories.Compact />
|
|
29
|
-
</Canvas>
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## AI Best Practices
|
|
34
|
-
|
|
35
|
-
> [!IMPORTANT]
|
|
36
|
-
> - **Performance** — The animation is powered by Lottie. The component dynamically loads the `bodymovin` library from a CDN on mount to keep the bundle small.
|
|
37
|
-
> - **Interactivity** — The orbe reacts to `mouseenter` and `mouseleave` events by accelerating its spin speed, providing a subtle interactive cue.
|
|
38
|
-
> - **Placement** — Should typically be used in context with the AI assistant or brand-heavy marketing pages.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as XerticaOrbeStories from './xertica-orbe.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={XerticaOrbeStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>The iconic animated "core" of the Xertica AI assistant.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Usage Patterns
|
|
16
|
+
|
|
17
|
+
### Hero Visualization
|
|
18
|
+
Large-scale orbe for splash screens or empty state illustrations.
|
|
19
|
+
|
|
20
|
+
<Canvas>
|
|
21
|
+
<XerticaOrbeStories.Default />
|
|
22
|
+
</Canvas>
|
|
23
|
+
|
|
24
|
+
### Status Indicator
|
|
25
|
+
Compact version used in toolbars or chat headers to represent assistant presence.
|
|
26
|
+
|
|
27
|
+
<Canvas>
|
|
28
|
+
<XerticaOrbeStories.Compact />
|
|
29
|
+
</Canvas>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## AI Best Practices
|
|
34
|
+
|
|
35
|
+
> [!IMPORTANT]
|
|
36
|
+
> - **Performance** — The animation is powered by Lottie. The component dynamically loads the `bodymovin` library from a CDN on mount to keep the bundle small.
|
|
37
|
+
> - **Interactivity** — The orbe reacts to `mouseenter` and `mouseleave` events by accelerating its spin speed, providing a subtle interactive cue.
|
|
38
|
+
> - **Placement** — Should typically be used in context with the AI assistant or brand-heavy marketing pages.
|
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ApiKeyProvider } from '../../../contexts/ApiKeyContext';
|
|
3
|
-
import { AssistenteProvider } from '../../../contexts/AssistenteContext';
|
|
4
|
-
import { BrandColorsProvider } from '../../../contexts/BrandColorsContext';
|
|
5
|
-
import {
|
|
6
|
-
LanguageProvider,
|
|
7
|
-
type Language,
|
|
8
|
-
type LanguageDefinition,
|
|
9
|
-
} from '../../../contexts/LanguageContext';
|
|
10
|
-
import { LayoutProvider } from '../../../contexts/LayoutContext';
|
|
11
|
-
import { ThemeProvider } from '../../../contexts/ThemeContext';
|
|
12
|
-
import { GoogleMapsLoaderProvider } from '../../ui/google-maps-loader';
|
|
13
|
-
import { Toaster } from '../../ui/sonner';
|
|
14
|
-
import { TooltipProvider } from '../../ui/tooltip';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Props for the XerticaProvider component.
|
|
18
|
-
*/
|
|
19
|
-
interface XerticaProviderProps {
|
|
20
|
-
/** The application content to be wrapped by the providers */
|
|
21
|
-
children: React.ReactNode;
|
|
22
|
-
/** Optional Gemini API Key for AI features */
|
|
23
|
-
apiKey?: string;
|
|
24
|
-
/** Optional Google Maps API Key for map features */
|
|
25
|
-
googleMapsApiKey?: string;
|
|
26
|
-
/** Default theme name for branding ('default', 'dark', etc.) */
|
|
27
|
-
defaultBrandTheme?: string;
|
|
28
|
-
/** Color theme ID (e.g. 'xertica-original', 'blue', 'rose') — selects a full ColorTheme preset */
|
|
29
|
-
defaultColorTheme?: string;
|
|
30
|
-
/** Primary brand color hex value */
|
|
31
|
-
primaryColor?: string;
|
|
32
|
-
/** Whether to use custom theme tokens from CSS */
|
|
33
|
-
useCustomTokens?: boolean;
|
|
34
|
-
/** Whether to completely disable dark mode support */
|
|
35
|
-
disableDarkMode?: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* List of languages available to this app. Defaults to the built-in
|
|
38
|
-
* `pt-BR`, `en`, and `es`. Pass a single-element array for a monolingual
|
|
39
|
-
* app (the `LanguageSelector` will auto-hide). Pass extra entries with
|
|
40
|
-
* `resources` to add new locales without editing `i18n.ts`.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```tsx
|
|
44
|
-
* // Monolingual English app — no language picker rendered
|
|
45
|
-
* <XerticaProvider availableLanguages={[{ code: 'en', label: 'English' }]}>
|
|
46
|
-
* ```
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```tsx
|
|
50
|
-
* // Add French alongside built-in locales
|
|
51
|
-
* import fr from './locales/fr.json';
|
|
52
|
-
* import { DEFAULT_LANGUAGES } from 'xertica-ui';
|
|
53
|
-
*
|
|
54
|
-
* <XerticaProvider availableLanguages={[
|
|
55
|
-
* ...DEFAULT_LANGUAGES,
|
|
56
|
-
* { code: 'fr', label: 'Français', shortLabel: 'FR', resources: fr },
|
|
57
|
-
* ]}>
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
availableLanguages?: LanguageDefinition[];
|
|
61
|
-
/** Override the default language. Falls back to the first item in `availableLanguages`. */
|
|
62
|
-
defaultLanguage?: Language;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Universal Context Provider for Xertica UI.
|
|
67
|
-
*
|
|
68
|
-
* @description
|
|
69
|
-
* This component aggregates all necessary context providers. It should be placed at the
|
|
70
|
-
* root of your application, ideally inside the App component.
|
|
71
|
-
*/
|
|
72
|
-
export function XerticaProvider({
|
|
73
|
-
children,
|
|
74
|
-
apiKey,
|
|
75
|
-
googleMapsApiKey,
|
|
76
|
-
defaultBrandTheme,
|
|
77
|
-
defaultColorTheme,
|
|
78
|
-
primaryColor,
|
|
79
|
-
useCustomTokens,
|
|
80
|
-
disableDarkMode,
|
|
81
|
-
availableLanguages,
|
|
82
|
-
defaultLanguage,
|
|
83
|
-
}: XerticaProviderProps) {
|
|
84
|
-
return (
|
|
85
|
-
<ThemeProvider disableDarkMode={disableDarkMode}>
|
|
86
|
-
<BrandColorsProvider
|
|
87
|
-
defaultTheme={defaultColorTheme || defaultBrandTheme}
|
|
88
|
-
primaryColor={primaryColor}
|
|
89
|
-
useCustomTokens={useCustomTokens}
|
|
90
|
-
>
|
|
91
|
-
<LanguageProvider availableLanguages={availableLanguages} defaultLanguage={defaultLanguage}>
|
|
92
|
-
<ApiKeyProvider
|
|
93
|
-
initialApiKey={apiKey}
|
|
94
|
-
initialGeminiApiKey={apiKey}
|
|
95
|
-
initialGoogleMapsApiKey={googleMapsApiKey}
|
|
96
|
-
>
|
|
97
|
-
<GoogleMapsLoaderProvider apiKey={googleMapsApiKey}>
|
|
98
|
-
<AssistenteProvider>
|
|
99
|
-
<LayoutProvider>
|
|
100
|
-
<TooltipProvider>
|
|
101
|
-
{children}
|
|
102
|
-
<Toaster position="top-right" richColors />
|
|
103
|
-
</TooltipProvider>
|
|
104
|
-
</LayoutProvider>
|
|
105
|
-
</AssistenteProvider>
|
|
106
|
-
</GoogleMapsLoaderProvider>
|
|
107
|
-
</ApiKeyProvider>
|
|
108
|
-
</LanguageProvider>
|
|
109
|
-
</BrandColorsProvider>
|
|
110
|
-
</ThemeProvider>
|
|
111
|
-
);
|
|
112
|
-
}
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ApiKeyProvider } from '../../../contexts/ApiKeyContext';
|
|
3
|
+
import { AssistenteProvider } from '../../../contexts/AssistenteContext';
|
|
4
|
+
import { BrandColorsProvider } from '../../../contexts/BrandColorsContext';
|
|
5
|
+
import {
|
|
6
|
+
LanguageProvider,
|
|
7
|
+
type Language,
|
|
8
|
+
type LanguageDefinition,
|
|
9
|
+
} from '../../../contexts/LanguageContext';
|
|
10
|
+
import { LayoutProvider } from '../../../contexts/LayoutContext';
|
|
11
|
+
import { ThemeProvider } from '../../../contexts/ThemeContext';
|
|
12
|
+
import { GoogleMapsLoaderProvider } from '../../ui/google-maps-loader';
|
|
13
|
+
import { Toaster } from '../../ui/sonner';
|
|
14
|
+
import { TooltipProvider } from '../../ui/tooltip';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Props for the XerticaProvider component.
|
|
18
|
+
*/
|
|
19
|
+
interface XerticaProviderProps {
|
|
20
|
+
/** The application content to be wrapped by the providers */
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
/** Optional Gemini API Key for AI features */
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
/** Optional Google Maps API Key for map features */
|
|
25
|
+
googleMapsApiKey?: string;
|
|
26
|
+
/** Default theme name for branding ('default', 'dark', etc.) */
|
|
27
|
+
defaultBrandTheme?: string;
|
|
28
|
+
/** Color theme ID (e.g. 'xertica-original', 'blue', 'rose') — selects a full ColorTheme preset */
|
|
29
|
+
defaultColorTheme?: string;
|
|
30
|
+
/** Primary brand color hex value */
|
|
31
|
+
primaryColor?: string;
|
|
32
|
+
/** Whether to use custom theme tokens from CSS */
|
|
33
|
+
useCustomTokens?: boolean;
|
|
34
|
+
/** Whether to completely disable dark mode support */
|
|
35
|
+
disableDarkMode?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* List of languages available to this app. Defaults to the built-in
|
|
38
|
+
* `pt-BR`, `en`, and `es`. Pass a single-element array for a monolingual
|
|
39
|
+
* app (the `LanguageSelector` will auto-hide). Pass extra entries with
|
|
40
|
+
* `resources` to add new locales without editing `i18n.ts`.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* // Monolingual English app — no language picker rendered
|
|
45
|
+
* <XerticaProvider availableLanguages={[{ code: 'en', label: 'English' }]}>
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* // Add French alongside built-in locales
|
|
51
|
+
* import fr from './locales/fr.json';
|
|
52
|
+
* import { DEFAULT_LANGUAGES } from 'xertica-ui';
|
|
53
|
+
*
|
|
54
|
+
* <XerticaProvider availableLanguages={[
|
|
55
|
+
* ...DEFAULT_LANGUAGES,
|
|
56
|
+
* { code: 'fr', label: 'Français', shortLabel: 'FR', resources: fr },
|
|
57
|
+
* ]}>
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
availableLanguages?: LanguageDefinition[];
|
|
61
|
+
/** Override the default language. Falls back to the first item in `availableLanguages`. */
|
|
62
|
+
defaultLanguage?: Language;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Universal Context Provider for Xertica UI.
|
|
67
|
+
*
|
|
68
|
+
* @description
|
|
69
|
+
* This component aggregates all necessary context providers. It should be placed at the
|
|
70
|
+
* root of your application, ideally inside the App component.
|
|
71
|
+
*/
|
|
72
|
+
export function XerticaProvider({
|
|
73
|
+
children,
|
|
74
|
+
apiKey,
|
|
75
|
+
googleMapsApiKey,
|
|
76
|
+
defaultBrandTheme,
|
|
77
|
+
defaultColorTheme,
|
|
78
|
+
primaryColor,
|
|
79
|
+
useCustomTokens,
|
|
80
|
+
disableDarkMode,
|
|
81
|
+
availableLanguages,
|
|
82
|
+
defaultLanguage,
|
|
83
|
+
}: XerticaProviderProps) {
|
|
84
|
+
return (
|
|
85
|
+
<ThemeProvider disableDarkMode={disableDarkMode}>
|
|
86
|
+
<BrandColorsProvider
|
|
87
|
+
defaultTheme={defaultColorTheme || defaultBrandTheme}
|
|
88
|
+
primaryColor={primaryColor}
|
|
89
|
+
useCustomTokens={useCustomTokens}
|
|
90
|
+
>
|
|
91
|
+
<LanguageProvider availableLanguages={availableLanguages} defaultLanguage={defaultLanguage}>
|
|
92
|
+
<ApiKeyProvider
|
|
93
|
+
initialApiKey={apiKey}
|
|
94
|
+
initialGeminiApiKey={apiKey}
|
|
95
|
+
initialGoogleMapsApiKey={googleMapsApiKey}
|
|
96
|
+
>
|
|
97
|
+
<GoogleMapsLoaderProvider apiKey={googleMapsApiKey}>
|
|
98
|
+
<AssistenteProvider>
|
|
99
|
+
<LayoutProvider>
|
|
100
|
+
<TooltipProvider>
|
|
101
|
+
{children}
|
|
102
|
+
<Toaster position="top-right" richColors />
|
|
103
|
+
</TooltipProvider>
|
|
104
|
+
</LayoutProvider>
|
|
105
|
+
</AssistenteProvider>
|
|
106
|
+
</GoogleMapsLoaderProvider>
|
|
107
|
+
</ApiKeyProvider>
|
|
108
|
+
</LanguageProvider>
|
|
109
|
+
</BrandColorsProvider>
|
|
110
|
+
</ThemeProvider>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
-
|
|
3
|
-
<Meta title="System/XerticaProvider" />
|
|
4
|
-
|
|
5
|
-
<Title>XerticaProvider</Title>
|
|
6
|
-
<Subtitle>The recommended root wrapper for shared Xertica UI services.</Subtitle>
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
The `XerticaProvider` orchestrates the shared services used by complete applications: theme, brand colors, language, API keys, assistant state, layout, tooltips, Google Maps loading, and toast notifications.
|
|
13
|
-
|
|
14
|
-
Most components have local fallbacks and can render without it, but app shells should still place it at the root so state is synchronized across layout, assistant, maps, theme, and notifications.
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { XerticaProvider } from 'xertica-ui/brand';
|
|
18
|
-
import 'xertica-ui/style.css';
|
|
19
|
-
|
|
20
|
-
function App() {
|
|
21
|
-
return (
|
|
22
|
-
<XerticaProvider>
|
|
23
|
-
<YourAppContent />
|
|
24
|
-
</XerticaProvider>
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Props
|
|
32
|
-
|
|
33
|
-
| Prop | Type | Default | Description |
|
|
34
|
-
|---|---|---|---|
|
|
35
|
-
| `children` | `ReactNode` | **Required** | The application content to be wrapped by all providers. |
|
|
36
|
-
| `googleMapsApiKey` | `string` | - | Initial Google Maps JavaScript API key. |
|
|
37
|
-
| `apiKey` | `string` | - | Initial Gemini / AI service API key forwarded to `ApiKeyProvider`. |
|
|
38
|
-
| `defaultBrandTheme` | `string` | - | Initial brand color theme id forwarded to `BrandColorsProvider`. |
|
|
39
|
-
| `primaryColor` | `string` | - | Hex color override for the primary brand token. |
|
|
40
|
-
| `useCustomTokens` | `boolean` | `false` | Skips runtime brand token injection when the host app owns tokens. |
|
|
41
|
-
| `disableDarkMode` | `boolean` | `false` | Forces light mode and disables dark-mode toggling from the theme provider. |
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## What It Provides
|
|
46
|
-
|
|
47
|
-
1. **Theme, Language, Brand, and API Key Contexts**: Centralizes app-level preferences and service keys.
|
|
48
|
-
2. **Assistant Context**: Provides shared assistant conversation state.
|
|
49
|
-
3. **Layout Context**: Enables `useLayout()` for synchronized sidebar and assistant state.
|
|
50
|
-
4. **Tooltip Provider**: Standardizes Radix tooltip behavior across the app.
|
|
51
|
-
5. **Google Maps Loader**: Handles asynchronous loading of the Maps API.
|
|
52
|
-
6. **Toast Notifications**: Injects the `Sonner` toaster into the DOM.
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## AI Best Practices
|
|
57
|
-
|
|
58
|
-
> [!CAUTION]
|
|
59
|
-
> - **Recommended App Wrapper** - Components should render independently when possible, but apps should still use this provider once at the root for synchronized state and shared services.
|
|
60
|
-
> - **Environment Safety** - Never hardcode API keys. Always use environment variables when passing them to the provider.
|
|
61
|
-
> - **Toaster Injection** - The provider automatically injects the `Sonner` toaster. Do not add another `<Toaster />` in your app root unless you specifically need to override it.
|
|
1
|
+
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="System/XerticaProvider" />
|
|
4
|
+
|
|
5
|
+
<Title>XerticaProvider</Title>
|
|
6
|
+
<Subtitle>The recommended root wrapper for shared Xertica UI services.</Subtitle>
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
The `XerticaProvider` orchestrates the shared services used by complete applications: theme, brand colors, language, API keys, assistant state, layout, tooltips, Google Maps loading, and toast notifications.
|
|
13
|
+
|
|
14
|
+
Most components have local fallbacks and can render without it, but app shells should still place it at the root so state is synchronized across layout, assistant, maps, theme, and notifications.
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import { XerticaProvider } from 'xertica-ui/brand';
|
|
18
|
+
import 'xertica-ui/style.css';
|
|
19
|
+
|
|
20
|
+
function App() {
|
|
21
|
+
return (
|
|
22
|
+
<XerticaProvider>
|
|
23
|
+
<YourAppContent />
|
|
24
|
+
</XerticaProvider>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Props
|
|
32
|
+
|
|
33
|
+
| Prop | Type | Default | Description |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| `children` | `ReactNode` | **Required** | The application content to be wrapped by all providers. |
|
|
36
|
+
| `googleMapsApiKey` | `string` | - | Initial Google Maps JavaScript API key. |
|
|
37
|
+
| `apiKey` | `string` | - | Initial Gemini / AI service API key forwarded to `ApiKeyProvider`. |
|
|
38
|
+
| `defaultBrandTheme` | `string` | - | Initial brand color theme id forwarded to `BrandColorsProvider`. |
|
|
39
|
+
| `primaryColor` | `string` | - | Hex color override for the primary brand token. |
|
|
40
|
+
| `useCustomTokens` | `boolean` | `false` | Skips runtime brand token injection when the host app owns tokens. |
|
|
41
|
+
| `disableDarkMode` | `boolean` | `false` | Forces light mode and disables dark-mode toggling from the theme provider. |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## What It Provides
|
|
46
|
+
|
|
47
|
+
1. **Theme, Language, Brand, and API Key Contexts**: Centralizes app-level preferences and service keys.
|
|
48
|
+
2. **Assistant Context**: Provides shared assistant conversation state.
|
|
49
|
+
3. **Layout Context**: Enables `useLayout()` for synchronized sidebar and assistant state.
|
|
50
|
+
4. **Tooltip Provider**: Standardizes Radix tooltip behavior across the app.
|
|
51
|
+
5. **Google Maps Loader**: Handles asynchronous loading of the Maps API.
|
|
52
|
+
6. **Toast Notifications**: Injects the `Sonner` toaster into the DOM.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## AI Best Practices
|
|
57
|
+
|
|
58
|
+
> [!CAUTION]
|
|
59
|
+
> - **Recommended App Wrapper** - Components should render independently when possible, but apps should still use this provider once at the root for synchronized state and shared services.
|
|
60
|
+
> - **Environment Safety** - Never hardcode API keys. Always use environment variables when passing them to the provider.
|
|
61
|
+
> - **Toaster Injection** - The provider automatically injects the `Sonner` toaster. Do not add another `<Toaster />` in your app root unless you specifically need to override it.
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
2
3
|
import { describe, it, expect } from 'vitest';
|
|
3
4
|
import { XerticaProvider } from './XerticaProvider';
|
|
4
5
|
import React from 'react';
|
|
6
|
+
|
|
7
|
+
function withQueryClient(children: React.ReactNode) {
|
|
8
|
+
const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } });
|
|
9
|
+
return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
|
|
10
|
+
}
|
|
5
11
|
import { useApiKey } from '../../../contexts/ApiKeyContext';
|
|
6
12
|
import { useAssistente } from '../../../contexts/AssistenteContext';
|
|
7
13
|
import { useBrandColors } from '../../../contexts/BrandColorsContext';
|
|
@@ -33,9 +39,11 @@ function ProviderProbe() {
|
|
|
33
39
|
describe('XerticaProvider', () => {
|
|
34
40
|
it('renders children correctly', () => {
|
|
35
41
|
render(
|
|
36
|
-
|
|
37
|
-
<
|
|
38
|
-
|
|
42
|
+
withQueryClient(
|
|
43
|
+
<XerticaProvider>
|
|
44
|
+
<div data-testid="provider-child">Child Content</div>
|
|
45
|
+
</XerticaProvider>
|
|
46
|
+
)
|
|
39
47
|
);
|
|
40
48
|
|
|
41
49
|
expect(screen.getByTestId('provider-child')).toBeInTheDocument();
|
|
@@ -43,9 +51,11 @@ describe('XerticaProvider', () => {
|
|
|
43
51
|
|
|
44
52
|
it('renders global components like Toaster', () => {
|
|
45
53
|
const { container } = render(
|
|
46
|
-
|
|
47
|
-
<
|
|
48
|
-
|
|
54
|
+
withQueryClient(
|
|
55
|
+
<XerticaProvider>
|
|
56
|
+
<div>Content</div>
|
|
57
|
+
</XerticaProvider>
|
|
58
|
+
)
|
|
49
59
|
);
|
|
50
60
|
|
|
51
61
|
// Check for sonner's toaster container (it has a specific data attribute or class)
|
|
@@ -56,13 +66,15 @@ describe('XerticaProvider', () => {
|
|
|
56
66
|
|
|
57
67
|
it('composes all public providers and forwards initial keys/theme props', () => {
|
|
58
68
|
render(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
withQueryClient(
|
|
70
|
+
<XerticaProvider
|
|
71
|
+
apiKey="test-gemini-key"
|
|
72
|
+
googleMapsApiKey="test-maps-key"
|
|
73
|
+
defaultBrandTheme="xertica-original"
|
|
74
|
+
>
|
|
75
|
+
<ProviderProbe />
|
|
76
|
+
</XerticaProvider>
|
|
77
|
+
)
|
|
66
78
|
);
|
|
67
79
|
|
|
68
80
|
const probe = screen.getByTestId('provider-probe');
|