@apipass/design-system 3.3.0 → 4.0.0

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.
Files changed (59) hide show
  1. package/dist/lib/embedded-styles.js +1 -1
  2. package/dist/lib/json-viewer.index.cjs +2 -0
  3. package/dist/lib/json-viewer.index.cjs.map +1 -0
  4. package/dist/lib/json-viewer.index.js +5 -0
  5. package/dist/lib/json-viewer.index.js.map +1 -0
  6. package/dist/lib/lib.index.cjs +1 -1
  7. package/dist/lib/lib.index.js +742 -744
  8. package/dist/lib/lib.index.js.map +1 -1
  9. package/dist/lib/style.css +1 -1
  10. package/dist/lib/ui/primitives/JsonViewer/JsonViewer.cjs +1 -1
  11. package/dist/lib/ui/primitives/JsonViewer/JsonViewer.cjs.map +1 -1
  12. package/dist/lib/ui/primitives/JsonViewer/JsonViewer.js +8 -8
  13. package/dist/types/json-viewer.index.d.ts +1 -0
  14. package/dist/types/ui/primitives/index.d.ts +0 -1
  15. package/package.json +34 -7
  16. package/dist/lib/vendor/@codemirror/lang-json/dist/index.cjs +0 -2
  17. package/dist/lib/vendor/@codemirror/lang-json/dist/index.cjs.map +0 -1
  18. package/dist/lib/vendor/@codemirror/lang-json/dist/index.js +0 -28
  19. package/dist/lib/vendor/@codemirror/lang-json/dist/index.js.map +0 -1
  20. package/dist/lib/vendor/@codemirror/language/dist/index.cjs +0 -2
  21. package/dist/lib/vendor/@codemirror/language/dist/index.cjs.map +0 -1
  22. package/dist/lib/vendor/@codemirror/language/dist/index.js +0 -791
  23. package/dist/lib/vendor/@codemirror/language/dist/index.js.map +0 -1
  24. package/dist/lib/vendor/@codemirror/state/dist/index.cjs +0 -6
  25. package/dist/lib/vendor/@codemirror/state/dist/index.cjs.map +0 -1
  26. package/dist/lib/vendor/@codemirror/state/dist/index.js +0 -2633
  27. package/dist/lib/vendor/@codemirror/state/dist/index.js.map +0 -1
  28. package/dist/lib/vendor/@codemirror/view/dist/index.cjs +0 -5
  29. package/dist/lib/vendor/@codemirror/view/dist/index.cjs.map +0 -1
  30. package/dist/lib/vendor/@codemirror/view/dist/index.js +0 -6068
  31. package/dist/lib/vendor/@codemirror/view/dist/index.js.map +0 -1
  32. package/dist/lib/vendor/@lezer/common/dist/index.cjs +0 -2
  33. package/dist/lib/vendor/@lezer/common/dist/index.cjs.map +0 -1
  34. package/dist/lib/vendor/@lezer/common/dist/index.js +0 -1392
  35. package/dist/lib/vendor/@lezer/common/dist/index.js.map +0 -1
  36. package/dist/lib/vendor/@lezer/highlight/dist/index.cjs +0 -2
  37. package/dist/lib/vendor/@lezer/highlight/dist/index.cjs.map +0 -1
  38. package/dist/lib/vendor/@lezer/highlight/dist/index.js +0 -638
  39. package/dist/lib/vendor/@lezer/highlight/dist/index.js.map +0 -1
  40. package/dist/lib/vendor/@lezer/json/dist/index.cjs +0 -2
  41. package/dist/lib/vendor/@lezer/json/dist/index.cjs.map +0 -1
  42. package/dist/lib/vendor/@lezer/json/dist/index.js +0 -35
  43. package/dist/lib/vendor/@lezer/json/dist/index.js.map +0 -1
  44. package/dist/lib/vendor/@lezer/lr/dist/index.cjs +0 -2
  45. package/dist/lib/vendor/@lezer/lr/dist/index.cjs.map +0 -1
  46. package/dist/lib/vendor/@lezer/lr/dist/index.js +0 -1269
  47. package/dist/lib/vendor/@lezer/lr/dist/index.js.map +0 -1
  48. package/dist/lib/vendor/@marijn/find-cluster-break/src/index.cjs +0 -2
  49. package/dist/lib/vendor/@marijn/find-cluster-break/src/index.cjs.map +0 -1
  50. package/dist/lib/vendor/@marijn/find-cluster-break/src/index.js +0 -70
  51. package/dist/lib/vendor/@marijn/find-cluster-break/src/index.js.map +0 -1
  52. package/dist/lib/vendor/style-mod/src/style-mod.cjs +0 -4
  53. package/dist/lib/vendor/style-mod/src/style-mod.cjs.map +0 -1
  54. package/dist/lib/vendor/style-mod/src/style-mod.js +0 -110
  55. package/dist/lib/vendor/style-mod/src/style-mod.js.map +0 -1
  56. package/dist/lib/vendor/w3c-keyname/index.cjs +0 -2
  57. package/dist/lib/vendor/w3c-keyname/index.cjs.map +0 -1
  58. package/dist/lib/vendor/w3c-keyname/index.js +0 -89
  59. package/dist/lib/vendor/w3c-keyname/index.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("react"),S=require("../../../vendor/clsx/dist/clsx.cjs"),w=require("../../../vendor/@codemirror/state/dist/index.cjs"),v=require("../../../vendor/@codemirror/view/dist/index.cjs"),q=require("../../../vendor/@codemirror/lang-json/dist/index.cjs"),g=require("../../../vendor/@codemirror/language/dist/index.cjs"),c=require("../../../vendor/@lezer/highlight/dist/index.cjs");;/* empty css */const E=require("../../icons/IconChevronDown.cjs"),R=require("../../icons/IconChevronRight.cjs"),j=require("../Button/Button.cjs"),C=220,N=g.HighlightStyle.define([{tag:c.tags.propertyName,color:"var(--json-viewer-color-key)"},{tag:c.tags.string,color:"var(--json-viewer-color-string)",fontWeight:600},{tag:[c.tags.number,c.tags.bool,c.tags.null],color:"var(--json-viewer-color-scalar)"},{tag:[c.tags.separator,c.tags.squareBracket,c.tags.brace],color:"var(--json-viewer-color-punctuation)"}]),$=v.EditorView.theme({"&":{backgroundColor:"transparent",color:"var(--json-viewer-color-punctuation)",fontSize:"13px"},"&.cm-focused":{outline:"none"},".cm-content":{fontFamily:"var(--sds-typography-family-mono)",padding:"45px 124px 12px 4px"},".cm-gutters":{backgroundColor:"transparent",border:"none",color:"var(--json-viewer-color-caret)",paddingLeft:"5px"},".cm-scroller":{overflow:"auto"}}),H=[q.json(),g.foldGutter(),g.syntaxHighlighting(N)];function I(t){try{return JSON.stringify(t,null,2)??"null"}catch{return String(t)}}function k(t){return typeof t=="number"?`${t}px`:t}function p(t,i){i.length>0&&t.dispatch({effects:i.map(o=>g.foldEffect.of(o))})}function z(t){const i=[],o=t.length;let n=0;for(;n<o&&t[n]!=="{"&&t[n]!=="[";)n++;if(n>=o)return i;let f=0,l=!1,s=-1;for(;n<o;n++){const r=t[n];if(l){r==="\\"?n++:r==='"'&&(l=!1);continue}if(r==='"'){l=!0;continue}if(r==="{"||r==="["){f++,f===2&&(s=n+1);continue}(r==="}"||r==="]")&&(f===2&&s!==-1&&(i.push({from:s,to:n}),s=-1),f--)}return i}function B({value:t,expandAllLabel:i,actions:o,className:n,height:f}){const l=u.useRef(null),s=u.useRef(null),[r,m]=u.useState(!1),d=u.useMemo(()=>I(t),[t]),h=u.useMemo(()=>z(d),[d]),y=k(f??C);u.useEffect(()=>{if(!l.current)return;const e=new v.EditorView({parent:l.current,state:w.EditorState.create({doc:d,extensions:[v.EditorView.editable.of(!1),w.EditorState.readOnly.of(!0),$,...H]})});return s.current=e,p(e,h),()=>{e.destroy(),s.current=null}},[]),u.useEffect(()=>{const e=s.current;if(!e)return;const x=e.state.doc.toString();x!==d&&(e.dispatch({changes:{from:0,to:x.length,insert:d}}),p(e,h),m(!1))},[d,h]);const b=()=>{const e=s.current;e&&(r?p(e,h):g.unfoldAll(e),m(!r))};return a.jsxs("div",{className:S.clsx("json-viewer",n),children:[a.jsx(j.Button,{"aria-label":i,variant:"subtle",size:"small",className:"json-viewer-expand-all",onPress:b,children:r?a.jsx(E.IconChevronDown,{size:"14"}):a.jsx(R.IconChevronRight,{size:"14"})}),o&&o.length>0&&a.jsx("div",{className:"json-viewer-actions",children:o.map(e=>a.jsx(j.Button,{"aria-label":e.label,variant:"subtle",size:"small",className:"json-viewer-action",onPress:e.onPress,children:e.icon},e.key))}),a.jsx("div",{ref:l,className:"json-viewer-content",style:{height:y}})]})}exports.JsonViewer=B;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("react"),S=require("../../../vendor/clsx/dist/clsx.cjs"),x=require("@codemirror/state"),v=require("@codemirror/view"),q=require("@codemirror/lang-json"),d=require("@codemirror/language"),c=require("@lezer/highlight");;/* empty css */const E=require("../../icons/IconChevronDown.cjs"),R=require("../../icons/IconChevronRight.cjs"),j=require("../Button/Button.cjs"),C=220,N=d.HighlightStyle.define([{tag:c.tags.propertyName,color:"var(--json-viewer-color-key)"},{tag:c.tags.string,color:"var(--json-viewer-color-string)",fontWeight:600},{tag:[c.tags.number,c.tags.bool,c.tags.null],color:"var(--json-viewer-color-scalar)"},{tag:[c.tags.separator,c.tags.squareBracket,c.tags.brace],color:"var(--json-viewer-color-punctuation)"}]),H=v.EditorView.theme({"&":{backgroundColor:"transparent",color:"var(--json-viewer-color-punctuation)",fontSize:"13px"},"&.cm-focused":{outline:"none"},".cm-content":{fontFamily:"var(--sds-typography-family-mono)",padding:"45px 124px 12px 4px"},".cm-gutters":{backgroundColor:"transparent",border:"none",color:"var(--json-viewer-color-caret)",paddingLeft:"5px"},".cm-scroller":{overflow:"auto"}}),I=[q.json(),d.foldGutter(),d.syntaxHighlighting(N)];function k(t){try{return JSON.stringify(t,null,2)??"null"}catch{return String(t)}}function z(t){return typeof t=="number"?`${t}px`:t}function p(t,i){i.length>0&&t.dispatch({effects:i.map(o=>d.foldEffect.of(o))})}function B(t){const i=[],o=t.length;let n=0;for(;n<o&&t[n]!=="{"&&t[n]!=="[";)n++;if(n>=o)return i;let f=0,l=!1,s=-1;for(;n<o;n++){const r=t[n];if(l){r==="\\"?n++:r==='"'&&(l=!1);continue}if(r==='"'){l=!0;continue}if(r==="{"||r==="["){f++,f===2&&(s=n+1);continue}(r==="}"||r==="]")&&(f===2&&s!==-1&&(i.push({from:s,to:n}),s=-1),f--)}return i}function F({value:t,expandAllLabel:i,actions:o,className:n,height:f}){const l=u.useRef(null),s=u.useRef(null),[r,m]=u.useState(!1),g=u.useMemo(()=>k(t),[t]),h=u.useMemo(()=>B(g),[g]),y=z(f??C);u.useEffect(()=>{if(!l.current)return;const e=new v.EditorView({parent:l.current,state:x.EditorState.create({doc:g,extensions:[v.EditorView.editable.of(!1),x.EditorState.readOnly.of(!0),H,...I]})});return s.current=e,p(e,h),()=>{e.destroy(),s.current=null}},[]),u.useEffect(()=>{const e=s.current;if(!e)return;const w=e.state.doc.toString();w!==g&&(e.dispatch({changes:{from:0,to:w.length,insert:g}}),p(e,h),m(!1))},[g,h]);const b=()=>{const e=s.current;e&&(r?p(e,h):d.unfoldAll(e),m(!r))};return a.jsxs("div",{className:S.clsx("json-viewer",n),children:[a.jsx(j.Button,{"aria-label":i,variant:"subtle",size:"small",className:"json-viewer-expand-all",onPress:b,children:r?a.jsx(E.IconChevronDown,{size:"14"}):a.jsx(R.IconChevronRight,{size:"14"})}),o&&o.length>0&&a.jsx("div",{className:"json-viewer-actions",children:o.map(e=>a.jsx(j.Button,{"aria-label":e.label,variant:"subtle",size:"small",className:"json-viewer-action",onPress:e.onPress,children:e.icon},e.key))}),a.jsx("div",{ref:l,className:"json-viewer-content",style:{height:y}})]})}exports.JsonViewer=F;
2
2
  //# sourceMappingURL=JsonViewer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"JsonViewer.cjs","sources":["../../../../../src/ui/primitives/JsonViewer/JsonViewer.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { json } from \"@codemirror/lang-json\";\nimport { foldEffect, foldGutter, HighlightStyle, syntaxHighlighting, unfoldAll } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\nimport { Button } from \"primitives\";\nimport { IconChevronDown, IconChevronRight } from \"icons\";\nimport \"./jsonviewer.css\";\n\nexport interface JsonViewerAction {\n key: string;\n label: string;\n icon: ReactNode;\n onPress: () => void;\n}\n\nexport interface JsonViewerProps {\n value: unknown;\n expandAllLabel: string;\n actions?: JsonViewerAction[];\n className?: string;\n height?: string | number;\n}\n\nconst DEFAULT_HEIGHT = 220;\n\nconst jsonHighlightStyle = HighlightStyle.define([\n { tag: t.propertyName, color: \"var(--json-viewer-color-key)\" },\n { tag: t.string, color: \"var(--json-viewer-color-string)\", fontWeight: 600 },\n { tag: [t.number, t.bool, t.null], color: \"var(--json-viewer-color-scalar)\" },\n { tag: [t.separator, t.squareBracket, t.brace], color: \"var(--json-viewer-color-punctuation)\" },\n]);\n\nconst theme = EditorView.theme({\n \"&\": { backgroundColor: \"transparent\", color: \"var(--json-viewer-color-punctuation)\", fontSize: \"13px\" },\n \"&.cm-focused\": { outline: \"none\" },\n \".cm-content\": { fontFamily: \"var(--sds-typography-family-mono)\", padding: \"45px 124px 12px 4px\" },\n \".cm-gutters\": {\n backgroundColor: \"transparent\",\n border: \"none\",\n color: \"var(--json-viewer-color-caret)\",\n paddingLeft: \"5px\",\n },\n \".cm-scroller\": { overflow: \"auto\" },\n});\n\nconst extensions = [json(), foldGutter(), syntaxHighlighting(jsonHighlightStyle)];\n\nfunction serialize(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"null\";\n } catch {\n return String(value);\n }\n}\n\nfunction toCssSize(size: string | number): string {\n return typeof size === \"number\" ? `${size}px` : size;\n}\n\nfunction applyFoldRanges(view: EditorView, ranges: { from: number; to: number }[]) {\n if (ranges.length > 0) view.dispatch({ effects: ranges.map((range) => foldEffect.of(range)) });\n}\n\n/**\n * Finds the fold range of every direct child (depth 1) of the root object/array\n * by scanning the text itself for matching brackets. This mirrors what\n * CodeMirror's `foldable()` would compute, but doesn't depend on the lezer\n * parser having finished tokenizing the document — which for a multi-MB\n * document is not guaranteed synchronously at mount time.\n */\nfunction computeFirstLevelFoldRanges(text: string): { from: number; to: number }[] {\n const ranges: { from: number; to: number }[] = [];\n const n = text.length;\n let i = 0;\n while (i < n && text[i] !== \"{\" && text[i] !== \"[\") i++;\n if (i >= n) return ranges;\n\n let depth = 0;\n let inString = false;\n let pendingStart = -1;\n for (; i < n; i++) {\n const ch = text[i];\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === \"{\" || ch === \"[\") {\n depth++;\n if (depth === 2) pendingStart = i + 1;\n continue;\n }\n if (ch === \"}\" || ch === \"]\") {\n if (depth === 2 && pendingStart !== -1) {\n ranges.push({ from: pendingStart, to: i });\n pendingStart = -1;\n }\n depth--;\n }\n }\n return ranges;\n}\n\nexport function JsonViewer({ value, expandAllLabel, actions, className, height }: JsonViewerProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const [isExpanded, setIsExpanded] = useState(false);\n const text = useMemo(() => serialize(value), [value]);\n const foldRanges = useMemo(() => computeFirstLevelFoldRanges(text), [text]);\n const editorHeight = toCssSize(height ?? DEFAULT_HEIGHT);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const view = new EditorView({\n parent: containerRef.current,\n state: EditorState.create({\n doc: text,\n extensions: [EditorView.editable.of(false), EditorState.readOnly.of(true), theme, ...extensions],\n }),\n });\n viewRef.current = view;\n applyFoldRanges(view, foldRanges);\n return () => {\n view.destroy();\n viewRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n const currentText = view.state.doc.toString();\n if (currentText !== text) {\n view.dispatch({ changes: { from: 0, to: currentText.length, insert: text } });\n applyFoldRanges(view, foldRanges);\n setIsExpanded(false);\n }\n }, [text, foldRanges]);\n\n const toggleExpandAll = () => {\n const view = viewRef.current;\n if (!view) return;\n if (isExpanded) {\n applyFoldRanges(view, foldRanges);\n } else {\n unfoldAll(view);\n }\n setIsExpanded(!isExpanded);\n };\n\n return (\n <div className={clsx(\"json-viewer\", className)}>\n <Button\n aria-label={expandAllLabel}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-expand-all\"\n onPress={toggleExpandAll}\n >\n {isExpanded ? <IconChevronDown size=\"14\" /> : <IconChevronRight size=\"14\" />}\n </Button>\n {actions && actions.length > 0 && (\n <div className=\"json-viewer-actions\">\n {actions.map((action) => (\n <Button\n key={action.key}\n aria-label={action.label}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-action\"\n onPress={action.onPress}\n >\n {action.icon}\n </Button>\n ))}\n </div>\n )}\n <div ref={containerRef} className=\"json-viewer-content\" style={{ height: editorHeight }} />\n </div>\n );\n}\n"],"names":["DEFAULT_HEIGHT","jsonHighlightStyle","HighlightStyle","t","theme","EditorView","extensions","json","foldGutter","syntaxHighlighting","serialize","value","toCssSize","size","applyFoldRanges","view","ranges","range","foldEffect","computeFirstLevelFoldRanges","text","n","i","depth","inString","pendingStart","ch","JsonViewer","expandAllLabel","actions","className","height","containerRef","useRef","viewRef","isExpanded","setIsExpanded","useState","useMemo","foldRanges","editorHeight","useEffect","EditorState","currentText","toggleExpandAll","unfoldAll","clsx","jsx","Button","IconChevronDown","IconChevronRight","action"],"mappings":"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"}
1
+ {"version":3,"file":"JsonViewer.cjs","sources":["../../../../../src/ui/primitives/JsonViewer/JsonViewer.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport clsx from \"clsx\";\nimport { EditorState } from \"@codemirror/state\";\nimport { EditorView } from \"@codemirror/view\";\nimport { json } from \"@codemirror/lang-json\";\nimport { foldEffect, foldGutter, HighlightStyle, syntaxHighlighting, unfoldAll } from \"@codemirror/language\";\nimport { tags as t } from \"@lezer/highlight\";\nimport { Button } from \"primitives\";\nimport { IconChevronDown, IconChevronRight } from \"icons\";\nimport \"./jsonviewer.css\";\n\nexport interface JsonViewerAction {\n key: string;\n label: string;\n icon: ReactNode;\n onPress: () => void;\n}\n\nexport interface JsonViewerProps {\n value: unknown;\n expandAllLabel: string;\n actions?: JsonViewerAction[];\n className?: string;\n height?: string | number;\n}\n\nconst DEFAULT_HEIGHT = 220;\n\nconst jsonHighlightStyle = HighlightStyle.define([\n { tag: t.propertyName, color: \"var(--json-viewer-color-key)\" },\n { tag: t.string, color: \"var(--json-viewer-color-string)\", fontWeight: 600 },\n { tag: [t.number, t.bool, t.null], color: \"var(--json-viewer-color-scalar)\" },\n { tag: [t.separator, t.squareBracket, t.brace], color: \"var(--json-viewer-color-punctuation)\" },\n]);\n\nconst theme = EditorView.theme({\n \"&\": { backgroundColor: \"transparent\", color: \"var(--json-viewer-color-punctuation)\", fontSize: \"13px\" },\n \"&.cm-focused\": { outline: \"none\" },\n \".cm-content\": { fontFamily: \"var(--sds-typography-family-mono)\", padding: \"45px 124px 12px 4px\" },\n \".cm-gutters\": {\n backgroundColor: \"transparent\",\n border: \"none\",\n color: \"var(--json-viewer-color-caret)\",\n paddingLeft: \"5px\",\n },\n \".cm-scroller\": { overflow: \"auto\" },\n});\n\nconst extensions = [json(), foldGutter(), syntaxHighlighting(jsonHighlightStyle)];\n\nfunction serialize(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"null\";\n } catch {\n return String(value);\n }\n}\n\nfunction toCssSize(size: string | number): string {\n return typeof size === \"number\" ? `${size}px` : size;\n}\n\nfunction applyFoldRanges(view: EditorView, ranges: { from: number; to: number }[]) {\n if (ranges.length > 0) view.dispatch({ effects: ranges.map((range) => foldEffect.of(range)) });\n}\n\n/**\n * Finds the fold range of every direct child (depth 1) of the root object/array\n * by scanning the text itself for matching brackets. This mirrors what\n * CodeMirror's `foldable()` would compute, but doesn't depend on the lezer\n * parser having finished tokenizing the document — which for a multi-MB\n * document is not guaranteed synchronously at mount time.\n */\nfunction computeFirstLevelFoldRanges(text: string): { from: number; to: number }[] {\n const ranges: { from: number; to: number }[] = [];\n const n = text.length;\n let i = 0;\n while (i < n && text[i] !== \"{\" && text[i] !== \"[\") i++;\n if (i >= n) return ranges;\n\n let depth = 0;\n let inString = false;\n let pendingStart = -1;\n for (; i < n; i++) {\n const ch = text[i];\n if (inString) {\n if (ch === \"\\\\\") i++;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === \"{\" || ch === \"[\") {\n depth++;\n if (depth === 2) pendingStart = i + 1;\n continue;\n }\n if (ch === \"}\" || ch === \"]\") {\n if (depth === 2 && pendingStart !== -1) {\n ranges.push({ from: pendingStart, to: i });\n pendingStart = -1;\n }\n depth--;\n }\n }\n return ranges;\n}\n\nexport function JsonViewer({ value, expandAllLabel, actions, className, height }: JsonViewerProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n const [isExpanded, setIsExpanded] = useState(false);\n const text = useMemo(() => serialize(value), [value]);\n const foldRanges = useMemo(() => computeFirstLevelFoldRanges(text), [text]);\n const editorHeight = toCssSize(height ?? DEFAULT_HEIGHT);\n\n useEffect(() => {\n if (!containerRef.current) return;\n const view = new EditorView({\n parent: containerRef.current,\n state: EditorState.create({\n doc: text,\n extensions: [EditorView.editable.of(false), EditorState.readOnly.of(true), theme, ...extensions],\n }),\n });\n viewRef.current = view;\n applyFoldRanges(view, foldRanges);\n return () => {\n view.destroy();\n viewRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n const currentText = view.state.doc.toString();\n if (currentText !== text) {\n view.dispatch({ changes: { from: 0, to: currentText.length, insert: text } });\n applyFoldRanges(view, foldRanges);\n setIsExpanded(false);\n }\n }, [text, foldRanges]);\n\n const toggleExpandAll = () => {\n const view = viewRef.current;\n if (!view) return;\n if (isExpanded) {\n applyFoldRanges(view, foldRanges);\n } else {\n unfoldAll(view);\n }\n setIsExpanded(!isExpanded);\n };\n\n return (\n <div className={clsx(\"json-viewer\", className)}>\n <Button\n aria-label={expandAllLabel}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-expand-all\"\n onPress={toggleExpandAll}\n >\n {isExpanded ? <IconChevronDown size=\"14\" /> : <IconChevronRight size=\"14\" />}\n </Button>\n {actions && actions.length > 0 && (\n <div className=\"json-viewer-actions\">\n {actions.map((action) => (\n <Button\n key={action.key}\n aria-label={action.label}\n variant=\"subtle\"\n size=\"small\"\n className=\"json-viewer-action\"\n onPress={action.onPress}\n >\n {action.icon}\n </Button>\n ))}\n </div>\n )}\n <div ref={containerRef} className=\"json-viewer-content\" style={{ height: editorHeight }} />\n </div>\n );\n}\n"],"names":["DEFAULT_HEIGHT","jsonHighlightStyle","HighlightStyle","t","theme","EditorView","extensions","json","foldGutter","syntaxHighlighting","serialize","value","toCssSize","size","applyFoldRanges","view","ranges","range","foldEffect","computeFirstLevelFoldRanges","text","n","i","depth","inString","pendingStart","ch","JsonViewer","expandAllLabel","actions","className","height","containerRef","useRef","viewRef","isExpanded","setIsExpanded","useState","useMemo","foldRanges","editorHeight","useEffect","EditorState","currentText","toggleExpandAll","unfoldAll","clsx","jsx","Button","IconChevronDown","IconChevronRight","action"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { jsxs as E, jsx as u } from "react/jsx-runtime";
2
2
  import { useRef as v, useState as N, useMemo as w, useEffect as x } from "react";
3
3
  import { clsx as R } from "../../../vendor/clsx/dist/clsx.js";
4
- import { EditorState as y } from "../../../vendor/@codemirror/state/dist/index.js";
5
- import { EditorView as d } from "../../../vendor/@codemirror/view/dist/index.js";
6
- import { json as H } from "../../../vendor/@codemirror/lang-json/dist/index.js";
7
- import { foldGutter as k, syntaxHighlighting as z, foldEffect as C, unfoldAll as F, HighlightStyle as I } from "../../../vendor/@codemirror/language/dist/index.js";
8
- import { tags as l } from "../../../vendor/@lezer/highlight/dist/index.js";
4
+ import { EditorState as y } from "@codemirror/state";
5
+ import { EditorView as d } from "@codemirror/view";
6
+ import { json as H } from "@codemirror/lang-json";
7
+ import { foldGutter as k, syntaxHighlighting as z, HighlightStyle as C, foldEffect as F, unfoldAll as I } from "@codemirror/language";
8
+ import { tags as l } from "@lezer/highlight";
9
9
  /* empty css */
10
10
  import { IconChevronDown as A } from "../../icons/IconChevronDown.js";
11
11
  import { IconChevronRight as L } from "../../icons/IconChevronRight.js";
12
12
  import { Button as j } from "../Button/Button.js";
13
- const P = 220, T = I.define([
13
+ const P = 220, T = C.define([
14
14
  { tag: l.propertyName, color: "var(--json-viewer-color-key)" },
15
15
  { tag: l.string, color: "var(--json-viewer-color-string)", fontWeight: 600 },
16
16
  { tag: [l.number, l.bool, l.null], color: "var(--json-viewer-color-scalar)" },
@@ -38,7 +38,7 @@ function J(t) {
38
38
  return typeof t == "number" ? `${t}px` : t;
39
39
  }
40
40
  function p(t, s) {
41
- s.length > 0 && t.dispatch({ effects: s.map((n) => C.of(n)) });
41
+ s.length > 0 && t.dispatch({ effects: s.map((n) => F.of(n)) });
42
42
  }
43
43
  function O(t) {
44
44
  const s = [], n = t.length;
@@ -86,7 +86,7 @@ function ee({ value: t, expandAllLabel: s, actions: n, className: r, height: c }
86
86
  }, [f, m]);
87
87
  const S = () => {
88
88
  const e = i.current;
89
- e && (o ? p(e, m) : F(e), g(!o));
89
+ e && (o ? p(e, m) : I(e), g(!o));
90
90
  };
91
91
  return /* @__PURE__ */ E("div", { className: R("json-viewer", r), children: [
92
92
  /* @__PURE__ */ u(
@@ -0,0 +1 @@
1
+ export * from "./ui/primitives/JsonViewer/JsonViewer";
@@ -16,7 +16,6 @@ export * from "./Icon/Icon";
16
16
  export * from "./IconButton/IconButton";
17
17
  export * from "./Image/Image";
18
18
  export * from "./Input/Input";
19
- export * from "./JsonViewer/JsonViewer";
20
19
  export * from "./Link/Link";
21
20
  export * from "./ListBox/ListBox";
22
21
  export * from "./Logo/Logo";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apipass/design-system",
3
- "version": "3.3.0",
3
+ "version": "4.0.0",
4
4
  "type": "module",
5
5
  "description": "APIPass React Design System",
6
6
  "sideEffects": [
@@ -26,6 +26,11 @@
26
26
  "import": "./dist/lib/charts.index.js",
27
27
  "require": "./dist/lib/charts.index.cjs"
28
28
  },
29
+ "./json-viewer": {
30
+ "types": "./dist/types/json-viewer.index.d.ts",
31
+ "import": "./dist/lib/json-viewer.index.js",
32
+ "require": "./dist/lib/json-viewer.index.cjs"
33
+ },
29
34
  "./style.css": "./dist/lib/style.css",
30
35
  "./embedded-styles": {
31
36
  "types": "./dist/lib/embedded-styles.d.ts",
@@ -38,6 +43,9 @@
38
43
  "charts": [
39
44
  "./dist/types/charts.index.d.ts"
40
45
  ],
46
+ "json-viewer": [
47
+ "./dist/types/json-viewer.index.d.ts"
48
+ ],
41
49
  "icons": [
42
50
  "./dist/types/ui/icons/index.d.ts"
43
51
  ]
@@ -72,6 +80,11 @@
72
80
  ]
73
81
  },
74
82
  "peerDependencies": {
83
+ "@codemirror/lang-json": ">=6.0.0",
84
+ "@codemirror/language": ">=6.0.0",
85
+ "@codemirror/state": ">=6.0.0",
86
+ "@codemirror/view": ">=6.0.0",
87
+ "@lezer/highlight": ">=1.0.0",
75
88
  "@monaco-editor/react": ">=4.0.0",
76
89
  "echarts": ">=5.5.0",
77
90
  "react": ">=18.0.0",
@@ -79,6 +92,21 @@
79
92
  "react-dom": ">=18.0.0"
80
93
  },
81
94
  "peerDependenciesMeta": {
95
+ "@codemirror/lang-json": {
96
+ "optional": true
97
+ },
98
+ "@codemirror/language": {
99
+ "optional": true
100
+ },
101
+ "@codemirror/state": {
102
+ "optional": true
103
+ },
104
+ "@codemirror/view": {
105
+ "optional": true
106
+ },
107
+ "@lezer/highlight": {
108
+ "optional": true
109
+ },
82
110
  "@monaco-editor/react": {
83
111
  "optional": true
84
112
  },
@@ -87,19 +115,18 @@
87
115
  }
88
116
  },
89
117
  "dependencies": {
90
- "@codemirror/lang-json": "^6.0.2",
91
- "@codemirror/language": "^6.12.4",
92
- "@codemirror/state": "^6.7.1",
93
- "@codemirror/view": "^6.43.9",
94
118
  "@internationalized/date": "^3.10.0",
95
- "@lezer/highlight": "^1.2.3",
96
119
  "clsx": "^2.1.1",
97
- "codemirror": "^6.0.2",
98
120
  "react-grid-layout": "^1.5.3",
99
121
  "react-toastify": "^11.1.0"
100
122
  },
101
123
  "devDependencies": {
124
+ "@codemirror/lang-json": "^6.0.2",
125
+ "@codemirror/language": "^6.12.4",
126
+ "@codemirror/state": "^6.7.1",
127
+ "@codemirror/view": "^6.43.9",
102
128
  "@figma/code-connect": "^1.3.10",
129
+ "@lezer/highlight": "^1.2.3",
103
130
  "@monaco-editor/react": "^4.7.0",
104
131
  "@react-types/shared": "^3.23.0",
105
132
  "@storybook/addon-docs": "^10.3.4",
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../../@lezer/json/dist/index.cjs"),e=require("../../language/dist/index.cjs"),n=e.LRLanguage.define({name:"json",parser:t.parser.configure({props:[e.indentNodeProp.add({Object:e.continuedIndent({except:/^\s*\}/}),Array:e.continuedIndent({except:/^\s*\]/})}),e.foldNodeProp.add({"Object Array":e.foldInside})]}),languageData:{closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/}});function o(){return new e.LanguageSupport(n)}exports.json=o;exports.jsonLanguage=n;
2
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../node_modules/@codemirror/lang-json/dist/index.js"],"sourcesContent":["import { parser } from '@lezer/json';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nCalls\n[`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)\non the document and, if that throws an error, reports it as a\nsingle diagnostic.\n*/\nconst jsonParseLinter = () => (view) => {\n try {\n JSON.parse(view.state.doc.toString());\n }\n catch (e) {\n if (!(e instanceof SyntaxError))\n throw e;\n const pos = getErrorPosition(e, view.state.doc);\n return [{\n from: pos,\n message: e.message,\n severity: 'error',\n to: pos\n }];\n }\n return [];\n};\nfunction getErrorPosition(error, doc) {\n let m;\n if (m = error.message.match(/at position (\\d+)/))\n return Math.min(+m[1], doc.length);\n if (m = error.message.match(/at line (\\d+) column (\\d+)/))\n return Math.min(doc.line(+m[1]).from + (+m[2]) - 1, doc.length);\n return 0;\n}\n\n/**\nA language provider that provides JSON parsing.\n*/\nconst jsonLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"json\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Object: /*@__PURE__*/continuedIndent({ except: /^\\s*\\}/ }),\n Array: /*@__PURE__*/continuedIndent({ except: /^\\s*\\]/ })\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Object Array\": foldInside\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n indentOnInput: /^\\s*[\\}\\]]$/\n }\n});\n/**\nJSON language support.\n*/\nfunction json() {\n return new LanguageSupport(jsonLanguage);\n}\n\nexport { json, jsonLanguage, jsonParseLinter };\n"],"names":["jsonLanguage","LRLanguage","parser","indentNodeProp","continuedIndent","foldNodeProp","foldInside","json","LanguageSupport"],"mappings":"kLAsCMA,EAA4BC,EAAAA,WAAW,OAAO,CAChD,KAAM,OACN,OAAqBC,EAAAA,OAAO,UAAU,CAClC,MAAO,CACUC,EAAAA,eAAe,IAAI,CAC5B,OAAqBC,EAAAA,gBAAgB,CAAE,OAAQ,QAAQ,CAAE,EACzD,MAAoBA,EAAAA,gBAAgB,CAAE,OAAQ,QAAQ,CAAE,CACxE,CAAa,EACYC,EAAAA,aAAa,IAAI,CAC1B,eAAgBC,EAAAA,UAChC,CAAa,CACb,CACA,CAAK,EACD,aAAc,CACV,cAAe,CAAE,SAAU,CAAC,IAAK,IAAK,GAAG,CAAC,EAC1C,cAAe,aACvB,CACA,CAAC,EAID,SAASC,GAAO,CACZ,OAAO,IAAIC,EAAAA,gBAAgBR,CAAY,CAC3C","x_google_ignoreList":[0]}
@@ -1,28 +0,0 @@
1
- import { parser as n } from "../../../@lezer/json/dist/index.js";
2
- import { LanguageSupport as r, LRLanguage as o, indentNodeProp as a, foldNodeProp as t, continuedIndent as e, foldInside as d } from "../../language/dist/index.js";
3
- const p = /* @__PURE__ */ o.define({
4
- name: "json",
5
- parser: /* @__PURE__ */ n.configure({
6
- props: [
7
- /* @__PURE__ */ a.add({
8
- Object: /* @__PURE__ */ e({ except: /^\s*\}/ }),
9
- Array: /* @__PURE__ */ e({ except: /^\s*\]/ })
10
- }),
11
- /* @__PURE__ */ t.add({
12
- "Object Array": d
13
- })
14
- ]
15
- }),
16
- languageData: {
17
- closeBrackets: { brackets: ["[", "{", '"'] },
18
- indentOnInput: /^\s*[\}\]]$/
19
- }
20
- });
21
- function u() {
22
- return new r(p);
23
- }
24
- export {
25
- u as json,
26
- p as jsonLanguage
27
- };
28
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../node_modules/@codemirror/lang-json/dist/index.js"],"sourcesContent":["import { parser } from '@lezer/json';\nimport { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\n\n/**\nCalls\n[`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)\non the document and, if that throws an error, reports it as a\nsingle diagnostic.\n*/\nconst jsonParseLinter = () => (view) => {\n try {\n JSON.parse(view.state.doc.toString());\n }\n catch (e) {\n if (!(e instanceof SyntaxError))\n throw e;\n const pos = getErrorPosition(e, view.state.doc);\n return [{\n from: pos,\n message: e.message,\n severity: 'error',\n to: pos\n }];\n }\n return [];\n};\nfunction getErrorPosition(error, doc) {\n let m;\n if (m = error.message.match(/at position (\\d+)/))\n return Math.min(+m[1], doc.length);\n if (m = error.message.match(/at line (\\d+) column (\\d+)/))\n return Math.min(doc.line(+m[1]).from + (+m[2]) - 1, doc.length);\n return 0;\n}\n\n/**\nA language provider that provides JSON parsing.\n*/\nconst jsonLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"json\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Object: /*@__PURE__*/continuedIndent({ except: /^\\s*\\}/ }),\n Array: /*@__PURE__*/continuedIndent({ except: /^\\s*\\]/ })\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Object Array\": foldInside\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"[\", \"{\", '\"'] },\n indentOnInput: /^\\s*[\\}\\]]$/\n }\n});\n/**\nJSON language support.\n*/\nfunction json() {\n return new LanguageSupport(jsonLanguage);\n}\n\nexport { json, jsonLanguage, jsonParseLinter };\n"],"names":["jsonLanguage","LRLanguage","parser","indentNodeProp","continuedIndent","foldNodeProp","foldInside","json","LanguageSupport"],"mappings":";;AAsCK,MAACA,IAA4B,gBAAAC,EAAW,OAAO;AAAA,EAChD,MAAM;AAAA,EACN,QAAqB,gBAAAC,EAAO,UAAU;AAAA,IAClC,OAAO;AAAA,MACU,gBAAAC,EAAe,IAAI;AAAA,QAC5B,QAAqB,gBAAAC,EAAgB,EAAE,QAAQ,SAAQ,CAAE;AAAA,QACzD,OAAoB,gBAAAA,EAAgB,EAAE,QAAQ,SAAQ,CAAE;AAAA,MACxE,CAAa;AAAA,MACY,gBAAAC,EAAa,IAAI;AAAA,QAC1B,gBAAgBC;AAAA,MAChC,CAAa;AAAA,IACb;AAAA,EACA,CAAK;AAAA,EACD,cAAc;AAAA,IACV,eAAe,EAAE,UAAU,CAAC,KAAK,KAAK,GAAG,EAAC;AAAA,IAC1C,eAAe;AAAA,EACvB;AACA,CAAC;AAID,SAASC,IAAO;AACZ,SAAO,IAAIC,EAAgBR,CAAY;AAC3C;","x_google_ignoreList":[0]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../../../@lezer/common/dist/index.cjs"),f=require("../../state/dist/index.cjs"),h=require("../../view/dist/index.cjs"),P=require("../../../@lezer/highlight/dist/index.cjs"),H=require("../../../style-mod/src/style-mod.cjs");var E;const w=new u.NodeProp;function z(r){return f.Facet.define({combine:r?e=>e.concat(r):void 0})}const K=new u.NodeProp;class p{constructor(e,t,n=[],i=""){this.data=e,this.name=i,f.EditorState.prototype.hasOwnProperty("tree")||Object.defineProperty(f.EditorState.prototype,"tree",{get(){return g(this)}}),this.parser=t,this.extension=[m.of(this),f.EditorState.languageData.of((s,o,a)=>{let l=V(s,o,a),c=l.type.prop(w);if(!c)return[];let d=s.facet(c),k=l.type.prop(K);if(k){let C=l.resolve(o-l.from,a);for(let N of k)if(N.test(C,s)){let R=s.facet(N.facet);return N.type=="replace"?R:R.concat(d)}}return d})].concat(n)}isActiveAt(e,t,n=-1){return V(e,t,n).type.prop(w)==this.data}findRegions(e){let t=e.facet(m);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let n=[],i=(s,o)=>{if(s.prop(w)==this.data){n.push({from:o,to:o+s.length});return}let a=s.prop(u.NodeProp.mounted);if(a){if(a.tree.prop(w)==this.data){if(a.overlay)for(let l of a.overlay)n.push({from:l.from+o,to:l.to+o});else n.push({from:o,to:o+s.length});return}else if(a.overlay){let l=n.length;if(i(a.tree,a.overlay[0].from+o),n.length>l)return}}for(let l=0;l<s.children.length;l++){let c=s.children[l];c instanceof u.Tree&&i(c,s.positions[l]+o)}};return i(g(e),0),n}get allowsNesting(){return!0}}p.setState=f.StateEffect.define();function V(r,e,t){let n=r.facet(m),i=g(r).topNode;if(!n||n.allowsNesting)for(let s=i;s;s=s.enter(e,t,u.IterMode.ExcludeBuffers|u.IterMode.EnterBracketed))s.type.isTop&&(i=s);return i}class S extends p{constructor(e,t,n){super(e,t,[],n),this.parser=t}static define(e){let t=z(e.languageData);return new S(t,e.parser.configure({props:[w.add(n=>n.isTop?t:void 0)]}),e.name)}configure(e,t){return new S(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function g(r){let e=r.field(p.state,!1);return e?e.tree:u.Tree.empty}class Q{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let n=this.cursorPos-this.string.length;return e<n||t>=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}}let v=null;class b{constructor(e,t,n=[],i,s,o,a,l){this.parser=e,this.state=t,this.fragments=n,this.tree=i,this.treeLen=s,this.viewport=o,this.skipped=a,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,n){return new b(e,t,[],u.Tree.empty,0,n,[],null)}startParse(){return this.parser.startParse(new Q(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=u.Tree.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var n;if(typeof e=="number"){let i=Date.now()+e;e=()=>Date.now()>i}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t<this.state.doc.length&&this.parse.stopAt(t);;){let i=this.parse.advance();if(i)if(this.fragments=this.withoutTempSkipped(u.TreeFragment.addTree(i,this.fragments,this.parse.stoppedAt!=null)),this.treeLen=(n=this.parse.stoppedAt)!==null&&n!==void 0?n:this.state.doc.length,this.tree=i,this.parse=null,this.treeLen<(t??this.state.doc.length))this.parse=this.startParse();else return!0;if(e())return!1}})}takeTree(){let e,t;this.parse&&(e=this.parse.parsedPos)>=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(u.TreeFragment.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=v;v=this;try{return e()}finally{v=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=q(e,t.from,t.to);return e}changes(e,t){let{fragments:n,tree:i,treeLen:s,viewport:o,skipped:a}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((c,d,k,C)=>l.push({fromA:c,toA:d,fromB:k,toB:C})),n=u.TreeFragment.applyChanges(n,l),i=u.Tree.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){a=[];for(let c of this.skipped){let d=e.mapPos(c.from,1),k=e.mapPos(c.to,-1);d<k&&a.push({from:d,to:k})}}}return new b(this.parser,t,n,i,s,o,a,this.scheduleOn)}updateViewport(e){if(this.viewport.from==e.from&&this.viewport.to==e.to)return!1;this.viewport=e;let t=this.skipped.length;for(let n=0;n<this.skipped.length;n++){let{from:i,to:s}=this.skipped[n];i<e.to&&s>e.from&&(this.fragments=q(this.fragments,i,s),this.skipped.splice(n--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends u.Parser{createParse(t,n,i){let s=i[0].from,o=i[i.length-1].to;return{parsedPos:s,advance(){let l=v;if(l){for(let c of i)l.tempSkipped.push(c);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=o,new u.Tree(u.NodeType.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return v}}function q(r,e,t){return u.TreeFragment.applyChanges(r,[{fromA:e,toA:t,fromB:e,toB:t}])}class y{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),n=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,n)||t.takeTree(),new y(t)}static init(e){let t=Math.min(3e3,e.doc.length),n=b.create(e.facet(m).parser,e,{from:0,to:t});return n.work(20,t)||n.takeTree(),new y(n)}}p.state=f.StateField.define({create:y.init,update(r,e){for(let t of e.effects)if(t.is(p.setState))return t.value;return e.startState.facet(m)!=e.state.facet(m)?y.init(e.state):r.apply(e)}});let X=r=>{let e=setTimeout(()=>r(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(X=r=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(r,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const O=typeof navigator<"u"&&(!((E=navigator.scheduling)===null||E===void 0)&&E.isInputPending)?()=>navigator.scheduling.isInputPending():null,ne=h.ViewPlugin.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(p.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(p.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=X(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnd<t&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=t+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:n,viewport:{to:i}}=this.view,s=n.field(p.state);if(s.tree==s.context.tree&&s.context.isDone(i+1e5))return;let o=Date.now()+Math.min(this.chunkBudget,100,e&&!O?Math.max(25,e.timeRemaining()-5):1e9),a=s.context.treeLen<i&&n.doc.length>i+1e3,l=s.context.work(()=>O&&O()||Date.now()>o,i+(a?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:p.setState.of(new y(s.context))})),this.chunkBudget>0&&!(l&&!a)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>h.logException(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),m=f.Facet.define({combine(r){return r.length?r[0]:null},enables:r=>[p.state,ne,h.EditorView.contentAttributes.compute([r],e=>{let t=e.facet(r);return t&&t.name?{"data-language":t.name}:{}})]});class ie{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const se=new u.NodeProp;function oe({except:r,units:e=1}={}){return t=>{let n=r&&r.test(t.textAfter);return t.baseIndent+(n?0:e*t.unit)}}const Y=f.Facet.define(),Z=new u.NodeProp;function ae(r){let e=r.firstChild,t=r.lastChild;return e&&e.to<t.from?{from:e.to,to:t.type.isError?r.to:t.from}:null}function le(r,e,t){let n=g(r);if(n.length<t)return null;let i=n.resolveStack(t,1),s=null;for(let o=i;o;o=o.next){let a=o.node;if(a.to<=t||a.from>t)continue;if(s&&a.from<e)break;let l=a.type.prop(Z);if(l&&(a.to<n.length-50||n.length==r.doc.length||!ce(a))){let c=l(a,r);c&&c.from<=t&&c.from>=e&&c.to>t&&(s=c)}}return s}function ce(r){let e=r.lastChild;return e&&e.to==r.to&&e.type.isError}function I(r,e,t){for(let n of r.facet(Y)){let i=n(r,e,t);if(i)return i}return le(r,e,t)}function _(r,e){let t=e.mapPos(r.from,1),n=e.mapPos(r.to,-1);return t>=n?void 0:{from:t,to:n}}const W=f.StateEffect.define({map:_}),x=f.StateEffect.define({map:_}),T=f.StateField.define({create(){return h.Decoration.none},update(r,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((n,i)=>r=j(r,n,i)),r=r.map(e.changes);let t=[];for(let n of e.effects)n.is(W)&&!he(r,n.value.from,n.value.to)?t.push(n.value):n.is(x)&&(r=r.update({filter:(i,s)=>n.value.from!=i||n.value.to!=s,filterFrom:n.value.from,filterTo:n.value.to}));if(t.length){let{preparePlaceholder:n}=e.state.facet(ee),i=t.map(s=>(n?h.Decoration.replace({widget:new de(n(e.state,s))}):$).range(s.from,s.to));r=r.update({add:i})}return e.selection&&(r=j(r,e.selection.main.head)),r},provide:r=>h.EditorView.decorations.from(r),toJSON(r,e){let t=[];return r.between(0,e.doc.length,(n,i)=>{t.push(n,i)}),t},fromJSON(r){if(!Array.isArray(r)||r.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t<r.length;){let n=r[t++],i=r[t++];if(typeof n!="number"||typeof i!="number")throw new RangeError("Invalid JSON for fold state");e.push($.range(n,i))}return h.Decoration.set(e,!0)}});function j(r,e,t=e){let n=!1;return r.between(e,t,(i,s)=>{i<t&&s>e&&(n=!0)}),n?r.update({filterFrom:e,filterTo:t,filter:(i,s)=>i>=t||s<=e}):r}function L(r,e,t){var n;let i=null;return(n=r.field(T,!1))===null||n===void 0||n.between(e,t,(s,o)=>{(!i||i.from>s)&&(i={from:s,to:o})}),i}function he(r,e,t){let n=!1;return r.between(e,e,(i,s)=>{i==e&&s==t&&(n=!0)}),n}const ue=r=>{let e=r.state.field(T,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,r.state.doc.length,(n,i)=>{t.push(x.of({from:n,to:i}))}),r.dispatch({effects:t}),!0},fe={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},ee=f.Facet.define({combine(r){return f.combineConfig(r,fe)}});function te(r){return[T,me]}function re(r,e){let{state:t}=r,n=t.facet(ee),i=o=>{let a=r.lineBlockAt(r.posAtDOM(o.target)),l=L(r.state,a.from,a.to);l&&r.dispatch({effects:x.of(l)}),o.preventDefault()};if(n.placeholderDOM)return n.placeholderDOM(r,i,e);let s=document.createElement("span");return s.textContent=n.placeholderText,s.setAttribute("aria-label",t.phrase("folded code")),s.title=t.phrase("unfold"),s.className="cm-foldPlaceholder",s.onclick=i,s}const $=h.Decoration.replace({widget:new class extends h.WidgetType{toDOM(r){return re(r,null)}}});class de extends h.WidgetType{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return re(e,this.value)}}const pe={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class F extends h.GutterMarker{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function ge(r={}){let e={...pe,...r},t=new F(e,!0),n=new F(e,!1),i=h.ViewPlugin.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(m)!=o.state.facet(m)||o.startState.field(T,!1)!=o.state.field(T,!1)||g(o.startState)!=g(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let a=new f.RangeSetBuilder;for(let l of o.viewportLineBlocks){let c=L(o.state,l.from,l.to)?n:I(o.state,l.from,l.to)?t:null;c&&a.add(l.from,l.from,c)}return a.finish()}}),{domEventHandlers:s}=e;return[i,h.gutter({class:"cm-foldGutter",markers(o){var a;return((a=o.plugin(i))===null||a===void 0?void 0:a.markers)||f.RangeSet.empty},initialSpacer(){return new F(e,!1)},domEventHandlers:{...s,click:(o,a,l)=>{if(s.click&&s.click(o,a,l))return!0;let c=L(o.state,a.from,a.to);if(c)return o.dispatch({effects:x.of(c)}),!0;let d=I(o.state,a.from,a.to);return d?(o.dispatch({effects:W.of(d)}),!0):!1}}}),te()]}const me=h.EditorView.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class D{constructor(e,t){this.specs=e;let n;function i(a){let l=H.StyleModule.newName();return(n||(n=Object.create(null)))["."+l]=a,l}const s=typeof t.all=="string"?t.all:t.all?i(t.all):void 0,o=t.scope;this.scope=o instanceof p?a=>a.prop(w)==o.data:o?a=>a==o:void 0,this.style=P.tagHighlighter(e.map(a=>({tag:a.tag,class:a.class||i(Object.assign({},a,{tag:null}))})),{all:s}).style,this.module=n?new H.StyleModule(n):null,this.themeType=t.themeType}static define(e,t){return new D(e,t||{})}}const B=f.Facet.define(),ke=f.Facet.define({combine(r){return r.length?[r[0]]:null}});function A(r){let e=r.facet(B);return e.length?e:r.facet(ke)}function we(r,e){let t=[Te],n;return r instanceof D&&(r.module&&t.push(h.EditorView.styleModule.of(r.module)),n=r.themeType),n?t.push(B.computeN([h.EditorView.darkTheme],i=>i.facet(h.EditorView.darkTheme)==(n=="dark")?[r]:[])):t.push(B.of(r)),t}class ye{constructor(e){this.markCache=Object.create(null),this.tree=g(e.state),this.decorations=this.buildDeco(e,A(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=g(e.state),n=A(e.state),i=n!=A(e.startState),{viewport:s}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length<s.to&&!i&&t.type==this.tree.type&&o>=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||i)&&(this.tree=t,this.decorations=this.buildDeco(e.view,n),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return h.Decoration.none;let n=new f.RangeSetBuilder;for(let{from:i,to:s}of e.visibleRanges)P.highlightTree(this.tree,t,(o,a,l)=>{n.add(o,a,this.markCache[l]||(this.markCache[l]=h.Decoration.mark({class:l})))},i,s);return n.finish()}}const Te=f.Prec.high(h.ViewPlugin.fromClass(ye,{decorations:r=>r.decorations})),ve=Object.create(null),G=[u.NodeType.none],U=[],J=Object.create(null),be=Object.create(null);for(let[r,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])be[r]=xe(ve,e);function M(r,e){U.indexOf(r)>-1||(U.push(r),console.warn(e))}function xe(r,e){let t=[];for(let a of e.split(" ")){let l=[];for(let c of a.split(".")){let d=r[c]||P.tags[c];d?typeof d=="function"?l.length?l=l.map(d):M(c,`Modifier ${c} used at start of tag`):l.length?M(c,`Tag ${c} used as modifier`):l=Array.isArray(d)?d:[d]:M(c,`Unknown highlighting tag ${c}`)}for(let c of l)t.push(c)}if(!t.length)return 0;let n=e.replace(/ /g,"_"),i=n+" "+t.map(a=>a.id),s=J[i];if(s)return s.id;let o=J[i]=u.NodeType.define({id:G.length,name:n,props:[P.styleTags({[n]:t})]});return G.push(o),o.id}h.Direction.RTL,h.Direction.LTR;exports.DocInput=Q;exports.HighlightStyle=D;exports.LRLanguage=S;exports.Language=p;exports.LanguageSupport=ie;exports.ParseContext=b;exports.codeFolding=te;exports.continuedIndent=oe;exports.defineLanguageFacet=z;exports.foldEffect=W;exports.foldGutter=ge;exports.foldInside=ae;exports.foldNodeProp=Z;exports.foldService=Y;exports.foldState=T;exports.foldable=I;exports.indentNodeProp=se;exports.language=m;exports.languageDataProp=w;exports.sublanguageProp=K;exports.syntaxHighlighting=we;exports.syntaxTree=g;exports.unfoldAll=ue;exports.unfoldEffect=x;
2
- //# sourceMappingURL=index.cjs.map