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,282 +1,282 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Map } from '../ui/map';
|
|
3
|
-
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card';
|
|
4
|
-
import { Badge } from '../ui/badge';
|
|
5
|
-
import { Button } from '../ui/button';
|
|
6
|
-
import { MapPin, Navigation, Store, Heart } from 'lucide-react';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Exemplos práticos de uso do componente Map
|
|
10
|
-
* Demonstra diferentes casos de uso do mundo real
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
// 1. Mapa de Loja com Raio de Entrega
|
|
14
|
-
export function StoreDeliveryMap() {
|
|
15
|
-
const storeLocation = { lat: -23.5505, lng: -46.6333 };
|
|
16
|
-
|
|
17
|
-
return (
|
|
18
|
-
<Card>
|
|
19
|
-
<CardHeader>
|
|
20
|
-
<div className="flex items-center gap-2">
|
|
21
|
-
<Store className="w-5 h-5 text-primary" />
|
|
22
|
-
<CardTitle>Área de Entrega</CardTitle>
|
|
23
|
-
</div>
|
|
24
|
-
<CardDescription>
|
|
25
|
-
Realizamos entregas em um raio de 5km da nossa loja
|
|
26
|
-
</CardDescription>
|
|
27
|
-
</CardHeader>
|
|
28
|
-
<CardContent>
|
|
29
|
-
<Map
|
|
30
|
-
center={storeLocation}
|
|
31
|
-
zoom={13}
|
|
32
|
-
markers={[
|
|
33
|
-
{
|
|
34
|
-
position: storeLocation,
|
|
35
|
-
title: "Nossa Loja",
|
|
36
|
-
info: "Avenida Paulista, 1000"
|
|
37
|
-
}
|
|
38
|
-
]}
|
|
39
|
-
circle={{
|
|
40
|
-
center: storeLocation,
|
|
41
|
-
radius: 5000,
|
|
42
|
-
fillColor: "#10B981",
|
|
43
|
-
strokeColor: "#059669"
|
|
44
|
-
}}
|
|
45
|
-
height="400px"
|
|
46
|
-
/>
|
|
47
|
-
<div className="mt-4 flex items-center justify-between">
|
|
48
|
-
<div className="flex items-center gap-2">
|
|
49
|
-
<MapPin className="w-4 h-4 text-muted-foreground" />
|
|
50
|
-
<span className="text-sm text-muted-foreground">
|
|
51
|
-
Cobertura de 5km
|
|
52
|
-
</span>
|
|
53
|
-
</div>
|
|
54
|
-
<Button size="sm">
|
|
55
|
-
<Navigation className="w-4 h-4 mr-2" />
|
|
56
|
-
Como Chegar
|
|
57
|
-
</Button>
|
|
58
|
-
</div>
|
|
59
|
-
</CardContent>
|
|
60
|
-
</Card>
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// 2. Mapa de Locais Favoritos
|
|
65
|
-
export function FavoritePlacesMap() {
|
|
66
|
-
const favorites = [
|
|
67
|
-
{
|
|
68
|
-
position: { lat: -23.5505, lng: -46.6333 },
|
|
69
|
-
label: "⭐",
|
|
70
|
-
title: "Restaurante Favorito",
|
|
71
|
-
info: "Melhor pizza da cidade!"
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
position: { lat: -23.5475, lng: -46.6361 },
|
|
75
|
-
label: "☕",
|
|
76
|
-
title: "Cafeteria",
|
|
77
|
-
info: "Café artesanal"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
position: { lat: -23.5613, lng: -46.6563 },
|
|
81
|
-
label: "🏃",
|
|
82
|
-
title: "Parque",
|
|
83
|
-
info: "Local de corrida matinal"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
position: { lat: -23.5558, lng: -46.6396 },
|
|
87
|
-
label: "🎬",
|
|
88
|
-
title: "Cinema",
|
|
89
|
-
info: "Cinema independente"
|
|
90
|
-
}
|
|
91
|
-
];
|
|
92
|
-
|
|
93
|
-
return (
|
|
94
|
-
<Card>
|
|
95
|
-
<CardHeader>
|
|
96
|
-
<div className="flex items-center justify-between">
|
|
97
|
-
<div className="flex items-center gap-2">
|
|
98
|
-
<Heart className="w-5 h-5 text-destructive" />
|
|
99
|
-
<CardTitle>Meus Lugares Favoritos</CardTitle>
|
|
100
|
-
</div>
|
|
101
|
-
<Badge variant="secondary">{favorites.length} locais</Badge>
|
|
102
|
-
</div>
|
|
103
|
-
<CardDescription>
|
|
104
|
-
Lugares que você marcou como favoritos
|
|
105
|
-
</CardDescription>
|
|
106
|
-
</CardHeader>
|
|
107
|
-
<CardContent>
|
|
108
|
-
<Map
|
|
109
|
-
center={{ lat: -23.5505, lng: -46.6333 }}
|
|
110
|
-
zoom={13}
|
|
111
|
-
markers={favorites}
|
|
112
|
-
height="450px"
|
|
113
|
-
/>
|
|
114
|
-
</CardContent>
|
|
115
|
-
</Card>
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// 3. Mapa de Escritórios da Empresa
|
|
120
|
-
export function CompanyOfficesMap() {
|
|
121
|
-
const offices = [
|
|
122
|
-
{
|
|
123
|
-
position: { lat: -23.5505, lng: -46.6333 },
|
|
124
|
-
label: "HQ",
|
|
125
|
-
title: "Sede - São Paulo",
|
|
126
|
-
info: "Matriz da empresa - 200 funcionários"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
position: { lat: -22.9068, lng: -43.1729 },
|
|
130
|
-
label: "RJ",
|
|
131
|
-
title: "Filial - Rio de Janeiro",
|
|
132
|
-
info: "Escritório regional - 80 funcionários"
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
position: { lat: -19.9167, lng: -43.9345 },
|
|
136
|
-
label: "BH",
|
|
137
|
-
title: "Filial - Belo Horizonte",
|
|
138
|
-
info: "Centro de distribuição - 50 funcionários"
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
position: { lat: -25.4284, lng: -49.2733 },
|
|
142
|
-
label: "CWB",
|
|
143
|
-
title: "Filial - Curitiba",
|
|
144
|
-
info: "Centro de tecnologia - 120 funcionários"
|
|
145
|
-
}
|
|
146
|
-
];
|
|
147
|
-
|
|
148
|
-
return (
|
|
149
|
-
<Card>
|
|
150
|
-
<CardHeader>
|
|
151
|
-
<CardTitle>Nossos Escritórios</CardTitle>
|
|
152
|
-
<CardDescription>
|
|
153
|
-
Presença em 4 estados brasileiros
|
|
154
|
-
</CardDescription>
|
|
155
|
-
</CardHeader>
|
|
156
|
-
<CardContent>
|
|
157
|
-
<Map
|
|
158
|
-
center={{ lat: -22.5, lng: -45.0 }}
|
|
159
|
-
zoom={6}
|
|
160
|
-
markers={offices}
|
|
161
|
-
height="500px"
|
|
162
|
-
zoomControl={true}
|
|
163
|
-
fullscreenControl={true}
|
|
164
|
-
/>
|
|
165
|
-
<div className="mt-4 grid grid-cols-2 md:grid-cols-4 gap-2">
|
|
166
|
-
{offices.map((office, index) => (
|
|
167
|
-
<div key={index} className="text-center p-3 bg-muted rounded-lg">
|
|
168
|
-
<div className="text-2xl mb-1">{office.label}</div>
|
|
169
|
-
<p className="text-xs text-muted-foreground line-clamp-1">
|
|
170
|
-
{office.title}
|
|
171
|
-
</p>
|
|
172
|
-
</div>
|
|
173
|
-
))}
|
|
174
|
-
</div>
|
|
175
|
-
</CardContent>
|
|
176
|
-
</Card>
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// 4. Mapa de Zona de Serviço com Polígono
|
|
181
|
-
export function ServiceZoneMap() {
|
|
182
|
-
const serviceZone = {
|
|
183
|
-
paths: [
|
|
184
|
-
[
|
|
185
|
-
{ lat: -23.540, lng: -46.620 },
|
|
186
|
-
{ lat: -23.540, lng: -46.660 },
|
|
187
|
-
{ lat: -23.565, lng: -46.660 },
|
|
188
|
-
{ lat: -23.565, lng: -46.620 }
|
|
189
|
-
]
|
|
190
|
-
],
|
|
191
|
-
fillColor: "#3B82F6",
|
|
192
|
-
strokeColor: "#2563EB"
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
return (
|
|
196
|
-
<Card>
|
|
197
|
-
<CardHeader>
|
|
198
|
-
<CardTitle>Área de Atendimento</CardTitle>
|
|
199
|
-
<CardDescription>
|
|
200
|
-
Zona azul indica nossa área de serviço prioritária
|
|
201
|
-
</CardDescription>
|
|
202
|
-
</CardHeader>
|
|
203
|
-
<CardContent>
|
|
204
|
-
<Map
|
|
205
|
-
center={{ lat: -23.5525, lng: -46.640 }}
|
|
206
|
-
zoom={13}
|
|
207
|
-
polygon={serviceZone}
|
|
208
|
-
markers={[
|
|
209
|
-
{
|
|
210
|
-
position: { lat: -23.5525, lng: -46.640 },
|
|
211
|
-
title: "Central de Operações",
|
|
212
|
-
info: "Base de atendimento"
|
|
213
|
-
}
|
|
214
|
-
]}
|
|
215
|
-
height="450px"
|
|
216
|
-
/>
|
|
217
|
-
<div className="mt-4 p-4 bg-blue-50 dark:bg-blue-950/20 rounded-lg border border-blue-200 dark:border-blue-800">
|
|
218
|
-
<p className="text-sm text-blue-900 dark:text-blue-100">
|
|
219
|
-
<strong>Atendimento prioritário:</strong> Clientes dentro da zona azul
|
|
220
|
-
recebem atendimento em até 2 horas.
|
|
221
|
-
</p>
|
|
222
|
-
</div>
|
|
223
|
-
</CardContent>
|
|
224
|
-
</Card>
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// 5. Grid de Mapas Compactos (Comparação)
|
|
229
|
-
export function CompactMapsGrid() {
|
|
230
|
-
const cities = [
|
|
231
|
-
{
|
|
232
|
-
name: "São Paulo",
|
|
233
|
-
center: { lat: -23.5505, lng: -46.6333 },
|
|
234
|
-
description: "Maior cidade do Brasil"
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
name: "Rio de Janeiro",
|
|
238
|
-
center: { lat: -22.9068, lng: -43.1729 },
|
|
239
|
-
description: "Cidade maravilhosa"
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
name: "Brasília",
|
|
243
|
-
center: { lat: -15.7942, lng: -47.8822 },
|
|
244
|
-
description: "Capital federal"
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
name: "Salvador",
|
|
248
|
-
center: { lat: -12.9714, lng: -38.5014 },
|
|
249
|
-
description: "Primeira capital"
|
|
250
|
-
}
|
|
251
|
-
];
|
|
252
|
-
|
|
253
|
-
return (
|
|
254
|
-
<Card>
|
|
255
|
-
<CardHeader>
|
|
256
|
-
<CardTitle>Principais Cidades</CardTitle>
|
|
257
|
-
<CardDescription>
|
|
258
|
-
Visão rápida das principais metrópoles brasileiras
|
|
259
|
-
</CardDescription>
|
|
260
|
-
</CardHeader>
|
|
261
|
-
<CardContent>
|
|
262
|
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
263
|
-
{cities.map((city, index) => (
|
|
264
|
-
<div key={index} className="space-y-2">
|
|
265
|
-
<div className="flex items-center justify-between">
|
|
266
|
-
<h4 className="font-medium">{city.name}</h4>
|
|
267
|
-
<Badge variant="outline">{city.description}</Badge>
|
|
268
|
-
</div>
|
|
269
|
-
<Map
|
|
270
|
-
center={city.center}
|
|
271
|
-
zoom={11}
|
|
272
|
-
height="200px"
|
|
273
|
-
disableDefaultUI={true}
|
|
274
|
-
gestureHandling="none"
|
|
275
|
-
/>
|
|
276
|
-
</div>
|
|
277
|
-
))}
|
|
278
|
-
</div>
|
|
279
|
-
</CardContent>
|
|
280
|
-
</Card>
|
|
281
|
-
);
|
|
282
|
-
}
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Map } from '../ui/map';
|
|
3
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../ui/card';
|
|
4
|
+
import { Badge } from '../ui/badge';
|
|
5
|
+
import { Button } from '../ui/button';
|
|
6
|
+
import { MapPin, Navigation, Store, Heart } from 'lucide-react';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Exemplos práticos de uso do componente Map
|
|
10
|
+
* Demonstra diferentes casos de uso do mundo real
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// 1. Mapa de Loja com Raio de Entrega
|
|
14
|
+
export function StoreDeliveryMap() {
|
|
15
|
+
const storeLocation = { lat: -23.5505, lng: -46.6333 };
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<Card>
|
|
19
|
+
<CardHeader>
|
|
20
|
+
<div className="flex items-center gap-2">
|
|
21
|
+
<Store className="w-5 h-5 text-primary" />
|
|
22
|
+
<CardTitle>Área de Entrega</CardTitle>
|
|
23
|
+
</div>
|
|
24
|
+
<CardDescription>
|
|
25
|
+
Realizamos entregas em um raio de 5km da nossa loja
|
|
26
|
+
</CardDescription>
|
|
27
|
+
</CardHeader>
|
|
28
|
+
<CardContent>
|
|
29
|
+
<Map
|
|
30
|
+
center={storeLocation}
|
|
31
|
+
zoom={13}
|
|
32
|
+
markers={[
|
|
33
|
+
{
|
|
34
|
+
position: storeLocation,
|
|
35
|
+
title: "Nossa Loja",
|
|
36
|
+
info: "Avenida Paulista, 1000"
|
|
37
|
+
}
|
|
38
|
+
]}
|
|
39
|
+
circle={{
|
|
40
|
+
center: storeLocation,
|
|
41
|
+
radius: 5000,
|
|
42
|
+
fillColor: "#10B981",
|
|
43
|
+
strokeColor: "#059669"
|
|
44
|
+
}}
|
|
45
|
+
height="400px"
|
|
46
|
+
/>
|
|
47
|
+
<div className="mt-4 flex items-center justify-between">
|
|
48
|
+
<div className="flex items-center gap-2">
|
|
49
|
+
<MapPin className="w-4 h-4 text-muted-foreground" />
|
|
50
|
+
<span className="text-sm text-muted-foreground">
|
|
51
|
+
Cobertura de 5km
|
|
52
|
+
</span>
|
|
53
|
+
</div>
|
|
54
|
+
<Button size="sm">
|
|
55
|
+
<Navigation className="w-4 h-4 mr-2" />
|
|
56
|
+
Como Chegar
|
|
57
|
+
</Button>
|
|
58
|
+
</div>
|
|
59
|
+
</CardContent>
|
|
60
|
+
</Card>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// 2. Mapa de Locais Favoritos
|
|
65
|
+
export function FavoritePlacesMap() {
|
|
66
|
+
const favorites = [
|
|
67
|
+
{
|
|
68
|
+
position: { lat: -23.5505, lng: -46.6333 },
|
|
69
|
+
label: "⭐",
|
|
70
|
+
title: "Restaurante Favorito",
|
|
71
|
+
info: "Melhor pizza da cidade!"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
position: { lat: -23.5475, lng: -46.6361 },
|
|
75
|
+
label: "☕",
|
|
76
|
+
title: "Cafeteria",
|
|
77
|
+
info: "Café artesanal"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
position: { lat: -23.5613, lng: -46.6563 },
|
|
81
|
+
label: "🏃",
|
|
82
|
+
title: "Parque",
|
|
83
|
+
info: "Local de corrida matinal"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
position: { lat: -23.5558, lng: -46.6396 },
|
|
87
|
+
label: "🎬",
|
|
88
|
+
title: "Cinema",
|
|
89
|
+
info: "Cinema independente"
|
|
90
|
+
}
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<Card>
|
|
95
|
+
<CardHeader>
|
|
96
|
+
<div className="flex items-center justify-between">
|
|
97
|
+
<div className="flex items-center gap-2">
|
|
98
|
+
<Heart className="w-5 h-5 text-destructive" />
|
|
99
|
+
<CardTitle>Meus Lugares Favoritos</CardTitle>
|
|
100
|
+
</div>
|
|
101
|
+
<Badge variant="secondary">{favorites.length} locais</Badge>
|
|
102
|
+
</div>
|
|
103
|
+
<CardDescription>
|
|
104
|
+
Lugares que você marcou como favoritos
|
|
105
|
+
</CardDescription>
|
|
106
|
+
</CardHeader>
|
|
107
|
+
<CardContent>
|
|
108
|
+
<Map
|
|
109
|
+
center={{ lat: -23.5505, lng: -46.6333 }}
|
|
110
|
+
zoom={13}
|
|
111
|
+
markers={favorites}
|
|
112
|
+
height="450px"
|
|
113
|
+
/>
|
|
114
|
+
</CardContent>
|
|
115
|
+
</Card>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// 3. Mapa de Escritórios da Empresa
|
|
120
|
+
export function CompanyOfficesMap() {
|
|
121
|
+
const offices = [
|
|
122
|
+
{
|
|
123
|
+
position: { lat: -23.5505, lng: -46.6333 },
|
|
124
|
+
label: "HQ",
|
|
125
|
+
title: "Sede - São Paulo",
|
|
126
|
+
info: "Matriz da empresa - 200 funcionários"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
position: { lat: -22.9068, lng: -43.1729 },
|
|
130
|
+
label: "RJ",
|
|
131
|
+
title: "Filial - Rio de Janeiro",
|
|
132
|
+
info: "Escritório regional - 80 funcionários"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
position: { lat: -19.9167, lng: -43.9345 },
|
|
136
|
+
label: "BH",
|
|
137
|
+
title: "Filial - Belo Horizonte",
|
|
138
|
+
info: "Centro de distribuição - 50 funcionários"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
position: { lat: -25.4284, lng: -49.2733 },
|
|
142
|
+
label: "CWB",
|
|
143
|
+
title: "Filial - Curitiba",
|
|
144
|
+
info: "Centro de tecnologia - 120 funcionários"
|
|
145
|
+
}
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
return (
|
|
149
|
+
<Card>
|
|
150
|
+
<CardHeader>
|
|
151
|
+
<CardTitle>Nossos Escritórios</CardTitle>
|
|
152
|
+
<CardDescription>
|
|
153
|
+
Presença em 4 estados brasileiros
|
|
154
|
+
</CardDescription>
|
|
155
|
+
</CardHeader>
|
|
156
|
+
<CardContent>
|
|
157
|
+
<Map
|
|
158
|
+
center={{ lat: -22.5, lng: -45.0 }}
|
|
159
|
+
zoom={6}
|
|
160
|
+
markers={offices}
|
|
161
|
+
height="500px"
|
|
162
|
+
zoomControl={true}
|
|
163
|
+
fullscreenControl={true}
|
|
164
|
+
/>
|
|
165
|
+
<div className="mt-4 grid grid-cols-2 md:grid-cols-4 gap-2">
|
|
166
|
+
{offices.map((office, index) => (
|
|
167
|
+
<div key={index} className="text-center p-3 bg-muted rounded-lg">
|
|
168
|
+
<div className="text-2xl mb-1">{office.label}</div>
|
|
169
|
+
<p className="text-xs text-muted-foreground line-clamp-1">
|
|
170
|
+
{office.title}
|
|
171
|
+
</p>
|
|
172
|
+
</div>
|
|
173
|
+
))}
|
|
174
|
+
</div>
|
|
175
|
+
</CardContent>
|
|
176
|
+
</Card>
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// 4. Mapa de Zona de Serviço com Polígono
|
|
181
|
+
export function ServiceZoneMap() {
|
|
182
|
+
const serviceZone = {
|
|
183
|
+
paths: [
|
|
184
|
+
[
|
|
185
|
+
{ lat: -23.540, lng: -46.620 },
|
|
186
|
+
{ lat: -23.540, lng: -46.660 },
|
|
187
|
+
{ lat: -23.565, lng: -46.660 },
|
|
188
|
+
{ lat: -23.565, lng: -46.620 }
|
|
189
|
+
]
|
|
190
|
+
],
|
|
191
|
+
fillColor: "#3B82F6",
|
|
192
|
+
strokeColor: "#2563EB"
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
return (
|
|
196
|
+
<Card>
|
|
197
|
+
<CardHeader>
|
|
198
|
+
<CardTitle>Área de Atendimento</CardTitle>
|
|
199
|
+
<CardDescription>
|
|
200
|
+
Zona azul indica nossa área de serviço prioritária
|
|
201
|
+
</CardDescription>
|
|
202
|
+
</CardHeader>
|
|
203
|
+
<CardContent>
|
|
204
|
+
<Map
|
|
205
|
+
center={{ lat: -23.5525, lng: -46.640 }}
|
|
206
|
+
zoom={13}
|
|
207
|
+
polygon={serviceZone}
|
|
208
|
+
markers={[
|
|
209
|
+
{
|
|
210
|
+
position: { lat: -23.5525, lng: -46.640 },
|
|
211
|
+
title: "Central de Operações",
|
|
212
|
+
info: "Base de atendimento"
|
|
213
|
+
}
|
|
214
|
+
]}
|
|
215
|
+
height="450px"
|
|
216
|
+
/>
|
|
217
|
+
<div className="mt-4 p-4 bg-blue-50 dark:bg-blue-950/20 rounded-lg border border-blue-200 dark:border-blue-800">
|
|
218
|
+
<p className="text-sm text-blue-900 dark:text-blue-100">
|
|
219
|
+
<strong>Atendimento prioritário:</strong> Clientes dentro da zona azul
|
|
220
|
+
recebem atendimento em até 2 horas.
|
|
221
|
+
</p>
|
|
222
|
+
</div>
|
|
223
|
+
</CardContent>
|
|
224
|
+
</Card>
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// 5. Grid de Mapas Compactos (Comparação)
|
|
229
|
+
export function CompactMapsGrid() {
|
|
230
|
+
const cities = [
|
|
231
|
+
{
|
|
232
|
+
name: "São Paulo",
|
|
233
|
+
center: { lat: -23.5505, lng: -46.6333 },
|
|
234
|
+
description: "Maior cidade do Brasil"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
name: "Rio de Janeiro",
|
|
238
|
+
center: { lat: -22.9068, lng: -43.1729 },
|
|
239
|
+
description: "Cidade maravilhosa"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: "Brasília",
|
|
243
|
+
center: { lat: -15.7942, lng: -47.8822 },
|
|
244
|
+
description: "Capital federal"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: "Salvador",
|
|
248
|
+
center: { lat: -12.9714, lng: -38.5014 },
|
|
249
|
+
description: "Primeira capital"
|
|
250
|
+
}
|
|
251
|
+
];
|
|
252
|
+
|
|
253
|
+
return (
|
|
254
|
+
<Card>
|
|
255
|
+
<CardHeader>
|
|
256
|
+
<CardTitle>Principais Cidades</CardTitle>
|
|
257
|
+
<CardDescription>
|
|
258
|
+
Visão rápida das principais metrópoles brasileiras
|
|
259
|
+
</CardDescription>
|
|
260
|
+
</CardHeader>
|
|
261
|
+
<CardContent>
|
|
262
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
263
|
+
{cities.map((city, index) => (
|
|
264
|
+
<div key={index} className="space-y-2">
|
|
265
|
+
<div className="flex items-center justify-between">
|
|
266
|
+
<h4 className="font-medium">{city.name}</h4>
|
|
267
|
+
<Badge variant="outline">{city.description}</Badge>
|
|
268
|
+
</div>
|
|
269
|
+
<Map
|
|
270
|
+
center={city.center}
|
|
271
|
+
zoom={11}
|
|
272
|
+
height="200px"
|
|
273
|
+
disableDefaultUI={true}
|
|
274
|
+
gestureHandling="none"
|
|
275
|
+
/>
|
|
276
|
+
</div>
|
|
277
|
+
))}
|
|
278
|
+
</div>
|
|
279
|
+
</CardContent>
|
|
280
|
+
</Card>
|
|
281
|
+
);
|
|
282
|
+
}
|