@omnitron-dev/prism 0.3.1 → 0.3.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/README.md +68 -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 -255
- 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-LOY2NPCO.js → chunk-2E67PQ4T.js} +3 -3
- package/dist/{chunk-LOY2NPCO.js.map → chunk-2E67PQ4T.js.map} +1 -1
- 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-52PQL67Q.js → chunk-3VSM7NZG.js} +18 -15
- package/dist/chunk-3VSM7NZG.js.map +1 -0
- package/dist/{chunk-GUGTDURV.js → chunk-4B2LTPK2.js} +2 -2
- package/dist/{chunk-GUGTDURV.js.map → chunk-4B2LTPK2.js.map} +1 -1
- package/dist/chunk-4HUGZJKU.js +108 -0
- package/dist/chunk-4HUGZJKU.js.map +1 -0
- package/dist/{chunk-PXXPLHIY.js → chunk-4Q5L7LDG.js} +3 -3
- package/dist/{chunk-PXXPLHIY.js.map → chunk-4Q5L7LDG.js.map} +1 -1
- 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-YHE7HXSG.js → chunk-7ATBURW2.js} +3 -3
- package/dist/{chunk-YHE7HXSG.js.map → chunk-7ATBURW2.js.map} +1 -1
- package/dist/{chunk-7G5D5PTC.js → chunk-AATAOOSF.js} +4 -4
- package/dist/{chunk-7G5D5PTC.js.map → chunk-AATAOOSF.js.map} +1 -1
- 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-LSPFFEJT.js → chunk-D4GFAJAZ.js} +298 -3900
- package/dist/chunk-D4GFAJAZ.js.map +1 -0
- package/dist/{chunk-BJE2AKD4.js → chunk-D5J3KW6Q.js} +3 -2
- 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-472SOF76.js → chunk-DHTYHUYI.js} +85 -107
- package/dist/chunk-DHTYHUYI.js.map +1 -0
- package/dist/{chunk-FF5RF32O.js → chunk-E7WM2RXA.js} +3 -2
- 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-HOXFSQUV.js → chunk-IRYU3NTG.js} +2 -2
- package/dist/{chunk-HOXFSQUV.js.map → chunk-IRYU3NTG.js.map} +1 -1
- 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-PFT2BNYO.js → chunk-KPY7TA4D.js} +5 -5
- package/dist/{chunk-PFT2BNYO.js.map → chunk-KPY7TA4D.js.map} +1 -1
- package/dist/{chunk-GMIE6III.js → chunk-LFWKGNCX.js} +50 -623
- 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-JSQTYDPG.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-4Z5DE5GK.js → chunk-NSNM53WI.js} +133 -115
- 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-SU3LVQ7N.js → chunk-Q6JDNFSG.js} +11 -226
- 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-KQ67XB6T.js → chunk-RSWVYIXK.js} +151 -114
- 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-AYYFMTMI.js.map → chunk-TJ7DHXUX.js.map} +1 -1
- package/dist/{chunk-75FQ5IW3.js → chunk-TZHWYT34.js} +3 -3
- package/dist/{chunk-75FQ5IW3.js.map → chunk-TZHWYT34.js.map} +1 -1
- package/dist/chunk-TZWHELY4.js +45 -0
- package/dist/chunk-TZWHELY4.js.map +1 -0
- package/dist/{chunk-OKTLA23Q.js → chunk-UEINJFLS.js} +6 -6
- 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-PGHEP4JD.js → chunk-VQVVHMPG.js} +3 -3
- package/dist/{chunk-PGHEP4JD.js.map → chunk-VQVVHMPG.js.map} +1 -1
- 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 +59 -421
- package/dist/cli/index.js.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 +1 -0
- package/dist/components/date-input/date-input.d.ts.map +1 -1
- package/dist/components/date-input/index.d.ts +0 -1
- package/dist/components/date-input/index.d.ts.map +1 -1
- package/dist/components/doc-layout/index.js +5 -4
- package/dist/components/doc-layout/index.js.map +1 -1
- package/dist/components/editor/index.js +4 -3
- 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/index.js +6 -0
- package/dist/components/error-boundary/index.js.map +1 -0
- package/dist/components/index.css +13 -10
- package/dist/components/index.css.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -21
- package/dist/components/index.js.map +1 -1
- package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -1
- package/dist/components/knowledge-graph/index.js +18 -16
- package/dist/components/knowledge-graph/index.js.map +1 -1
- 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/loading-screen/index.js +4 -0
- package/dist/components/loading-screen/index.js.map +1 -0
- package/dist/components/map/MapPointPicker.d.ts.map +1 -1
- package/dist/components/map/index.js +2 -1
- package/dist/components/map/index.js.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/research/diagram.d.ts.map +1 -1
- package/dist/components/research/index.js +6 -4
- package/dist/components/research/index.js.map +1 -1
- package/dist/components/research-editor/extensions.d.ts +1 -1
- package/dist/components/research-editor/index.js +11 -10
- package/dist/components/research-editor/index.js.map +1 -1
- package/dist/components/research-editor/math-navigation.d.ts +2 -2
- package/dist/components/research-editor/math-navigation.d.ts.map +1 -1
- package/dist/components/scroll-to-top/index.js +4 -0
- package/dist/components/scroll-to-top/index.js.map +1 -0
- 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 -1
- 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/core/index.js +12 -10
- package/dist/core/index.js.map +1 -1
- package/dist/forms/index.js +2 -0
- package/dist/forms/index.js.map +1 -1
- package/dist/hooks/index.js +14 -12
- 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.map +1 -1
- package/dist/icons/index.js +3 -2
- package/dist/icons/index.js.map +1 -1
- package/dist/index.css +13 -10
- package/dist/index.css.map +1 -1
- package/dist/index.js +57 -31
- 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/layout.d.ts +3 -1
- package/dist/layouts/dashboard/layout.d.ts.map +1 -1
- package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
- package/dist/layouts/index.js +9 -8
- package/dist/layouts/index.js.map +1 -1
- 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/theme/components/Chip.d.ts.map +1 -1
- package/dist/theme/components/Dialog.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/index.js +8 -6
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/palette/overrides.d.ts +1 -0
- package/dist/theme/palette/overrides.d.ts.map +1 -1
- 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.js +6 -5
- package/dist/ui/index.js.map +1 -1
- package/dist/utils/async-lock.d.ts.map +1 -1
- package/package.json +143 -37
- package/dist/chunk-472SOF76.js.map +0 -1
- package/dist/chunk-4Z5DE5GK.js.map +0 -1
- package/dist/chunk-52PQL67Q.js.map +0 -1
- package/dist/chunk-AD4W7HYC.js.map +0 -1
- package/dist/chunk-ADG4HZEP.js.map +0 -1
- package/dist/chunk-BJE2AKD4.js.map +0 -1
- package/dist/chunk-BRDWQVRT.js.map +0 -1
- package/dist/chunk-DRFNMZLG.js.map +0 -1
- package/dist/chunk-FF5RF32O.js.map +0 -1
- package/dist/chunk-FU52GL2E.js +0 -3
- package/dist/chunk-GMIE6III.js.map +0 -1
- package/dist/chunk-JSQTYDPG.js +0 -3
- package/dist/chunk-KQ67XB6T.js.map +0 -1
- package/dist/chunk-LSPFFEJT.js.map +0 -1
- package/dist/chunk-OKTLA23Q.js.map +0 -1
- package/dist/chunk-SNZK5X6F.js.map +0 -1
- package/dist/chunk-SU3LVQ7N.js.map +0 -1
- package/dist/chunk-XIXSSI3B.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/research/frontmatter.ts","../src/components/research/parse.ts","../src/components/research/diagram-image.ts","../src/components/research/diagram.tsx","../src/components/research/document.tsx"],"names":["n","body","picture","jsx","jsxs","useId"],"mappings":"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","file":"chunk-SU3LVQ7N.js","sourcesContent":["/** Recognize a leading YAML envelope without interpreting tags, aliases or values.\n * Masking preserves every UTF-16 offset and line ending in subsequent source spans. */\nexport function splitFrontmatter(source: string) {\n const opening = /^(?:\\uFEFF)?---[ \\t]*\\r?\\n/.exec(source);\n if (!opening) return { body: source, metadata: undefined };\n let offset = opening[0].length;\n while (offset < source.length) {\n const newline = source.indexOf('\\n', offset);\n const end = newline < 0 ? source.length : newline + 1;\n if (/^(?:---|\\.\\.\\.)[ \\t]*(?:\\r?\\n)?$/.test(source.slice(offset, end))) {\n const raw = source.slice(0, end);\n return {\n body: raw.replace(/[^\\r\\n]/g, ' ') + source.slice(end),\n metadata: { format: 'yaml' as const, raw, start: 0, end },\n };\n }\n offset = end;\n }\n return { body: source, metadata: undefined };\n}\n","/** Research Markdown v1: structured documents with source locations,\n * explicit diagnostics and isolated widgets.\n * Source is data: HTML and unknown syntax are retained as text, never executed. */\nimport { splitFrontmatter } from './frontmatter.js';\nimport { fromMarkdown } from 'mdast-util-from-markdown';\nimport { gfm } from 'micromark-extension-gfm';\nimport { gfmFromMarkdown } from 'mdast-util-gfm';\nimport { directive } from 'micromark-extension-directive';\nimport { directiveFromMarkdown } from 'mdast-util-directive';\nimport { math } from 'micromark-extension-math';\nimport { mathFromMarkdown } from 'mdast-util-math';\nimport type { TipTapDoc, TipTapNode, TipTapMark } from '../tiptap-renderer/index.js';\n\ntype Position = { start: { line: number; offset?: number }; end: { line: number; offset?: number } };\ntype Ast = { type: string; children?: Ast[]; position?: Position; [key: string]: unknown };\nexport interface ResearchDiagnostic {\n code: string;\n line: number;\n}\nexport interface ResearchDocumentData {\n format: 'prism-research/1';\n metadata?: { format: 'yaml'; raw: string; start: number; end: number };\n doc: TipTapDoc;\n headings: { id: string; title: string; level: number }[];\n diagnostics: ResearchDiagnostic[];\n}\nexport const researchLimits = { source: 262144, nodes: 20000, depth: 64, block: 20000 } as const;\nconst str = (v: unknown) => (typeof v === 'string' ? v : '');\nconst plain = (n: Ast): string => str(n.value) || (n.children ?? []).map(plain).join('');\n\nexport function parseResearchMarkdown(\n source: string,\n prefix = 'research',\n sourceProfile: 'research' | 'docusaurus' = 'research'\n): ResearchDocumentData {\n if (source.length > researchLimits.source) throw new Error('document_limit');\n if (!/^[a-zA-Z][\\w-]{0,100}$/.test(prefix)) throw new Error('invalid_document_prefix');\n const { body, metadata } = splitFrontmatter(source);\n const tree = fromMarkdown(body, {\n extensions: [gfm(), directive(), math()],\n mdastExtensions: [gfmFromMarkdown(), directiveFromMarkdown(), mathFromMarkdown()],\n }) as unknown as Ast;\n const headings: ResearchDocumentData['headings'] = [],\n diagnostics: ResearchDiagnostic[] = [];\n const ids = new Set<string>();\n let count = 0;\n const definitions = new Map<string, Ast>();\n const collect = (n: Ast, depth: number) => {\n if (++count > researchLimits.nodes || depth > researchLimits.depth) throw new Error('structure_limit');\n if (n.type === 'definition') definitions.set(str(n.identifier), n);\n for (const c of n.children ?? []) collect(c, depth + 1);\n };\n collect(tree, 0);\n const fallback = (n: Ast, code: string, inline = false): TipTapNode => {\n diagnostics.push({ code, line: n.position?.start.line ?? 1 });\n const raw = source.slice(n.position?.start.offset ?? 0, n.position?.end.offset ?? 0) || plain(n);\n return inline ? { type: 'text', text: raw } : { type: 'codeBlock', content: [{ type: 'text', text: raw }] };\n };\n const convert = (n: Ast, marks: TipTapMark[] = []): TipTapNode[] => {\n const children = () => (n.children ?? []).flatMap((c) => convert(c, marks));\n const node = (type: string, attrs?: Record<string, unknown>, content = children()): TipTapNode[] => [\n {\n type,\n attrs: { ...attrs, source: n.position },\n content,\n },\n ];\n switch (n.type) {\n case 'root':\n return children();\n case 'definition':\n return [];\n case 'text':\n return [{ type: 'text', text: str(n.value), marks }];\n case 'inlineCode':\n return [{ type: 'text', text: str(n.value), marks: [...marks, { type: 'code' }] }];\n case 'strong':\n case 'emphasis':\n case 'delete':\n return (n.children ?? []).flatMap((c) =>\n convert(c, [...marks, { type: { strong: 'bold', emphasis: 'italic', delete: 'strike' }[n.type]! }])\n );\n case 'paragraph':\n return node('paragraph');\n case 'heading': {\n const explicit = sourceProfile === 'docusaurus' ? /\\s*\\{#([^\\s{}]+)\\}\\s*$/.exec(plain(n)) : null;\n const title = explicit ? plain(n).slice(0, explicit.index) : plain(n);\n const base = `${prefix}-${\n explicit?.[1] ??\n (title\n .normalize('NFKC')\n .toLowerCase()\n .replace(/[^\\p{L}\\p{N}]+/gu, '-')\n .replace(/^-|-$/g, '') ||\n 'section')\n }`;\n let id = base,\n suffix = 1;\n while (ids.has(id)) id = `${base}-${++suffix}`;\n if (explicit && id !== base)\n diagnostics.push({ code: 'duplicate_heading_id', line: n.position?.start.line ?? 1 });\n ids.add(id);\n headings.push({ id, title, level: Number(n.depth) });\n let content = n.children ?? [];\n if (explicit) {\n const last = content.at(-1);\n if (last?.type === 'text')\n content = [\n ...content.slice(0, -1),\n { ...last, value: str(last.value).replace(/\\s*\\{#[^\\s{}]+\\}\\s*$/, '') },\n ];\n }\n return node(\n 'heading',\n { level: n.depth, id },\n content.flatMap((c) => convert(c, marks))\n );\n }\n case 'linkReference':\n case 'imageReference': {\n const def = definitions.get(str(n.identifier));\n if (!def) return [fallback(n, 'unresolved_reference', true)];\n return convert(\n { ...n, type: n.type === 'linkReference' ? 'link' : 'image', url: def.url, title: def.title },\n marks\n );\n }\n case 'link':\n return (n.children ?? []).flatMap((c) =>\n convert(c, [\n ...marks,\n {\n type: 'link',\n attrs: {\n href:\n sourceProfile === 'docusaurus' && str(n.url).startsWith('#')\n ? `#${prefix}-${str(n.url).slice(1)}`\n : str(n.url),\n },\n },\n ])\n );\n case 'image':\n return node('image', { src: str(n.url), alt: str(n.alt), title: str(n.title) }, []);\n case 'break':\n return node('hardBreak', {}, []);\n case 'blockquote':\n return node('blockquote');\n case 'thematicBreak':\n return node('horizontalRule', {}, []);\n case 'list':\n return node(\n (n.children ?? []).some((c) => typeof c.checked === 'boolean')\n ? 'taskList'\n : n.ordered\n ? 'orderedList'\n : 'bulletList',\n { start: n.start }\n );\n case 'listItem':\n return node(typeof n.checked === 'boolean' ? 'taskItem' : 'listItem', { checked: n.checked });\n case 'table':\n return node(\n 'table',\n {},\n (n.children ?? []).map((row, i) => ({\n type: 'tableRow',\n content: (row.children ?? []).map((cell) => ({\n type: i === 0 ? 'tableHeader' : 'tableCell',\n content: [{ type: 'paragraph', content: (cell.children ?? []).flatMap((c) => convert(c)) }],\n })),\n }))\n );\n case 'inlineMath':\n case 'math':\n return node(n.type === 'math' ? 'mathBlock' : 'mathInline', { tex: str(n.value) }, []).map((n) => ({\n ...n,\n marks,\n }));\n case 'code': {\n const language = str(n.lang).toLowerCase(),\n body = str(n.value);\n if (['mermaid', 'pintora', 'prism'].includes(language) && body.length > researchLimits.block)\n return [fallback(n, 'block_limit')];\n if (language === 'mermaid' || language === 'pintora')\n return node('diagram', { engine: language, code: body }, []);\n if (language === 'prism') {\n try {\n return node('researchWidget', { descriptor: JSON.parse(body) }, []);\n } catch {\n return [fallback(n, 'invalid_widget_json')];\n }\n }\n return node('codeBlock', { language, title: str(n.meta) }, [{ type: 'text', text: body }]);\n }\n case 'containerDirective':\n case 'leafDirective': {\n const name = str(n.name),\n attrs = (n.attributes ?? {}) as Record<string, string>;\n if (['note', 'tip', 'warning', 'danger', 'info', 'caution'].includes(name))\n return node('admonition', { kind: name, title: attrs.title || name });\n if (name === 'tabs') {\n if ((n.children ?? []).some((c) => c.type !== 'containerDirective' || c.name !== 'tab'))\n return [fallback(n, 'invalid_tabs')];\n return node(\n 'tabs',\n {},\n (n.children ?? []).flatMap((c) => convert(c))\n );\n }\n if (name === 'tab') return node('tabItem', { label: attrs.label || attrs.value || 'Tab' });\n if (name === 'widget')\n return node(\n 'researchWidget',\n {\n descriptor: {\n type: attrs.type,\n version: Number(attrs.version || 1),\n props: Object.fromEntries(Object.entries(attrs).filter(([key]) => key !== 'type' && key !== 'version')),\n },\n },\n []\n );\n return [fallback(n, 'unknown_directive')];\n }\n case 'html':\n return [fallback(n, 'raw_html', true)];\n default:\n return [\n fallback(\n n,\n `unsupported_${n.type}`,\n n.type.startsWith('inline') || n.type === 'textDirective' || n.type === 'footnoteReference'\n ),\n ];\n }\n };\n return { format: 'prism-research/1', metadata, doc: { type: 'doc', content: convert(tree) }, headings, diagnostics };\n}\n","import type { DOMPurify } from 'dompurify';\n\n/** The returned SVG must be consumed only by <img>, never injected into HTML.\n * SVG image isolation preserves Mermaid's layout CSS without granting it DOM\n * capabilities or allowing its styles to affect the surrounding document.\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Guides/SVG_as_an_image\n */\nexport function diagramImage(source: string, purify: DOMPurify) {\n const fragment = purify.sanitize(source, {\n USE_PROFILES: { svg: true, svgFilters: true },\n ADD_TAGS: ['style'],\n FORBID_TAGS: ['foreignObject', 'image', 'a', 'script', 'animate', 'animateMotion', 'animateTransform', 'set'],\n FORBID_ATTR: ['href', 'xlink:href'],\n RETURN_DOM_FRAGMENT: true,\n });\n const svg = fragment.querySelector('svg');\n if (!svg || !svg.getAttribute('viewBox')) throw new Error('invalid_diagram_svg');\n const title = svg.querySelector('title')?.textContent?.trim();\n const labels = [...svg.querySelectorAll('text')].map((node) => node.textContent?.trim()).filter(Boolean);\n const description = title || labels.join(' · ') || 'Diagram';\n return {\n src: 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(new XMLSerializer().serializeToString(svg)),\n description: description.slice(0, 2000),\n };\n}\n","'use client';\nimport { useEffect, useId, useRef, useState } from 'react';\nimport { useTheme } from '@mui/material/styles';\nimport type { ResearchLabels } from './document.js';\nimport { researchLimits } from './parse.js';\nimport { diagramImage } from './diagram-image.js';\n// Mermaid has mutable process-wide configuration. Serialise its configure/render\n// pair; document-local widgets and source code never get a configuration hook.\nlet pending: Promise<unknown> = Promise.resolve();\nexport function diagramSourceAllowed(source: string, engine: string) {\n return (\n engine === 'mermaid' && source.length <= researchLimits.block && !/^\\s*---/m.test(source) && !/%%\\s*\\{/.test(source)\n );\n}\nexport function ResearchDiagram({\n source,\n engine,\n labels,\n}: {\n source: string;\n engine: string;\n labels: ResearchLabels;\n}) {\n const id = `diagram-${useId().replace(/[^\\w-]/g, '')}`;\n const container = useRef<HTMLDivElement>(null);\n const [picture, setPicture] = useState<ReturnType<typeof diagramImage>>();\n const [state, setState] = useState<'loading' | 'ready' | 'error'>('loading');\n const theme = useTheme(),\n mode = theme.palette.mode;\n useEffect(() => {\n let cancelled = false;\n setState('loading');\n setPicture(undefined);\n const target = container.current;\n const run = async () => {\n if (cancelled || !target) return;\n if (!diagramSourceAllowed(source, engine)) {\n setState('error');\n return;\n }\n let scratch: HTMLDivElement | undefined;\n try {\n const [{ default: mermaid }, { default: purify }] = await Promise.all([import('mermaid'), import('dompurify')]);\n if (cancelled) return;\n scratch = document.createElement('div');\n scratch.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;width:1000px';\n target.append(scratch);\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: 'strict',\n htmlLabels: false,\n maxTextSize: researchLimits.block,\n maxEdges: 256,\n suppressErrorRendering: true,\n look: 'classic',\n theme: 'base',\n fontFamily: 'system-ui, sans-serif',\n themeVariables: {\n darkMode: mode === 'dark',\n primaryColor: theme.palette.background.paper,\n primaryTextColor: theme.palette.text.primary,\n primaryBorderColor: theme.palette.text.secondary,\n secondaryColor: theme.palette.background.default,\n tertiaryColor: theme.palette.background.paper,\n lineColor: theme.palette.text.secondary,\n textColor: theme.palette.text.primary,\n fontFamily: 'system-ui, sans-serif',\n fontSize: '16px',\n },\n flowchart: { htmlLabels: false },\n secure: [\n 'securityLevel',\n 'startOnLoad',\n 'maxTextSize',\n 'maxEdges',\n 'htmlLabels',\n 'theme',\n 'look',\n 'fontFamily',\n 'themeCSS',\n 'themeVariables',\n ],\n });\n const result = await mermaid.render(id, source, scratch);\n const picture = diagramImage(result.svg, purify);\n if (!cancelled) {\n setPicture(picture);\n setState('ready');\n }\n } catch {\n if (!cancelled) setState('error');\n } finally {\n scratch?.remove();\n }\n };\n pending = pending.catch(() => undefined).then(run);\n return () => {\n cancelled = true;\n target?.replaceChildren();\n };\n }, [source, engine, id, theme]);\n return (\n <figure className=\"prism-research__diagram\">\n {state !== 'ready' && <p role=\"status\">{state === 'error' ? labels.invalid : labels.loading}</p>}\n <div ref={container} aria-hidden=\"true\" />\n {picture && (\n <img\n className=\"prism-research__diagram-image\"\n src={picture.src}\n alt={picture.description}\n onError={() => setState('error')}\n />\n )}\n <details open={state === 'error'}>\n <summary>\n {labels.source} · {engine}\n </summary>\n <pre>{source}</pre>\n </details>\n </figure>\n );\n}\n","'use client';\n\nimport { ChevronDownIcon } from '../../icons/controls.js';\nimport { Component, useId, useMemo, type ReactNode, type ComponentType } from 'react';\nimport katex from 'katex';\nimport { Accordion, AccordionSummary, AccordionDetails, Box, Typography } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { TipTapRenderer, type TipTapNode } from '../tiptap-renderer/index.js';\nimport { parseResearchMarkdown, researchLimits } from './parse.js';\nimport { ResearchDiagram } from './diagram.js';\nimport './research.css';\n\nexport interface ResearchWidget {\n version: number;\n render: (props: unknown) => ReactNode;\n}\nexport type ResearchWidgets = Readonly<Record<string, ResearchWidget>>;\nexport function defineResearchWidget<P>(\n version: number,\n parse: (input: unknown) => P,\n View: ComponentType<P & object>\n): ResearchWidget {\n return {\n version,\n render(input) {\n const props = parse(input);\n return <View {...(props as P & object)} />;\n },\n };\n}\nexport interface ResearchLabels {\n metadata: string;\n contents: string;\n source: string;\n unavailable: string;\n invalid: string;\n loading: string;\n diagnostics: string;\n}\nexport const defaultResearchLabels: ResearchLabels = {\n metadata: 'Source metadata',\n contents: 'On this page',\n source: 'Source',\n unavailable: 'This block is not available in this document.',\n invalid: 'This block could not be rendered. Its source is preserved.',\n loading: 'Rendering diagram…',\n diagnostics: 'Document diagnostics',\n};\nexport interface ResearchDocumentProps {\n /** Enables inert Docusaurus heading IDs and namespaced fragment links. */\n sourceProfile?: 'research' | 'docusaurus';\n source: string;\n /** Stable namespace for deep links. A revision identifier belongs to the host's document metadata. */\n documentId?: string;\n widgets?: ResearchWidgets;\n labels?: Partial<ResearchLabels>;\n contents?: boolean;\n className?: string;\n sx?: SxProps<Theme>;\n}\nclass BlockBoundary extends Component<{ children: ReactNode; fallback: ReactNode }, { failed: boolean }> {\n state = { failed: false };\n static getDerivedStateFromError() {\n return { failed: true };\n }\n render() {\n return this.state.failed ? this.props.fallback : this.props.children;\n }\n}\nfunction Formula({ node, labels }: { node: TipTapNode; labels: ResearchLabels }) {\n const tex = String(node.attrs?.tex ?? '');\n try {\n if (tex.length > researchLimits.block) throw new Error('formula_limit');\n const html = katex.renderToString(tex, {\n displayMode: node.type === 'mathBlock',\n trust: false,\n strict: 'error',\n throwOnError: true,\n maxExpand: 1000,\n maxSize: 20,\n output: 'htmlAndMathml',\n });\n return (\n <span\n className={node.type === 'mathBlock' ? 'prism-research__formula-block' : undefined}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n } catch {\n return (\n <code className=\"prism-research__invalid-math\" title={labels.invalid}>\n {tex}\n </code>\n );\n }\n}\nfunction Widget({ node, widgets, labels }: { node: TipTapNode; widgets: ResearchWidgets; labels: ResearchLabels }) {\n const d = node.attrs?.descriptor as { type?: unknown; version?: unknown; props?: unknown } | undefined;\n if (!d || typeof d.type !== 'string' || !Object.hasOwn(widgets, d.type) || widgets[d.type]?.version !== d.version)\n return (\n <details className=\"prism-research__failure\">\n <summary>{labels.unavailable}</summary>\n <pre>{JSON.stringify(d)}</pre>\n </details>\n );\n try {\n return widgets[d.type]!.render(d.props);\n } catch {\n return (\n <details className=\"prism-research__failure\">\n <summary>{labels.invalid}</summary>\n <pre>{JSON.stringify(d)}</pre>\n </details>\n );\n }\n}\nconst emptyWidgets: ResearchWidgets = Object.freeze({});\nexport function ResearchDocument({\n source,\n sourceProfile = 'research',\n documentId,\n widgets = emptyWidgets,\n labels: overrides,\n contents = false,\n className,\n sx,\n}: ResearchDocumentProps) {\n const uid = useId();\n const prefix = documentId ?? `research-${uid.replace(/[^\\w-]/g, '')}`;\n const labels = { ...defaultResearchLabels, ...overrides };\n const parsed = useMemo(() => {\n try {\n return { data: parseResearchMarkdown(source, prefix, sourceProfile) };\n } catch {\n return { error: true };\n }\n }, [source, prefix, sourceProfile]);\n const nodes = useMemo(() => {\n const failure = (raw: string) => (\n <details className=\"prism-research__failure\" open>\n <summary>{labels.invalid}</summary>\n <pre>{raw}</pre>\n </details>\n );\n const bounded = (render: (node: TipTapNode) => ReactNode) => (props: { node: TipTapNode }) => {\n const raw = String(\n props.node.attrs?.tex ?? props.node.attrs?.code ?? JSON.stringify(props.node.attrs?.descriptor ?? {})\n );\n return (\n <BlockBoundary key={raw} fallback={failure(raw)}>\n {render(props.node)}\n </BlockBoundary>\n );\n };\n return {\n mathInline: ({ node }: { node: TipTapNode }) => <Formula node={node} labels={labels} />,\n mathBlock: ({ node }: { node: TipTapNode }) => <Formula node={node} labels={labels} />,\n diagram: bounded((n) => (\n <ResearchDiagram source={String(n.attrs?.code ?? '')} engine={String(n.attrs?.engine ?? '')} labels={labels} />\n )),\n researchWidget: bounded((n) => <Widget node={n} widgets={widgets} labels={labels} />),\n };\n }, [widgets, labels.invalid, labels.unavailable, labels.loading, labels.source]);\n if (!parsed.data) return <p role=\"alert\">{labels.invalid}</p>;\n return (\n <Box\n className={`prism-research ${className ?? ''}`}\n sx={(theme) => ({ '--prism-research-border': theme.palette.divider })}\n >\n {parsed.data.metadata && (\n <Accordion\n disableGutters\n elevation={0}\n sx={{ mb: 2, border: 1, borderColor: 'divider', '&:before': { display: 'none' } }}\n >\n <AccordionSummary expandIcon={<ChevronDownIcon fontSize=\"small\" />}>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {labels.metadata} · YAML\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box\n component=\"pre\"\n sx={{\n m: 0,\n maxHeight: 240,\n overflow: 'auto',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n fontSize: 12,\n }}\n >\n {parsed.data.metadata.raw}\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n {contents && parsed.data.headings.length > 0 && (\n <nav className=\"prism-research__contents\" aria-label={labels.contents}>\n <p>{labels.contents}</p>\n <ol>\n {parsed.data.headings.map((h) => (\n <li key={h.id}>\n <a href={`#${h.id}`}>{h.title}</a>\n </li>\n ))}\n </ol>\n </nav>\n )}\n <TipTapRenderer content={parsed.data.doc} nodeRenderers={nodes} inheritRegisteredNodes={false} sx={sx} />\n {parsed.data.diagnostics.length > 0 && (\n <details className=\"prism-research__diagnostics\">\n <summary>\n {labels.diagnostics} · {parsed.data.diagnostics.length}\n </summary>\n <ul>\n {parsed.data.diagnostics.map((d, i) => (\n <li key={i}>\n {d.line}: <code>{d.code}</code>\n </li>\n ))}\n </ul>\n </details>\n )}\n </Box>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/state/create-store.ts","../src/state/stores/settings.ts"],"names":[],"mappings":"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","file":"chunk-XIXSSI3B.js","sourcesContent":["/**\n * Prism Store Factory\n *\n * Creates Zustand stores with sensible defaults:\n * - Immer middleware for immutable updates\n * - DevTools integration\n * - Optional persistence\n *\n * @module @omnitron-dev/prism/state\n */\n\nimport { create, type StateCreator, type StoreApi, type UseBoundStore } from 'zustand';\nimport { devtools, persist, type PersistOptions, type DevtoolsOptions } from 'zustand/middleware';\nimport { immer } from 'zustand/middleware/immer';\n\n/**\n * Options for creating a Prism store.\n */\nexport interface CreateStoreOptions<T> {\n /** Store name for DevTools and persistence */\n name: string;\n /** Enable persistence to localStorage */\n persist?: boolean | Partial<PersistOptions<T>>;\n /** Enable Redux DevTools (default: true in development) */\n devtools?: boolean;\n}\n\n/**\n * Middleware type helpers for proper typing.\n */\ntype ImmerMiddleware = ['zustand/immer', never];\ntype DevtoolsMiddleware = ['zustand/devtools', never];\ntype PersistMiddleware<T> = ['zustand/persist', T];\n\n/**\n * Creates a Zustand store with Prism defaults.\n *\n * @example\n * ```typescript\n * interface CounterState {\n * count: number;\n * increment: () => void;\n * decrement: () => void;\n * }\n *\n * export const useCounterStore = createPrismStore<CounterState>(\n * (set) => ({\n * count: 0,\n * increment: () => set((state) => { state.count += 1; }),\n * decrement: () => set((state) => { state.count -= 1; }),\n * }),\n * { name: 'counter', persist: true }\n * );\n * ```\n */\n/**\n * A store that persists — the return type of `createPersistedStore`.\n *\n * Narrower than `createPrismStore`'s union: the `persist` API is guaranteed,\n * because this factory always installs the middleware.\n */\nexport type PersistedStore<T extends object> = UseBoundStore<StoreApi<T>> & {\n persist: {\n hasHydrated: () => boolean;\n rehydrate: () => Promise<void> | void;\n clearStorage: () => void;\n setOptions: (options: Partial<PersistOptions<T>>) => void;\n onHydrate: (fn: (state: T) => void) => () => void;\n onFinishHydration: (fn: (state: T) => void) => () => void;\n getOptions: () => Partial<PersistOptions<T>>;\n };\n};\n\nexport function createPrismStore<T extends object>(\n initializer: StateCreator<T, [ImmerMiddleware], []>,\n options: CreateStoreOptions<T>\n) {\n const { name, persist: persistOption, devtools: devtoolsOption = true } = options;\n const enableDevtools = devtoolsOption && typeof window !== 'undefined';\n\n // Prepare persist config\n const persistConfig: PersistOptions<T> | null = persistOption\n ? {\n name: `prism-${name}`,\n ...(typeof persistOption === 'object' ? persistOption : {}),\n }\n : null;\n\n // Prepare devtools config\n const devtoolsConfig: DevtoolsOptions = { name: `Prism:${name}` };\n\n // Create store based on which middleware are enabled\n // Using explicit middleware chains for proper type inference\n if (persistConfig && enableDevtools) {\n return create<T>()(devtools(persist(immer(initializer), persistConfig), devtoolsConfig));\n }\n\n if (persistConfig) {\n return create<T>()(persist(immer(initializer), persistConfig));\n }\n\n if (enableDevtools) {\n return create<T>()(devtools(immer(initializer), devtoolsConfig));\n }\n\n // No middleware except immer\n return create<T>()(immer(initializer));\n}\n\n/**\n * Creates a simple store without persistence (for UI-only state).\n */\nexport function createUIStore<T extends object>(initializer: StateCreator<T, [ImmerMiddleware], []>, name: string) {\n return createPrismStore(initializer, { name, persist: false });\n}\n\n/**\n * Merge a persisted state written under an older version into the current one.\n *\n * zustand's default when a version differs and no `migrate` is supplied is to\n * discard the stored state entirely and fall back to defaults — it logs\n * \"State loaded from storage couldn't be migrated since no migrate function\n * was provided\" to the console and moves on. In a browser that message is\n * seen by nobody, and what the user sees is their theme, layout, density and\n * language silently back at factory settings after an update that had nothing\n * to do with any of them.\n *\n * Discarding is the safe default for a library that cannot know what changed.\n * It is the wrong default here, because these stores hold preferences: the\n * cost of keeping a value that no longer means anything is one wrong setting,\n * and the cost of dropping everything is every setting.\n *\n * So: keep each stored key whose name still exists in the current defaults\n * AND whose type still matches. A field that was removed is dropped, a field\n * that changed shape is replaced by the new default, everything else\n * survives. A store needing more than that passes its own `migrate` — this\n * only fills in where none was given.\n */\nfunction mergeCompatibleFields<T extends object>(persisted: unknown, current: T): T {\n if (!persisted || typeof persisted !== 'object') return current;\n\n const stored = persisted as Record<string, unknown>;\n const merged = { ...current } as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(stored)) {\n if (!(key in merged)) continue; // field is gone\n const currentValue = merged[key];\n if (typeof currentValue === 'function') continue; // actions are not state\n if (currentValue === undefined || currentValue === null) {\n merged[key] = value;\n continue;\n }\n if (value === null || value === undefined) continue; // keep the default\n // Same primitive type, or both plain objects / both arrays.\n const sameShape =\n typeof value === typeof currentValue &&\n Array.isArray(value) === Array.isArray(currentValue);\n if (sameShape) merged[key] = value;\n }\n\n return merged as T;\n}\n\n/**\n * Creates a persisted store (for settings, preferences).\n *\n * Includes a storage wrapper that catches errors from localStorage\n * (e.g., private browsing, quota exceeded) and falls back gracefully, and a\n * default `migrate` that preserves settings across a version bump — see\n * `mergeCompatibleFields`.\n */\nexport function createPersistedStore<T extends object>(\n initializer: StateCreator<T, [ImmerMiddleware], []>,\n name: string,\n persistOptions?: Partial<PersistOptions<T>>\n): PersistedStore<T> {\n // `createPrismStore` decides its middleware chain at runtime (devtools are\n // enabled only in a browser), so its return type is a union in which one\n // branch carries no `persist` API. This function always persists — the\n // whole of its contract — and callers need `persist.hasHydrated()` and\n // `persist.rehydrate()`. Stating the narrower type here is what makes\n // those reachable; without it a caller has to cast, which is how a store\n // that does not persist would look identical to one that does.\n return createPrismStore(initializer, {\n name,\n persist: {\n version: 1,\n // Two hooks, and both are needed. `migrate` runs only on a version\n // mismatch and decides whether the stored state survives at all —\n // returning it unchanged is what stops zustand discarding it. `merge`\n // runs every load and decides how it combines with the current\n // defaults; zustand's own is a shallow spread, which would let a\n // stored field of the wrong shape overwrite a good default.\n migrate: (persisted: unknown) => persisted as T,\n merge: (persisted: unknown, current: T) => mergeCompatibleFields(persisted, current),\n storage: {\n getItem: (key) => {\n try {\n const value = localStorage.getItem(key);\n return value ? JSON.parse(value) : null;\n } catch {\n return null;\n }\n },\n setItem: (key, value) => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Silently fail (private browsing, quota exceeded)\n }\n },\n removeItem: (key) => {\n try {\n localStorage.removeItem(key);\n } catch {\n // Silently fail\n }\n },\n },\n ...persistOptions,\n },\n }) as PersistedStore<T>;\n}\n\n/**\n * Selector type for store state.\n */\nexport type StoreSelector<T, U> = (state: T) => U;\n\n/**\n * Helper to create typed selectors for a store.\n *\n * @example\n * ```typescript\n * const selectors = createSelectors(useUserStore);\n * const userName = selectors.use.name();\n * ```\n */\nexport function createSelectors<T extends object>(store: UseBoundStore<StoreApi<T>>) {\n const storeIn = store as UseBoundStore<StoreApi<T>> & {\n use: { [K in keyof T]: () => T[K] };\n };\n\n // Use Proxy so selectors work for dynamically added state keys,\n // not just keys present at creation time\n storeIn.use = new Proxy({} as { [K in keyof T]: () => T[K] }, {\n get: (_target, prop: string | symbol) => {\n if (typeof prop !== 'string') return undefined;\n return () => store((state: T) => state[prop as keyof T]);\n },\n });\n\n return storeIn;\n}\n","/**\n * Settings Store\n *\n * Comprehensive settings management with persistence.\n * Combines theme preferences with layout and navigation settings.\n *\n * @module state/stores/settings\n */\n\nimport { createPersistedStore, createSelectors } from '../create-store.js';\nimport type { ThemePreset, ThemeMode, ThemeDirection, ComponentDensity } from '../../types/theme.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Navigation layout options for dashboard.\n */\nexport type NavLayout = 'vertical' | 'horizontal' | 'mini';\n\n/**\n * Navigation color scheme.\n */\nexport type NavColor = 'integrate' | 'apparent';\n\n/**\n * Settings state and actions.\n */\nexport interface SettingsState {\n // Theme\n /** Current theme mode */\n mode: ThemeMode;\n /** Current theme preset */\n preset: ThemePreset;\n /** Primary color override (hex) */\n primaryColor: string | null;\n /** High contrast mode */\n contrast: 'default' | 'high';\n /** Text direction */\n direction: ThemeDirection;\n\n // Typography\n /** Base font size (12-20) */\n fontSize: number;\n /** Font family override */\n fontFamily: string | null;\n\n // Layout\n /** Component density */\n density: ComponentDensity;\n /** Compact sidebar (deprecated — use sidebarCollapsed) */\n compactSidebar: boolean;\n /** Per-layout sidebar collapsed state (keyed by persistKey) */\n sidebarCollapsed: Record<string, boolean>;\n /** Dashboard navigation layout */\n navLayout: NavLayout;\n /** Navigation color scheme */\n navColor: NavColor;\n /** Stretch content to full width */\n stretch: boolean;\n\n /** Per-table rows-per-page preference (keyed by table ID) */\n tableRowsPerPage: Record<string, number>;\n\n // Actions\n setMode: (mode: ThemeMode) => void;\n toggleMode: () => void;\n setPreset: (preset: ThemePreset) => void;\n setPrimaryColor: (color: string | null) => void;\n setContrast: (contrast: 'default' | 'high') => void;\n setDirection: (direction: ThemeDirection) => void;\n setFontSize: (size: number) => void;\n setFontFamily: (family: string | null) => void;\n setDensity: (density: ComponentDensity) => void;\n setCompactSidebar: (compact: boolean) => void;\n setSidebarCollapsed: (key: string, collapsed: boolean) => void;\n getSidebarCollapsed: (key: string) => boolean;\n setNavLayout: (layout: NavLayout) => void;\n setNavColor: (color: NavColor) => void;\n setStretch: (stretch: boolean) => void;\n setTableRowsPerPage: (tableId: string, rows: number) => void;\n getTableRowsPerPage: (tableId: string, fallback?: number) => number;\n updateSettings: (updates: Partial<SettingsValues>) => void;\n reset: () => void;\n canReset: () => boolean;\n}\n\n/**\n * Settings values (state without actions).\n */\nexport type SettingsValues = Omit<\n SettingsState,\n | 'setMode'\n | 'toggleMode'\n | 'setPreset'\n | 'setPrimaryColor'\n | 'setContrast'\n | 'setDirection'\n | 'setFontSize'\n | 'setFontFamily'\n | 'setDensity'\n | 'setCompactSidebar'\n | 'setSidebarCollapsed'\n | 'getSidebarCollapsed'\n | 'setNavLayout'\n | 'setNavColor'\n | 'setStretch'\n | 'setTableRowsPerPage'\n | 'getTableRowsPerPage'\n | 'updateSettings'\n | 'reset'\n | 'canReset'\n>;\n\n// =============================================================================\n// DEFAULT STATE\n// =============================================================================\n\nconst defaultSettings: SettingsValues = {\n // Theme\n mode: 'light',\n preset: 'default-light',\n primaryColor: null,\n contrast: 'default',\n direction: 'ltr',\n\n // Typography\n fontSize: 16,\n fontFamily: null, // null = use Prism default (Nunito Sans Variable)\n\n // Layout\n density: 'standard',\n compactSidebar: false,\n sidebarCollapsed: {},\n navLayout: 'vertical',\n navColor: 'integrate',\n stretch: true,\n tableRowsPerPage: {},\n};\n\n// =============================================================================\n// STORE\n// =============================================================================\n\n/**\n * Settings store with persistence.\n *\n * @example\n * ```tsx\n * function SettingsPanel() {\n * const { mode, setMode, preset, setPreset, canReset, reset } = useSettingsStore();\n *\n * return (\n * <div>\n * <Switch checked={mode === 'dark'} onChange={() => setMode(mode === 'dark' ? 'light' : 'dark')} />\n * <Select value={preset} onChange={(e) => setPreset(e.target.value as ThemePreset)}>\n * <MenuItem value=\"default-light\">Light</MenuItem>\n * <MenuItem value=\"luxury\">Luxury</MenuItem>\n * </Select>\n * {canReset() && <Button onClick={reset}>Reset</Button>}\n * </div>\n * );\n * }\n * ```\n */\nexport const useSettingsStore = createPersistedStore<SettingsState>(\n (set, get) => ({\n ...defaultSettings,\n\n // Theme actions\n setMode: (mode) => set({ mode }),\n toggleMode: () =>\n set((state) => {\n state.mode = state.mode === 'light' ? 'dark' : 'light';\n }),\n setPreset: (preset) => set({ preset }),\n setPrimaryColor: (primaryColor) => set({ primaryColor }),\n setContrast: (contrast) => set({ contrast }),\n setDirection: (direction) => set({ direction }),\n\n // Typography actions\n setFontSize: (fontSize) => set({ fontSize: Math.min(20, Math.max(12, fontSize)) }),\n setFontFamily: (fontFamily) => set({ fontFamily }),\n\n // Layout actions\n setDensity: (density) => set({ density }),\n setCompactSidebar: (compactSidebar) => set({ compactSidebar }),\n setSidebarCollapsed: (key, collapsed) =>\n set((state) => {\n state.sidebarCollapsed = { ...state.sidebarCollapsed, [key]: collapsed };\n }),\n getSidebarCollapsed: (key) => get().sidebarCollapsed[key] ?? false,\n setNavLayout: (navLayout) => set({ navLayout }),\n setNavColor: (navColor) => set({ navColor }),\n setStretch: (stretch) => set({ stretch }),\n setTableRowsPerPage: (tableId, rows) =>\n set((state) => {\n state.tableRowsPerPage = { ...state.tableRowsPerPage, [tableId]: rows };\n }),\n getTableRowsPerPage: (tableId, fallback = 25) => get().tableRowsPerPage[tableId] ?? fallback,\n\n // Batch update\n updateSettings: (updates) => set(updates),\n\n // Reset\n reset: () => set(defaultSettings),\n canReset: () => {\n const state = get();\n return Object.keys(defaultSettings).some(\n (key) => state[key as keyof SettingsValues] !== defaultSettings[key as keyof SettingsValues]\n );\n },\n }),\n 'settings'\n);\n\n/**\n * Settings store with auto-generated selectors.\n *\n * @example\n * ```tsx\n * const mode = settingsStore.use.mode();\n * const preset = settingsStore.use.preset();\n * ```\n */\nexport const settingsStore = createSelectors(useSettingsStore);\n\n/**\n * Get default settings values.\n */\nexport function getDefaultSettings(): SettingsValues {\n return { ...defaultSettings };\n}\n"]}
|