xertica-ui 2.1.9 β 2.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +107 -1
- package/README.md +145 -48
- package/assets/xertica-logo.svg +37 -37
- package/assets/xertica-x-logo.svg +20 -20
- package/bin/cli.ts +684 -412
- package/bin/generate-tokens.ts +19 -17
- package/bin/language-config.ts +301 -0
- package/components/assets/xertica-orbe-animation.ts +1139 -781
- package/components/assistant/code-block/CodeBlock.tsx +40 -35
- package/components/assistant/code-block/code-block.stories.tsx +2 -2
- package/components/assistant/code-block/code-block.test.tsx +3 -3
- package/components/assistant/formatted-document/FormattedDocument.tsx +69 -40
- package/components/assistant/formatted-document/formatted-document.stories.tsx +1 -1
- package/components/assistant/formatted-document/formatted-document.test.tsx +4 -4
- package/components/assistant/index.ts +6 -6
- package/components/assistant/markdown-message/MarkdownMessage.tsx +77 -41
- package/components/assistant/modern-chat-input/ModernChatInput.tsx +554 -560
- package/components/assistant/modern-chat-input/modern-chat-input.stories.tsx +17 -17
- package/components/assistant/modern-chat-input/modern-chat-input.test.tsx +21 -14
- package/components/assistant/xertica-assistant/parts/AssistantCollapsedView.tsx +78 -76
- package/components/assistant/xertica-assistant/parts/AssistantConversationList.tsx +87 -85
- package/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.tsx +60 -60
- package/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.tsx +57 -65
- package/components/assistant/xertica-assistant/parts/AssistantHeader.tsx +55 -57
- package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +509 -522
- package/components/assistant/xertica-assistant/parts/AssistantTabBar.tsx +50 -48
- package/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.tsx +31 -31
- package/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.tsx +84 -79
- package/components/assistant/xertica-assistant/types.ts +58 -63
- package/components/assistant/xertica-assistant/use-assistant.ts +541 -508
- package/components/assistant/xertica-assistant/xertica-assistant.stories.tsx +31 -25
- package/components/assistant/xertica-assistant/xertica-assistant.test.tsx +6 -6
- package/components/assistant/xertica-assistant/xertica-assistant.tsx +42 -30
- package/components/blocks/card-patterns/ActivityCard.tsx +100 -72
- package/components/blocks/card-patterns/ActivityCardSkeleton.tsx +56 -0
- package/components/blocks/card-patterns/FeatureCard.tsx +109 -100
- package/components/blocks/card-patterns/FeatureCardSkeleton.tsx +63 -0
- package/components/blocks/card-patterns/NotificationCard.tsx +140 -127
- package/components/blocks/card-patterns/NotificationCardSkeleton.tsx +81 -0
- package/components/blocks/card-patterns/ProfileCard.tsx +114 -84
- package/components/blocks/card-patterns/ProfileCardSkeleton.tsx +69 -0
- package/components/blocks/card-patterns/ProjectCard.tsx +123 -89
- package/components/blocks/card-patterns/ProjectCardSkeleton.tsx +72 -0
- package/components/blocks/card-patterns/QuickActionCard.tsx +68 -62
- package/components/blocks/card-patterns/QuickActionCardSkeleton.tsx +44 -0
- package/components/blocks/card-patterns/card-patterns.mdx +123 -0
- package/components/blocks/card-patterns/card-patterns.stories.tsx +594 -445
- package/components/blocks/card-patterns/index.ts +29 -17
- package/components/blocks/index.ts +1 -1
- package/components/brand/branding/branding.stories.tsx +3 -1
- package/components/brand/index.ts +6 -6
- package/components/brand/language-selector/LanguageSelector.tsx +102 -61
- package/components/brand/language-selector/language-selector.mdx +126 -57
- package/components/brand/language-selector/language-selector.stories.tsx +114 -28
- package/components/brand/language-selector/language-selector.test.tsx +101 -27
- package/components/brand/theme-toggle/ThemeToggle.tsx +10 -6
- package/components/brand/theme-toggle/theme-toggle.test.tsx +3 -3
- package/components/brand/xertica-logo/XerticaLogo.stories.tsx +1 -1
- package/components/brand/xertica-logo/XerticaLogo.tsx +35 -18
- package/components/brand/xertica-logo/xertica-logo.test.tsx +1 -1
- package/components/brand/xertica-orbe/XerticaOrbe.tsx +957 -387
- package/components/brand/xertica-orbe/xertica-orbe.stories.tsx +2 -2
- package/components/brand/xertica-provider/XerticaProvider.tsx +100 -64
- package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
- package/components/brand/xertica-provider/xertica-provider.test.tsx +54 -54
- package/components/brand/xertica-xlogo/XerticaXLogo.stories.tsx +1 -1
- package/components/brand/xertica-xlogo/XerticaXLogo.tsx +14 -18
- package/components/examples/ApiKeyMapExample.tsx +59 -60
- package/components/examples/DrawingMapExample.tsx +130 -104
- package/components/examples/FilterableMapExample.tsx +40 -32
- package/components/examples/LocationPickerExample.tsx +65 -45
- package/components/examples/MapExamples.tsx +268 -282
- package/components/examples/MapGmpExample.tsx +151 -136
- package/components/examples/MapShowcase.tsx +56 -56
- package/components/examples/RouteMapExamples.tsx +21 -21
- package/components/examples/SidebarLogoExample.tsx +49 -49
- package/components/examples/SimpleFilterableMap.tsx +219 -192
- package/components/examples/index.ts +45 -52
- package/components/figma/ImageWithFallback.tsx +27 -27
- package/components/hooks/index.ts +4 -1
- package/components/hooks/use-layout-shortcuts.ts +12 -15
- package/components/index.ts +20 -7
- package/components/layout/header/header.stories.tsx +18 -7
- package/components/layout/header/header.test.tsx +13 -14
- package/components/layout/header/header.tsx +292 -279
- package/components/layout/index.ts +2 -2
- package/components/layout/sidebar/sidebar.mdx +1 -1
- package/components/layout/sidebar/sidebar.stories.tsx +159 -83
- package/components/layout/sidebar/sidebar.test.tsx +20 -17
- package/components/layout/sidebar/sidebar.tsx +174 -161
- package/components/layout/sidebar/use-sidebar.ts +84 -84
- package/components/media/FloatingMediaWrapper.tsx +171 -116
- package/components/media/audio-player/AudioPlayer.stories.tsx +16 -12
- package/components/media/audio-player/AudioPlayer.test.tsx +3 -3
- package/components/media/audio-player/AudioPlayer.tsx +264 -85
- package/components/media/audio-player/use-audio-player.ts +277 -270
- package/components/media/index.ts +3 -3
- package/components/media/video-player/VideoPlayer.stories.tsx +12 -8
- package/components/media/video-player/VideoPlayer.tsx +33 -20
- package/components/pages/forgot-password-page/ForgotPasswordPage.stories.tsx +1 -1
- package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +27 -19
- package/components/pages/forgot-password-page/forgot-password-page.test.tsx +11 -8
- package/components/pages/home-content/HomeContent.stories.tsx +6 -2
- package/components/pages/home-content/HomeContent.tsx +68 -75
- package/components/pages/home-content/home-content.mdx +62 -62
- package/components/pages/home-page/HomePage.stories.tsx +39 -39
- package/components/pages/home-page/HomePage.tsx +24 -44
- package/components/pages/home-page/home-page.mdx +53 -53
- package/components/pages/home-page/home-page.test.tsx +21 -10
- package/components/pages/index.ts +8 -8
- package/components/pages/login-page/LoginPage.stories.tsx +1 -1
- package/components/pages/login-page/LoginPage.tsx +41 -41
- package/components/pages/login-page/login-page.test.tsx +15 -12
- package/components/pages/reset-password-page/ResetPasswordPage.stories.tsx +1 -1
- package/components/pages/reset-password-page/ResetPasswordPage.tsx +32 -39
- package/components/pages/template-content/TemplateContent.stories.tsx +6 -2
- package/components/pages/template-content/TemplateContent.tsx +406 -187
- package/components/pages/template-content/template-content.mdx +61 -61
- package/components/pages/template-page/TemplatePage.stories.tsx +39 -39
- package/components/pages/template-page/TemplatePage.tsx +14 -25
- package/components/pages/template-page/template-page.mdx +53 -53
- package/components/pages/template-page/template-page.test.tsx +21 -8
- package/components/pages/verify-email-page/VerifyEmailPage.stories.tsx +2 -2
- package/components/pages/verify-email-page/VerifyEmailPage.tsx +38 -30
- package/components/public-api-smoke.test.tsx +52 -52
- package/components/shared/CustomTooltipContent.tsx +24 -28
- package/components/shared/assistant-utils.test.ts +1 -3
- package/components/shared/assistant-utils.ts +208 -171
- package/components/shared/error-boundary.stories.tsx +132 -0
- package/components/shared/error-boundary.tsx +154 -0
- package/components/shared/error-fallbacks.tsx +226 -0
- package/components/shared/navigation.ts +35 -0
- package/components/shared/use-mobile.ts +8 -10
- package/components/shared/utils.ts +2 -2
- package/components/ui/accordion/accordion.mdx +8 -8
- package/components/ui/accordion/accordion.stories.tsx +54 -65
- package/components/ui/accordion/accordion.test.tsx +5 -10
- package/components/ui/accordion/accordion.tsx +10 -12
- package/components/ui/alert/alert.mdx +8 -8
- package/components/ui/alert/alert.stories.tsx +8 -12
- package/components/ui/alert/alert.test.tsx +4 -6
- package/components/ui/alert/alert.tsx +58 -81
- package/components/ui/alert-dialog/alert-dialog.mdx +8 -8
- package/components/ui/alert-dialog/alert-dialog.stories.tsx +4 -4
- package/components/ui/alert-dialog/alert-dialog.test.tsx +3 -1
- package/components/ui/alert-dialog/alert-dialog.tsx +22 -44
- package/components/ui/aspect-ratio/aspect-ratio.mdx +8 -8
- package/components/ui/aspect-ratio/aspect-ratio.stories.tsx +3 -3
- package/components/ui/aspect-ratio/aspect-ratio.tsx +3 -5
- package/components/ui/assistant-chart/AssistantChart.tsx +5 -5
- package/components/ui/assistant-chart/assistant-chart.mdx +8 -8
- package/components/ui/assistant-chart/assistant-chart.stories.tsx +14 -14
- package/components/ui/assistant-chart/assistant-chart.test.tsx +9 -5
- package/components/ui/avatar/avatar.mdx +8 -8
- package/components/ui/avatar/avatar.stories.tsx +1 -1
- package/components/ui/avatar/avatar.tsx +17 -23
- package/components/ui/badge/badge.mdx +8 -8
- package/components/ui/badge/badge.stories.tsx +1 -1
- package/components/ui/badge/badge.tsx +18 -28
- package/components/ui/breadcrumb/breadcrumb.mdx +8 -8
- package/components/ui/breadcrumb/breadcrumb.stories.tsx +7 -2
- package/components/ui/breadcrumb/breadcrumb.tsx +19 -26
- package/components/ui/button/button.mdx +8 -8
- package/components/ui/button/button.stories.tsx +31 -9
- package/components/ui/button/button.tsx +46 -57
- package/components/ui/calendar/calendar.mdx +8 -8
- package/components/ui/calendar/calendar.stories.tsx +6 -6
- package/components/ui/calendar/calendar.test.tsx +5 -5
- package/components/ui/calendar/calendar.tsx +230 -258
- package/components/ui/card/card.mdx +8 -8
- package/components/ui/card/card.stories.tsx +301 -245
- package/components/ui/card/card.tsx +19 -40
- package/components/ui/carousel/carousel.mdx +8 -8
- package/components/ui/carousel/carousel.stories.tsx +3 -3
- package/components/ui/carousel/carousel.test.tsx +2 -1
- package/components/ui/carousel/carousel.tsx +41 -52
- package/components/ui/chart/chart.mdx +8 -8
- package/components/ui/chart/chart.stories.tsx +1328 -1303
- package/components/ui/chart/chart.test.tsx +7 -12
- package/components/ui/chart/chart.tsx +335 -468
- package/components/ui/checkbox/checkbox.mdx +8 -8
- package/components/ui/checkbox/checkbox.stories.tsx +31 -25
- package/components/ui/checkbox/checkbox.test.tsx +3 -3
- package/components/ui/checkbox/checkbox.tsx +14 -14
- package/components/ui/collapsible/collapsible.mdx +8 -8
- package/components/ui/collapsible/collapsible.stories.tsx +8 -23
- package/components/ui/collapsible/collapsible.test.tsx +3 -3
- package/components/ui/collapsible/collapsible.tsx +5 -17
- package/components/ui/command/command.mdx +8 -8
- package/components/ui/command/command.stories.tsx +8 -15
- package/components/ui/command/command.tsx +24 -53
- package/components/ui/context-menu/context-menu.mdx +8 -8
- package/components/ui/context-menu/context-menu.stories.tsx +3 -5
- package/components/ui/context-menu/context-menu.test.tsx +4 -2
- package/components/ui/context-menu/context-menu.tsx +27 -55
- package/components/ui/dialog/dialog.mdx +8 -8
- package/components/ui/dialog/dialog.stories.tsx +12 -12
- package/components/ui/dialog/dialog.test.tsx +3 -1
- package/components/ui/dialog/dialog.tsx +45 -57
- package/components/ui/drawer/drawer.mdx +8 -8
- package/components/ui/drawer/drawer.stories.tsx +4 -8
- package/components/ui/drawer/drawer.test.tsx +4 -2
- package/components/ui/drawer/drawer.tsx +26 -38
- package/components/ui/dropdown-menu/dropdown-menu.mdx +8 -8
- package/components/ui/dropdown-menu/dropdown-menu.stories.tsx +2 -2
- package/components/ui/dropdown-menu/dropdown-menu.test.tsx +3 -1
- package/components/ui/dropdown-menu/dropdown-menu.tsx +27 -56
- package/components/ui/empty/empty.mdx +8 -8
- package/components/ui/empty/empty.stories.tsx +2 -9
- package/components/ui/empty/empty.test.tsx +1 -7
- package/components/ui/empty/empty.tsx +58 -74
- package/components/ui/file-upload/file-upload.mdx +8 -8
- package/components/ui/file-upload/file-upload.stories.tsx +10 -19
- package/components/ui/file-upload/file-upload.test.tsx +11 -11
- package/components/ui/file-upload/file-upload.tsx +33 -28
- package/components/ui/file-upload/use-file-upload.ts +144 -148
- package/components/ui/form/form.stories.tsx +6 -8
- package/components/ui/form/form.test.tsx +9 -14
- package/components/ui/form/form.tsx +25 -70
- package/components/ui/google-maps-loader/google-maps-loader.test.tsx +3 -3
- package/components/ui/google-maps-loader/google-maps-loader.tsx +46 -26
- package/components/ui/hover-card/hover-card.mdx +8 -8
- package/components/ui/hover-card/hover-card.stories.tsx +10 -16
- package/components/ui/hover-card/hover-card.test.tsx +5 -7
- package/components/ui/hover-card/hover-card.tsx +11 -17
- package/components/ui/index.ts +243 -156
- package/components/ui/input/input.mdx +8 -8
- package/components/ui/input/input.stories.tsx +26 -16
- package/components/ui/input/input.tsx +16 -16
- package/components/ui/input-otp/input-otp.mdx +8 -8
- package/components/ui/input-otp/input-otp.stories.tsx +22 -23
- package/components/ui/input-otp/input-otp.test.tsx +1 -6
- package/components/ui/input-otp/input-otp.tsx +19 -22
- package/components/ui/label/label.mdx +8 -8
- package/components/ui/label/label.stories.tsx +2 -2
- package/components/ui/label/label.tsx +12 -12
- package/components/ui/map/map.mdx +8 -8
- package/components/ui/map/map.stories.tsx +59 -59
- package/components/ui/map/map.test.tsx +16 -8
- package/components/ui/map/map.tsx +103 -68
- package/components/ui/map/mock.test.tsx +1 -1
- package/components/ui/map-config/map-config.ts +10 -4
- package/components/ui/map-layers/map-layers.test.tsx +15 -11
- package/components/ui/map-layers/map-layers.tsx +5 -8
- package/components/ui/map.exports/map.exports.ts +5 -5
- package/components/ui/menubar/menubar.mdx +8 -8
- package/components/ui/menubar/menubar.stories.tsx +1 -1
- package/components/ui/menubar/menubar.test.tsx +3 -1
- package/components/ui/menubar/menubar.tsx +33 -57
- package/components/ui/navigation-menu/navigation-menu.mdx +8 -8
- package/components/ui/navigation-menu/navigation-menu.stories.tsx +33 -35
- package/components/ui/navigation-menu/navigation-menu.tsx +16 -25
- package/components/ui/notification-badge/notification-badge.mdx +8 -8
- package/components/ui/notification-badge/notification-badge.stories.tsx +9 -18
- package/components/ui/notification-badge/notification-badge.tsx +39 -36
- package/components/ui/page-header/page-header.stories.tsx +5 -5
- package/components/ui/page-header/page-header.test.tsx +6 -11
- package/components/ui/page-header/page-header.tsx +22 -29
- package/components/ui/pagination/pagination.mdx +8 -8
- package/components/ui/pagination/pagination.stories.tsx +19 -9
- package/components/ui/pagination/pagination.test.tsx +3 -1
- package/components/ui/pagination/pagination.tsx +22 -32
- package/components/ui/pagination/use-pagination.ts +137 -135
- package/components/ui/popover/popover.mdx +8 -8
- package/components/ui/popover/popover.stories.tsx +3 -5
- package/components/ui/popover/popover.test.tsx +5 -7
- package/components/ui/popover/popover.tsx +11 -17
- package/components/ui/progress/progress.mdx +8 -8
- package/components/ui/progress/progress.stories.tsx +3 -3
- package/components/ui/progress/progress.tsx +20 -20
- package/components/ui/radio-group/radio-group.mdx +8 -8
- package/components/ui/radio-group/radio-group.stories.tsx +14 -6
- package/components/ui/radio-group/radio-group.tsx +31 -30
- package/components/ui/rating/rating.mdx +8 -8
- package/components/ui/rating/rating.stories.tsx +3 -3
- package/components/ui/rating/rating.test.tsx +2 -2
- package/components/ui/rating/rating.tsx +33 -33
- package/components/ui/resizable/resizable.mdx +8 -8
- package/components/ui/resizable/resizable.stories.tsx +9 -22
- package/components/ui/resizable/resizable.test.tsx +7 -4
- package/components/ui/resizable/resizable.tsx +179 -144
- package/components/ui/rich-text-editor/index.ts +5 -1
- package/components/ui/rich-text-editor/rich-text-editor.stories.tsx +54 -26
- package/components/ui/rich-text-editor/rich-text-editor.test.tsx +8 -6
- package/components/ui/rich-text-editor/rich-text-editor.tsx +380 -193
- package/components/ui/rich-text-editor/use-rich-text-editor.ts +380 -369
- package/components/ui/route-map/route-map.mdx +8 -8
- package/components/ui/route-map/route-map.stories.tsx +7 -13
- package/components/ui/route-map/route-map.test.tsx +38 -25
- package/components/ui/route-map/route-map.tsx +108 -60
- package/components/ui/scroll-area/scroll-area.mdx +8 -8
- package/components/ui/scroll-area/scroll-area.stories.tsx +5 -9
- package/components/ui/scroll-area/scroll-area.tsx +11 -13
- package/components/ui/search/search.mdx +8 -8
- package/components/ui/search/search.stories.tsx +13 -14
- package/components/ui/search/search.test.tsx +8 -8
- package/components/ui/search/search.tsx +45 -39
- package/components/ui/select/select.mdx +8 -8
- package/components/ui/select/select.stories.tsx +16 -10
- package/components/ui/select/select.test.tsx +4 -8
- package/components/ui/select/select.tsx +44 -52
- package/components/ui/separator/separator.mdx +8 -8
- package/components/ui/separator/separator.stories.tsx +3 -5
- package/components/ui/separator/separator.tsx +8 -8
- package/components/ui/sheet/sheet.mdx +8 -8
- package/components/ui/sheet/sheet.stories.tsx +4 -6
- package/components/ui/sheet/sheet.test.tsx +3 -1
- package/components/ui/sheet/sheet.tsx +33 -46
- package/components/ui/simple-map/simple-map.mdx +8 -8
- package/components/ui/simple-map/simple-map.stories.tsx +4 -8
- package/components/ui/simple-map/simple-map.test.tsx +4 -15
- package/components/ui/simple-map/simple-map.tsx +13 -19
- package/components/ui/skeleton/skeleton.mdx +8 -8
- package/components/ui/skeleton/skeleton.stories.tsx +2 -2
- package/components/ui/skeleton/skeleton.tsx +3 -3
- package/components/ui/slider/slider.mdx +8 -8
- package/components/ui/slider/slider.stories.tsx +3 -3
- package/components/ui/slider/slider.tsx +15 -20
- package/components/ui/sonner/sonner.mdx +8 -8
- package/components/ui/sonner/sonner.stories.tsx +7 -13
- package/components/ui/sonner/sonner.tsx +21 -16
- package/components/ui/stats-card/index.ts +1 -0
- package/components/ui/stats-card/stats-card-skeleton.tsx +62 -0
- package/components/ui/stats-card/stats-card.mdx +8 -8
- package/components/ui/stats-card/stats-card.stories.tsx +34 -12
- package/components/ui/stats-card/stats-card.test.tsx +8 -12
- package/components/ui/stats-card/stats-card.tsx +16 -22
- package/components/ui/stepper/stepper.mdx +8 -8
- package/components/ui/stepper/stepper.stories.tsx +31 -34
- package/components/ui/stepper/stepper.tsx +63 -40
- package/components/ui/stepper/use-stepper.ts +106 -104
- package/components/ui/switch/switch.mdx +8 -8
- package/components/ui/switch/switch.stories.tsx +31 -25
- package/components/ui/switch/switch.tsx +20 -20
- package/components/ui/table/table.mdx +8 -8
- package/components/ui/table/table.stories.tsx +30 -25
- package/components/ui/table/table.test.tsx +1 -8
- package/components/ui/table/table.tsx +24 -48
- package/components/ui/tabs/tabs.mdx +8 -8
- package/components/ui/tabs/tabs.stories.tsx +38 -32
- package/components/ui/tabs/tabs.test.tsx +1 -1
- package/components/ui/tabs/tabs.tsx +14 -26
- package/components/ui/textarea/textarea.mdx +8 -8
- package/components/ui/textarea/textarea.stories.tsx +5 -3
- package/components/ui/textarea/textarea.test.tsx +2 -2
- package/components/ui/textarea/textarea.tsx +15 -15
- package/components/ui/timeline/timeline.mdx +8 -8
- package/components/ui/timeline/timeline.stories.tsx +16 -6
- package/components/ui/timeline/timeline.tsx +49 -81
- package/components/ui/toggle/toggle.mdx +8 -8
- package/components/ui/toggle/toggle.stories.tsx +4 -4
- package/components/ui/toggle/toggle.test.tsx +1 -1
- package/components/ui/toggle/toggle.tsx +17 -19
- package/components/ui/toggle-group/toggle-group.mdx +8 -8
- package/components/ui/toggle-group/toggle-group.stories.tsx +6 -6
- package/components/ui/toggle-group/toggle-group.test.tsx +1 -1
- package/components/ui/toggle-group/toggle-group.tsx +20 -24
- package/components/ui/tooltip/tooltip.mdx +8 -8
- package/components/ui/tooltip/tooltip.stories.tsx +5 -4
- package/components/ui/tooltip/tooltip.test.tsx +3 -1
- package/components/ui/tooltip/tooltip.tsx +9 -13
- package/components/ui/tree-view/tree-view.mdx +8 -8
- package/components/ui/tree-view/tree-view.stories.tsx +36 -48
- package/components/ui/tree-view/tree-view.test.tsx +6 -6
- package/components/ui/tree-view/tree-view.tsx +47 -23
- package/components/ui/tree-view/use-tree-view.ts +200 -200
- package/components.json +892 -1512
- package/contexts/ApiKeyContext.test.tsx +3 -3
- package/contexts/ApiKeyContext.tsx +94 -90
- package/contexts/AssistenteContext.test.tsx +1 -1
- package/contexts/AssistenteContext.tsx +11 -5
- package/contexts/AuthContext.tsx +118 -0
- package/contexts/BrandColorsContext.test.tsx +3 -3
- package/contexts/BrandColorsContext.tsx +32 -17
- package/contexts/LanguageContext.test.tsx +121 -29
- package/contexts/LanguageContext.tsx +247 -35
- package/contexts/LayoutContext.test.tsx +15 -15
- package/contexts/LayoutContext.tsx +104 -90
- package/contexts/ThemeContext.test.tsx +7 -5
- package/contexts/ThemeContext.tsx +34 -33
- package/contexts/index.ts +1 -0
- package/contexts/theme-data.ts +319 -319
- package/dist/{AssistantChart-DoZCyS5r.cjs β AssistantChart-9w31gdAb.cjs} +4 -4
- package/dist/{AssistantChart-CldVCVDe.cjs β AssistantChart-BAudAfne.cjs} +5 -5
- package/dist/{AssistantChart-Bdd44uBn.cjs β AssistantChart-BAx9VQvb.cjs} +127 -388
- package/dist/{AssistantChart-Cu3m7RBo.js β AssistantChart-BP8upjMk.js} +5 -5
- package/dist/{use-mobile-BXuYROXM.js β AssistantChart-BXU1ACnh.js} +958 -1671
- package/dist/{AssistantChart-CFhDdGyU.js β AssistantChart-CVko2A1W.js} +130 -391
- package/dist/{AssistantChart-C_hwFRRr.js β AssistantChart-CVzmmhx4.js} +4 -4
- package/dist/AssistantChart-CeU2dIb6.js +3469 -0
- package/dist/{use-mobile-CG2-SdXV.cjs β AssistantChart-D0A1FPYt.cjs} +980 -1700
- package/dist/AssistantChart-DO5UuX4J.cjs +3495 -0
- package/dist/{AudioPlayer-IAU5q5T1.cjs β AudioPlayer-1ypwE2Wh.cjs} +1 -1
- package/dist/AudioPlayer-BJ2IuRQW.cjs +1275 -0
- package/dist/AudioPlayer-BWDW6TN9.cjs +1279 -0
- package/dist/AudioPlayer-CM962GEh.js +1280 -0
- package/dist/{AudioPlayer-CySJIyvL.js β AudioPlayer-DuKXrCfy.js} +1 -1
- package/dist/AudioPlayer-Xxma6_-H.js +1276 -0
- package/dist/{ThemeContext-BoH4NLfN.js β BrandColorsContext-DLVJgtmH.js} +77 -145
- package/dist/{ThemeContext-r69W20Xg.cjs β BrandColorsContext-GUyFmkX0.cjs} +77 -145
- package/dist/CodeBlock-C2ZUXt8V.js +219 -0
- package/dist/CodeBlock-C5oYnLQp.cjs +218 -0
- package/dist/CodeBlock-CV6dtsTM.cjs +220 -0
- package/dist/CodeBlock-CjeFavqV.js +221 -0
- package/dist/CustomTooltipContent-BT6brkVJ.cjs +49 -0
- package/dist/CustomTooltipContent-CfOfikhq.js +33 -0
- package/dist/{FeatureCard-DbHWCb4E.js β FeatureCard-9GhnlgL3.js} +46 -11
- package/dist/FeatureCard-Cfs6Ishq.js +485 -0
- package/dist/{FeatureCard-CxC-7C-C.cjs β FeatureCard-Dkp-xmzM.cjs} +72 -37
- package/dist/FeatureCard-ie3L8Fpr.cjs +484 -0
- package/dist/FeatureCardSkeleton-CAgu8stE.js +27 -0
- package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +26 -0
- package/dist/{LanguageContext-CS14yCpi.js β LanguageContext-BwhwC3G2.js} +2 -2
- package/dist/{LanguageContext-B_KFTCzT.cjs β LanguageContext-DvUt5jBg.cjs} +2 -2
- package/dist/{LayoutContext-BvK-ggDa.cjs β LayoutContext-C4kKN9RV.cjs} +35 -38
- package/dist/{LayoutContext-BAql6ZRY.js β LayoutContext-CGEe1oPq.js} +35 -38
- package/dist/{ThemeContext-C2EwAPDt.js β ThemeContext-BbBNoFTG.js} +2 -2
- package/dist/{ThemeContext-vTjumZeM.cjs β ThemeContext-Cmr8Ex8H.cjs} +2 -2
- package/dist/ThemeContext-CpqYShLq.cjs +324 -0
- package/dist/ThemeContext-D3LzacmG.js +188 -0
- package/dist/ThemeContext-Du2nE1PL.js +325 -0
- package/dist/ThemeContext-U4dEYc6C.cjs +187 -0
- package/dist/{VerifyEmailPage-C0c2e5n0.js β VerifyEmailPage-BE-L9mB7.js} +7 -7
- package/dist/VerifyEmailPage-BRSP-Pwt.cjs +3196 -0
- package/dist/{VerifyEmailPage-Cwi3kbol.cjs β VerifyEmailPage-Bae2cBXT.cjs} +7 -7
- package/dist/{VerifyEmailPage-s-1X3LDJ.cjs β VerifyEmailPage-CR7kb5df.cjs} +148 -147
- package/dist/{VerifyEmailPage-MTD7AG1Z.js β VerifyEmailPage-C_ihbcth.js} +4 -4
- package/dist/{VerifyEmailPage-CqKsR2v8.js β VerifyEmailPage-CbgjOF0v.js} +11 -10
- package/dist/{VerifyEmailPage-DvMLZgFt.js β VerifyEmailPage-CdYPSJoO.js} +1 -1
- package/dist/{VerifyEmailPage-DjQKRlUS.cjs β VerifyEmailPage-DF2ilhum.cjs} +1053 -667
- package/dist/{VerifyEmailPage-CYXtbKi3.cjs β VerifyEmailPage-DMBh4NM9.cjs} +1 -1
- package/dist/VerifyEmailPage-DTtFfC-J.js +3197 -0
- package/dist/{VerifyEmailPage-CFLMls1p.cjs β VerifyEmailPage-Dt7zgA4w.cjs} +4 -4
- package/dist/VerifyEmailPage-EhudUdqF.js +3211 -0
- package/dist/{XerticaOrbe-KL1RBHzw.cjs β XerticaOrbe-BCUVSPPB.cjs} +656 -86
- package/dist/{XerticaOrbe-zwS1p2a8.js β XerticaOrbe-By8eEvR-.js} +655 -85
- package/dist/{XerticaProvider-cI9hSs27.cjs β XerticaProvider-B8CaV7xu.cjs} +8 -7
- package/dist/{XerticaProvider-CEoWMTxu.js β XerticaProvider-BITjgC5p.js} +2 -2
- package/dist/{XerticaProvider-CllrbMEJ.cjs β XerticaProvider-By8q3Roe.cjs} +2 -2
- package/dist/{XerticaProvider-ET0ihewn.cjs β XerticaProvider-CW9hpCdF.cjs} +2 -2
- package/dist/XerticaProvider-CWgby5mY.js +49 -0
- package/dist/XerticaProvider-CjQAQPcn.cjs +48 -0
- package/dist/{XerticaProvider-DDuiIcKo.js β XerticaProvider-DQtvJU7m.js} +5 -4
- package/dist/{XerticaProvider-B7EVH-NF.js β XerticaProvider-siSt9uG2.js} +2 -2
- package/dist/XerticaXLogo-CU-U-GP4.cjs +251 -0
- package/dist/{LanguageSelector-D6uacAIM.cjs β XerticaXLogo-CziKMQil.cjs} +123 -111
- package/dist/XerticaXLogo-DHz5SugF.js +252 -0
- package/dist/{LanguageSelector-B5YfbHra.js β XerticaXLogo-DfUvz-lD.js} +123 -111
- package/dist/alert-dialog-B4M3vQKS.cjs +875 -0
- package/dist/alert-dialog-KpoabzJb.js +852 -0
- package/dist/{alert-dialog-s-vmNkJ_.js β alert-dialog-iDe5VE5o.js} +3 -3
- package/dist/{alert-dialog-DSKByiKZ.cjs β alert-dialog-yckpaOpy.cjs} +3 -3
- package/dist/assistant.cjs.js +18 -4
- package/dist/assistant.es.js +18 -4
- package/dist/avatar-CuYu2MKt.cjs +72 -0
- package/dist/avatar-Cxyofu1H.js +56 -0
- package/dist/blocks.cjs.js +8 -1
- package/dist/blocks.es.js +10 -3
- package/dist/brand.cjs.js +3 -3
- package/dist/brand.es.js +3 -3
- package/dist/{breadcrumb-CqJ7bHY5.js β breadcrumb-DIJ0X3Ot.js} +9 -74
- package/dist/breadcrumb-DjSxkjlQ.cjs +95 -0
- package/dist/{tooltip-Ded96neP.cjs β button-Bnv9SvYK.cjs} +19 -77
- package/dist/button-C6uvh0rV.js +63 -0
- package/dist/card-B8-Gl5DL.js +73 -0
- package/dist/card-Bv_c57KU.cjs +72 -0
- package/dist/cli.js +548 -155
- package/dist/components/assistant/code-block/CodeBlock.d.ts +1 -1
- package/dist/components/assistant/formatted-document/FormattedDocument.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ActivityCard.d.ts +2 -2
- package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +19 -0
- package/dist/components/blocks/card-patterns/FeatureCard.d.ts +6 -6
- package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +18 -0
- package/dist/components/blocks/card-patterns/NotificationCard.d.ts +2 -2
- package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +21 -0
- package/dist/components/blocks/card-patterns/ProfileCard.d.ts +2 -2
- package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +20 -0
- package/dist/components/blocks/card-patterns/ProjectCard.d.ts +2 -2
- package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +18 -0
- package/dist/components/blocks/card-patterns/QuickActionCard.d.ts +5 -5
- package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +16 -0
- package/dist/components/blocks/card-patterns/index.d.ts +24 -12
- package/dist/components/blocks/index.d.ts +1 -1
- package/dist/components/brand/language-selector/LanguageSelector.d.ts +27 -7
- package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +1 -1
- package/dist/components/brand/xertica-logo/XerticaLogo.d.ts +1 -1
- package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +29 -1
- package/dist/components/brand/xertica-xlogo/XerticaXLogo.d.ts +1 -1
- package/dist/components/hooks/index.d.ts +1 -1
- package/dist/components/index.d.ts +4 -1
- package/dist/components/layout/sidebar/sidebar.d.ts +6 -6
- package/dist/components/layout/sidebar/use-sidebar.d.ts +1 -1
- package/dist/components/media/video-player/VideoPlayer.d.ts +1 -1
- package/dist/components/pages/home-content/HomeContent.d.ts +6 -20
- package/dist/components/pages/home-page/HomePage.d.ts +7 -19
- package/dist/components/pages/template-content/TemplateContent.d.ts +1 -11
- package/dist/components/pages/template-page/TemplatePage.d.ts +2 -14
- package/dist/components/shared/error-boundary.d.ts +60 -0
- package/dist/components/shared/error-fallbacks.d.ts +16 -0
- package/dist/components/shared/navigation.d.ts +14 -0
- package/dist/components/shared/utils.d.ts +1 -1
- package/dist/components/ui/accordion/accordion.d.ts +2 -2
- package/dist/components/ui/alert/alert.d.ts +17 -17
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts +4 -4
- package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +1 -1
- package/dist/components/ui/assistant-chart/AssistantChart.d.ts +1 -1
- package/dist/components/ui/avatar/avatar.d.ts +3 -3
- package/dist/components/ui/badge/badge.d.ts +3 -3
- package/dist/components/ui/breadcrumb/breadcrumb.d.ts +8 -8
- package/dist/components/ui/button/button.d.ts +3 -3
- package/dist/components/ui/calendar/calendar.d.ts +4 -4
- package/dist/components/ui/card/card.d.ts +9 -9
- package/dist/components/ui/carousel/carousel.d.ts +7 -7
- package/dist/components/ui/chart/chart.d.ts +18 -18
- package/dist/components/ui/checkbox/checkbox.d.ts +2 -2
- package/dist/components/ui/collapsible/collapsible.d.ts +1 -1
- package/dist/components/ui/command/command.d.ts +4 -4
- package/dist/components/ui/context-menu/context-menu.d.ts +4 -4
- package/dist/components/ui/dialog/dialog.d.ts +6 -6
- package/dist/components/ui/drawer/drawer.d.ts +5 -5
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +4 -4
- package/dist/components/ui/empty/empty.d.ts +2 -2
- package/dist/components/ui/file-upload/file-upload.d.ts +1 -1
- package/dist/components/ui/form/form.d.ts +7 -7
- package/dist/components/ui/hover-card/hover-card.d.ts +2 -2
- package/dist/components/ui/index.d.ts +144 -144
- package/dist/components/ui/input/input.d.ts +3 -3
- package/dist/components/ui/input-otp/input-otp.d.ts +6 -6
- package/dist/components/ui/label/label.d.ts +3 -3
- package/dist/components/ui/map-config/map-config.d.ts +1 -1
- package/dist/components/ui/map.exports/map.exports.d.ts +1 -1
- package/dist/components/ui/menubar/menubar.d.ts +4 -4
- package/dist/components/ui/navigation-menu/navigation-menu.d.ts +2 -2
- package/dist/components/ui/notification-badge/notification-badge.d.ts +2 -2
- package/dist/components/ui/page-header/page-header.d.ts +1 -1
- package/dist/components/ui/pagination/pagination.d.ts +7 -7
- package/dist/components/ui/popover/popover.d.ts +2 -2
- package/dist/components/ui/progress/progress.d.ts +3 -3
- package/dist/components/ui/radio-group/radio-group.d.ts +2 -2
- package/dist/components/ui/rating/rating.d.ts +2 -2
- package/dist/components/ui/resizable/resizable.d.ts +1 -1
- package/dist/components/ui/rich-text-editor/index.d.ts +1 -1
- package/dist/components/ui/scroll-area/scroll-area.d.ts +2 -2
- package/dist/components/ui/search/search.d.ts +3 -3
- package/dist/components/ui/select/select.d.ts +2 -2
- package/dist/components/ui/separator/separator.d.ts +2 -2
- package/dist/components/ui/sheet/sheet.d.ts +6 -6
- package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
- package/dist/components/ui/slider/slider.d.ts +2 -2
- package/dist/components/ui/sonner/sonner.d.ts +1 -1
- package/dist/components/ui/stats-card/index.d.ts +1 -0
- package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +25 -0
- package/dist/components/ui/stats-card/stats-card.d.ts +1 -1
- package/dist/components/ui/stepper/stepper.d.ts +1 -1
- package/dist/components/ui/switch/switch.d.ts +2 -2
- package/dist/components/ui/table/table.d.ts +10 -10
- package/dist/components/ui/tabs/tabs.d.ts +2 -2
- package/dist/components/ui/textarea/textarea.d.ts +3 -3
- package/dist/components/ui/timeline/timeline.d.ts +1 -1
- package/dist/components/ui/toggle/toggle.d.ts +3 -3
- package/dist/components/ui/toggle-group/toggle-group.d.ts +3 -3
- package/dist/components/ui/tooltip/tooltip.d.ts +2 -2
- package/dist/components/ui/tree-view/tree-view.d.ts +2 -2
- package/dist/contexts/AuthContext.d.ts +47 -0
- package/dist/contexts/LanguageContext.d.ts +66 -4
- package/dist/contexts/ThemeContext.d.ts +1 -1
- package/dist/contexts/index.d.ts +1 -0
- package/dist/{dropdown-menu-BDB5CmQs.cjs β dropdown-menu-B_uEXNc4.cjs} +16 -43
- package/dist/{dropdown-menu-DQidbKBD.js β dropdown-menu-CFuCssWA.js} +9 -36
- package/dist/features/assistant/data/mock.d.ts +12 -0
- package/dist/features/assistant/hooks/useAssistantConfig.d.ts +2 -0
- package/dist/features/assistant/index.d.ts +2 -0
- package/dist/features/home/data/mock.d.ts +28 -0
- package/dist/features/home/hooks/useDashboardStats.d.ts +2 -0
- package/dist/features/home/hooks/useFeatureCards.d.ts +2 -0
- package/dist/features/home/hooks/useTeamMembers.d.ts +2 -0
- package/dist/features/home/index.d.ts +5 -0
- package/dist/features/home/store/dashboardStore.d.ts +16 -0
- package/dist/{google-maps-loader-BFWp6VPd.js β google-maps-loader-BVoVhUwA.js} +41 -12
- package/dist/{google-maps-loader-Y-QkD-Li.cjs β google-maps-loader-BqsYL48U.cjs} +0 -5
- package/dist/{google-maps-loader-eS3uQ5TA.cjs β google-maps-loader-DjJaYhV6.cjs} +40 -11
- package/dist/{google-maps-loader-CTYySAun.js β google-maps-loader-t2IlYBzw.js} +0 -4
- package/dist/hooks.cjs.js +14 -13
- package/dist/hooks.es.js +11 -10
- package/dist/i18n.d.ts +14 -0
- package/dist/index-B7A523O_.js +8 -0
- package/dist/index-CkTUgOwX.js +8 -0
- package/dist/{index-COtD8bRW.cjs β index-D3RLKRAs.cjs} +1 -1
- package/dist/{index-D6fxYEY8.cjs β index-DmHhnb7a.cjs} +1 -1
- package/dist/index.cjs.js +48 -33
- package/dist/index.es.js +81 -66
- package/dist/index.umd.js +454 -1027
- package/dist/{input-DWANSKGb.cjs β input-CNFHVKvo.cjs} +11 -11
- package/dist/{input-2R4loU86.js β input-wPYg0d0P.js} +10 -10
- package/dist/layout.cjs.js +2 -2
- package/dist/layout.es.js +2 -2
- package/dist/media.cjs.js +1 -1
- package/dist/media.es.js +1 -1
- package/dist/pages.cjs.js +1 -1
- package/dist/pages.es.js +1 -1
- package/dist/{progress-DPtzoVV8.js β progress-Cs9i4DPx.js} +3 -97
- package/dist/{progress-EeaoqqUs.cjs β progress-DDeuWPZw.cjs} +2 -96
- package/dist/rich-text-editor-1UW3Y2JK.js +2891 -0
- package/dist/{rich-text-editor-Bp3zQqMC.js β rich-text-editor-BM-LPpTh.js} +982 -1034
- package/dist/rich-text-editor-CyggTOLQ.cjs +2908 -0
- package/dist/{rich-text-editor-CeucBdIv.cjs β rich-text-editor-DoCkKhzk.cjs} +982 -1034
- package/dist/{select-Bkbr0f-Z.cjs β select-Cmb8zF7w.cjs} +9 -15
- package/dist/{select-CvIVdX2n.js β select-CprSNX0z.js} +3 -9
- package/dist/{sidebar-DQj1z3jG.cjs β sidebar-C5B_LHek.cjs} +245 -208
- package/dist/{sidebar-CUuOvYhK.js β sidebar-CA6_ek3f.js} +272 -258
- package/dist/{sidebar-BxGXsDAd.cjs β sidebar-CVUGHOS_.cjs} +8 -16
- package/dist/{sidebar-BViy8Eeu.js β sidebar-CmvwjnVb.js} +9 -17
- package/dist/{sidebar-LluMXfam.js β sidebar-Dz7bd3zP.js} +245 -208
- package/dist/{sidebar-CK_0ZQHj.cjs β sidebar-zowjejT2.cjs} +271 -274
- package/dist/skeleton-4zoHiFJ_.cjs +83 -0
- package/dist/skeleton-C4bHqUBf.js +84 -0
- package/dist/{slider-N7hFFj6X.cjs β slider-DcJharR9.cjs} +4 -4
- package/dist/{slider-Bc5Hd0y1.js β slider-Pay3fka2.js} +1 -1
- package/dist/tooltip-CwgSdy3h.cjs +67 -0
- package/dist/tooltip-D-OrYnKO.js +51 -0
- package/dist/ui.cjs.js +24 -23
- package/dist/ui.es.js +54 -53
- package/dist/{use-audio-player-BkmEmj8Q.js β use-audio-player-BJFV24XW.js} +13 -10
- package/dist/{use-audio-player-nv8ZSGa1.js β use-audio-player-Bkh23vQ3.js} +3 -7
- package/dist/{use-audio-player-NKsWyjWu.cjs β use-audio-player-Dn1NR9xN.cjs} +3 -7
- package/dist/{use-audio-player-CLFTWFW1.cjs β use-audio-player-DyVYlOnR.cjs} +13 -10
- package/dist/use-mobile-BB4M_4Ru.cjs +47 -0
- package/dist/use-mobile-CLu9nqGL.js +31 -0
- package/dist/{xertica-assistant-dyP7KHM5.cjs β xertica-assistant-B1IaHXnB.cjs} +388 -529
- package/dist/{xertica-assistant-ciJaWqm1.js β xertica-assistant-BMqdyRVi.js} +10 -28
- package/dist/xertica-assistant-BbgzsgsG.js +2164 -0
- package/dist/{xertica-assistant-V_IdW4WF.cjs β xertica-assistant-Bj3vBCq_.cjs} +9 -27
- package/dist/{xertica-assistant-BdiZag0h.js β xertica-assistant-CfBCo21g.js} +442 -481
- package/dist/{xertica-assistant-yX1CFBBo.js β xertica-assistant-DPsESB6t.js} +390 -531
- package/dist/{xertica-assistant-DUBpmEgo.cjs β xertica-assistant-DrsRwla1.cjs} +441 -480
- package/dist/{CodeBlock-7TTgmdGG.cjs β xertica-assistant-Qp3ydksa.cjs} +51 -263
- package/dist/xertica-assistant-d2qs2Vd9.cjs +2163 -0
- package/dist/{CodeBlock-DnYNI8rQ.js β xertica-assistant-gnCJdcZY.js} +7 -219
- package/dist/xertica-ui.css +2 -2
- package/docs/ai-usage.md +24 -21
- package/docs/architecture-improvements.md +68 -55
- package/docs/architecture.md +186 -30
- package/docs/components/accordion.md +12 -17
- package/docs/components/alert-dialog.md +13 -13
- package/docs/components/alert.md +15 -17
- package/docs/components/aspect-ratio.md +5 -5
- package/docs/components/assistant-chart.md +10 -9
- package/docs/components/assistant.md +155 -129
- package/docs/components/audio-player.md +30 -18
- package/docs/components/avatar.md +15 -17
- package/docs/components/badge.md +14 -14
- package/docs/components/branding.md +30 -29
- package/docs/components/breadcrumb.md +11 -11
- package/docs/components/button.md +29 -29
- package/docs/components/calendar.md +141 -154
- package/docs/components/card-patterns.md +445 -337
- package/docs/components/card.md +245 -235
- package/docs/components/carousel.md +1 -1
- package/docs/components/chart.md +89 -99
- package/docs/components/checkbox.md +15 -15
- package/docs/components/code-block.md +8 -11
- package/docs/components/collapsible.md +8 -13
- package/docs/components/command.md +18 -3
- package/docs/components/context-menu.md +1 -1
- package/docs/components/dialog.md +46 -28
- package/docs/components/drawer.md +6 -8
- package/docs/components/dropdown-menu.md +17 -21
- package/docs/components/empty.md +12 -21
- package/docs/components/error-boundary.md +191 -0
- package/docs/components/file-upload.md +43 -54
- package/docs/components/floating-media-wrapper.md +12 -12
- package/docs/components/form.md +62 -35
- package/docs/components/formatted-document.md +33 -41
- package/docs/components/google-maps-loader.md +1 -0
- package/docs/components/header.md +17 -15
- package/docs/components/hooks.md +114 -114
- package/docs/components/hover-card.md +5 -5
- package/docs/components/image-with-fallback.md +14 -13
- package/docs/components/input-otp.md +13 -22
- package/docs/components/input.md +13 -13
- package/docs/components/label.md +7 -7
- package/docs/components/language-selector.md +172 -76
- package/docs/components/map-layers.md +15 -17
- package/docs/components/map.md +84 -84
- package/docs/components/markdown-message.md +6 -7
- package/docs/components/menubar.md +10 -4
- package/docs/components/modern-chat-input.md +28 -27
- package/docs/components/navigation-menu.md +1 -1
- package/docs/components/notification-badge.md +10 -10
- package/docs/components/page-header.md +15 -17
- package/docs/components/pages.md +58 -100
- package/docs/components/pagination.md +113 -98
- package/docs/components/popover.md +12 -17
- package/docs/components/progress.md +14 -14
- package/docs/components/radio-group.md +20 -16
- package/docs/components/rating.md +10 -10
- package/docs/components/resizable.md +13 -17
- package/docs/components/rich-text-editor.md +70 -75
- package/docs/components/route-map.md +31 -31
- package/docs/components/scroll-area.md +5 -5
- package/docs/components/search.md +13 -13
- package/docs/components/select.md +17 -23
- package/docs/components/separator.md +5 -5
- package/docs/components/sheet.md +14 -16
- package/docs/components/sidebar.md +69 -67
- package/docs/components/simple-map.md +11 -9
- package/docs/components/skeleton.md +19 -12
- package/docs/components/slider.md +13 -19
- package/docs/components/sonner.md +14 -17
- package/docs/components/stats-card.md +10 -9
- package/docs/components/stepper.md +42 -47
- package/docs/components/switch.md +12 -19
- package/docs/components/table.md +12 -12
- package/docs/components/tabs.md +15 -15
- package/docs/components/textarea.md +9 -13
- package/docs/components/theme-toggle.md +7 -6
- package/docs/components/timeline.md +26 -22
- package/docs/components/toggle-group.md +11 -11
- package/docs/components/toggle.md +12 -16
- package/docs/components/tooltip.md +14 -14
- package/docs/components/tree-view.md +60 -70
- package/docs/components/use-mobile.md +4 -8
- package/docs/components/video-player.md +11 -11
- package/docs/components/xertica-logo.md +4 -3
- package/docs/components/xertica-orbe.md +4 -3
- package/docs/components/xertica-provider.md +25 -24
- package/docs/components/xertica-xlogo.md +4 -3
- package/docs/decision-tree.md +293 -287
- package/docs/doc-audit.md +74 -54
- package/docs/form-sizing.md +48 -40
- package/docs/getting-started.md +210 -34
- package/docs/guidelines.md +167 -48
- package/docs/i18n.md +428 -0
- package/docs/installation.md +89 -35
- package/docs/layout.md +13 -15
- package/docs/llms.md +172 -138
- package/docs/patterns/analytics.md +8 -22
- package/docs/patterns/crud.md +3 -12
- package/docs/patterns/dashboard.md +1 -11
- package/docs/patterns/detail-page.md +25 -5
- package/docs/patterns/form.md +6 -9
- package/docs/patterns/login.md +3 -14
- package/docs/patterns/settings.md +40 -18
- package/docs/patterns/wizard.md +14 -18
- package/docs/state-management.md +289 -0
- package/guidelines/Guidelines.md +399 -252
- package/hooks/useTheme.test.tsx +1 -1
- package/hooks/useTheme.ts +4 -4
- package/imports/Podcast.tsx +540 -389
- package/imports/XerticaAi.tsx +46 -46
- package/imports/XerticaX.tsx +15 -20
- package/imports/svg-aueiaqngck.ts +20 -11
- package/imports/svg-v9krss1ozd.ts +23 -16
- package/imports/svg-vhrdofe3qe.ts +6 -5
- package/llms-compact.txt +94 -7
- package/llms-full.txt +151 -25
- package/llms.txt +186 -160
- package/package.json +15 -5
- package/scripts/ai-validator.ts +35 -27
- package/scripts/cleanup-case-dupes.ts +53 -50
- package/scripts/generate-ai-manifests.ts +40 -29
- package/styles/globals.css +5 -5
- package/styles/xertica/app-overrides/chat.css +61 -61
- package/styles/xertica/app-overrides/scrollbar.css +33 -33
- package/styles/xertica/base.css +1 -1
- package/styles/xertica/integrations/google-maps.css +76 -76
- package/styles/xertica/integrations/sonner.css +73 -73
- package/styles/xertica/theme-map.css +13 -13
- package/styles/xertica/tokens.css +5 -5
- package/templates/.prettierignore +4 -0
- package/templates/.prettierrc +10 -0
- package/templates/CLAUDE.md +27 -29
- package/templates/eslint.config.js +2 -5
- package/templates/guidelines/Guidelines.md +281 -63
- package/templates/package.json +14 -5
- package/templates/postcss.config.js +1 -1
- package/templates/src/app/App.tsx +35 -10
- package/templates/src/app/components/AppLayout.tsx +15 -4
- package/templates/src/app/components/AuthGuard.tsx +63 -66
- package/templates/src/app/context/AuthContext.tsx +108 -0
- package/templates/src/features/assistant/data/mock.ts +75 -0
- package/templates/src/features/assistant/hooks/useAssistantConfig.ts +20 -0
- package/templates/src/features/assistant/index.ts +5 -0
- package/templates/src/features/auth/index.ts +4 -4
- package/templates/src/features/auth/ui/AuthPageShell.tsx +32 -34
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +43 -17
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +73 -59
- package/templates/src/features/home/data/mock.ts +35 -0
- package/templates/src/features/home/hooks/useFeatureCards.ts +20 -0
- package/templates/src/features/home/index.ts +11 -1
- package/templates/src/features/home/store/dashboardStore.ts +25 -0
- package/templates/src/features/home/ui/HomeContent.tsx +70 -51
- package/templates/src/features/template/index.ts +5 -5
- package/templates/src/features/template/ui/CrudTemplate.tsx +6 -12
- package/templates/src/features/template/ui/DashboardTemplate.tsx +3 -10
- package/templates/src/features/template/ui/FormTemplate.tsx +15 -18
- package/templates/src/features/template/ui/LoginTemplate.tsx +3 -3
- package/templates/src/features/template/ui/TemplateContent.tsx +287 -140
- package/templates/src/i18n.ts +77 -0
- package/templates/src/locales/en.json +306 -0
- package/templates/src/locales/es.json +306 -0
- package/templates/src/locales/pt-BR.json +306 -0
- package/templates/src/main.tsx +1 -0
- package/templates/src/pages/AssistantPage.tsx +188 -53
- package/templates/src/pages/ForgotPasswordPage.tsx +6 -6
- package/templates/src/pages/HomePage.tsx +17 -25
- package/templates/src/pages/LoginPage.tsx +10 -10
- package/templates/src/pages/ResetPasswordPage.tsx +6 -6
- package/templates/src/pages/TemplatePage.tsx +6 -8
- package/templates/src/pages/VerifyEmailPage.tsx +6 -6
- package/templates/src/shared/config/navigation.ts +1 -2
- package/templates/src/shared/error-boundary.tsx +154 -0
- package/templates/src/shared/error-fallbacks.tsx +226 -0
- package/templates/src/styles/index.css +3 -3
- package/templates/src/styles/xertica/tokens.css +5 -5
- package/templates/tsconfig.json +3 -10
- package/templates/vite.config.ts +5 -5
- package/utils/color-utils.ts +17 -17
- package/utils/demo-responses.ts +146 -110
- package/utils/gemini.test.ts +1 -1
- package/utils/gemini.ts +155 -140
- package/dist/AssistantChart-DIpshm3i.js +0 -4784
- package/dist/AssistantChart-zjsy2GaZ.cjs +0 -4810
- package/dist/AudioPlayer-B1lt5cPl.cjs +0 -989
- package/dist/AudioPlayer-BZ7bibzU.cjs +0 -982
- package/dist/AudioPlayer-C12BjQBV.cjs +0 -997
- package/dist/AudioPlayer-CFeV8t-5.cjs +0 -936
- package/dist/AudioPlayer-CGRUtUdN.js +0 -937
- package/dist/AudioPlayer-DMcG_c7L.js +0 -990
- package/dist/AudioPlayer-DcFKRJE_.js +0 -998
- package/dist/AudioPlayer-e8LfNoqO.js +0 -983
- package/dist/CodeBlock-BeSt1h5P.js +0 -2078
- package/dist/CodeBlock-BgfYL_rD.cjs +0 -2094
- package/dist/CodeBlock-BlcqlA9M.cjs +0 -2094
- package/dist/CodeBlock-Bnmeu5ez.cjs +0 -2094
- package/dist/CodeBlock-BtfPlbAI.js +0 -2078
- package/dist/CodeBlock-CIySIuYr.js +0 -2078
- package/dist/CodeBlock-CuPtUM-7.cjs +0 -2094
- package/dist/CodeBlock-D6ffWXgc.js +0 -2078
- package/dist/CodeBlock-D8dcwbit.cjs +0 -2094
- package/dist/CodeBlock-DMZrFnlw.cjs +0 -2094
- package/dist/CodeBlock-DlBehYN8.js +0 -2078
- package/dist/CodeBlock-DvKWbSnE.cjs +0 -2094
- package/dist/CodeBlock-DwMCfkFY.js +0 -2078
- package/dist/CodeBlock-Dy6CNYyj.js +0 -2078
- package/dist/CodeBlock-U1pPOQI7.cjs +0 -2094
- package/dist/CodeBlock-f_GpNhEB.js +0 -2078
- package/dist/CodeBlock-oB6u8nI1.js +0 -2078
- package/dist/CodeBlock-tZC31B73.cjs +0 -2094
- package/dist/ImageWithFallback-CGtidP6B.cjs +0 -4542
- package/dist/ImageWithFallback-lsg3pdFg.js +0 -4508
- package/dist/VerifyEmailPage-COiyNl1y.js +0 -2825
- package/dist/XerticaProvider-6btlAlzc.js +0 -17
- package/dist/XerticaProvider-BNoNOxQ5.cjs +0 -16
- package/dist/XerticaProvider-BlY2limY.cjs +0 -38
- package/dist/XerticaProvider-hSwhNQex.js +0 -39
- package/dist/breadcrumb-m9Hb2_XN.cjs +0 -177
- package/dist/components/assistant/xertica-assistant/hooks/index.d.ts +0 -6
- package/dist/components/assistant/xertica-assistant/hooks/use-assistant-conversations.d.ts +0 -21
- package/dist/components/assistant/xertica-assistant/hooks/use-assistant-messages.d.ts +0 -49
- package/dist/components/assistant/xertica-assistant/hooks/use-assistant-suggestions.d.ts +0 -16
- package/dist/components/blocks/audio-player/AudioPlayer.d.ts +0 -35
- package/dist/components/blocks/audio-player/index.d.ts +0 -1
- package/dist/components/blocks/document-editor/DocumentEditor.d.ts +0 -26
- package/dist/components/blocks/document-editor/index.d.ts +0 -1
- package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +0 -41
- package/dist/components/blocks/podcast-player/index.d.ts +0 -1
- package/dist/components/ui/chart/parts/chart-dashboard.d.ts +0 -113
- package/dist/components/ui/chart/parts/chart-metric.d.ts +0 -118
- package/dist/components/ui/chart/parts/chart-primitives.d.ts +0 -101
- package/dist/components/ui/chart/parts/chart-shared.d.ts +0 -20
- package/dist/components/ui/chart/parts/chart-utils.d.ts +0 -12
- package/dist/components/ui/chart/parts/index.d.ts +0 -5
- package/dist/header-Cgy6vYPk.cjs +0 -731
- package/dist/header-DRlT4jgI.js +0 -715
- package/dist/header-Dux00SI4.cjs +0 -731
- package/dist/header-EkGKXPsD.js +0 -715
- package/dist/header-WfEywpyc.cjs +0 -731
- package/dist/header-tifNQn2U.js +0 -715
- package/dist/index-BhapVLVj.js +0 -8
- package/dist/index-DW5tYe26.js +0 -8
- package/dist/rich-text-editor-0mraWT5y.cjs +0 -2376
- package/dist/rich-text-editor-B6jMRLzk.cjs +0 -1939
- package/dist/rich-text-editor-B8_oYcIR.js +0 -1730
- package/dist/rich-text-editor-B9UbSXNb.js +0 -1203
- package/dist/rich-text-editor-BYuRBNBU.js +0 -2373
- package/dist/rich-text-editor-Bb9pySTs.cjs +0 -2374
- package/dist/rich-text-editor-BcL6L3cm.cjs +0 -2374
- package/dist/rich-text-editor-BoVZYtTs.cjs +0 -2391
- package/dist/rich-text-editor-CMgSN_w2.js +0 -1189
- package/dist/rich-text-editor-CPV1lEPH.cjs +0 -1748
- package/dist/rich-text-editor-CoKqbCtu.cjs +0 -1799
- package/dist/rich-text-editor-Cw56T_mB.js +0 -2356
- package/dist/rich-text-editor-Cyt8qs2b.js +0 -1921
- package/dist/rich-text-editor-D6H84OcX.cjs +0 -1220
- package/dist/rich-text-editor-D76gD-QI.js +0 -2328
- package/dist/rich-text-editor-DKkokOnA.js +0 -1781
- package/dist/rich-text-editor-DNsdpN64.cjs +0 -2359
- package/dist/rich-text-editor-DfG8bCyY.js +0 -2358
- package/dist/rich-text-editor-Dxjw31Z4.js +0 -2341
- package/dist/rich-text-editor-DzP0Epmb.js +0 -2356
- package/dist/rich-text-editor-lyYE2ZG5.cjs +0 -1207
- package/dist/rich-text-editor-skplNlBM.cjs +0 -2345
- package/dist/sidebar-Djn5syhi.cjs +0 -786
- package/dist/sidebar-_rT7rBMk.js +0 -787
- package/dist/tooltip-HDOoD2-0.js +0 -120
- package/dist/use-file-upload-BcjEo2S5.js +0 -404
- package/dist/use-file-upload-CRJR68Tj.cjs +0 -403
- package/dist/use-mobile-B0hNy_Y6.cjs +0 -4303
- package/dist/use-mobile-Bbd51ASU.cjs +0 -4392
- package/dist/use-mobile-Bk6CX-TC.js +0 -4359
- package/dist/use-mobile-BvYdisLP.js +0 -4202
- package/dist/use-mobile-BzuxjzNX.cjs +0 -4392
- package/dist/use-mobile-CKb5pqTs.js +0 -4269
- package/dist/use-mobile-CYuAuGDl.js +0 -4202
- package/dist/use-mobile-CaENcqm-.js +0 -4508
- package/dist/use-mobile-CbrYgJGJ.js +0 -4203
- package/dist/use-mobile-DMOvImGQ.cjs +0 -4542
- package/dist/use-mobile-DRB3BQgD.cjs +0 -4235
- package/dist/use-mobile-DZvv7QMR.js +0 -4359
- package/dist/use-mobile-DdI_TXam.cjs +0 -4235
- package/dist/use-mobile-DlceKf8a.js +0 -4359
- package/dist/use-mobile-DsOnow1o.cjs +0 -4236
- package/dist/use-mobile-Kcj6jSnK.cjs +0 -4392
- package/dist/use-mobile-bnKcua_i.js +0 -4202
- package/dist/use-mobile-ncXBeE2z.cjs +0 -4235
- package/dist/use-rich-text-editor-DjiddBGv.js +0 -282
- package/dist/use-rich-text-editor-lpeswbCs.cjs +0 -281
- package/dist/{rich-text-editor-DgF8s7xW.js β rich-text-editor-BmsjY03B.js} +26 -26
- package/dist/{rich-text-editor-mWoaSCE4.cjs β rich-text-editor-GS2kpTAK.cjs} +26 -26
package/CHANGELOG.md
CHANGED
|
@@ -7,10 +7,102 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## [
|
|
10
|
+
## [Unreleased]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **CLI β Language selection on `init`** β `npx xertica-ui init` now prompts for the languages the project should support (multi-select with `pt-BR`, `en`, `es`; all selected by default; minimum 1). The CLI:
|
|
15
|
+
- Copies **only** the JSON files for the selected languages into `src/locales/` (no orphan locales)
|
|
16
|
+
- Generates `src/i18n.ts` with imports/resources for exactly those languages
|
|
17
|
+
- Injects the `availableLanguages` prop into the generated `src/app/App.tsx`
|
|
18
|
+
- Persists the selection in `src/locales/.languages.json` (schema v1)
|
|
19
|
+
- **CLI β `update` β Languages** β new option in the `update` command lets users add or remove languages later. Shows a diff (`+ es`, `- en`) before confirming. Regenerates `App.tsx`, `i18n.ts`, copies new locale JSONs, and prunes removed ones.
|
|
20
|
+
- **CLI β Monolingual auto-detection** β when only one language is selected, the generated `App.tsx` includes a banner comment documenting that the `LanguageSelector` will auto-hide.
|
|
21
|
+
- **`bin/language-config.ts`** β new module encapsulating the supported-language registry (`SUPPORTED_LANGUAGES`), code generators (`generateI18nFile`, `generateAppTsx`), and persistence helpers (`readLanguagesConfig`, `writeLanguagesConfig`, `syncLocaleFiles`).
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **CLI β `update` β Project files (`app` branch)** β instead of blindly overwriting `App.tsx` and `i18n.ts` with the static template (which would erase the user's language selection), the update flow now reads the persisted selection from `src/locales/.languages.json` and regenerates these files honoring it. Projects scaffolded before this feature shipped get their selection inferred from the locale files present and the inferred config is written back.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## [2.1.11] β 2026-05-20
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **CLI Initialization** β CorreΓ§Γ΅es essenciais no comando `init`:
|
|
34
|
+
- `i18n.ts` e o diretΓ³rio `locales/` agora sΓ£o copiados corretamente, restaurando as traduΓ§Γ΅es na aplicaΓ§Γ£o gerada.
|
|
35
|
+
- `AuthContext.tsx` e dependΓͺncias agora sΓ£o incluΓdas, habilitando o hook `useAuth`.
|
|
36
|
+
- A geraΓ§Γ£o do `AuthGuard.tsx` foi reconstruΓda de forma dinΓ’mica para consumir corretamente o `useAuth()` e garantir integridade das rotas protegidas e abertas, suportando *lazy loading* dinΓ’mico das rotas de acordo com a seleΓ§Γ£o do usuΓ‘rio.
|
|
37
|
+
- O diretΓ³rio `features/assistant/` agora Γ© sempre copiado visto que o `AppLayout` depende nativamente da `AssistantPage`.
|
|
38
|
+
- **Template Lints** β ResoluΓ§Γ£o de diversos `unused-vars` (variΓ‘veis e imports Γ³rfΓ£os) espalhados pelo `HomeContent.tsx`, `TemplateContent.tsx`, `AssistantPage.tsx` e `AuthContext.tsx`, garantindo que o `npm run check` (`tsc` + `eslint`) execute com 100% de sucesso imediatamente apΓ³s a geraΓ§Γ£o do projeto.
|
|
39
|
+
- **`LanguageSelector` e `LanguageContext`** β CorreΓ§Γ£o de bugs na seleΓ§Γ£o de idiomas e fallback:
|
|
40
|
+
- `LanguageContext.tsx` agora valida de forma robusta e intercepta valores legados como `'PT'` no `localStorage`, realizando um *fallback* seguro para `'pt-BR'`.
|
|
41
|
+
- O componente `LanguageSelector.tsx` foi ajustado na sua composiΓ§Γ£o com Radix UI: a dependΓͺncia restritiva do `<SelectValue>` foi removida no trigger, evitando a sobrescrita do conteΓΊdo. Agora o componente exibe a variante `minimal` (como `PT`, `EN`, `ES`) perfeitamente, sincronizada com o estado global de traduΓ§Γ£o.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## [2.1.10] β 2026-05-20
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
|
|
49
|
+
- **`AuthContext` / `useAuth()`** β novo contexto de autenticaΓ§Γ£o em `contexts/AuthContext.tsx`. `AuthProvider` gerencia sessΓ£o via `localStorage`, expΓ΅e `user`, `isLoading`, `login(email, password) β boolean` e `logout()`. `isLoading` previne flashes de redirect durante hidrataΓ§Γ£o. O `AuthProvider` deve ser montado dentro do `<Router>` (depende de `useNavigate`).
|
|
50
|
+
- **`ErrorBoundary` β trΓͺs variantes prΓ©-configuradas** em `components/shared/error-boundary.tsx`:
|
|
51
|
+
- `AppErrorBoundary` β envolve todo o `App` antes dos providers; fallback full-screen com inline styles (funciona mesmo se o Tailwind falhar)
|
|
52
|
+
- `PageErrorBoundary` β envolve `<Routes>` / `<AuthGuard>`; captura lazy-chunk failures e erros de renderizaΓ§Γ£o de pΓ‘gina
|
|
53
|
+
- `SectionErrorBoundary` β envolve seΓ§Γ΅es isoladas (tabelas, charts, assistente); um seΓ§Γ£o quebrada nΓ£o derruba a pΓ‘gina
|
|
54
|
+
- Props: `onError` (callback para Sentry/Datadog), `resetKeys` (auto-reset quando um valor muda, ex: `[location.pathname]`)
|
|
55
|
+
- **i18n completo com `i18next` + `react-i18next`** β integraΓ§Γ£o completa de internacionalizaΓ§Γ£o:
|
|
56
|
+
- Arquivo `i18n.ts` configurado com `pt-BR` (padrΓ£o), `en` e `es`
|
|
57
|
+
- Locale files em `locales/pt-BR.json`, `en.json`, `es.json` com namespaces: `common`, `nav`, `home`, `stats`, `team`, `assistant`, `languageSelector`
|
|
58
|
+
- `LanguageContext.setLanguage()` agora chama `i18n.changeLanguage()` β todos os `useTranslation()` re-renderizam
|
|
59
|
+
- `HomeContent.tsx` e `TemplateContent.tsx` usam `useTranslation()` para todos os textos
|
|
60
|
+
- Mock data usa `i18n.t()` (instΓ’ncia) para responder ao idioma ativo no `queryFn`
|
|
61
|
+
- **`features/` β camada de estado separada da UI**:
|
|
62
|
+
- `features/home/data/mock.ts` β tipos + dados mock + funΓ§Γ΅es `fetch*()` (swap point para API real)
|
|
63
|
+
- `features/home/hooks/` β `useDashboardStats`, `useTeamMembers`, `useFeatureCards` (TanStack React Query)
|
|
64
|
+
- `features/home/store/dashboardStore.ts` β Zustand (progress, slider, switch, activeTab)
|
|
65
|
+
- `features/assistant/data/mock.ts` β `AssistantConfig` + `fetchAssistantConfig()`
|
|
66
|
+
- `features/assistant/hooks/useAssistantConfig.ts` β React Query, staleTime 30 min
|
|
67
|
+
- **`QueryClientProvider`** adicionado ao stack de providers em `App.tsx` como camada mais externa (abaixo de `AppErrorBoundary`)
|
|
68
|
+
- **Lazy loading** em todas as rotas via `React.lazy()` + `<Suspense fallback={null}>` β cada pΓ‘gina Γ© um chunk separado
|
|
69
|
+
- **`ProtectedRoute` + `GuestRoute`** como componentes de guarda de rota baseados em `useAuth()` β eliminam lΓ³gica de redirect do `AuthGuard`
|
|
70
|
+
- **`components/shared/navigation.ts`** β fonte canΓ΄nica de `RouteConfig`, `routes[]`, `getRouteByPath` e `isValidRoute` para o app devops (substituiu `routes.tsx` na raiz)
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- **`LanguageSelector` β refatorado para usar `LanguageContext` e `i18next`** β removidos `useState` local, props `initialLanguage` e `onLanguageChange`. O componente agora lΓͺ de `useLanguage()` e chama `i18n.changeLanguage()` diretamente. `aria-label` e labels dos itens sΓ£o traduzidos via `useTranslation()`. **Breaking**: `initialLanguage` e `onLanguageChange` foram removidos da API pΓΊblica.
|
|
75
|
+
- **`LanguageContext` β conectado ao `i18next`** β `setLanguage(lang)` persiste no `localStorage` E chama `i18n.changeLanguage(lang)` em uma ΓΊnica operaΓ§Γ£o. Type mismatch corrigido: `LanguageSelector` usava `'pt'`, contexto usava `'pt-BR'` β unificado para `'pt-BR'`.
|
|
76
|
+
- **`App.tsx` β limpeza da lΓ³gica de tema duplicada** β removidos IIFE top-level e `useLayoutEffect` que manipulavam `localStorage`/`classList` para garantir light mode. O `ThemeProvider` jΓ‘ gerencia isso corretamente; as camadas redundantes conflitavam.
|
|
77
|
+
- **`HomePage` + `TemplatePage` β sem props `user`/`onLogout`** β ambos consomem `useAuth()` diretamente; prop-drilling eliminado em toda a Γ‘rvore de pΓ‘ginas (`HomeContent`, `TemplateContent`, `AppLayout`).
|
|
78
|
+
- **`routes.tsx` deletado** β conteΓΊdo movido para `components/shared/navigation.ts`; todos os imports atualizados.
|
|
11
79
|
|
|
12
80
|
### Fixed
|
|
13
81
|
|
|
82
|
+
- **`useRichTextEditor` β `wordCount`/`characterCount` agora sΓ£o `useState`** β as IIFEs que calculavam os contadores a cada render foram substituΓdas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente apΓ³s cada digitaΓ§Γ£o; um `useEffect([value])` os sincroniza quando o valor Γ© alterado externamente.
|
|
83
|
+
- **`useRichTextEditor` β `eslint-disable` removido do effect de seleΓ§Γ£o** β o effect ΓΊnico de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantΓ©m `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
|
|
84
|
+
- **`useAssistant` β timers vazados corrigidos** β `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
|
|
85
|
+
- **`useAssistant` β hydration one-shot de `initialMessages`** β `hydratedRef` garante que `setMensagens(initialMessages)` ocorra apenas uma vez, evitando reset do histΓ³rico em re-renders.
|
|
86
|
+
- **`useAssistant` β scroll condicional β€ 120px** β o auto-scroll sΓ³ aciona `scrollIntoView` quando o usuΓ‘rio estΓ‘ a menos de 120 px do fundo, preservando a posiΓ§Γ£o durante leitura de histΓ³rico.
|
|
87
|
+
- **`useAudioPlayer` β `eslint-disable` removido do effect de modo-switch** β `currentTimeRef` e `isPlayingRef` (latest-ref pattern) substituem referΓͺncias diretas ao estado dentro do effect `[isFloating, variant]`, eliminando a necessidade do disable de lint.
|
|
88
|
+
- **`useStepper` β `initialStep` invΓ‘lido** β lazy initializer com `Math.min(Math.max(1, initialStep), totalSteps)` garante que o estado inicial nunca fique fora do intervalo `[1, totalSteps]`.
|
|
89
|
+
- **`useTreeView` β `Space` e `Enter` separados** β `Space` expande/colapsa nΓ³s-pai e seleciona folhas; `Enter` expande/colapsa e sempre seleciona, alinhando com WAI-ARIA Tree Pattern 1.2.
|
|
90
|
+
- **`sidebar.tsx` β loop de re-render corrigido** β dependΓͺncia do effect de overflow revertida de `navigationItems` para `navigationItems.length` para evitar loop causado pela nova referΓͺncia de array gerada pelo `useMemo` a cada mudanΓ§a de rota.
|
|
91
|
+
- **`useAssistant` β `setConversas(savedConversations)` em loop corrigido** β removido `useEffect` que chamava `setConversas` com `savedConversations = []` (default do destructuring), causando re-render infinito.
|
|
92
|
+
|
|
93
|
+
### Changed (continued)
|
|
94
|
+
|
|
95
|
+
- **`RichTextEditor` β ARIA no `contentEditable`** β adicionados `role="textbox"`, `aria-multiline`, `aria-label`, `aria-readonly` e `aria-disabled` no div editΓ‘vel. Removido o texto "Auto-save ativo" do rodapΓ©.
|
|
96
|
+
- **`Stepper` β ARIA de lista** β o wrapper dos steps recebe `role="list"` + `aria-label="Progresso: etapa N de M"`. Cada `<Step>` recebe `role="listitem"`, `aria-current="step"` (quando ativo) e `aria-label` composto com status.
|
|
97
|
+
- **`Pagination` β prop `disabled` em `PaginationLink`** β `PaginationLink` aceita `disabled?: boolean`; aplica `pointer-events-none opacity-50`, `aria-disabled`, `tabIndex={-1}` e remove `href`. `PaginationPrevious` e `PaginationNext` repassam `disabled`.
|
|
98
|
+
- **`usePagination` β algoritmo deduplicado com `Set`** β reescrito usando `Set<number>` para garantir que cada pΓ‘gina apareΓ§a exatamente uma vez.
|
|
99
|
+
- **`TreeView` β prop `ariaLabel` + roving tabindex** β `<TreeView>` aceita `ariaLabel?: string`; roving tabindex: `focusableId = effectiveSelectedId ?? data[0]?.id`.
|
|
100
|
+
- **`DashboardBarChart` β `topOfStack` com `useMemo`** β IIFE extraΓda para `React.useMemo([stacked, chartSeries])` antes do `return`.
|
|
101
|
+
- **`useAssistant` β `conversasFiltradas` com `useMemo`** e tipos fortalecidos (`handleEnviarMensagem: (arg?: string | ActionType) => Promise<void>`).
|
|
102
|
+
- **`sidebar.tsx` β ARIA** β botΓ£o de toggle recebe `aria-expanded` e `aria-controls="sidebar-nav"`; `<nav>` recebe `id="sidebar-nav"` e `aria-label="NavegaΓ§Γ£o principal"`. `navigationItems` memoizado com `useMemo`.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
14
106
|
- **`useRichTextEditor` β `wordCount`/`characterCount` agora sΓ£o `useState`** β as IIFEs que calculavam os contadores a cada render foram substituΓdas por estado React (`useState(0)`). `handleInput` atualiza os contadores imediatamente apΓ³s cada digitaΓ§Γ£o; um `useEffect([value])` os sincroniza quando o valor Γ© alterado externamente.
|
|
15
107
|
- **`useRichTextEditor` β `eslint-disable` removido do effect de seleΓ§Γ£o** β o effect ΓΊnico de mount com `// eslint-disable-next-line` foi dividido em dois: um `useRef` que mantΓ©m `updateActiveFormats` sempre atualizado e um effect de mount-only que registra o listener `selectionchange` via ref, eliminando re-registros e o disable de lint.
|
|
16
108
|
- **`useAssistant` β timers vazados corrigidos** β `responseTimerRef` e `commandTimerRef` substituem os `setTimeout` bare em `handleEnviarMensagem` e `handleExecuteSearchCommand`; um effect de cleanup no unmount cancela ambos com `clearTimeout`.
|
|
@@ -275,6 +367,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
275
367
|
## [1.9.0] β 2026-05-05
|
|
276
368
|
|
|
277
369
|
### Added
|
|
370
|
+
|
|
278
371
|
- **Standardized Form Sizing System** β Implemented a unified `size` prop (`sm`, `md`, `lg`) across all form-related components for perfect visual alignment in grid layouts:
|
|
279
372
|
- **Text Components** β `Input`, `SelectTrigger`, `Textarea`, `Search`, and `InputOTPSlot` now share consistent height/padding/font-size tokens.
|
|
280
373
|
- **Toggle Components** β `Checkbox`, `RadioGroupItem`, and `Switch` now feature dynamic sizing for both containers and internal indicators (check icon, dot, thumb).
|
|
@@ -287,11 +380,13 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
287
380
|
- Configurable hierarchy levels and labels directly via props.
|
|
288
381
|
|
|
289
382
|
### Changed
|
|
383
|
+
|
|
290
384
|
- **Form Component Architecture** β Migrated form elements from legacy tokens to standardized design system tokens (`bg-background`, `border-border`) for better theme consistency.
|
|
291
385
|
- **Documentation & Storybook** β Updated all 9 affected form components with new "Sizes" sections in Storybook (Stories + MDX) and enriched LLM-facing markdown documentation.
|
|
292
386
|
- **Unit Testing** β Updated test suites for `Checkbox`, `RadioGroup`, `Switch`, `InputOTP`, `Label`, `Search`, `Select`, and `Textarea` to verify sizing variant classes.
|
|
293
387
|
|
|
294
388
|
### Fixed
|
|
389
|
+
|
|
295
390
|
- **Search Component** β Removed obsolete `loading` prop which was causing TypeScript errors and was redundant with the current design system patterns.
|
|
296
391
|
- **SelectTrigger Sizing** β Standardized `md` height to `h-10` (40px) to match the rest of the form system.
|
|
297
392
|
|
|
@@ -300,6 +395,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
300
395
|
## [1.8.0] β 2026-04-27
|
|
301
396
|
|
|
302
397
|
### Added
|
|
398
|
+
|
|
303
399
|
- **VideoPlayer UI Enhancements** β Added gradient overlay on controls for improved contrast against video content:
|
|
304
400
|
- Gradient: `from-black/60 via-black/30 to-transparent` with `pt-12` spacing
|
|
305
401
|
- White progress bar with `bg-white/30` track, `bg-white` fill, and `rounded-r-sm` on filled portion
|
|
@@ -311,6 +407,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
311
407
|
- Adjusted track/margins for proper visual alignment at full value
|
|
312
408
|
|
|
313
409
|
### Changed
|
|
410
|
+
|
|
314
411
|
- **Documentation** β Updated component counts across all docs:
|
|
315
412
|
- `llms.txt`: 75 β 97 components
|
|
316
413
|
- `llms-full.txt`: Added statistics table
|
|
@@ -319,6 +416,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
319
416
|
- **components.json** β 75 β 89 components (added missing Media, Assistant, Pages, and Map components)
|
|
320
417
|
|
|
321
418
|
### Fixed
|
|
419
|
+
|
|
322
420
|
- **Slider Progress Bar** β Fixed visual gap where thumb doesn't align with filled bar at end position by adjusting track margins
|
|
323
421
|
|
|
324
422
|
---
|
|
@@ -326,11 +424,13 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
326
424
|
## [1.7.0] β 2026-04-23
|
|
327
425
|
|
|
328
426
|
### Fixed
|
|
427
|
+
|
|
329
428
|
- **CLI CSS Theme Import** β Corrected `@theme` β `@theme inline` in both the library's `index.css` and the generated template `src/styles/index.css`. Plain `@theme {}` was causing Tailwind v4 to resolve color tokens statically at build time using the library's defaults, preventing consumer `tokens.css` overrides from propagating into utility classes (`bg-destructive`, `bg-primary`, alert colors, etc.).
|
|
330
429
|
- **Dark Mode `--primary`** β Added missing `--primary: var(--xertica-primary)` in the dark mode block of `tokens.css` (library, template, and generator). Components using `bg-primary` were not picking up the dark mode brand color.
|
|
331
430
|
- **Dark Mode Chart Tokens** β Generator (`bin/generate-tokens.ts`) now includes `--chart-1` through `--chart-5` in the dark mode section for all generated `tokens.css` files.
|
|
332
431
|
|
|
333
432
|
### Added
|
|
433
|
+
|
|
334
434
|
- **CLI `update` command** β `npx xertica-ui@latest update` prompts the user to select a new color theme and overwrites `src/styles/xertica/tokens.css` with the newly generated tokens, preserving all other project files.
|
|
335
435
|
- **Template `@theme inline` mapping** β Generated `src/styles/index.css` now includes a complete `@theme inline {}` block mapping all tokens (sidebar, charts, gradients, brand, radii) to CSS variable aliases, ensuring full theme coverage for consumer projects.
|
|
336
436
|
- **Documentation** β `docs/getting-started.md` updated with CLI `update` command reference and a new "CSS Setup (Critical)" section explaining the `@theme inline` requirement.
|
|
@@ -340,6 +440,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
340
440
|
## [1.6.0] β 2026-04-20
|
|
341
441
|
|
|
342
442
|
### Added
|
|
443
|
+
|
|
343
444
|
- **`docs/llms.md`** β Master LLM/AI-agent entrypoint index with full component catalog, token quick reference, and reading order guide.
|
|
344
445
|
- **`docs/layout.md`** β Complete `LayoutContext` and `useLayout()` API reference.
|
|
345
446
|
- **`docs/components/route-map.md`** β New documentation for `RouteMap` component.
|
|
@@ -348,12 +449,14 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
348
449
|
- **`Sidebar`** β New `width` prop (`expandedWidth: number`) for configuring the expanded sidebar pixel width. Width is now read and stored via `LayoutContext.sidebarWidth`.
|
|
349
450
|
|
|
350
451
|
### Changed
|
|
452
|
+
|
|
351
453
|
- **Documentation** β All 61 component docs, 5 pattern docs, and 6 root docs fully rewritten in English with standardized structure (Overview, When to Use, Anatomy, Props table, Examples, AI Rules, Related Components).
|
|
352
454
|
- **JSDoc** β All Portuguese JSDoc comments in `components/ui/` translated to English and enriched with accurate `@ai-rules`.
|
|
353
455
|
- **`README.md`** β Complete rewrite in English, restructured for npm page quality (quick start, install guide, component catalog, token reference, AI agent entrypoint, troubleshooting).
|
|
354
456
|
- **`package.json`** β Version bumped to `1.6.0`. Description translated to English.
|
|
355
457
|
|
|
356
458
|
### Fixed
|
|
459
|
+
|
|
357
460
|
- **`docs/components/page-header.md`** β Was documenting a wrong API (`title/description/actions`). Now correctly documents the real API: `breadcrumbs[]`, `showLanguageSelector`, `rightContent`, `PageHeaderHeading`, `PageHeaderDescription`.
|
|
358
461
|
- **`docs/components/stepper.md`** β Was documenting a `steps[]` array prop. Now correctly documents the composable `<Stepper currentStep> + <Step step label>` API (1-indexed).
|
|
359
462
|
- **`docs/components/empty.md`** β Was documenting single-prop component. Now correctly documents the composable sub-component pattern: `Empty > EmptyIcon > EmptyTitle > EmptyDescription > EmptyAction`.
|
|
@@ -365,6 +468,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
365
468
|
## [1.5.2] β 2026-04-15
|
|
366
469
|
|
|
367
470
|
### Fixed
|
|
471
|
+
|
|
368
472
|
- Resolved regression where modal components (Dialog/AlertDialog) failed to render in projects initialized via the CLI.
|
|
369
473
|
- Implemented robust CSS integration using Tailwind v4 theme mappings.
|
|
370
474
|
- Ensured Radix UI portals correctly inherit theme variables.
|
|
@@ -374,6 +478,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
374
478
|
## [1.5.1] β 2026-04-14
|
|
375
479
|
|
|
376
480
|
### Changed
|
|
481
|
+
|
|
377
482
|
- Sidebar: Added `assistente` variant with fixed areas, searchable navigation, and grouped navigation structures.
|
|
378
483
|
- Template page updated to demonstrate the assistant sidebar variant.
|
|
379
484
|
|
|
@@ -382,6 +487,7 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
382
487
|
## [1.5.0] β 2026-04-13
|
|
383
488
|
|
|
384
489
|
### Added
|
|
490
|
+
|
|
385
491
|
- `Sidebar` β `width` / `expandedWidth` prop for configurable expanded sidebar width.
|
|
386
492
|
- `LayoutContext` β `sidebarWidth` and `setSidebarWidth` for global sidebar width management.
|
|
387
493
|
- `Header` β User profile section with avatar, dropdown menu, settings button, and logout button.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **Enterprise-grade React design system** built on Tailwind CSS v4, Radix UI, and Lucide Icons β with a robust AI-first documentation layer for precise LLM-driven composition and autonomous agent interaction.
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/xertica-ui)
|
|
6
6
|
[](./LICENSE)
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
Xertica UI is specifically designed to be consumed by AI Agents (LLMs, code assistants, autonomous agents). We provide dedicated entry points for AI context:
|
|
13
13
|
|
|
14
|
-
| File
|
|
15
|
-
|
|
16
|
-
| [`llms.txt`](./llms.txt)
|
|
14
|
+
| File | Purpose |
|
|
15
|
+
| ---------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
16
|
+
| [`llms.txt`](./llms.txt) | Standard index for AI crawlers and context-aware agents. |
|
|
17
17
|
| [`llms-compact.txt`](./llms-compact.txt) | **Compact documentation** of all components in a single file for LLMs with limited context. |
|
|
18
|
-
| [`llms-full.txt`](./llms-full.txt)
|
|
19
|
-
| `docs/llms.md`
|
|
18
|
+
| [`llms-full.txt`](./llms-full.txt) | **Complete documentation** of all components in a single file for LLMs with large-context. |
|
|
19
|
+
| `docs/llms.md` | Master index for agents to navigate the documentation folder. |
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -30,7 +30,39 @@ cd my-app
|
|
|
30
30
|
npm run dev
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
During `init`, the CLI walks you through:
|
|
34
|
+
|
|
35
|
+
| Prompt | Choices |
|
|
36
|
+
|---|---|
|
|
37
|
+
| Pages to include | Login, Home, Template (multi-select) |
|
|
38
|
+
| **Languages to support** | PortuguΓͺs (BR), English, EspaΓ±ol β select **1, 2, or 3** |
|
|
39
|
+
| Default color theme | Xertica, Slate, Blue, Violet, Rose, Emerald, β¦ |
|
|
40
|
+
| Install dependencies automatically | yes / no |
|
|
41
|
+
|
|
42
|
+
The CLI generates a tailored project with:
|
|
43
|
+
|
|
44
|
+
- Only the locale JSON files for the languages you picked (no orphan files)
|
|
45
|
+
- `src/i18n.ts` with imports + `resources` for exactly those languages
|
|
46
|
+
- `src/app/App.tsx` with the `availableLanguages` prop on `<XerticaProvider>` (omitted when all 3 defaults are selected)
|
|
47
|
+
- A persisted selection in `src/locales/.languages.json` so the `update` command can preserve it
|
|
48
|
+
|
|
49
|
+
### Monolingual mode (transparent)
|
|
50
|
+
|
|
51
|
+
If you select only one language, the project becomes **monolingual** β the `<LanguageSelector>` automatically renders `null` (there is nothing to switch to). A header comment in the generated `App.tsx` documents this behavior. To force the selector visible anyway, pass `<LanguageSelector showWhenMonolingual />`.
|
|
52
|
+
|
|
53
|
+
### Updating languages later
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx xertica-ui update # then choose "Languages"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The flow shows your current selection, lets you toggle languages, and on confirmation:
|
|
60
|
+
- copies any newly-added locale JSON from `node_modules/xertica-ui/templates/src/locales/`
|
|
61
|
+
- removes JSONs of unselected languages
|
|
62
|
+
- regenerates `src/i18n.ts` and `src/app/App.tsx`
|
|
63
|
+
- updates `src/locales/.languages.json`
|
|
64
|
+
|
|
65
|
+
The `update` β **Project files** flow also reads `.languages.json` and preserves your selection β overwrites of `App.tsx` and `i18n.ts` won't reset your languages to defaults.
|
|
34
66
|
|
|
35
67
|
> **Note:** Always use `@latest` with npx. Without it, npx may execute a locally cached older version instead of fetching the latest from the registry.
|
|
36
68
|
|
|
@@ -64,7 +96,7 @@ export function Example() {
|
|
|
64
96
|
}
|
|
65
97
|
```
|
|
66
98
|
|
|
67
|
-
**3. Optionally wrap your app** with `XerticaProvider` when you want coordinated theme, layout, assistant, maps, tooltip, API-key, and toast services:
|
|
99
|
+
**3. Optionally wrap your app** with `XerticaProvider` when you want coordinated theme, layout, assistant, maps, tooltip, API-key, language, and toast services:
|
|
68
100
|
|
|
69
101
|
```tsx
|
|
70
102
|
import { XerticaProvider } from 'xertica-ui/brand';
|
|
@@ -78,6 +110,26 @@ function App() {
|
|
|
78
110
|
}
|
|
79
111
|
```
|
|
80
112
|
|
|
113
|
+
**Configuring languages at runtime** β `<XerticaProvider>` accepts `availableLanguages` to override the default set. When only one language is configured, the `LanguageSelector` auto-hides:
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
import { XerticaProvider, DEFAULT_LANGUAGES } from 'xertica-ui';
|
|
117
|
+
import fr from './locales/fr.json';
|
|
118
|
+
|
|
119
|
+
// Monolingual English (no language picker)
|
|
120
|
+
<XerticaProvider availableLanguages={[{ code: 'en', label: 'English' }]}>
|
|
121
|
+
|
|
122
|
+
// Defaults + a custom locale (bundle auto-registered with i18next)
|
|
123
|
+
<XerticaProvider
|
|
124
|
+
availableLanguages={[
|
|
125
|
+
...DEFAULT_LANGUAGES,
|
|
126
|
+
{ code: 'fr', label: 'FranΓ§ais', shortLabel: 'FR', resources: fr },
|
|
127
|
+
]}
|
|
128
|
+
>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
See [`docs/i18n.md`](./docs/i18n.md) for the full `LanguageDefinition` and `registerLanguageResource` API.
|
|
132
|
+
|
|
81
133
|
---
|
|
82
134
|
|
|
83
135
|
## π Subpath Imports (FSD/FDA)
|
|
@@ -85,15 +137,15 @@ function App() {
|
|
|
85
137
|
Xertica UI v2 exposes **granular subpath entries** β import only what your layer needs without loading the entire library:
|
|
86
138
|
|
|
87
139
|
```tsx
|
|
88
|
-
import { Button, Card, Input }
|
|
89
|
-
import { QuickActionCard }
|
|
90
|
-
import { Sidebar, Header }
|
|
91
|
-
import { XerticaProvider }
|
|
92
|
-
import { XerticaAssistant }
|
|
93
|
-
import { VideoPlayer, AudioPlayer }
|
|
140
|
+
import { Button, Card, Input } from 'xertica-ui/ui'; // shared/ui β primitives
|
|
141
|
+
import { QuickActionCard } from 'xertica-ui/blocks'; // composed blocks
|
|
142
|
+
import { Sidebar, Header } from 'xertica-ui/layout'; // layout shell
|
|
143
|
+
import { XerticaProvider } from 'xertica-ui/brand'; // app-level β providers & brand
|
|
144
|
+
import { XerticaAssistant } from 'xertica-ui/assistant'; // feature β AI assistant
|
|
145
|
+
import { VideoPlayer, AudioPlayer } from 'xertica-ui/media'; // feature β media players
|
|
94
146
|
import { useLayout, useOptionalLayout, useTheme } from 'xertica-ui/hooks'; // shared/lib β hooks & contexts
|
|
95
|
-
import { TemplatePage }
|
|
96
|
-
import 'xertica-ui/style.css';
|
|
147
|
+
import { TemplatePage } from 'xertica-ui/pages'; // optional page templates
|
|
148
|
+
import 'xertica-ui/style.css'; // styles β import once at root
|
|
97
149
|
```
|
|
98
150
|
|
|
99
151
|
The root `from 'xertica-ui'` barrel remains available for full backward compatibility.
|
|
@@ -115,6 +167,7 @@ Components with unavoidable external configuration, such as Google Maps, should
|
|
|
115
167
|
Xertica UI features an autonomous layout system managed by `LayoutContext`.
|
|
116
168
|
|
|
117
169
|
### Mandatory Page Structure
|
|
170
|
+
|
|
118
171
|
Every page **must** use the `<PageHeader>` component for its title and primary actions. Never use raw `h1` or `div` for headers.
|
|
119
172
|
|
|
120
173
|
```tsx
|
|
@@ -127,16 +180,16 @@ export function MyPage() {
|
|
|
127
180
|
<PageHeaderHeading>Dashboard</PageHeaderHeading>
|
|
128
181
|
<Button>Action</Button>
|
|
129
182
|
</PageHeader>
|
|
130
|
-
<div className="p-6">
|
|
131
|
-
{/* Page Content */}
|
|
132
|
-
</div>
|
|
183
|
+
<div className="p-6">{/* Page Content */}</div>
|
|
133
184
|
</>
|
|
134
185
|
);
|
|
135
186
|
}
|
|
136
187
|
```
|
|
137
188
|
|
|
138
189
|
### `useLayout()` Hook
|
|
190
|
+
|
|
139
191
|
Access the sidebar state, width, and toggle functions anywhere in the component tree:
|
|
192
|
+
|
|
140
193
|
```tsx
|
|
141
194
|
import { useLayout } from 'xertica-ui/hooks';
|
|
142
195
|
|
|
@@ -167,59 +220,97 @@ src/
|
|
|
167
220
|
types/ β auth.ts (User interface)
|
|
168
221
|
features/
|
|
169
222
|
auth/ui/ β LoginContent, ForgotPasswordContent, VerifyEmailContent, ResetPasswordContent
|
|
170
|
-
home/
|
|
223
|
+
home/
|
|
224
|
+
data/mock.ts β typed fetch + factory functions like getMockRichSuggestions()
|
|
225
|
+
hooks/ β useFeatureCards() β language-aware queryKey
|
|
226
|
+
ui/ β HomeContent
|
|
171
227
|
template/ui/ β TemplateContent, FormTemplate
|
|
172
|
-
|
|
228
|
+
assistant/ β AssistantConfig + useAssistantConfig() (always installed, AppLayout depends on it)
|
|
229
|
+
pages/ β thin wrappers: LoginPage, HomePage, TemplatePage, AssistantPage, β¦
|
|
173
230
|
styles/ β index.css, xertica/tokens.css
|
|
231
|
+
i18n.ts β generated by CLI β imports/resources for selected languages only
|
|
232
|
+
locales/
|
|
233
|
+
pt-BR.json
|
|
234
|
+
en.json β only files for the languages you selected
|
|
235
|
+
es.json
|
|
236
|
+
.languages.json β persisted selection (read by `npx xertica-ui update`)
|
|
174
237
|
```
|
|
175
238
|
|
|
176
|
-
Each feature only imports from `shared/` or its own domain. Pages only compose features. See `templates/guidelines/Guidelines.md` for the full architecture guide.
|
|
239
|
+
Each feature only imports from `shared/` or its own domain. Pages only compose features. Server-state hooks (e.g. `useFeatureCards`) include the active **language** in their `queryKey` so locale switching invalidates and refetches automatically. See `templates/guidelines/Guidelines.md` for the full architecture guide.
|
|
177
240
|
|
|
178
241
|
---
|
|
179
242
|
|
|
180
243
|
## π§© Component Catalog (100+ Components)
|
|
181
244
|
|
|
182
245
|
### Layout & Navigation
|
|
246
|
+
|
|
183
247
|
`Header` Β· `Sidebar` Β· `PageHeader` Β· `Breadcrumb` Β· `NavigationMenu` Β· `Tabs` Β· `Pagination` Β· `Accordion` Β· `Collapsible`
|
|
184
248
|
|
|
185
249
|
### Core Surfaces
|
|
250
|
+
|
|
186
251
|
`Card` Β· `Separator` Β· `ScrollArea` Β· `AspectRatio` Β· `Resizable` Β· `Skeleton` Β· `Empty`
|
|
187
252
|
|
|
188
253
|
### Forms & Inputs
|
|
254
|
+
|
|
189
255
|
`Form` Β· `Input` Β· `Textarea` Β· `RichTextEditor` Β· `Label` Β· `Checkbox` Β· `RadioGroup` Β· `Switch` Β· `Select` Β· `Slider` Β· `Calendar` Β· `InputOTP` Β· `FileUpload` Β· `Search`
|
|
190
256
|
|
|
191
257
|
### Actions & Data
|
|
258
|
+
|
|
192
259
|
`Button` Β· `Toggle` Β· `ToggleGroup` Β· `Rating` Β· `Table` Β· `Badge` Β· `Avatar` Β· `Progress` Β· `StatsCard` Β· `Timeline` Β· `Stepper` Β· `TreeView` Β· `NotificationBadge` Β· `Chart`
|
|
193
260
|
|
|
194
261
|
### Overlays & Feedback
|
|
262
|
+
|
|
195
263
|
`Dialog` Β· `AlertDialog` Β· `Sheet` Β· `Drawer` Β· `Popover` Β· `HoverCard` Β· `Tooltip` Β· `Alert` Β· `Sonner (Toast)` Β· `Command`
|
|
196
264
|
|
|
197
|
-
### Composed Blocks
|
|
198
|
-
|
|
265
|
+
### Composed Blocks (with matching skeleton variants)
|
|
266
|
+
|
|
267
|
+
| Card | Skeleton |
|
|
268
|
+
|---|---|
|
|
269
|
+
| `FeatureCard` | `FeatureCardSkeleton` |
|
|
270
|
+
| `ActivityCard` | `ActivityCardSkeleton` |
|
|
271
|
+
| `ProfileCard` | `ProfileCardSkeleton` |
|
|
272
|
+
| `ProjectCard` | `ProjectCardSkeleton` |
|
|
273
|
+
| `QuickActionCard` | `QuickActionCardSkeleton` |
|
|
274
|
+
| `NotificationCard` | `NotificationCardSkeleton` |
|
|
275
|
+
| `StatsCard` (in `xertica-ui/ui`) | `StatsCardSkeleton` |
|
|
276
|
+
|
|
277
|
+
Each skeleton mirrors its card's visual layout with pulsing placeholders for loading states:
|
|
278
|
+
|
|
279
|
+
```tsx
|
|
280
|
+
{isLoading
|
|
281
|
+
? <ActivityCardSkeleton rows={5} />
|
|
282
|
+
: <ActivityCard items={items} />}
|
|
283
|
+
```
|
|
199
284
|
|
|
200
285
|
---
|
|
201
286
|
|
|
202
287
|
## π Specialized Modules
|
|
203
288
|
|
|
204
289
|
### π€ AI Assistant
|
|
205
|
-
|
|
206
|
-
|
|
290
|
+
|
|
291
|
+
Integrated AI chat panel with workspace support. Use `demoMode={true}` for mock responses without an API key; pass `demoMode={false}` and a `geminiApiKey` (via `<XerticaProvider apiKey="...">`) for real Gemini integration.
|
|
292
|
+
|
|
293
|
+
- `XerticaAssistant` Β· `MarkdownMessage` Β· `CodeBlock` Β· `AssistantChart` Β· `ModernChatInput` Β· `FormattedDocument`
|
|
207
294
|
|
|
208
295
|
### πΊοΈ Maps & Geolocation
|
|
296
|
+
|
|
209
297
|
First-class Google Maps integration.
|
|
298
|
+
|
|
210
299
|
- `Map` Β· `RouteMap` Β· `SimpleMap` Β· `GoogleMapsLoader`
|
|
211
300
|
|
|
212
301
|
### ποΈ Media
|
|
302
|
+
|
|
213
303
|
- `AudioPlayer` Β· `VideoPlayer` Β· `FloatingMediaWrapper`
|
|
214
304
|
|
|
215
305
|
### π Pages
|
|
216
|
-
|
|
306
|
+
|
|
307
|
+
- `LoginPage` Β· `HomePage` Β· `TemplatePage` Β· `AssistantPage` Β· `ForgotPasswordPage` Β· `ResetPasswordPage` Β· `VerifyEmailPage`
|
|
217
308
|
|
|
218
309
|
### π§± Blocks
|
|
219
|
-
High-level dashboard and product patterns exported from `xertica-ui/blocks`.
|
|
220
|
-
- `FeatureCard` Β· `ActivityCard` Β· `ProfileCard` Β· `ProjectCard` Β· `QuickActionCard` Β· `NotificationCard`
|
|
221
310
|
|
|
222
|
-
|
|
311
|
+
High-level dashboard and product patterns exported from `xertica-ui/blocks` (also re-exported from the root barrel). Every card ships with a matching `*Skeleton` loading-state companion β see the table in **Composed Blocks** above.
|
|
312
|
+
|
|
313
|
+
The CLI template includes a small fixed version badge so generated projects can visually identify which `xertica-ui` package version they are using.
|
|
223
314
|
|
|
224
315
|
---
|
|
225
316
|
|
|
@@ -248,38 +339,44 @@ Border: border-border
|
|
|
248
339
|
|
|
249
340
|
## π Localization
|
|
250
341
|
|
|
251
|
-
|
|
342
|
+
Xertica UI is fully internationalized via **`i18next`** + **`react-i18next`**.
|
|
343
|
+
|
|
344
|
+
- **UI Components**: Translated out-of-the-box in **Portuguese (pt-BR)**, **English**, and **EspaΓ±ol**. Every component uses `useTranslation()` β no hardcoded strings.
|
|
345
|
+
- **Runtime extensibility**: Add custom locales (e.g. `fr`, `ja`, `de`) at runtime via `<XerticaProvider availableLanguages={[...]}>` β no source-file edits required.
|
|
346
|
+
- **Monolingual mode**: Configure a single language to make the `LanguageSelector` auto-hide.
|
|
347
|
+
- **Language-aware React Query**: Hooks include the active language in their `queryKey` so mock/API responses translated via `i18n.t()` refetch automatically when the user switches language. No page reload required.
|
|
252
348
|
- **Documentation/Code**: Strictly maintained in **English** for AI Agent compatibility and global developer standard.
|
|
253
349
|
|
|
350
|
+
See [`docs/i18n.md`](./docs/i18n.md) for setup, runtime configuration, and adding custom locales.
|
|
351
|
+
|
|
254
352
|
---
|
|
255
353
|
|
|
256
354
|
## π» Tech Stack
|
|
257
355
|
|
|
258
|
-
| Technology
|
|
259
|
-
|
|
260
|
-
| React
|
|
261
|
-
| TypeScript
|
|
262
|
-
| Tailwind CSS | 4.0
|
|
263
|
-
| Vite
|
|
264
|
-
| Radix UI
|
|
265
|
-
| Lucide React | 0.469+
|
|
266
|
-
| Vitest
|
|
356
|
+
| Technology | Version |
|
|
357
|
+
| ------------ | ------- |
|
|
358
|
+
| React | 18.3 |
|
|
359
|
+
| TypeScript | 5.7 |
|
|
360
|
+
| Tailwind CSS | 4.0 |
|
|
361
|
+
| Vite | 6.0 |
|
|
362
|
+
| Radix UI | Latest |
|
|
363
|
+
| Lucide React | 0.469+ |
|
|
364
|
+
| Vitest | 4.1 |
|
|
267
365
|
|
|
268
366
|
---
|
|
269
367
|
|
|
270
368
|
## π Scripts
|
|
271
369
|
|
|
272
|
-
| Command
|
|
273
|
-
|
|
274
|
-
| `npm run dev`
|
|
275
|
-
| `npm run build`
|
|
276
|
-
| `npm run storybook`
|
|
277
|
-
| `npm run test`
|
|
278
|
-
| `npm run type-check` | TypeScript validation
|
|
370
|
+
| Command | Description |
|
|
371
|
+
| -------------------- | -------------------------------------- |
|
|
372
|
+
| `npm run dev` | Start development server |
|
|
373
|
+
| `npm run build` | Production bundle |
|
|
374
|
+
| `npm run storybook` | Launch component library documentation |
|
|
375
|
+
| `npm run test` | Run unit tests via Vitest |
|
|
376
|
+
| `npm run type-check` | TypeScript validation |
|
|
279
377
|
|
|
280
378
|
---
|
|
281
379
|
|
|
282
380
|
## βοΈ License
|
|
283
381
|
|
|
284
382
|
Proprietary β Xertica.ai Team.
|
|
285
|
-
|
package/assets/xertica-logo.svg
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
fill="none"
|
|
3
|
-
preserveAspectRatio="xMidYMid meet"
|
|
4
|
-
viewBox="0 0 1543 289"
|
|
5
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
6
|
-
>
|
|
7
|
-
<g id="Xertica.ai">
|
|
8
|
-
<path d="M1352.82 239.808V285.425H1304.73V239.808H1352.82Z" fill="#00BEFF" />
|
|
9
|
-
<path d="M814.8 284.848H766.711V77.4971H814.8V284.848Z" fill="#00BEFF" />
|
|
10
|
-
<path d="M1543 284.438H1514.2V160.28H1543V284.438Z" fill="#00BEFF" />
|
|
11
|
-
<path
|
|
12
|
-
clip-rule="evenodd"
|
|
13
|
-
d="M1432.83 157.796C1446.98 157.796 1459.14 162.515 1468.58 170.709V160.28H1497.38V284.438H1468.58V274.01C1459.14 282.451 1446.98 286.921 1432.83 286.921C1395.1 286.921 1368.29 260.352 1368.29 222.359C1368.29 184.616 1395.1 157.796 1432.83 157.796ZM1432.83 183.778C1410.79 183.778 1396.27 199.061 1396.27 222.359C1396.27 245.658 1410.79 260.94 1432.83 260.94C1454.63 260.94 1468.9 245.658 1468.9 222.359C1468.9 199.06 1454.63 183.778 1432.83 183.778Z"
|
|
14
|
-
fill="#00BEFF"
|
|
15
|
-
fill-rule="evenodd"
|
|
16
|
-
/>
|
|
17
|
-
<path d="M947.87 73.3516C1002.88 73.3516 1044.42 107.647 1053.57 159.234H1004.68C997.221 132.988 976.34 117.308 947.87 117.308C911.387 117.308 887.337 142.612 887.337 181.176C887.337 219.739 911.387 245.036 947.87 245.036C976.34 245.036 997.221 229.356 1004.68 203.109H1053.57C1044.47 254.701 1003.26 289 947.87 289C884.853 289 840.078 244.626 840.078 181.176C840.078 118.142 884.854 73.3516 947.87 73.3516Z" fill="#00BEFF" />
|
|
18
|
-
<path d="M88.4971 39.8242L157.353 142.191L83.5371 251.524L60.9277 284.854H0L96.3154 142.191L5.37695 7H66.3047L88.4971 39.8242Z" fill="#00BEFF" />
|
|
19
|
-
<path d="M254.314 284.855H193.387L151.914 223.71L182.548 178.551L254.314 284.855Z" fill="#00BEFF" />
|
|
20
|
-
<path
|
|
21
|
-
clip-rule="evenodd"
|
|
22
|
-
d="M1179.14 73.3477C1202.77 73.3477 1223.08 81.2286 1238.84 94.9121V77.4971H1286.94V284.847H1238.84V267.431C1223.09 281.528 1202.77 288.992 1179.14 288.992C1116.12 288.992 1071.35 244.622 1071.35 181.172C1071.35 118.139 1116.12 73.3478 1179.14 73.3477ZM1179.14 117.308C1142.66 117.308 1118.61 142.604 1118.61 181.172C1118.61 219.739 1142.66 245.035 1179.14 245.035C1215.21 245.035 1238.84 219.739 1238.84 181.172C1238.84 142.605 1215.21 117.308 1179.14 117.308Z"
|
|
23
|
-
fill="#00BEFF"
|
|
24
|
-
fill-rule="evenodd"
|
|
25
|
-
/>
|
|
26
|
-
<path d="M1543 145.383H1514.2V118.067H1543V145.383Z" fill="#00BEFF" />
|
|
27
|
-
<path d="M672.466 77.501H736.31V121.457H672.466V211.448C672.466 230.939 682.415 240.891 702.313 240.891H736.309V284.852H698.999C649.246 284.851 625.203 259.968 625.203 211.449V7H672.466V77.501Z" fill="#00BEFF" />
|
|
28
|
-
<path d="M814.8 52.6172H766.711V7H814.8V52.6172Z" fill="#00BEFF" />
|
|
29
|
-
<path
|
|
30
|
-
clip-rule="evenodd"
|
|
31
|
-
d="M354.069 73.3516C417.086 73.3517 461.864 118.143 461.864 181.176C461.864 187.396 461.031 193.615 460.204 199.422H295.197C301.829 228.864 323.392 246.696 354.069 246.696C372.724 246.696 389.309 241.721 399.675 226.376H452.742C441.132 265.774 400.501 288.996 354.069 288.996C291.053 288.996 246.274 244.626 246.273 181.176C246.273 118.142 291.053 73.3516 354.069 73.3516ZM354.068 115.65C325.044 115.65 303.902 131.826 296.44 158.78H410.863C403.819 131.826 382.672 115.65 354.068 115.65Z"
|
|
32
|
-
fill="#00BEFF"
|
|
33
|
-
fill-rule="evenodd"
|
|
34
|
-
/>
|
|
35
|
-
<path d="M596.957 121.453H562.962C543.064 121.453 533.114 131.409 533.114 150.899V284.847H485.852V150.899C485.852 102.38 509.894 77.4972 559.647 77.4971H596.957V121.453Z" fill="#00BEFF" />
|
|
36
|
-
<path d="M182.552 98.6992L151.922 53.3906L188.014 0H248.941L182.552 98.6992Z" fill="#00BEFF" />
|
|
37
|
-
</g>
|
|
1
|
+
<svg
|
|
2
|
+
fill="none"
|
|
3
|
+
preserveAspectRatio="xMidYMid meet"
|
|
4
|
+
viewBox="0 0 1543 289"
|
|
5
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
6
|
+
>
|
|
7
|
+
<g id="Xertica.ai">
|
|
8
|
+
<path d="M1352.82 239.808V285.425H1304.73V239.808H1352.82Z" fill="#00BEFF" />
|
|
9
|
+
<path d="M814.8 284.848H766.711V77.4971H814.8V284.848Z" fill="#00BEFF" />
|
|
10
|
+
<path d="M1543 284.438H1514.2V160.28H1543V284.438Z" fill="#00BEFF" />
|
|
11
|
+
<path
|
|
12
|
+
clip-rule="evenodd"
|
|
13
|
+
d="M1432.83 157.796C1446.98 157.796 1459.14 162.515 1468.58 170.709V160.28H1497.38V284.438H1468.58V274.01C1459.14 282.451 1446.98 286.921 1432.83 286.921C1395.1 286.921 1368.29 260.352 1368.29 222.359C1368.29 184.616 1395.1 157.796 1432.83 157.796ZM1432.83 183.778C1410.79 183.778 1396.27 199.061 1396.27 222.359C1396.27 245.658 1410.79 260.94 1432.83 260.94C1454.63 260.94 1468.9 245.658 1468.9 222.359C1468.9 199.06 1454.63 183.778 1432.83 183.778Z"
|
|
14
|
+
fill="#00BEFF"
|
|
15
|
+
fill-rule="evenodd"
|
|
16
|
+
/>
|
|
17
|
+
<path d="M947.87 73.3516C1002.88 73.3516 1044.42 107.647 1053.57 159.234H1004.68C997.221 132.988 976.34 117.308 947.87 117.308C911.387 117.308 887.337 142.612 887.337 181.176C887.337 219.739 911.387 245.036 947.87 245.036C976.34 245.036 997.221 229.356 1004.68 203.109H1053.57C1044.47 254.701 1003.26 289 947.87 289C884.853 289 840.078 244.626 840.078 181.176C840.078 118.142 884.854 73.3516 947.87 73.3516Z" fill="#00BEFF" />
|
|
18
|
+
<path d="M88.4971 39.8242L157.353 142.191L83.5371 251.524L60.9277 284.854H0L96.3154 142.191L5.37695 7H66.3047L88.4971 39.8242Z" fill="#00BEFF" />
|
|
19
|
+
<path d="M254.314 284.855H193.387L151.914 223.71L182.548 178.551L254.314 284.855Z" fill="#00BEFF" />
|
|
20
|
+
<path
|
|
21
|
+
clip-rule="evenodd"
|
|
22
|
+
d="M1179.14 73.3477C1202.77 73.3477 1223.08 81.2286 1238.84 94.9121V77.4971H1286.94V284.847H1238.84V267.431C1223.09 281.528 1202.77 288.992 1179.14 288.992C1116.12 288.992 1071.35 244.622 1071.35 181.172C1071.35 118.139 1116.12 73.3478 1179.14 73.3477ZM1179.14 117.308C1142.66 117.308 1118.61 142.604 1118.61 181.172C1118.61 219.739 1142.66 245.035 1179.14 245.035C1215.21 245.035 1238.84 219.739 1238.84 181.172C1238.84 142.605 1215.21 117.308 1179.14 117.308Z"
|
|
23
|
+
fill="#00BEFF"
|
|
24
|
+
fill-rule="evenodd"
|
|
25
|
+
/>
|
|
26
|
+
<path d="M1543 145.383H1514.2V118.067H1543V145.383Z" fill="#00BEFF" />
|
|
27
|
+
<path d="M672.466 77.501H736.31V121.457H672.466V211.448C672.466 230.939 682.415 240.891 702.313 240.891H736.309V284.852H698.999C649.246 284.851 625.203 259.968 625.203 211.449V7H672.466V77.501Z" fill="#00BEFF" />
|
|
28
|
+
<path d="M814.8 52.6172H766.711V7H814.8V52.6172Z" fill="#00BEFF" />
|
|
29
|
+
<path
|
|
30
|
+
clip-rule="evenodd"
|
|
31
|
+
d="M354.069 73.3516C417.086 73.3517 461.864 118.143 461.864 181.176C461.864 187.396 461.031 193.615 460.204 199.422H295.197C301.829 228.864 323.392 246.696 354.069 246.696C372.724 246.696 389.309 241.721 399.675 226.376H452.742C441.132 265.774 400.501 288.996 354.069 288.996C291.053 288.996 246.274 244.626 246.273 181.176C246.273 118.142 291.053 73.3516 354.069 73.3516ZM354.068 115.65C325.044 115.65 303.902 131.826 296.44 158.78H410.863C403.819 131.826 382.672 115.65 354.068 115.65Z"
|
|
32
|
+
fill="#00BEFF"
|
|
33
|
+
fill-rule="evenodd"
|
|
34
|
+
/>
|
|
35
|
+
<path d="M596.957 121.453H562.962C543.064 121.453 533.114 131.409 533.114 150.899V284.847H485.852V150.899C485.852 102.38 509.894 77.4972 559.647 77.4971H596.957V121.453Z" fill="#00BEFF" />
|
|
36
|
+
<path d="M182.552 98.6992L151.922 53.3906L188.014 0H248.941L182.552 98.6992Z" fill="#00BEFF" />
|
|
37
|
+
</g>
|
|
38
38
|
</svg>
|