xertica-ui 2.5.3 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +705 -664
- package/README.md +482 -482
- package/assets/xertica-logo.svg +37 -37
- package/assets/xertica-x-logo.svg +20 -20
- package/bin/cli.ts +1293 -1256
- package/bin/generate-tokens.ts +256 -262
- package/bin/language-config.test.ts +32 -0
- package/bin/language-config.ts +384 -359
- package/components/Introduction.mdx +121 -121
- package/components/assistant/code-block/CodeBlock.tsx +7 -6
- package/components/assistant/code-block/code-block.mdx +38 -38
- package/components/assistant/code-block/code-block.test.tsx +2 -1
- package/components/assistant/formatted-document/FormattedDocument.tsx +3 -0
- package/components/assistant/formatted-document/formatted-document.mdx +31 -31
- package/components/assistant/formatted-document/formatted-document.test.tsx +5 -4
- package/components/assistant/markdown-message/MarkdownMessage.tsx +1 -1
- package/components/assistant/markdown-message/markdown-message.mdx +44 -44
- package/components/assistant/modern-chat-input/modern-chat-input.mdx +71 -71
- package/components/assistant/modern-chat-input/modern-chat-input.test.tsx +3 -2
- package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +1 -1
- package/components/assistant/xertica-assistant/types.ts +3 -2
- package/components/assistant/xertica-assistant/use-assistant.ts +10 -10
- package/components/assistant/xertica-assistant/xertica-assistant.mdx +66 -66
- package/components/assistant/xertica-assistant/xertica-assistant.test.tsx +2 -1
- package/{templates/src/features/auth/ui → components/blocks/auth}/AuthPageShell.tsx +37 -32
- package/components/blocks/auth/PasswordStrengthMeter.tsx +41 -0
- package/components/blocks/auth/SocialLoginButtons.tsx +95 -0
- package/components/blocks/auth/index.ts +11 -0
- package/components/blocks/auth/usePasswordStrength.ts +13 -0
- package/components/blocks/card-patterns/card-patterns.mdx +123 -123
- package/components/blocks/index.ts +1 -0
- package/components/brand/branding/branding.mdx +27 -27
- package/components/brand/language-selector/language-selector.mdx +126 -126
- package/components/brand/theme-toggle/theme-toggle.mdx +47 -47
- package/components/brand/theme-toggle/theme-toggle.test.tsx +6 -2
- package/components/brand/xertica-logo/xertica-logo.mdx +56 -56
- package/components/brand/xertica-orbe/xertica-orbe.mdx +38 -38
- package/components/brand/xertica-provider/XerticaProvider.tsx +112 -112
- package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
- package/components/brand/xertica-provider/xertica-provider.test.tsx +25 -13
- package/components/brand/xertica-xlogo/xertica-xlogo.mdx +55 -55
- package/components/examples/DrawingMapExample.tsx +1 -4
- package/components/layout/header/header.mdx +117 -117
- package/components/layout/header/header.test.tsx +2 -1
- package/components/layout/sidebar/sidebar.mdx +99 -99
- package/components/layout/sidebar/sidebar.stories.tsx +1033 -1033
- package/components/layout/sidebar/sidebar.test.tsx +2 -1
- package/components/layout/sidebar/sidebar.tsx +1509 -1506
- package/components/media/audio-player/AudioPlayer.mdx +67 -67
- package/components/media/audio-player/AudioPlayer.test.tsx +2 -1
- package/components/media/floating-media-wrapper.mdx +74 -74
- package/components/media/video-player/VideoPlayer.mdx +102 -102
- package/components/media/video-player/VideoPlayer.test.tsx +3 -2
- package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +94 -188
- package/components/pages/forgot-password-page/forgot-password-page.mdx +60 -60
- package/components/pages/forgot-password-page/forgot-password-page.test.tsx +2 -1
- package/components/pages/home-content/HomeContent.tsx +119 -119
- package/components/pages/home-content/home-content.mdx +62 -62
- package/components/pages/home-page/HomePage.stories.tsx +8 -15
- package/components/pages/home-page/home-page.mdx +53 -53
- package/components/pages/home-page/home-page.test.tsx +2 -1
- package/components/pages/login-page/LoginPage.mdx +31 -31
- package/components/pages/login-page/LoginPage.tsx +125 -218
- package/components/pages/login-page/login-page.test.tsx +2 -1
- package/components/pages/reset-password-page/ResetPasswordPage.tsx +153 -243
- package/components/pages/reset-password-page/reset-password-page.mdx +63 -63
- package/components/pages/template-content/TemplateContent.tsx +1353 -1353
- package/components/pages/template-content/template-content.mdx +61 -61
- package/components/pages/template-page/TemplatePage.stories.tsx +32 -32
- package/components/pages/template-page/template-page.mdx +53 -53
- package/components/pages/template-page/template-page.test.tsx +2 -1
- package/components/pages/verify-email-page/VerifyEmailPage.tsx +104 -206
- package/components/pages/verify-email-page/verify-email-page.mdx +55 -55
- package/components/public-api-smoke.test.tsx +10 -6
- package/components/shared/assistant-utils.ts +3 -2
- package/components/shared/navigation.ts +2 -2
- package/components/ui/accordion/accordion.mdx +29 -29
- package/components/ui/alert/alert.mdx +29 -29
- package/components/ui/alert-dialog/alert-dialog.mdx +26 -26
- package/components/ui/aspect-ratio/aspect-ratio.mdx +25 -25
- package/components/ui/assistant-chart/AssistantChart.tsx +8 -2
- package/components/ui/assistant-chart/assistant-chart.mdx +25 -25
- package/components/ui/avatar/avatar.mdx +26 -26
- package/components/ui/badge/badge.mdx +28 -28
- package/components/ui/breadcrumb/breadcrumb.mdx +26 -26
- package/components/ui/button/button.mdx +29 -29
- package/components/ui/calendar/calendar.mdx +26 -26
- package/components/ui/card/card.mdx +26 -26
- package/components/ui/carousel/carousel.mdx +26 -26
- package/components/ui/chart/chart.mdx +26 -26
- package/components/ui/chart/chart.test.tsx +178 -178
- package/components/ui/chart/chart.tsx +2252 -2245
- package/components/ui/checkbox/checkbox.mdx +26 -26
- package/components/ui/collapsible/collapsible.mdx +25 -25
- package/components/ui/command/command.mdx +26 -26
- package/components/ui/context-menu/context-menu.mdx +26 -26
- package/components/ui/dialog/dialog.mdx +26 -26
- package/components/ui/drawer/drawer.mdx +26 -26
- package/components/ui/dropdown-menu/dropdown-menu.mdx +26 -26
- package/components/ui/empty/empty.mdx +26 -26
- package/components/ui/file-upload/file-upload.mdx +26 -26
- package/components/ui/form/form.mdx +20 -20
- package/components/ui/google-maps-loader/google-maps-loader.mdx +68 -68
- package/components/ui/hover-card/hover-card.mdx +26 -26
- package/components/ui/input/input.mdx +29 -29
- package/components/ui/input-otp/input-otp.mdx +26 -26
- package/components/ui/label/label.mdx +25 -25
- package/components/ui/map/map.mdx +26 -26
- package/components/ui/map/map.tsx +6 -1
- package/components/ui/menubar/menubar.mdx +26 -26
- package/components/ui/navigation-menu/navigation-menu.mdx +26 -26
- package/components/ui/notification-badge/notification-badge.mdx +26 -26
- package/components/ui/page-header/page-header.mdx +44 -44
- package/components/ui/pagination/pagination.mdx +26 -26
- package/components/ui/popover/popover.mdx +26 -26
- package/components/ui/progress/progress.mdx +25 -25
- package/components/ui/radio-group/radio-group.mdx +26 -26
- package/components/ui/rating/rating.mdx +26 -26
- package/components/ui/resizable/resizable.mdx +26 -26
- package/components/ui/resizable/resizable.tsx +13 -8
- package/components/ui/rich-text-editor/rich-text-editor.mdx +47 -47
- package/components/ui/route-map/route-map.mdx +26 -26
- package/components/ui/scroll-area/scroll-area.mdx +25 -25
- package/components/ui/search/search.mdx +27 -27
- package/components/ui/select/select.mdx +26 -26
- package/components/ui/separator/separator.mdx +25 -25
- package/components/ui/sheet/sheet.mdx +26 -26
- package/components/ui/simple-map/simple-map.mdx +25 -25
- package/components/ui/skeleton/skeleton.mdx +25 -25
- package/components/ui/slider/slider.mdx +26 -26
- package/components/ui/sonner/sonner.mdx +26 -26
- package/components/ui/stats-card/stats-card.mdx +26 -26
- package/components/ui/stats-card/stats-card.stories.tsx +117 -117
- package/components/ui/stats-card/stats-card.tsx +109 -109
- package/components/ui/stepper/stepper.mdx +26 -26
- package/components/ui/switch/switch.mdx +25 -25
- package/components/ui/table/table.mdx +27 -27
- package/components/ui/tabs/tabs.mdx +26 -26
- package/components/ui/textarea/textarea.mdx +25 -25
- package/components/ui/timeline/timeline.mdx +26 -26
- package/components/ui/toggle/toggle.mdx +26 -26
- package/components/ui/toggle-group/toggle-group.mdx +26 -26
- package/components/ui/tooltip/tooltip.mdx +26 -26
- package/components/ui/tree-view/tree-view.mdx +26 -26
- package/components.json +511 -511
- package/contexts/BrandColorsContext.tsx +282 -282
- package/contexts/i18n-singleton.test.tsx +57 -0
- package/contexts/theme-data.ts +391 -391
- package/dist/{AssistantChart-DNdwuS-t.js → AssistantChart-BMNSA_Pk.js} +4 -4
- package/dist/{AssistantChart-COGiOV-g.cjs → AssistantChart-BzM7plyc.cjs} +31 -21
- package/dist/{AssistantChart-CWX1OWNM.js → AssistantChart-C842evTi.js} +31 -21
- package/dist/{AssistantChart-D0A1FPYt.cjs → AssistantChart-CImCNLfD.cjs} +150 -114
- package/dist/{AssistantChart-BW9JK6jw.cjs → AssistantChart-CVF2uh37.cjs} +4 -4
- package/dist/{AssistantChart-BXU1ACnh.js → AssistantChart-DfdIfmQr.js} +134 -240
- package/dist/{AssistantChart-BZTPJ5dP.cjs → AssistantChart-JooMdVQU.cjs} +5 -5
- package/dist/{AssistantChart-DMJJ_Amf.js → AssistantChart-KHS-tp-L.js} +5 -5
- package/dist/{BrandColorsContext-BwY-b6M4.cjs → BrandColorsContext-B4_81eas.cjs} +2 -2
- package/dist/{BrandColorsContext-BMRJ04Wf.js → BrandColorsContext-DbK5LnQ_.js} +2 -2
- package/dist/{CodeBlock-CjeFavqV.js → CodeBlock-DiKO8ocT.js} +11 -11
- package/dist/{CodeBlock-CV6dtsTM.cjs → CodeBlock-ZYThr7Kn.cjs} +12 -9
- package/dist/{FeatureCard-Cfs6Ishq.js → FeatureCard-BhpfmPPx.js} +20 -20
- package/dist/{FeatureCard-ie3L8Fpr.cjs → FeatureCard-D-5yS_OD.cjs} +31 -18
- package/dist/{progress-DDeuWPZw.cjs → ImageWithFallback-CfkAkctC.cjs} +34 -9
- package/dist/{progress-Cs9i4DPx.js → ImageWithFallback-bw-CxxDc.js} +27 -10
- package/dist/LanguageContext-CX_zdxre.js +1912 -0
- package/dist/LanguageContext-CjhSSqJT.cjs +1917 -0
- package/dist/LanguageSelector-BR3Ss0k_.js +46 -0
- package/dist/LanguageSelector-CHOLPmHr.cjs +48 -0
- package/dist/{XerticaXLogo-mqjoBiLI.js → LanguageSelector-CmTj3lWq.js} +85 -82
- package/dist/{XerticaXLogo-BX3ueACh.js → LanguageSelector-DxW6o7bt.js} +81 -81
- package/dist/{XerticaXLogo-uQgwns_E.cjs → LanguageSelector-Sw73qvWV.cjs} +84 -81
- package/dist/PasswordStrengthMeter-C8irs0G1.js +173 -0
- package/dist/PasswordStrengthMeter-MLzhax-d.cjs +179 -0
- package/dist/{ThemeContext-BgclCB35.js → ThemeContext-BGeh_Kdr.js} +290 -212
- package/dist/{ThemeContext-bSzuOit2.cjs → ThemeContext-CEY9pCn-.cjs} +15 -10
- package/dist/{ThemeContext-BblcjQup.cjs → ThemeContext-D50irx5T.cjs} +291 -205
- package/dist/{ThemeContext-RTy1m2Uq.js → ThemeContext-Dk3tH7Ym.js} +14 -13
- package/dist/{XerticaXLogo-CFuIlYFH.js → ThemeToggle-BpM_iHh8.js} +56 -93
- package/dist/{XerticaXLogo-CziKMQil.cjs → ThemeToggle-CZRlv0d4.cjs} +62 -85
- package/dist/{VerifyEmailPage-C_Zk6Gen.cjs → VerifyEmailPage-B6bOrybJ.cjs} +17 -17
- package/dist/VerifyEmailPage-BKiaw2YK.js +2954 -0
- package/dist/{VerifyEmailPage-B31mCrMc.js → VerifyEmailPage-BRE5Fz59.js} +8 -8
- package/dist/{VerifyEmailPage-Cyl55sJb.js → VerifyEmailPage-BcCluouh.js} +135 -65
- package/dist/VerifyEmailPage-Beaicc6V.cjs +2963 -0
- package/dist/VerifyEmailPage-BehPBp0F.cjs +2963 -0
- package/dist/VerifyEmailPage-Bx1sr0uQ.cjs +3298 -0
- package/dist/{VerifyEmailPage-Bci0bA-P.js → VerifyEmailPage-DUYyXCX9.js} +3 -3
- package/dist/VerifyEmailPage-DXXMHbzq.js +3289 -0
- package/dist/VerifyEmailPage-Djb6hthM.js +2954 -0
- package/dist/{VerifyEmailPage-u_Dn7t1U.cjs → VerifyEmailPage-DpYtFk35.cjs} +21 -21
- package/dist/{VerifyEmailPage-X14vhdyl.js → VerifyEmailPage-NXKWW3Dk.js} +12 -12
- package/dist/{VerifyEmailPage-C7KiYXrm.cjs → VerifyEmailPage-QrCz4Wqr.cjs} +11 -11
- package/dist/{VerifyEmailPage-Bv8Ah_TK.cjs → VerifyEmailPage-ZmQra0Wi.cjs} +144 -74
- package/dist/{XerticaProvider-BErr83Bg.js → XerticaProvider-BF3q_myt.js} +5 -4
- package/dist/{XerticaProvider-B8CaV7xu.cjs → XerticaProvider-BijpC_py.cjs} +18 -11
- package/dist/{XerticaProvider-DQtvJU7m.js → XerticaProvider-C2wDRQhT.js} +17 -13
- package/dist/{XerticaProvider-CeS5G_n5.cjs → XerticaProvider-C_JSOz1U.cjs} +2 -2
- package/dist/{XerticaProvider-CwOkHxiT.cjs → XerticaProvider-D5zjrqZq.cjs} +5 -4
- package/dist/{XerticaProvider-ra2NciRq.js → XerticaProvider-KTGl4Cn1.js} +2 -2
- package/dist/{alert-dialog-DqlRW_An.js → alert-dialog-BrpwXKwS.js} +3 -3
- package/dist/{alert-dialog-yckpaOpy.cjs → alert-dialog-BzIcTKn_.cjs} +173 -166
- package/dist/{alert-dialog-DhwPioBa.cjs → alert-dialog-CZU1Zase.cjs} +3 -3
- package/dist/{alert-dialog-KpoabzJb.js → alert-dialog-ClRoLH7l.js} +40 -56
- package/dist/{alert-dialog-B4M3vQKS.cjs → alert-dialog-DBBqvU-V.cjs} +53 -38
- package/dist/{alert-dialog-iDe5VE5o.js → alert-dialog-kty5pxQp.js} +160 -183
- package/dist/assistant.cjs.js +2 -2
- package/dist/assistant.es.js +2 -2
- package/dist/blocks.cjs.js +7 -3
- package/dist/blocks.es.js +2 -2
- package/dist/brand.cjs.js +7 -6
- package/dist/brand.es.js +3 -2
- package/dist/cli.js +63 -21
- package/dist/components/assistant/code-block/CodeBlock.d.ts +2 -1
- package/dist/components/assistant/formatted-document/FormattedDocument.d.ts +2 -1
- package/dist/components/assistant/markdown-message/MarkdownMessage.d.ts +2 -1
- package/dist/components/assistant/modern-chat-input/ModernChatInput.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantCollapsedView.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantConversationList.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantHeader.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantMessageBubble.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantTabBar.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantTypingIndicator.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.d.ts +2 -1
- package/dist/components/assistant/xertica-assistant/types.d.ts +3 -2
- package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +1 -1
- package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +2 -1
- package/dist/components/blocks/auth/AuthPageShell.d.ts +12 -0
- package/dist/components/blocks/auth/PasswordStrengthMeter.d.ts +7 -0
- package/dist/components/blocks/auth/SocialLoginButtons.d.ts +8 -0
- package/dist/components/blocks/auth/index.d.ts +8 -0
- package/dist/components/blocks/auth/usePasswordStrength.d.ts +3 -0
- package/dist/components/blocks/card-patterns/ActivityCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ActivityCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/FeatureCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/FeatureCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/NotificationCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/NotificationCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProfileCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProfileCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProjectCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/ProjectCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/card-patterns/QuickActionCard.d.ts +1 -1
- package/dist/components/blocks/card-patterns/QuickActionCardSkeleton.d.ts +1 -1
- package/dist/components/blocks/index.d.ts +1 -0
- package/dist/components/brand/language-selector/LanguageSelector.d.ts +2 -1
- package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +2 -1
- package/dist/components/brand/xertica-logo/XerticaLogo.d.ts +2 -1
- package/dist/components/brand/xertica-orbe/XerticaOrbe.d.ts +2 -1
- package/dist/components/brand/xertica-provider/XerticaProvider.d.ts +1 -1
- package/dist/components/brand/xertica-xlogo/XerticaXLogo.d.ts +2 -1
- package/dist/components/examples/DrawingMapExample.d.ts +2 -1
- package/dist/components/examples/FilterableMapExample.d.ts +1 -1
- package/dist/components/examples/MapShowcase.d.ts +2 -1
- package/dist/components/examples/SimpleFilterableMap.d.ts +2 -1
- package/dist/components/figma/ImageWithFallback.d.ts +1 -1
- package/dist/components/layout/header/header.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar.d.ts +25 -13
- package/dist/components/media/FloatingMediaWrapper.d.ts +1 -1
- package/dist/components/media/audio-player/AudioPlayer.d.ts +2 -1
- package/dist/components/media/video-player/VideoPlayer.d.ts +2 -1
- package/dist/components/pages/forgot-password-page/ForgotPasswordPage.d.ts +2 -1
- package/dist/components/pages/home-content/HomeContent.d.ts +2 -1
- package/dist/components/pages/home-page/HomePage.d.ts +2 -1
- package/dist/components/pages/login-page/LoginPage.d.ts +2 -1
- package/dist/components/pages/reset-password-page/ResetPasswordPage.d.ts +3 -2
- package/dist/components/pages/template-content/TemplateContent.d.ts +2 -1
- package/dist/components/pages/template-page/TemplatePage.d.ts +2 -1
- package/dist/components/pages/verify-email-page/VerifyEmailPage.d.ts +2 -1
- package/dist/components/shared/CustomTooltipContent.d.ts +1 -1
- package/dist/components/shared/assistant-utils.d.ts +3 -2
- package/dist/components/shared/error-boundary.d.ts +4 -4
- package/dist/components/shared/error-fallbacks.d.ts +4 -3
- package/dist/components/shared/navigation.d.ts +6 -2
- package/dist/components/ui/accordion/accordion.d.ts +4 -4
- package/dist/components/ui/alert/alert.d.ts +3 -3
- package/dist/components/ui/alert-dialog/alert-dialog.d.ts +10 -10
- package/dist/components/ui/aspect-ratio/aspect-ratio.d.ts +1 -1
- package/dist/components/ui/assistant-chart/AssistantChart.d.ts +4 -3
- package/dist/components/ui/avatar/avatar.d.ts +3 -3
- package/dist/components/ui/badge/badge.d.ts +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb.d.ts +7 -7
- package/dist/components/ui/calendar/calendar.d.ts +2 -2
- package/dist/components/ui/card/card.d.ts +7 -7
- package/dist/components/ui/carousel/carousel.d.ts +5 -5
- package/dist/components/ui/chart/chart.d.ts +16 -16
- package/dist/components/ui/collapsible/collapsible.d.ts +3 -3
- package/dist/components/ui/command/command.d.ts +9 -9
- package/dist/components/ui/context-menu/context-menu.d.ts +15 -15
- package/dist/components/ui/dialog/dialog.d.ts +9 -9
- package/dist/components/ui/drawer/drawer.d.ts +10 -10
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +15 -15
- package/dist/components/ui/form/form.d.ts +7 -7
- package/dist/components/ui/google-maps-loader/google-maps-loader.d.ts +3 -3
- package/dist/components/ui/hover-card/hover-card.d.ts +3 -3
- package/dist/components/ui/input-otp/input-otp.d.ts +4 -4
- package/dist/components/ui/label/label.d.ts +1 -1
- package/dist/components/ui/menubar/menubar.d.ts +16 -16
- package/dist/components/ui/navigation-menu/navigation-menu.d.ts +8 -8
- package/dist/components/ui/page-header/page-header.d.ts +3 -3
- package/dist/components/ui/pagination/pagination.d.ts +7 -7
- package/dist/components/ui/popover/popover.d.ts +4 -4
- package/dist/components/ui/progress/progress.d.ts +1 -1
- package/dist/components/ui/resizable/resizable.d.ts +11 -7
- package/dist/components/ui/rich-text-editor/rich-text-editor.d.ts +1 -1
- package/dist/components/ui/scroll-area/scroll-area.d.ts +2 -2
- package/dist/components/ui/separator/separator.d.ts +1 -1
- package/dist/components/ui/sheet/sheet.d.ts +10 -10
- package/dist/components/ui/skeleton/skeleton.d.ts +1 -1
- package/dist/components/ui/sonner/sonner.d.ts +2 -1
- package/dist/components/ui/stats-card/stats-card-skeleton.d.ts +1 -1
- package/dist/components/ui/table/table.d.ts +8 -8
- package/dist/components/ui/tabs/tabs.d.ts +4 -4
- package/dist/components/ui/tooltip/tooltip.d.ts +4 -4
- package/dist/contexts/ApiKeyContext.d.ts +2 -2
- package/dist/contexts/AssistenteContext.d.ts +1 -1
- package/dist/contexts/AuthContext.d.ts +1 -1
- package/dist/contexts/LanguageContext.d.ts +2 -2
- package/dist/contexts/LayoutContext.d.ts +2 -2
- package/dist/contexts/ThemeContext.d.ts +1 -1
- package/dist/features/assistant/hooks/useAssistantConfig.d.ts +1 -1
- package/dist/features/home/hooks/useDashboardStats.d.ts +1 -1
- package/dist/features/home/hooks/useFeatureCards.d.ts +1 -1
- package/dist/features/home/hooks/useTeamMembers.d.ts +1 -1
- package/dist/{google-maps-loader-BCe58h9D.js → google-maps-loader-BOug999f.js} +0 -4
- package/dist/{google-maps-loader-casMyxlo.cjs → google-maps-loader-DfeBRI8Q.cjs} +0 -5
- package/dist/hooks.cjs.js +6 -5
- package/dist/hooks.es.js +3 -2
- package/dist/{index-9GWd0qxq.cjs → index-BQjx1Mdf.cjs} +1 -1
- package/dist/index-Bei5DzAL.js +6 -0
- package/dist/index.cjs.js +32 -27
- package/dist/index.es.js +15 -14
- package/dist/layout.cjs.js +1 -1
- package/dist/layout.es.js +1 -1
- package/dist/pages.cjs.js +1 -1
- package/dist/pages.es.js +1 -1
- package/dist/{rich-text-editor-B2CKz7nx.cjs → rich-text-editor-BuqSu718.cjs} +68 -3
- package/dist/{rich-text-editor-DloeW0wc.js → rich-text-editor-CV8FtA_l.js} +66 -4
- package/dist/{sidebar-B4ZWaMrE.js → sidebar-B7YzwAp3.js} +365 -6
- package/dist/{sidebar-CLmIjgNd.cjs → sidebar-BGJ0j567.cjs} +84 -67
- package/dist/{sidebar-Duermn32.js → sidebar-BI6mZlC8.js} +81 -64
- package/dist/{sidebar-BS1p2V7t.cjs → sidebar-BtmotOg-.cjs} +367 -9
- package/dist/{sidebar-DyYvgyBj.cjs → sidebar-Cb0U7NsV.cjs} +368 -9
- package/dist/{sidebar-QwCoeoZ_.js → sidebar-D3EgGVxF.js} +1 -1
- package/dist/{sidebar-CQn_rwxP.cjs → sidebar-DDTqMGnR.cjs} +4 -4
- package/dist/{sidebar-3XyzjVBw.js → sidebar-I7EXyf5D.js} +364 -6
- package/dist/ui.cjs.js +9 -9
- package/dist/ui.es.js +5 -5
- package/dist/{xertica-assistant-BbgzsgsG.js → xertica-assistant-8fh8KA2K.js} +60 -51
- package/dist/{xertica-assistant-d2qs2Vd9.cjs → xertica-assistant-BjfG3zyL.cjs} +63 -46
- package/dist/{xertica-assistant-B687qEPU.js → xertica-assistant-CJVnvMqU.js} +17 -8
- package/dist/{xertica-assistant-sOHwTgIP.cjs → xertica-assistant-CKPtc1z5.cjs} +19 -10
- package/dist/{xertica-assistant-QFUnv5I2.cjs → xertica-assistant-DER0brPQ.cjs} +6 -5
- package/dist/{xertica-assistant-CyikE3N_.js → xertica-assistant-DQCjpk5M.js} +4 -3
- package/dist/{xertica-assistant-B1NaSFFj.js → xertica-assistant-Dk-9AJzw.js} +6 -5
- package/dist/{xertica-assistant-CIaUlbIt.cjs → xertica-assistant-DxhIKvuY.cjs} +8 -7
- package/dist/xertica-ui.css +2 -2
- package/docs/components/audio-player.md +1 -1
- package/docs/components/sidebar.md +331 -331
- package/docs/components/stats-card.md +138 -138
- package/docs/components/toggle.md +12 -0
- package/docs/doc-audit.md +35 -229
- package/docs/i18n.md +33 -10
- package/docs/llms.md +6 -4
- package/llms-compact.txt +444 -444
- package/llms-full.txt +12144 -12144
- package/llms.txt +187 -187
- package/package.json +223 -219
- package/scripts/a11y-audit.mjs +162 -162
- package/scripts/fix-stories.cjs +19 -19
- package/styles/globals.css +0 -1
- package/styles/xertica/base.css +8 -0
- package/styles/xertica/tokens.css +240 -240
- package/templates/.env.example +2 -2
- package/templates/.prettierignore +4 -4
- package/templates/.prettierrc +10 -10
- package/templates/guidelines/Guidelines.md +865 -865
- package/templates/index.html +13 -13
- package/templates/package.json +69 -69
- package/templates/src/app/components/AuthGuard.tsx +11 -0
- package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +1 -2
- package/templates/src/features/auth/ui/LoginContent.tsx +1 -2
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +3 -57
- package/templates/src/features/auth/ui/VerifyEmailContent.tsx +1 -2
- package/templates/src/features/home/index.ts +0 -10
- package/templates/src/features/home/ui/HomeContent.tsx +62 -116
- package/templates/src/features/settings/index.ts +2 -0
- package/templates/src/features/settings/ui/SettingsContent.tsx +134 -0
- package/templates/src/features/template/index.ts +0 -4
- package/templates/src/features/template/ui/TemplateContent.tsx +68 -1321
- package/templates/src/i18n.ts +36 -13
- package/templates/src/locales/en/pages/settings.json +15 -0
- package/templates/src/locales/en/pages/templates.json +5 -313
- package/templates/src/locales/es/pages/settings.json +15 -0
- package/templates/src/locales/es/pages/templates.json +5 -313
- package/templates/src/locales/pt-BR/pages/settings.json +15 -0
- package/templates/src/locales/pt-BR/pages/templates.json +5 -313
- package/templates/src/pages/SettingsPage.tsx +28 -0
- package/templates/src/shared/config/navigation.ts +2 -2
- package/templates/src/styles/xertica/tokens.css +240 -240
- package/utils/gemini.ts +2 -2
- package/dist/AssistantChart-9w31gdAb.cjs +0 -3363
- package/dist/AssistantChart-BAudAfne.cjs +0 -3591
- package/dist/AssistantChart-BAx9VQvb.cjs +0 -3374
- package/dist/AssistantChart-BP8upjMk.js +0 -3565
- package/dist/AssistantChart-CVko2A1W.js +0 -3348
- package/dist/AssistantChart-CVzmmhx4.js +0 -3337
- package/dist/AssistantChart-CeU2dIb6.js +0 -3469
- package/dist/AssistantChart-DO5UuX4J.cjs +0 -3495
- package/dist/AudioPlayer-1ypwE2Wh.cjs +0 -936
- package/dist/AudioPlayer-BJ2IuRQW.cjs +0 -1275
- package/dist/AudioPlayer-BWDW6TN9.cjs +0 -1279
- package/dist/AudioPlayer-CM962GEh.js +0 -1280
- package/dist/AudioPlayer-CbZId7cj.cjs +0 -998
- package/dist/AudioPlayer-DU8zt8-z.js +0 -999
- package/dist/AudioPlayer-DuKXrCfy.js +0 -937
- package/dist/AudioPlayer-Xxma6_-H.js +0 -1276
- package/dist/BrandColorsContext-DLVJgtmH.js +0 -666
- package/dist/BrandColorsContext-DZT7JjeD.js +0 -659
- package/dist/BrandColorsContext-GUyFmkX0.cjs +0 -665
- package/dist/BrandColorsContext-awnBCmC4.cjs +0 -666
- package/dist/CodeBlock-C2ZUXt8V.js +0 -219
- package/dist/CodeBlock-C5oYnLQp.cjs +0 -218
- package/dist/CodeBlock-DuxdtN-l.js +0 -219
- package/dist/CodeBlock-POVYONvC.cjs +0 -218
- package/dist/CustomTooltipContent-BT6brkVJ.cjs +0 -49
- package/dist/CustomTooltipContent-CfOfikhq.js +0 -33
- package/dist/CustomTooltipContent-DHjkY0ww.js +0 -40
- package/dist/CustomTooltipContent-c_K-DWRr.cjs +0 -56
- package/dist/FeatureCard-9GhnlgL3.js +0 -336
- package/dist/FeatureCard-Bcb3Zi54.js +0 -302
- package/dist/FeatureCard-CkPd2psQ.cjs +0 -301
- package/dist/FeatureCard-Dkp-xmzM.cjs +0 -335
- package/dist/FeatureCardSkeleton-CAgu8stE.js +0 -27
- package/dist/FeatureCardSkeleton-mO3Bdm_V.cjs +0 -26
- package/dist/LanguageContext-BwhwC3G2.js +0 -657
- package/dist/LanguageContext-DvUt5jBg.cjs +0 -656
- package/dist/LayoutContext-BDmcZfMH.cjs +0 -84
- package/dist/LayoutContext-C4kKN9RV.cjs +0 -93
- package/dist/LayoutContext-CGEe1oPq.js +0 -94
- package/dist/LayoutContext-CwT5KLiW.cjs +0 -104
- package/dist/LayoutContext-DVLCsoQn.js +0 -105
- package/dist/LayoutContext-dbQvdC4O.js +0 -85
- package/dist/ThemeContext-BbBNoFTG.js +0 -735
- package/dist/ThemeContext-Bo-W2WZH.js +0 -1856
- package/dist/ThemeContext-CP3a0jxy.cjs +0 -1855
- package/dist/ThemeContext-Cmr8Ex8H.cjs +0 -734
- package/dist/ThemeContext-CpqYShLq.cjs +0 -324
- package/dist/ThemeContext-D3LzacmG.js +0 -188
- package/dist/ThemeContext-DQUOeziy.cjs +0 -1855
- package/dist/ThemeContext-Du2nE1PL.js +0 -325
- package/dist/ThemeContext-GeEBTJ3q.cjs +0 -1621
- package/dist/ThemeContext-JyLK9B1o.js +0 -1622
- package/dist/ThemeContext-U4dEYc6C.cjs +0 -187
- package/dist/ThemeContext-ept8jhXI.js +0 -1856
- package/dist/VerifyEmailPage-BE-L9mB7.js +0 -2828
- package/dist/VerifyEmailPage-BIBOKV7Z.js +0 -3214
- package/dist/VerifyEmailPage-BJjAMUTW.js +0 -3223
- package/dist/VerifyEmailPage-BRSP-Pwt.cjs +0 -3196
- package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
- package/dist/VerifyEmailPage-BiRm7Nh4.cjs +0 -3213
- package/dist/VerifyEmailPage-Bvfv8HVQ.js +0 -3214
- package/dist/VerifyEmailPage-CR7kb5df.cjs +0 -2827
- package/dist/VerifyEmailPage-C_ihbcth.js +0 -2828
- package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
- package/dist/VerifyEmailPage-CdYPSJoO.js +0 -2828
- package/dist/VerifyEmailPage-CkBYfsNy.cjs +0 -3232
- package/dist/VerifyEmailPage-D-FRj5TU.cjs +0 -3213
- package/dist/VerifyEmailPage-DF2ilhum.cjs +0 -3210
- package/dist/VerifyEmailPage-DMBh4NM9.cjs +0 -2827
- package/dist/VerifyEmailPage-DTtFfC-J.js +0 -3197
- package/dist/VerifyEmailPage-Dt7zgA4w.cjs +0 -2827
- package/dist/VerifyEmailPage-EhudUdqF.js +0 -3211
- package/dist/VerifyEmailPage-RrUApqBN.js +0 -3214
- package/dist/VerifyEmailPage-VoMI7MYH.cjs +0 -3213
- package/dist/VerifyEmailPage-hdB8JQGv.cjs +0 -3213
- package/dist/VerifyEmailPage-vYHbYK3q.js +0 -3214
- package/dist/XerticaOrbe-BCUVSPPB.cjs +0 -1924
- package/dist/XerticaOrbe-BGIB1CTK.js +0 -1355
- package/dist/XerticaOrbe-By8eEvR-.js +0 -1925
- package/dist/XerticaOrbe-FWGjBj0U.cjs +0 -1354
- package/dist/XerticaProvider-AChwphCO.cjs +0 -48
- package/dist/XerticaProvider-AbWlr7Af.cjs +0 -48
- package/dist/XerticaProvider-BITjgC5p.js +0 -39
- package/dist/XerticaProvider-BSyFrmC0.js +0 -49
- package/dist/XerticaProvider-By8q3Roe.cjs +0 -38
- package/dist/XerticaProvider-CUYJZc32.js +0 -49
- package/dist/XerticaProvider-CW9hpCdF.cjs +0 -39
- package/dist/XerticaProvider-CWgby5mY.js +0 -49
- package/dist/XerticaProvider-CWs6EwNa.js +0 -49
- package/dist/XerticaProvider-CiNKjMx1.cjs +0 -48
- package/dist/XerticaProvider-CjQAQPcn.cjs +0 -48
- package/dist/XerticaProvider-D5lLumH-.js +0 -49
- package/dist/XerticaProvider-DUOJg9iX.js +0 -49
- package/dist/XerticaProvider-Dl_b72_l.cjs +0 -51
- package/dist/XerticaProvider-qQUDop71.cjs +0 -48
- package/dist/XerticaProvider-siSt9uG2.js +0 -40
- package/dist/XerticaXLogo-8TTzBjHw.cjs +0 -251
- package/dist/XerticaXLogo-B2svDGZh.cjs +0 -251
- package/dist/XerticaXLogo-BWaag64t.js +0 -252
- package/dist/XerticaXLogo-CU-U-GP4.cjs +0 -251
- package/dist/XerticaXLogo-ChryA6xj.js +0 -252
- package/dist/XerticaXLogo-CowGv7BC.js +0 -252
- package/dist/XerticaXLogo-D8jf0SNv.cjs +0 -214
- package/dist/XerticaXLogo-DHz5SugF.js +0 -252
- package/dist/XerticaXLogo-DTee_y8X.cjs +0 -251
- package/dist/XerticaXLogo-DfUvz-lD.js +0 -243
- package/dist/XerticaXLogo-DzXKZBtG.js +0 -231
- package/dist/XerticaXLogo-fAJMy3H4.js +0 -215
- package/dist/XerticaXLogo-kslQ8Tk_.cjs +0 -251
- package/dist/XerticaXLogo-xWbElCZj.cjs +0 -230
- package/dist/avatar-Cq5_E8r9.cjs +0 -78
- package/dist/avatar-CuYu2MKt.cjs +0 -72
- package/dist/avatar-Cxyofu1H.js +0 -56
- package/dist/avatar-DSBfJMRJ.js +0 -62
- package/dist/breadcrumb-CVzzzqfo.js +0 -103
- package/dist/breadcrumb-DIJ0X3Ot.js +0 -96
- package/dist/breadcrumb-DjSxkjlQ.cjs +0 -95
- package/dist/breadcrumb-DnDlQFg2.cjs +0 -102
- package/dist/button-0CXwCRTm.cjs +0 -85
- package/dist/button-Bnv9SvYK.cjs +0 -79
- package/dist/button-C6uvh0rV.js +0 -63
- package/dist/button-qkz7Icqf.js +0 -69
- package/dist/card-B8-Gl5DL.js +0 -73
- package/dist/card-Bv_c57KU.cjs +0 -72
- package/dist/card-DJTsYhLL.cjs +0 -89
- package/dist/card-fi8zAN-I.js +0 -90
- package/dist/dropdown-menu-B_uEXNc4.cjs +0 -220
- package/dist/dropdown-menu-CFuCssWA.js +0 -204
- package/dist/dropdown-menu-Ze1YZFyc.cjs +0 -247
- package/dist/dropdown-menu-nc_Lvg-u.js +0 -231
- package/dist/google-maps-loader-BVoVhUwA.js +0 -316
- package/dist/google-maps-loader-BqsYL48U.cjs +0 -285
- package/dist/google-maps-loader-DjJaYhV6.cjs +0 -316
- package/dist/google-maps-loader-t2IlYBzw.js +0 -286
- package/dist/index-B7A523O_.js +0 -8
- package/dist/index-BabBx2pa.js +0 -6
- package/dist/index-CkTUgOwX.js +0 -8
- package/dist/index-D3RLKRAs.cjs +0 -7
- package/dist/index-DmHhnb7a.cjs +0 -7
- package/dist/index.umd.js +0 -13712
- package/dist/input-CNFHVKvo.cjs +0 -145
- package/dist/input-CPl84zAx.cjs +0 -151
- package/dist/input-C_UiS2Py.cjs +0 -152
- package/dist/input-D-6IsAca.js +0 -133
- package/dist/input-cc-PTD4R.js +0 -123
- package/dist/input-wPYg0d0P.js +0 -127
- package/dist/progress-BLwqortq.cjs +0 -105
- package/dist/progress-D9mtsf6j.js +0 -89
- package/dist/rich-text-editor-1UW3Y2JK.js +0 -2891
- package/dist/rich-text-editor-BM-LPpTh.js +0 -2902
- package/dist/rich-text-editor-BmsjY03B.js +0 -2949
- package/dist/rich-text-editor-BrdC5evx.js +0 -2244
- package/dist/rich-text-editor-CyggTOLQ.cjs +0 -2908
- package/dist/rich-text-editor-DbV-S7Fi.cjs +0 -2261
- package/dist/rich-text-editor-DoCkKhzk.cjs +0 -2919
- package/dist/rich-text-editor-DqLICivI.js +0 -2832
- package/dist/rich-text-editor-DxO1Hz3a.cjs +0 -2903
- package/dist/rich-text-editor-GS2kpTAK.cjs +0 -2966
- package/dist/routes.d.ts +0 -10
- package/dist/select-Cmb8zF7w.cjs +0 -156
- package/dist/select-CprSNX0z.js +0 -139
- package/dist/select-DT7Zjn42.cjs +0 -162
- package/dist/select-En8DkoaQ.js +0 -145
- package/dist/sidebar-B3EYhli0.cjs +0 -800
- package/dist/sidebar-B9NR0lCe.cjs +0 -800
- package/dist/sidebar-BcJ6LxvX.cjs +0 -733
- package/dist/sidebar-BvF5I2Ue.cjs +0 -800
- package/dist/sidebar-C5B_LHek.cjs +0 -795
- package/dist/sidebar-CA6_ek3f.js +0 -801
- package/dist/sidebar-CRMiBtAi.js +0 -801
- package/dist/sidebar-CVUGHOS_.cjs +0 -756
- package/dist/sidebar-CZ2mWaMM.cjs +0 -800
- package/dist/sidebar-CmvwjnVb.js +0 -757
- package/dist/sidebar-CplprZpM.js +0 -801
- package/dist/sidebar-Dz7bd3zP.js +0 -796
- package/dist/sidebar-KIS0C2JH.js +0 -801
- package/dist/sidebar-OTO_up7Z.js +0 -801
- package/dist/sidebar-WoKvFWCN.js +0 -717
- package/dist/sidebar-zowjejT2.cjs +0 -800
- package/dist/skeleton-4zoHiFJ_.cjs +0 -83
- package/dist/skeleton-C4bHqUBf.js +0 -84
- package/dist/slider-C0JKA9k3.js +0 -56
- package/dist/slider-CPmwzm_3.cjs +0 -73
- package/dist/slider-DcJharR9.cjs +0 -73
- package/dist/slider-Pay3fka2.js +0 -56
- package/dist/sonner-DeUIj0Zg.cjs +0 -63
- package/dist/sonner-g9RIfi35.js +0 -47
- package/dist/tooltip-CNtsL5cB.cjs +0 -71
- package/dist/tooltip-CTyZCD8h.js +0 -55
- package/dist/tooltip-CwgSdy3h.cjs +0 -67
- package/dist/tooltip-D-OrYnKO.js +0 -51
- package/dist/use-audio-player-BJFV24XW.js +0 -188
- package/dist/use-audio-player-Bkh23vQ3.js +0 -177
- package/dist/use-audio-player-Dn1NR9xN.cjs +0 -176
- package/dist/use-audio-player-DyVYlOnR.cjs +0 -187
- package/dist/use-mobile-BB4M_4Ru.cjs +0 -47
- package/dist/use-mobile-CLu9nqGL.js +0 -31
- package/dist/use-mobile-CNwiBNxu.js +0 -33
- package/dist/use-mobile-Dlf74ufz.cjs +0 -49
- package/dist/xertica-assistant-B1IaHXnB.cjs +0 -1894
- package/dist/xertica-assistant-BMqdyRVi.js +0 -2082
- package/dist/xertica-assistant-Bj3vBCq_.cjs +0 -2081
- package/dist/xertica-assistant-CfBCo21g.js +0 -2148
- package/dist/xertica-assistant-DIM_Do1k.js +0 -1866
- package/dist/xertica-assistant-DPsESB6t.js +0 -1878
- package/dist/xertica-assistant-DrsRwla1.cjs +0 -2147
- package/dist/xertica-assistant-Qp3ydksa.cjs +0 -1882
- package/dist/xertica-assistant-gnCJdcZY.js +0 -1866
- package/dist/xertica-assistant-yyrR0JKl.cjs +0 -1882
- package/styles/xertica/app-overrides/scrollbar.css +0 -33
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +0 -78
- package/templates/src/features/home/data/mock.ts +0 -41
- package/templates/src/features/home/hooks/useFeatureCards.ts +0 -20
- package/templates/src/features/home/store/dashboardStore.ts +0 -25
- package/templates/src/features/template/ui/CrudTemplate.tsx +0 -112
- package/templates/src/features/template/ui/DashboardTemplate.tsx +0 -110
- package/templates/src/features/template/ui/FormTemplate.tsx +0 -117
- package/templates/src/features/template/ui/LoginTemplate.tsx +0 -59
- package/templates/src/locales/en/pages/crudTemplate.json +0 -25
- package/templates/src/locales/en/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/en/pages/formTemplate.json +0 -16
- package/templates/src/locales/en/pages/loginTemplate.json +0 -9
- package/templates/src/locales/es/pages/crudTemplate.json +0 -25
- package/templates/src/locales/es/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/es/pages/formTemplate.json +0 -16
- package/templates/src/locales/es/pages/loginTemplate.json +0 -9
- package/templates/src/locales/pt-BR/pages/crudTemplate.json +0 -25
- package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +0 -20
- package/templates/src/locales/pt-BR/pages/formTemplate.json +0 -16
- package/templates/src/locales/pt-BR/pages/loginTemplate.json +0 -9
- package/templates/vite.config.d.ts +0 -2
- package/templates/vite.config.js +0 -20
- package/dist/{XerticaXLogo-qBPhwK3g.cjs → LanguageSelector-1cINLJ23.cjs} +80 -80
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as CheckboxStories from './checkbox.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={CheckboxStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A binary toggle for selecting one or multiple options.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Explicit Binding** — When using with React Hook Form, bind `checked` and `onCheckedChange` explicitly instead of spreading `{...field}`.
|
|
25
|
-
> - **Accessibility** — Always pair with a `Label` linked via `id` and `htmlFor`.
|
|
26
|
-
> - **Choice Type** — Use checkboxes for independent choices. For mutually exclusive options, use `RadioGroup`.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as CheckboxStories from './checkbox.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={CheckboxStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A binary toggle for selecting one or multiple options.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Explicit Binding** — When using with React Hook Form, bind `checked` and `onCheckedChange` explicitly instead of spreading `{...field}`.
|
|
25
|
+
> - **Accessibility** — Always pair with a `Label` linked via `id` and `htmlFor`.
|
|
26
|
+
> - **Choice Type** — Use checkboxes for independent choices. For mutually exclusive options, use `RadioGroup`.
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as CollapsibleStories from './collapsible.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={CollapsibleStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A single expandable/collapsible content section.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Standalone Element** — Use `Collapsible` for individual sections. For multiple related sections with managed auto-close behavior, use `Accordion`.
|
|
25
|
-
> - **Trigger Pattern** — Always use `asChild` on the `CollapsibleTrigger` when wrapping a button or custom element.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as CollapsibleStories from './collapsible.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={CollapsibleStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A single expandable/collapsible content section.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Standalone Element** — Use `Collapsible` for individual sections. For multiple related sections with managed auto-close behavior, use `Accordion`.
|
|
25
|
+
> - **Trigger Pattern** — Always use `asChild` on the `CollapsibleTrigger` when wrapping a button or custom element.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as CommandStories from './command.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={CommandStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A search-driven command palette for executing actions via keyboard.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Keyboard Trigger** — Always register the `⌘K` or `Ctrl+K` shortcut when using `CommandDialog`.
|
|
25
|
-
> - **Empty State** — Include a `CommandEmpty` component to handle cases with no search results.
|
|
26
|
-
> - **Modal Closing** — Ensure the palette closes after a successfull `onSelect` action by updating the `open` state.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as CommandStories from './command.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={CommandStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A search-driven command palette for executing actions via keyboard.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Keyboard Trigger** — Always register the `⌘K` or `Ctrl+K` shortcut when using `CommandDialog`.
|
|
25
|
+
> - **Empty State** — Include a `CommandEmpty` component to handle cases with no search results.
|
|
26
|
+
> - **Modal Closing** — Ensure the palette closes after a successfull `onSelect` action by updating the `open` state.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as ContextMenuStories from './context-menu.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={ContextMenuStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A right-click or long-press menu for contextual actions.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Supplement, Don't Replace** — Context menus are hidden by default; always provide a visible UI control (like a button or meatball menu) for primary actions.
|
|
25
|
-
> - **Visual Alignment** — Use the `inset` prop on items without icons to maintain consistent text alignment with neighbors that have icons or complex triggers.
|
|
26
|
-
> - **Semantic Color** — Use `className="text-destructive"` for menu items that perform irreversible actions like "Delete".
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as ContextMenuStories from './context-menu.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={ContextMenuStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A right-click or long-press menu for contextual actions.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Supplement, Don't Replace** — Context menus are hidden by default; always provide a visible UI control (like a button or meatball menu) for primary actions.
|
|
25
|
+
> - **Visual Alignment** — Use the `inset` prop on items without icons to maintain consistent text alignment with neighbors that have icons or complex triggers.
|
|
26
|
+
> - **Semantic Color** — Use `className="text-destructive"` for menu items that perform irreversible actions like "Delete".
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as DialogStories from './dialog.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={DialogStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A modal overlay for critical confirmations and data entry.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Accessibility** — `DialogTitle` is required. `DialogTrigger` should always use `asChild` with a `Button`.
|
|
25
|
-
> - **Modal Flow** — Use dialogs for supplementary tasks. For irreversible destructive actions, use `AlertDialog`.
|
|
26
|
-
> - **Mobile** — For mobile-first interfaces, consider using `Drawer` instead of `Dialog`.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as DialogStories from './dialog.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={DialogStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A modal overlay for critical confirmations and data entry.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Accessibility** — `DialogTitle` is required. `DialogTrigger` should always use `asChild` with a `Button`.
|
|
25
|
+
> - **Modal Flow** — Use dialogs for supplementary tasks. For irreversible destructive actions, use `AlertDialog`.
|
|
26
|
+
> - **Mobile** — For mobile-first interfaces, consider using `Drawer` instead of `Dialog`.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as DrawerStories from './drawer.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={DrawerStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A bottom-aligned panel optimized for mobile interactions.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Mobile First** — Drawers are best suited for mobile screens. For desktop side panels, use the `Sheet` component.
|
|
25
|
-
> - **Accessibility** — Always include a `DrawerTitle` to ensure proper screen reader support.
|
|
26
|
-
> - **Content Centering** — Wrap internal content in a centered container (e.g., `mx-auto w-full max-w-sm`) for better layout on wider screens.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as DrawerStories from './drawer.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={DrawerStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A bottom-aligned panel optimized for mobile interactions.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Mobile First** — Drawers are best suited for mobile screens. For desktop side panels, use the `Sheet` component.
|
|
25
|
+
> - **Accessibility** — Always include a `DrawerTitle` to ensure proper screen reader support.
|
|
26
|
+
> - **Content Centering** — Wrap internal content in a centered container (e.g., `mx-auto w-full max-w-sm`) for better layout on wider screens.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as DropdownMenuStories from './dropdown-menu.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={DropdownMenuStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A triggered contextual menu for grouped actions.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Trigger Pattern** — Always use `asChild` on `<DropdownMenuTrigger>` when wrapping a `<Button>`.
|
|
25
|
-
> - **Destructive Items** — Danger actions must use `text-destructive` and be separated by a `<DropdownMenuSeparator>`.
|
|
26
|
-
> - **Alignment** — Usually, table row actions use `align="end"` to keep the menu within the viewport.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as DropdownMenuStories from './dropdown-menu.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={DropdownMenuStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A triggered contextual menu for grouped actions.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Trigger Pattern** — Always use `asChild` on `<DropdownMenuTrigger>` when wrapping a `<Button>`.
|
|
25
|
+
> - **Destructive Items** — Danger actions must use `text-destructive` and be separated by a `<DropdownMenuSeparator>`.
|
|
26
|
+
> - **Alignment** — Usually, table row actions use `align="end"` to keep the menu within the viewport.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as EmptyStories from './empty.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={EmptyStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A composite zero-state container for no-data scenarios.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Composable Pattern** — Always use the sub-components (`EmptyIcon`, `EmptyTitle`, etc.) to build the empty state.
|
|
25
|
-
> - **Icon Sizing** — Use `size-10` for standard and `size-8` for compact views.
|
|
26
|
-
> - **Contextual CTA** — Use `EmptyAction` only when a corrective user action is possible.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as EmptyStories from './empty.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={EmptyStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A composite zero-state container for no-data scenarios.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Composable Pattern** — Always use the sub-components (`EmptyIcon`, `EmptyTitle`, etc.) to build the empty state.
|
|
25
|
+
> - **Icon Sizing** — Use `size-10` for standard and `size-8` for compact views.
|
|
26
|
+
> - **Contextual CTA** — Use `EmptyAction` only when a corrective user action is possible.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as FileUploadStories from './file-upload.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={FileUploadStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A drag-and-drop file uploader with type and size validation.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Variations
|
|
16
|
-
|
|
17
|
-
<Stories />
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## AI Best Practices
|
|
22
|
-
|
|
23
|
-
> [!IMPORTANT]
|
|
24
|
-
> - **Validation** — Always use `accept` and `maxSize` to restrict file types and sizes as early as possible.
|
|
25
|
-
> - **Form Integration** — Use the `onFilesChange` callback to manually update form states (e.g., using `field.onChange` in React Hook Form).
|
|
26
|
-
> - **UX** — For the best experience, specify a clear maximum width for the dropzone container.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as FileUploadStories from './file-upload.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={FileUploadStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A drag-and-drop file uploader with type and size validation.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Variations
|
|
16
|
+
|
|
17
|
+
<Stories />
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## AI Best Practices
|
|
22
|
+
|
|
23
|
+
> [!IMPORTANT]
|
|
24
|
+
> - **Validation** — Always use `accept` and `maxSize` to restrict file types and sizes as early as possible.
|
|
25
|
+
> - **Form Integration** — Use the `onFilesChange` callback to manually update form states (e.g., using `field.onChange` in React Hook Form).
|
|
26
|
+
> - **UX** — For the best experience, specify a clear maximum width for the dropzone container.
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as FormStories from './form.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={FormStories} />
|
|
5
|
-
|
|
6
|
-
<Title />
|
|
7
|
-
<Subtitle>A powerful form system built on react-hook-form and Zod.</Subtitle>
|
|
8
|
-
|
|
9
|
-
<Description />
|
|
10
|
-
|
|
11
|
-
<Primary />
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## AI Best Practices
|
|
16
|
-
|
|
17
|
-
> [!IMPORTANT]
|
|
18
|
-
> - **Schema-First** — Always define your form schema using `Zod` before implementing the UI components.
|
|
19
|
-
> - **Unified Wrappers** — Use `FormItem`, `FormLabel`, and `FormControl` for every field to ensure automatic ARIA linking and consistent spacing.
|
|
20
|
-
> - **Validation Messages** — `FormMessage` automatically picks up validation errors from the current form context — never render errors manually.
|
|
1
|
+
import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as FormStories from './form.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={FormStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
<Subtitle>A powerful form system built on react-hook-form and Zod.</Subtitle>
|
|
8
|
+
|
|
9
|
+
<Description />
|
|
10
|
+
|
|
11
|
+
<Primary />
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## AI Best Practices
|
|
16
|
+
|
|
17
|
+
> [!IMPORTANT]
|
|
18
|
+
> - **Schema-First** — Always define your form schema using `Zod` before implementing the UI components.
|
|
19
|
+
> - **Unified Wrappers** — Use `FormItem`, `FormLabel`, and `FormControl` for every field to ensure automatic ARIA linking and consistent spacing.
|
|
20
|
+
> - **Validation Messages** — `FormMessage` automatically picks up validation errors from the current form context — never render errors manually.
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
-
|
|
3
|
-
<Meta title="System/GoogleMapsLoader" />
|
|
4
|
-
|
|
5
|
-
<Title>GoogleMapsLoader</Title>
|
|
6
|
-
<Subtitle>Async Google Maps API loader with deduplication and React context.</Subtitle>
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
`GoogleMapsLoaderProvider` lazily loads the Google Maps JavaScript SDK once and shares the loading state across the component tree through React context. When you use `XerticaProvider` with a `googleMapsApiKey`, this provider is included automatically — you do not need to add it separately.
|
|
13
|
-
|
|
14
|
-
```tsx
|
|
15
|
-
// Automatically wired when using XerticaProvider:
|
|
16
|
-
import { XerticaProvider } from 'xertica-ui/brand';
|
|
17
|
-
|
|
18
|
-
<XerticaProvider googleMapsApiKey={import.meta.env.VITE_GOOGLE_MAPS_KEY}>
|
|
19
|
-
<App />
|
|
20
|
-
</XerticaProvider>
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
For standalone usage without `XerticaProvider`:
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
import { GoogleMapsLoaderProvider } from 'xertica-ui';
|
|
27
|
-
|
|
28
|
-
<GoogleMapsLoaderProvider apiKey={import.meta.env.VITE_GOOGLE_MAPS_KEY}>
|
|
29
|
-
<YourMapComponent />
|
|
30
|
-
</GoogleMapsLoaderProvider>
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Exports
|
|
36
|
-
|
|
37
|
-
| Export | Type | Description |
|
|
38
|
-
|---|---|---|
|
|
39
|
-
| `GoogleMapsLoaderProvider` | Component | Context provider that loads the Maps SDK. |
|
|
40
|
-
| `useGoogleMapsLoader` | Hook | Returns `{ isLoaded, loadError }` for the current load state. |
|
|
41
|
-
| `reloadGoogleMaps` | Function | Imperatively retriggers the Maps SDK load (e.g., after an API key change). |
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## `useGoogleMapsLoader`
|
|
46
|
-
|
|
47
|
-
```tsx
|
|
48
|
-
import { useGoogleMapsLoader } from 'xertica-ui';
|
|
49
|
-
|
|
50
|
-
function MyMap() {
|
|
51
|
-
const { isLoaded, loadError } = useGoogleMapsLoader();
|
|
52
|
-
|
|
53
|
-
if (loadError) return <p>Failed to load Google Maps.</p>;
|
|
54
|
-
if (!isLoaded) return <p>Loading map…</p>;
|
|
55
|
-
|
|
56
|
-
return <div id="map" className="h-64 w-full" />;
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## AI Best Practices
|
|
63
|
-
|
|
64
|
-
> [!IMPORTANT]
|
|
65
|
-
> - **API Key** — Always pass the key via an environment variable (`import.meta.env.VITE_GOOGLE_MAPS_KEY`). Never hardcode it in source.
|
|
66
|
-
> - **Single provider** — Mount `GoogleMapsLoaderProvider` once at the root (or rely on `XerticaProvider`). Multiple providers on the same page will cause duplicate script injection.
|
|
67
|
-
> - **Guard rendering** — Always check `isLoaded` before instantiating `new google.maps.Map(...)` to avoid "google is not defined" errors.
|
|
68
|
-
> - **`SimpleMap` shortcut** — For basic map display, prefer `<SimpleMap />` over wiring the loader manually.
|
|
1
|
+
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="System/GoogleMapsLoader" />
|
|
4
|
+
|
|
5
|
+
<Title>GoogleMapsLoader</Title>
|
|
6
|
+
<Subtitle>Async Google Maps API loader with deduplication and React context.</Subtitle>
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
`GoogleMapsLoaderProvider` lazily loads the Google Maps JavaScript SDK once and shares the loading state across the component tree through React context. When you use `XerticaProvider` with a `googleMapsApiKey`, this provider is included automatically — you do not need to add it separately.
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
// Automatically wired when using XerticaProvider:
|
|
16
|
+
import { XerticaProvider } from 'xertica-ui/brand';
|
|
17
|
+
|
|
18
|
+
<XerticaProvider googleMapsApiKey={import.meta.env.VITE_GOOGLE_MAPS_KEY}>
|
|
19
|
+
<App />
|
|
20
|
+
</XerticaProvider>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For standalone usage without `XerticaProvider`:
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { GoogleMapsLoaderProvider } from 'xertica-ui';
|
|
27
|
+
|
|
28
|
+
<GoogleMapsLoaderProvider apiKey={import.meta.env.VITE_GOOGLE_MAPS_KEY}>
|
|
29
|
+
<YourMapComponent />
|
|
30
|
+
</GoogleMapsLoaderProvider>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Exports
|
|
36
|
+
|
|
37
|
+
| Export | Type | Description |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| `GoogleMapsLoaderProvider` | Component | Context provider that loads the Maps SDK. |
|
|
40
|
+
| `useGoogleMapsLoader` | Hook | Returns `{ isLoaded, loadError }` for the current load state. |
|
|
41
|
+
| `reloadGoogleMaps` | Function | Imperatively retriggers the Maps SDK load (e.g., after an API key change). |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## `useGoogleMapsLoader`
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import { useGoogleMapsLoader } from 'xertica-ui';
|
|
49
|
+
|
|
50
|
+
function MyMap() {
|
|
51
|
+
const { isLoaded, loadError } = useGoogleMapsLoader();
|
|
52
|
+
|
|
53
|
+
if (loadError) return <p>Failed to load Google Maps.</p>;
|
|
54
|
+
if (!isLoaded) return <p>Loading map…</p>;
|
|
55
|
+
|
|
56
|
+
return <div id="map" className="h-64 w-full" />;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## AI Best Practices
|
|
63
|
+
|
|
64
|
+
> [!IMPORTANT]
|
|
65
|
+
> - **API Key** — Always pass the key via an environment variable (`import.meta.env.VITE_GOOGLE_MAPS_KEY`). Never hardcode it in source.
|
|
66
|
+
> - **Single provider** — Mount `GoogleMapsLoaderProvider` once at the root (or rely on `XerticaProvider`). Multiple providers on the same page will cause duplicate script injection.
|
|
67
|
+
> - **Guard rendering** — Always check `isLoaded` before instantiating `new google.maps.Map(...)` to avoid "google is not defined" errors.
|
|
68
|
+
> - **`SimpleMap` shortcut** — For basic map display, prefer `<SimpleMap />` over wiring the loader manually.
|