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
|
@@ -72,7 +72,7 @@ interface TemplateContentProps {
|
|
|
72
72
|
export function TemplateContent({ user, onLogout, onSettings }: TemplateContentProps) {
|
|
73
73
|
const layout = useOptionalLayout();
|
|
74
74
|
const [localSidebarExpanded, setLocalSidebarExpanded] = useState(false);
|
|
75
|
-
const [localSidebarWidth, setLocalSidebarWidth] = useState(
|
|
75
|
+
const [localSidebarWidth, setLocalSidebarWidth] = useState(280);
|
|
76
76
|
const sidebarExpanded = layout?.sidebarExpanded ?? localSidebarExpanded;
|
|
77
77
|
const sidebarWidth = layout?.sidebarWidth ?? localSidebarWidth;
|
|
78
78
|
const setSidebarWidth = layout?.setSidebarWidth ?? setLocalSidebarWidth;
|
|
@@ -118,7 +118,7 @@ export function TemplateContent({ user, onLogout, onSettings }: TemplateContentP
|
|
|
118
118
|
<div className="p-2 sm:p-4 md:p-6">
|
|
119
119
|
<div className="max-w-6xl mx-auto space-y-8">
|
|
120
120
|
{/* Page header */}
|
|
121
|
-
<PageHeader
|
|
121
|
+
<PageHeader
|
|
122
122
|
title="Página de Template"
|
|
123
123
|
subtitle="Template completo com componentes do Design System"
|
|
124
124
|
/>
|
|
@@ -413,10 +413,10 @@ export function TemplateContent({ user, onLogout, onSettings }: TemplateContentP
|
|
|
413
413
|
<div className="mb-4">
|
|
414
414
|
<div className="relative">
|
|
415
415
|
<Search className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
|
416
|
-
<Input
|
|
417
|
-
placeholder="Buscar usuários..."
|
|
416
|
+
<Input
|
|
417
|
+
placeholder="Buscar usuários..."
|
|
418
418
|
aria-label="Buscar usuários"
|
|
419
|
-
className="pl-10"
|
|
419
|
+
className="pl-10"
|
|
420
420
|
/>
|
|
421
421
|
</div>
|
|
422
422
|
</div>
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
-
|
|
3
|
-
<Meta title="Pages/TemplateContent" />
|
|
4
|
-
|
|
5
|
-
<Title>TemplateContent</Title>
|
|
6
|
-
<Subtitle>Kitchen-sink showcase and CLI starter template demonstrating the full Xertica UI component set.</Subtitle>
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
`TemplateContent` is a comprehensive living demo that assembles the majority of Xertica UI primitives into a single scrollable page. It serves two purposes:
|
|
13
|
-
|
|
14
|
-
1. **Development reference** - Shows the correct composition patterns for every major component.
|
|
15
|
-
2. **CLI starter** - Acts as the baseline when scaffolding a new application page.
|
|
16
|
-
|
|
17
|
-
It includes interactive showcases for cards, tabs, forms, tables, dialogs, alerts, progress, sliders, maps, headers, and sidebars.
|
|
18
|
-
|
|
19
|
-
```tsx
|
|
20
|
-
import { TemplateContent } from 'xertica-ui';
|
|
21
|
-
|
|
22
|
-
{ path: '/template', element: <TemplateContent /> }
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Props
|
|
28
|
-
|
|
29
|
-
| Prop | Type | Default | Description |
|
|
30
|
-
|---|---|---|---|
|
|
31
|
-
| `user` | `{ name?: string; email?: string; avatar?: string } \| null` | - | Currently authenticated user for the header. |
|
|
32
|
-
| `onLogout` | `() => void` | - | Logout handler forwarded to the header. |
|
|
33
|
-
| `onSettings` | `() => void` | - | Settings handler forwarded to the header. |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Layout Dependency
|
|
38
|
-
|
|
39
|
-
`TemplateContent` uses optional layout state. When wrapped in `XerticaProvider`, it synchronizes sidebar width, expanded state, and layout controls. Without the provider, it renders with local fallback sidebar state.
|
|
40
|
-
|
|
41
|
-
React Router is still required because the showcase uses `Link` and `useNavigate`.
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Sidebar Showcase
|
|
46
|
-
|
|
47
|
-
`TemplateContent` includes an embedded, interactive `Sidebar` preview with controls for:
|
|
48
|
-
|
|
49
|
-
- Toggling footer sections.
|
|
50
|
-
- Adjusting sidebar width via a `Slider`.
|
|
51
|
-
- Switching between `variant="assistant"` and `variant="default"` modes.
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## AI Best Practices
|
|
56
|
-
|
|
57
|
-
> [!IMPORTANT]
|
|
58
|
-
> - **Reference first** - Before building a new page, check `TemplateContent` for the correct composition pattern.
|
|
59
|
-
> - **Provider fallback** - `TemplateContent` renders without `XerticaProvider`, but the provider is recommended for synchronized layout state.
|
|
60
|
-
> - **Router requirement** - React Router is still required for navigation hooks and links.
|
|
61
|
-
> - **Map section** - The Maps showcase requires a valid `googleMapsApiKey` passed to `XerticaProvider`.
|
|
1
|
+
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Pages/TemplateContent" />
|
|
4
|
+
|
|
5
|
+
<Title>TemplateContent</Title>
|
|
6
|
+
<Subtitle>Kitchen-sink showcase and CLI starter template demonstrating the full Xertica UI component set.</Subtitle>
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
`TemplateContent` is a comprehensive living demo that assembles the majority of Xertica UI primitives into a single scrollable page. It serves two purposes:
|
|
13
|
+
|
|
14
|
+
1. **Development reference** - Shows the correct composition patterns for every major component.
|
|
15
|
+
2. **CLI starter** - Acts as the baseline when scaffolding a new application page.
|
|
16
|
+
|
|
17
|
+
It includes interactive showcases for cards, tabs, forms, tables, dialogs, alerts, progress, sliders, maps, headers, and sidebars.
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
import { TemplateContent } from 'xertica-ui';
|
|
21
|
+
|
|
22
|
+
{ path: '/template', element: <TemplateContent /> }
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Props
|
|
28
|
+
|
|
29
|
+
| Prop | Type | Default | Description |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| `user` | `{ name?: string; email?: string; avatar?: string } \| null` | - | Currently authenticated user for the header. |
|
|
32
|
+
| `onLogout` | `() => void` | - | Logout handler forwarded to the header. |
|
|
33
|
+
| `onSettings` | `() => void` | - | Settings handler forwarded to the header. |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Layout Dependency
|
|
38
|
+
|
|
39
|
+
`TemplateContent` uses optional layout state. When wrapped in `XerticaProvider`, it synchronizes sidebar width, expanded state, and layout controls. Without the provider, it renders with local fallback sidebar state.
|
|
40
|
+
|
|
41
|
+
React Router is still required because the showcase uses `Link` and `useNavigate`.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Sidebar Showcase
|
|
46
|
+
|
|
47
|
+
`TemplateContent` includes an embedded, interactive `Sidebar` preview with controls for:
|
|
48
|
+
|
|
49
|
+
- Toggling footer sections.
|
|
50
|
+
- Adjusting sidebar width via a `Slider`.
|
|
51
|
+
- Switching between `variant="assistant"` and `variant="default"` modes.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## AI Best Practices
|
|
56
|
+
|
|
57
|
+
> [!IMPORTANT]
|
|
58
|
+
> - **Reference first** - Before building a new page, check `TemplateContent` for the correct composition pattern.
|
|
59
|
+
> - **Provider fallback** - `TemplateContent` renders without `XerticaProvider`, but the provider is recommended for synchronized layout state.
|
|
60
|
+
> - **Router requirement** - React Router is still required for navigation hooks and links.
|
|
61
|
+
> - **Map section** - The Maps showcase requires a valid `googleMapsApiKey` passed to `XerticaProvider`.
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { TemplatePage } from './TemplatePage';
|
|
3
|
-
import { MemoryRouter } from 'react-router-dom';
|
|
4
|
-
import { LayoutProvider } from '../../../contexts/LayoutContext';
|
|
5
|
-
import React from 'react';
|
|
6
|
-
|
|
7
|
-
const meta: Meta<typeof TemplatePage> = {
|
|
8
|
-
title: 'Pages/TemplatePage',
|
|
9
|
-
component: TemplatePage,
|
|
10
|
-
decorators: [
|
|
11
|
-
(Story) => (
|
|
12
|
-
<MemoryRouter initialEntries={['/template']}>
|
|
13
|
-
<LayoutProvider>
|
|
14
|
-
<Story />
|
|
15
|
-
</LayoutProvider>
|
|
16
|
-
</MemoryRouter>
|
|
17
|
-
),
|
|
18
|
-
],
|
|
19
|
-
parameters: {
|
|
20
|
-
layout: 'fullscreen',
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export default meta;
|
|
25
|
-
type Story = StoryObj<typeof TemplatePage>;
|
|
26
|
-
|
|
27
|
-
export const Default: Story = {
|
|
28
|
-
args: {
|
|
29
|
-
user: { email: 'ariel@xertica.com' },
|
|
30
|
-
onLogout: () => {},
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const NoUser: Story = {
|
|
35
|
-
args: {
|
|
36
|
-
user: null,
|
|
37
|
-
onLogout: () => {},
|
|
38
|
-
},
|
|
39
|
-
};
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { TemplatePage } from './TemplatePage';
|
|
3
|
+
import { MemoryRouter } from 'react-router-dom';
|
|
4
|
+
import { LayoutProvider } from '../../../contexts/LayoutContext';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
const meta: Meta<typeof TemplatePage> = {
|
|
8
|
+
title: 'Pages/TemplatePage',
|
|
9
|
+
component: TemplatePage,
|
|
10
|
+
decorators: [
|
|
11
|
+
(Story) => (
|
|
12
|
+
<MemoryRouter initialEntries={['/template']}>
|
|
13
|
+
<LayoutProvider>
|
|
14
|
+
<Story />
|
|
15
|
+
</LayoutProvider>
|
|
16
|
+
</MemoryRouter>
|
|
17
|
+
),
|
|
18
|
+
],
|
|
19
|
+
parameters: {
|
|
20
|
+
layout: 'fullscreen',
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default meta;
|
|
25
|
+
type Story = StoryObj<typeof TemplatePage>;
|
|
26
|
+
|
|
27
|
+
export const Default: Story = {
|
|
28
|
+
args: {
|
|
29
|
+
user: { email: 'ariel@xertica.com' },
|
|
30
|
+
onLogout: () => {},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const NoUser: Story = {
|
|
35
|
+
args: {
|
|
36
|
+
user: null,
|
|
37
|
+
onLogout: () => {},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
@@ -32,7 +32,7 @@ export function TemplatePage({ user, onLogout }: TemplatePageProps) {
|
|
|
32
32
|
const [localSidebarExpanded, setLocalSidebarExpanded] = React.useState(false);
|
|
33
33
|
const [localAssistantExpanded, setLocalAssistantExpanded] = React.useState(false);
|
|
34
34
|
const sidebarExpanded = layout?.sidebarExpanded ?? localSidebarExpanded;
|
|
35
|
-
const sidebarWidth = layout?.sidebarWidth ??
|
|
35
|
+
const sidebarWidth = layout?.sidebarWidth ?? 280;
|
|
36
36
|
const assistenteExpanded = layout?.assistenteExpanded ?? localAssistantExpanded;
|
|
37
37
|
const toggleSidebar = layout?.toggleSidebar ?? (() => setLocalSidebarExpanded((value) => !value));
|
|
38
38
|
const toggleAssistente = layout?.toggleAssistente ?? (() => setLocalAssistantExpanded((value) => !value));
|
|
@@ -56,10 +56,10 @@ export function TemplatePage({ user, onLogout }: TemplatePageProps) {
|
|
|
56
56
|
navigate={navigate}
|
|
57
57
|
routes={routes}
|
|
58
58
|
/>
|
|
59
|
-
<TemplateContent
|
|
60
|
-
user={user}
|
|
61
|
-
onLogout={onLogout}
|
|
62
|
-
onSettings={() => navigate('/settings')}
|
|
59
|
+
<TemplateContent
|
|
60
|
+
user={user}
|
|
61
|
+
onLogout={onLogout}
|
|
62
|
+
onSettings={() => navigate('/settings')}
|
|
63
63
|
/>
|
|
64
64
|
<XerticaAssistant
|
|
65
65
|
isExpanded={assistenteExpanded}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
-
import * as TemplatePageStories from './TemplatePage.stories';
|
|
3
|
-
|
|
4
|
-
<Meta of={TemplatePageStories} />
|
|
5
|
-
|
|
6
|
-
<Title>TemplatePage</Title>
|
|
7
|
-
<Subtitle>Full application shell with the component kitchen-sink reference.</Subtitle>
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Overview
|
|
12
|
-
|
|
13
|
-
`TemplatePage` is the reference implementation of the full application layout. It assembles:
|
|
14
|
-
|
|
15
|
-
- **Sidebar** - Primary navigation.
|
|
16
|
-
- **TemplateContent** - Kitchen-sink showcase of Xertica UI components.
|
|
17
|
-
- **XerticaAssistant** - Floating AI assistant panel.
|
|
18
|
-
|
|
19
|
-
When `XerticaProvider` is present, the page synchronizes sidebar width, sidebar expansion, and assistant visibility through `LayoutContext`. Without the provider, it renders with local fallback layout state.
|
|
20
|
-
|
|
21
|
-
**Requires:** React Router v6. `XerticaProvider` is recommended for app-level synchronization.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Props
|
|
26
|
-
|
|
27
|
-
| Prop | Type | Required | Description |
|
|
28
|
-
|---|---|---|---|
|
|
29
|
-
| `user` | `{ email: string } \| null` | Yes | Currently authenticated user. Passed to Sidebar for avatar and user menu display. |
|
|
30
|
-
| `onLogout` | `() => void` | Yes | Called when the user triggers logout from the Sidebar. |
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Composition
|
|
35
|
-
|
|
36
|
-
```tsx
|
|
37
|
-
import { TemplatePage } from 'xertica-ui';
|
|
38
|
-
|
|
39
|
-
<Route
|
|
40
|
-
path="/template"
|
|
41
|
-
element={<TemplatePage user={currentUser} onLogout={handleLogout} />}
|
|
42
|
-
/>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## AI Best Practices
|
|
48
|
-
|
|
49
|
-
> [!IMPORTANT]
|
|
50
|
-
> - **Reference implementation** - Use `TemplatePage` as the primary reference for assembling complex layouts.
|
|
51
|
-
> - **Top-level only** - This is a full-screen layout component. Do not nest it inside other layouts.
|
|
52
|
-
> - **Provider fallback** - The page renders without `XerticaProvider`, but the provider is recommended for synchronized app layout.
|
|
53
|
-
> - **Extend via TemplateContent** - To change showcased components, edit `TemplateContent`.
|
|
1
|
+
import { Meta, Title, Subtitle } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as TemplatePageStories from './TemplatePage.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={TemplatePageStories} />
|
|
5
|
+
|
|
6
|
+
<Title>TemplatePage</Title>
|
|
7
|
+
<Subtitle>Full application shell with the component kitchen-sink reference.</Subtitle>
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
`TemplatePage` is the reference implementation of the full application layout. It assembles:
|
|
14
|
+
|
|
15
|
+
- **Sidebar** - Primary navigation.
|
|
16
|
+
- **TemplateContent** - Kitchen-sink showcase of Xertica UI components.
|
|
17
|
+
- **XerticaAssistant** - Floating AI assistant panel.
|
|
18
|
+
|
|
19
|
+
When `XerticaProvider` is present, the page synchronizes sidebar width, sidebar expansion, and assistant visibility through `LayoutContext`. Without the provider, it renders with local fallback layout state.
|
|
20
|
+
|
|
21
|
+
**Requires:** React Router v6. `XerticaProvider` is recommended for app-level synchronization.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Props
|
|
26
|
+
|
|
27
|
+
| Prop | Type | Required | Description |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `user` | `{ email: string } \| null` | Yes | Currently authenticated user. Passed to Sidebar for avatar and user menu display. |
|
|
30
|
+
| `onLogout` | `() => void` | Yes | Called when the user triggers logout from the Sidebar. |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Composition
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { TemplatePage } from 'xertica-ui';
|
|
38
|
+
|
|
39
|
+
<Route
|
|
40
|
+
path="/template"
|
|
41
|
+
element={<TemplatePage user={currentUser} onLogout={handleLogout} />}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## AI Best Practices
|
|
48
|
+
|
|
49
|
+
> [!IMPORTANT]
|
|
50
|
+
> - **Reference implementation** - Use `TemplatePage` as the primary reference for assembling complex layouts.
|
|
51
|
+
> - **Top-level only** - This is a full-screen layout component. Do not nest it inside other layouts.
|
|
52
|
+
> - **Provider fallback** - The page renders without `XerticaProvider`, but the provider is recommended for synchronized app layout.
|
|
53
|
+
> - **Extend via TemplateContent** - To change showcased components, edit `TemplateContent`.
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { render, screen } from '@testing-library/react';
|
|
3
|
-
import { renderHook } from '@testing-library/react';
|
|
4
|
-
import { describe, expect, it } from 'vitest';
|
|
5
|
-
import * as Root from './index';
|
|
6
|
-
import * as Assistant from './assistant';
|
|
7
|
-
import * as Blocks from './blocks';
|
|
8
|
-
import * as Brand from './brand';
|
|
9
|
-
import * as Hooks from './hooks';
|
|
10
|
-
import * as Layout from './layout';
|
|
11
|
-
import * as Media from './media';
|
|
12
|
-
import * as Pages from './pages';
|
|
13
|
-
import * as UI from './ui';
|
|
14
|
-
|
|
15
|
-
describe('public API smoke tests', () => {
|
|
16
|
-
it('keeps all documented subpath entrypoints importable', () => {
|
|
17
|
-
expect(UI.Button).toBeDefined();
|
|
18
|
-
expect(Brand.XerticaProvider).toBeTypeOf('function');
|
|
19
|
-
expect(Layout.Header).toBeTypeOf('function');
|
|
20
|
-
expect(Assistant.XerticaAssistant).toBeTypeOf('function');
|
|
21
|
-
expect(Blocks.FeatureCard).toBeTypeOf('function');
|
|
22
|
-
expect(Media.AudioPlayer).toBeTypeOf('function');
|
|
23
|
-
expect(Pages.TemplateContent).toBeTypeOf('function');
|
|
24
|
-
expect(UI.CalendarDayButton).toBeTypeOf('function');
|
|
25
|
-
expect(Hooks.useOptionalLayout).toBeTypeOf('function');
|
|
26
|
-
expect(Hooks.useMobile).toBeTypeOf('function');
|
|
27
|
-
expect(Root.TemplateContent).toBe(Pages.TemplateContent);
|
|
28
|
-
expect(Root.XerticaProvider).toBe(Brand.XerticaProvider);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('renders representative components from the public subpaths', () => {
|
|
32
|
-
render(
|
|
33
|
-
<Brand.XerticaProvider>
|
|
34
|
-
<UI.Button>Action</UI.Button>
|
|
35
|
-
<Layout.Header title="Header smoke" />
|
|
36
|
-
<Assistant.MarkdownMessage content="**Assistant** smoke" />
|
|
37
|
-
<Media.AudioPlayer title="Audio smoke" enableAutoFloat={false} />
|
|
38
|
-
</Brand.XerticaProvider>
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
expect(screen.getByRole('button', { name: 'Action' })).toBeInTheDocument();
|
|
42
|
-
expect(screen.getByText('Header smoke')).toBeInTheDocument();
|
|
43
|
-
expect(screen.getByText('Assistant')).toBeInTheDocument();
|
|
44
|
-
expect(screen.getByText('Audio smoke')).toBeInTheDocument();
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('exposes optional hooks that can be called without root providers', () => {
|
|
48
|
-
const { result } = renderHook(() => Hooks.useOptionalLayout());
|
|
49
|
-
|
|
50
|
-
expect(result.current).toBeNull();
|
|
51
|
-
});
|
|
52
|
-
});
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
|
+
import { renderHook } from '@testing-library/react';
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import * as Root from './index';
|
|
6
|
+
import * as Assistant from './assistant';
|
|
7
|
+
import * as Blocks from './blocks';
|
|
8
|
+
import * as Brand from './brand';
|
|
9
|
+
import * as Hooks from './hooks';
|
|
10
|
+
import * as Layout from './layout';
|
|
11
|
+
import * as Media from './media';
|
|
12
|
+
import * as Pages from './pages';
|
|
13
|
+
import * as UI from './ui';
|
|
14
|
+
|
|
15
|
+
describe('public API smoke tests', () => {
|
|
16
|
+
it('keeps all documented subpath entrypoints importable', () => {
|
|
17
|
+
expect(UI.Button).toBeDefined();
|
|
18
|
+
expect(Brand.XerticaProvider).toBeTypeOf('function');
|
|
19
|
+
expect(Layout.Header).toBeTypeOf('function');
|
|
20
|
+
expect(Assistant.XerticaAssistant).toBeTypeOf('function');
|
|
21
|
+
expect(Blocks.FeatureCard).toBeTypeOf('function');
|
|
22
|
+
expect(Media.AudioPlayer).toBeTypeOf('function');
|
|
23
|
+
expect(Pages.TemplateContent).toBeTypeOf('function');
|
|
24
|
+
expect(UI.CalendarDayButton).toBeTypeOf('function');
|
|
25
|
+
expect(Hooks.useOptionalLayout).toBeTypeOf('function');
|
|
26
|
+
expect(Hooks.useMobile).toBeTypeOf('function');
|
|
27
|
+
expect(Root.TemplateContent).toBe(Pages.TemplateContent);
|
|
28
|
+
expect(Root.XerticaProvider).toBe(Brand.XerticaProvider);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('renders representative components from the public subpaths', () => {
|
|
32
|
+
render(
|
|
33
|
+
<Brand.XerticaProvider>
|
|
34
|
+
<UI.Button>Action</UI.Button>
|
|
35
|
+
<Layout.Header title="Header smoke" />
|
|
36
|
+
<Assistant.MarkdownMessage content="**Assistant** smoke" />
|
|
37
|
+
<Media.AudioPlayer title="Audio smoke" enableAutoFloat={false} />
|
|
38
|
+
</Brand.XerticaProvider>
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
expect(screen.getByRole('button', { name: 'Action' })).toBeInTheDocument();
|
|
42
|
+
expect(screen.getByText('Header smoke')).toBeInTheDocument();
|
|
43
|
+
expect(screen.getByText('Assistant')).toBeInTheDocument();
|
|
44
|
+
expect(screen.getByText('Audio smoke')).toBeInTheDocument();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('exposes optional hooks that can be called without root providers', () => {
|
|
48
|
+
const { result } = renderHook(() => Hooks.useOptionalLayout());
|
|
49
|
+
|
|
50
|
+
expect(result.current).toBeNull();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { BarChart3, ImageIcon, Table as TableIcon, FileText } from 'lucide-react';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
|
-
export interface AssistantSuggestion {
|
|
5
|
-
id: string;
|
|
6
|
-
text: string;
|
|
7
|
-
icon?: React.ReactNode;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface AssistantMessage {
|
|
11
|
-
id: string;
|
|
12
|
-
type: 'user' | 'assistant' | 'system';
|
|
13
|
-
content: string;
|
|
14
|
-
timestamp: Date;
|
|
15
|
-
isFavorite?: boolean;
|
|
16
|
-
chartData?: any[];
|
|
17
|
-
chartConfig?: any;
|
|
18
|
-
attachmentType?: 'file' | 'audio' | 'image' | 'video' | 'document' | 'podcast' | 'search';
|
|
19
|
-
attachmentName?: string;
|
|
20
|
-
documentContent?: string;
|
|
21
|
-
documentTitle?: string;
|
|
22
|
-
tableData?: {
|
|
23
|
-
caption?: string;
|
|
24
|
-
headers: string[];
|
|
25
|
-
rows: (string | React.ReactNode)[][];
|
|
26
|
-
};
|
|
27
|
-
audioUrl?: string;
|
|
28
|
-
evaluation?: 'like' | 'dislike';
|
|
29
|
-
evaluationReason?: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface MockResponse {
|
|
33
|
-
trigger: string | RegExp;
|
|
34
|
-
response: string | Partial<AssistantMessage>;
|
|
35
|
-
delay?: number;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Default suggestion chips for the chat interface.
|
|
40
|
-
*/
|
|
41
|
-
export const sugestoesPadrao: AssistantSuggestion[] = [
|
|
1
|
+
import { BarChart3, ImageIcon, Table as TableIcon, FileText } from 'lucide-react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
export interface AssistantSuggestion {
|
|
5
|
+
id: string;
|
|
6
|
+
text: string;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface AssistantMessage {
|
|
11
|
+
id: string;
|
|
12
|
+
type: 'user' | 'assistant' | 'system';
|
|
13
|
+
content: string;
|
|
14
|
+
timestamp: Date;
|
|
15
|
+
isFavorite?: boolean;
|
|
16
|
+
chartData?: any[];
|
|
17
|
+
chartConfig?: any;
|
|
18
|
+
attachmentType?: 'file' | 'audio' | 'image' | 'video' | 'document' | 'podcast' | 'search';
|
|
19
|
+
attachmentName?: string;
|
|
20
|
+
documentContent?: string;
|
|
21
|
+
documentTitle?: string;
|
|
22
|
+
tableData?: {
|
|
23
|
+
caption?: string;
|
|
24
|
+
headers: string[];
|
|
25
|
+
rows: (string | React.ReactNode)[][];
|
|
26
|
+
};
|
|
27
|
+
audioUrl?: string;
|
|
28
|
+
evaluation?: 'like' | 'dislike';
|
|
29
|
+
evaluationReason?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface MockResponse {
|
|
33
|
+
trigger: string | RegExp;
|
|
34
|
+
response: string | Partial<AssistantMessage>;
|
|
35
|
+
delay?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Default suggestion chips for the chat interface.
|
|
40
|
+
*/
|
|
41
|
+
export const sugestoesPadrao: AssistantSuggestion[] = [
|
|
42
42
|
{ id: '1', text: 'O que posso pedir para você fazer?' },
|
|
43
43
|
{ id: '2', text: 'O que você faz?' },
|
|
44
44
|
{ id: '3', text: 'Com quais projetos devo me preocupar agora?' },
|
|
@@ -49,7 +49,7 @@ export const sugestoesPadrao: AssistantSuggestion[] = [
|
|
|
49
49
|
/**
|
|
50
50
|
* Rich suggestion chips with icons for the chat interface.
|
|
51
51
|
*/
|
|
52
|
-
export const sugestoesRicas: AssistantSuggestion[] = [
|
|
52
|
+
export const sugestoesRicas: AssistantSuggestion[] = [
|
|
53
53
|
{ id: 'rich-1', text: 'Ver exemplo de Gráfico', icon: React.createElement(BarChart3, { className: "w-4 h-4 mr-2" }) },
|
|
54
54
|
{ id: 'rich-2', text: 'Ver exemplo de Imagem', icon: React.createElement(ImageIcon, { className: "w-4 h-4 mr-2" }) },
|
|
55
55
|
{ id: 'rich-3', text: 'Ver exemplo de Tabela', icon: React.createElement(TableIcon, { className: "w-4 h-4 mr-2" }) },
|
|
@@ -67,7 +67,7 @@ export const sugestoesRicas: AssistantSuggestion[] = [
|
|
|
67
67
|
* @param customResponses Optional list of custom mock responses.
|
|
68
68
|
* @returns A string or a Message object with the response.
|
|
69
69
|
*/
|
|
70
|
-
export const gerarResposta = (mensagemUsuario: string, customResponses?: MockResponse[]): string | Partial<AssistantMessage> => {
|
|
70
|
+
export const gerarResposta = (mensagemUsuario: string, customResponses?: MockResponse[]): string | Partial<AssistantMessage> => {
|
|
71
71
|
const mensagemLower = mensagemUsuario.toLowerCase();
|
|
72
72
|
|
|
73
73
|
// 1. Check custom responses first
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Width of the sidebar when expanded (Desktop) */
|
|
2
|
-
export const SIDEBAR_EXPANDED_WIDTH =
|
|
2
|
+
export const SIDEBAR_EXPANDED_WIDTH = 280;
|
|
3
3
|
/** Width of the sidebar when collapsed (Desktop) */
|
|
4
4
|
export const SIDEBAR_COLLAPSED_WIDTH = 80;
|
|
5
5
|
/** Width of the assistant panel when expanded (Desktop) */
|
|
@@ -13,14 +13,14 @@ import * as AccordionStories from './accordion.stories';
|
|
|
13
13
|
## Controls
|
|
14
14
|
<Controls />
|
|
15
15
|
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Variations
|
|
19
|
-
|
|
20
|
-
<Stories />
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Variations
|
|
19
|
+
|
|
20
|
+
<Stories />
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
24
|
## AI Best Practices
|
|
25
25
|
|
|
26
26
|
> [!IMPORTANT]
|