xertica-ui 2.3.0 → 2.4.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 +564 -552
- package/README.md +417 -406
- package/assets/xertica-logo.svg +37 -37
- package/assets/xertica-x-logo.svg +20 -20
- package/bin/cli.ts +1244 -1155
- package/bin/language-config.ts +358 -361
- package/components/assistant/code-block/CodeBlock.tsx +268 -268
- package/components/assistant/formatted-document/FormattedDocument.tsx +147 -147
- package/components/assistant/modern-chat-input/ModernChatInput.tsx +564 -554
- package/components/assistant/xertica-assistant/parts/AssistantCollapsedView.tsx +99 -99
- package/components/assistant/xertica-assistant/parts/AssistantConversationList.tsx +104 -106
- package/components/assistant/xertica-assistant/parts/AssistantDocumentEditor.tsx +81 -81
- package/components/assistant/xertica-assistant/parts/AssistantFeedbackDialog.tsx +88 -78
- package/components/assistant/xertica-assistant/parts/AssistantHeader.tsx +75 -75
- package/components/assistant/xertica-assistant/parts/AssistantMessageBubble.tsx +564 -560
- package/components/assistant/xertica-assistant/parts/AssistantTabBar.tsx +67 -67
- package/components/assistant/xertica-assistant/parts/AssistantWelcomeScreen.tsx +103 -103
- package/components/assistant/xertica-assistant/use-assistant.ts +615 -615
- package/components/assistant/xertica-assistant/xertica-assistant.tsx +611 -613
- package/components/blocks/card-patterns/ActivityCard.tsx +100 -100
- package/components/blocks/card-patterns/ActivityCardSkeleton.tsx +56 -56
- package/components/blocks/card-patterns/FeatureCardSkeleton.tsx +58 -63
- package/components/blocks/card-patterns/NotificationCard.tsx +140 -140
- package/components/blocks/card-patterns/NotificationCardSkeleton.tsx +81 -81
- package/components/blocks/card-patterns/ProfileCard.tsx +112 -114
- package/components/blocks/card-patterns/ProfileCardSkeleton.tsx +69 -69
- package/components/blocks/card-patterns/ProjectCard.tsx +123 -123
- package/components/blocks/card-patterns/ProjectCardSkeleton.tsx +67 -72
- package/components/blocks/card-patterns/QuickActionCardSkeleton.tsx +44 -44
- package/components/blocks/card-patterns/card-patterns.stories.tsx +594 -594
- package/components/blocks/card-patterns/index.ts +29 -29
- package/components/brand/language-selector/LanguageSelector.tsx +102 -102
- package/components/brand/language-selector/language-selector.stories.tsx +111 -114
- package/components/brand/language-selector/language-selector.test.tsx +101 -101
- package/components/brand/theme-toggle/ThemeToggle.tsx +74 -70
- package/components/brand/xertica-provider/XerticaProvider.tsx +109 -112
- package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
- package/components/index.ts +86 -90
- package/components/layout/sidebar/sidebar.mdx +1 -1
- package/components/layout/sidebar/sidebar.tsx +1079 -1073
- package/components/media/FloatingMediaWrapper.tsx +371 -371
- package/components/media/audio-player/AudioPlayer.tsx +768 -766
- package/components/media/video-player/VideoPlayer.tsx +310 -310
- package/components/pages/forgot-password-page/ForgotPasswordPage.tsx +1 -1
- package/components/pages/home-content/HomeContent.tsx +120 -120
- package/components/pages/home-content/home-content.mdx +62 -62
- package/components/pages/home-page/HomePage.tsx +78 -74
- package/components/pages/home-page/home-page.mdx +53 -53
- package/components/pages/login-page/LoginPage.tsx +218 -216
- package/components/pages/reset-password-page/ResetPasswordPage.tsx +243 -239
- package/components/pages/template-content/TemplateContent.tsx +1354 -1235
- package/components/pages/template-content/template-content.mdx +61 -61
- package/components/pages/template-page/template-page.mdx +53 -53
- package/components/pages/verify-email-page/VerifyEmailPage.tsx +206 -206
- package/components/shared/error-boundary.stories.tsx +4 -22
- package/components/shared/error-boundary.tsx +1 -5
- package/components/shared/error-fallbacks.tsx +4 -8
- package/components/ui/accordion/accordion.mdx +8 -8
- package/components/ui/alert/alert.mdx +8 -8
- package/components/ui/alert-dialog/alert-dialog.mdx +8 -8
- package/components/ui/aspect-ratio/aspect-ratio.mdx +8 -8
- package/components/ui/assistant-chart/assistant-chart.mdx +8 -8
- package/components/ui/avatar/avatar.mdx +8 -8
- package/components/ui/badge/badge.mdx +8 -8
- package/components/ui/breadcrumb/breadcrumb.mdx +8 -8
- package/components/ui/button/button.mdx +8 -8
- package/components/ui/calendar/calendar.mdx +8 -8
- package/components/ui/card/card.mdx +8 -8
- package/components/ui/carousel/carousel.mdx +8 -8
- package/components/ui/chart/chart.mdx +8 -8
- package/components/ui/checkbox/checkbox.mdx +8 -8
- package/components/ui/collapsible/collapsible.mdx +8 -8
- package/components/ui/command/command.mdx +8 -8
- package/components/ui/context-menu/context-menu.mdx +8 -8
- package/components/ui/dialog/dialog.mdx +8 -8
- package/components/ui/drawer/drawer.mdx +8 -8
- package/components/ui/dropdown-menu/dropdown-menu.mdx +8 -8
- package/components/ui/empty/empty.mdx +8 -8
- package/components/ui/file-upload/file-upload.mdx +8 -8
- package/components/ui/hover-card/hover-card.mdx +8 -8
- package/components/ui/input/input.mdx +8 -8
- package/components/ui/input-otp/input-otp.mdx +8 -8
- package/components/ui/label/label.mdx +8 -8
- package/components/ui/map/map.mdx +8 -8
- package/components/ui/menubar/menubar.mdx +8 -8
- package/components/ui/navigation-menu/navigation-menu.mdx +8 -8
- package/components/ui/notification-badge/notification-badge.mdx +8 -8
- package/components/ui/pagination/pagination.mdx +8 -8
- package/components/ui/popover/popover.mdx +8 -8
- package/components/ui/progress/progress.mdx +8 -8
- package/components/ui/radio-group/radio-group.mdx +8 -8
- package/components/ui/rating/rating.mdx +8 -8
- package/components/ui/resizable/resizable.mdx +8 -8
- package/components/ui/route-map/route-map.mdx +8 -8
- package/components/ui/scroll-area/scroll-area.mdx +8 -8
- package/components/ui/search/search.mdx +8 -8
- package/components/ui/select/select.mdx +8 -8
- package/components/ui/separator/separator.mdx +8 -8
- package/components/ui/sheet/sheet.mdx +8 -8
- package/components/ui/simple-map/simple-map.mdx +8 -8
- package/components/ui/skeleton/skeleton.mdx +8 -8
- package/components/ui/slider/slider.mdx +8 -8
- package/components/ui/sonner/sonner.mdx +8 -8
- package/components/ui/stats-card/index.ts +2 -2
- package/components/ui/stats-card/stats-card-skeleton.tsx +60 -62
- package/components/ui/stats-card/stats-card.mdx +8 -8
- package/components/ui/stats-card/stats-card.stories.tsx +99 -99
- package/components/ui/stepper/stepper.mdx +8 -8
- package/components/ui/switch/switch.mdx +8 -8
- package/components/ui/table/table.mdx +8 -8
- package/components/ui/tabs/tabs.mdx +8 -8
- package/components/ui/textarea/textarea.mdx +8 -8
- package/components/ui/timeline/timeline.mdx +8 -8
- package/components/ui/toggle/toggle.mdx +8 -8
- package/components/ui/toggle-group/toggle-group.mdx +8 -8
- package/components/ui/tooltip/tooltip.mdx +8 -8
- package/components/ui/tree-view/tree-view.mdx +8 -8
- package/components.json +892 -892
- package/contexts/AuthContext.tsx +11 -8
- package/contexts/LanguageContext.test.tsx +121 -121
- package/contexts/LanguageContext.tsx +250 -251
- package/dist/{AssistantChart-DoZCyS5r.cjs → AssistantChart-9w31gdAb.cjs} +4 -4
- package/dist/{AssistantChart-CldVCVDe.cjs → AssistantChart-BAudAfne.cjs} +5 -5
- package/dist/{AssistantChart-Bdd44uBn.cjs → AssistantChart-BAx9VQvb.cjs} +127 -388
- package/dist/{AssistantChart-Cu3m7RBo.js → AssistantChart-BP8upjMk.js} +5 -5
- package/dist/{AssistantChart-CFhDdGyU.js → AssistantChart-CVko2A1W.js} +130 -391
- package/dist/{AssistantChart-C_hwFRRr.js → AssistantChart-CVzmmhx4.js} +4 -4
- package/dist/{AudioPlayer-IAU5q5T1.cjs → AudioPlayer-1ypwE2Wh.cjs} +1 -1
- package/dist/{AudioPlayer-CGRUtUdN.js → AudioPlayer-DuKXrCfy.js} +1 -1
- package/dist/{LanguageContext-CS14yCpi.js → LanguageContext-BwhwC3G2.js} +2 -2
- package/dist/{LanguageContext-B_KFTCzT.cjs → LanguageContext-DvUt5jBg.cjs} +2 -2
- package/dist/{ThemeContext-C2EwAPDt.js → ThemeContext-BbBNoFTG.js} +2 -2
- package/dist/{ThemeContext-Bmod0Cg2.cjs → ThemeContext-BblcjQup.cjs} +13 -8
- package/dist/{ThemeContext-BWq9ACPo.js → ThemeContext-Bo-W2WZH.js} +13 -8
- package/dist/{ThemeContext-j5aGtPky.cjs → ThemeContext-CP3a0jxy.cjs} +193 -262
- package/dist/{ThemeContext-vTjumZeM.cjs → ThemeContext-Cmr8Ex8H.cjs} +2 -2
- package/dist/ThemeContext-CpqYShLq.cjs +324 -0
- package/dist/{ThemeContext-CQSo4Iwc.js → ThemeContext-D3LzacmG.js} +8 -1
- package/dist/ThemeContext-Du2nE1PL.js +325 -0
- package/dist/ThemeContext-GeEBTJ3q.cjs +1621 -0
- package/dist/ThemeContext-JyLK9B1o.js +1622 -0
- package/dist/{ThemeContext-CGk3KK0k.cjs → ThemeContext-U4dEYc6C.cjs} +8 -1
- package/dist/{ThemeContext-BXjrgUjW.js → ThemeContext-ept8jhXI.js} +200 -261
- package/dist/{VerifyEmailPage-C0c2e5n0.js → VerifyEmailPage-BE-L9mB7.js} +7 -7
- package/dist/{VerifyEmailPage-DSBMRHtl.js → VerifyEmailPage-BIBOKV7Z.js} +41 -36
- package/dist/{VerifyEmailPage-DgIid028.js → VerifyEmailPage-BJjAMUTW.js} +4 -4
- package/dist/{VerifyEmailPage--1Vurewl.cjs → VerifyEmailPage-BRSP-Pwt.cjs} +3 -3
- package/dist/{VerifyEmailPage-Cwi3kbol.cjs → VerifyEmailPage-Bae2cBXT.cjs} +7 -7
- package/dist/{VerifyEmailPage-De6bQjrz.cjs → VerifyEmailPage-BiRm7Nh4.cjs} +41 -36
- package/dist/{VerifyEmailPage-ByerOcm4.cjs → VerifyEmailPage-Bv8Ah_TK.cjs} +23 -20
- package/dist/VerifyEmailPage-Bvfv8HVQ.js +3214 -0
- package/dist/{VerifyEmailPage-BComraR7.cjs → VerifyEmailPage-CR7kb5df.cjs} +22 -12
- package/dist/{VerifyEmailPage-MTD7AG1Z.js → VerifyEmailPage-C_ihbcth.js} +4 -4
- package/dist/{VerifyEmailPage-1WwWczAn.js → VerifyEmailPage-CbgjOF0v.js} +22 -12
- package/dist/{VerifyEmailPage-DvMLZgFt.js → VerifyEmailPage-CdYPSJoO.js} +1 -1
- package/dist/{VerifyEmailPage-By3Jf__L.cjs → VerifyEmailPage-CkBYfsNy.cjs} +4 -4
- package/dist/{VerifyEmailPage-CJLz3jrn.js → VerifyEmailPage-Cyl55sJb.js} +23 -20
- package/dist/VerifyEmailPage-D-FRj5TU.cjs +3213 -0
- package/dist/VerifyEmailPage-DF2ilhum.cjs +3210 -0
- package/dist/{VerifyEmailPage-CYXtbKi3.cjs → VerifyEmailPage-DMBh4NM9.cjs} +1 -1
- package/dist/{VerifyEmailPage-CgMxRb4z.js → VerifyEmailPage-DTtFfC-J.js} +3 -3
- package/dist/{VerifyEmailPage-CFLMls1p.cjs → VerifyEmailPage-Dt7zgA4w.cjs} +4 -4
- package/dist/VerifyEmailPage-EhudUdqF.js +3211 -0
- package/dist/{VerifyEmailPage-C5TNQTBa.js → VerifyEmailPage-X14vhdyl.js} +148 -75
- package/dist/VerifyEmailPage-hdB8JQGv.cjs +3213 -0
- package/dist/{VerifyEmailPage-B4peJjAT.cjs → VerifyEmailPage-u_Dn7t1U.cjs} +148 -75
- package/dist/VerifyEmailPage-vYHbYK3q.js +3214 -0
- package/dist/{XerticaProvider-CBGc4EMA.cjs → XerticaProvider-AChwphCO.cjs} +4 -4
- package/dist/{XerticaProvider-BIrqfZ-i.cjs → XerticaProvider-AbWlr7Af.cjs} +8 -11
- package/dist/{XerticaProvider-D-yNhF94.cjs → XerticaProvider-B8CaV7xu.cjs} +1 -1
- package/dist/{XerticaProvider-DDuiIcKo.js → XerticaProvider-BErr83Bg.js} +14 -11
- package/dist/{XerticaProvider-CEoWMTxu.js → XerticaProvider-BITjgC5p.js} +2 -2
- package/dist/{XerticaProvider-CllrbMEJ.cjs → XerticaProvider-By8q3Roe.cjs} +2 -2
- package/dist/{XerticaProvider-C1DKnvLh.js → XerticaProvider-CUYJZc32.js} +4 -4
- package/dist/{XerticaProvider-ET0ihewn.cjs → XerticaProvider-CW9hpCdF.cjs} +2 -2
- package/dist/{XerticaProvider-Dt5HEzbQ.js → XerticaProvider-CWgby5mY.js} +10 -10
- package/dist/XerticaProvider-CWs6EwNa.js +49 -0
- package/dist/XerticaProvider-CjQAQPcn.cjs +48 -0
- package/dist/XerticaProvider-CwOkHxiT.cjs +44 -0
- package/dist/XerticaProvider-D5lLumH-.js +49 -0
- package/dist/{XerticaProvider-DYq4JWtg.js → XerticaProvider-DQtvJU7m.js} +1 -1
- package/dist/XerticaProvider-qQUDop71.cjs +48 -0
- package/dist/{XerticaProvider-B7EVH-NF.js → XerticaProvider-siSt9uG2.js} +2 -2
- package/dist/{XerticaXLogo-Zw2B276b.cjs → XerticaXLogo-8TTzBjHw.cjs} +1 -1
- package/dist/{XerticaXLogo-B7xQ5dhi.js → XerticaXLogo-BWaag64t.js} +1 -1
- package/dist/{XerticaXLogo-DZbo4vOE.js → XerticaXLogo-BX3ueACh.js} +5 -2
- package/dist/XerticaXLogo-CFuIlYFH.js +252 -0
- package/dist/XerticaXLogo-CU-U-GP4.cjs +251 -0
- package/dist/XerticaXLogo-ChryA6xj.js +252 -0
- package/dist/{XerticaXLogo-CQUUjXoH.cjs → XerticaXLogo-CziKMQil.cjs} +8 -8
- package/dist/XerticaXLogo-DHz5SugF.js +252 -0
- package/dist/XerticaXLogo-DTee_y8X.cjs +251 -0
- package/dist/{XerticaXLogo-Cmsp-Eey.js → XerticaXLogo-DfUvz-lD.js} +9 -9
- package/dist/XerticaXLogo-kslQ8Tk_.cjs +251 -0
- package/dist/{XerticaXLogo-bvZSgwGF.cjs → XerticaXLogo-qBPhwK3g.cjs} +5 -2
- package/dist/{alert-dialog-s-vmNkJ_.js → alert-dialog-iDe5VE5o.js} +3 -3
- package/dist/{alert-dialog-DSKByiKZ.cjs → alert-dialog-yckpaOpy.cjs} +3 -3
- package/dist/assistant.cjs.js +1 -1
- package/dist/assistant.es.js +1 -1
- package/dist/brand.cjs.js +2 -2
- package/dist/brand.es.js +2 -2
- package/dist/cli.js +90 -37
- package/dist/components/brand/theme-toggle/ThemeToggle.d.ts +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/{google-maps-loader-Y-QkD-Li.cjs → google-maps-loader-BqsYL48U.cjs} +0 -5
- package/dist/{google-maps-loader-CTYySAun.js → google-maps-loader-t2IlYBzw.js} +0 -4
- package/dist/index-CkTUgOwX.js +8 -0
- package/dist/{index-COtD8bRW.cjs → index-D3RLKRAs.cjs} +1 -1
- package/dist/index.cjs.js +5 -5
- package/dist/index.es.js +5 -5
- package/dist/index.umd.js +454 -1027
- 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/{sidebar-DAaY8bRU.cjs → sidebar-B3EYhli0.cjs} +33 -24
- package/dist/{sidebar-B6SlKZYN.js → sidebar-B4ZWaMrE.js} +1 -1
- package/dist/{sidebar-DQj1z3jG.cjs → sidebar-B9NR0lCe.cjs} +269 -227
- package/dist/{sidebar-nzPoVHBQ.cjs → sidebar-BS1p2V7t.cjs} +1 -1
- package/dist/sidebar-BvF5I2Ue.cjs +800 -0
- package/dist/{sidebar-q7P2Godd.cjs → sidebar-C5B_LHek.cjs} +1 -1
- package/dist/{sidebar-CrQDDdcz.js → sidebar-CA6_ek3f.js} +33 -24
- package/dist/{sidebar-BxGXsDAd.cjs → sidebar-CVUGHOS_.cjs} +8 -16
- package/dist/{sidebar-BViy8Eeu.js → sidebar-CmvwjnVb.js} +9 -17
- package/dist/sidebar-CplprZpM.js +801 -0
- package/dist/{sidebar-BbVIQvlP.js → sidebar-Dz7bd3zP.js} +1 -1
- package/dist/sidebar-KIS0C2JH.js +801 -0
- package/dist/sidebar-OTO_up7Z.js +801 -0
- package/dist/sidebar-zowjejT2.cjs +800 -0
- package/dist/{use-audio-player-nv8ZSGa1.js → use-audio-player-Bkh23vQ3.js} +3 -7
- package/dist/{use-audio-player-NKsWyjWu.cjs → use-audio-player-Dn1NR9xN.cjs} +3 -7
- package/dist/{xertica-assistant-dyP7KHM5.cjs → xertica-assistant-B1IaHXnB.cjs} +388 -529
- package/dist/{xertica-assistant-DCsnQyi5.js → xertica-assistant-B1NaSFFj.js} +46 -29
- package/dist/{xertica-assistant-ciJaWqm1.js → xertica-assistant-BMqdyRVi.js} +10 -28
- package/dist/{xertica-assistant-V_IdW4WF.cjs → xertica-assistant-Bj3vBCq_.cjs} +9 -27
- package/dist/{xertica-assistant-CrgTb6Hs.cjs → xertica-assistant-CIaUlbIt.cjs} +47 -22
- package/dist/{xertica-assistant-yX1CFBBo.js → xertica-assistant-DPsESB6t.js} +390 -531
- package/dist/{CodeBlock-BgfYL_rD.cjs → xertica-assistant-Qp3ydksa.cjs} +51 -263
- package/dist/{CodeBlock-BeSt1h5P.js → xertica-assistant-gnCJdcZY.js} +7 -219
- package/dist/xertica-ui.css +2 -2
- package/docs/architecture-improvements.md +456 -456
- package/docs/architecture.md +312 -306
- package/docs/components/assistant.md +428 -428
- package/docs/components/branding.md +252 -252
- package/docs/components/card-patterns.md +447 -445
- package/docs/components/error-boundary.md +32 -22
- package/docs/components/hooks.md +432 -430
- package/docs/components/language-selector.md +176 -172
- package/docs/components/pages.md +20 -6
- package/docs/doc-audit.md +244 -243
- package/docs/getting-started.md +616 -603
- package/docs/guidelines.md +330 -328
- package/docs/i18n.md +480 -476
- package/docs/installation.md +7 -6
- package/docs/llms.md +295 -295
- package/docs/state-management.md +289 -289
- package/guidelines/Guidelines.md +409 -406
- package/llms-compact.txt +1 -1
- package/llms.txt +1 -1
- package/package.json +219 -219
- package/styles/xertica/base.css +6 -0
- package/templates/.prettierignore +4 -4
- package/templates/.prettierrc +10 -10
- package/templates/CLAUDE.md +180 -165
- package/templates/guidelines/Guidelines.md +577 -553
- package/templates/package.json +69 -69
- package/templates/src/app/App.tsx +46 -46
- package/templates/src/app/components/AuthGuard.tsx +57 -8
- package/templates/src/features/assistant/data/mock.ts +75 -75
- package/templates/src/features/assistant/hooks/useAssistantConfig.ts +20 -20
- package/templates/src/features/assistant/index.ts +5 -5
- package/templates/src/features/auth/ui/AuthPageShell.tsx +1 -1
- package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -72
- package/templates/src/features/auth/ui/LoginContent.tsx +92 -92
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +183 -179
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +78 -78
- package/templates/src/features/auth/ui/VerifyEmailContent.tsx +80 -84
- package/templates/src/features/home/data/mock.ts +6 -0
- package/templates/src/features/home/hooks/useFeatureCards.ts +20 -20
- package/templates/src/features/home/index.ts +11 -11
- package/templates/src/features/home/ui/HomeContent.tsx +117 -119
- package/templates/src/features/template/ui/CrudTemplate.tsx +112 -115
- package/templates/src/features/template/ui/DashboardTemplate.tsx +110 -110
- package/templates/src/features/template/ui/FormTemplate.tsx +117 -117
- package/templates/src/features/template/ui/LoginTemplate.tsx +59 -59
- package/templates/src/features/template/ui/TemplateContent.tsx +1322 -1314
- package/templates/src/i18n.ts +124 -124
- package/templates/src/locales/en/common.json +21 -21
- package/templates/src/locales/en/components/activityCard.json +10 -10
- package/templates/src/locales/en/components/assistant.json +119 -119
- package/templates/src/locales/en/components/media.json +29 -29
- package/templates/src/locales/en/components/notificationCard.json +5 -5
- package/templates/src/locales/en/components/profileCard.json +8 -8
- package/templates/src/locales/en/components/projectCard.json +10 -10
- package/templates/src/locales/en/components/sidebar.json +14 -14
- package/templates/src/locales/en/components/stats.json +8 -8
- package/templates/src/locales/en/components/team.json +14 -14
- package/templates/src/locales/en/errors.json +9 -9
- package/templates/src/locales/en/languageSelector.json +7 -7
- package/templates/src/locales/en/nav.json +6 -6
- package/templates/src/locales/en/pages/crudTemplate.json +25 -25
- package/templates/src/locales/en/pages/dashboardTemplate.json +20 -20
- package/templates/src/locales/en/pages/forgotPassword.json +10 -10
- package/templates/src/locales/en/pages/formTemplate.json +16 -16
- package/templates/src/locales/en/pages/home.json +7 -7
- package/templates/src/locales/en/pages/login.json +15 -15
- package/templates/src/locales/en/pages/loginTemplate.json +9 -9
- package/templates/src/locales/en/pages/resetPassword.json +18 -18
- package/templates/src/locales/en/pages/templates.json +317 -317
- package/templates/src/locales/en/pages/verifyEmail.json +12 -12
- package/templates/src/locales/en/themeToggle.json +6 -6
- package/templates/src/locales/es/common.json +21 -21
- package/templates/src/locales/es/components/activityCard.json +10 -10
- package/templates/src/locales/es/components/assistant.json +119 -119
- package/templates/src/locales/es/components/media.json +29 -29
- package/templates/src/locales/es/components/notificationCard.json +5 -5
- package/templates/src/locales/es/components/profileCard.json +8 -8
- package/templates/src/locales/es/components/projectCard.json +10 -10
- package/templates/src/locales/es/components/sidebar.json +14 -14
- package/templates/src/locales/es/components/stats.json +8 -8
- package/templates/src/locales/es/components/team.json +14 -14
- package/templates/src/locales/es/errors.json +9 -9
- package/templates/src/locales/es/languageSelector.json +7 -7
- package/templates/src/locales/es/nav.json +6 -6
- package/templates/src/locales/es/pages/crudTemplate.json +25 -25
- package/templates/src/locales/es/pages/dashboardTemplate.json +20 -20
- package/templates/src/locales/es/pages/forgotPassword.json +10 -10
- package/templates/src/locales/es/pages/formTemplate.json +16 -16
- package/templates/src/locales/es/pages/home.json +7 -7
- package/templates/src/locales/es/pages/login.json +15 -15
- package/templates/src/locales/es/pages/loginTemplate.json +9 -9
- package/templates/src/locales/es/pages/resetPassword.json +18 -18
- package/templates/src/locales/es/pages/templates.json +317 -317
- package/templates/src/locales/es/pages/verifyEmail.json +12 -12
- package/templates/src/locales/es/themeToggle.json +6 -6
- package/templates/src/locales/pt-BR/common.json +21 -21
- package/templates/src/locales/pt-BR/components/activityCard.json +10 -10
- package/templates/src/locales/pt-BR/components/assistant.json +119 -119
- package/templates/src/locales/pt-BR/components/media.json +29 -29
- package/templates/src/locales/pt-BR/components/notificationCard.json +5 -5
- package/templates/src/locales/pt-BR/components/profileCard.json +8 -8
- package/templates/src/locales/pt-BR/components/projectCard.json +10 -10
- package/templates/src/locales/pt-BR/components/sidebar.json +14 -14
- package/templates/src/locales/pt-BR/components/stats.json +8 -8
- package/templates/src/locales/pt-BR/components/team.json +14 -14
- package/templates/src/locales/pt-BR/errors.json +9 -9
- package/templates/src/locales/pt-BR/languageSelector.json +7 -7
- package/templates/src/locales/pt-BR/nav.json +6 -6
- package/templates/src/locales/pt-BR/pages/crudTemplate.json +25 -25
- package/templates/src/locales/pt-BR/pages/dashboardTemplate.json +20 -20
- package/templates/src/locales/pt-BR/pages/forgotPassword.json +10 -10
- package/templates/src/locales/pt-BR/pages/formTemplate.json +16 -16
- package/templates/src/locales/pt-BR/pages/home.json +7 -7
- package/templates/src/locales/pt-BR/pages/login.json +15 -15
- package/templates/src/locales/pt-BR/pages/loginTemplate.json +9 -9
- package/templates/src/locales/pt-BR/pages/resetPassword.json +18 -18
- package/templates/src/locales/pt-BR/pages/templates.json +317 -317
- package/templates/src/locales/pt-BR/pages/verifyEmail.json +12 -12
- package/templates/src/locales/pt-BR/themeToggle.json +6 -6
- package/templates/src/pages/AssistantPage.tsx +470 -464
- package/templates/src/pages/HomePage.tsx +53 -49
- package/templates/src/shared/error-boundary.tsx +1 -5
- package/templates/src/shared/error-fallbacks.tsx +4 -8
- package/templates/vite.config.js +20 -20
- package/templates/vite.config.ts +55 -52
- package/dist/AssistantChart-CxGjH7Qk.js +0 -3477
- package/dist/AssistantChart-DIpshm3i.js +0 -4784
- package/dist/AssistantChart-D_PTeu8P.cjs +0 -3503
- package/dist/AssistantChart-zjsy2GaZ.cjs +0 -4810
- package/dist/AudioPlayer-B1lt5cPl.cjs +0 -989
- package/dist/AudioPlayer-BZ7bibzU.cjs +0 -982
- package/dist/AudioPlayer-BpRPS4-1.cjs +0 -1277
- package/dist/AudioPlayer-C12BjQBV.cjs +0 -997
- package/dist/AudioPlayer-CFeV8t-5.cjs +0 -936
- package/dist/AudioPlayer-Coly3q5R.js +0 -1278
- package/dist/AudioPlayer-CySJIyvL.js +0 -937
- package/dist/AudioPlayer-DMcG_c7L.js +0 -990
- package/dist/AudioPlayer-DcFKRJE_.js +0 -998
- package/dist/AudioPlayer-e8LfNoqO.js +0 -983
- package/dist/BrandColorsContext-565dDHd5.js +0 -660
- package/dist/BrandColorsContext-BcJbtkqn.cjs +0 -659
- package/dist/CodeBlock-7TTgmdGG.cjs +0 -2094
- package/dist/CodeBlock-BlcqlA9M.cjs +0 -2094
- package/dist/CodeBlock-Bnmeu5ez.cjs +0 -2094
- package/dist/CodeBlock-BtfPlbAI.js +0 -2078
- package/dist/CodeBlock-CIySIuYr.js +0 -2078
- package/dist/CodeBlock-CuPtUM-7.cjs +0 -2094
- package/dist/CodeBlock-D6ffWXgc.js +0 -2078
- package/dist/CodeBlock-D8dcwbit.cjs +0 -2094
- package/dist/CodeBlock-DMZrFnlw.cjs +0 -2094
- package/dist/CodeBlock-DlBehYN8.js +0 -2078
- package/dist/CodeBlock-DnYNI8rQ.js +0 -2078
- package/dist/CodeBlock-DvKWbSnE.cjs +0 -2094
- package/dist/CodeBlock-DwMCfkFY.js +0 -2078
- package/dist/CodeBlock-Dy6CNYyj.js +0 -2078
- package/dist/CodeBlock-U1pPOQI7.cjs +0 -2094
- package/dist/CodeBlock-f_GpNhEB.js +0 -2078
- package/dist/CodeBlock-oB6u8nI1.js +0 -2078
- package/dist/CodeBlock-tZC31B73.cjs +0 -2094
- package/dist/FeatureCard-CxC-7C-C.cjs +0 -300
- package/dist/FeatureCard-DbHWCb4E.js +0 -301
- package/dist/ImageWithFallback-CGtidP6B.cjs +0 -4542
- package/dist/ImageWithFallback-lsg3pdFg.js +0 -4508
- package/dist/LanguageSelector-B5YfbHra.js +0 -231
- package/dist/LanguageSelector-D6uacAIM.cjs +0 -230
- package/dist/LayoutContext-B45-e9DI.cjs +0 -93
- package/dist/LayoutContext-BAql6ZRY.js +0 -97
- package/dist/LayoutContext-Bav3UMEA.js +0 -94
- package/dist/LayoutContext-BvK-ggDa.cjs +0 -96
- package/dist/ThemeContext-BoH4NLfN.js +0 -734
- package/dist/ThemeContext-r69W20Xg.cjs +0 -733
- package/dist/VerifyEmailPage-COiyNl1y.js +0 -2825
- package/dist/VerifyEmailPage-CqKsR2v8.js +0 -2827
- package/dist/VerifyEmailPage-DjQKRlUS.cjs +0 -2824
- package/dist/VerifyEmailPage-s-1X3LDJ.cjs +0 -2826
- package/dist/XerticaOrbe-KL1RBHzw.cjs +0 -1354
- package/dist/XerticaOrbe-zwS1p2a8.js +0 -1355
- package/dist/XerticaProvider-6btlAlzc.js +0 -17
- package/dist/XerticaProvider-BNoNOxQ5.cjs +0 -16
- package/dist/XerticaProvider-BlY2limY.cjs +0 -38
- package/dist/XerticaProvider-cI9hSs27.cjs +0 -38
- package/dist/XerticaProvider-hSwhNQex.js +0 -39
- package/dist/alert-dialog-BOje--vD.js +0 -847
- package/dist/alert-dialog-BtEuQqrg.cjs +0 -870
- package/dist/breadcrumb-CqJ7bHY5.js +0 -161
- package/dist/breadcrumb-m9Hb2_XN.cjs +0 -177
- package/dist/components/assistant/xertica-assistant/hooks/index.d.ts +0 -6
- package/dist/components/assistant/xertica-assistant/hooks/use-assistant-conversations.d.ts +0 -21
- package/dist/components/assistant/xertica-assistant/hooks/use-assistant-messages.d.ts +0 -49
- package/dist/components/assistant/xertica-assistant/hooks/use-assistant-suggestions.d.ts +0 -16
- package/dist/components/blocks/audio-player/AudioPlayer.d.ts +0 -35
- package/dist/components/blocks/audio-player/index.d.ts +0 -1
- package/dist/components/blocks/document-editor/DocumentEditor.d.ts +0 -26
- package/dist/components/blocks/document-editor/index.d.ts +0 -1
- package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +0 -41
- package/dist/components/blocks/podcast-player/index.d.ts +0 -1
- package/dist/components/ui/chart/parts/chart-dashboard.d.ts +0 -113
- package/dist/components/ui/chart/parts/chart-metric.d.ts +0 -118
- package/dist/components/ui/chart/parts/chart-primitives.d.ts +0 -101
- package/dist/components/ui/chart/parts/chart-shared.d.ts +0 -20
- package/dist/components/ui/chart/parts/chart-utils.d.ts +0 -12
- package/dist/components/ui/chart/parts/index.d.ts +0 -5
- package/dist/dropdown-menu-BDB5CmQs.cjs +0 -247
- package/dist/dropdown-menu-DQidbKBD.js +0 -231
- package/dist/google-maps-loader-BFWp6VPd.js +0 -287
- package/dist/google-maps-loader-BKcdgFbu.cjs +0 -312
- package/dist/google-maps-loader-CumCNXeG.js +0 -312
- package/dist/google-maps-loader-eS3uQ5TA.cjs +0 -287
- package/dist/header-Cgy6vYPk.cjs +0 -731
- package/dist/header-DRlT4jgI.js +0 -715
- package/dist/header-Dux00SI4.cjs +0 -731
- package/dist/header-EkGKXPsD.js +0 -715
- package/dist/header-WfEywpyc.cjs +0 -731
- package/dist/header-tifNQn2U.js +0 -715
- package/dist/index-BhapVLVj.js +0 -8
- package/dist/index-D6fxYEY8.cjs +0 -7
- package/dist/index-DAIp0_HK.js +0 -8
- package/dist/index-DW5tYe26.js +0 -8
- package/dist/index-GA__GvnG.cjs +0 -7
- package/dist/input-2R4loU86.js +0 -127
- package/dist/input-DWANSKGb.cjs +0 -145
- package/dist/progress-DPtzoVV8.js +0 -175
- package/dist/progress-EeaoqqUs.cjs +0 -191
- package/dist/rich-text-editor-0mraWT5y.cjs +0 -2376
- package/dist/rich-text-editor-B-IkcPD0.js +0 -2874
- package/dist/rich-text-editor-B6jMRLzk.cjs +0 -1939
- package/dist/rich-text-editor-B8_oYcIR.js +0 -1730
- package/dist/rich-text-editor-B9UbSXNb.js +0 -1203
- package/dist/rich-text-editor-BYuRBNBU.js +0 -2373
- package/dist/rich-text-editor-Bb9pySTs.cjs +0 -2374
- package/dist/rich-text-editor-BcL6L3cm.cjs +0 -2374
- package/dist/rich-text-editor-BoVZYtTs.cjs +0 -2391
- package/dist/rich-text-editor-Bp3zQqMC.js +0 -2954
- package/dist/rich-text-editor-CMgSN_w2.js +0 -1189
- package/dist/rich-text-editor-CPV1lEPH.cjs +0 -1748
- package/dist/rich-text-editor-CeucBdIv.cjs +0 -2971
- package/dist/rich-text-editor-CoKqbCtu.cjs +0 -1799
- package/dist/rich-text-editor-Cw56T_mB.js +0 -2356
- package/dist/rich-text-editor-Cyt8qs2b.js +0 -1921
- package/dist/rich-text-editor-D6H84OcX.cjs +0 -1220
- package/dist/rich-text-editor-D76gD-QI.js +0 -2328
- package/dist/rich-text-editor-DKkokOnA.js +0 -1781
- package/dist/rich-text-editor-DNsdpN64.cjs +0 -2359
- package/dist/rich-text-editor-DfG8bCyY.js +0 -2358
- package/dist/rich-text-editor-Dxjw31Z4.js +0 -2341
- package/dist/rich-text-editor-DzP0Epmb.js +0 -2356
- package/dist/rich-text-editor-bRkNoeZY.cjs +0 -2891
- package/dist/rich-text-editor-lyYE2ZG5.cjs +0 -1207
- package/dist/rich-text-editor-skplNlBM.cjs +0 -2345
- package/dist/select-Bkbr0f-Z.cjs +0 -162
- package/dist/select-CvIVdX2n.js +0 -145
- package/dist/sidebar-CK_0ZQHj.cjs +0 -803
- package/dist/sidebar-CUuOvYhK.js +0 -787
- package/dist/sidebar-Djn5syhi.cjs +0 -786
- package/dist/sidebar-LluMXfam.js +0 -759
- package/dist/sidebar-_rT7rBMk.js +0 -787
- package/dist/slider-Bc5Hd0y1.js +0 -56
- package/dist/slider-N7hFFj6X.cjs +0 -73
- package/dist/tooltip-Ded96neP.cjs +0 -137
- package/dist/tooltip-HDOoD2-0.js +0 -120
- package/dist/use-audio-player-B31J-aqh.cjs +0 -187
- package/dist/use-audio-player-BkmEmj8Q.js +0 -185
- package/dist/use-audio-player-CLFTWFW1.cjs +0 -184
- package/dist/use-audio-player-CLLn00I6.js +0 -188
- package/dist/use-file-upload-BcjEo2S5.js +0 -404
- package/dist/use-file-upload-CRJR68Tj.cjs +0 -403
- package/dist/use-mobile-B0hNy_Y6.cjs +0 -4303
- package/dist/use-mobile-BXuYROXM.js +0 -4202
- package/dist/use-mobile-Bbd51ASU.cjs +0 -4392
- package/dist/use-mobile-Bk6CX-TC.js +0 -4359
- package/dist/use-mobile-BvYdisLP.js +0 -4202
- package/dist/use-mobile-BzuxjzNX.cjs +0 -4392
- package/dist/use-mobile-CG2-SdXV.cjs +0 -4235
- package/dist/use-mobile-CKb5pqTs.js +0 -4269
- package/dist/use-mobile-CYuAuGDl.js +0 -4202
- package/dist/use-mobile-CaENcqm-.js +0 -4508
- package/dist/use-mobile-CbrYgJGJ.js +0 -4203
- package/dist/use-mobile-Cd4xPrKq.cjs +0 -46
- package/dist/use-mobile-DMOvImGQ.cjs +0 -4542
- package/dist/use-mobile-DRB3BQgD.cjs +0 -4235
- package/dist/use-mobile-DZvv7QMR.js +0 -4359
- package/dist/use-mobile-DdI_TXam.cjs +0 -4235
- package/dist/use-mobile-DlceKf8a.js +0 -4359
- package/dist/use-mobile-DsOnow1o.cjs +0 -4236
- package/dist/use-mobile-Kcj6jSnK.cjs +0 -4392
- package/dist/use-mobile-bnKcua_i.js +0 -4202
- package/dist/use-mobile-j4w2Jrf1.js +0 -30
- package/dist/use-mobile-ncXBeE2z.cjs +0 -4235
- package/dist/use-rich-text-editor-DjiddBGv.js +0 -282
- package/dist/use-rich-text-editor-lpeswbCs.cjs +0 -281
- package/dist/xertica-assistant-BdiZag0h.js +0 -2187
- package/dist/xertica-assistant-DUBpmEgo.cjs +0 -2186
- package/dist/{rich-text-editor-DgF8s7xW.js → rich-text-editor-BmsjY03B.js} +26 -26
- package/dist/{rich-text-editor-mWoaSCE4.cjs → rich-text-editor-GS2kpTAK.cjs} +26 -26
|
@@ -1,594 +1,594 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
BarChart2,
|
|
5
|
-
Bell,
|
|
6
|
-
Briefcase,
|
|
7
|
-
Download,
|
|
8
|
-
FileText,
|
|
9
|
-
Globe,
|
|
10
|
-
LayoutDashboard,
|
|
11
|
-
Lock,
|
|
12
|
-
MoreHorizontal,
|
|
13
|
-
Package,
|
|
14
|
-
Plus,
|
|
15
|
-
RefreshCw,
|
|
16
|
-
Share2,
|
|
17
|
-
Shield,
|
|
18
|
-
Sparkles,
|
|
19
|
-
Users,
|
|
20
|
-
Zap,
|
|
21
|
-
} from 'lucide-react';
|
|
22
|
-
import { Button } from '../../ui/button';
|
|
23
|
-
import { ChartCard, ChartConfig, DashboardBarChart, DashboardLineChart } from '../../ui/chart';
|
|
24
|
-
import { ActivityCard } from './ActivityCard';
|
|
25
|
-
import { ActivityCardSkeleton } from './ActivityCardSkeleton';
|
|
26
|
-
import { FeatureCard } from './FeatureCard';
|
|
27
|
-
import { FeatureCardSkeleton } from './FeatureCardSkeleton';
|
|
28
|
-
import { NotificationCard } from './NotificationCard';
|
|
29
|
-
import { NotificationCardSkeleton } from './NotificationCardSkeleton';
|
|
30
|
-
import { ProfileCard } from './ProfileCard';
|
|
31
|
-
import { ProfileCardSkeleton } from './ProfileCardSkeleton';
|
|
32
|
-
import { ProjectCard } from './ProjectCard';
|
|
33
|
-
import { ProjectCardSkeleton } from './ProjectCardSkeleton';
|
|
34
|
-
import { QuickActionCard } from './QuickActionCard';
|
|
35
|
-
import { QuickActionCardSkeleton } from './QuickActionCardSkeleton';
|
|
36
|
-
|
|
37
|
-
const meta: Meta = {
|
|
38
|
-
title: 'Blocks/Card Patterns',
|
|
39
|
-
decorators: [
|
|
40
|
-
Story => (
|
|
41
|
-
<div className="bg-muted rounded-xl p-8 w-full flex items-start justify-center">
|
|
42
|
-
<Story />
|
|
43
|
-
</div>
|
|
44
|
-
),
|
|
45
|
-
],
|
|
46
|
-
};
|
|
47
|
-
export default meta;
|
|
48
|
-
|
|
49
|
-
// ─── ActivityCard ─────────────────────────────────────────────────────────────
|
|
50
|
-
|
|
51
|
-
const ACTIVITY_ITEMS = [
|
|
52
|
-
{
|
|
53
|
-
id: '1',
|
|
54
|
-
user: { name: 'Ana Souza', initials: 'AS' },
|
|
55
|
-
action: 'criou o projeto',
|
|
56
|
-
target: 'Xertica Dashboard',
|
|
57
|
-
time: 'há 2 min',
|
|
58
|
-
type: 'create' as const,
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
id: '2',
|
|
62
|
-
user: { name: 'Bruno Lima', initials: 'BL' },
|
|
63
|
-
action: 'atualizou',
|
|
64
|
-
target: 'componente Button',
|
|
65
|
-
time: 'há 8 min',
|
|
66
|
-
type: 'update' as const,
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
id: '3',
|
|
70
|
-
user: { name: 'Carla Rocha', initials: 'CR' },
|
|
71
|
-
action: 'comentou em',
|
|
72
|
-
target: 'PR #42',
|
|
73
|
-
time: 'há 15 min',
|
|
74
|
-
type: 'comment' as const,
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
id: '4',
|
|
78
|
-
user: { name: 'Diego Ferraz', initials: 'DF' },
|
|
79
|
-
action: 'fez deploy de',
|
|
80
|
-
target: 'v2.1.0',
|
|
81
|
-
time: 'há 1h',
|
|
82
|
-
type: 'deploy' as const,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
id: '5',
|
|
86
|
-
user: { name: 'Elena Moura', initials: 'EM' },
|
|
87
|
-
action: 'removeu',
|
|
88
|
-
target: 'badge legado',
|
|
89
|
-
time: 'há 2h',
|
|
90
|
-
type: 'delete' as const,
|
|
91
|
-
},
|
|
92
|
-
];
|
|
93
|
-
|
|
94
|
-
export const Activity: StoryObj = {
|
|
95
|
-
render: () => (
|
|
96
|
-
<ActivityCard
|
|
97
|
-
items={ACTIVITY_ITEMS}
|
|
98
|
-
action={
|
|
99
|
-
<Button variant="ghost" size="sm">
|
|
100
|
-
<MoreHorizontal className="size-4" />
|
|
101
|
-
</Button>
|
|
102
|
-
}
|
|
103
|
-
className="max-w-md"
|
|
104
|
-
/>
|
|
105
|
-
),
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
// ─── ProfileCard ──────────────────────────────────────────────────────────────
|
|
109
|
-
|
|
110
|
-
export const Profile: StoryObj = {
|
|
111
|
-
render: () => (
|
|
112
|
-
<ProfileCard
|
|
113
|
-
name="Ana Souza"
|
|
114
|
-
role="Senior Frontend Engineer"
|
|
115
|
-
department="Design System"
|
|
116
|
-
initials="AS"
|
|
117
|
-
status="online"
|
|
118
|
-
stats={[
|
|
119
|
-
{ label: 'Projetos', value: 12 },
|
|
120
|
-
{ label: 'Commits', value: 348 },
|
|
121
|
-
{ label: 'Reviews', value: 57 },
|
|
122
|
-
]}
|
|
123
|
-
primaryAction={{ label: 'Ver Perfil' }}
|
|
124
|
-
secondaryAction={{ label: 'Mensagem' }}
|
|
125
|
-
className="w-64"
|
|
126
|
-
/>
|
|
127
|
-
),
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// ─── ProjectCard ──────────────────────────────────────────────────────────────
|
|
131
|
-
|
|
132
|
-
const MEMBERS = [
|
|
133
|
-
{ name: 'Ana', initials: 'AS' },
|
|
134
|
-
{ name: 'Bruno', initials: 'BL' },
|
|
135
|
-
{ name: 'Carla', initials: 'CR' },
|
|
136
|
-
{ name: 'Diego', initials: 'DF' },
|
|
137
|
-
{ name: 'Elena', initials: 'EM' },
|
|
138
|
-
];
|
|
139
|
-
|
|
140
|
-
export const Project: StoryObj = {
|
|
141
|
-
render: () => (
|
|
142
|
-
<div className="grid gap-4 md:grid-cols-2 w-full max-w-2xl">
|
|
143
|
-
<ProjectCard
|
|
144
|
-
title="Xertica Dashboard v3"
|
|
145
|
-
description="Redesign completo do painel com novos componentes."
|
|
146
|
-
status="active"
|
|
147
|
-
progress={68}
|
|
148
|
-
dueDate="Vence em 12 dias"
|
|
149
|
-
members={MEMBERS}
|
|
150
|
-
/>
|
|
151
|
-
<ProjectCard
|
|
152
|
-
title="Design System Tokens"
|
|
153
|
-
description="Migração dos tokens de design para CSS variables."
|
|
154
|
-
status="review"
|
|
155
|
-
progress={91}
|
|
156
|
-
dueDate="Vence amanhã"
|
|
157
|
-
members={MEMBERS.slice(0, 2)}
|
|
158
|
-
/>
|
|
159
|
-
<ProjectCard
|
|
160
|
-
title="App Mobile"
|
|
161
|
-
description="Versão móvel do Xertica com React Native."
|
|
162
|
-
status="at-risk"
|
|
163
|
-
progress={34}
|
|
164
|
-
dueDate="Atrasado 3 dias"
|
|
165
|
-
members={MEMBERS.slice(0, 3)}
|
|
166
|
-
/>
|
|
167
|
-
<ProjectCard
|
|
168
|
-
title="Onboarding Flow"
|
|
169
|
-
description="Fluxo de cadastro e primeiros passos."
|
|
170
|
-
status="done"
|
|
171
|
-
progress={100}
|
|
172
|
-
dueDate="Entregue"
|
|
173
|
-
members={MEMBERS.slice(0, 4)}
|
|
174
|
-
/>
|
|
175
|
-
</div>
|
|
176
|
-
),
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
// ─── QuickActionCard ──────────────────────────────────────────────────────────
|
|
180
|
-
|
|
181
|
-
export const QuickActions: StoryObj = {
|
|
182
|
-
render: () => (
|
|
183
|
-
<div className="grid gap-4 grid-cols-2 md:grid-cols-3 max-w-2xl w-full">
|
|
184
|
-
<QuickActionCard
|
|
185
|
-
title="Novo Relatório"
|
|
186
|
-
description="Gere relatórios personalizados de métricas."
|
|
187
|
-
icon={<FileText className="size-5" />}
|
|
188
|
-
actionLabel="Criar Relatório"
|
|
189
|
-
/>
|
|
190
|
-
<QuickActionCard
|
|
191
|
-
title="Convidar Membro"
|
|
192
|
-
description="Adicione novos colaboradores ao workspace."
|
|
193
|
-
icon={<Users className="size-5" />}
|
|
194
|
-
actionLabel="Convidar"
|
|
195
|
-
actionVariant="outline"
|
|
196
|
-
badge="Novo"
|
|
197
|
-
badgeVariant="success"
|
|
198
|
-
/>
|
|
199
|
-
<QuickActionCard
|
|
200
|
-
title="Exportar Dados"
|
|
201
|
-
description="Exporte suas métricas em CSV ou JSON."
|
|
202
|
-
icon={<Download className="size-5" />}
|
|
203
|
-
actionLabel="Exportar"
|
|
204
|
-
actionVariant="secondary"
|
|
205
|
-
/>
|
|
206
|
-
<QuickActionCard
|
|
207
|
-
title="Automação"
|
|
208
|
-
description="Configure gatilhos e ações automáticas."
|
|
209
|
-
icon={<Zap className="size-5" />}
|
|
210
|
-
actionLabel="Configurar"
|
|
211
|
-
badge="Pro"
|
|
212
|
-
badgeVariant="warning"
|
|
213
|
-
/>
|
|
214
|
-
<QuickActionCard
|
|
215
|
-
title="Compartilhar"
|
|
216
|
-
description="Compartilhe o dashboard com sua equipe."
|
|
217
|
-
icon={<Share2 className="size-5" />}
|
|
218
|
-
actionLabel="Compartilhar"
|
|
219
|
-
actionVariant="outline"
|
|
220
|
-
/>
|
|
221
|
-
<QuickActionCard
|
|
222
|
-
title="Novo Projeto"
|
|
223
|
-
description="Inicie um projeto a partir de um template."
|
|
224
|
-
icon={<Plus className="size-5" />}
|
|
225
|
-
actionLabel="Criar Projeto"
|
|
226
|
-
badge="Beta"
|
|
227
|
-
badgeVariant="info"
|
|
228
|
-
/>
|
|
229
|
-
</div>
|
|
230
|
-
),
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
// ─── NotificationCard ─────────────────────────────────────────────────────────
|
|
234
|
-
|
|
235
|
-
const NOTIFICATIONS = [
|
|
236
|
-
{
|
|
237
|
-
id: '1',
|
|
238
|
-
title: 'Deploy concluído',
|
|
239
|
-
message: 'v2.1.0 foi publicado com sucesso em produção.',
|
|
240
|
-
time: 'há 2 min',
|
|
241
|
-
read: false,
|
|
242
|
-
type: 'success' as const,
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
id: '2',
|
|
246
|
-
title: 'Revisão solicitada',
|
|
247
|
-
message: 'Ana pediu revisão no PR #42: Novos tokens de cor.',
|
|
248
|
-
time: 'há 10 min',
|
|
249
|
-
read: false,
|
|
250
|
-
type: 'info' as const,
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
id: '3',
|
|
254
|
-
title: 'Erro em produção',
|
|
255
|
-
message: 'Serviço de auth com falha intermitente — 503.',
|
|
256
|
-
time: 'há 1h',
|
|
257
|
-
read: false,
|
|
258
|
-
type: 'error' as const,
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
id: '4',
|
|
262
|
-
title: 'Licença expirando',
|
|
263
|
-
message: 'Sua licença Pro expira em 7 dias. Renove para continuar.',
|
|
264
|
-
time: 'há 3h',
|
|
265
|
-
read: true,
|
|
266
|
-
type: 'warning' as const,
|
|
267
|
-
},
|
|
268
|
-
];
|
|
269
|
-
|
|
270
|
-
export const Notifications: StoryObj = {
|
|
271
|
-
render: () => (
|
|
272
|
-
<NotificationCard
|
|
273
|
-
items={NOTIFICATIONS}
|
|
274
|
-
onMarkAllRead={() => {}}
|
|
275
|
-
onViewAll={() => {}}
|
|
276
|
-
className="max-w-sm"
|
|
277
|
-
/>
|
|
278
|
-
),
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
// ─── ChartCard ────────────────────────────────────────────────────────────────
|
|
282
|
-
|
|
283
|
-
const REVENUE_DATA = [
|
|
284
|
-
{ month: 'Jan', receita: 18000, despesa: 12000 },
|
|
285
|
-
{ month: 'Fev', receita: 22000, despesa: 14000 },
|
|
286
|
-
{ month: 'Mar', receita: 19500, despesa: 13500 },
|
|
287
|
-
{ month: 'Abr', receita: 27000, despesa: 15000 },
|
|
288
|
-
{ month: 'Mai', receita: 31000, despesa: 17500 },
|
|
289
|
-
{ month: 'Jun', receita: 28500, despesa: 16000 },
|
|
290
|
-
];
|
|
291
|
-
|
|
292
|
-
const REVENUE_CONFIG: ChartConfig = {
|
|
293
|
-
receita: { label: 'Receita', color: 'var(--chart-1)' },
|
|
294
|
-
despesa: { label: 'Despesa', color: 'var(--chart-5)' },
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
const CHART_SERIES = [
|
|
298
|
-
{ key: 'receita', label: 'Receita' },
|
|
299
|
-
{ key: 'despesa', label: 'Despesa' },
|
|
300
|
-
];
|
|
301
|
-
|
|
302
|
-
export const Chart: StoryObj = {
|
|
303
|
-
render: () => (
|
|
304
|
-
<ChartCard
|
|
305
|
-
title="Receita vs Despesa"
|
|
306
|
-
description="Últimos 6 meses"
|
|
307
|
-
action={
|
|
308
|
-
<Button variant="ghost" size="sm">
|
|
309
|
-
<RefreshCw className="size-4" />
|
|
310
|
-
</Button>
|
|
311
|
-
}
|
|
312
|
-
footer="Dados atualizados em tempo real via API financeira."
|
|
313
|
-
className="max-w-xl w-full"
|
|
314
|
-
contentClassName="h-[260px]"
|
|
315
|
-
>
|
|
316
|
-
<DashboardBarChart
|
|
317
|
-
data={REVENUE_DATA}
|
|
318
|
-
config={REVENUE_CONFIG}
|
|
319
|
-
series={CHART_SERIES}
|
|
320
|
-
indexKey="month"
|
|
321
|
-
barSize="md"
|
|
322
|
-
className="h-full w-full"
|
|
323
|
-
/>
|
|
324
|
-
</ChartCard>
|
|
325
|
-
),
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
// ─── Dashboard completo ───────────────────────────────────────────────────────
|
|
329
|
-
|
|
330
|
-
const LINE_DATA = [
|
|
331
|
-
{ dia: 'Seg', usuarios: 240 },
|
|
332
|
-
{ dia: 'Ter', usuarios: 380 },
|
|
333
|
-
{ dia: 'Qua', usuarios: 310 },
|
|
334
|
-
{ dia: 'Qui', usuarios: 470 },
|
|
335
|
-
{ dia: 'Sex', usuarios: 520 },
|
|
336
|
-
{ dia: 'Sáb', usuarios: 290 },
|
|
337
|
-
{ dia: 'Dom', usuarios: 180 },
|
|
338
|
-
];
|
|
339
|
-
|
|
340
|
-
const LINE_CONFIG: ChartConfig = {
|
|
341
|
-
usuarios: { label: 'Usuários', color: 'var(--chart-1)' },
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
export const DashboardLayout: StoryObj = {
|
|
345
|
-
render: () => (
|
|
346
|
-
<div className="grid gap-4 w-full max-w-5xl">
|
|
347
|
-
<div className="grid gap-4 md:grid-cols-3">
|
|
348
|
-
<QuickActionCard
|
|
349
|
-
title="Novo Projeto"
|
|
350
|
-
description="Inicie a partir de um template."
|
|
351
|
-
icon={<Briefcase className="size-5" />}
|
|
352
|
-
actionLabel="Criar"
|
|
353
|
-
/>
|
|
354
|
-
<QuickActionCard
|
|
355
|
-
title="Convidar Equipe"
|
|
356
|
-
description="Adicione membros ao workspace."
|
|
357
|
-
icon={<Users className="size-5" />}
|
|
358
|
-
actionLabel="Convidar"
|
|
359
|
-
actionVariant="outline"
|
|
360
|
-
/>
|
|
361
|
-
<QuickActionCard
|
|
362
|
-
title="Ver Relatórios"
|
|
363
|
-
description="Métricas e KPIs do período."
|
|
364
|
-
icon={<BarChart2 className="size-5" />}
|
|
365
|
-
actionLabel="Abrir"
|
|
366
|
-
actionVariant="secondary"
|
|
367
|
-
badge="Novo"
|
|
368
|
-
badgeVariant="success"
|
|
369
|
-
/>
|
|
370
|
-
</div>
|
|
371
|
-
|
|
372
|
-
<div className="grid gap-4 md:grid-cols-3">
|
|
373
|
-
<div className="md:col-span-2">
|
|
374
|
-
<ChartCard title="Usuários Ativos" description="Esta semana" contentClassName="h-[220px]">
|
|
375
|
-
<DashboardLineChart
|
|
376
|
-
data={LINE_DATA}
|
|
377
|
-
config={LINE_CONFIG}
|
|
378
|
-
series={[{ key: 'usuarios', label: 'Usuários' }]}
|
|
379
|
-
indexKey="dia"
|
|
380
|
-
className="h-full w-full"
|
|
381
|
-
/>
|
|
382
|
-
</ChartCard>
|
|
383
|
-
</div>
|
|
384
|
-
<NotificationCard title="Alertas" items={NOTIFICATIONS.slice(0, 3)} onViewAll={() => {}} />
|
|
385
|
-
</div>
|
|
386
|
-
|
|
387
|
-
<div className="grid gap-4 md:grid-cols-2">
|
|
388
|
-
<ActivityCard items={ACTIVITY_ITEMS} className="h-full" />
|
|
389
|
-
<div className="grid gap-4">
|
|
390
|
-
<ProfileCard
|
|
391
|
-
name="Ana Souza"
|
|
392
|
-
role="Product Designer"
|
|
393
|
-
initials="AS"
|
|
394
|
-
status="online"
|
|
395
|
-
stats={[
|
|
396
|
-
{ label: 'Projetos', value: 12 },
|
|
397
|
-
{ label: 'Tarefas', value: 34 },
|
|
398
|
-
{ label: 'Reviews', value: 8 },
|
|
399
|
-
]}
|
|
400
|
-
/>
|
|
401
|
-
<ProjectCard
|
|
402
|
-
title="Xertica Dashboard v3"
|
|
403
|
-
status="active"
|
|
404
|
-
progress={68}
|
|
405
|
-
dueDate="12 dias restantes"
|
|
406
|
-
members={MEMBERS.slice(0, 3)}
|
|
407
|
-
/>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
</div>
|
|
411
|
-
),
|
|
412
|
-
};
|
|
413
|
-
|
|
414
|
-
// ─── FeatureCard ──────────────────────────────────────────────────────────────
|
|
415
|
-
|
|
416
|
-
export const Feature: StoryObj = {
|
|
417
|
-
render: () => (
|
|
418
|
-
<FeatureCard
|
|
419
|
-
title="Template CLI"
|
|
420
|
-
description="Página de template pronta para uso CLI com todos os componentes configurados."
|
|
421
|
-
icon={<FileText />}
|
|
422
|
-
color="chart-2"
|
|
423
|
-
badge="Novo"
|
|
424
|
-
actionLabel="Visualizar"
|
|
425
|
-
/>
|
|
426
|
-
),
|
|
427
|
-
};
|
|
428
|
-
|
|
429
|
-
export const FeatureColors: StoryObj = {
|
|
430
|
-
render: () => (
|
|
431
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 w-full max-w-4xl">
|
|
432
|
-
<FeatureCard
|
|
433
|
-
title="Dashboard"
|
|
434
|
-
description="Visualize métricas e KPIs em tempo real com gráficos interativos."
|
|
435
|
-
icon={<LayoutDashboard />}
|
|
436
|
-
color="primary"
|
|
437
|
-
badge="Popular"
|
|
438
|
-
badgeVariant="default"
|
|
439
|
-
actionLabel="Abrir"
|
|
440
|
-
/>
|
|
441
|
-
<FeatureCard
|
|
442
|
-
title="Integrações"
|
|
443
|
-
description="Conecte APIs externas e serviços de terceiros com um clique."
|
|
444
|
-
icon={<Globe />}
|
|
445
|
-
color="chart-1"
|
|
446
|
-
actionLabel="Explorar"
|
|
447
|
-
/>
|
|
448
|
-
<FeatureCard
|
|
449
|
-
title="Automação"
|
|
450
|
-
description="Crie fluxos automáticos com gatilhos e ações personalizadas."
|
|
451
|
-
icon={<Zap />}
|
|
452
|
-
color="chart-2"
|
|
453
|
-
badge="Beta"
|
|
454
|
-
badgeVariant="warning"
|
|
455
|
-
actionLabel="Configurar"
|
|
456
|
-
/>
|
|
457
|
-
<FeatureCard
|
|
458
|
-
title="IA Generativa"
|
|
459
|
-
description="Potencialize sua equipe com assistentes inteligentes e geração de conteúdo."
|
|
460
|
-
icon={<Sparkles />}
|
|
461
|
-
color="chart-3"
|
|
462
|
-
badge="Pro"
|
|
463
|
-
badgeVariant="info"
|
|
464
|
-
actionLabel="Ativar"
|
|
465
|
-
/>
|
|
466
|
-
<FeatureCard
|
|
467
|
-
title="Equipes"
|
|
468
|
-
description="Gerencie membros, permissões e workspaces de forma centralizada."
|
|
469
|
-
icon={<Users />}
|
|
470
|
-
color="chart-4"
|
|
471
|
-
actionLabel="Gerenciar"
|
|
472
|
-
/>
|
|
473
|
-
<FeatureCard
|
|
474
|
-
title="Pacotes"
|
|
475
|
-
description="Publique e distribua seus componentes como biblioteca reutilizável."
|
|
476
|
-
icon={<Package />}
|
|
477
|
-
color="chart-5"
|
|
478
|
-
actionLabel="Publicar"
|
|
479
|
-
/>
|
|
480
|
-
</div>
|
|
481
|
-
),
|
|
482
|
-
};
|
|
483
|
-
|
|
484
|
-
export const FeatureSemanticColors: StoryObj = {
|
|
485
|
-
render: () => (
|
|
486
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 w-full max-w-4xl">
|
|
487
|
-
<FeatureCard
|
|
488
|
-
title="Segurança"
|
|
489
|
-
description="Proteção avançada com autenticação multifator e logs de auditoria."
|
|
490
|
-
icon={<Shield />}
|
|
491
|
-
color="success"
|
|
492
|
-
actionLabel="Configurar"
|
|
493
|
-
/>
|
|
494
|
-
<FeatureCard
|
|
495
|
-
title="Insights"
|
|
496
|
-
description="Análises aprofundadas com relatórios automáticos e alertas inteligentes."
|
|
497
|
-
icon={<BarChart2 />}
|
|
498
|
-
color="info"
|
|
499
|
-
actionLabel="Ver Dados"
|
|
500
|
-
/>
|
|
501
|
-
<FeatureCard
|
|
502
|
-
title="Permissões"
|
|
503
|
-
description="Controle granular de acessos por função, projeto e recurso."
|
|
504
|
-
icon={<Lock />}
|
|
505
|
-
color="warning"
|
|
506
|
-
badge="Atenção"
|
|
507
|
-
badgeVariant="warning"
|
|
508
|
-
actionLabel="Revisar"
|
|
509
|
-
/>
|
|
510
|
-
<FeatureCard
|
|
511
|
-
title="Compartilhar"
|
|
512
|
-
description="Distribua relatórios e dashboards com stakeholders externos."
|
|
513
|
-
icon={<Share2 />}
|
|
514
|
-
color="destructive"
|
|
515
|
-
badge="Restrito"
|
|
516
|
-
badgeVariant="destructive"
|
|
517
|
-
actionLabel="Solicitar"
|
|
518
|
-
/>
|
|
519
|
-
</div>
|
|
520
|
-
),
|
|
521
|
-
};
|
|
522
|
-
|
|
523
|
-
// ─── Skeletons ────────────────────────────────────────────────────────────────
|
|
524
|
-
|
|
525
|
-
type SkeletonStory = StoryObj;
|
|
526
|
-
|
|
527
|
-
/** All card-pattern skeletons side by side to compare proportions with their data counterparts. */
|
|
528
|
-
export const SkeletonShowcase: SkeletonStory = {
|
|
529
|
-
name: 'Skeletons / All Card Patterns',
|
|
530
|
-
render: () => (
|
|
531
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 w-full max-w-5xl">
|
|
532
|
-
<ActivityCardSkeleton rows={4} />
|
|
533
|
-
<ProfileCardSkeleton showStats showActions />
|
|
534
|
-
<ProjectCardSkeleton memberCount={3} />
|
|
535
|
-
<NotificationCardSkeleton rows={3} showViewAll />
|
|
536
|
-
<QuickActionCardSkeleton />
|
|
537
|
-
<FeatureCardSkeleton showAction />
|
|
538
|
-
</div>
|
|
539
|
-
),
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
export const ActivitySkeleton: SkeletonStory = {
|
|
543
|
-
name: 'Skeletons / ActivityCard',
|
|
544
|
-
render: () => (
|
|
545
|
-
<div className="w-[380px]">
|
|
546
|
-
<ActivityCardSkeleton rows={5} />
|
|
547
|
-
</div>
|
|
548
|
-
),
|
|
549
|
-
};
|
|
550
|
-
|
|
551
|
-
export const ProfileSkeleton: SkeletonStory = {
|
|
552
|
-
name: 'Skeletons / ProfileCard',
|
|
553
|
-
render: () => (
|
|
554
|
-
<div className="w-[280px]">
|
|
555
|
-
<ProfileCardSkeleton showStats showActions />
|
|
556
|
-
</div>
|
|
557
|
-
),
|
|
558
|
-
};
|
|
559
|
-
|
|
560
|
-
export const ProjectSkeleton: SkeletonStory = {
|
|
561
|
-
name: 'Skeletons / ProjectCard',
|
|
562
|
-
render: () => (
|
|
563
|
-
<div className="w-[320px]">
|
|
564
|
-
<ProjectCardSkeleton memberCount={4} />
|
|
565
|
-
</div>
|
|
566
|
-
),
|
|
567
|
-
};
|
|
568
|
-
|
|
569
|
-
export const NotificationSkeleton: SkeletonStory = {
|
|
570
|
-
name: 'Skeletons / NotificationCard',
|
|
571
|
-
render: () => (
|
|
572
|
-
<div className="w-[400px]">
|
|
573
|
-
<NotificationCardSkeleton rows={4} showViewAll />
|
|
574
|
-
</div>
|
|
575
|
-
),
|
|
576
|
-
};
|
|
577
|
-
|
|
578
|
-
export const QuickActionSkeleton: SkeletonStory = {
|
|
579
|
-
name: 'Skeletons / QuickActionCard',
|
|
580
|
-
render: () => (
|
|
581
|
-
<div className="w-[260px]">
|
|
582
|
-
<QuickActionCardSkeleton />
|
|
583
|
-
</div>
|
|
584
|
-
),
|
|
585
|
-
};
|
|
586
|
-
|
|
587
|
-
export const FeatureSkeleton: SkeletonStory = {
|
|
588
|
-
name: 'Skeletons / FeatureCard',
|
|
589
|
-
render: () => (
|
|
590
|
-
<div className="w-[300px]">
|
|
591
|
-
<FeatureCardSkeleton showAction />
|
|
592
|
-
</div>
|
|
593
|
-
),
|
|
594
|
-
};
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import {
|
|
4
|
+
BarChart2,
|
|
5
|
+
Bell,
|
|
6
|
+
Briefcase,
|
|
7
|
+
Download,
|
|
8
|
+
FileText,
|
|
9
|
+
Globe,
|
|
10
|
+
LayoutDashboard,
|
|
11
|
+
Lock,
|
|
12
|
+
MoreHorizontal,
|
|
13
|
+
Package,
|
|
14
|
+
Plus,
|
|
15
|
+
RefreshCw,
|
|
16
|
+
Share2,
|
|
17
|
+
Shield,
|
|
18
|
+
Sparkles,
|
|
19
|
+
Users,
|
|
20
|
+
Zap,
|
|
21
|
+
} from 'lucide-react';
|
|
22
|
+
import { Button } from '../../ui/button';
|
|
23
|
+
import { ChartCard, ChartConfig, DashboardBarChart, DashboardLineChart } from '../../ui/chart';
|
|
24
|
+
import { ActivityCard } from './ActivityCard';
|
|
25
|
+
import { ActivityCardSkeleton } from './ActivityCardSkeleton';
|
|
26
|
+
import { FeatureCard } from './FeatureCard';
|
|
27
|
+
import { FeatureCardSkeleton } from './FeatureCardSkeleton';
|
|
28
|
+
import { NotificationCard } from './NotificationCard';
|
|
29
|
+
import { NotificationCardSkeleton } from './NotificationCardSkeleton';
|
|
30
|
+
import { ProfileCard } from './ProfileCard';
|
|
31
|
+
import { ProfileCardSkeleton } from './ProfileCardSkeleton';
|
|
32
|
+
import { ProjectCard } from './ProjectCard';
|
|
33
|
+
import { ProjectCardSkeleton } from './ProjectCardSkeleton';
|
|
34
|
+
import { QuickActionCard } from './QuickActionCard';
|
|
35
|
+
import { QuickActionCardSkeleton } from './QuickActionCardSkeleton';
|
|
36
|
+
|
|
37
|
+
const meta: Meta = {
|
|
38
|
+
title: 'Blocks/Card Patterns',
|
|
39
|
+
decorators: [
|
|
40
|
+
Story => (
|
|
41
|
+
<div className="bg-muted rounded-xl p-8 w-full flex items-start justify-center">
|
|
42
|
+
<Story />
|
|
43
|
+
</div>
|
|
44
|
+
),
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
export default meta;
|
|
48
|
+
|
|
49
|
+
// ─── ActivityCard ─────────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
const ACTIVITY_ITEMS = [
|
|
52
|
+
{
|
|
53
|
+
id: '1',
|
|
54
|
+
user: { name: 'Ana Souza', initials: 'AS' },
|
|
55
|
+
action: 'criou o projeto',
|
|
56
|
+
target: 'Xertica Dashboard',
|
|
57
|
+
time: 'há 2 min',
|
|
58
|
+
type: 'create' as const,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: '2',
|
|
62
|
+
user: { name: 'Bruno Lima', initials: 'BL' },
|
|
63
|
+
action: 'atualizou',
|
|
64
|
+
target: 'componente Button',
|
|
65
|
+
time: 'há 8 min',
|
|
66
|
+
type: 'update' as const,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: '3',
|
|
70
|
+
user: { name: 'Carla Rocha', initials: 'CR' },
|
|
71
|
+
action: 'comentou em',
|
|
72
|
+
target: 'PR #42',
|
|
73
|
+
time: 'há 15 min',
|
|
74
|
+
type: 'comment' as const,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: '4',
|
|
78
|
+
user: { name: 'Diego Ferraz', initials: 'DF' },
|
|
79
|
+
action: 'fez deploy de',
|
|
80
|
+
target: 'v2.1.0',
|
|
81
|
+
time: 'há 1h',
|
|
82
|
+
type: 'deploy' as const,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: '5',
|
|
86
|
+
user: { name: 'Elena Moura', initials: 'EM' },
|
|
87
|
+
action: 'removeu',
|
|
88
|
+
target: 'badge legado',
|
|
89
|
+
time: 'há 2h',
|
|
90
|
+
type: 'delete' as const,
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
export const Activity: StoryObj = {
|
|
95
|
+
render: () => (
|
|
96
|
+
<ActivityCard
|
|
97
|
+
items={ACTIVITY_ITEMS}
|
|
98
|
+
action={
|
|
99
|
+
<Button variant="ghost" size="sm">
|
|
100
|
+
<MoreHorizontal className="size-4" />
|
|
101
|
+
</Button>
|
|
102
|
+
}
|
|
103
|
+
className="max-w-md"
|
|
104
|
+
/>
|
|
105
|
+
),
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
// ─── ProfileCard ──────────────────────────────────────────────────────────────
|
|
109
|
+
|
|
110
|
+
export const Profile: StoryObj = {
|
|
111
|
+
render: () => (
|
|
112
|
+
<ProfileCard
|
|
113
|
+
name="Ana Souza"
|
|
114
|
+
role="Senior Frontend Engineer"
|
|
115
|
+
department="Design System"
|
|
116
|
+
initials="AS"
|
|
117
|
+
status="online"
|
|
118
|
+
stats={[
|
|
119
|
+
{ label: 'Projetos', value: 12 },
|
|
120
|
+
{ label: 'Commits', value: 348 },
|
|
121
|
+
{ label: 'Reviews', value: 57 },
|
|
122
|
+
]}
|
|
123
|
+
primaryAction={{ label: 'Ver Perfil' }}
|
|
124
|
+
secondaryAction={{ label: 'Mensagem' }}
|
|
125
|
+
className="w-64"
|
|
126
|
+
/>
|
|
127
|
+
),
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// ─── ProjectCard ──────────────────────────────────────────────────────────────
|
|
131
|
+
|
|
132
|
+
const MEMBERS = [
|
|
133
|
+
{ name: 'Ana', initials: 'AS' },
|
|
134
|
+
{ name: 'Bruno', initials: 'BL' },
|
|
135
|
+
{ name: 'Carla', initials: 'CR' },
|
|
136
|
+
{ name: 'Diego', initials: 'DF' },
|
|
137
|
+
{ name: 'Elena', initials: 'EM' },
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
export const Project: StoryObj = {
|
|
141
|
+
render: () => (
|
|
142
|
+
<div className="grid gap-4 md:grid-cols-2 w-full max-w-2xl">
|
|
143
|
+
<ProjectCard
|
|
144
|
+
title="Xertica Dashboard v3"
|
|
145
|
+
description="Redesign completo do painel com novos componentes."
|
|
146
|
+
status="active"
|
|
147
|
+
progress={68}
|
|
148
|
+
dueDate="Vence em 12 dias"
|
|
149
|
+
members={MEMBERS}
|
|
150
|
+
/>
|
|
151
|
+
<ProjectCard
|
|
152
|
+
title="Design System Tokens"
|
|
153
|
+
description="Migração dos tokens de design para CSS variables."
|
|
154
|
+
status="review"
|
|
155
|
+
progress={91}
|
|
156
|
+
dueDate="Vence amanhã"
|
|
157
|
+
members={MEMBERS.slice(0, 2)}
|
|
158
|
+
/>
|
|
159
|
+
<ProjectCard
|
|
160
|
+
title="App Mobile"
|
|
161
|
+
description="Versão móvel do Xertica com React Native."
|
|
162
|
+
status="at-risk"
|
|
163
|
+
progress={34}
|
|
164
|
+
dueDate="Atrasado 3 dias"
|
|
165
|
+
members={MEMBERS.slice(0, 3)}
|
|
166
|
+
/>
|
|
167
|
+
<ProjectCard
|
|
168
|
+
title="Onboarding Flow"
|
|
169
|
+
description="Fluxo de cadastro e primeiros passos."
|
|
170
|
+
status="done"
|
|
171
|
+
progress={100}
|
|
172
|
+
dueDate="Entregue"
|
|
173
|
+
members={MEMBERS.slice(0, 4)}
|
|
174
|
+
/>
|
|
175
|
+
</div>
|
|
176
|
+
),
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// ─── QuickActionCard ──────────────────────────────────────────────────────────
|
|
180
|
+
|
|
181
|
+
export const QuickActions: StoryObj = {
|
|
182
|
+
render: () => (
|
|
183
|
+
<div className="grid gap-4 grid-cols-2 md:grid-cols-3 max-w-2xl w-full">
|
|
184
|
+
<QuickActionCard
|
|
185
|
+
title="Novo Relatório"
|
|
186
|
+
description="Gere relatórios personalizados de métricas."
|
|
187
|
+
icon={<FileText className="size-5" />}
|
|
188
|
+
actionLabel="Criar Relatório"
|
|
189
|
+
/>
|
|
190
|
+
<QuickActionCard
|
|
191
|
+
title="Convidar Membro"
|
|
192
|
+
description="Adicione novos colaboradores ao workspace."
|
|
193
|
+
icon={<Users className="size-5" />}
|
|
194
|
+
actionLabel="Convidar"
|
|
195
|
+
actionVariant="outline"
|
|
196
|
+
badge="Novo"
|
|
197
|
+
badgeVariant="success"
|
|
198
|
+
/>
|
|
199
|
+
<QuickActionCard
|
|
200
|
+
title="Exportar Dados"
|
|
201
|
+
description="Exporte suas métricas em CSV ou JSON."
|
|
202
|
+
icon={<Download className="size-5" />}
|
|
203
|
+
actionLabel="Exportar"
|
|
204
|
+
actionVariant="secondary"
|
|
205
|
+
/>
|
|
206
|
+
<QuickActionCard
|
|
207
|
+
title="Automação"
|
|
208
|
+
description="Configure gatilhos e ações automáticas."
|
|
209
|
+
icon={<Zap className="size-5" />}
|
|
210
|
+
actionLabel="Configurar"
|
|
211
|
+
badge="Pro"
|
|
212
|
+
badgeVariant="warning"
|
|
213
|
+
/>
|
|
214
|
+
<QuickActionCard
|
|
215
|
+
title="Compartilhar"
|
|
216
|
+
description="Compartilhe o dashboard com sua equipe."
|
|
217
|
+
icon={<Share2 className="size-5" />}
|
|
218
|
+
actionLabel="Compartilhar"
|
|
219
|
+
actionVariant="outline"
|
|
220
|
+
/>
|
|
221
|
+
<QuickActionCard
|
|
222
|
+
title="Novo Projeto"
|
|
223
|
+
description="Inicie um projeto a partir de um template."
|
|
224
|
+
icon={<Plus className="size-5" />}
|
|
225
|
+
actionLabel="Criar Projeto"
|
|
226
|
+
badge="Beta"
|
|
227
|
+
badgeVariant="info"
|
|
228
|
+
/>
|
|
229
|
+
</div>
|
|
230
|
+
),
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// ─── NotificationCard ─────────────────────────────────────────────────────────
|
|
234
|
+
|
|
235
|
+
const NOTIFICATIONS = [
|
|
236
|
+
{
|
|
237
|
+
id: '1',
|
|
238
|
+
title: 'Deploy concluído',
|
|
239
|
+
message: 'v2.1.0 foi publicado com sucesso em produção.',
|
|
240
|
+
time: 'há 2 min',
|
|
241
|
+
read: false,
|
|
242
|
+
type: 'success' as const,
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
id: '2',
|
|
246
|
+
title: 'Revisão solicitada',
|
|
247
|
+
message: 'Ana pediu revisão no PR #42: Novos tokens de cor.',
|
|
248
|
+
time: 'há 10 min',
|
|
249
|
+
read: false,
|
|
250
|
+
type: 'info' as const,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
id: '3',
|
|
254
|
+
title: 'Erro em produção',
|
|
255
|
+
message: 'Serviço de auth com falha intermitente — 503.',
|
|
256
|
+
time: 'há 1h',
|
|
257
|
+
read: false,
|
|
258
|
+
type: 'error' as const,
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: '4',
|
|
262
|
+
title: 'Licença expirando',
|
|
263
|
+
message: 'Sua licença Pro expira em 7 dias. Renove para continuar.',
|
|
264
|
+
time: 'há 3h',
|
|
265
|
+
read: true,
|
|
266
|
+
type: 'warning' as const,
|
|
267
|
+
},
|
|
268
|
+
];
|
|
269
|
+
|
|
270
|
+
export const Notifications: StoryObj = {
|
|
271
|
+
render: () => (
|
|
272
|
+
<NotificationCard
|
|
273
|
+
items={NOTIFICATIONS}
|
|
274
|
+
onMarkAllRead={() => {}}
|
|
275
|
+
onViewAll={() => {}}
|
|
276
|
+
className="max-w-sm"
|
|
277
|
+
/>
|
|
278
|
+
),
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
// ─── ChartCard ────────────────────────────────────────────────────────────────
|
|
282
|
+
|
|
283
|
+
const REVENUE_DATA = [
|
|
284
|
+
{ month: 'Jan', receita: 18000, despesa: 12000 },
|
|
285
|
+
{ month: 'Fev', receita: 22000, despesa: 14000 },
|
|
286
|
+
{ month: 'Mar', receita: 19500, despesa: 13500 },
|
|
287
|
+
{ month: 'Abr', receita: 27000, despesa: 15000 },
|
|
288
|
+
{ month: 'Mai', receita: 31000, despesa: 17500 },
|
|
289
|
+
{ month: 'Jun', receita: 28500, despesa: 16000 },
|
|
290
|
+
];
|
|
291
|
+
|
|
292
|
+
const REVENUE_CONFIG: ChartConfig = {
|
|
293
|
+
receita: { label: 'Receita', color: 'var(--chart-1)' },
|
|
294
|
+
despesa: { label: 'Despesa', color: 'var(--chart-5)' },
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const CHART_SERIES = [
|
|
298
|
+
{ key: 'receita', label: 'Receita' },
|
|
299
|
+
{ key: 'despesa', label: 'Despesa' },
|
|
300
|
+
];
|
|
301
|
+
|
|
302
|
+
export const Chart: StoryObj = {
|
|
303
|
+
render: () => (
|
|
304
|
+
<ChartCard
|
|
305
|
+
title="Receita vs Despesa"
|
|
306
|
+
description="Últimos 6 meses"
|
|
307
|
+
action={
|
|
308
|
+
<Button variant="ghost" size="sm">
|
|
309
|
+
<RefreshCw className="size-4" />
|
|
310
|
+
</Button>
|
|
311
|
+
}
|
|
312
|
+
footer="Dados atualizados em tempo real via API financeira."
|
|
313
|
+
className="max-w-xl w-full"
|
|
314
|
+
contentClassName="h-[260px]"
|
|
315
|
+
>
|
|
316
|
+
<DashboardBarChart
|
|
317
|
+
data={REVENUE_DATA}
|
|
318
|
+
config={REVENUE_CONFIG}
|
|
319
|
+
series={CHART_SERIES}
|
|
320
|
+
indexKey="month"
|
|
321
|
+
barSize="md"
|
|
322
|
+
className="h-full w-full"
|
|
323
|
+
/>
|
|
324
|
+
</ChartCard>
|
|
325
|
+
),
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
// ─── Dashboard completo ───────────────────────────────────────────────────────
|
|
329
|
+
|
|
330
|
+
const LINE_DATA = [
|
|
331
|
+
{ dia: 'Seg', usuarios: 240 },
|
|
332
|
+
{ dia: 'Ter', usuarios: 380 },
|
|
333
|
+
{ dia: 'Qua', usuarios: 310 },
|
|
334
|
+
{ dia: 'Qui', usuarios: 470 },
|
|
335
|
+
{ dia: 'Sex', usuarios: 520 },
|
|
336
|
+
{ dia: 'Sáb', usuarios: 290 },
|
|
337
|
+
{ dia: 'Dom', usuarios: 180 },
|
|
338
|
+
];
|
|
339
|
+
|
|
340
|
+
const LINE_CONFIG: ChartConfig = {
|
|
341
|
+
usuarios: { label: 'Usuários', color: 'var(--chart-1)' },
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
export const DashboardLayout: StoryObj = {
|
|
345
|
+
render: () => (
|
|
346
|
+
<div className="grid gap-4 w-full max-w-5xl">
|
|
347
|
+
<div className="grid gap-4 md:grid-cols-3">
|
|
348
|
+
<QuickActionCard
|
|
349
|
+
title="Novo Projeto"
|
|
350
|
+
description="Inicie a partir de um template."
|
|
351
|
+
icon={<Briefcase className="size-5" />}
|
|
352
|
+
actionLabel="Criar"
|
|
353
|
+
/>
|
|
354
|
+
<QuickActionCard
|
|
355
|
+
title="Convidar Equipe"
|
|
356
|
+
description="Adicione membros ao workspace."
|
|
357
|
+
icon={<Users className="size-5" />}
|
|
358
|
+
actionLabel="Convidar"
|
|
359
|
+
actionVariant="outline"
|
|
360
|
+
/>
|
|
361
|
+
<QuickActionCard
|
|
362
|
+
title="Ver Relatórios"
|
|
363
|
+
description="Métricas e KPIs do período."
|
|
364
|
+
icon={<BarChart2 className="size-5" />}
|
|
365
|
+
actionLabel="Abrir"
|
|
366
|
+
actionVariant="secondary"
|
|
367
|
+
badge="Novo"
|
|
368
|
+
badgeVariant="success"
|
|
369
|
+
/>
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
<div className="grid gap-4 md:grid-cols-3">
|
|
373
|
+
<div className="md:col-span-2">
|
|
374
|
+
<ChartCard title="Usuários Ativos" description="Esta semana" contentClassName="h-[220px]">
|
|
375
|
+
<DashboardLineChart
|
|
376
|
+
data={LINE_DATA}
|
|
377
|
+
config={LINE_CONFIG}
|
|
378
|
+
series={[{ key: 'usuarios', label: 'Usuários' }]}
|
|
379
|
+
indexKey="dia"
|
|
380
|
+
className="h-full w-full"
|
|
381
|
+
/>
|
|
382
|
+
</ChartCard>
|
|
383
|
+
</div>
|
|
384
|
+
<NotificationCard title="Alertas" items={NOTIFICATIONS.slice(0, 3)} onViewAll={() => {}} />
|
|
385
|
+
</div>
|
|
386
|
+
|
|
387
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
388
|
+
<ActivityCard items={ACTIVITY_ITEMS} className="h-full" />
|
|
389
|
+
<div className="grid gap-4">
|
|
390
|
+
<ProfileCard
|
|
391
|
+
name="Ana Souza"
|
|
392
|
+
role="Product Designer"
|
|
393
|
+
initials="AS"
|
|
394
|
+
status="online"
|
|
395
|
+
stats={[
|
|
396
|
+
{ label: 'Projetos', value: 12 },
|
|
397
|
+
{ label: 'Tarefas', value: 34 },
|
|
398
|
+
{ label: 'Reviews', value: 8 },
|
|
399
|
+
]}
|
|
400
|
+
/>
|
|
401
|
+
<ProjectCard
|
|
402
|
+
title="Xertica Dashboard v3"
|
|
403
|
+
status="active"
|
|
404
|
+
progress={68}
|
|
405
|
+
dueDate="12 dias restantes"
|
|
406
|
+
members={MEMBERS.slice(0, 3)}
|
|
407
|
+
/>
|
|
408
|
+
</div>
|
|
409
|
+
</div>
|
|
410
|
+
</div>
|
|
411
|
+
),
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
// ─── FeatureCard ──────────────────────────────────────────────────────────────
|
|
415
|
+
|
|
416
|
+
export const Feature: StoryObj = {
|
|
417
|
+
render: () => (
|
|
418
|
+
<FeatureCard
|
|
419
|
+
title="Template CLI"
|
|
420
|
+
description="Página de template pronta para uso CLI com todos os componentes configurados."
|
|
421
|
+
icon={<FileText />}
|
|
422
|
+
color="chart-2"
|
|
423
|
+
badge="Novo"
|
|
424
|
+
actionLabel="Visualizar"
|
|
425
|
+
/>
|
|
426
|
+
),
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
export const FeatureColors: StoryObj = {
|
|
430
|
+
render: () => (
|
|
431
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 w-full max-w-4xl">
|
|
432
|
+
<FeatureCard
|
|
433
|
+
title="Dashboard"
|
|
434
|
+
description="Visualize métricas e KPIs em tempo real com gráficos interativos."
|
|
435
|
+
icon={<LayoutDashboard />}
|
|
436
|
+
color="primary"
|
|
437
|
+
badge="Popular"
|
|
438
|
+
badgeVariant="default"
|
|
439
|
+
actionLabel="Abrir"
|
|
440
|
+
/>
|
|
441
|
+
<FeatureCard
|
|
442
|
+
title="Integrações"
|
|
443
|
+
description="Conecte APIs externas e serviços de terceiros com um clique."
|
|
444
|
+
icon={<Globe />}
|
|
445
|
+
color="chart-1"
|
|
446
|
+
actionLabel="Explorar"
|
|
447
|
+
/>
|
|
448
|
+
<FeatureCard
|
|
449
|
+
title="Automação"
|
|
450
|
+
description="Crie fluxos automáticos com gatilhos e ações personalizadas."
|
|
451
|
+
icon={<Zap />}
|
|
452
|
+
color="chart-2"
|
|
453
|
+
badge="Beta"
|
|
454
|
+
badgeVariant="warning"
|
|
455
|
+
actionLabel="Configurar"
|
|
456
|
+
/>
|
|
457
|
+
<FeatureCard
|
|
458
|
+
title="IA Generativa"
|
|
459
|
+
description="Potencialize sua equipe com assistentes inteligentes e geração de conteúdo."
|
|
460
|
+
icon={<Sparkles />}
|
|
461
|
+
color="chart-3"
|
|
462
|
+
badge="Pro"
|
|
463
|
+
badgeVariant="info"
|
|
464
|
+
actionLabel="Ativar"
|
|
465
|
+
/>
|
|
466
|
+
<FeatureCard
|
|
467
|
+
title="Equipes"
|
|
468
|
+
description="Gerencie membros, permissões e workspaces de forma centralizada."
|
|
469
|
+
icon={<Users />}
|
|
470
|
+
color="chart-4"
|
|
471
|
+
actionLabel="Gerenciar"
|
|
472
|
+
/>
|
|
473
|
+
<FeatureCard
|
|
474
|
+
title="Pacotes"
|
|
475
|
+
description="Publique e distribua seus componentes como biblioteca reutilizável."
|
|
476
|
+
icon={<Package />}
|
|
477
|
+
color="chart-5"
|
|
478
|
+
actionLabel="Publicar"
|
|
479
|
+
/>
|
|
480
|
+
</div>
|
|
481
|
+
),
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
export const FeatureSemanticColors: StoryObj = {
|
|
485
|
+
render: () => (
|
|
486
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 w-full max-w-4xl">
|
|
487
|
+
<FeatureCard
|
|
488
|
+
title="Segurança"
|
|
489
|
+
description="Proteção avançada com autenticação multifator e logs de auditoria."
|
|
490
|
+
icon={<Shield />}
|
|
491
|
+
color="success"
|
|
492
|
+
actionLabel="Configurar"
|
|
493
|
+
/>
|
|
494
|
+
<FeatureCard
|
|
495
|
+
title="Insights"
|
|
496
|
+
description="Análises aprofundadas com relatórios automáticos e alertas inteligentes."
|
|
497
|
+
icon={<BarChart2 />}
|
|
498
|
+
color="info"
|
|
499
|
+
actionLabel="Ver Dados"
|
|
500
|
+
/>
|
|
501
|
+
<FeatureCard
|
|
502
|
+
title="Permissões"
|
|
503
|
+
description="Controle granular de acessos por função, projeto e recurso."
|
|
504
|
+
icon={<Lock />}
|
|
505
|
+
color="warning"
|
|
506
|
+
badge="Atenção"
|
|
507
|
+
badgeVariant="warning"
|
|
508
|
+
actionLabel="Revisar"
|
|
509
|
+
/>
|
|
510
|
+
<FeatureCard
|
|
511
|
+
title="Compartilhar"
|
|
512
|
+
description="Distribua relatórios e dashboards com stakeholders externos."
|
|
513
|
+
icon={<Share2 />}
|
|
514
|
+
color="destructive"
|
|
515
|
+
badge="Restrito"
|
|
516
|
+
badgeVariant="destructive"
|
|
517
|
+
actionLabel="Solicitar"
|
|
518
|
+
/>
|
|
519
|
+
</div>
|
|
520
|
+
),
|
|
521
|
+
};
|
|
522
|
+
|
|
523
|
+
// ─── Skeletons ────────────────────────────────────────────────────────────────
|
|
524
|
+
|
|
525
|
+
type SkeletonStory = StoryObj;
|
|
526
|
+
|
|
527
|
+
/** All card-pattern skeletons side by side to compare proportions with their data counterparts. */
|
|
528
|
+
export const SkeletonShowcase: SkeletonStory = {
|
|
529
|
+
name: 'Skeletons / All Card Patterns',
|
|
530
|
+
render: () => (
|
|
531
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 w-full max-w-5xl">
|
|
532
|
+
<ActivityCardSkeleton rows={4} />
|
|
533
|
+
<ProfileCardSkeleton showStats showActions />
|
|
534
|
+
<ProjectCardSkeleton memberCount={3} />
|
|
535
|
+
<NotificationCardSkeleton rows={3} showViewAll />
|
|
536
|
+
<QuickActionCardSkeleton />
|
|
537
|
+
<FeatureCardSkeleton showAction />
|
|
538
|
+
</div>
|
|
539
|
+
),
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
export const ActivitySkeleton: SkeletonStory = {
|
|
543
|
+
name: 'Skeletons / ActivityCard',
|
|
544
|
+
render: () => (
|
|
545
|
+
<div className="w-[380px]">
|
|
546
|
+
<ActivityCardSkeleton rows={5} />
|
|
547
|
+
</div>
|
|
548
|
+
),
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
export const ProfileSkeleton: SkeletonStory = {
|
|
552
|
+
name: 'Skeletons / ProfileCard',
|
|
553
|
+
render: () => (
|
|
554
|
+
<div className="w-[280px]">
|
|
555
|
+
<ProfileCardSkeleton showStats showActions />
|
|
556
|
+
</div>
|
|
557
|
+
),
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
export const ProjectSkeleton: SkeletonStory = {
|
|
561
|
+
name: 'Skeletons / ProjectCard',
|
|
562
|
+
render: () => (
|
|
563
|
+
<div className="w-[320px]">
|
|
564
|
+
<ProjectCardSkeleton memberCount={4} />
|
|
565
|
+
</div>
|
|
566
|
+
),
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
export const NotificationSkeleton: SkeletonStory = {
|
|
570
|
+
name: 'Skeletons / NotificationCard',
|
|
571
|
+
render: () => (
|
|
572
|
+
<div className="w-[400px]">
|
|
573
|
+
<NotificationCardSkeleton rows={4} showViewAll />
|
|
574
|
+
</div>
|
|
575
|
+
),
|
|
576
|
+
};
|
|
577
|
+
|
|
578
|
+
export const QuickActionSkeleton: SkeletonStory = {
|
|
579
|
+
name: 'Skeletons / QuickActionCard',
|
|
580
|
+
render: () => (
|
|
581
|
+
<div className="w-[260px]">
|
|
582
|
+
<QuickActionCardSkeleton />
|
|
583
|
+
</div>
|
|
584
|
+
),
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
export const FeatureSkeleton: SkeletonStory = {
|
|
588
|
+
name: 'Skeletons / FeatureCard',
|
|
589
|
+
render: () => (
|
|
590
|
+
<div className="w-[300px]">
|
|
591
|
+
<FeatureCardSkeleton showAction />
|
|
592
|
+
</div>
|
|
593
|
+
),
|
|
594
|
+
};
|