@omnitron-dev/prism 0.3.0 → 0.3.2
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/README.md +216 -2
- package/THIRD-PARTY-NOTICES.txt +26 -0
- package/dist/accessibility/index.js +2 -0
- package/dist/accessibility/index.js.map +1 -1
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/blocks/auth-block/guards.d.ts +3 -2
- package/dist/blocks/auth-block/guards.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/types.d.ts +4 -2
- package/dist/blocks/dashboard-block/types.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +2 -2
- package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -1
- package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -1
- package/dist/blocks/data-grid-block/types.d.ts +3 -0
- package/dist/blocks/data-grid-block/types.d.ts.map +1 -1
- package/dist/blocks/index.js +80 -253
- package/dist/blocks/index.js.map +1 -1
- package/dist/chunk-2AB7VGPW.js +447 -0
- package/dist/chunk-2AB7VGPW.js.map +1 -0
- package/dist/{chunk-WFD54GQQ.js → chunk-2E67PQ4T.js} +14 -573
- package/dist/chunk-2E67PQ4T.js.map +1 -0
- package/dist/chunk-2KG2NI73.js +84 -0
- package/dist/chunk-2KG2NI73.js.map +1 -0
- package/dist/chunk-2UYRW6X3.js +44 -0
- package/dist/chunk-2UYRW6X3.js.map +1 -0
- package/dist/chunk-36C5H56C.js +208 -0
- package/dist/chunk-36C5H56C.js.map +1 -0
- package/dist/chunk-36FOXX25.js +73 -0
- package/dist/chunk-36FOXX25.js.map +1 -0
- package/dist/chunk-3VSM7NZG.js +562 -0
- package/dist/chunk-3VSM7NZG.js.map +1 -0
- package/dist/chunk-4B2LTPK2.js +826 -0
- package/dist/chunk-4B2LTPK2.js.map +1 -0
- package/dist/chunk-4HUGZJKU.js +108 -0
- package/dist/chunk-4HUGZJKU.js.map +1 -0
- package/dist/chunk-4Q5L7LDG.js +74 -0
- package/dist/chunk-4Q5L7LDG.js.map +1 -0
- package/dist/{chunk-BRDWQVRT.js → chunk-4R7EZ7GQ.js} +3 -2
- package/dist/chunk-4R7EZ7GQ.js.map +1 -0
- package/dist/chunk-6IANOSMD.js +185 -0
- package/dist/chunk-6IANOSMD.js.map +1 -0
- package/dist/chunk-7ATBURW2.js +206 -0
- package/dist/chunk-7ATBURW2.js.map +1 -0
- package/dist/{chunk-6AHI4GSV.js → chunk-AATAOOSF.js} +4 -3
- package/dist/chunk-AATAOOSF.js.map +1 -0
- package/dist/chunk-AKLRKCYH.js +128 -0
- package/dist/chunk-AKLRKCYH.js.map +1 -0
- package/dist/chunk-CT46KJOR.js +133 -0
- package/dist/chunk-CT46KJOR.js.map +1 -0
- package/dist/{chunk-YQW43BDH.js → chunk-D4GFAJAZ.js} +1168 -6354
- package/dist/chunk-D4GFAJAZ.js.map +1 -0
- package/dist/chunk-D5J3KW6Q.js +106 -0
- package/dist/chunk-D5J3KW6Q.js.map +1 -0
- package/dist/chunk-DEPJRTVT.js +3 -0
- package/dist/{chunk-FU52GL2E.js.map → chunk-DEPJRTVT.js.map} +1 -1
- package/dist/{chunk-S6SEGBX6.js → chunk-DHTYHUYI.js} +85 -107
- package/dist/chunk-DHTYHUYI.js.map +1 -0
- package/dist/chunk-E7WM2RXA.js +249 -0
- package/dist/chunk-E7WM2RXA.js.map +1 -0
- package/dist/chunk-F6RZ7LW6.js +1271 -0
- package/dist/chunk-F6RZ7LW6.js.map +1 -0
- package/dist/chunk-FOGY3HA4.js +217 -0
- package/dist/chunk-FOGY3HA4.js.map +1 -0
- package/dist/chunk-G2GANYMW.js +139 -0
- package/dist/chunk-G2GANYMW.js.map +1 -0
- package/dist/chunk-I6DILPFE.js +293 -0
- package/dist/chunk-I6DILPFE.js.map +1 -0
- package/dist/chunk-IRYU3NTG.js +573 -0
- package/dist/chunk-IRYU3NTG.js.map +1 -0
- package/dist/chunk-JTIUGPW5.js +284 -0
- package/dist/chunk-JTIUGPW5.js.map +1 -0
- package/dist/{chunk-GUFHFEPZ.js → chunk-JZBSPDED.js} +2 -2
- package/dist/{chunk-GUFHFEPZ.js.map → chunk-JZBSPDED.js.map} +1 -1
- package/dist/chunk-KPY7TA4D.js +191 -0
- package/dist/chunk-KPY7TA4D.js.map +1 -0
- package/dist/{chunk-OBJ244BO.js → chunk-LFWKGNCX.js} +50 -656
- package/dist/chunk-LFWKGNCX.js.map +1 -0
- package/dist/chunk-LH4ZZZYB.js +37 -0
- package/dist/chunk-LH4ZZZYB.js.map +1 -0
- package/dist/chunk-NFJ7CPG3.js +13 -0
- package/dist/chunk-NFJ7CPG3.js.map +1 -0
- package/dist/chunk-NFPOIHD4.js +3 -0
- package/dist/{chunk-AYYFMTMI.js.map → chunk-NFPOIHD4.js.map} +1 -1
- package/dist/{chunk-XIXSSI3B.js → chunk-NJM5AVBM.js} +3 -2
- package/dist/chunk-NJM5AVBM.js.map +1 -0
- package/dist/{chunk-Z5OSPAOC.js → chunk-NSNM53WI.js} +196 -175
- package/dist/chunk-NSNM53WI.js.map +1 -0
- package/dist/chunk-NTREGTG7.js +31 -0
- package/dist/chunk-NTREGTG7.js.map +1 -0
- package/dist/{chunk-ADG4HZEP.js → chunk-OKJA6SJM.js} +4 -4
- package/dist/chunk-OKJA6SJM.js.map +1 -0
- package/dist/chunk-Q6JDNFSG.js +303 -0
- package/dist/chunk-Q6JDNFSG.js.map +1 -0
- package/dist/chunk-RPOGINR5.js +115 -0
- package/dist/chunk-RPOGINR5.js.map +1 -0
- package/dist/{chunk-ZTATTUH7.js → chunk-RSWVYIXK.js} +282 -683
- package/dist/chunk-RSWVYIXK.js.map +1 -0
- package/dist/chunk-SSEHL5VP.js +110 -0
- package/dist/chunk-SSEHL5VP.js.map +1 -0
- package/dist/chunk-TEIGUOWN.js +523 -0
- package/dist/chunk-TEIGUOWN.js.map +1 -0
- package/dist/{chunk-AYYFMTMI.js → chunk-TJ7DHXUX.js} +2 -2
- package/dist/chunk-TJ7DHXUX.js.map +1 -0
- package/dist/chunk-TZHWYT34.js +590 -0
- package/dist/chunk-TZHWYT34.js.map +1 -0
- package/dist/chunk-TZWHELY4.js +45 -0
- package/dist/chunk-TZWHELY4.js.map +1 -0
- package/dist/{chunk-BZOL7GMU.js → chunk-UEINJFLS.js} +7 -7
- package/dist/chunk-UEINJFLS.js.map +1 -0
- package/dist/chunk-URFQX3I6.js +129 -0
- package/dist/chunk-URFQX3I6.js.map +1 -0
- package/dist/chunk-VG6FOMOH.js +187 -0
- package/dist/chunk-VG6FOMOH.js.map +1 -0
- package/dist/chunk-VQVVHMPG.js +106 -0
- package/dist/chunk-VQVVHMPG.js.map +1 -0
- package/dist/{chunk-DRFNMZLG.js → chunk-VUKOT432.js} +3 -2
- package/dist/chunk-VUKOT432.js.map +1 -0
- package/dist/chunk-WD4N72DL.js +315 -0
- package/dist/chunk-WD4N72DL.js.map +1 -0
- package/dist/chunk-XBYMG4QK.js +119 -0
- package/dist/chunk-XBYMG4QK.js.map +1 -0
- package/dist/chunk-YHM6GIHV.js +3 -0
- package/dist/chunk-YHM6GIHV.js.map +1 -0
- package/dist/{chunk-SNZK5X6F.js → chunk-Z2AN43YU.js} +4 -2
- package/dist/chunk-Z2AN43YU.js.map +1 -0
- package/dist/chunk-ZNWHMQRM.js +171 -0
- package/dist/chunk-ZNWHMQRM.js.map +1 -0
- package/dist/{chunk-YSIG2XYH.js → chunk-ZRJYQN6Y.js} +2 -2
- package/dist/{chunk-YSIG2XYH.js.map → chunk-ZRJYQN6Y.js.map} +1 -1
- package/dist/{chunk-AD4W7HYC.js → chunk-ZYI3MHLE.js} +3 -2
- package/dist/chunk-ZYI3MHLE.js.map +1 -0
- package/dist/cli/index.js +66 -423
- package/dist/cli/index.js.map +1 -1
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
- package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
- package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
- package/dist/components/admin-filters/index.js +8 -0
- package/dist/components/admin-filters/index.js.map +1 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +5 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/animate/index.js +5 -0
- package/dist/components/animate/index.js.map +1 -0
- package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/components/breadcrumbs/index.js +4 -0
- package/dist/components/breadcrumbs/index.js.map +1 -0
- package/dist/components/card/index.js +4 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.css +52 -0
- package/dist/components/chart/index.css.map +1 -0
- package/dist/components/chart/index.js +5 -0
- package/dist/components/chart/index.js.map +1 -0
- package/dist/components/chart/types.d.ts +3 -1
- package/dist/components/chart/types.d.ts.map +1 -1
- package/dist/components/chart/use-chart.d.ts.map +1 -1
- package/dist/components/command-palette/command-palette.d.ts +3 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +4 -0
- package/dist/components/command-palette/index.js.map +1 -0
- package/dist/components/confirm-dialog/index.js +4 -0
- package/dist/components/confirm-dialog/index.js.map +1 -0
- package/dist/components/date-input/date-input.d.ts +28 -0
- package/dist/components/date-input/date-input.d.ts.map +1 -0
- package/dist/components/date-input/index.d.ts +3 -0
- package/dist/components/date-input/index.d.ts.map +1 -0
- package/dist/components/date-input/value.d.ts +9 -0
- package/dist/components/date-input/value.d.ts.map +1 -0
- package/dist/components/doc-layout/doc-sidebar.d.ts +4 -1
- package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -1
- package/dist/components/doc-layout/index.js +7 -0
- package/dist/components/doc-layout/index.js.map +1 -0
- package/dist/components/editor/editor.d.ts.map +1 -1
- package/dist/components/editor/icons/index.d.ts +32 -40
- package/dist/components/editor/icons/index.d.ts.map +1 -1
- package/dist/components/editor/index.js +4 -1
- package/dist/components/editor/index.js.map +1 -1
- package/dist/components/emoji-picker/index.js +2 -1
- package/dist/components/emoji-picker/index.js.map +1 -1
- package/dist/components/empty-content/empty-content.d.ts.map +1 -1
- package/dist/components/empty-content/index.js +4 -0
- package/dist/components/empty-content/index.js.map +1 -0
- package/dist/components/error-boundary/error-boundary.d.ts.map +1 -1
- package/dist/components/error-boundary/index.js +6 -0
- package/dist/components/error-boundary/index.js.map +1 -0
- package/dist/components/index.css +17 -10
- package/dist/components/index.css.map +1 -1
- package/dist/components/index.d.ts +5 -4
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -11
- package/dist/components/index.js.map +1 -1
- package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
- package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
- package/dist/components/knowledge-graph/graph.d.ts +56 -0
- package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
- package/dist/components/knowledge-graph/index.css +176 -0
- package/dist/components/knowledge-graph/index.css.map +1 -0
- package/dist/components/knowledge-graph/index.d.ts +3 -0
- package/dist/components/knowledge-graph/index.d.ts.map +1 -0
- package/dist/components/knowledge-graph/index.js +797 -0
- package/dist/components/knowledge-graph/index.js.map +1 -0
- package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
- package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
- package/dist/components/knowledge-graph/label-store.d.ts +15 -0
- package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
- package/dist/components/knowledge-graph/model.d.ts +92 -0
- package/dist/components/knowledge-graph/model.d.ts.map +1 -0
- package/dist/components/label/index.js +5 -0
- package/dist/components/label/index.js.map +1 -0
- package/dist/components/label/label.d.ts.map +1 -1
- package/dist/components/lightbox/lightbox.d.ts.map +1 -1
- package/dist/components/loading-screen/index.js +4 -0
- package/dist/components/loading-screen/index.js.map +1 -0
- package/dist/components/map/Map.d.ts +19 -43
- package/dist/components/map/Map.d.ts.map +1 -1
- package/dist/components/map/MapCoverageLayer.d.ts +1 -1
- package/dist/components/map/MapCoverageLayer.d.ts.map +1 -1
- package/dist/components/map/MapMarker.d.ts +1 -1
- package/dist/components/map/MapMarker.d.ts.map +1 -1
- package/dist/components/map/MapPlaceSearch.d.ts +33 -0
- package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
- package/dist/components/map/MapPointPicker.d.ts +21 -12
- package/dist/components/map/MapPointPicker.d.ts.map +1 -1
- package/dist/components/map/coordinates.d.ts +10 -0
- package/dist/components/map/coordinates.d.ts.map +1 -0
- package/dist/components/map/index.css +4 -0
- package/dist/components/map/index.css.map +1 -0
- package/dist/components/map/index.d.ts +7 -2
- package/dist/components/map/index.d.ts.map +1 -1
- package/dist/components/map/index.js +4 -0
- package/dist/components/map/index.js.map +1 -0
- package/dist/components/nav-card/nav-card.d.ts.map +1 -1
- package/dist/components/navigation-progress/index.js +4 -0
- package/dist/components/navigation-progress/index.js.map +1 -0
- package/dist/components/page-content/index.js +4 -0
- package/dist/components/page-content/index.js.map +1 -0
- package/dist/components/popover/index.js +4 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/rail/rail.d.ts.map +1 -1
- package/dist/components/research/diagram-image.d.ts +11 -0
- package/dist/components/research/diagram-image.d.ts.map +1 -0
- package/dist/components/research/diagram.d.ts +8 -0
- package/dist/components/research/diagram.d.ts.map +1 -0
- package/dist/components/research/document.d.ts +33 -0
- package/dist/components/research/document.d.ts.map +1 -0
- package/dist/components/research/frontmatter.d.ts +15 -0
- package/dist/components/research/frontmatter.d.ts.map +1 -0
- package/dist/components/research/index.css +51 -0
- package/dist/components/research/index.css.map +1 -0
- package/dist/components/research/index.d.ts +3 -0
- package/dist/components/research/index.d.ts.map +1 -0
- package/dist/components/research/index.js +8 -0
- package/dist/components/research/index.js.map +1 -0
- package/dist/components/research/parse.d.ts +29 -0
- package/dist/components/research/parse.d.ts.map +1 -0
- package/dist/components/research-editor/block-commands.d.ts +20 -0
- package/dist/components/research-editor/block-commands.d.ts.map +1 -0
- package/dist/components/research-editor/block-controls.d.ts +13 -0
- package/dist/components/research-editor/block-controls.d.ts.map +1 -0
- package/dist/components/research-editor/editor.d.ts +75 -0
- package/dist/components/research-editor/editor.d.ts.map +1 -0
- package/dist/components/research-editor/extensions.d.ts +14 -0
- package/dist/components/research-editor/extensions.d.ts.map +1 -0
- package/dist/components/research-editor/index.css +332 -0
- package/dist/components/research-editor/index.css.map +1 -0
- package/dist/components/research-editor/index.d.ts +5 -0
- package/dist/components/research-editor/index.d.ts.map +1 -0
- package/dist/components/research-editor/index.js +1593 -0
- package/dist/components/research-editor/index.js.map +1 -0
- package/dist/components/research-editor/math-input.d.ts +32 -0
- package/dist/components/research-editor/math-input.d.ts.map +1 -0
- package/dist/components/research-editor/math-markup.d.ts +4 -0
- package/dist/components/research-editor/math-markup.d.ts.map +1 -0
- package/dist/components/research-editor/math-navigation.d.ts +6 -0
- package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
- package/dist/components/research-editor/math-node.d.ts +11 -0
- package/dist/components/research-editor/math-node.d.ts.map +1 -0
- package/dist/components/research-editor/source.d.ts +19 -0
- package/dist/components/research-editor/source.d.ts.map +1 -0
- package/dist/components/scroll-to-top/index.js +4 -0
- package/dist/components/scroll-to-top/index.js.map +1 -0
- package/dist/components/scrollbar/scrollbar.d.ts +4 -2
- package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
- package/dist/components/search-input/index.js +7 -0
- package/dist/components/search-input/index.js.map +1 -0
- package/dist/components/search-input/search-input.d.ts +3 -11
- package/dist/components/search-input/search-input.d.ts.map +1 -1
- package/dist/components/skeleton/index.js +4 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/snackbar/index.js +6 -0
- package/dist/components/snackbar/index.js.map +1 -0
- package/dist/components/stepper/index.js +4 -0
- package/dist/components/stepper/index.js.map +1 -0
- package/dist/components/table/index.d.ts +1 -0
- package/dist/components/table/index.d.ts.map +1 -1
- package/dist/components/table/index.js +5 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table-viewport.d.ts +13 -0
- package/dist/components/table/table-viewport.d.ts.map +1 -0
- package/dist/components/table/table.d.ts +3 -1
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/tabs/index.js +6 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tabs.d.ts +12 -1
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +4 -3
- package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +12 -6
- package/dist/core/index.js.map +1 -1
- package/dist/core/provider.d.ts +7 -2
- package/dist/core/provider.d.ts.map +1 -1
- package/dist/forms/index.js +2 -0
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/schema-provider.d.ts +3 -3
- package/dist/forms/schema-utils.d.ts +3 -3
- package/dist/hooks/index.js +14 -8
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-config-from-query.d.ts +2 -0
- package/dist/hooks/use-config-from-query.d.ts.map +1 -1
- package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
- package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
- package/dist/hooks/use-scroll-position.d.ts.map +1 -1
- package/dist/hooks/use-window-size.d.ts.map +1 -1
- package/dist/icons/context.d.ts +17 -0
- package/dist/icons/context.d.ts.map +1 -0
- package/dist/icons/controls.d.ts +51 -0
- package/dist/icons/controls.d.ts.map +1 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +5 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/theme.d.ts +4 -0
- package/dist/icons/theme.d.ts.map +1 -0
- package/dist/index.css +17 -10
- package/dist/index.css.map +1 -1
- package/dist/index.js +57 -20
- package/dist/index.js.map +1 -1
- package/dist/internal/research-parser.js +3 -0
- package/dist/internal/research-parser.js.map +1 -0
- package/dist/layouts/core/header-section.d.ts +1 -0
- package/dist/layouts/core/header-section.d.ts.map +1 -1
- package/dist/layouts/dashboard/labels.d.ts +12 -0
- package/dist/layouts/dashboard/labels.d.ts.map +1 -0
- package/dist/layouts/dashboard/layout.d.ts +9 -1
- package/dist/layouts/dashboard/layout.d.ts.map +1 -1
- package/dist/layouts/dashboard/sidenav.d.ts +7 -3
- package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
- package/dist/layouts/index.d.ts +5 -0
- package/dist/layouts/index.d.ts.map +1 -1
- package/dist/layouts/index.js +9 -3
- package/dist/layouts/index.js.map +1 -1
- package/dist/layouts/panel-layout.d.ts +35 -0
- package/dist/layouts/panel-layout.d.ts.map +1 -0
- package/dist/layouts/sidebar-toggle.d.ts +11 -0
- package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
- package/dist/netron/index.js +2 -1
- package/dist/netron/index.js.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/state/create-store.d.ts.map +1 -1
- package/dist/state/index.js +3 -2
- package/dist/state/index.js.map +1 -1
- package/dist/state/settings-version.d.ts.map +1 -1
- package/dist/state/stores/auth.d.ts +4 -16
- package/dist/state/stores/auth.d.ts.map +1 -1
- package/dist/state/stores/ui.d.ts +7 -105
- package/dist/state/stores/ui.d.ts.map +1 -1
- package/dist/theme/components/Button.d.ts.map +1 -1
- package/dist/theme/components/Chip.d.ts.map +1 -1
- package/dist/theme/components/Dialog.d.ts.map +1 -1
- package/dist/theme/components/FormControls.d.ts +3 -12
- package/dist/theme/components/FormControls.d.ts.map +1 -1
- package/dist/theme/components/TextField.d.ts.map +1 -1
- package/dist/theme/components/index.d.ts.map +1 -1
- package/dist/theme/components/theme-utils.d.ts +2 -2
- package/dist/theme/components/theme-utils.d.ts.map +1 -1
- package/dist/theme/create-theme.d.ts +5 -17
- package/dist/theme/create-theme.d.ts.map +1 -1
- package/dist/theme/index.js +8 -2
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/mixins.d.ts +3 -1
- package/dist/theme/mixins.d.ts.map +1 -1
- package/dist/theme/palette/overrides.d.ts +24 -0
- package/dist/theme/palette/overrides.d.ts.map +1 -0
- package/dist/theme/semantic-surface.d.ts +8 -0
- package/dist/theme/semantic-surface.d.ts.map +1 -0
- package/dist/types/index.js +2 -2
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +149 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/async-lock.d.ts.map +1 -1
- package/package.json +200 -47
- package/dist/chunk-6AHI4GSV.js.map +0 -1
- package/dist/chunk-AD4W7HYC.js.map +0 -1
- package/dist/chunk-ADG4HZEP.js.map +0 -1
- package/dist/chunk-BRDWQVRT.js.map +0 -1
- package/dist/chunk-BZOL7GMU.js.map +0 -1
- package/dist/chunk-DRFNMZLG.js.map +0 -1
- package/dist/chunk-FU52GL2E.js +0 -3
- package/dist/chunk-OBJ244BO.js.map +0 -1
- package/dist/chunk-S6SEGBX6.js.map +0 -1
- package/dist/chunk-SNZK5X6F.js.map +0 -1
- package/dist/chunk-WFD54GQQ.js.map +0 -1
- package/dist/chunk-XIXSSI3B.js.map +0 -1
- package/dist/chunk-YQW43BDH.js.map +0 -1
- package/dist/chunk-Z5OSPAOC.js.map +0 -1
- package/dist/chunk-ZTATTUH7.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/empty-content/empty-content.tsx"],"names":[],"mappings":"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","file":"chunk-6IANOSMD.js","sourcesContent":["'use client';\n\n/**\n * Empty Content Component\n *\n * Universal placeholder for empty states across the application.\n * Supports icon-based illustrations, multiple action buttons,\n * filled backgrounds, and compact mode.\n *\n * @module components/empty-content\n */\n\nimport type { ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface EmptyContentProps {\n /** Custom illustration (SVG, image, or any ReactNode) */\n illustration?: ReactNode;\n /** Icon element — rendered inside a circular colored wrapper */\n icon?: ReactNode;\n /** Color for the icon wrapper background (palette path like 'primary.main') */\n iconColor?: string;\n /** Size of the icon wrapper (default 64) */\n iconSize?: number;\n /** Main title text */\n title?: string;\n /** Description text or ReactNode */\n description?: ReactNode;\n /** Single action button (backward compatible) */\n action?: ReactNode;\n /** Multiple action buttons rendered in a row */\n actions?: ReactNode[];\n /** Max width of the container */\n maxWidth?: number | string;\n /** Fill the entire available space (height: 100%) */\n filled?: boolean;\n /** Additional styles for root container */\n sx?: SxProps<Theme>;\n /** Illustration wrapper styles */\n illustrationSx?: SxProps<Theme>;\n /** Slot overrides */\n slotProps?: {\n title?: SxProps<Theme>;\n description?: SxProps<Theme>;\n actions?: SxProps<Theme>;\n };\n /** Compact mode — reduces spacing and font sizes */\n compact?: boolean;\n}\n\n// =============================================================================\n// DEFAULT ILLUSTRATION\n// =============================================================================\n\nfunction IconWrapper({ icon, color = 'primary.main', size = 64 }: { icon: ReactNode; color?: string; size?: number }) {\n return (\n <Box\n sx={{\n width: size,\n height: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: (theme) => {\n // Resolve palette path (e.g. 'primary.main' → theme.palette.primary.main)\n const parts = color.split('.');\n let resolved: any = theme.palette;\n for (const part of parts) {\n resolved = resolved?.[part];\n }\n return typeof resolved === 'string' ? alpha(resolved, 0.08) : alpha(theme.palette.primary.main, 0.08);\n },\n }}\n >\n {icon}\n </Box>\n );\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * EmptyContent - Universal empty state placeholder.\n *\n * @example Basic\n * ```tsx\n * <EmptyContent title=\"No data found\" description=\"Try adjusting your filters\" />\n * ```\n *\n * @example With icon\n * ```tsx\n * <EmptyContent\n * icon={<ChatIcon sx={{ width: 28, height: 28, color: 'primary.main', opacity: 0.6 }} />}\n * title=\"Select a conversation\"\n * description=\"Choose a room from the sidebar\"\n * />\n * ```\n *\n * @example With multiple actions\n * ```tsx\n * <EmptyContent\n * icon={<FolderIcon sx={{ fontSize: 28, color: 'text.disabled' }} />}\n * title=\"No files yet\"\n * description=\"Upload files or create a folder to get started\"\n * actions={[\n * <Button variant=\"contained\" startIcon={<UploadIcon />}>Upload</Button>,\n * <Button variant=\"outlined\" startIcon={<FolderIcon />}>New folder</Button>,\n * ]}\n * />\n * ```\n *\n * @example Filled (full height)\n * ```tsx\n * <EmptyContent filled title=\"No messages\" compact />\n * ```\n */\nexport function EmptyContent({\n illustration,\n icon,\n iconColor = 'primary.main',\n iconSize = 64,\n title = 'No data',\n description,\n action,\n actions,\n maxWidth = 400,\n filled = false,\n sx,\n illustrationSx,\n slotProps,\n compact = false,\n}: EmptyContentProps): ReactNode {\n // Determine visual: icon > illustration > nothing (no default for clean minimal states)\n const visual = icon ? (\n <IconWrapper icon={icon} color={iconColor} size={iconSize} />\n ) : illustration ? (\n <Box sx={illustrationSx}>{illustration}</Box>\n ) : null;\n\n // Merge actions: single action + array\n const allActions = [...(actions ?? []), ...(action ? [action] : [])];\n\n return (\n <Stack\n sx={{\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: 'center',\n py: compact ? 4 : 8,\n px: 2,\n\n // Default non-compact behavior: vertically center inside the\n // available \"main content\" area. Two complementary anchors:\n // * `flex: 1, alignSelf: 'stretch'` — when the parent IS a\n // flex column with explicit height (DashboardLayout main,\n // full-height page wrappers), EmptyContent grows to fill\n // the column and the inner `justifyContent: center` puts\n // the message in the middle of that column.\n // * `minHeight: calc(100vh - 240px)` — fallback for the\n // common case where the page wrapper is just a content-\n // sized `<Stack>` or `<Box>`. 240px is the typical\n // vertical chrome (header ~64 + breadcrumbs ~60 + page\n // padding ~80 + a small margin), so this leaves enough\n // space below the breadcrumbs for the message to sit at\n // the optical center of the visible viewport.\n //\n // `compact` keeps the inline-sized behavior for callers that\n // drop EmptyContent inside a card cell or sidebar.\n // `filled` is the explicit \"fill my parent\" mode and shares\n // the same fallback so the visual is consistent.\n ...(!compact && {\n flex: 1,\n alignSelf: 'stretch',\n minHeight: 'calc(100vh - 240px)',\n }),\n\n ...(filled && { height: '100%' }),\n ...sx\n }}>\n <Box\n sx={{\n maxWidth,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: compact ? 1.5 : 2.5,\n }}\n >\n {/* Visual (icon or illustration) */}\n {visual}\n\n {/* Text */}\n <Stack spacing={0.5} sx={{\n alignItems: \"center\"\n }}>\n {title && (\n <Typography\n variant={compact ? 'subtitle1' : 'h6'}\n sx={{\n color: \"text.secondary\",\n fontWeight: 600,\n ...slotProps?.title\n }}>\n {title}\n </Typography>\n )}\n\n {description && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.disabled\",\n lineHeight: 1.6,\n ...slotProps?.description\n }}>\n {description}\n </Typography>\n )}\n </Stack>\n\n {/* Actions */}\n {allActions.length > 0 && (\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{ mt: compact ? 0.5 : 1, flexWrap: 'wrap', justifyContent: 'center', ...slotProps?.actions }}\n >\n {allActions.map((a, i) => (\n <Box key={i}>{a}</Box>\n ))}\n </Stack>\n )}\n </Box>\n </Stack>\n );\n}\n\n/**\n * Search Empty Content - Specialized empty state for search results.\n */\nexport function SearchEmptyContent({\n query,\n ...props\n}: Omit<EmptyContentProps, 'title' | 'description'> & { query?: string }): ReactNode {\n return (\n <EmptyContent\n title=\"No results found\"\n description={\n query ? `Your search for \"${query}\" did not match any results.` : 'Try adjusting your search criteria.'\n }\n {...props}\n />\n );\n}\n\n/**\n * Loading Empty Content - Placeholder while loading.\n */\nexport function LoadingEmptyContent({ ...props }: Omit<EmptyContentProps, 'title'>): ReactNode {\n return (\n <EmptyContent\n title=\"Loading...\"\n illustration={\n <Box\n sx={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n border: '3px solid',\n borderColor: 'divider',\n borderTopColor: 'primary.main',\n animation: 'spin 1s linear infinite',\n '@keyframes spin': {\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n },\n }}\n />\n }\n compact\n {...props}\n />\n );\n}\n"]}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { ChevronDownIcon, ChevronRightIcon } from './chunk-VQVVHMPG.js';
|
|
2
|
+
import { useId, useState, useRef, useEffect, useLayoutEffect } from 'react';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import List from '@mui/material/List';
|
|
5
|
+
import ListItemButton from '@mui/material/ListItemButton';
|
|
6
|
+
import Collapse from '@mui/material/Collapse';
|
|
7
|
+
import Tooltip from '@mui/material/Tooltip';
|
|
8
|
+
import Typography from '@mui/material/Typography';
|
|
9
|
+
import { alpha } from '@mui/material/styles';
|
|
10
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
11
|
+
|
|
12
|
+
var MAX_LABEL_LINES = 2;
|
|
13
|
+
var useIsoLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
14
|
+
function DocSidebar({ items, activeId, onItemClick, title, compact = false }) {
|
|
15
|
+
const compactIndex = () => {
|
|
16
|
+
const leaves = (nodes, path = []) => nodes.flatMap((item) => [
|
|
17
|
+
...item.href || !item.children?.length ? [{ item, path: [...path, item.label].join(" / ") }] : [],
|
|
18
|
+
...leaves(item.children ?? [], [...path, item.label])
|
|
19
|
+
]);
|
|
20
|
+
return /* @__PURE__ */ jsx(List, { dense: true, disablePadding: true, "aria-label": title, children: leaves(items).map(({ item, path }, index) => /* @__PURE__ */ jsx(Tooltip, { title: path, placement: "right", disableInteractive: true, children: /* @__PURE__ */ jsx(
|
|
21
|
+
ListItemButton,
|
|
22
|
+
{
|
|
23
|
+
component: item.href ? "a" : "button",
|
|
24
|
+
href: item.href,
|
|
25
|
+
"aria-label": item.label,
|
|
26
|
+
"aria-current": activeId === item.id ? "page" : void 0,
|
|
27
|
+
selected: activeId === item.id,
|
|
28
|
+
onClick: (event) => {
|
|
29
|
+
if (item.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0))
|
|
30
|
+
return;
|
|
31
|
+
if (item.href && onItemClick) event.preventDefault();
|
|
32
|
+
onItemClick?.(item);
|
|
33
|
+
},
|
|
34
|
+
sx: {
|
|
35
|
+
minHeight: 40,
|
|
36
|
+
width: "100%",
|
|
37
|
+
px: 0.5,
|
|
38
|
+
mb: 0.5,
|
|
39
|
+
borderRadius: 1,
|
|
40
|
+
justifyContent: "center",
|
|
41
|
+
textDecoration: "none"
|
|
42
|
+
},
|
|
43
|
+
children: /* @__PURE__ */ jsx(Typography, { component: "span", variant: "caption", "aria-hidden": "true", sx: { fontWeight: 600 }, children: item.shortLabel ?? String(index + 1).padStart(2, "0") })
|
|
44
|
+
}
|
|
45
|
+
) }, item.id)) });
|
|
46
|
+
};
|
|
47
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
48
|
+
compact && compactIndex(),
|
|
49
|
+
/* @__PURE__ */ jsxs(Box, { hidden: compact, children: [
|
|
50
|
+
title && /* @__PURE__ */ jsx(
|
|
51
|
+
Typography,
|
|
52
|
+
{
|
|
53
|
+
variant: "subtitle2",
|
|
54
|
+
sx: {
|
|
55
|
+
px: 1.5,
|
|
56
|
+
pt: 0.5,
|
|
57
|
+
pb: 2,
|
|
58
|
+
fontWeight: 700,
|
|
59
|
+
fontSize: "0.8125rem",
|
|
60
|
+
color: "text.secondary",
|
|
61
|
+
letterSpacing: "0.01em"
|
|
62
|
+
},
|
|
63
|
+
children: title
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
/* @__PURE__ */ jsx(List, { dense: true, disablePadding: true, children: items.map((item) => /* @__PURE__ */ jsx(SidebarNode, { item, activeId, onItemClick, depth: 0 }, item.id)) })
|
|
67
|
+
] })
|
|
68
|
+
] });
|
|
69
|
+
}
|
|
70
|
+
function SidebarNode({
|
|
71
|
+
item,
|
|
72
|
+
activeId,
|
|
73
|
+
onItemClick,
|
|
74
|
+
depth
|
|
75
|
+
}) {
|
|
76
|
+
const hasChildren = !!item.children?.length;
|
|
77
|
+
const childrenId = useId();
|
|
78
|
+
const isActive = activeId === item.id;
|
|
79
|
+
const [open, setOpen] = useState(true);
|
|
80
|
+
const isCategory = hasChildren && !item.href;
|
|
81
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
82
|
+
/* @__PURE__ */ jsxs(
|
|
83
|
+
ListItemButton,
|
|
84
|
+
{
|
|
85
|
+
component: item.href ? "a" : "button",
|
|
86
|
+
href: item.href,
|
|
87
|
+
"aria-current": isActive ? "page" : void 0,
|
|
88
|
+
"aria-expanded": hasChildren ? open : void 0,
|
|
89
|
+
"aria-controls": hasChildren ? childrenId : void 0,
|
|
90
|
+
selected: isActive,
|
|
91
|
+
onClick: (event) => {
|
|
92
|
+
if (item.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0))
|
|
93
|
+
return;
|
|
94
|
+
if (item.href && onItemClick) event.preventDefault();
|
|
95
|
+
if (hasChildren) setOpen(!open);
|
|
96
|
+
onItemClick?.(item);
|
|
97
|
+
},
|
|
98
|
+
sx: {
|
|
99
|
+
pl: 1.5 + depth * 1.5,
|
|
100
|
+
pr: 1,
|
|
101
|
+
py: isCategory ? 0.75 : 0.5,
|
|
102
|
+
borderRadius: 1,
|
|
103
|
+
mx: 0.5,
|
|
104
|
+
mb: 0.25,
|
|
105
|
+
minHeight: 0,
|
|
106
|
+
alignItems: "center",
|
|
107
|
+
width: "calc(100% - 8px)",
|
|
108
|
+
textAlign: "left",
|
|
109
|
+
textDecoration: "none",
|
|
110
|
+
...isCategory && {
|
|
111
|
+
mt: depth === 0 ? 1 : 0.5
|
|
112
|
+
},
|
|
113
|
+
...isActive && {
|
|
114
|
+
bgcolor: (theme) => alpha(theme.palette.primary.main, 0.08),
|
|
115
|
+
color: "primary.main"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
children: [
|
|
119
|
+
hasChildren && /* @__PURE__ */ jsx(
|
|
120
|
+
Box,
|
|
121
|
+
{
|
|
122
|
+
component: "span",
|
|
123
|
+
"aria-hidden": "true",
|
|
124
|
+
sx: {
|
|
125
|
+
width: 20,
|
|
126
|
+
height: 20,
|
|
127
|
+
flexShrink: 0,
|
|
128
|
+
display: "inline-flex",
|
|
129
|
+
alignItems: "center",
|
|
130
|
+
justifyContent: "center",
|
|
131
|
+
lineHeight: 1
|
|
132
|
+
},
|
|
133
|
+
children: open ? /* @__PURE__ */ jsx(ChevronDownIcon, { sx: { fontSize: 18 } }) : /* @__PURE__ */ jsx(ChevronRightIcon, { sx: { fontSize: 18 } })
|
|
134
|
+
}
|
|
135
|
+
),
|
|
136
|
+
/* @__PURE__ */ jsx(
|
|
137
|
+
SidebarLabel,
|
|
138
|
+
{
|
|
139
|
+
label: item.label,
|
|
140
|
+
sx: {
|
|
141
|
+
fontWeight: isCategory ? 600 : isActive ? 600 : 400,
|
|
142
|
+
fontSize: "0.8125rem",
|
|
143
|
+
...isCategory && { color: "text.primary" }
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
),
|
|
150
|
+
hasChildren && /* @__PURE__ */ jsx(Collapse, { in: open, id: childrenId, unmountOnExit: true, children: /* @__PURE__ */ jsx(List, { dense: true, disablePadding: true, children: item.children.map((child) => /* @__PURE__ */ jsx(
|
|
151
|
+
SidebarNode,
|
|
152
|
+
{
|
|
153
|
+
item: child,
|
|
154
|
+
activeId,
|
|
155
|
+
onItemClick,
|
|
156
|
+
depth: depth + 1
|
|
157
|
+
},
|
|
158
|
+
child.id
|
|
159
|
+
)) }) })
|
|
160
|
+
] });
|
|
161
|
+
}
|
|
162
|
+
function SidebarLabel({ label, sx }) {
|
|
163
|
+
const ref = useRef(null);
|
|
164
|
+
const [isOverflowing, setIsOverflowing] = useState(false);
|
|
165
|
+
useIsoLayoutEffect(() => {
|
|
166
|
+
const el = ref.current;
|
|
167
|
+
if (!el) return void 0;
|
|
168
|
+
const check = () => {
|
|
169
|
+
setIsOverflowing(el.scrollHeight > el.clientHeight + 1);
|
|
170
|
+
};
|
|
171
|
+
check();
|
|
172
|
+
if (typeof ResizeObserver === "undefined") return void 0;
|
|
173
|
+
const ro = new ResizeObserver(check);
|
|
174
|
+
ro.observe(el);
|
|
175
|
+
return () => ro.disconnect();
|
|
176
|
+
}, [label]);
|
|
177
|
+
const text = /* @__PURE__ */ jsx(
|
|
178
|
+
Typography,
|
|
179
|
+
{
|
|
180
|
+
ref,
|
|
181
|
+
component: "span",
|
|
182
|
+
variant: "body2",
|
|
183
|
+
sx: {
|
|
184
|
+
display: "-webkit-box",
|
|
185
|
+
WebkitBoxOrient: "vertical",
|
|
186
|
+
WebkitLineClamp: MAX_LABEL_LINES,
|
|
187
|
+
overflow: "hidden",
|
|
188
|
+
wordBreak: "break-word",
|
|
189
|
+
lineHeight: 1.35,
|
|
190
|
+
// The flex parent (ListItemButton) needs `minWidth: 0`
|
|
191
|
+
// on the child for the ellipsis to take effect; do it
|
|
192
|
+
// here so the consumer doesn't have to reach in.
|
|
193
|
+
minWidth: 0,
|
|
194
|
+
flex: 1,
|
|
195
|
+
...sx
|
|
196
|
+
},
|
|
197
|
+
children: label
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
if (!isOverflowing) return text;
|
|
201
|
+
return /* @__PURE__ */ jsx(Tooltip, { title: label, placement: "right", arrow: true, enterDelay: 300, enterNextDelay: 150, disableInteractive: true, children: text });
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export { DocSidebar };
|
|
205
|
+
//# sourceMappingURL=chunk-7ATBURW2.js.map
|
|
206
|
+
//# sourceMappingURL=chunk-7ATBURW2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/doc-layout/doc-sidebar.tsx"],"names":[],"mappings":"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","file":"chunk-7ATBURW2.js","sourcesContent":["'use client';\n\nimport { ChevronDownIcon, ChevronRightIcon } from '../../icons/controls.js';\n\nimport { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport List from '@mui/material/List';\nimport ListItemButton from '@mui/material/ListItemButton';\nimport Collapse from '@mui/material/Collapse';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { alpha } from '@mui/material/styles';\n\nexport interface DocSidebarItem {\n id: string;\n label: string;\n href?: string;\n /** Short identity displayed in a collapsed navigation rail. */\n shortLabel?: string;\n children?: DocSidebarItem[];\n}\n\ninterface DocSidebarProps {\n items: DocSidebarItem[];\n activeId?: string;\n onItemClick?: (item: DocSidebarItem) => void;\n title?: string;\n compact?: boolean;\n}\n\n/**\n * Maximum number of lines a long sidebar label may wrap onto\n * before ellipsis kicks in. 2 is the industry baseline for\n * compact navigation surfaces (Notion / Linear / Stripe).\n *\n * Bumped to 3 would help Russian compound words like\n * \"Универсальные категории\" but would noticeably loosen the\n * vertical rhythm of the sidebar.\n */\nconst MAX_LABEL_LINES = 2;\n\n// useLayoutEffect logs a warning during SSR; pick the right hook so\n// consumers rendering the sidebar in a server bundle aren't noisy.\nconst useIsoLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\nexport function DocSidebar({ items, activeId, onItemClick, title, compact = false }: DocSidebarProps) {\n const compactIndex = () => {\n const leaves = (nodes: DocSidebarItem[], path: string[] = []): { item: DocSidebarItem; path: string }[] =>\n nodes.flatMap((item) => [\n ...(item.href || !item.children?.length ? [{ item, path: [...path, item.label].join(' / ') }] : []),\n ...leaves(item.children ?? [], [...path, item.label]),\n ]);\n return (\n <List dense disablePadding aria-label={title}>\n {leaves(items).map(({ item, path }, index) => (\n <Tooltip key={item.id} title={path} placement=\"right\" disableInteractive>\n <ListItemButton\n component={item.href ? 'a' : 'button'}\n href={item.href}\n aria-label={item.label}\n aria-current={activeId === item.id ? 'page' : undefined}\n selected={activeId === item.id}\n onClick={(event: React.MouseEvent<HTMLElement>) => {\n if (\n item.href &&\n (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0)\n )\n return;\n if (item.href && onItemClick) event.preventDefault();\n onItemClick?.(item);\n }}\n sx={{\n minHeight: 40,\n width: '100%',\n px: 0.5,\n mb: 0.5,\n borderRadius: 1,\n justifyContent: 'center',\n textDecoration: 'none',\n }}\n >\n <Typography component=\"span\" variant=\"caption\" aria-hidden=\"true\" sx={{ fontWeight: 600 }}>\n {item.shortLabel ?? String(index + 1).padStart(2, '0')}\n </Typography>\n </ListItemButton>\n </Tooltip>\n ))}\n </List>\n );\n };\n return (\n <Box>\n {compact && compactIndex()}\n <Box hidden={compact}>\n {title && (\n <Typography\n variant=\"subtitle2\"\n sx={{\n px: 1.5,\n pt: 0.5,\n pb: 2,\n fontWeight: 700,\n fontSize: '0.8125rem',\n color: 'text.secondary',\n letterSpacing: '0.01em',\n }}\n >\n {title}\n </Typography>\n )}\n <List dense disablePadding>\n {items.map((item) => (\n <SidebarNode key={item.id} item={item} activeId={activeId} onItemClick={onItemClick} depth={0} />\n ))}\n </List>\n </Box>\n </Box>\n );\n}\n\nfunction SidebarNode({\n item,\n activeId,\n onItemClick,\n depth,\n}: {\n item: DocSidebarItem;\n activeId?: string;\n onItemClick?: (item: DocSidebarItem) => void;\n depth: number;\n}) {\n const hasChildren = !!item.children?.length;\n const childrenId = useId();\n const isActive = activeId === item.id;\n const [open, setOpen] = useState(true);\n const isCategory = hasChildren && !item.href;\n\n return (\n <>\n <ListItemButton\n component={item.href ? 'a' : 'button'}\n href={item.href}\n aria-current={isActive ? 'page' : undefined}\n aria-expanded={hasChildren ? open : undefined}\n aria-controls={hasChildren ? childrenId : undefined}\n selected={isActive}\n onClick={(event: React.MouseEvent<HTMLElement>) => {\n // Native links retain copy/open-in-new-tab and modified-click behaviour.\n if (item.href && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0))\n return;\n if (item.href && onItemClick) event.preventDefault();\n if (hasChildren) setOpen(!open);\n onItemClick?.(item);\n }}\n sx={{\n pl: 1.5 + depth * 1.5,\n pr: 1,\n py: isCategory ? 0.75 : 0.5,\n borderRadius: 1,\n mx: 0.5,\n mb: 0.25,\n minHeight: 0,\n alignItems: 'center',\n width: 'calc(100% - 8px)',\n textAlign: 'left',\n textDecoration: 'none',\n ...(isCategory && {\n mt: depth === 0 ? 1 : 0.5,\n }),\n ...(isActive && {\n bgcolor: (theme) => alpha(theme.palette.primary.main, 0.08),\n color: 'primary.main',\n }),\n }}\n >\n {hasChildren && (\n <Box\n component=\"span\"\n aria-hidden=\"true\"\n sx={{\n width: 20,\n height: 20,\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 1,\n }}\n >\n {open ? <ChevronDownIcon sx={{ fontSize: 18 }} /> : <ChevronRightIcon sx={{ fontSize: 18 }} />}\n </Box>\n )}\n <SidebarLabel\n label={item.label}\n sx={{\n fontWeight: isCategory ? 600 : isActive ? 600 : 400,\n fontSize: '0.8125rem',\n ...(isCategory && { color: 'text.primary' }),\n }}\n />\n </ListItemButton>\n {hasChildren && (\n <Collapse in={open} id={childrenId} unmountOnExit>\n <List dense disablePadding>\n {item.children!.map((child) => (\n <SidebarNode\n key={child.id}\n item={child}\n activeId={activeId}\n onItemClick={onItemClick}\n depth={depth + 1}\n />\n ))}\n </List>\n </Collapse>\n )}\n </>\n );\n}\n\n/**\n * Label cell with industry-standard \"wrap up to N lines, then\n * ellipsis, then tooltip only when actually overflowing\"\n * behaviour.\n *\n * Why this pattern wins:\n * - Short labels render with NO truncation and NO tooltip —\n * hovering them never spawns a tooltip the reader doesn't need.\n * - Mid-length labels wrap to 2 lines and stay fully visible —\n * much better than premature ellipsis.\n * - Only TRULY oversized labels get the ellipsis, and only those\n * spawn a tooltip on hover so the full text is recoverable.\n *\n * Implementation:\n * - CSS `-webkit-line-clamp` is the cross-browser line-clamp\n * standard (still vendor-prefixed in spec but supported by\n * every modern engine).\n * - Overflow detection compares scrollHeight to clientHeight via\n * a ResizeObserver, so the truncation flag updates when the\n * sidebar resizes (mobile drawer width changes, font scaling,\n * etc.). Skipping `useLayoutEffect` during SSR is the\n * `useIsoLayoutEffect` indirection above.\n *\n * The Tooltip is rendered with `disableInteractive` so hover-out\n * is immediate and the tooltip doesn't block the underlying\n * click area.\n */\nfunction SidebarLabel({ label, sx }: { label: string; sx?: object }) {\n const ref = useRef<HTMLSpanElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n\n useIsoLayoutEffect(() => {\n const el = ref.current;\n if (!el) return undefined;\n const check = () => {\n // +1 px slack for sub-pixel rounding in some engines so we\n // don't flag a perfectly-fitting label as overflowing.\n setIsOverflowing(el.scrollHeight > el.clientHeight + 1);\n };\n check();\n if (typeof ResizeObserver === 'undefined') return undefined;\n const ro = new ResizeObserver(check);\n ro.observe(el);\n return () => ro.disconnect();\n }, [label]);\n\n const text = (\n <Typography\n ref={ref as unknown as React.Ref<HTMLSpanElement>}\n component=\"span\"\n variant=\"body2\"\n sx={{\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: MAX_LABEL_LINES,\n overflow: 'hidden',\n wordBreak: 'break-word',\n lineHeight: 1.35,\n // The flex parent (ListItemButton) needs `minWidth: 0`\n // on the child for the ellipsis to take effect; do it\n // here so the consumer doesn't have to reach in.\n minWidth: 0,\n flex: 1,\n ...sx,\n }}\n >\n {label}\n </Typography>\n );\n\n if (!isOverflowing) return text;\n\n return (\n <Tooltip title={label} placement=\"right\" arrow enterDelay={300} enterNextDelay={150} disableInteractive>\n {text}\n </Tooltip>\n );\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { green,
|
|
1
|
+
import { green, minimalPreset, retroPreset, midnightPreset, draculaPreset, emberPreset, arcticPreset } from './chunk-RSWVYIXK.js';
|
|
2
|
+
import { hexToRgbChannel, generatePaletteColorWithChannels, darken, lighten } from './chunk-IRYU3NTG.js';
|
|
2
3
|
|
|
3
4
|
// src/theme/palette.ts
|
|
4
5
|
function generatePaletteChannel(hex) {
|
|
@@ -526,5 +527,5 @@ function injectCssVariables(vars, config) {
|
|
|
526
527
|
}
|
|
527
528
|
|
|
528
529
|
export { applyPrimaryOverride, cssVariables, defaultPreset, generateCssVariables, generatePaletteChannel, getPreset, luxuryPreset, presetNames };
|
|
529
|
-
//# sourceMappingURL=chunk-
|
|
530
|
-
//# sourceMappingURL=chunk-
|
|
530
|
+
//# sourceMappingURL=chunk-AATAOOSF.js.map
|
|
531
|
+
//# sourceMappingURL=chunk-AATAOOSF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/palette.ts","../src/theme/presets/default.ts","../src/theme/presets/luxury.ts","../src/theme/presets/nature.ts","../src/theme/presets/index.ts","../src/theme/css-variables.ts"],"names":["lightPalette","darkPalette"],"mappings":"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","file":"chunk-AATAOOSF.js","sourcesContent":["/**\n * Palette Utilities\n *\n * Utilities for palette manipulation and CSS channel generation.\n * All color math uses HSL for perceptually correct results.\n *\n * @module theme/palette\n */\n\nimport type { ThemePalette, PaletteColor, ColorScale, ColorScaleWithChannels } from '../types/theme.js';\nimport {\n generatePaletteColorWithChannels,\n generateColorScaleWithChannels,\n hexToRgbChannel,\n lighten,\n darken,\n} from './utils/color.js';\n\n/**\n * Generate RGB channel string from hex color.\n *\n * @param hex - Hex color value\n * @returns RGB channel string (e.g., \"255 255 255\")\n */\nexport function generatePaletteChannel(hex: string): string {\n return hexToRgbChannel(hex);\n}\n\n/**\n * Generate a full palette color from a main color.\n * Uses HSL-based color math for perceptually correct shades.\n *\n * @param main - Main color hex value\n * @param contrastText - Contrast text color (default: white)\n * @returns Full palette color with all shades\n */\nexport function generatePaletteColor(main: string, contrastText = '#FFFFFF'): PaletteColor {\n // HSL lightness adjustments (percentage points)\n // These values produce visually balanced shade progressions\n return {\n lighter: lighten(main, 32), // +32 lightness points (very light, ~85-95% L)\n light: lighten(main, 16), // +16 lightness points (light, ~65-75% L)\n main, // Base color (typically ~45-55% L)\n dark: darken(main, 12), // -12 lightness points (dark, ~35-45% L)\n darker: darken(main, 28), // -28 lightness points (very dark, ~20-30% L)\n contrastText,\n };\n}\n\n/**\n * Apply primary color override to a palette.\n *\n * @param palette - Base palette\n * @param primaryColor - New primary color\n * @param mode - Theme mode (light/dark)\n * @returns Updated palette with new primary color\n */\nexport function applyPrimaryOverride(\n palette: ThemePalette,\n primaryColor: string,\n mode: 'light' | 'dark' = 'light'\n): ThemePalette {\n const contrastText = mode === 'dark' ? '#FFFFFF' : '#FFFFFF';\n const basePrimary = generatePaletteColor(primaryColor, contrastText);\n const newPrimary = generatePaletteColorWithChannels(basePrimary);\n\n return {\n ...palette,\n primary: newPrimary,\n };\n}\n\n/**\n * Create grey palette.\n */\nexport function createGreyPalette(): ColorScaleWithChannels {\n const scale: ColorScale = {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n 950: '#121212',\n };\n return generateColorScaleWithChannels(scale);\n}\n\n/**\n * Create dark mode grey palette.\n */\nexport function createDarkGreyPalette(): ColorScaleWithChannels {\n const scale: ColorScale = {\n 50: '#1A1A1A',\n 100: '#242424',\n 200: '#2E2E2E',\n 300: '#383838',\n 400: '#454545',\n 500: '#5C5C5C',\n 600: '#757575',\n 700: '#9E9E9E',\n 800: '#BDBDBD',\n 900: '#E0E0E0',\n 950: '#F5F5F5',\n };\n return generateColorScaleWithChannels(scale);\n}\n","/**\n * Default Theme Preset\n *\n * A neutral, modern theme suitable for most applications.\n *\n * @module theme/presets/default\n */\n\nimport type { ThemePresetDefinition, PresetPalette } from '../../types/theme.js';\n\n/**\n * Light mode palette.\n */\nconst lightPalette: PresetPalette = {\n primary: {\n lighter: '#C8FAD6',\n light: '#5BE49B',\n main: '#00A76F',\n dark: '#007867',\n darker: '#004B50',\n contrastText: '#FFFFFF',\n },\n secondary: {\n lighter: '#EFD6FF',\n light: '#C684FF',\n main: '#8E33FF',\n dark: '#5119B7',\n darker: '#27097A',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#CAFDF5',\n light: '#61F3F3',\n main: '#00B8D9',\n dark: '#006C9C',\n darker: '#003768',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D3FCD2',\n light: '#77ED8B',\n main: '#22C55E',\n dark: '#118D57',\n darker: '#065E49',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF5CC',\n light: '#FFD666',\n main: '#FFAB00',\n dark: '#B76E00',\n darker: '#7A4100',\n contrastText: '#212121',\n },\n error: {\n lighter: '#FFE9D5',\n light: '#FFAC82',\n main: '#FF5630',\n dark: '#B71D18',\n darker: '#7A0916',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#FAFAFA',\n 100: '#F5F5F5',\n 200: '#EEEEEE',\n 300: '#E0E0E0',\n 400: '#BDBDBD',\n 500: '#9E9E9E',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n },\n common: {\n black: '#000000',\n white: '#FFFFFF',\n },\n background: {\n default: '#FFFFFF',\n paper: '#FFFFFF',\n neutral: '#F4F6F8',\n },\n text: {\n primary: '#212121',\n secondary: '#637381',\n disabled: '#919EAB',\n },\n};\n\n/**\n * Dark mode palette.\n */\nconst darkPalette: PresetPalette = {\n primary: {\n lighter: '#C8FAD6',\n light: '#5BE49B',\n main: '#00A76F',\n dark: '#007867',\n darker: '#004B50',\n contrastText: '#FFFFFF',\n },\n secondary: {\n lighter: '#EFD6FF',\n light: '#C684FF',\n main: '#8E33FF',\n dark: '#5119B7',\n darker: '#27097A',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#CAFDF5',\n light: '#61F3F3',\n main: '#00B8D9',\n dark: '#006C9C',\n darker: '#003768',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D3FCD2',\n light: '#77ED8B',\n main: '#22C55E',\n dark: '#118D57',\n darker: '#065E49',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF5CC',\n light: '#FFD666',\n main: '#FFAB00',\n dark: '#B76E00',\n darker: '#7A4100',\n contrastText: '#212121',\n },\n error: {\n lighter: '#FFE9D5',\n light: '#FFAC82',\n main: '#FF5630',\n dark: '#B71D18',\n darker: '#7A0916',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#161C24',\n 100: '#212B36',\n 200: '#454F5B',\n 300: '#637381',\n 400: '#919EAB',\n 500: '#C4CDD5',\n 600: '#DFE3E8',\n 700: '#F4F6F8',\n 800: '#F9FAFB',\n 900: '#FFFFFF',\n },\n common: {\n black: '#000000',\n white: '#FFFFFF',\n },\n background: {\n default: '#161C24',\n paper: '#212B36',\n neutral: '#28323D',\n },\n text: {\n primary: '#FFFFFF',\n secondary: '#919EAB',\n disabled: '#637381',\n },\n};\n\n/**\n * Default theme preset.\n */\nexport const defaultPreset: ThemePresetDefinition = {\n name: 'default-light',\n displayName: 'Default',\n description: 'A neutral, modern theme suitable for most applications.',\n preferredMode: 'light',\n lightPalette,\n darkPalette,\n typography: {\n fontFamily: {\n primary: '\"Public Sans Variable\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n secondary: '\"Barlow\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n mono: '\"JetBrains Mono\", \"Fira Code\", Consolas, Monaco, monospace',\n },\n fontWeights: {\n light: 300,\n regular: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n },\n },\n colorGroup: {\n key: 'default',\n main: '#00A76F',\n },\n};\n","/**\n * Luxury Theme Preset\n *\n * A rich, elegant theme with deep colors and premium feel.\n *\n * @module theme/presets/luxury\n */\n\nimport type { ThemePresetDefinition, PresetPalette } from '../../types/theme.js';\n\n/**\n * Light mode palette.\n */\nconst lightPalette: PresetPalette = {\n primary: {\n lighter: '#F5E6D3',\n light: '#D4A574',\n main: '#8B6914',\n dark: '#6B4F0F',\n darker: '#4A370A',\n contrastText: '#FFFFFF',\n },\n secondary: {\n lighter: '#E8D5E8',\n light: '#B38AB3',\n main: '#6B3A6B',\n dark: '#4D2A4D',\n darker: '#2F1A2F',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#D6E4F0',\n light: '#8BBED9',\n main: '#2E7AB8',\n dark: '#1F5A8A',\n darker: '#103A5C',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D8EED3',\n light: '#8BC98A',\n main: '#2E8B2E',\n dark: '#1F6B1F',\n darker: '#104A10',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF3D6',\n light: '#FFD98B',\n main: '#D4A012',\n dark: '#A67A0E',\n darker: '#785509',\n contrastText: '#212121',\n },\n error: {\n lighter: '#F5D6D6',\n light: '#D98B8B',\n main: '#B82E2E',\n dark: '#8A1F1F',\n darker: '#5C1010',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#FAF9F7',\n 100: '#F5F3F0',\n 200: '#E8E4DE',\n 300: '#D4CEC4',\n 400: '#B8AFA0',\n 500: '#9C917C',\n 600: '#7A6F5C',\n 700: '#5C5244',\n 800: '#3E362C',\n 900: '#201C16',\n },\n common: {\n black: '#0D0A06',\n white: '#FFFCF7',\n },\n background: {\n default: '#FFFCF7',\n paper: '#FFFFFF',\n neutral: '#F5F3F0',\n },\n text: {\n primary: '#201C16',\n secondary: '#5C5244',\n disabled: '#9C917C',\n },\n};\n\n/**\n * Dark mode palette.\n */\nconst darkPalette: PresetPalette = {\n primary: {\n lighter: '#F5E6D3',\n light: '#D4A574',\n main: '#C9A227',\n dark: '#A68A1F',\n darker: '#846D18',\n contrastText: '#0D0A06',\n },\n secondary: {\n lighter: '#E8D5E8',\n light: '#B38AB3',\n main: '#9B5A9B',\n dark: '#7D4A7D',\n darker: '#5F3A5F',\n contrastText: '#FFFFFF',\n },\n info: {\n lighter: '#D6E4F0',\n light: '#8BBED9',\n main: '#4E9AD4',\n dark: '#3A7AB0',\n darker: '#265A8C',\n contrastText: '#FFFFFF',\n },\n success: {\n lighter: '#D8EED3',\n light: '#8BC98A',\n main: '#4EAB4E',\n dark: '#3A8B3A',\n darker: '#266B26',\n contrastText: '#FFFFFF',\n },\n warning: {\n lighter: '#FFF3D6',\n light: '#FFD98B',\n main: '#E8B612',\n dark: '#C49A0E',\n darker: '#A07E0A',\n contrastText: '#0D0A06',\n },\n error: {\n lighter: '#F5D6D6',\n light: '#D98B8B',\n main: '#D44E4E',\n dark: '#B03A3A',\n darker: '#8C2626',\n contrastText: '#FFFFFF',\n },\n grey: {\n 50: '#18140E',\n 100: '#241E16',\n 200: '#362E22',\n 300: '#4A402E',\n 400: '#5E523A',\n 500: '#7A6F5C',\n 600: '#9C917C',\n 700: '#B8AFA0',\n 800: '#D4CEC4',\n 900: '#E8E4DE',\n },\n common: {\n black: '#0D0A06',\n white: '#FFFCF7',\n },\n background: {\n default: '#0D0A06',\n paper: '#18140E',\n neutral: '#241E16',\n },\n text: {\n primary: '#E8E4DE',\n secondary: '#B8AFA0',\n disabled: '#7A6F5C',\n },\n};\n\n/**\n * Luxury theme preset.\n */\nexport const luxuryPreset: ThemePresetDefinition = {\n name: 'luxury',\n displayName: 'Luxury',\n description: 'A rich, elegant theme with deep colors and premium feel.',\n preferredMode: 'light',\n lightPalette,\n darkPalette,\n typography: {\n fontFamily: {\n primary: '\"Playfair Display\", Georgia, \"Times New Roman\", serif',\n secondary: '\"Lato\", -apple-system, BlinkMacSystemFont, sans-serif',\n mono: '\"JetBrains Mono\", Consolas, Monaco, monospace',\n },\n fontWeights: {\n light: 300,\n regular: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n },\n },\n colorGroup: {\n key: 'luxury',\n main: '#8B6914',\n },\n};\n","/**\n * Nature Theme Preset\n *\n * An earthy, organic theme with warm greens and natural tones.\n *\n * @module theme/presets/nature\n */\n\nimport type { ThemePresetDefinition } from '../../types/theme.js';\nimport { green } from '../colors/base.js';\n\n/**\n * Nature theme preset.\n * Optimized for light mode with earthy green tones.\n */\nexport const naturePreset: ThemePresetDefinition = {\n name: 'nature',\n displayName: 'Nature',\n description: 'An earthy, organic theme with warm greens and natural tones.',\n preferredMode: 'light',\n typography: {\n fontFamily: {\n primary: '\"Nunito\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n secondary: '\"Merriweather\", Georgia, serif',\n mono: '\"JetBrains Mono\", Consolas, Monaco, monospace',\n },\n fontWeights: {\n light: 300,\n regular: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n },\n },\n colorGroup: {\n key: 'nature',\n main: green[500],\n palette: green,\n },\n};\n","/**\n * Theme Presets Index\n *\n * @module theme/presets\n */\n\nimport type { ThemePreset, ThemePresetDefinition } from '../../types/theme.js';\nimport { defaultPreset } from './default.js';\nimport { luxuryPreset } from './luxury.js';\nimport { arcticPreset } from './arctic.js';\nimport { naturePreset } from './nature.js';\nimport { emberPreset } from './ember.js';\nimport { draculaPreset } from './dracula.js';\nimport { midnightPreset } from './midnight.js';\nimport { retroPreset } from './retro.js';\nimport { minimalPreset } from './minimal.js';\n\n/**\n * All available preset names.\n */\nexport const presetNames: ThemePreset[] = [\n 'default-light',\n 'default-dark',\n 'luxury',\n 'arctic',\n 'nature',\n 'ember',\n 'dracula',\n 'midnight',\n 'retro',\n 'minimal',\n];\n\n/**\n * Preset registry.\n */\nconst presets: Record<string, ThemePresetDefinition> = {\n 'default-light': defaultPreset,\n 'default-dark': defaultPreset, // Uses same preset but different preferred mode\n luxury: luxuryPreset,\n arctic: arcticPreset,\n nature: naturePreset,\n ember: emberPreset,\n dracula: draculaPreset,\n midnight: midnightPreset,\n retro: retroPreset,\n minimal: minimalPreset,\n};\n\n/**\n * Get a theme preset by name.\n *\n * @param name - Preset name\n * @returns Theme preset definition\n * @throws If preset is not found\n */\nexport function getPreset(name: ThemePreset): ThemePresetDefinition {\n const preset = presets[name];\n\n if (!preset) {\n console.warn(`Preset \"${name}\" not found, falling back to \"default-light\"`);\n return defaultPreset;\n }\n\n return preset;\n}\n\n/**\n * Register a custom preset.\n *\n * @param name - Preset name\n * @param preset - Preset definition\n */\nexport function registerPreset(name: string, preset: ThemePresetDefinition): void {\n presets[name] = preset;\n}\n\n/**\n * Get all registered presets.\n */\nexport function getAllPresets(): Record<string, ThemePresetDefinition> {\n return { ...presets };\n}\n\n// Re-export presets\nexport { defaultPreset } from './default.js';\nexport { luxuryPreset } from './luxury.js';\nexport { arcticPreset } from './arctic.js';\nexport { naturePreset } from './nature.js';\nexport { emberPreset } from './ember.js';\nexport { draculaPreset } from './dracula.js';\nexport { midnightPreset } from './midnight.js';\nexport { retroPreset } from './retro.js';\nexport { minimalPreset } from './minimal.js';\n","/**\n * CSS Variables System\n *\n * Utilities for generating and managing CSS variables.\n *\n * @module theme/css-variables\n */\n\nimport type { PrismTheme, CssVariablesConfig } from '../types/theme.js';\nimport { generatePaletteChannel } from './palette.js';\n\n/**\n * CSS variable definitions.\n * Uses an index signature since keys are dynamically generated based on prefix.\n */\nexport interface CssVariables {\n [key: string]: string;\n}\n\n/**\n * Default CSS variable values.\n */\nexport const cssVariables: CssVariables = {\n '--prism-background': '#FFFFFF',\n '--prism-foreground': '#212121',\n '--prism-card': '#FFFFFF',\n '--prism-card-foreground': '#212121',\n '--prism-popover': '#FFFFFF',\n '--prism-popover-foreground': '#212121',\n\n '--prism-primary': '#00A76F',\n '--prism-primary-foreground': '#FFFFFF',\n '--prism-primary-lighter': '#C8FAD6',\n '--prism-primary-light': '#5BE49B',\n '--prism-primary-dark': '#007867',\n '--prism-primary-darker': '#004B50',\n\n '--prism-secondary': '#8E33FF',\n '--prism-secondary-foreground': '#FFFFFF',\n\n '--prism-muted': '#F4F6F8',\n '--prism-muted-foreground': '#637381',\n '--prism-accent': '#F4F6F8',\n '--prism-accent-foreground': '#212121',\n '--prism-destructive': '#FF5630',\n '--prism-destructive-foreground': '#FFFFFF',\n\n '--prism-border': '#E0E0E0',\n '--prism-input': '#E0E0E0',\n '--prism-ring': '#00A76F',\n\n '--prism-radius': '0.5rem',\n\n '--prism-primary-channel': '0 167 111',\n '--prism-secondary-channel': '142 51 255',\n '--prism-background-channel': '255 255 255',\n};\n\n/**\n * Generate CSS variables from a Prism theme.\n *\n * @param theme - Prism theme\n * @param config - CSS variables configuration\n * @returns CSS variables object\n */\nexport function generateCssVariables(theme: PrismTheme, config: CssVariablesConfig): CssVariables {\n const { prefix } = config;\n const { palette } = theme;\n\n const vars: CssVariables = {\n [`--${prefix}-background`]: palette.background.default,\n [`--${prefix}-foreground`]: palette.text.primary,\n [`--${prefix}-card`]: palette.background.paper,\n [`--${prefix}-card-foreground`]: palette.text.primary,\n [`--${prefix}-popover`]: palette.background.paper,\n [`--${prefix}-popover-foreground`]: palette.text.primary,\n\n [`--${prefix}-primary`]: palette.primary.main,\n [`--${prefix}-primary-foreground`]: palette.primary.contrastText,\n [`--${prefix}-primary-lighter`]:\n (palette.primary as unknown as { lighter?: string }).lighter || palette.primary.light,\n [`--${prefix}-primary-light`]: palette.primary.light,\n [`--${prefix}-primary-dark`]: palette.primary.dark,\n [`--${prefix}-primary-darker`]: (palette.primary as unknown as { darker?: string }).darker || palette.primary.dark,\n\n [`--${prefix}-secondary`]: palette.secondary.main,\n [`--${prefix}-secondary-foreground`]: palette.secondary.contrastText,\n\n [`--${prefix}-muted`]: palette.background.default,\n [`--${prefix}-muted-foreground`]: palette.text.secondary,\n [`--${prefix}-accent`]: palette.background.default,\n [`--${prefix}-accent-foreground`]: palette.text.primary,\n [`--${prefix}-destructive`]: palette.error.main,\n [`--${prefix}-destructive-foreground`]: palette.error.contrastText,\n\n [`--${prefix}-border`]: palette.divider || palette.grey[300],\n [`--${prefix}-input`]: palette.divider || palette.grey[300],\n [`--${prefix}-ring`]: palette.primary.main,\n\n [`--${prefix}-radius`]: `${theme.shape.borderRadius}px`,\n\n [`--${prefix}-primary-channel`]: generatePaletteChannel(palette.primary.main),\n [`--${prefix}-secondary-channel`]: generatePaletteChannel(palette.secondary.main),\n [`--${prefix}-background-channel`]: generatePaletteChannel(palette.background.default),\n };\n\n // Inject into document if in browser\n if (typeof document !== 'undefined') {\n injectCssVariables(vars, config);\n }\n\n return vars;\n}\n\n/**\n * Inject CSS variables into the document.\n *\n * @param vars - CSS variables object\n * @param config - CSS variables configuration\n */\nfunction injectCssVariables(vars: CssVariables, config: CssVariablesConfig): void {\n const root = document.documentElement;\n\n Object.entries(vars).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n}\n\n/**\n * Get computed CSS variable value.\n *\n * @param name - Variable name (with or without --)\n * @returns Computed value\n */\nexport function getCssVariable(name: string): string {\n if (typeof window === 'undefined') return '';\n\n const varName = name.startsWith('--') ? name : `--${name}`;\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n}\n\n/**\n * Set CSS variable value.\n *\n * @param name - Variable name (with or without --)\n * @param value - New value\n */\nexport function setCssVariable(name: string, value: string): void {\n if (typeof document === 'undefined') return;\n\n const varName = name.startsWith('--') ? name : `--${name}`;\n document.documentElement.style.setProperty(varName, value);\n}\n"]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Fragment } from 'react';
|
|
2
|
+
import Portal from '@mui/material/Portal';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
import LinearProgress from '@mui/material/LinearProgress';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
import Box from '@mui/material/Box';
|
|
7
|
+
import CircularProgress from '@mui/material/CircularProgress';
|
|
8
|
+
import Typography from '@mui/material/Typography';
|
|
9
|
+
|
|
10
|
+
// src/components/loading-screen/loading-screen.tsx
|
|
11
|
+
var LoadingContent = styled("div")(({ theme }) => ({
|
|
12
|
+
flexGrow: 1,
|
|
13
|
+
width: "100%",
|
|
14
|
+
display: "flex",
|
|
15
|
+
minHeight: "100%",
|
|
16
|
+
alignItems: "center",
|
|
17
|
+
justifyContent: "center",
|
|
18
|
+
paddingLeft: theme.spacing(5),
|
|
19
|
+
paddingRight: theme.spacing(5)
|
|
20
|
+
}));
|
|
21
|
+
function LoadingScreen({ portal, slots, slotProps, sx, ...other }) {
|
|
22
|
+
const Wrapper = portal ? Portal : Fragment;
|
|
23
|
+
return /* @__PURE__ */ jsx(Wrapper, { children: /* @__PURE__ */ jsx(LoadingContent, { sx, ...other, children: slots?.progress ?? /* @__PURE__ */ jsx(
|
|
24
|
+
LinearProgress,
|
|
25
|
+
{
|
|
26
|
+
color: "inherit",
|
|
27
|
+
sx: [
|
|
28
|
+
{ width: 1, maxWidth: 360 },
|
|
29
|
+
...Array.isArray(slotProps?.progress?.sx) ? slotProps.progress.sx : [slotProps?.progress?.sx]
|
|
30
|
+
],
|
|
31
|
+
...slotProps?.progress
|
|
32
|
+
}
|
|
33
|
+
) }) });
|
|
34
|
+
}
|
|
35
|
+
var SplashContainer = styled(Box, {
|
|
36
|
+
shouldForwardProp: (prop) => prop !== "fullScreen"
|
|
37
|
+
})(({ theme, fullScreen }) => ({
|
|
38
|
+
display: "flex",
|
|
39
|
+
flexDirection: "column",
|
|
40
|
+
alignItems: "center",
|
|
41
|
+
justifyContent: "center",
|
|
42
|
+
gap: theme.spacing(2),
|
|
43
|
+
padding: theme.spacing(3),
|
|
44
|
+
...fullScreen ? {
|
|
45
|
+
position: "fixed",
|
|
46
|
+
top: 0,
|
|
47
|
+
left: 0,
|
|
48
|
+
right: 0,
|
|
49
|
+
bottom: 0,
|
|
50
|
+
zIndex: theme.zIndex.modal + 1,
|
|
51
|
+
backgroundColor: theme.palette.background.default
|
|
52
|
+
} : {
|
|
53
|
+
flexGrow: 1,
|
|
54
|
+
width: "100%",
|
|
55
|
+
minHeight: 200
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
function SplashScreen({
|
|
59
|
+
variant = "circular",
|
|
60
|
+
message,
|
|
61
|
+
indicator,
|
|
62
|
+
portal = false,
|
|
63
|
+
size = 48,
|
|
64
|
+
progress,
|
|
65
|
+
fullScreen = false,
|
|
66
|
+
sx
|
|
67
|
+
}) {
|
|
68
|
+
const Wrapper = portal ? Portal : Fragment;
|
|
69
|
+
const isDeterminate = progress !== void 0;
|
|
70
|
+
const renderIndicator = () => {
|
|
71
|
+
if (indicator) return indicator;
|
|
72
|
+
if (variant === "linear") {
|
|
73
|
+
return /* @__PURE__ */ jsx(
|
|
74
|
+
LinearProgress,
|
|
75
|
+
{
|
|
76
|
+
variant: isDeterminate ? "determinate" : "indeterminate",
|
|
77
|
+
value: progress,
|
|
78
|
+
color: "primary",
|
|
79
|
+
sx: { width: "100%", maxWidth: 360, borderRadius: 1 }
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return /* @__PURE__ */ jsx(
|
|
84
|
+
CircularProgress,
|
|
85
|
+
{
|
|
86
|
+
variant: isDeterminate ? "determinate" : "indeterminate",
|
|
87
|
+
value: progress,
|
|
88
|
+
size,
|
|
89
|
+
thickness: 3,
|
|
90
|
+
color: "primary"
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
};
|
|
94
|
+
return /* @__PURE__ */ jsx(Wrapper, { children: /* @__PURE__ */ jsxs(SplashContainer, { fullScreen, sx, children: [
|
|
95
|
+
renderIndicator(),
|
|
96
|
+
message && /* @__PURE__ */ jsx(
|
|
97
|
+
Typography,
|
|
98
|
+
{
|
|
99
|
+
variant: "body2",
|
|
100
|
+
sx: {
|
|
101
|
+
color: "text.secondary",
|
|
102
|
+
mt: 1,
|
|
103
|
+
textAlign: "center"
|
|
104
|
+
},
|
|
105
|
+
children: message
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
isDeterminate && /* @__PURE__ */ jsxs(Typography, { variant: "caption", sx: {
|
|
109
|
+
color: "text.disabled"
|
|
110
|
+
}, children: [
|
|
111
|
+
Math.round(progress),
|
|
112
|
+
"%"
|
|
113
|
+
] })
|
|
114
|
+
] }) });
|
|
115
|
+
}
|
|
116
|
+
var sizeMap = {
|
|
117
|
+
small: 20,
|
|
118
|
+
medium: 32,
|
|
119
|
+
large: 48
|
|
120
|
+
};
|
|
121
|
+
function Spinner({ size = "medium", color = "primary", sx }) {
|
|
122
|
+
const computedSize = typeof size === "number" ? size : sizeMap[size];
|
|
123
|
+
return /* @__PURE__ */ jsx(CircularProgress, { size: computedSize, color, thickness: 3.5, sx });
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export { LoadingScreen, Spinner, SplashScreen };
|
|
127
|
+
//# sourceMappingURL=chunk-AKLRKCYH.js.map
|
|
128
|
+
//# sourceMappingURL=chunk-AKLRKCYH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/loading-screen/loading-screen.tsx","../src/components/loading-screen/splash-screen.tsx"],"names":["styled","Portal","Fragment","jsx","LinearProgress"],"mappings":"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","file":"chunk-AKLRKCYH.js","sourcesContent":["'use client';\n\n/**\n * Loading Screen Component\n *\n * Lightweight content loading indicator with centered LinearProgress.\n * Use for lazy-loaded route content within layouts.\n *\n * @module components/loading-screen\n */\n\nimport type { ReactNode } from 'react';\nimport { Fragment } from 'react';\nimport Portal from '@mui/material/Portal';\nimport { styled } from '@mui/material/styles';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport type { LinearProgressProps } from '@mui/material/LinearProgress';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface LoadingScreenProps extends React.ComponentProps<'div'> {\n /** Render in a portal */\n portal?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n /** Slot overrides */\n slots?: {\n progress?: ReactNode;\n };\n /** Slot props */\n slotProps?: {\n progress?: LinearProgressProps;\n };\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst LoadingContent = styled('div')(({ theme }) => ({\n flexGrow: 1,\n width: '100%',\n display: 'flex',\n minHeight: '100%',\n alignItems: 'center',\n justifyContent: 'center',\n paddingLeft: theme.spacing(5),\n paddingRight: theme.spacing(5),\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * LoadingScreen - Lightweight content loading indicator.\n *\n * @example\n * ```tsx\n * <Suspense fallback={<LoadingScreen />}>\n * <Outlet />\n * </Suspense>\n * ```\n */\nexport function LoadingScreen({ portal, slots, slotProps, sx, ...other }: LoadingScreenProps): ReactNode {\n const Wrapper = portal ? Portal : Fragment;\n\n return (\n <Wrapper>\n <LoadingContent sx={sx} {...other}>\n {slots?.progress ?? (\n <LinearProgress\n color=\"inherit\"\n sx={[\n { width: 1, maxWidth: 360 },\n ...(Array.isArray(slotProps?.progress?.sx) ? slotProps.progress.sx : [slotProps?.progress?.sx]),\n ]}\n {...slotProps?.progress}\n />\n )}\n </LoadingContent>\n </Wrapper>\n );\n}\n","'use client';\n\n/**\n * Splash Screen Component\n *\n * Full-screen or contained loading states with customizable indicators.\n * Use for app-level loading (initial boot, auth checks).\n *\n * @module components/loading-screen\n */\n\nimport type { ReactNode } from 'react';\nimport { Fragment } from 'react';\nimport Box from '@mui/material/Box';\nimport Portal from '@mui/material/Portal';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Typography from '@mui/material/Typography';\nimport { styled } from '@mui/material/styles';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface SplashScreenProps {\n /** Loading indicator variant */\n variant?: 'circular' | 'linear';\n /** Loading message */\n message?: string;\n /** Custom loading indicator */\n indicator?: ReactNode;\n /** Render in a portal (useful for overlays) */\n portal?: boolean;\n /** Size of circular indicator */\n size?: number;\n /** Progress value (0-100) for determinate mode */\n progress?: number;\n /** Full screen overlay mode */\n fullScreen?: boolean;\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst SplashContainer = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'fullScreen',\n})<{ fullScreen?: boolean }>(({ theme, fullScreen }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: theme.spacing(2),\n padding: theme.spacing(3),\n ...(fullScreen\n ? {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: theme.zIndex.modal + 1,\n backgroundColor: theme.palette.background.default,\n }\n : {\n flexGrow: 1,\n width: '100%',\n minHeight: 200,\n }),\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * SplashScreen - Full-screen or contained loading indicator.\n *\n * @example\n * ```tsx\n * // Simple splash\n * <SplashScreen />\n * ```\n *\n * @example\n * ```tsx\n * // With message\n * <SplashScreen message=\"Loading data...\" />\n * ```\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <SplashScreen\n * variant=\"linear\"\n * progress={65}\n * message=\"Uploading files...\"\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Full screen overlay\n * <SplashScreen fullScreen portal />\n * ```\n */\nexport function SplashScreen({\n variant = 'circular',\n message,\n indicator,\n portal = false,\n size = 48,\n progress,\n fullScreen = false,\n sx,\n}: SplashScreenProps): ReactNode {\n const Wrapper = portal ? Portal : Fragment;\n const isDeterminate = progress !== undefined;\n\n const renderIndicator = () => {\n if (indicator) return indicator;\n\n if (variant === 'linear') {\n return (\n <LinearProgress\n variant={isDeterminate ? 'determinate' : 'indeterminate'}\n value={progress}\n color=\"primary\"\n sx={{ width: '100%', maxWidth: 360, borderRadius: 1 }}\n />\n );\n }\n\n return (\n <CircularProgress\n variant={isDeterminate ? 'determinate' : 'indeterminate'}\n value={progress}\n size={size}\n thickness={3}\n color=\"primary\"\n />\n );\n };\n\n return (\n <Wrapper>\n <SplashContainer fullScreen={fullScreen} sx={sx}>\n {renderIndicator()}\n\n {message && (\n <Typography\n variant=\"body2\"\n sx={{\n color: \"text.secondary\",\n mt: 1,\n textAlign: 'center'\n }}>\n {message}\n </Typography>\n )}\n\n {isDeterminate && (\n <Typography variant=\"caption\" sx={{\n color: \"text.disabled\"\n }}>\n {Math.round(progress)}%\n </Typography>\n )}\n </SplashContainer>\n </Wrapper>\n );\n}\n\n// =============================================================================\n// SPINNER COMPONENT\n// =============================================================================\n\nexport interface SpinnerProps {\n /** Size of the spinner */\n size?: 'small' | 'medium' | 'large' | number;\n /** Color */\n color?: 'primary' | 'secondary' | 'inherit';\n /** Additional styles */\n sx?: SxProps<Theme>;\n}\n\nconst sizeMap = {\n small: 20,\n medium: 32,\n large: 48,\n};\n\n/**\n * Spinner - Simple spinning indicator.\n *\n * @example\n * ```tsx\n * <Button disabled={loading}>\n * {loading ? <Spinner size=\"small\" /> : 'Submit'}\n * </Button>\n * ```\n */\nexport function Spinner({ size = 'medium', color = 'primary', sx }: SpinnerProps): ReactNode {\n const computedSize = typeof size === 'number' ? size : sizeMap[size];\n\n return <CircularProgress size={computedSize} color={color} thickness={3.5} sx={sx} />;\n}\n"]}
|