xertica-ui 2.1.2 → 2.1.3
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 +31 -0
- package/README.md +1 -1
- package/assets/xertica-logo.svg +37 -37
- package/assets/xertica-x-logo.svg +20 -20
- package/bin/cli.ts +1 -1
- package/bin/generate-tokens.ts +13 -7
- package/components/assistant/index.ts +6 -6
- package/components/assistant/xertica-assistant/index.ts +2 -0
- package/components/assistant/xertica-assistant/use-assistant.ts +564 -0
- package/components/assistant/xertica-assistant/xertica-assistant.stories.tsx +200 -0
- package/components/assistant/xertica-assistant/xertica-assistant.tsx +183 -474
- package/components/blocks/card-patterns/ActivityCard.tsx +72 -72
- package/components/blocks/card-patterns/FeatureCard.tsx +100 -100
- package/components/blocks/card-patterns/NotificationCard.tsx +127 -127
- package/components/blocks/card-patterns/ProfileCard.tsx +84 -84
- package/components/blocks/card-patterns/ProjectCard.tsx +89 -89
- package/components/blocks/card-patterns/QuickActionCard.tsx +62 -62
- package/components/blocks/card-patterns/card-patterns.stories.tsx +445 -445
- package/components/blocks/card-patterns/index.ts +17 -17
- package/components/blocks/index.ts +1 -1
- package/components/brand/index.ts +6 -6
- package/components/brand/xertica-provider/XerticaProvider.tsx +48 -48
- package/components/brand/xertica-provider/xertica-provider.mdx +61 -61
- package/components/brand/xertica-provider/xertica-provider.test.tsx +52 -52
- package/components/examples/MapExamples.tsx +282 -282
- package/components/examples/SimpleFilterableMap.tsx +191 -191
- package/components/examples/index.ts +51 -51
- package/components/figma/ImageWithFallback.tsx +27 -27
- package/components/hooks/index.ts +7 -7
- package/components/index.ts +5 -5
- package/components/layout/header/header.test.tsx +8 -8
- package/components/layout/header/header.tsx +4 -4
- package/components/layout/index.ts +2 -2
- package/components/layout/sidebar/index.ts +2 -0
- package/components/layout/sidebar/sidebar.mdx +1 -1
- package/components/layout/sidebar/sidebar.stories.tsx +160 -8
- package/components/layout/sidebar/sidebar.test.tsx +11 -11
- package/components/layout/sidebar/sidebar.tsx +610 -471
- package/components/layout/sidebar/use-sidebar.ts +113 -0
- package/components/media/FloatingMediaWrapper.tsx +11 -11
- package/components/media/audio-player/AudioPlayer.tsx +22 -22
- package/components/media/index.ts +3 -3
- package/components/pages/home-content/HomeContent.tsx +7 -7
- package/components/pages/home-content/home-content.mdx +62 -62
- package/components/pages/home-page/HomePage.stories.tsx +39 -39
- package/components/pages/home-page/HomePage.tsx +1 -1
- package/components/pages/home-page/home-page.mdx +53 -53
- package/components/pages/index.ts +8 -8
- package/components/pages/template-content/TemplateContent.tsx +5 -5
- package/components/pages/template-content/template-content.mdx +61 -61
- package/components/pages/template-page/TemplatePage.stories.tsx +39 -39
- package/components/pages/template-page/TemplatePage.tsx +5 -5
- package/components/pages/template-page/template-page.mdx +53 -53
- package/components/public-api-smoke.test.tsx +52 -52
- package/components/shared/assistant-utils.ts +43 -43
- package/components/shared/layout-constants.ts +1 -1
- package/components/ui/accordion/accordion.mdx +8 -8
- package/components/ui/accordion/accordion.stories.tsx +53 -53
- 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/badge/badge.tsx +9 -9
- 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/calendar/calendar.tsx +258 -258
- package/components/ui/card/card.mdx +8 -8
- package/components/ui/card/card.stories.tsx +245 -245
- package/components/ui/carousel/carousel.mdx +8 -8
- package/components/ui/chart/chart.mdx +8 -8
- package/components/ui/chart/chart.stories.tsx +1303 -344
- package/components/ui/chart/chart.test.tsx +154 -154
- package/components/ui/chart/chart.tsx +2367 -1494
- package/components/ui/checkbox/checkbox.mdx +8 -8
- package/components/ui/checkbox/checkbox.stories.tsx +20 -20
- 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/file-upload/file-upload.stories.tsx +100 -0
- package/components/ui/file-upload/file-upload.tsx +14 -74
- package/components/ui/file-upload/index.ts +1 -0
- package/components/ui/file-upload/use-file-upload.ts +181 -0
- package/components/ui/google-maps-loader/google-maps-loader.tsx +2 -2
- 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/input-otp/input-otp.stories.tsx +6 -6
- package/components/ui/label/label.mdx +8 -8
- package/components/ui/map/map.mdx +8 -8
- package/components/ui/map/map.stories.tsx +51 -51
- package/components/ui/map/map.tsx +2 -2
- 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/index.ts +2 -0
- package/components/ui/pagination/pagination.mdx +8 -8
- package/components/ui/pagination/pagination.stories.tsx +94 -0
- package/components/ui/pagination/use-pagination.ts +194 -0
- package/components/ui/popover/popover.mdx +8 -8
- package/components/ui/progress/progress.mdx +8 -8
- package/components/ui/progress/progress.tsx +68 -68
- 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/rich-text-editor/index.ts +2 -0
- package/components/ui/rich-text-editor/rich-text-editor.stories.tsx +129 -1
- package/components/ui/rich-text-editor/rich-text-editor.tsx +86 -305
- package/components/ui/rich-text-editor/use-rich-text-editor.ts +439 -0
- package/components/ui/route-map/route-map.mdx +8 -8
- package/components/ui/route-map/route-map.stories.tsx +54 -54
- package/components/ui/route-map/route-map.tsx +2 -2
- 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/select/select.stories.tsx +9 -9
- package/components/ui/separator/separator.mdx +8 -8
- package/components/ui/sheet/sheet.mdx +8 -8
- package/components/ui/sheet/sheet.stories.tsx +95 -95
- package/components/ui/simple-map/simple-map.mdx +8 -8
- package/components/ui/simple-map/simple-map.stories.tsx +48 -48
- 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/stats-card.mdx +8 -8
- package/components/ui/stepper/index.ts +3 -1
- package/components/ui/stepper/stepper.mdx +8 -8
- package/components/ui/stepper/stepper.stories.tsx +116 -0
- package/components/ui/stepper/stepper.tsx +4 -4
- package/components/ui/stepper/use-stepper.ts +137 -0
- package/components/ui/switch/switch.mdx +8 -8
- package/components/ui/switch/switch.stories.tsx +20 -20
- package/components/ui/table/table.mdx +8 -8
- package/components/ui/tabs/tabs.mdx +8 -8
- package/components/ui/tabs/tabs.stories.tsx +26 -26
- 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/index.ts +4 -1
- package/components/ui/tree-view/tree-view.mdx +8 -8
- package/components/ui/tree-view/tree-view.stories.tsx +110 -4
- package/components/ui/tree-view/tree-view.tsx +17 -125
- package/components/ui/tree-view/use-tree-view.ts +229 -0
- package/components.json +1512 -1512
- package/contexts/ApiKeyContext.tsx +72 -72
- package/contexts/BrandColorsContext.tsx +26 -26
- package/contexts/LanguageContext.tsx +13 -13
- package/contexts/LayoutContext.test.tsx +11 -11
- package/contexts/LayoutContext.tsx +29 -29
- package/contexts/ThemeContext.tsx +26 -26
- package/contexts/theme-data.ts +4 -4
- package/dist/{AssistantChart-CVzmmhx4.js → AssistantChart-C_hwFRRr.js} +4 -4
- package/dist/{AssistantChart-BAx9VQvb.cjs → AssistantChart-CldVCVDe.cjs} +311 -94
- package/dist/{AssistantChart-CVko2A1W.js → AssistantChart-Cu3m7RBo.js} +314 -97
- package/dist/{AssistantChart-9w31gdAb.cjs → AssistantChart-DoZCyS5r.cjs} +4 -4
- package/dist/AudioPlayer-B1lt5cPl.cjs +989 -0
- package/dist/AudioPlayer-BZ7bibzU.cjs +982 -0
- package/dist/AudioPlayer-C12BjQBV.cjs +997 -0
- package/dist/AudioPlayer-DMcG_c7L.js +990 -0
- package/dist/AudioPlayer-DcFKRJE_.js +998 -0
- package/dist/AudioPlayer-e8LfNoqO.js +983 -0
- package/dist/{xertica-assistant-Qp3ydksa.cjs → CodeBlock-7TTgmdGG.cjs} +263 -51
- package/dist/{xertica-assistant-gnCJdcZY.js → CodeBlock-BeSt1h5P.js} +219 -7
- package/dist/CodeBlock-BgfYL_rD.cjs +2094 -0
- package/dist/CodeBlock-BlcqlA9M.cjs +2094 -0
- package/dist/CodeBlock-Bnmeu5ez.cjs +2094 -0
- package/dist/CodeBlock-BtfPlbAI.js +2078 -0
- package/dist/CodeBlock-CIySIuYr.js +2078 -0
- package/dist/CodeBlock-CuPtUM-7.cjs +2094 -0
- package/dist/CodeBlock-D6ffWXgc.js +2078 -0
- package/dist/CodeBlock-D8dcwbit.cjs +2094 -0
- package/dist/CodeBlock-DMZrFnlw.cjs +2094 -0
- package/dist/CodeBlock-DlBehYN8.js +2078 -0
- package/dist/CodeBlock-DnYNI8rQ.js +2078 -0
- package/dist/CodeBlock-DvKWbSnE.cjs +2094 -0
- package/dist/CodeBlock-DwMCfkFY.js +2078 -0
- package/dist/CodeBlock-Dy6CNYyj.js +2078 -0
- package/dist/CodeBlock-U1pPOQI7.cjs +2094 -0
- package/dist/CodeBlock-f_GpNhEB.js +2078 -0
- package/dist/CodeBlock-oB6u8nI1.js +2078 -0
- package/dist/CodeBlock-tZC31B73.cjs +2094 -0
- package/dist/ImageWithFallback-CGtidP6B.cjs +4542 -0
- package/dist/ImageWithFallback-lsg3pdFg.js +4508 -0
- package/dist/LanguageSelector-B5YfbHra.js +231 -0
- package/dist/LanguageSelector-D6uacAIM.cjs +230 -0
- package/dist/LayoutContext-BAql6ZRY.js +97 -0
- package/dist/LayoutContext-BvK-ggDa.cjs +96 -0
- package/dist/ThemeContext-BoH4NLfN.js +734 -0
- package/dist/{ThemeContext-BbBNoFTG.js → ThemeContext-C2EwAPDt.js} +2 -2
- package/dist/ThemeContext-r69W20Xg.cjs +733 -0
- package/dist/{ThemeContext-Cmr8Ex8H.cjs → ThemeContext-vTjumZeM.cjs} +2 -2
- package/dist/{VerifyEmailPage-BE-L9mB7.js → VerifyEmailPage-C0c2e5n0.js} +7 -7
- package/dist/{VerifyEmailPage-DMBh4NM9.cjs → VerifyEmailPage-CYXtbKi3.cjs} +1 -1
- package/dist/{VerifyEmailPage-CR7kb5df.cjs → VerifyEmailPage-Cwi3kbol.cjs} +7 -7
- package/dist/{VerifyEmailPage-CdYPSJoO.js → VerifyEmailPage-DvMLZgFt.js} +1 -1
- package/dist/XerticaOrbe-KL1RBHzw.cjs +1354 -0
- package/dist/XerticaOrbe-zwS1p2a8.js +1355 -0
- package/dist/XerticaProvider-6btlAlzc.js +17 -0
- package/dist/XerticaProvider-BNoNOxQ5.cjs +16 -0
- package/dist/XerticaProvider-BlY2limY.cjs +38 -0
- package/dist/{XerticaProvider-BITjgC5p.js → XerticaProvider-CEoWMTxu.js} +2 -2
- package/dist/{XerticaProvider-By8q3Roe.cjs → XerticaProvider-CllrbMEJ.cjs} +2 -2
- package/dist/XerticaProvider-DDuiIcKo.js +39 -0
- package/dist/XerticaProvider-cI9hSs27.cjs +38 -0
- package/dist/XerticaProvider-hSwhNQex.js +39 -0
- package/dist/{alert-dialog-yckpaOpy.cjs → alert-dialog-DSKByiKZ.cjs} +3 -3
- package/dist/{alert-dialog-iDe5VE5o.js → alert-dialog-s-vmNkJ_.js} +3 -3
- package/dist/assistant.cjs.js +2 -1
- package/dist/assistant.es.js +3 -2
- package/dist/brand.cjs.js +1 -1
- package/dist/brand.es.js +1 -1
- package/dist/breadcrumb-CqJ7bHY5.js +161 -0
- package/dist/breadcrumb-m9Hb2_XN.cjs +177 -0
- package/dist/cli.js +14 -8
- package/dist/components/assistant/xertica-assistant/index.d.ts +2 -0
- package/dist/components/assistant/xertica-assistant/use-assistant.d.ts +126 -0
- package/dist/components/assistant/xertica-assistant/xertica-assistant.d.ts +7 -2
- package/dist/components/blocks/audio-player/AudioPlayer.d.ts +35 -0
- package/dist/components/blocks/audio-player/index.d.ts +1 -0
- package/dist/components/blocks/document-editor/DocumentEditor.d.ts +26 -0
- package/dist/components/blocks/document-editor/index.d.ts +1 -0
- package/dist/components/blocks/podcast-player/PodcastPlayer.d.ts +41 -0
- package/dist/components/blocks/podcast-player/index.d.ts +1 -0
- package/dist/components/layout/sidebar/index.d.ts +2 -0
- package/dist/components/layout/sidebar/sidebar.d.ts +80 -0
- package/dist/components/layout/sidebar/use-sidebar.d.ts +22 -0
- package/dist/components/shared/layout-constants.d.ts +1 -1
- package/dist/components/ui/button/button.d.ts +1 -1
- package/dist/components/ui/chart/chart.d.ts +162 -5
- package/dist/components/ui/file-upload/file-upload.d.ts +2 -0
- package/dist/components/ui/file-upload/index.d.ts +1 -0
- package/dist/components/ui/file-upload/use-file-upload.d.ts +49 -0
- package/dist/components/ui/pagination/index.d.ts +2 -0
- package/dist/components/ui/pagination/use-pagination.d.ts +78 -0
- package/dist/components/ui/rich-text-editor/index.d.ts +2 -0
- package/dist/components/ui/rich-text-editor/use-rich-text-editor.d.ts +107 -0
- package/dist/components/ui/stepper/index.d.ts +3 -1
- package/dist/components/ui/stepper/stepper.d.ts +2 -2
- package/dist/components/ui/stepper/use-stepper.d.ts +60 -0
- package/dist/components/ui/tree-view/index.d.ts +4 -1
- package/dist/components/ui/tree-view/tree-view.d.ts +4 -6
- package/dist/components/ui/tree-view/use-tree-view.d.ts +60 -0
- package/dist/dropdown-menu-BDB5CmQs.cjs +247 -0
- package/dist/dropdown-menu-DQidbKBD.js +231 -0
- package/dist/google-maps-loader-BFWp6VPd.js +287 -0
- package/dist/{google-maps-loader-t2IlYBzw.js → google-maps-loader-CTYySAun.js} +4 -0
- package/dist/{google-maps-loader-BqsYL48U.cjs → google-maps-loader-Y-QkD-Li.cjs} +5 -0
- package/dist/google-maps-loader-eS3uQ5TA.cjs +287 -0
- package/dist/header-Cgy6vYPk.cjs +731 -0
- package/dist/header-DRlT4jgI.js +715 -0
- package/dist/header-Dux00SI4.cjs +731 -0
- package/dist/header-EkGKXPsD.js +715 -0
- package/dist/header-WfEywpyc.cjs +731 -0
- package/dist/header-tifNQn2U.js +715 -0
- package/dist/hooks.cjs.js +1 -1
- package/dist/hooks.es.js +1 -1
- package/dist/index-BhapVLVj.js +8 -0
- package/dist/{index-D3RLKRAs.cjs → index-COtD8bRW.cjs} +1 -1
- package/dist/index-D6fxYEY8.cjs +7 -0
- package/dist/index-DW5tYe26.js +8 -0
- package/dist/index.cjs.js +19 -8
- package/dist/index.es.js +39 -28
- package/dist/index.umd.js +1043 -470
- package/dist/input-2R4loU86.js +127 -0
- package/dist/input-DWANSKGb.cjs +145 -0
- package/dist/layout.cjs.js +89 -1
- package/dist/layout.es.js +90 -2
- package/dist/pages.cjs.js +1 -1
- package/dist/pages.es.js +1 -1
- package/dist/rich-text-editor-0mraWT5y.cjs +2376 -0
- package/dist/rich-text-editor-B6jMRLzk.cjs +1939 -0
- package/dist/rich-text-editor-B8_oYcIR.js +1730 -0
- package/dist/rich-text-editor-B9UbSXNb.js +1203 -0
- package/dist/rich-text-editor-BYuRBNBU.js +2373 -0
- package/dist/rich-text-editor-Bb9pySTs.cjs +2374 -0
- package/dist/rich-text-editor-BcL6L3cm.cjs +2374 -0
- package/dist/rich-text-editor-BoVZYtTs.cjs +2391 -0
- package/dist/rich-text-editor-CPV1lEPH.cjs +1748 -0
- package/dist/rich-text-editor-CoKqbCtu.cjs +1799 -0
- package/dist/rich-text-editor-Cw56T_mB.js +2356 -0
- package/dist/rich-text-editor-Cyt8qs2b.js +1921 -0
- package/dist/rich-text-editor-D6H84OcX.cjs +1220 -0
- package/dist/rich-text-editor-D76gD-QI.js +2328 -0
- package/dist/rich-text-editor-DKkokOnA.js +1781 -0
- package/dist/rich-text-editor-DNsdpN64.cjs +2359 -0
- package/dist/rich-text-editor-DfG8bCyY.js +2358 -0
- package/dist/rich-text-editor-DgF8s7xW.js +2949 -0
- package/dist/rich-text-editor-Dxjw31Z4.js +2341 -0
- package/dist/rich-text-editor-DzP0Epmb.js +2356 -0
- package/dist/rich-text-editor-mWoaSCE4.cjs +2966 -0
- package/dist/rich-text-editor-skplNlBM.cjs +2345 -0
- package/dist/select-Bkbr0f-Z.cjs +162 -0
- package/dist/select-CvIVdX2n.js +145 -0
- package/dist/sidebar-CK_0ZQHj.cjs +803 -0
- package/dist/sidebar-CUuOvYhK.js +787 -0
- package/dist/slider-Bc5Hd0y1.js +56 -0
- package/dist/slider-N7hFFj6X.cjs +73 -0
- package/dist/tooltip-Ded96neP.cjs +137 -0
- package/dist/tooltip-HDOoD2-0.js +120 -0
- package/dist/ui.cjs.js +14 -4
- package/dist/ui.es.js +26 -16
- package/dist/use-mobile-B0hNy_Y6.cjs +4303 -0
- package/dist/use-mobile-BXuYROXM.js +4202 -0
- package/dist/use-mobile-Bbd51ASU.cjs +4392 -0
- package/dist/use-mobile-Bk6CX-TC.js +4359 -0
- package/dist/use-mobile-BvYdisLP.js +4202 -0
- package/dist/use-mobile-BzuxjzNX.cjs +4392 -0
- package/dist/use-mobile-CG2-SdXV.cjs +4235 -0
- package/dist/use-mobile-CKb5pqTs.js +4269 -0
- package/dist/use-mobile-CYuAuGDl.js +4202 -0
- package/dist/use-mobile-CaENcqm-.js +4508 -0
- package/dist/use-mobile-CbrYgJGJ.js +4203 -0
- package/dist/use-mobile-DMOvImGQ.cjs +4542 -0
- package/dist/use-mobile-DRB3BQgD.cjs +4235 -0
- package/dist/use-mobile-DZvv7QMR.js +4359 -0
- package/dist/use-mobile-DdI_TXam.cjs +4235 -0
- package/dist/use-mobile-DlceKf8a.js +4359 -0
- package/dist/use-mobile-DsOnow1o.cjs +4236 -0
- package/dist/use-mobile-Kcj6jSnK.cjs +4392 -0
- package/dist/use-mobile-bnKcua_i.js +4202 -0
- package/dist/use-mobile-ncXBeE2z.cjs +4235 -0
- package/dist/{xertica-assistant-B1IaHXnB.cjs → xertica-assistant-dyP7KHM5.cjs} +533 -392
- package/dist/{xertica-assistant-DPsESB6t.js → xertica-assistant-yX1CFBBo.js} +535 -394
- package/dist/xertica-ui.css +2 -2
- package/docs/ai-usage.md +28 -10
- package/docs/architecture.md +76 -0
- package/docs/components/assistant.md +159 -0
- package/docs/components/calendar.md +154 -154
- package/docs/components/card-patterns.md +337 -337
- package/docs/components/card.md +235 -235
- package/docs/components/chart.md +354 -39
- package/docs/components/file-upload.md +119 -2
- package/docs/components/map.md +84 -84
- package/docs/components/pagination.md +187 -0
- package/docs/components/rich-text-editor.md +164 -0
- package/docs/components/sidebar.md +153 -4
- package/docs/components/stepper.md +157 -12
- package/docs/components/tree-view.md +164 -6
- package/docs/components/xertica-provider.md +24 -24
- package/docs/decision-tree.md +287 -287
- package/docs/getting-started.md +1 -1
- package/docs/guidelines.md +14 -8
- package/docs/layout.md +2 -2
- package/docs/llms.md +4 -4
- package/guidelines/Guidelines.md +252 -250
- package/hooks/useTheme.ts +3 -3
- package/imports/Podcast.tsx +388 -388
- package/imports/XerticaAi.tsx +45 -45
- package/imports/XerticaX.tsx +19 -19
- package/imports/svg-aueiaqngck.ts +11 -11
- package/imports/svg-v9krss1ozd.ts +16 -16
- package/imports/svg-vhrdofe3qe.ts +5 -5
- package/llms-compact.txt +327 -327
- package/llms.txt +160 -160
- package/package.json +203 -203
- package/styles/xertica/app-overrides/chat.css +61 -61
- package/styles/xertica/app-overrides/scrollbar.css +33 -33
- package/styles/xertica/integrations/google-maps.css +76 -76
- package/styles/xertica/integrations/sonner.css +73 -73
- package/styles/xertica/tokens.css +41 -12
- package/templates/CLAUDE.md +182 -172
- package/templates/guidelines/Guidelines.md +325 -313
- package/templates/package.json +3 -3
- package/templates/src/features/auth/index.ts +4 -4
- package/templates/src/features/auth/ui/AuthPageShell.tsx +34 -34
- package/templates/src/features/auth/ui/ForgotPasswordContent.tsx +70 -70
- package/templates/src/features/auth/ui/LoginContent.tsx +90 -90
- package/templates/src/features/auth/ui/ResetPasswordContent.tsx +151 -151
- package/templates/src/features/auth/ui/SocialLoginButtons.tsx +59 -59
- package/templates/src/features/auth/ui/VerifyEmailContent.tsx +82 -82
- package/templates/src/features/home/index.ts +1 -1
- package/templates/src/features/home/ui/HomeContent.tsx +100 -100
- package/templates/src/features/template/index.ts +5 -5
- package/templates/src/features/template/ui/CrudTemplate.tsx +3 -3
- package/templates/src/features/template/ui/DashboardTemplate.tsx +3 -3
- package/templates/src/features/template/ui/FormTemplate.tsx +120 -120
- package/templates/src/features/template/ui/LoginTemplate.tsx +3 -3
- package/templates/src/pages/AssistantPage.tsx +328 -328
- package/templates/src/pages/ForgotPasswordPage.tsx +6 -6
- package/templates/src/pages/HomePage.tsx +57 -57
- package/templates/src/pages/LoginPage.tsx +10 -10
- package/templates/src/pages/ResetPasswordPage.tsx +6 -6
- package/templates/src/pages/TemplatePage.tsx +30 -30
- package/templates/src/pages/VerifyEmailPage.tsx +6 -6
- package/templates/src/shared/config/navigation.ts +20 -20
- package/templates/src/shared/lib/auth.ts +20 -20
- package/templates/src/shared/types/auth.ts +3 -3
- package/templates/src/styles/xertica/tokens.css +39 -10
- package/templates/tsconfig.json +5 -5
- package/utils/gemini.ts +140 -140
- package/dist/VerifyEmailPage-Bae2cBXT.cjs +0 -2827
- package/dist/VerifyEmailPage-CbgjOF0v.js +0 -2828
- package/dist/index-CkTUgOwX.js +0 -8
|
@@ -1,445 +1,445 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
|
-
import React from "react"
|
|
3
|
-
import {
|
|
4
|
-
BarChart2, Bell, Briefcase, Download, FileText,
|
|
5
|
-
Globe, LayoutDashboard, Lock, MoreHorizontal, Package,
|
|
6
|
-
Plus, RefreshCw, Share2, Shield, Sparkles, Users, Zap,
|
|
7
|
-
} from "lucide-react"
|
|
8
|
-
import { Button } from "../../ui/button"
|
|
9
|
-
import { ChartCard, ChartConfig, DashboardBarChart, DashboardLineChart } from "../../ui/chart"
|
|
10
|
-
import { ActivityCard } from "./ActivityCard"
|
|
11
|
-
import { FeatureCard } from "./FeatureCard"
|
|
12
|
-
import { NotificationCard } from "./NotificationCard"
|
|
13
|
-
import { ProfileCard } from "./ProfileCard"
|
|
14
|
-
import { ProjectCard } from "./ProjectCard"
|
|
15
|
-
import { QuickActionCard } from "./QuickActionCard"
|
|
16
|
-
|
|
17
|
-
const meta: Meta = {
|
|
18
|
-
title: "Blocks/Card Patterns",
|
|
19
|
-
decorators: [
|
|
20
|
-
(Story) => (
|
|
21
|
-
<div className="bg-muted rounded-xl p-8 w-full flex items-start justify-center">
|
|
22
|
-
<Story />
|
|
23
|
-
</div>
|
|
24
|
-
),
|
|
25
|
-
],
|
|
26
|
-
}
|
|
27
|
-
export default meta
|
|
28
|
-
|
|
29
|
-
// ─── ActivityCard ─────────────────────────────────────────────────────────────
|
|
30
|
-
|
|
31
|
-
const ACTIVITY_ITEMS = [
|
|
32
|
-
{ id: "1", user: { name: "Ana Souza", initials: "AS" }, action: "criou o projeto", target: "Xertica Dashboard", time: "há 2 min", type: "create" as const },
|
|
33
|
-
{ id: "2", user: { name: "Bruno Lima", initials: "BL" }, action: "atualizou", target: "componente Button", time: "há 8 min", type: "update" as const },
|
|
34
|
-
{ id: "3", user: { name: "Carla Rocha", initials: "CR" }, action: "comentou em", target: "PR #42", time: "há 15 min", type: "comment" as const },
|
|
35
|
-
{ id: "4", user: { name: "Diego Ferraz", initials: "DF" }, action: "fez deploy de", target: "v2.1.0", time: "há 1h", type: "deploy" as const },
|
|
36
|
-
{ id: "5", user: { name: "Elena Moura", initials: "EM" }, action: "removeu", target: "badge legado", time: "há 2h", type: "delete" as const },
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
export const Activity: StoryObj = {
|
|
40
|
-
render: () => (
|
|
41
|
-
<ActivityCard
|
|
42
|
-
items={ACTIVITY_ITEMS}
|
|
43
|
-
action={<Button variant="ghost" size="sm"><MoreHorizontal className="size-4" /></Button>}
|
|
44
|
-
className="max-w-md"
|
|
45
|
-
/>
|
|
46
|
-
),
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// ─── ProfileCard ──────────────────────────────────────────────────────────────
|
|
50
|
-
|
|
51
|
-
export const Profile: StoryObj = {
|
|
52
|
-
render: () => (
|
|
53
|
-
<ProfileCard
|
|
54
|
-
name="Ana Souza"
|
|
55
|
-
role="Senior Frontend Engineer"
|
|
56
|
-
department="Design System"
|
|
57
|
-
initials="AS"
|
|
58
|
-
status="online"
|
|
59
|
-
stats={[
|
|
60
|
-
{ label: "Projetos", value: 12 },
|
|
61
|
-
{ label: "Commits", value: 348 },
|
|
62
|
-
{ label: "Reviews", value: 57 },
|
|
63
|
-
]}
|
|
64
|
-
primaryAction={{ label: "Ver Perfil" }}
|
|
65
|
-
secondaryAction={{ label: "Mensagem" }}
|
|
66
|
-
className="w-64"
|
|
67
|
-
/>
|
|
68
|
-
),
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// ─── ProjectCard ──────────────────────────────────────────────────────────────
|
|
72
|
-
|
|
73
|
-
const MEMBERS = [
|
|
74
|
-
{ name: "Ana", initials: "AS" },
|
|
75
|
-
{ name: "Bruno", initials: "BL" },
|
|
76
|
-
{ name: "Carla", initials: "CR" },
|
|
77
|
-
{ name: "Diego", initials: "DF" },
|
|
78
|
-
{ name: "Elena", initials: "EM" },
|
|
79
|
-
]
|
|
80
|
-
|
|
81
|
-
export const Project: StoryObj = {
|
|
82
|
-
render: () => (
|
|
83
|
-
<div className="grid gap-4 md:grid-cols-2 w-full max-w-2xl">
|
|
84
|
-
<ProjectCard
|
|
85
|
-
title="Xertica Dashboard v3"
|
|
86
|
-
description="Redesign completo do painel com novos componentes."
|
|
87
|
-
status="active"
|
|
88
|
-
progress={68}
|
|
89
|
-
dueDate="Vence em 12 dias"
|
|
90
|
-
members={MEMBERS}
|
|
91
|
-
/>
|
|
92
|
-
<ProjectCard
|
|
93
|
-
title="Design System Tokens"
|
|
94
|
-
description="Migração dos tokens de design para CSS variables."
|
|
95
|
-
status="review"
|
|
96
|
-
progress={91}
|
|
97
|
-
dueDate="Vence amanhã"
|
|
98
|
-
members={MEMBERS.slice(0, 2)}
|
|
99
|
-
/>
|
|
100
|
-
<ProjectCard
|
|
101
|
-
title="App Mobile"
|
|
102
|
-
description="Versão móvel do Xertica com React Native."
|
|
103
|
-
status="at-risk"
|
|
104
|
-
progress={34}
|
|
105
|
-
dueDate="Atrasado 3 dias"
|
|
106
|
-
members={MEMBERS.slice(0, 3)}
|
|
107
|
-
/>
|
|
108
|
-
<ProjectCard
|
|
109
|
-
title="Onboarding Flow"
|
|
110
|
-
description="Fluxo de cadastro e primeiros passos."
|
|
111
|
-
status="done"
|
|
112
|
-
progress={100}
|
|
113
|
-
dueDate="Entregue"
|
|
114
|
-
members={MEMBERS.slice(0, 4)}
|
|
115
|
-
/>
|
|
116
|
-
</div>
|
|
117
|
-
),
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// ─── QuickActionCard ──────────────────────────────────────────────────────────
|
|
121
|
-
|
|
122
|
-
export const QuickActions: StoryObj = {
|
|
123
|
-
render: () => (
|
|
124
|
-
<div className="grid gap-4 grid-cols-2 md:grid-cols-3 max-w-2xl w-full">
|
|
125
|
-
<QuickActionCard
|
|
126
|
-
title="Novo Relatório"
|
|
127
|
-
description="Gere relatórios personalizados de métricas."
|
|
128
|
-
icon={<FileText className="size-5" />}
|
|
129
|
-
actionLabel="Criar Relatório"
|
|
130
|
-
/>
|
|
131
|
-
<QuickActionCard
|
|
132
|
-
title="Convidar Membro"
|
|
133
|
-
description="Adicione novos colaboradores ao workspace."
|
|
134
|
-
icon={<Users className="size-5" />}
|
|
135
|
-
actionLabel="Convidar"
|
|
136
|
-
actionVariant="outline"
|
|
137
|
-
badge="Novo"
|
|
138
|
-
badgeVariant="success"
|
|
139
|
-
/>
|
|
140
|
-
<QuickActionCard
|
|
141
|
-
title="Exportar Dados"
|
|
142
|
-
description="Exporte suas métricas em CSV ou JSON."
|
|
143
|
-
icon={<Download className="size-5" />}
|
|
144
|
-
actionLabel="Exportar"
|
|
145
|
-
actionVariant="secondary"
|
|
146
|
-
/>
|
|
147
|
-
<QuickActionCard
|
|
148
|
-
title="Automação"
|
|
149
|
-
description="Configure gatilhos e ações automáticas."
|
|
150
|
-
icon={<Zap className="size-5" />}
|
|
151
|
-
actionLabel="Configurar"
|
|
152
|
-
badge="Pro"
|
|
153
|
-
badgeVariant="warning"
|
|
154
|
-
/>
|
|
155
|
-
<QuickActionCard
|
|
156
|
-
title="Compartilhar"
|
|
157
|
-
description="Compartilhe o dashboard com sua equipe."
|
|
158
|
-
icon={<Share2 className="size-5" />}
|
|
159
|
-
actionLabel="Compartilhar"
|
|
160
|
-
actionVariant="outline"
|
|
161
|
-
/>
|
|
162
|
-
<QuickActionCard
|
|
163
|
-
title="Novo Projeto"
|
|
164
|
-
description="Inicie um projeto a partir de um template."
|
|
165
|
-
icon={<Plus className="size-5" />}
|
|
166
|
-
actionLabel="Criar Projeto"
|
|
167
|
-
badge="Beta"
|
|
168
|
-
badgeVariant="info"
|
|
169
|
-
/>
|
|
170
|
-
</div>
|
|
171
|
-
),
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// ─── NotificationCard ─────────────────────────────────────────────────────────
|
|
175
|
-
|
|
176
|
-
const NOTIFICATIONS = [
|
|
177
|
-
{ id: "1", title: "Deploy concluído", message: "v2.1.0 foi publicado com sucesso em produção.", time: "há 2 min", read: false, type: "success" as const },
|
|
178
|
-
{ id: "2", title: "Revisão solicitada", message: "Ana pediu revisão no PR #42: Novos tokens de cor.", time: "há 10 min", read: false, type: "info" as const },
|
|
179
|
-
{ id: "3", title: "Erro em produção", message: "Serviço de auth com falha intermitente — 503.", time: "há 1h", read: false, type: "error" as const },
|
|
180
|
-
{ id: "4", title: "Licença expirando", message: "Sua licença Pro expira em 7 dias. Renove para continuar.", time: "há 3h", read: true, type: "warning" as const },
|
|
181
|
-
]
|
|
182
|
-
|
|
183
|
-
export const Notifications: StoryObj = {
|
|
184
|
-
render: () => (
|
|
185
|
-
<NotificationCard
|
|
186
|
-
items={NOTIFICATIONS}
|
|
187
|
-
onMarkAllRead={() => {}}
|
|
188
|
-
onViewAll={() => {}}
|
|
189
|
-
className="max-w-sm"
|
|
190
|
-
/>
|
|
191
|
-
),
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// ─── ChartCard ────────────────────────────────────────────────────────────────
|
|
195
|
-
|
|
196
|
-
const REVENUE_DATA = [
|
|
197
|
-
{ month: "Jan", receita: 18000, despesa: 12000 },
|
|
198
|
-
{ month: "Fev", receita: 22000, despesa: 14000 },
|
|
199
|
-
{ month: "Mar", receita: 19500, despesa: 13500 },
|
|
200
|
-
{ month: "Abr", receita: 27000, despesa: 15000 },
|
|
201
|
-
{ month: "Mai", receita: 31000, despesa: 17500 },
|
|
202
|
-
{ month: "Jun", receita: 28500, despesa: 16000 },
|
|
203
|
-
]
|
|
204
|
-
|
|
205
|
-
const REVENUE_CONFIG: ChartConfig = {
|
|
206
|
-
receita: { label: "Receita", color: "var(--chart-1)" },
|
|
207
|
-
despesa: { label: "Despesa", color: "var(--chart-5)" },
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const CHART_SERIES = [
|
|
211
|
-
{ key: "receita", label: "Receita" },
|
|
212
|
-
{ key: "despesa", label: "Despesa" },
|
|
213
|
-
]
|
|
214
|
-
|
|
215
|
-
export const Chart: StoryObj = {
|
|
216
|
-
render: () => (
|
|
217
|
-
<ChartCard
|
|
218
|
-
title="Receita vs Despesa"
|
|
219
|
-
description="Últimos 6 meses"
|
|
220
|
-
action={
|
|
221
|
-
<Button variant="ghost" size="sm">
|
|
222
|
-
<RefreshCw className="size-4" />
|
|
223
|
-
</Button>
|
|
224
|
-
}
|
|
225
|
-
footer="Dados atualizados em tempo real via API financeira."
|
|
226
|
-
className="max-w-xl w-full"
|
|
227
|
-
contentClassName="h-[260px]"
|
|
228
|
-
>
|
|
229
|
-
<DashboardBarChart
|
|
230
|
-
data={REVENUE_DATA}
|
|
231
|
-
config={REVENUE_CONFIG}
|
|
232
|
-
series={CHART_SERIES}
|
|
233
|
-
indexKey="month"
|
|
234
|
-
barSize="md"
|
|
235
|
-
className="h-full w-full"
|
|
236
|
-
/>
|
|
237
|
-
</ChartCard>
|
|
238
|
-
),
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// ─── Dashboard completo ───────────────────────────────────────────────────────
|
|
242
|
-
|
|
243
|
-
const LINE_DATA = [
|
|
244
|
-
{ dia: "Seg", usuarios: 240 },
|
|
245
|
-
{ dia: "Ter", usuarios: 380 },
|
|
246
|
-
{ dia: "Qua", usuarios: 310 },
|
|
247
|
-
{ dia: "Qui", usuarios: 470 },
|
|
248
|
-
{ dia: "Sex", usuarios: 520 },
|
|
249
|
-
{ dia: "Sáb", usuarios: 290 },
|
|
250
|
-
{ dia: "Dom", usuarios: 180 },
|
|
251
|
-
]
|
|
252
|
-
|
|
253
|
-
const LINE_CONFIG: ChartConfig = {
|
|
254
|
-
usuarios: { label: "Usuários", color: "var(--chart-1)" },
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
export const DashboardLayout: StoryObj = {
|
|
258
|
-
render: () => (
|
|
259
|
-
<div className="grid gap-4 w-full max-w-5xl">
|
|
260
|
-
<div className="grid gap-4 md:grid-cols-3">
|
|
261
|
-
<QuickActionCard
|
|
262
|
-
title="Novo Projeto"
|
|
263
|
-
description="Inicie a partir de um template."
|
|
264
|
-
icon={<Briefcase className="size-5" />}
|
|
265
|
-
actionLabel="Criar"
|
|
266
|
-
/>
|
|
267
|
-
<QuickActionCard
|
|
268
|
-
title="Convidar Equipe"
|
|
269
|
-
description="Adicione membros ao workspace."
|
|
270
|
-
icon={<Users className="size-5" />}
|
|
271
|
-
actionLabel="Convidar"
|
|
272
|
-
actionVariant="outline"
|
|
273
|
-
/>
|
|
274
|
-
<QuickActionCard
|
|
275
|
-
title="Ver Relatórios"
|
|
276
|
-
description="Métricas e KPIs do período."
|
|
277
|
-
icon={<BarChart2 className="size-5" />}
|
|
278
|
-
actionLabel="Abrir"
|
|
279
|
-
actionVariant="secondary"
|
|
280
|
-
badge="Novo"
|
|
281
|
-
badgeVariant="success"
|
|
282
|
-
/>
|
|
283
|
-
</div>
|
|
284
|
-
|
|
285
|
-
<div className="grid gap-4 md:grid-cols-3">
|
|
286
|
-
<div className="md:col-span-2">
|
|
287
|
-
<ChartCard
|
|
288
|
-
title="Usuários Ativos"
|
|
289
|
-
description="Esta semana"
|
|
290
|
-
contentClassName="h-[220px]"
|
|
291
|
-
>
|
|
292
|
-
<DashboardLineChart
|
|
293
|
-
data={LINE_DATA}
|
|
294
|
-
config={LINE_CONFIG}
|
|
295
|
-
series={[{ key: "usuarios", label: "Usuários" }]}
|
|
296
|
-
indexKey="dia"
|
|
297
|
-
className="h-full w-full"
|
|
298
|
-
/>
|
|
299
|
-
</ChartCard>
|
|
300
|
-
</div>
|
|
301
|
-
<NotificationCard
|
|
302
|
-
title="Alertas"
|
|
303
|
-
items={NOTIFICATIONS.slice(0, 3)}
|
|
304
|
-
onViewAll={() => {}}
|
|
305
|
-
/>
|
|
306
|
-
</div>
|
|
307
|
-
|
|
308
|
-
<div className="grid gap-4 md:grid-cols-2">
|
|
309
|
-
<ActivityCard
|
|
310
|
-
items={ACTIVITY_ITEMS}
|
|
311
|
-
className="h-full"
|
|
312
|
-
/>
|
|
313
|
-
<div className="grid gap-4">
|
|
314
|
-
<ProfileCard
|
|
315
|
-
name="Ana Souza"
|
|
316
|
-
role="Product Designer"
|
|
317
|
-
initials="AS"
|
|
318
|
-
status="online"
|
|
319
|
-
stats={[
|
|
320
|
-
{ label: "Projetos", value: 12 },
|
|
321
|
-
{ label: "Tarefas", value: 34 },
|
|
322
|
-
{ label: "Reviews", value: 8 },
|
|
323
|
-
]}
|
|
324
|
-
/>
|
|
325
|
-
<ProjectCard
|
|
326
|
-
title="Xertica Dashboard v3"
|
|
327
|
-
status="active"
|
|
328
|
-
progress={68}
|
|
329
|
-
dueDate="12 dias restantes"
|
|
330
|
-
members={MEMBERS.slice(0, 3)}
|
|
331
|
-
/>
|
|
332
|
-
</div>
|
|
333
|
-
</div>
|
|
334
|
-
</div>
|
|
335
|
-
),
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// ─── FeatureCard ──────────────────────────────────────────────────────────────
|
|
339
|
-
|
|
340
|
-
export const Feature: StoryObj = {
|
|
341
|
-
render: () => (
|
|
342
|
-
<FeatureCard
|
|
343
|
-
title="Template CLI"
|
|
344
|
-
description="Página de template pronta para uso CLI com todos os componentes configurados."
|
|
345
|
-
icon={<FileText />}
|
|
346
|
-
color="chart-2"
|
|
347
|
-
badge="Novo"
|
|
348
|
-
actionLabel="Visualizar"
|
|
349
|
-
/>
|
|
350
|
-
),
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
export const FeatureColors: StoryObj = {
|
|
354
|
-
render: () => (
|
|
355
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 w-full max-w-4xl">
|
|
356
|
-
<FeatureCard
|
|
357
|
-
title="Dashboard"
|
|
358
|
-
description="Visualize métricas e KPIs em tempo real com gráficos interativos."
|
|
359
|
-
icon={<LayoutDashboard />}
|
|
360
|
-
color="primary"
|
|
361
|
-
badge="Popular"
|
|
362
|
-
badgeVariant="default"
|
|
363
|
-
actionLabel="Abrir"
|
|
364
|
-
/>
|
|
365
|
-
<FeatureCard
|
|
366
|
-
title="Integrações"
|
|
367
|
-
description="Conecte APIs externas e serviços de terceiros com um clique."
|
|
368
|
-
icon={<Globe />}
|
|
369
|
-
color="chart-1"
|
|
370
|
-
actionLabel="Explorar"
|
|
371
|
-
/>
|
|
372
|
-
<FeatureCard
|
|
373
|
-
title="Automação"
|
|
374
|
-
description="Crie fluxos automáticos com gatilhos e ações personalizadas."
|
|
375
|
-
icon={<Zap />}
|
|
376
|
-
color="chart-2"
|
|
377
|
-
badge="Beta"
|
|
378
|
-
badgeVariant="warning"
|
|
379
|
-
actionLabel="Configurar"
|
|
380
|
-
/>
|
|
381
|
-
<FeatureCard
|
|
382
|
-
title="IA Generativa"
|
|
383
|
-
description="Potencialize sua equipe com assistentes inteligentes e geração de conteúdo."
|
|
384
|
-
icon={<Sparkles />}
|
|
385
|
-
color="chart-3"
|
|
386
|
-
badge="Pro"
|
|
387
|
-
badgeVariant="info"
|
|
388
|
-
actionLabel="Ativar"
|
|
389
|
-
/>
|
|
390
|
-
<FeatureCard
|
|
391
|
-
title="Equipes"
|
|
392
|
-
description="Gerencie membros, permissões e workspaces de forma centralizada."
|
|
393
|
-
icon={<Users />}
|
|
394
|
-
color="chart-4"
|
|
395
|
-
actionLabel="Gerenciar"
|
|
396
|
-
/>
|
|
397
|
-
<FeatureCard
|
|
398
|
-
title="Pacotes"
|
|
399
|
-
description="Publique e distribua seus componentes como biblioteca reutilizável."
|
|
400
|
-
icon={<Package />}
|
|
401
|
-
color="chart-5"
|
|
402
|
-
actionLabel="Publicar"
|
|
403
|
-
/>
|
|
404
|
-
</div>
|
|
405
|
-
),
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
export const FeatureSemanticColors: StoryObj = {
|
|
409
|
-
render: () => (
|
|
410
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 w-full max-w-4xl">
|
|
411
|
-
<FeatureCard
|
|
412
|
-
title="Segurança"
|
|
413
|
-
description="Proteção avançada com autenticação multifator e logs de auditoria."
|
|
414
|
-
icon={<Shield />}
|
|
415
|
-
color="success"
|
|
416
|
-
actionLabel="Configurar"
|
|
417
|
-
/>
|
|
418
|
-
<FeatureCard
|
|
419
|
-
title="Insights"
|
|
420
|
-
description="Análises aprofundadas com relatórios automáticos e alertas inteligentes."
|
|
421
|
-
icon={<BarChart2 />}
|
|
422
|
-
color="info"
|
|
423
|
-
actionLabel="Ver Dados"
|
|
424
|
-
/>
|
|
425
|
-
<FeatureCard
|
|
426
|
-
title="Permissões"
|
|
427
|
-
description="Controle granular de acessos por função, projeto e recurso."
|
|
428
|
-
icon={<Lock />}
|
|
429
|
-
color="warning"
|
|
430
|
-
badge="Atenção"
|
|
431
|
-
badgeVariant="warning"
|
|
432
|
-
actionLabel="Revisar"
|
|
433
|
-
/>
|
|
434
|
-
<FeatureCard
|
|
435
|
-
title="Compartilhar"
|
|
436
|
-
description="Distribua relatórios e dashboards com stakeholders externos."
|
|
437
|
-
icon={<Share2 />}
|
|
438
|
-
color="destructive"
|
|
439
|
-
badge="Restrito"
|
|
440
|
-
badgeVariant="destructive"
|
|
441
|
-
actionLabel="Solicitar"
|
|
442
|
-
/>
|
|
443
|
-
</div>
|
|
444
|
-
),
|
|
445
|
-
}
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
|
+
import React from "react"
|
|
3
|
+
import {
|
|
4
|
+
BarChart2, Bell, Briefcase, Download, FileText,
|
|
5
|
+
Globe, LayoutDashboard, Lock, MoreHorizontal, Package,
|
|
6
|
+
Plus, RefreshCw, Share2, Shield, Sparkles, Users, Zap,
|
|
7
|
+
} from "lucide-react"
|
|
8
|
+
import { Button } from "../../ui/button"
|
|
9
|
+
import { ChartCard, ChartConfig, DashboardBarChart, DashboardLineChart } from "../../ui/chart"
|
|
10
|
+
import { ActivityCard } from "./ActivityCard"
|
|
11
|
+
import { FeatureCard } from "./FeatureCard"
|
|
12
|
+
import { NotificationCard } from "./NotificationCard"
|
|
13
|
+
import { ProfileCard } from "./ProfileCard"
|
|
14
|
+
import { ProjectCard } from "./ProjectCard"
|
|
15
|
+
import { QuickActionCard } from "./QuickActionCard"
|
|
16
|
+
|
|
17
|
+
const meta: Meta = {
|
|
18
|
+
title: "Blocks/Card Patterns",
|
|
19
|
+
decorators: [
|
|
20
|
+
(Story) => (
|
|
21
|
+
<div className="bg-muted rounded-xl p-8 w-full flex items-start justify-center">
|
|
22
|
+
<Story />
|
|
23
|
+
</div>
|
|
24
|
+
),
|
|
25
|
+
],
|
|
26
|
+
}
|
|
27
|
+
export default meta
|
|
28
|
+
|
|
29
|
+
// ─── ActivityCard ─────────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
const ACTIVITY_ITEMS = [
|
|
32
|
+
{ id: "1", user: { name: "Ana Souza", initials: "AS" }, action: "criou o projeto", target: "Xertica Dashboard", time: "há 2 min", type: "create" as const },
|
|
33
|
+
{ id: "2", user: { name: "Bruno Lima", initials: "BL" }, action: "atualizou", target: "componente Button", time: "há 8 min", type: "update" as const },
|
|
34
|
+
{ id: "3", user: { name: "Carla Rocha", initials: "CR" }, action: "comentou em", target: "PR #42", time: "há 15 min", type: "comment" as const },
|
|
35
|
+
{ id: "4", user: { name: "Diego Ferraz", initials: "DF" }, action: "fez deploy de", target: "v2.1.0", time: "há 1h", type: "deploy" as const },
|
|
36
|
+
{ id: "5", user: { name: "Elena Moura", initials: "EM" }, action: "removeu", target: "badge legado", time: "há 2h", type: "delete" as const },
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
export const Activity: StoryObj = {
|
|
40
|
+
render: () => (
|
|
41
|
+
<ActivityCard
|
|
42
|
+
items={ACTIVITY_ITEMS}
|
|
43
|
+
action={<Button variant="ghost" size="sm"><MoreHorizontal className="size-4" /></Button>}
|
|
44
|
+
className="max-w-md"
|
|
45
|
+
/>
|
|
46
|
+
),
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ─── ProfileCard ──────────────────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
export const Profile: StoryObj = {
|
|
52
|
+
render: () => (
|
|
53
|
+
<ProfileCard
|
|
54
|
+
name="Ana Souza"
|
|
55
|
+
role="Senior Frontend Engineer"
|
|
56
|
+
department="Design System"
|
|
57
|
+
initials="AS"
|
|
58
|
+
status="online"
|
|
59
|
+
stats={[
|
|
60
|
+
{ label: "Projetos", value: 12 },
|
|
61
|
+
{ label: "Commits", value: 348 },
|
|
62
|
+
{ label: "Reviews", value: 57 },
|
|
63
|
+
]}
|
|
64
|
+
primaryAction={{ label: "Ver Perfil" }}
|
|
65
|
+
secondaryAction={{ label: "Mensagem" }}
|
|
66
|
+
className="w-64"
|
|
67
|
+
/>
|
|
68
|
+
),
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// ─── ProjectCard ──────────────────────────────────────────────────────────────
|
|
72
|
+
|
|
73
|
+
const MEMBERS = [
|
|
74
|
+
{ name: "Ana", initials: "AS" },
|
|
75
|
+
{ name: "Bruno", initials: "BL" },
|
|
76
|
+
{ name: "Carla", initials: "CR" },
|
|
77
|
+
{ name: "Diego", initials: "DF" },
|
|
78
|
+
{ name: "Elena", initials: "EM" },
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
export const Project: StoryObj = {
|
|
82
|
+
render: () => (
|
|
83
|
+
<div className="grid gap-4 md:grid-cols-2 w-full max-w-2xl">
|
|
84
|
+
<ProjectCard
|
|
85
|
+
title="Xertica Dashboard v3"
|
|
86
|
+
description="Redesign completo do painel com novos componentes."
|
|
87
|
+
status="active"
|
|
88
|
+
progress={68}
|
|
89
|
+
dueDate="Vence em 12 dias"
|
|
90
|
+
members={MEMBERS}
|
|
91
|
+
/>
|
|
92
|
+
<ProjectCard
|
|
93
|
+
title="Design System Tokens"
|
|
94
|
+
description="Migração dos tokens de design para CSS variables."
|
|
95
|
+
status="review"
|
|
96
|
+
progress={91}
|
|
97
|
+
dueDate="Vence amanhã"
|
|
98
|
+
members={MEMBERS.slice(0, 2)}
|
|
99
|
+
/>
|
|
100
|
+
<ProjectCard
|
|
101
|
+
title="App Mobile"
|
|
102
|
+
description="Versão móvel do Xertica com React Native."
|
|
103
|
+
status="at-risk"
|
|
104
|
+
progress={34}
|
|
105
|
+
dueDate="Atrasado 3 dias"
|
|
106
|
+
members={MEMBERS.slice(0, 3)}
|
|
107
|
+
/>
|
|
108
|
+
<ProjectCard
|
|
109
|
+
title="Onboarding Flow"
|
|
110
|
+
description="Fluxo de cadastro e primeiros passos."
|
|
111
|
+
status="done"
|
|
112
|
+
progress={100}
|
|
113
|
+
dueDate="Entregue"
|
|
114
|
+
members={MEMBERS.slice(0, 4)}
|
|
115
|
+
/>
|
|
116
|
+
</div>
|
|
117
|
+
),
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ─── QuickActionCard ──────────────────────────────────────────────────────────
|
|
121
|
+
|
|
122
|
+
export const QuickActions: StoryObj = {
|
|
123
|
+
render: () => (
|
|
124
|
+
<div className="grid gap-4 grid-cols-2 md:grid-cols-3 max-w-2xl w-full">
|
|
125
|
+
<QuickActionCard
|
|
126
|
+
title="Novo Relatório"
|
|
127
|
+
description="Gere relatórios personalizados de métricas."
|
|
128
|
+
icon={<FileText className="size-5" />}
|
|
129
|
+
actionLabel="Criar Relatório"
|
|
130
|
+
/>
|
|
131
|
+
<QuickActionCard
|
|
132
|
+
title="Convidar Membro"
|
|
133
|
+
description="Adicione novos colaboradores ao workspace."
|
|
134
|
+
icon={<Users className="size-5" />}
|
|
135
|
+
actionLabel="Convidar"
|
|
136
|
+
actionVariant="outline"
|
|
137
|
+
badge="Novo"
|
|
138
|
+
badgeVariant="success"
|
|
139
|
+
/>
|
|
140
|
+
<QuickActionCard
|
|
141
|
+
title="Exportar Dados"
|
|
142
|
+
description="Exporte suas métricas em CSV ou JSON."
|
|
143
|
+
icon={<Download className="size-5" />}
|
|
144
|
+
actionLabel="Exportar"
|
|
145
|
+
actionVariant="secondary"
|
|
146
|
+
/>
|
|
147
|
+
<QuickActionCard
|
|
148
|
+
title="Automação"
|
|
149
|
+
description="Configure gatilhos e ações automáticas."
|
|
150
|
+
icon={<Zap className="size-5" />}
|
|
151
|
+
actionLabel="Configurar"
|
|
152
|
+
badge="Pro"
|
|
153
|
+
badgeVariant="warning"
|
|
154
|
+
/>
|
|
155
|
+
<QuickActionCard
|
|
156
|
+
title="Compartilhar"
|
|
157
|
+
description="Compartilhe o dashboard com sua equipe."
|
|
158
|
+
icon={<Share2 className="size-5" />}
|
|
159
|
+
actionLabel="Compartilhar"
|
|
160
|
+
actionVariant="outline"
|
|
161
|
+
/>
|
|
162
|
+
<QuickActionCard
|
|
163
|
+
title="Novo Projeto"
|
|
164
|
+
description="Inicie um projeto a partir de um template."
|
|
165
|
+
icon={<Plus className="size-5" />}
|
|
166
|
+
actionLabel="Criar Projeto"
|
|
167
|
+
badge="Beta"
|
|
168
|
+
badgeVariant="info"
|
|
169
|
+
/>
|
|
170
|
+
</div>
|
|
171
|
+
),
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// ─── NotificationCard ─────────────────────────────────────────────────────────
|
|
175
|
+
|
|
176
|
+
const NOTIFICATIONS = [
|
|
177
|
+
{ id: "1", title: "Deploy concluído", message: "v2.1.0 foi publicado com sucesso em produção.", time: "há 2 min", read: false, type: "success" as const },
|
|
178
|
+
{ id: "2", title: "Revisão solicitada", message: "Ana pediu revisão no PR #42: Novos tokens de cor.", time: "há 10 min", read: false, type: "info" as const },
|
|
179
|
+
{ id: "3", title: "Erro em produção", message: "Serviço de auth com falha intermitente — 503.", time: "há 1h", read: false, type: "error" as const },
|
|
180
|
+
{ id: "4", title: "Licença expirando", message: "Sua licença Pro expira em 7 dias. Renove para continuar.", time: "há 3h", read: true, type: "warning" as const },
|
|
181
|
+
]
|
|
182
|
+
|
|
183
|
+
export const Notifications: StoryObj = {
|
|
184
|
+
render: () => (
|
|
185
|
+
<NotificationCard
|
|
186
|
+
items={NOTIFICATIONS}
|
|
187
|
+
onMarkAllRead={() => {}}
|
|
188
|
+
onViewAll={() => {}}
|
|
189
|
+
className="max-w-sm"
|
|
190
|
+
/>
|
|
191
|
+
),
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ─── ChartCard ────────────────────────────────────────────────────────────────
|
|
195
|
+
|
|
196
|
+
const REVENUE_DATA = [
|
|
197
|
+
{ month: "Jan", receita: 18000, despesa: 12000 },
|
|
198
|
+
{ month: "Fev", receita: 22000, despesa: 14000 },
|
|
199
|
+
{ month: "Mar", receita: 19500, despesa: 13500 },
|
|
200
|
+
{ month: "Abr", receita: 27000, despesa: 15000 },
|
|
201
|
+
{ month: "Mai", receita: 31000, despesa: 17500 },
|
|
202
|
+
{ month: "Jun", receita: 28500, despesa: 16000 },
|
|
203
|
+
]
|
|
204
|
+
|
|
205
|
+
const REVENUE_CONFIG: ChartConfig = {
|
|
206
|
+
receita: { label: "Receita", color: "var(--chart-1)" },
|
|
207
|
+
despesa: { label: "Despesa", color: "var(--chart-5)" },
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const CHART_SERIES = [
|
|
211
|
+
{ key: "receita", label: "Receita" },
|
|
212
|
+
{ key: "despesa", label: "Despesa" },
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
export const Chart: StoryObj = {
|
|
216
|
+
render: () => (
|
|
217
|
+
<ChartCard
|
|
218
|
+
title="Receita vs Despesa"
|
|
219
|
+
description="Últimos 6 meses"
|
|
220
|
+
action={
|
|
221
|
+
<Button variant="ghost" size="sm">
|
|
222
|
+
<RefreshCw className="size-4" />
|
|
223
|
+
</Button>
|
|
224
|
+
}
|
|
225
|
+
footer="Dados atualizados em tempo real via API financeira."
|
|
226
|
+
className="max-w-xl w-full"
|
|
227
|
+
contentClassName="h-[260px]"
|
|
228
|
+
>
|
|
229
|
+
<DashboardBarChart
|
|
230
|
+
data={REVENUE_DATA}
|
|
231
|
+
config={REVENUE_CONFIG}
|
|
232
|
+
series={CHART_SERIES}
|
|
233
|
+
indexKey="month"
|
|
234
|
+
barSize="md"
|
|
235
|
+
className="h-full w-full"
|
|
236
|
+
/>
|
|
237
|
+
</ChartCard>
|
|
238
|
+
),
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// ─── Dashboard completo ───────────────────────────────────────────────────────
|
|
242
|
+
|
|
243
|
+
const LINE_DATA = [
|
|
244
|
+
{ dia: "Seg", usuarios: 240 },
|
|
245
|
+
{ dia: "Ter", usuarios: 380 },
|
|
246
|
+
{ dia: "Qua", usuarios: 310 },
|
|
247
|
+
{ dia: "Qui", usuarios: 470 },
|
|
248
|
+
{ dia: "Sex", usuarios: 520 },
|
|
249
|
+
{ dia: "Sáb", usuarios: 290 },
|
|
250
|
+
{ dia: "Dom", usuarios: 180 },
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
const LINE_CONFIG: ChartConfig = {
|
|
254
|
+
usuarios: { label: "Usuários", color: "var(--chart-1)" },
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export const DashboardLayout: StoryObj = {
|
|
258
|
+
render: () => (
|
|
259
|
+
<div className="grid gap-4 w-full max-w-5xl">
|
|
260
|
+
<div className="grid gap-4 md:grid-cols-3">
|
|
261
|
+
<QuickActionCard
|
|
262
|
+
title="Novo Projeto"
|
|
263
|
+
description="Inicie a partir de um template."
|
|
264
|
+
icon={<Briefcase className="size-5" />}
|
|
265
|
+
actionLabel="Criar"
|
|
266
|
+
/>
|
|
267
|
+
<QuickActionCard
|
|
268
|
+
title="Convidar Equipe"
|
|
269
|
+
description="Adicione membros ao workspace."
|
|
270
|
+
icon={<Users className="size-5" />}
|
|
271
|
+
actionLabel="Convidar"
|
|
272
|
+
actionVariant="outline"
|
|
273
|
+
/>
|
|
274
|
+
<QuickActionCard
|
|
275
|
+
title="Ver Relatórios"
|
|
276
|
+
description="Métricas e KPIs do período."
|
|
277
|
+
icon={<BarChart2 className="size-5" />}
|
|
278
|
+
actionLabel="Abrir"
|
|
279
|
+
actionVariant="secondary"
|
|
280
|
+
badge="Novo"
|
|
281
|
+
badgeVariant="success"
|
|
282
|
+
/>
|
|
283
|
+
</div>
|
|
284
|
+
|
|
285
|
+
<div className="grid gap-4 md:grid-cols-3">
|
|
286
|
+
<div className="md:col-span-2">
|
|
287
|
+
<ChartCard
|
|
288
|
+
title="Usuários Ativos"
|
|
289
|
+
description="Esta semana"
|
|
290
|
+
contentClassName="h-[220px]"
|
|
291
|
+
>
|
|
292
|
+
<DashboardLineChart
|
|
293
|
+
data={LINE_DATA}
|
|
294
|
+
config={LINE_CONFIG}
|
|
295
|
+
series={[{ key: "usuarios", label: "Usuários" }]}
|
|
296
|
+
indexKey="dia"
|
|
297
|
+
className="h-full w-full"
|
|
298
|
+
/>
|
|
299
|
+
</ChartCard>
|
|
300
|
+
</div>
|
|
301
|
+
<NotificationCard
|
|
302
|
+
title="Alertas"
|
|
303
|
+
items={NOTIFICATIONS.slice(0, 3)}
|
|
304
|
+
onViewAll={() => {}}
|
|
305
|
+
/>
|
|
306
|
+
</div>
|
|
307
|
+
|
|
308
|
+
<div className="grid gap-4 md:grid-cols-2">
|
|
309
|
+
<ActivityCard
|
|
310
|
+
items={ACTIVITY_ITEMS}
|
|
311
|
+
className="h-full"
|
|
312
|
+
/>
|
|
313
|
+
<div className="grid gap-4">
|
|
314
|
+
<ProfileCard
|
|
315
|
+
name="Ana Souza"
|
|
316
|
+
role="Product Designer"
|
|
317
|
+
initials="AS"
|
|
318
|
+
status="online"
|
|
319
|
+
stats={[
|
|
320
|
+
{ label: "Projetos", value: 12 },
|
|
321
|
+
{ label: "Tarefas", value: 34 },
|
|
322
|
+
{ label: "Reviews", value: 8 },
|
|
323
|
+
]}
|
|
324
|
+
/>
|
|
325
|
+
<ProjectCard
|
|
326
|
+
title="Xertica Dashboard v3"
|
|
327
|
+
status="active"
|
|
328
|
+
progress={68}
|
|
329
|
+
dueDate="12 dias restantes"
|
|
330
|
+
members={MEMBERS.slice(0, 3)}
|
|
331
|
+
/>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
),
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// ─── FeatureCard ──────────────────────────────────────────────────────────────
|
|
339
|
+
|
|
340
|
+
export const Feature: StoryObj = {
|
|
341
|
+
render: () => (
|
|
342
|
+
<FeatureCard
|
|
343
|
+
title="Template CLI"
|
|
344
|
+
description="Página de template pronta para uso CLI com todos os componentes configurados."
|
|
345
|
+
icon={<FileText />}
|
|
346
|
+
color="chart-2"
|
|
347
|
+
badge="Novo"
|
|
348
|
+
actionLabel="Visualizar"
|
|
349
|
+
/>
|
|
350
|
+
),
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export const FeatureColors: StoryObj = {
|
|
354
|
+
render: () => (
|
|
355
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 w-full max-w-4xl">
|
|
356
|
+
<FeatureCard
|
|
357
|
+
title="Dashboard"
|
|
358
|
+
description="Visualize métricas e KPIs em tempo real com gráficos interativos."
|
|
359
|
+
icon={<LayoutDashboard />}
|
|
360
|
+
color="primary"
|
|
361
|
+
badge="Popular"
|
|
362
|
+
badgeVariant="default"
|
|
363
|
+
actionLabel="Abrir"
|
|
364
|
+
/>
|
|
365
|
+
<FeatureCard
|
|
366
|
+
title="Integrações"
|
|
367
|
+
description="Conecte APIs externas e serviços de terceiros com um clique."
|
|
368
|
+
icon={<Globe />}
|
|
369
|
+
color="chart-1"
|
|
370
|
+
actionLabel="Explorar"
|
|
371
|
+
/>
|
|
372
|
+
<FeatureCard
|
|
373
|
+
title="Automação"
|
|
374
|
+
description="Crie fluxos automáticos com gatilhos e ações personalizadas."
|
|
375
|
+
icon={<Zap />}
|
|
376
|
+
color="chart-2"
|
|
377
|
+
badge="Beta"
|
|
378
|
+
badgeVariant="warning"
|
|
379
|
+
actionLabel="Configurar"
|
|
380
|
+
/>
|
|
381
|
+
<FeatureCard
|
|
382
|
+
title="IA Generativa"
|
|
383
|
+
description="Potencialize sua equipe com assistentes inteligentes e geração de conteúdo."
|
|
384
|
+
icon={<Sparkles />}
|
|
385
|
+
color="chart-3"
|
|
386
|
+
badge="Pro"
|
|
387
|
+
badgeVariant="info"
|
|
388
|
+
actionLabel="Ativar"
|
|
389
|
+
/>
|
|
390
|
+
<FeatureCard
|
|
391
|
+
title="Equipes"
|
|
392
|
+
description="Gerencie membros, permissões e workspaces de forma centralizada."
|
|
393
|
+
icon={<Users />}
|
|
394
|
+
color="chart-4"
|
|
395
|
+
actionLabel="Gerenciar"
|
|
396
|
+
/>
|
|
397
|
+
<FeatureCard
|
|
398
|
+
title="Pacotes"
|
|
399
|
+
description="Publique e distribua seus componentes como biblioteca reutilizável."
|
|
400
|
+
icon={<Package />}
|
|
401
|
+
color="chart-5"
|
|
402
|
+
actionLabel="Publicar"
|
|
403
|
+
/>
|
|
404
|
+
</div>
|
|
405
|
+
),
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
export const FeatureSemanticColors: StoryObj = {
|
|
409
|
+
render: () => (
|
|
410
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 w-full max-w-4xl">
|
|
411
|
+
<FeatureCard
|
|
412
|
+
title="Segurança"
|
|
413
|
+
description="Proteção avançada com autenticação multifator e logs de auditoria."
|
|
414
|
+
icon={<Shield />}
|
|
415
|
+
color="success"
|
|
416
|
+
actionLabel="Configurar"
|
|
417
|
+
/>
|
|
418
|
+
<FeatureCard
|
|
419
|
+
title="Insights"
|
|
420
|
+
description="Análises aprofundadas com relatórios automáticos e alertas inteligentes."
|
|
421
|
+
icon={<BarChart2 />}
|
|
422
|
+
color="info"
|
|
423
|
+
actionLabel="Ver Dados"
|
|
424
|
+
/>
|
|
425
|
+
<FeatureCard
|
|
426
|
+
title="Permissões"
|
|
427
|
+
description="Controle granular de acessos por função, projeto e recurso."
|
|
428
|
+
icon={<Lock />}
|
|
429
|
+
color="warning"
|
|
430
|
+
badge="Atenção"
|
|
431
|
+
badgeVariant="warning"
|
|
432
|
+
actionLabel="Revisar"
|
|
433
|
+
/>
|
|
434
|
+
<FeatureCard
|
|
435
|
+
title="Compartilhar"
|
|
436
|
+
description="Distribua relatórios e dashboards com stakeholders externos."
|
|
437
|
+
icon={<Share2 />}
|
|
438
|
+
color="destructive"
|
|
439
|
+
badge="Restrito"
|
|
440
|
+
badgeVariant="destructive"
|
|
441
|
+
actionLabel="Solicitar"
|
|
442
|
+
/>
|
|
443
|
+
</div>
|
|
444
|
+
),
|
|
445
|
+
}
|