xertica-ui 2.5.3 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +687 -664
- package/README.md +482 -482
- package/assets/xertica-logo.svg +37 -37
- package/assets/xertica-x-logo.svg +20 -20
- package/bin/cli.ts +1293 -1256
- package/bin/generate-tokens.ts +256 -262
- package/bin/language-config.test.ts +32 -0
- package/bin/language-config.ts +384 -359
- package/components/Introduction.mdx +121 -121
- package/components/assistant/code-block/CodeBlock.tsx +7 -6
- package/components/assistant/code-block/code-block.mdx +38 -38
- package/components/assistant/code-block/code-block.test.tsx +2 -1
- package/components/assistant/formatted-document/FormattedDocument.tsx +3 -0
- package/components/assistant/formatted-document/formatted-document.mdx +31 -31
- package/components/assistant/formatted-document/formatted-document.test.tsx +5 -4
- package/components/assistant/markdown-message/MarkdownMessage.tsx +1 -1
- package/components/assistant/markdown-message/markdown-message.mdx +44 -44
- package/components/assistant/modern-chat-input/modern-chat-input.mdx +71 -71
- package/components/assistant/modern-chat-input/modern-chat-input.test.tsx +3 -2
- package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +1 -1
- package/components/assistant/xertica-assistant/types.ts +3 -2
- package/components/assistant/xertica-assistant/use-assistant.ts +5 -4
- package/components/assistant/xertica-assistant/xertica-assistant.mdx +66 -66
- package/components/assistant/xertica-assistant/xertica-assistant.test.tsx +2 -1
- package/components/blocks/card-patterns/card-patterns.mdx +123 -123
- package/components/brand/branding/branding.mdx +27 -27
- package/components/brand/language-selector/language-selector.mdx +126 -126
- package/components/brand/theme-toggle/theme-toggle.mdx +47 -47
- package/components/brand/theme-toggle/theme-toggle.test.tsx +6 -2
- package/components/brand/xertica-logo/xertica-logo.mdx +56 -56
- package/components/brand/xertica-orbe/xertica-orbe.mdx +38 -38
- package/components/brand/xertica-provider/XerticaProvider.tsx +112 -112
- package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
- package/components/brand/xertica-provider/xertica-provider.test.tsx +25 -13
- package/components/brand/xertica-xlogo/xertica-xlogo.mdx +55 -55
- package/components/examples/DrawingMapExample.tsx +1 -4
- package/components/layout/header/header.mdx +117 -117
- package/components/layout/header/header.test.tsx +2 -1
- package/components/layout/sidebar/sidebar.mdx +99 -99
- package/components/layout/sidebar/sidebar.stories.tsx +1033 -1033
- package/components/layout/sidebar/sidebar.test.tsx +2 -1
- package/components/layout/sidebar/sidebar.tsx +1509 -1506
- package/components/media/audio-player/AudioPlayer.mdx +67 -67
- package/components/media/audio-player/AudioPlayer.test.tsx +2 -1
- package/components/media/floating-media-wrapper.mdx +74 -74
- package/components/media/video-player/VideoPlayer.mdx +102 -102
- package/components/media/video-player/VideoPlayer.test.tsx +3 -2
- package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +188 -188
- package/components/pages/forgot-password-page/forgot-password-page.mdx +60 -60
- package/components/pages/forgot-password-page/forgot-password-page.test.tsx +2 -1
- package/components/pages/home-content/HomeContent.tsx +119 -119
- package/components/pages/home-content/home-content.mdx +62 -62
- package/components/pages/home-page/HomePage.stories.tsx +8 -15
- package/components/pages/home-page/home-page.mdx +53 -53
- package/components/pages/home-page/home-page.test.tsx +2 -1
- package/components/pages/login-page/LoginPage.mdx +31 -31
- package/components/pages/login-page/LoginPage.tsx +218 -218
- package/components/pages/login-page/login-page.test.tsx +2 -1
- package/components/pages/reset-password-page/ResetPasswordPage.tsx +243 -243
- package/components/pages/reset-password-page/reset-password-page.mdx +63 -63
- package/components/pages/template-content/TemplateContent.tsx +1353 -1353
- package/components/pages/template-content/template-content.mdx +61 -61
- package/components/pages/template-page/TemplatePage.stories.tsx +32 -32
- package/components/pages/template-page/template-page.mdx +53 -53
- package/components/pages/template-page/template-page.test.tsx +2 -1
- package/components/pages/verify-email-page/VerifyEmailPage.tsx +206 -206
- package/components/pages/verify-email-page/verify-email-page.mdx +55 -55
- package/components/public-api-smoke.test.tsx +10 -6
- package/components/shared/assistant-utils.ts +3 -2
- package/components/shared/navigation.ts +2 -2
- package/components/ui/accordion/accordion.mdx +29 -29
- package/components/ui/alert/alert.mdx +29 -29
- package/components/ui/alert-dialog/alert-dialog.mdx +26 -26
- package/components/ui/aspect-ratio/aspect-ratio.mdx +25 -25
- package/components/ui/assistant-chart/AssistantChart.tsx +8 -2
- package/components/ui/assistant-chart/assistant-chart.mdx +25 -25
- package/components/ui/avatar/avatar.mdx +26 -26
- package/components/ui/badge/badge.mdx +28 -28
- package/components/ui/breadcrumb/breadcrumb.mdx +26 -26
- package/components/ui/button/button.mdx +29 -29
- package/components/ui/calendar/calendar.mdx +26 -26
- package/components/ui/card/card.mdx +26 -26
- package/components/ui/carousel/carousel.mdx +26 -26
- package/components/ui/chart/chart.mdx +26 -26
- package/components/ui/chart/chart.test.tsx +178 -178
- package/components/ui/chart/chart.tsx +2252 -2245
- package/components/ui/checkbox/checkbox.mdx +26 -26
- package/components/ui/collapsible/collapsible.mdx +25 -25
- package/components/ui/command/command.mdx +26 -26
- package/components/ui/context-menu/context-menu.mdx +26 -26
- package/components/ui/dialog/dialog.mdx +26 -26
- package/components/ui/drawer/drawer.mdx +26 -26
- package/components/ui/dropdown-menu/dropdown-menu.mdx +26 -26
- package/components/ui/empty/empty.mdx +26 -26
- package/components/ui/file-upload/file-upload.mdx +26 -26
- package/components/ui/form/form.mdx +20 -20
- package/components/ui/google-maps-loader/google-maps-loader.mdx +68 -68
- package/components/ui/hover-card/hover-card.mdx +26 -26
- package/components/ui/input/input.mdx +29 -29
- package/components/ui/input-otp/input-otp.mdx +26 -26
- package/components/ui/label/label.mdx +25 -25
- package/components/ui/map/map.mdx +26 -26
- package/components/ui/map/map.tsx +6 -1
- package/components/ui/menubar/menubar.mdx +26 -26
- package/components/ui/navigation-menu/navigation-menu.mdx +26 -26
- package/components/ui/notification-badge/notification-badge.mdx +26 -26
- package/components/ui/page-header/page-header.mdx +44 -44
- package/components/ui/pagination/pagination.mdx +26 -26
- package/components/ui/popover/popover.mdx +26 -26
- package/components/ui/progress/progress.mdx +25 -25
- package/components/ui/radio-group/radio-group.mdx +26 -26
- package/components/ui/rating/rating.mdx +26 -26
- package/components/ui/resizable/resizable.mdx +26 -26
- package/components/ui/resizable/resizable.tsx +13 -8
- package/components/ui/rich-text-editor/rich-text-editor.mdx +47 -47
- package/components/ui/route-map/route-map.mdx +26 -26
- package/components/ui/scroll-area/scroll-area.mdx +25 -25
- package/components/ui/search/search.mdx +27 -27
- package/components/ui/select/select.mdx +26 -26
- package/components/ui/separator/separator.mdx +25 -25
- package/components/ui/sheet/sheet.mdx +26 -26
- package/components/ui/simple-map/simple-map.mdx +25 -25
- package/components/ui/skeleton/skeleton.mdx +25 -25
- package/components/ui/slider/slider.mdx +26 -26
- package/components/ui/sonner/sonner.mdx +26 -26
- package/components/ui/stats-card/stats-card.mdx +26 -26
- package/components/ui/stats-card/stats-card.stories.tsx +117 -117
- package/components/ui/stats-card/stats-card.tsx +109 -109
- package/components/ui/stepper/stepper.mdx +26 -26
- package/components/ui/switch/switch.mdx +25 -25
- package/components/ui/table/table.mdx +27 -27
- package/components/ui/tabs/tabs.mdx +26 -26
- package/components/ui/textarea/textarea.mdx +25 -25
- package/components/ui/timeline/timeline.mdx +26 -26
- package/components/ui/toggle/toggle.mdx +26 -26
- package/components/ui/toggle-group/toggle-group.mdx +26 -26
- package/components/ui/tooltip/tooltip.mdx +26 -26
- package/components/ui/tree-view/tree-view.mdx +26 -26
- package/components.json +511 -511
- package/contexts/BrandColorsContext.tsx +282 -282
- package/contexts/i18n-singleton.test.tsx +57 -0
- package/contexts/theme-data.ts +391 -391
- package/dist/{AssistantChart-DNdwuS-t.js → AssistantChart-BMNSA_Pk.js} +4 -4
- package/dist/{AssistantChart-COGiOV-g.cjs → AssistantChart-BzM7plyc.cjs} +31 -21
- package/dist/{AssistantChart-CWX1OWNM.js → AssistantChart-C842evTi.js} +31 -21
- package/dist/{AssistantChart-BW9JK6jw.cjs → AssistantChart-CVF2uh37.cjs} +4 -4
- package/dist/{AssistantChart-BZTPJ5dP.cjs → AssistantChart-JooMdVQU.cjs} +5 -5
- package/dist/{AssistantChart-DMJJ_Amf.js → AssistantChart-KHS-tp-L.js} +5 -5
- package/dist/{BrandColorsContext-BwY-b6M4.cjs → BrandColorsContext-B4_81eas.cjs} +2 -2
- package/dist/{BrandColorsContext-BMRJ04Wf.js → BrandColorsContext-DbK5LnQ_.js} +2 -2
- package/dist/{CodeBlock-CjeFavqV.js → CodeBlock-DiKO8ocT.js} +11 -11
- package/dist/{CodeBlock-CV6dtsTM.cjs → CodeBlock-ZYThr7Kn.cjs} +12 -9
- package/dist/{XerticaXLogo-mqjoBiLI.js → LanguageSelector-CmTj3lWq.js} +85 -82
- package/dist/{XerticaXLogo-BX3ueACh.js → LanguageSelector-DxW6o7bt.js} +81 -81
- package/dist/{XerticaXLogo-uQgwns_E.cjs → LanguageSelector-Sw73qvWV.cjs} +84 -81
- package/dist/{ThemeContext-BgclCB35.js → ThemeContext-BGeh_Kdr.js} +290 -212
- package/dist/{ThemeContext-BblcjQup.cjs → ThemeContext-D50irx5T.cjs} +291 -205
- package/dist/{VerifyEmailPage-C_Zk6Gen.cjs → VerifyEmailPage-B6bOrybJ.cjs} +17 -17
- package/dist/{VerifyEmailPage-B31mCrMc.js → VerifyEmailPage-BRE5Fz59.js} +8 -8
- package/dist/{VerifyEmailPage-Cyl55sJb.js → VerifyEmailPage-BcCluouh.js} +135 -65
- package/dist/VerifyEmailPage-Bx1sr0uQ.cjs +3298 -0
- package/dist/{VerifyEmailPage-Bci0bA-P.js → VerifyEmailPage-DUYyXCX9.js} +3 -3
- package/dist/VerifyEmailPage-DXXMHbzq.js +3289 -0
- package/dist/{VerifyEmailPage-u_Dn7t1U.cjs → VerifyEmailPage-DpYtFk35.cjs} +21 -21
- package/dist/{VerifyEmailPage-X14vhdyl.js → VerifyEmailPage-NXKWW3Dk.js} +12 -12
- package/dist/{VerifyEmailPage-C7KiYXrm.cjs → VerifyEmailPage-QrCz4Wqr.cjs} +11 -11
- package/dist/{VerifyEmailPage-Bv8Ah_TK.cjs → VerifyEmailPage-ZmQra0Wi.cjs} +144 -74
- package/dist/{XerticaProvider-BErr83Bg.js → XerticaProvider-BF3q_myt.js} +5 -4
- package/dist/{XerticaProvider-CeS5G_n5.cjs → XerticaProvider-C_JSOz1U.cjs} +2 -2
- package/dist/{XerticaProvider-CwOkHxiT.cjs → XerticaProvider-D5zjrqZq.cjs} +5 -4
- package/dist/{XerticaProvider-ra2NciRq.js → XerticaProvider-KTGl4Cn1.js} +2 -2
- package/dist/{alert-dialog-DqlRW_An.js → alert-dialog-BrpwXKwS.js} +3 -3
- package/dist/{alert-dialog-DhwPioBa.cjs → alert-dialog-CZU1Zase.cjs} +3 -3
- package/dist/{alert-dialog-KpoabzJb.js → alert-dialog-ClRoLH7l.js} +40 -56
- package/dist/{alert-dialog-B4M3vQKS.cjs → alert-dialog-DBBqvU-V.cjs} +53 -38
- package/dist/assistant.cjs.js +2 -2
- package/dist/assistant.es.js +2 -2
- package/dist/brand.cjs.js +6 -6
- package/dist/brand.es.js +2 -2
- package/dist/cli.js +63 -21
- package/dist/components/assistant/code-block/CodeBlock.d.ts +2 -1
- package/dist/components/assistant/formatted-document/FormattedDocument.d.ts +2 -1
- package/dist/components/assistant/markdown-message/MarkdownMessage.d.ts +2 -1
- package/dist/components/assistant/modern-chat-input/ModernChatInput.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantCollapsedView.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantConversationList.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantHeader.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantMessageBubble.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantTabBar.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/types.d.ts +3 -2
- package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +1 -1
- package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +2 -1
- package/dist/components/blocks/card-patterns/ActivityCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/FeatureCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/NotificationCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProfileCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProjectCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/QuickActionCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +1 -1
- package/dist/components/brand/language-selector/LanguageSelector.d.ts +2 -1
- package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +2 -1
- package/dist/components/brand/xertica-logo/XerticaLogo.d.ts +2 -1
- package/dist/components/brand/xertica-orbe/XerticaOrbe.d.ts +2 -1
- package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +1 -1
- package/dist/components/brand/xertica-xlogo/XerticaXLogo.d.ts +2 -1
- package/dist/components/examples/DrawingMapExample.d.ts +2 -1
- package/dist/components/examples/FilterableMapExample.d.ts +1 -1
- package/dist/components/examples/MapShowcase.d.ts +2 -1
- package/dist/components/examples/SimpleFilterableMap.d.ts +2 -1
- package/dist/components/figma/ImageWithFallback.d.ts +1 -1
- package/dist/components/layout/header/header.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar.d.ts +25 -13
- package/dist/components/media/FloatingMediaWrapper.d.ts +1 -1
- package/dist/components/media/audio-player/AudioPlayer.d.ts +2 -1
- package/dist/components/media/video-player/VideoPlayer.d.ts +2 -1
- package/dist/components/pages/forgot-password-page/ForgotPasswordPage.d.ts +2 -1
- package/dist/components/pages/home-content/HomeContent.d.ts +2 -1
- package/dist/components/pages/home-page/HomePage.d.ts +2 -1
- package/dist/components/pages/login-page/LoginPage.d.ts +2 -1
- package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +2 -1
- package/dist/components/pages/template-content/TemplateContent.d.ts +2 -1
- package/dist/components/pages/template-page/TemplatePage.d.ts +2 -1
- package/dist/components/pages/verify-email-page/VerifyEmailPage.d.ts +2 -1
- package/dist/components/shared/CustomTooltipContent.d.ts +1 -1
- package/dist/components/shared/assistant-utils.d.ts +3 -2
- package/dist/components/shared/error-boundary.d.ts +4 -4
- package/dist/components/shared/error-fallbacks.d.ts +4 -3
- package/dist/components/shared/navigation.d.ts +6 -2
- package/dist/components/ui/accordion/accordion.d.ts +4 -4
- package/dist/components/ui/alert/alert.d.ts +3 -3
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts +10 -10
- package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +1 -1
- package/dist/components/ui/assistant-chart/AssistantChart.d.ts +4 -3
- package/dist/components/ui/avatar/avatar.d.ts +3 -3
- package/dist/components/ui/badge/badge.d.ts +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb.d.ts +7 -7
- package/dist/components/ui/calendar/calendar.d.ts +2 -2
- package/dist/components/ui/card/card.d.ts +7 -7
- package/dist/components/ui/carousel/carousel.d.ts +5 -5
- package/dist/components/ui/chart/chart.d.ts +16 -16
- package/dist/components/ui/collapsible/collapsible.d.ts +3 -3
- package/dist/components/ui/command/command.d.ts +9 -9
- package/dist/components/ui/context-menu/context-menu.d.ts +15 -15
- package/dist/components/ui/dialog/dialog.d.ts +9 -9
- package/dist/components/ui/drawer/drawer.d.ts +10 -10
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +15 -15
- package/dist/components/ui/form/form.d.ts +7 -7
- package/dist/components/ui/google-maps-loader/google-maps-loader.d.ts +3 -3
- package/dist/components/ui/hover-card/hover-card.d.ts +3 -3
- package/dist/components/ui/input-otp/input-otp.d.ts +4 -4
- package/dist/components/ui/label/label.d.ts +1 -1
- package/dist/components/ui/menubar/menubar.d.ts +16 -16
- package/dist/components/ui/navigation-menu/navigation-menu.d.ts +8 -8
- package/dist/components/ui/page-header/page-header.d.ts +3 -3
- package/dist/components/ui/pagination/pagination.d.ts +7 -7
- package/dist/components/ui/popover/popover.d.ts +4 -4
- package/dist/components/ui/progress/progress.d.ts +1 -1
- package/dist/components/ui/resizable/resizable.d.ts +11 -7
- package/dist/components/ui/rich-text-editor/rich-text-editor.d.ts +1 -1
- package/dist/components/ui/scroll-area/scroll-area.d.ts +2 -2
- package/dist/components/ui/separator/separator.d.ts +1 -1
- package/dist/components/ui/sheet/sheet.d.ts +10 -10
- package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
- package/dist/components/ui/sonner/sonner.d.ts +2 -1
- package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +1 -1
- package/dist/components/ui/table/table.d.ts +8 -8
- package/dist/components/ui/tabs/tabs.d.ts +4 -4
- package/dist/components/ui/tooltip/tooltip.d.ts +4 -4
- package/dist/contexts/ApiKeyContext.d.ts +2 -2
- package/dist/contexts/AssistenteContext.d.ts +1 -1
- package/dist/contexts/AuthContext.d.ts +1 -1
- package/dist/contexts/LanguageContext.d.ts +2 -2
- package/dist/contexts/LayoutContext.d.ts +2 -2
- package/dist/contexts/ThemeContext.d.ts +1 -1
- package/dist/features/assistant/hooks/useAssistantConfig.d.ts +1 -1
- package/dist/features/home/hooks/useDashboardStats.d.ts +1 -1
- package/dist/features/home/hooks/useFeatureCards.d.ts +1 -1
- package/dist/features/home/hooks/useTeamMembers.d.ts +1 -1
- package/dist/{google-maps-loader-BCe58h9D.js → google-maps-loader-BOug999f.js} +0 -4
- package/dist/{google-maps-loader-casMyxlo.cjs → google-maps-loader-DfeBRI8Q.cjs} +0 -5
- package/dist/hooks.cjs.js +2 -2
- package/dist/hooks.es.js +2 -2
- package/dist/{index-9GWd0qxq.cjs → index-BQjx1Mdf.cjs} +1 -1
- package/dist/index-Bei5DzAL.js +6 -0
- package/dist/index.cjs.js +15 -15
- package/dist/index.es.js +11 -11
- package/dist/layout.cjs.js +1 -1
- package/dist/layout.es.js +1 -1
- package/dist/pages.cjs.js +1 -1
- package/dist/pages.es.js +1 -1
- package/dist/{rich-text-editor-B2CKz7nx.cjs → rich-text-editor-BuqSu718.cjs} +68 -3
- package/dist/{rich-text-editor-DloeW0wc.js → rich-text-editor-CV8FtA_l.js} +66 -4
- package/dist/{sidebar-CLmIjgNd.cjs → sidebar-BGJ0j567.cjs} +84 -67
- package/dist/{sidebar-Duermn32.js → sidebar-BI6mZlC8.js} +81 -64
- package/dist/{sidebar-BS1p2V7t.cjs → sidebar-BtmotOg-.cjs} +367 -9
- package/dist/{sidebar-QwCoeoZ_.js → sidebar-D3EgGVxF.js} +1 -1
- package/dist/{sidebar-CQn_rwxP.cjs → sidebar-DDTqMGnR.cjs} +4 -4
- package/dist/{sidebar-3XyzjVBw.js → sidebar-I7EXyf5D.js} +364 -6
- package/dist/ui.cjs.js +4 -4
- package/dist/ui.es.js +4 -4
- package/dist/{xertica-assistant-B687qEPU.js → xertica-assistant-CJVnvMqU.js} +17 -8
- package/dist/{xertica-assistant-sOHwTgIP.cjs → xertica-assistant-CKPtc1z5.cjs} +19 -10
- package/dist/{xertica-assistant-QFUnv5I2.cjs → xertica-assistant-DER0brPQ.cjs} +6 -5
- package/dist/{xertica-assistant-CyikE3N_.js → xertica-assistant-DQCjpk5M.js} +4 -3
- package/dist/{xertica-assistant-B1NaSFFj.js → xertica-assistant-Dk-9AJzw.js} +6 -5
- package/dist/{xertica-assistant-CIaUlbIt.cjs → xertica-assistant-DxhIKvuY.cjs} +8 -7
- package/dist/xertica-ui.css +2 -2
- package/docs/components/audio-player.md +1 -1
- package/docs/components/sidebar.md +331 -331
- package/docs/components/stats-card.md +138 -138
- package/docs/components/toggle.md +12 -0
- package/docs/doc-audit.md +35 -229
- package/docs/i18n.md +31 -10
- package/docs/llms.md +6 -4
- package/llms-compact.txt +444 -444
- package/llms-full.txt +12144 -12144
- package/llms.txt +187 -187
- package/package.json +223 -219
- package/scripts/a11y-audit.mjs +162 -162
- package/scripts/fix-stories.cjs +19 -19
- package/styles/globals.css +0 -1
- package/styles/xertica/base.css +8 -0
- package/styles/xertica/tokens.css +240 -240
- package/templates/.env.example +2 -2
- package/templates/.prettierignore +4 -4
- package/templates/.prettierrc +10 -10
- package/templates/guidelines/Guidelines.md +865 -865
- package/templates/index.html +13 -13
- package/templates/package.json +69 -69
- package/templates/src/app/components/AuthGuard.tsx +11 -0
- package/templates/src/features/auth/ui/AuthPageShell.tsx +32 -32
- package/templates/src/features/home/ui/HomeContent.tsx +116 -116
- package/templates/src/features/settings/index.ts +2 -0
- package/templates/src/features/settings/ui/SettingsContent.tsx +134 -0
- package/templates/src/features/template/ui/TemplateContent.tsx +1321 -1321
- package/templates/src/i18n.ts +36 -13
- package/templates/src/locales/en/pages/settings.json +15 -0
- package/templates/src/locales/es/pages/settings.json +15 -0
- package/templates/src/locales/pt-BR/pages/settings.json +15 -0
- package/templates/src/pages/SettingsPage.tsx +28 -0
- package/templates/src/shared/config/navigation.ts +2 -2
- package/templates/src/styles/xertica/tokens.css +240 -240
- package/templates/vite.config.d.ts +2 -2
- package/templates/vite.config.js +20 -20
- package/utils/gemini.ts +2 -2
- package/dist/AssistantChart-9w31gdAb.cjs +0 -3363
- package/dist/AssistantChart-BAudAfne.cjs +0 -3591
- package/dist/AssistantChart-BAx9VQvb.cjs +0 -3374
- package/dist/AssistantChart-BP8upjMk.js +0 -3565
- package/dist/AssistantChart-BXU1ACnh.js +0 -3489
- package/dist/AssistantChart-CVko2A1W.js +0 -3348
- package/dist/AssistantChart-CVzmmhx4.js +0 -3337
- package/dist/AssistantChart-CeU2dIb6.js +0 -3469
- package/dist/AssistantChart-D0A1FPYt.cjs +0 -3515
- package/dist/AssistantChart-DO5UuX4J.cjs +0 -3495
- package/dist/AudioPlayer-1ypwE2Wh.cjs +0 -936
- package/dist/AudioPlayer-BJ2IuRQW.cjs +0 -1275
- package/dist/AudioPlayer-BWDW6TN9.cjs +0 -1279
- package/dist/AudioPlayer-CM962GEh.js +0 -1280
- package/dist/AudioPlayer-CbZId7cj.cjs +0 -998
- package/dist/AudioPlayer-DU8zt8-z.js +0 -999
- package/dist/AudioPlayer-DuKXrCfy.js +0 -937
- package/dist/AudioPlayer-Xxma6_-H.js +0 -1276
- package/dist/BrandColorsContext-DLVJgtmH.js +0 -666
- package/dist/BrandColorsContext-DZT7JjeD.js +0 -659
- package/dist/BrandColorsContext-GUyFmkX0.cjs +0 -665
- package/dist/BrandColorsContext-awnBCmC4.cjs +0 -666
- package/dist/CodeBlock-C2ZUXt8V.js +0 -219
- package/dist/CodeBlock-C5oYnLQp.cjs +0 -218
- package/dist/CodeBlock-DuxdtN-l.js +0 -219
- package/dist/CodeBlock-POVYONvC.cjs +0 -218
- package/dist/CustomTooltipContent-BT6brkVJ.cjs +0 -49
- package/dist/CustomTooltipContent-CfOfikhq.js +0 -33
- package/dist/CustomTooltipContent-DHjkY0ww.js +0 -40
- package/dist/CustomTooltipContent-c_K-DWRr.cjs +0 -56
- package/dist/FeatureCard-9GhnlgL3.js +0 -336
- package/dist/FeatureCard-Bcb3Zi54.js +0 -302
- package/dist/FeatureCard-Cfs6Ishq.js +0 -485
- package/dist/FeatureCard-CkPd2psQ.cjs +0 -301
- package/dist/FeatureCard-Dkp-xmzM.cjs +0 -335
- package/dist/FeatureCard-ie3L8Fpr.cjs +0 -484
- package/dist/FeatureCardSkeleton-CAgu8stE.js +0 -27
- package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +0 -26
- package/dist/LanguageContext-BwhwC3G2.js +0 -657
- package/dist/LanguageContext-DvUt5jBg.cjs +0 -656
- package/dist/LayoutContext-BDmcZfMH.cjs +0 -84
- package/dist/LayoutContext-C4kKN9RV.cjs +0 -93
- package/dist/LayoutContext-CGEe1oPq.js +0 -94
- package/dist/LayoutContext-CwT5KLiW.cjs +0 -104
- package/dist/LayoutContext-DVLCsoQn.js +0 -105
- package/dist/LayoutContext-dbQvdC4O.js +0 -85
- package/dist/ThemeContext-BbBNoFTG.js +0 -735
- package/dist/ThemeContext-Bo-W2WZH.js +0 -1856
- package/dist/ThemeContext-CP3a0jxy.cjs +0 -1855
- package/dist/ThemeContext-Cmr8Ex8H.cjs +0 -734
- package/dist/ThemeContext-CpqYShLq.cjs +0 -324
- package/dist/ThemeContext-D3LzacmG.js +0 -188
- package/dist/ThemeContext-DQUOeziy.cjs +0 -1855
- package/dist/ThemeContext-Du2nE1PL.js +0 -325
- package/dist/ThemeContext-GeEBTJ3q.cjs +0 -1621
- package/dist/ThemeContext-JyLK9B1o.js +0 -1622
- package/dist/ThemeContext-RTy1m2Uq.js +0 -82
- package/dist/ThemeContext-U4dEYc6C.cjs +0 -187
- package/dist/ThemeContext-bSzuOit2.cjs +0 -81
- package/dist/ThemeContext-ept8jhXI.js +0 -1856
- package/dist/VerifyEmailPage-BE-L9mB7.js +0 -2828
- package/dist/VerifyEmailPage-BIBOKV7Z.js +0 -3214
- package/dist/VerifyEmailPage-BJjAMUTW.js +0 -3223
- package/dist/VerifyEmailPage-BRSP-Pwt.cjs +0 -3196
- package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
- package/dist/VerifyEmailPage-BiRm7Nh4.cjs +0 -3213
- package/dist/VerifyEmailPage-Bvfv8HVQ.js +0 -3214
- package/dist/VerifyEmailPage-CR7kb5df.cjs +0 -2827
- package/dist/VerifyEmailPage-C_ihbcth.js +0 -2828
- package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
- package/dist/VerifyEmailPage-CdYPSJoO.js +0 -2828
- package/dist/VerifyEmailPage-CkBYfsNy.cjs +0 -3232
- package/dist/VerifyEmailPage-D-FRj5TU.cjs +0 -3213
- package/dist/VerifyEmailPage-DF2ilhum.cjs +0 -3210
- package/dist/VerifyEmailPage-DMBh4NM9.cjs +0 -2827
- package/dist/VerifyEmailPage-DTtFfC-J.js +0 -3197
- package/dist/VerifyEmailPage-Dt7zgA4w.cjs +0 -2827
- package/dist/VerifyEmailPage-EhudUdqF.js +0 -3211
- package/dist/VerifyEmailPage-RrUApqBN.js +0 -3214
- package/dist/VerifyEmailPage-VoMI7MYH.cjs +0 -3213
- package/dist/VerifyEmailPage-hdB8JQGv.cjs +0 -3213
- package/dist/VerifyEmailPage-vYHbYK3q.js +0 -3214
- package/dist/XerticaOrbe-BCUVSPPB.cjs +0 -1924
- package/dist/XerticaOrbe-BGIB1CTK.js +0 -1355
- package/dist/XerticaOrbe-By8eEvR-.js +0 -1925
- package/dist/XerticaOrbe-FWGjBj0U.cjs +0 -1354
- package/dist/XerticaProvider-AChwphCO.cjs +0 -48
- package/dist/XerticaProvider-AbWlr7Af.cjs +0 -48
- package/dist/XerticaProvider-B8CaV7xu.cjs +0 -39
- package/dist/XerticaProvider-BITjgC5p.js +0 -39
- package/dist/XerticaProvider-BSyFrmC0.js +0 -49
- package/dist/XerticaProvider-By8q3Roe.cjs +0 -38
- package/dist/XerticaProvider-CUYJZc32.js +0 -49
- package/dist/XerticaProvider-CW9hpCdF.cjs +0 -39
- package/dist/XerticaProvider-CWgby5mY.js +0 -49
- package/dist/XerticaProvider-CWs6EwNa.js +0 -49
- package/dist/XerticaProvider-CiNKjMx1.cjs +0 -48
- package/dist/XerticaProvider-CjQAQPcn.cjs +0 -48
- package/dist/XerticaProvider-D5lLumH-.js +0 -49
- package/dist/XerticaProvider-DQtvJU7m.js +0 -40
- package/dist/XerticaProvider-DUOJg9iX.js +0 -49
- package/dist/XerticaProvider-Dl_b72_l.cjs +0 -51
- package/dist/XerticaProvider-qQUDop71.cjs +0 -48
- package/dist/XerticaProvider-siSt9uG2.js +0 -40
- package/dist/XerticaXLogo-8TTzBjHw.cjs +0 -251
- package/dist/XerticaXLogo-B2svDGZh.cjs +0 -251
- package/dist/XerticaXLogo-BWaag64t.js +0 -252
- package/dist/XerticaXLogo-CFuIlYFH.js +0 -252
- package/dist/XerticaXLogo-CU-U-GP4.cjs +0 -251
- package/dist/XerticaXLogo-ChryA6xj.js +0 -252
- package/dist/XerticaXLogo-CowGv7BC.js +0 -252
- package/dist/XerticaXLogo-CziKMQil.cjs +0 -242
- package/dist/XerticaXLogo-D8jf0SNv.cjs +0 -214
- package/dist/XerticaXLogo-DHz5SugF.js +0 -252
- package/dist/XerticaXLogo-DTee_y8X.cjs +0 -251
- package/dist/XerticaXLogo-DfUvz-lD.js +0 -243
- package/dist/XerticaXLogo-DzXKZBtG.js +0 -231
- package/dist/XerticaXLogo-fAJMy3H4.js +0 -215
- package/dist/XerticaXLogo-kslQ8Tk_.cjs +0 -251
- package/dist/XerticaXLogo-xWbElCZj.cjs +0 -230
- package/dist/alert-dialog-iDe5VE5o.js +0 -842
- package/dist/alert-dialog-yckpaOpy.cjs +0 -865
- package/dist/avatar-Cq5_E8r9.cjs +0 -78
- package/dist/avatar-CuYu2MKt.cjs +0 -72
- package/dist/avatar-Cxyofu1H.js +0 -56
- package/dist/avatar-DSBfJMRJ.js +0 -62
- package/dist/breadcrumb-CVzzzqfo.js +0 -103
- package/dist/breadcrumb-DIJ0X3Ot.js +0 -96
- package/dist/breadcrumb-DjSxkjlQ.cjs +0 -95
- package/dist/breadcrumb-DnDlQFg2.cjs +0 -102
- package/dist/button-0CXwCRTm.cjs +0 -85
- package/dist/button-Bnv9SvYK.cjs +0 -79
- package/dist/button-C6uvh0rV.js +0 -63
- package/dist/button-qkz7Icqf.js +0 -69
- package/dist/card-B8-Gl5DL.js +0 -73
- package/dist/card-Bv_c57KU.cjs +0 -72
- package/dist/card-DJTsYhLL.cjs +0 -89
- package/dist/card-fi8zAN-I.js +0 -90
- package/dist/dropdown-menu-B_uEXNc4.cjs +0 -220
- package/dist/dropdown-menu-CFuCssWA.js +0 -204
- package/dist/dropdown-menu-Ze1YZFyc.cjs +0 -247
- package/dist/dropdown-menu-nc_Lvg-u.js +0 -231
- package/dist/google-maps-loader-BVoVhUwA.js +0 -316
- package/dist/google-maps-loader-BqsYL48U.cjs +0 -285
- package/dist/google-maps-loader-DjJaYhV6.cjs +0 -316
- package/dist/google-maps-loader-t2IlYBzw.js +0 -286
- package/dist/index-B7A523O_.js +0 -8
- package/dist/index-BabBx2pa.js +0 -6
- package/dist/index-CkTUgOwX.js +0 -8
- package/dist/index-D3RLKRAs.cjs +0 -7
- package/dist/index-DmHhnb7a.cjs +0 -7
- package/dist/index.umd.js +0 -13712
- package/dist/input-CNFHVKvo.cjs +0 -145
- package/dist/input-CPl84zAx.cjs +0 -151
- package/dist/input-C_UiS2Py.cjs +0 -152
- package/dist/input-D-6IsAca.js +0 -133
- package/dist/input-cc-PTD4R.js +0 -123
- package/dist/input-wPYg0d0P.js +0 -127
- package/dist/progress-BLwqortq.cjs +0 -105
- package/dist/progress-Cs9i4DPx.js +0 -81
- package/dist/progress-D9mtsf6j.js +0 -89
- package/dist/progress-DDeuWPZw.cjs +0 -97
- package/dist/rich-text-editor-1UW3Y2JK.js +0 -2891
- package/dist/rich-text-editor-BM-LPpTh.js +0 -2902
- package/dist/rich-text-editor-BmsjY03B.js +0 -2949
- package/dist/rich-text-editor-BrdC5evx.js +0 -2244
- package/dist/rich-text-editor-CyggTOLQ.cjs +0 -2908
- package/dist/rich-text-editor-DbV-S7Fi.cjs +0 -2261
- package/dist/rich-text-editor-DoCkKhzk.cjs +0 -2919
- package/dist/rich-text-editor-DqLICivI.js +0 -2832
- package/dist/rich-text-editor-DxO1Hz3a.cjs +0 -2903
- package/dist/rich-text-editor-GS2kpTAK.cjs +0 -2966
- package/dist/routes.d.ts +0 -10
- package/dist/select-Cmb8zF7w.cjs +0 -156
- package/dist/select-CprSNX0z.js +0 -139
- package/dist/select-DT7Zjn42.cjs +0 -162
- package/dist/select-En8DkoaQ.js +0 -145
- package/dist/sidebar-B3EYhli0.cjs +0 -800
- package/dist/sidebar-B4ZWaMrE.js +0 -792
- package/dist/sidebar-B9NR0lCe.cjs +0 -800
- package/dist/sidebar-BcJ6LxvX.cjs +0 -733
- package/dist/sidebar-BvF5I2Ue.cjs +0 -800
- package/dist/sidebar-C5B_LHek.cjs +0 -795
- package/dist/sidebar-CA6_ek3f.js +0 -801
- package/dist/sidebar-CRMiBtAi.js +0 -801
- package/dist/sidebar-CVUGHOS_.cjs +0 -756
- package/dist/sidebar-CZ2mWaMM.cjs +0 -800
- package/dist/sidebar-CmvwjnVb.js +0 -757
- package/dist/sidebar-CplprZpM.js +0 -801
- package/dist/sidebar-DyYvgyBj.cjs +0 -795
- package/dist/sidebar-Dz7bd3zP.js +0 -796
- package/dist/sidebar-KIS0C2JH.js +0 -801
- package/dist/sidebar-OTO_up7Z.js +0 -801
- package/dist/sidebar-WoKvFWCN.js +0 -717
- package/dist/sidebar-zowjejT2.cjs +0 -800
- package/dist/skeleton-4zoHiFJ_.cjs +0 -83
- package/dist/skeleton-C4bHqUBf.js +0 -84
- package/dist/slider-C0JKA9k3.js +0 -56
- package/dist/slider-CPmwzm_3.cjs +0 -73
- package/dist/slider-DcJharR9.cjs +0 -73
- package/dist/slider-Pay3fka2.js +0 -56
- package/dist/sonner-DeUIj0Zg.cjs +0 -63
- package/dist/sonner-g9RIfi35.js +0 -47
- package/dist/tooltip-CNtsL5cB.cjs +0 -71
- package/dist/tooltip-CTyZCD8h.js +0 -55
- package/dist/tooltip-CwgSdy3h.cjs +0 -67
- package/dist/tooltip-D-OrYnKO.js +0 -51
- package/dist/use-audio-player-BJFV24XW.js +0 -188
- package/dist/use-audio-player-Bkh23vQ3.js +0 -177
- package/dist/use-audio-player-Dn1NR9xN.cjs +0 -176
- package/dist/use-audio-player-DyVYlOnR.cjs +0 -187
- package/dist/use-mobile-BB4M_4Ru.cjs +0 -47
- package/dist/use-mobile-CLu9nqGL.js +0 -31
- package/dist/use-mobile-CNwiBNxu.js +0 -33
- package/dist/use-mobile-Dlf74ufz.cjs +0 -49
- package/dist/xertica-assistant-B1IaHXnB.cjs +0 -1894
- package/dist/xertica-assistant-BMqdyRVi.js +0 -2082
- package/dist/xertica-assistant-BbgzsgsG.js +0 -2164
- package/dist/xertica-assistant-Bj3vBCq_.cjs +0 -2081
- package/dist/xertica-assistant-CfBCo21g.js +0 -2148
- package/dist/xertica-assistant-DIM_Do1k.js +0 -1866
- package/dist/xertica-assistant-DPsESB6t.js +0 -1878
- package/dist/xertica-assistant-DrsRwla1.cjs +0 -2147
- package/dist/xertica-assistant-Qp3ydksa.cjs +0 -1882
- package/dist/xertica-assistant-d2qs2Vd9.cjs +0 -2163
- package/dist/xertica-assistant-gnCJdcZY.js +0 -1866
- package/dist/xertica-assistant-yyrR0JKl.cjs +0 -1882
- package/styles/xertica/app-overrides/scrollbar.css +0 -33
- package/dist/{XerticaXLogo-qBPhwK3g.cjs → LanguageSelector-1cINLJ23.cjs} +80 -80
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as ModernChatInputStories from './modern-chat-input.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={ModernChatInputStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>An advanced, high-performance chat input for the Xertica Assistant.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Usage Patterns
|
|
16
|
-
|
|
17
|
-
### Standard Floating Input
|
|
18
|
-
Optimized for chat interfaces with multi-line support, voice recording, and action chips.
|
|
19
|
-
|
|
20
|
-
<Canvas>
|
|
21
|
-
<ModernChatInputStories.Default />
|
|
22
|
-
</Canvas>
|
|
23
|
-
|
|
24
|
-
### Full-Page Variant
|
|
25
|
-
Adjusts maximum width and alignment for use in standalone chat pages.
|
|
26
|
-
|
|
27
|
-
<Canvas>
|
|
28
|
-
<ModernChatInputStories.FullPage />
|
|
29
|
-
</Canvas>
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Feature Flags
|
|
34
|
-
|
|
35
|
-
Each input capability can be individually toggled via boolean props.
|
|
36
|
-
All flags default to `true` for full backward compatibility.
|
|
37
|
-
|
|
38
|
-
| Prop | Controls | Default |
|
|
39
|
-
|---|---|---|
|
|
40
|
-
| `enableAudioInput` | Voice recording button | `true` |
|
|
41
|
-
| `enableFileAttachment` | File attachment (paperclip) button | `true` |
|
|
42
|
-
| `enableDocumentCreation` | "Create document" menu item | `true` |
|
|
43
|
-
| `enablePodcastGeneration` | "Generate podcast" menu item | `true` |
|
|
44
|
-
| `enableSearch` | "Search" menu item | `true` |
|
|
45
|
-
|
|
46
|
-
> [!NOTE]
|
|
47
|
-
> When all three action types (`enableDocumentCreation`, `enablePodcastGeneration`, `enableSearch`) are set to `false`, the "+" menu button is completely hidden.
|
|
48
|
-
|
|
49
|
-
### Text Only
|
|
50
|
-
All action buttons disabled — only the text input and send button remain.
|
|
51
|
-
|
|
52
|
-
<Canvas>
|
|
53
|
-
<ModernChatInputStories.TextOnly />
|
|
54
|
-
</Canvas>
|
|
55
|
-
|
|
56
|
-
### Selective Actions
|
|
57
|
-
Only document creation and search are enabled for a focused workflow.
|
|
58
|
-
|
|
59
|
-
<Canvas>
|
|
60
|
-
<ModernChatInputStories.SelectiveActions />
|
|
61
|
-
</Canvas>
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## AI Best Practices
|
|
66
|
-
|
|
67
|
-
> [!IMPORTANT]
|
|
68
|
-
> - **Action Workflow** — Handle the `onSubmit` callback's optional `action` parameter to distinguish between standard text messages and intent-driven generations (Documents, Podcasts, Search).
|
|
69
|
-
> - **State Sync** — Always maintain the `value` in a parent state and update it via `onChange` and `onVoiceRecording` to ensure consistent data binding.
|
|
70
|
-
> - **Dynamic Sizing** — The input automatically expands up to 100px based on content; ensure the parent container can accommodate these height changes without layout shift.
|
|
71
|
-
> - **Feature Flags** — Pass flags like `enableSearch={false}` or `enableAudioInput={false}` to tailor input capabilities per use-case. Flags are independent and can be combined freely.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as ModernChatInputStories from './modern-chat-input.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={ModernChatInputStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>An advanced, high-performance chat input for the Xertica Assistant.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Usage Patterns
|
|
16
|
+
|
|
17
|
+
### Standard Floating Input
|
|
18
|
+
Optimized for chat interfaces with multi-line support, voice recording, and action chips.
|
|
19
|
+
|
|
20
|
+
<Canvas>
|
|
21
|
+
<ModernChatInputStories.Default />
|
|
22
|
+
</Canvas>
|
|
23
|
+
|
|
24
|
+
### Full-Page Variant
|
|
25
|
+
Adjusts maximum width and alignment for use in standalone chat pages.
|
|
26
|
+
|
|
27
|
+
<Canvas>
|
|
28
|
+
<ModernChatInputStories.FullPage />
|
|
29
|
+
</Canvas>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Feature Flags
|
|
34
|
+
|
|
35
|
+
Each input capability can be individually toggled via boolean props.
|
|
36
|
+
All flags default to `true` for full backward compatibility.
|
|
37
|
+
|
|
38
|
+
| Prop | Controls | Default |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `enableAudioInput` | Voice recording button | `true` |
|
|
41
|
+
| `enableFileAttachment` | File attachment (paperclip) button | `true` |
|
|
42
|
+
| `enableDocumentCreation` | "Create document" menu item | `true` |
|
|
43
|
+
| `enablePodcastGeneration` | "Generate podcast" menu item | `true` |
|
|
44
|
+
| `enableSearch` | "Search" menu item | `true` |
|
|
45
|
+
|
|
46
|
+
> [!NOTE]
|
|
47
|
+
> When all three action types (`enableDocumentCreation`, `enablePodcastGeneration`, `enableSearch`) are set to `false`, the "+" menu button is completely hidden.
|
|
48
|
+
|
|
49
|
+
### Text Only
|
|
50
|
+
All action buttons disabled — only the text input and send button remain.
|
|
51
|
+
|
|
52
|
+
<Canvas>
|
|
53
|
+
<ModernChatInputStories.TextOnly />
|
|
54
|
+
</Canvas>
|
|
55
|
+
|
|
56
|
+
### Selective Actions
|
|
57
|
+
Only document creation and search are enabled for a focused workflow.
|
|
58
|
+
|
|
59
|
+
<Canvas>
|
|
60
|
+
<ModernChatInputStories.SelectiveActions />
|
|
61
|
+
</Canvas>
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## AI Best Practices
|
|
66
|
+
|
|
67
|
+
> [!IMPORTANT]
|
|
68
|
+
> - **Action Workflow** — Handle the `onSubmit` callback's optional `action` parameter to distinguish between standard text messages and intent-driven generations (Documents, Podcasts, Search).
|
|
69
|
+
> - **State Sync** — Always maintain the `value` in a parent state and update it via `onChange` and `onVoiceRecording` to ensure consistent data binding.
|
|
70
|
+
> - **Dynamic Sizing** — The input automatically expands up to 100px based on content; ensure the parent container can accommodate these height changes without layout shift.
|
|
71
|
+
> - **Feature Flags** — Pass flags like `enableSearch={false}` or `enableAudioInput={false}` to tailor input capabilities per use-case. Flags are independent and can be combined freely.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { screen, fireEvent, act, waitFor } from '@testing-library/react';
|
|
2
|
+
import { renderWithProviders as render } from '../../../test/render';
|
|
2
3
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
3
4
|
import { ModernChatInput } from './ModernChatInput';
|
|
4
5
|
import React from 'react';
|
|
@@ -19,7 +20,7 @@ describe('ModernChatInput', () => {
|
|
|
19
20
|
const onChange = vi.fn();
|
|
20
21
|
render(<ModernChatInput value="" onChange={onChange} onSubmit={vi.fn()} />);
|
|
21
22
|
|
|
22
|
-
const textarea = screen.getByPlaceholderText('
|
|
23
|
+
const textarea = screen.getByPlaceholderText('Envie uma mensagem');
|
|
23
24
|
fireEvent.change(textarea, { target: { value: 'hello' } });
|
|
24
25
|
|
|
25
26
|
expect(onChange).toHaveBeenCalledWith('hello');
|
|
@@ -238,7 +238,7 @@ export function AssistantMessageBubble({
|
|
|
238
238
|
|
|
239
239
|
{/* Table Rendering */}
|
|
240
240
|
{msg.tableData && (
|
|
241
|
-
<div className="mt-4 w-full max-w-full border rounded-[var(--radius)] overflow-x-auto
|
|
241
|
+
<div className="mt-4 w-full max-w-full border rounded-[var(--radius)] overflow-x-auto scrollbar-thin scrollbar-thumb-border scrollbar-track-transparent relative">
|
|
242
242
|
<Table>
|
|
243
243
|
{msg.tableData.caption && <TableCaption>{msg.tableData.caption}</TableCaption>}
|
|
244
244
|
<TableHeader>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ChartConfig, DashboardChartDatum } from '../../ui/chart';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* @file types.ts
|
|
@@ -88,8 +89,8 @@ export interface Message {
|
|
|
88
89
|
searchResults?: SearchResult[];
|
|
89
90
|
searchSources?: SearchSource[];
|
|
90
91
|
searchCommands?: SearchCommand[];
|
|
91
|
-
chartData?:
|
|
92
|
-
chartConfig?:
|
|
92
|
+
chartData?: DashboardChartDatum[];
|
|
93
|
+
chartConfig?: ChartConfig;
|
|
93
94
|
tableData?: {
|
|
94
95
|
caption?: string;
|
|
95
96
|
headers: string[];
|
|
@@ -183,7 +183,7 @@ export function useAssistant({
|
|
|
183
183
|
onSendMessage,
|
|
184
184
|
isProcessing = false,
|
|
185
185
|
responseGenerator,
|
|
186
|
-
richSuggestions = [],
|
|
186
|
+
richSuggestions: _richSuggestions = [],
|
|
187
187
|
onRichAction,
|
|
188
188
|
onEvaluation,
|
|
189
189
|
}: UseAssistantProps = {}): UseAssistantReturn {
|
|
@@ -381,10 +381,11 @@ export function useAssistant({
|
|
|
381
381
|
await navigator.clipboard.writeText(content);
|
|
382
382
|
setCopiedId(messageId);
|
|
383
383
|
setTimeout(() => setCopiedId(null), 2000);
|
|
384
|
-
} catch (clipboardError
|
|
384
|
+
} catch (clipboardError) {
|
|
385
385
|
if (
|
|
386
|
-
clipboardError
|
|
387
|
-
clipboardError.
|
|
386
|
+
clipboardError instanceof Error &&
|
|
387
|
+
(clipboardError.name === 'NotAllowedError' ||
|
|
388
|
+
clipboardError.message.includes('permissions policy'))
|
|
388
389
|
) {
|
|
389
390
|
throw new Error('Clipboard permission denied, falling back');
|
|
390
391
|
}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as AssistantStories from './xertica-assistant.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={AssistantStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>An embedded AI-powered assistant panel for chat, document creation, and data analysis.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Feature Flags
|
|
16
|
-
|
|
17
|
-
Each assistant capability can be individually toggled on or off via boolean props.
|
|
18
|
-
All flags default to `true` for full backward compatibility.
|
|
19
|
-
|
|
20
|
-
| Prop | Controls | Default |
|
|
21
|
-
|---|---|---|
|
|
22
|
-
| `showHistory` | Conversation history tab and collapsed icon | `true` |
|
|
23
|
-
| `showFavorites` | Favorites tab and collapsed icon | `true` |
|
|
24
|
-
| `enableAudioInput` | Voice recording and audio upload | `true` |
|
|
25
|
-
| `enableFileAttachment` | File attachment button | `true` |
|
|
26
|
-
| `enableDocumentCreation` | "Create document" action in the input menu | `true` |
|
|
27
|
-
| `enablePodcastGeneration` | "Generate podcast" action and per-message button | `true` |
|
|
28
|
-
| `enableSearch` | "Search" action in the input menu | `true` |
|
|
29
|
-
|
|
30
|
-
### Chat Only
|
|
31
|
-
|
|
32
|
-
All extra features disabled — the assistant provides only a basic text chat.
|
|
33
|
-
|
|
34
|
-
<Canvas of={AssistantStories.ChatOnly} />
|
|
35
|
-
|
|
36
|
-
### Minimal Input
|
|
37
|
-
|
|
38
|
-
Only document creation and file attachment are enabled — ideal for document-focused workflows.
|
|
39
|
-
|
|
40
|
-
<Canvas of={AssistantStories.MinimalInput} />
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## Workspace Integration
|
|
45
|
-
|
|
46
|
-
The assistant features specialized workspaces for different content types.
|
|
47
|
-
|
|
48
|
-
### Document Editing
|
|
49
|
-
When the assistant generates a document, it opens a dedicated editing workspace using the `RichTextEditor` component.
|
|
50
|
-
|
|
51
|
-
<Canvas of={AssistantStories.DocumentEditing} />
|
|
52
|
-
|
|
53
|
-
### Full Page View
|
|
54
|
-
For focused work, the assistant can be expanded into a centered full-page layout.
|
|
55
|
-
|
|
56
|
-
<Canvas of={AssistantStories.FullPage} />
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## AI Best Practices
|
|
61
|
-
|
|
62
|
-
> [!IMPORTANT]
|
|
63
|
-
> - **Layout Context** — Use `useLayout()` to toggle the assistant's visibility and track its state across the application.
|
|
64
|
-
> - **Demo Mode** — Use `demoMode={true}` for prototyping; it provides rich mock responses for documents, charts, and media.
|
|
65
|
-
> - **Custom Responses** — Leverage `responseGenerator` to bridge the assistant with your backend or custom LLM logic.
|
|
66
|
-
> - **Feature Flags** — Pass individual flags like `showHistory={false}` or `enableSearch={false}` to tailor the assistant's capabilities per use-case. Flags can be combined freely.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as AssistantStories from './xertica-assistant.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={AssistantStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>An embedded AI-powered assistant panel for chat, document creation, and data analysis.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Feature Flags
|
|
16
|
+
|
|
17
|
+
Each assistant capability can be individually toggled on or off via boolean props.
|
|
18
|
+
All flags default to `true` for full backward compatibility.
|
|
19
|
+
|
|
20
|
+
| Prop | Controls | Default |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `showHistory` | Conversation history tab and collapsed icon | `true` |
|
|
23
|
+
| `showFavorites` | Favorites tab and collapsed icon | `true` |
|
|
24
|
+
| `enableAudioInput` | Voice recording and audio upload | `true` |
|
|
25
|
+
| `enableFileAttachment` | File attachment button | `true` |
|
|
26
|
+
| `enableDocumentCreation` | "Create document" action in the input menu | `true` |
|
|
27
|
+
| `enablePodcastGeneration` | "Generate podcast" action and per-message button | `true` |
|
|
28
|
+
| `enableSearch` | "Search" action in the input menu | `true` |
|
|
29
|
+
|
|
30
|
+
### Chat Only
|
|
31
|
+
|
|
32
|
+
All extra features disabled — the assistant provides only a basic text chat.
|
|
33
|
+
|
|
34
|
+
<Canvas of={AssistantStories.ChatOnly} />
|
|
35
|
+
|
|
36
|
+
### Minimal Input
|
|
37
|
+
|
|
38
|
+
Only document creation and file attachment are enabled — ideal for document-focused workflows.
|
|
39
|
+
|
|
40
|
+
<Canvas of={AssistantStories.MinimalInput} />
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Workspace Integration
|
|
45
|
+
|
|
46
|
+
The assistant features specialized workspaces for different content types.
|
|
47
|
+
|
|
48
|
+
### Document Editing
|
|
49
|
+
When the assistant generates a document, it opens a dedicated editing workspace using the `RichTextEditor` component.
|
|
50
|
+
|
|
51
|
+
<Canvas of={AssistantStories.DocumentEditing} />
|
|
52
|
+
|
|
53
|
+
### Full Page View
|
|
54
|
+
For focused work, the assistant can be expanded into a centered full-page layout.
|
|
55
|
+
|
|
56
|
+
<Canvas of={AssistantStories.FullPage} />
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## AI Best Practices
|
|
61
|
+
|
|
62
|
+
> [!IMPORTANT]
|
|
63
|
+
> - **Layout Context** — Use `useLayout()` to toggle the assistant's visibility and track its state across the application.
|
|
64
|
+
> - **Demo Mode** — Use `demoMode={true}` for prototyping; it provides rich mock responses for documents, charts, and media.
|
|
65
|
+
> - **Custom Responses** — Leverage `responseGenerator` to bridge the assistant with your backend or custom LLM logic.
|
|
66
|
+
> - **Feature Flags** — Pass individual flags like `showHistory={false}` or `enableSearch={false}` to tailor the assistant's capabilities per use-case. Flags can be combined freely.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { screen, fireEvent, act, waitFor } from '@testing-library/react';
|
|
2
|
+
import { renderWithProviders as render } from '../../../test/render';
|
|
2
3
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
3
4
|
import { XerticaAssistant } from './xertica-assistant';
|
|
4
5
|
import React from 'react';
|
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as CardPatternsStories from './card-patterns.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={CardPatternsStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>Pre-composed card blocks for dashboards and feature pages — plus matching skeleton variants for loading states.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Overview
|
|
16
|
-
|
|
17
|
-
Six composed card components built exclusively from `ui/` primitives — no external dependencies. Each card has a matching `*Skeleton` companion that mirrors its layout with pulsing placeholders for use while data is loading.
|
|
18
|
-
|
|
19
|
-
| Card | Skeleton companion |
|
|
20
|
-
| ------------------- | -------------------------- |
|
|
21
|
-
| `ActivityCard` | `ActivityCardSkeleton` |
|
|
22
|
-
| `ProfileCard` | `ProfileCardSkeleton` |
|
|
23
|
-
| `ProjectCard` | `ProjectCardSkeleton` |
|
|
24
|
-
| `NotificationCard` | `NotificationCardSkeleton` |
|
|
25
|
-
| `QuickActionCard` | `QuickActionCardSkeleton` |
|
|
26
|
-
| `FeatureCard` | `FeatureCardSkeleton` |
|
|
27
|
-
|
|
28
|
-
> A matching `StatsCardSkeleton` is also available from `xertica-ui` (lives in `ui/stats-card/`).
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Import
|
|
33
|
-
|
|
34
|
-
```tsx
|
|
35
|
-
// All cards and skeletons are re-exported from the root barrel
|
|
36
|
-
import {
|
|
37
|
-
ActivityCard, ActivityCardSkeleton,
|
|
38
|
-
ProfileCard, ProfileCardSkeleton,
|
|
39
|
-
ProjectCard, ProjectCardSkeleton,
|
|
40
|
-
NotificationCard, NotificationCardSkeleton,
|
|
41
|
-
QuickActionCard, QuickActionCardSkeleton,
|
|
42
|
-
FeatureCard, FeatureCardSkeleton,
|
|
43
|
-
} from 'xertica-ui';
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## When to Use Cards
|
|
49
|
-
|
|
50
|
-
- You need a recurring dashboard pattern (activity feed, KPI, project status, notifications) and don't want to re-compose it from scratch in every feature.
|
|
51
|
-
- The pattern is stable and reused across multiple pages.
|
|
52
|
-
|
|
53
|
-
## When NOT to Use Cards
|
|
54
|
-
|
|
55
|
-
- One-off layouts specific to a single page — compose directly from `Card` and `ui/` primitives instead.
|
|
56
|
-
- When the pattern has significant data-fetching logic — keep the block as a pure presentational component and handle state in the feature layer.
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Loading-state pattern
|
|
61
|
-
|
|
62
|
-
Always pair each card with its matching `*Skeleton` for loading states — never render a spinner or empty container while data fetches. The skeleton variants mirror the final layout closely, preventing layout shift when data arrives.
|
|
63
|
-
|
|
64
|
-
```tsx
|
|
65
|
-
function ActivityFeed() {
|
|
66
|
-
const { data: items, isLoading } = useActivityItems();
|
|
67
|
-
|
|
68
|
-
if (isLoading) return <ActivityCardSkeleton rows={5} />;
|
|
69
|
-
return <ActivityCard items={items!} />;
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
For grids, render one skeleton per expected card:
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
{isLoading ? (
|
|
77
|
-
<>
|
|
78
|
-
<FeatureCardSkeleton showAction />
|
|
79
|
-
<FeatureCardSkeleton showAction />
|
|
80
|
-
<FeatureCardSkeleton showAction />
|
|
81
|
-
</>
|
|
82
|
-
) : (
|
|
83
|
-
data.map(item => <FeatureCard key={item.id} {...item} />)
|
|
84
|
-
)}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Skeleton configuration
|
|
90
|
-
|
|
91
|
-
Each skeleton accepts props that tune which layout regions are rendered, so the placeholder matches the loaded state exactly.
|
|
92
|
-
|
|
93
|
-
| Skeleton | Props |
|
|
94
|
-
| -------------------------- | ------------------------------------------- |
|
|
95
|
-
| `ActivityCardSkeleton` | `rows` (default `5`) |
|
|
96
|
-
| `ProfileCardSkeleton` | `showStats`, `showActions` |
|
|
97
|
-
| `ProjectCardSkeleton` | `memberCount` (default `3`) |
|
|
98
|
-
| `NotificationCardSkeleton` | `rows` (default `4`), `showViewAll` |
|
|
99
|
-
| `QuickActionCardSkeleton` | — |
|
|
100
|
-
| `FeatureCardSkeleton` | `showAction` |
|
|
101
|
-
| `StatsCardSkeleton` | `showIcon`, `showTrend` |
|
|
102
|
-
|
|
103
|
-
Set `rows={maxItems}` on list-style skeletons to match the loaded state's row count.
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Stories
|
|
108
|
-
|
|
109
|
-
<Stories />
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## AI Rules
|
|
114
|
-
|
|
115
|
-
> [!IMPORTANT]
|
|
116
|
-
>
|
|
117
|
-
> - **Import block components from `xertica-ui`** — they are included in the root barrel.
|
|
118
|
-
> - **Pass all data as props** — never embed fetch calls inside block components.
|
|
119
|
-
> - **Keep `maxItems` at a sensible limit (4–6)** to avoid overflow in fixed-height containers.
|
|
120
|
-
> - **Always pair each card with its matching `*Skeleton`** — do not render a spinner or empty container while data fetches.
|
|
121
|
-
> - **Skeleton row counts should match the expected data count** — pass `rows={maxItems}` to `ActivityCardSkeleton`/`NotificationCardSkeleton`.
|
|
122
|
-
> - **For chart panels**, use `ChartCard` from `xertica-ui/ui` (not a block component) with any dashboard-ready chart as `children`.
|
|
123
|
-
> - **`FeatureCard` badge wraps to a new line** when title + badge don't fit — this is intentional; do not constrain the container width to force inline layout.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as CardPatternsStories from './card-patterns.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={CardPatternsStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>Pre-composed card blocks for dashboards and feature pages — plus matching skeleton variants for loading states.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
Six composed card components built exclusively from `ui/` primitives — no external dependencies. Each card has a matching `*Skeleton` companion that mirrors its layout with pulsing placeholders for use while data is loading.
|
|
18
|
+
|
|
19
|
+
| Card | Skeleton companion |
|
|
20
|
+
| ------------------- | -------------------------- |
|
|
21
|
+
| `ActivityCard` | `ActivityCardSkeleton` |
|
|
22
|
+
| `ProfileCard` | `ProfileCardSkeleton` |
|
|
23
|
+
| `ProjectCard` | `ProjectCardSkeleton` |
|
|
24
|
+
| `NotificationCard` | `NotificationCardSkeleton` |
|
|
25
|
+
| `QuickActionCard` | `QuickActionCardSkeleton` |
|
|
26
|
+
| `FeatureCard` | `FeatureCardSkeleton` |
|
|
27
|
+
|
|
28
|
+
> A matching `StatsCardSkeleton` is also available from `xertica-ui` (lives in `ui/stats-card/`).
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Import
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
// All cards and skeletons are re-exported from the root barrel
|
|
36
|
+
import {
|
|
37
|
+
ActivityCard, ActivityCardSkeleton,
|
|
38
|
+
ProfileCard, ProfileCardSkeleton,
|
|
39
|
+
ProjectCard, ProjectCardSkeleton,
|
|
40
|
+
NotificationCard, NotificationCardSkeleton,
|
|
41
|
+
QuickActionCard, QuickActionCardSkeleton,
|
|
42
|
+
FeatureCard, FeatureCardSkeleton,
|
|
43
|
+
} from 'xertica-ui';
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## When to Use Cards
|
|
49
|
+
|
|
50
|
+
- You need a recurring dashboard pattern (activity feed, KPI, project status, notifications) and don't want to re-compose it from scratch in every feature.
|
|
51
|
+
- The pattern is stable and reused across multiple pages.
|
|
52
|
+
|
|
53
|
+
## When NOT to Use Cards
|
|
54
|
+
|
|
55
|
+
- One-off layouts specific to a single page — compose directly from `Card` and `ui/` primitives instead.
|
|
56
|
+
- When the pattern has significant data-fetching logic — keep the block as a pure presentational component and handle state in the feature layer.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Loading-state pattern
|
|
61
|
+
|
|
62
|
+
Always pair each card with its matching `*Skeleton` for loading states — never render a spinner or empty container while data fetches. The skeleton variants mirror the final layout closely, preventing layout shift when data arrives.
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
function ActivityFeed() {
|
|
66
|
+
const { data: items, isLoading } = useActivityItems();
|
|
67
|
+
|
|
68
|
+
if (isLoading) return <ActivityCardSkeleton rows={5} />;
|
|
69
|
+
return <ActivityCard items={items!} />;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
For grids, render one skeleton per expected card:
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
{isLoading ? (
|
|
77
|
+
<>
|
|
78
|
+
<FeatureCardSkeleton showAction />
|
|
79
|
+
<FeatureCardSkeleton showAction />
|
|
80
|
+
<FeatureCardSkeleton showAction />
|
|
81
|
+
</>
|
|
82
|
+
) : (
|
|
83
|
+
data.map(item => <FeatureCard key={item.id} {...item} />)
|
|
84
|
+
)}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Skeleton configuration
|
|
90
|
+
|
|
91
|
+
Each skeleton accepts props that tune which layout regions are rendered, so the placeholder matches the loaded state exactly.
|
|
92
|
+
|
|
93
|
+
| Skeleton | Props |
|
|
94
|
+
| -------------------------- | ------------------------------------------- |
|
|
95
|
+
| `ActivityCardSkeleton` | `rows` (default `5`) |
|
|
96
|
+
| `ProfileCardSkeleton` | `showStats`, `showActions` |
|
|
97
|
+
| `ProjectCardSkeleton` | `memberCount` (default `3`) |
|
|
98
|
+
| `NotificationCardSkeleton` | `rows` (default `4`), `showViewAll` |
|
|
99
|
+
| `QuickActionCardSkeleton` | — |
|
|
100
|
+
| `FeatureCardSkeleton` | `showAction` |
|
|
101
|
+
| `StatsCardSkeleton` | `showIcon`, `showTrend` |
|
|
102
|
+
|
|
103
|
+
Set `rows={maxItems}` on list-style skeletons to match the loaded state's row count.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Stories
|
|
108
|
+
|
|
109
|
+
<Stories />
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## AI Rules
|
|
114
|
+
|
|
115
|
+
> [!IMPORTANT]
|
|
116
|
+
>
|
|
117
|
+
> - **Import block components from `xertica-ui`** — they are included in the root barrel.
|
|
118
|
+
> - **Pass all data as props** — never embed fetch calls inside block components.
|
|
119
|
+
> - **Keep `maxItems` at a sensible limit (4–6)** to avoid overflow in fixed-height containers.
|
|
120
|
+
> - **Always pair each card with its matching `*Skeleton`** — do not render a spinner or empty container while data fetches.
|
|
121
|
+
> - **Skeleton row counts should match the expected data count** — pass `rows={maxItems}` to `ActivityCardSkeleton`/`NotificationCardSkeleton`.
|
|
122
|
+
> - **For chart panels**, use `ChartCard` from `xertica-ui/ui` (not a block component) with any dashboard-ready chart as `children`.
|
|
123
|
+
> - **`FeatureCard` badge wraps to a new line** when title + badge don't fit — this is intentional; do not constrain the container width to force inline layout.
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as BrandingStories from './branding.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={BrandingStories} />
|
|
5
|
-
|
|
6
|
-
<Title>Branding</Title>
|
|
7
|
-
<Subtitle>Visual identity components for Xertica.ai applications.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description>
|
|
10
|
-
The Branding module contains the official logos and icons for Xertica.ai. These components are designed to be theme-aware and responsive, ensuring consistent brand representation across all parts of the design system.
|
|
11
|
-
</Description>
|
|
12
|
-
|
|
13
|
-
## Logos
|
|
14
|
-
|
|
15
|
-
### Full Logo
|
|
16
|
-
The standard Xertica.ai logo, available in multiple color variants to suit different backgrounds and themes.
|
|
17
|
-
|
|
18
|
-
<Canvas>
|
|
19
|
-
<BrandingStories.Logos />
|
|
20
|
-
</Canvas>
|
|
21
|
-
|
|
22
|
-
## AI Best Practices
|
|
23
|
-
|
|
24
|
-
> [!IMPORTANT]
|
|
25
|
-
> - **Variants** — Use `default` on light/neutral backgrounds, `white` on dark or colored backgrounds, and `theme` to inherit the surrounding text color. There is no `brand` or `dark` variant.
|
|
26
|
-
> - **Scaling** — Always specify a height (`h-*`) and use `w-auto` to maintain the correct aspect ratio.
|
|
27
|
-
> - **Icon Usage** — Use `XerticaXLogo` for favicon-like placements, profile avatars, or collapsed sidebars where horizontal space is limited.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as BrandingStories from './branding.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={BrandingStories} />
|
|
5
|
+
|
|
6
|
+
<Title>Branding</Title>
|
|
7
|
+
<Subtitle>Visual identity components for Xertica.ai applications.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description>
|
|
10
|
+
The Branding module contains the official logos and icons for Xertica.ai. These components are designed to be theme-aware and responsive, ensuring consistent brand representation across all parts of the design system.
|
|
11
|
+
</Description>
|
|
12
|
+
|
|
13
|
+
## Logos
|
|
14
|
+
|
|
15
|
+
### Full Logo
|
|
16
|
+
The standard Xertica.ai logo, available in multiple color variants to suit different backgrounds and themes.
|
|
17
|
+
|
|
18
|
+
<Canvas>
|
|
19
|
+
<BrandingStories.Logos />
|
|
20
|
+
</Canvas>
|
|
21
|
+
|
|
22
|
+
## AI Best Practices
|
|
23
|
+
|
|
24
|
+
> [!IMPORTANT]
|
|
25
|
+
> - **Variants** — Use `default` on light/neutral backgrounds, `white` on dark or colored backgrounds, and `theme` to inherit the surrounding text color. There is no `brand` or `dark` variant.
|
|
26
|
+
> - **Scaling** — Always specify a height (`h-*`) and use `w-auto` to maintain the correct aspect ratio.
|
|
27
|
+
> - **Icon Usage** — Use `XerticaXLogo` for favicon-like placements, profile avatars, or collapsed sidebars where horizontal space is limited.
|