@sanity/code-input
7.3.87.3.9
dist/CodeMirrorProxy-VeTh1vQ-.js.map~
dist/CodeMirrorProxy-VeTh1vQ-.js.mapModified+1−1
Index: package/dist/CodeMirrorProxy-VeTh1vQ-.js.map
===================================================================
--- package/dist/CodeMirrorProxy-VeTh1vQ-.js.map
+++ package/dist/CodeMirrorProxy-VeTh1vQ-.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"CodeMirrorProxy-VeTh1vQ-.js","names":["getBackwardsCompatibleTone(themeCtx)","EditorView.baseTheme({\n '&.cm-editor': {\n height: '100%',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n\n // Matching brackets\n '&.cm-editor.cm-focused .cm-matchingBracket': {\n backgroundColor: 'transparent',\n },\n '&.cm-editor.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'transparent',\n },\n '&dark.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&dark.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n\n // Size and padding of gutter\n '& .cm-lineNumbers .cm-gutterElement': {\n minWidth: `32px !important`,\n padding: `0 8px !important`,\n },\n '& .cm-gutter.cm-foldGutter': {\n width: `0px !important`,\n },\n\n // Color of gutter\n '&dark .cm-gutters': {\n color: `${rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(dark.color.base.border, 0.5)}`,\n },\n '&light .cm-gutters': {\n color: `${rgba(light.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(light.color.base.border, 0.5)}`,\n },\n })","themeCtx.theme.color.dark[fallbackTone]","light","useMemo(() => {\n const fallbackTone = getBackwardsCompatibleTone(themeCtx)\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\n // oxlint-disable-next-line typescript/no-deprecated\n const light = {color: themeCtx.theme.color.light[fallbackTone]}\n\n return EditorView.baseTheme({\n '&.cm-editor': {\n height: '100%',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n\n // Matching brackets\n '&.cm-editor.cm-focused .cm-matchingBracket': {\n backgroundColor: 'transparent',\n },\n '&.cm-editor.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'transparent',\n },\n '&dark.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&dark.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n\n // Size and padding of gutter\n '& .cm-lineNumbers .cm-gutterElement': {\n minWidth: `32px !important`,\n padding: `0 8px !important`,\n },\n '& .cm-gutter.cm-foldGutter': {\n width: `0px !important`,\n },\n\n // Color of gutter\n '&dark .cm-gutters': {\n color: `${rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(dark.color.base.border, 0.5)}`,\n },\n '&light .cm-gutters': {\n color: `${rgba(light.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(light.color.base.border, 0.5)}`,\n },\n })\n }, [themeCtx])","createTheme({\n theme: dark ? 'dark' : 'light',\n settings: {\n background: card.enabled.bg,\n foreground: card.enabled.code.fg,\n lineHighlight: card.enabled.bg,\n fontFamily: codeFont.family,\n caret: base.focusRing,\n selection: rgba(base.focusRing, 0.2),\n selectionMatch: rgba(base.focusRing, 0.4),\n gutterBackground: card.disabled.bg,\n gutterForeground: card.disabled.code.fg,\n gutterActiveForeground: card.enabled.fg,\n },\n styles: [\n {\n tag: [t.heading, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: card.enabled.fg,\n },\n {tag: t.angleBracket, color: card.enabled.code.fg},\n {tag: t.atom, color: syntax.keyword},\n {tag: t.attributeName, color: syntax.attrName},\n {tag: t.bool, color: syntax.boolean},\n {tag: t.bracket, color: card.enabled.code.fg},\n {tag: t.className, color: syntax.className},\n {tag: t.comment, color: syntax.comment},\n {tag: t.definition(t.typeName), color: syntax.function},\n {\n tag: [\n t.definition(t.variableName),\n t.function(t.variableName),\n t.className,\n t.attributeName,\n ],\n color: syntax.function,\n },\n {tag: [t.function(t.propertyName), t.propertyName], color: syntax.function},\n {tag: t.keyword, color: syntax.keyword},\n {tag: t.null, color: syntax.number},\n {tag: t.number, color: syntax.number},\n {tag: t.meta, color: card.enabled.code.fg},\n {tag: t.operator, color: syntax.operator},\n {tag: t.propertyName, color: syntax.property},\n {tag: [t.string, t.special(t.brace)], color: syntax.string},\n {tag: t.tagName, color: syntax.className},\n {tag: t.typeName, color: syntax.keyword},\n ],\n })","focusRing","bg","fg","family","attrName","boolean","className","comment","function","keyword","number","operator","property","string","dark ? 'dark' : 'light'","useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n // oxlint-disable-next-line typescript/no-deprecated\n const {base, card, dark, syntax} = theme.sanity.color\n\n return createTheme({\n theme: dark ? 'dark' : 'light',\n settings: {\n background: card.enabled.bg,\n foreground: card.enabled.code.fg,\n lineHighlight: card.enabled.bg,\n fontFamily: codeFont.family,\n caret: base.focusRing,\n selection: rgba(base.focusRing, 0.2),\n selectionMatch: rgba(base.focusRing, 0.4),\n gutterBackground: card.disabled.bg,\n gutterForeground: card.disabled.code.fg,\n gutterActiveForeground: card.enabled.fg,\n },\n styles: [\n {\n tag: [t.heading, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: card.enabled.fg,\n },\n {tag: t.angleBracket, color: card.enabled.code.fg},\n {tag: t.atom, color: syntax.keyword},\n {tag: t.attributeName, color: syntax.attrName},\n {tag: t.bool, color: syntax.boolean},\n {tag: t.bracket, color: card.enabled.code.fg},\n {tag: t.className, color: syntax.className},\n {tag: t.comment, color: syntax.comment},\n {tag: t.definition(t.typeName), color: syntax.function},\n {\n tag: [\n t.definition(t.variableName),\n t.function(t.variableName),\n t.className,\n t.attributeName,\n ],\n color: syntax.function,\n },\n {tag: [t.function(t.propertyName), t.propertyName], color: syntax.function},\n {tag: t.keyword, color: syntax.keyword},\n {tag: t.null, color: syntax.number},\n {tag: t.number, color: syntax.number},\n {tag: t.meta, color: card.enabled.code.fg},\n {tag: t.operator, color: syntax.operator},\n {tag: t.propertyName, color: syntax.property},\n {tag: [t.string, t.special(t.brace)], color: syntax.string},\n {tag: t.tagName, color: syntax.className},\n {tag: t.typeName, color: syntax.keyword},\n ],\n })\n }, [theme])","EditorView.baseTheme({\n '&': {\n fontSize: rem(fontSize),\n },\n\n '& .cm-scroller': {\n lineHeight: `${lineHeight / fontSize} !important`,\n },\n })","useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n const {fontSize, lineHeight} = codeFont.sizes[fontSizeProp] || codeFont.sizes[2]!\n\n return EditorView.baseTheme({\n '&': {\n fontSize: rem(fontSize),\n },\n\n '& .cm-scroller': {\n lineHeight: `${lineHeight / fontSize} !important`,\n },\n })\n }, [fontSizeProp, theme])","{fontSize: 1}","highlightLine({\n onHighlightChange,\n readOnly,\n theme: themeCtx,\n })","useMemo(\n () =>\n highlightLine({\n onHighlightChange,\n readOnly,\n theme: themeCtx,\n }),\n [onHighlightChange, readOnly, themeCtx],\n )","useMemo(() => {\n const baseExtensions = [\n themeExtension,\n fontSizeExtension,\n highlightLineExtension,\n EditorView.lineWrapping,\n ]\n if (languageExtension) {\n return [...baseExtensions, languageExtension]\n }\n return baseExtensions\n }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension])","[\n themeExtension,\n fontSizeExtension,\n highlightLineExtension,\n EditorView.lineWrapping,\n ]","[...baseExtensions, languageExtension]","() => {\n if (editorView) {\n setHighlightedLines(editorView, highlightLines ?? [])\n }\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }","[editorView, highlightLines, value]","() => {\n return {\n json: {\n doc: value ?? '',\n selection: {\n main: 0,\n ranges: [{anchor: 0, head: 0}],\n },\n highlight: highlightLines ?? [],\n },\n fields: highlightState,\n }\n }","(view: EditorView) => {\n setEditorView(view)\n }","useCallback((view: EditorView) => {\n setEditorView(view)\n }, [])","basicSetupProp ?? {\n highlightActiveLine: false,\n }","useMemo(\n () =>\n basicSetupProp ?? {\n highlightActiveLine: false,\n },\n [basicSetupProp],\n )","<CodeMirror\n {...codeMirrorProps}\n value={value}\n ref={ref}\n extensions={extensions}\n theme={codeMirrorTheme}\n onCreateEditor={handleCreateEditor}\n initialState={initialState}\n basicSetup={basicSetup}\n readOnly={readOnly}\n />","() => {\n const customModes = codeConfig?.codeModes ?? []\n const modes = [...customModes, ...defaultCodeModes]\n\n const codeMode = modes.find((m) => m.name === mode)\n if (!codeMode?.loader) {\n console.warn(\n `Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`,\n )\n }\n let active = true\n Promise.resolve(codeMode?.loader())\n .then((extension) => {\n if (active) {\n setLanguageExtension(extension)\n }\n return undefined\n })\n .catch((e) => {\n console.error(`Failed to load language mode ${mode}`, e)\n if (active) {\n setLanguageExtension(undefined)\n }\n })\n return () => {\n active = false\n }\n }","codeModes","[mode, codeConfig]"],"sources":["../src/codemirror/defaultCodeModes.ts","../src/codemirror/extensions/backwardsCompatibleTone.ts","../src/codemirror/extensions/highlightLineExtension.ts","../src/codemirror/extensions/theme.ts","../src/codemirror/extensions/useCodeMirrorTheme.ts","../src/codemirror/extensions/useFontSize.ts","../src/codemirror/CodeMirrorProxy.tsx"],"sourcesContent":["import {StreamLanguage} from '@codemirror/language'\nimport type {Extension} from '@codemirror/state'\n\nexport interface CodeMode {\n name: string\n loader: ModeLoader\n}\nexport type ModeLoader = () => Promise<Extension | undefined> | Extension | undefined\n\nexport const defaultCodeModes: CodeMode[] = [\n {\n name: 'groq',\n loader: () => import('@sanity/lezer-groq').then(({groq}) => groq()),\n },\n {\n name: 'javascript',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) => javascript({jsx: false})),\n },\n {\n name: 'jsx',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) => javascript({jsx: true})),\n },\n {\n name: 'typescript',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) =>\n javascript({jsx: false, typescript: true}),\n ),\n },\n {\n name: 'tsx',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) =>\n javascript({jsx: true, typescript: true}),\n ),\n },\n {name: 'php', loader: () => import('@codemirror/lang-php').then(({php}) => php())},\n {name: 'sql', loader: () => import('@codemirror/lang-sql').then(({sql}) => sql())},\n {\n name: 'mysql',\n loader: () => import('@codemirror/lang-sql').then(({sql, MySQL}) => sql({dialect: MySQL})),\n },\n {name: 'json', loader: () => import('@codemirror/lang-json').then(({json}) => json())},\n {\n name: 'markdown',\n loader: () => import('@codemirror/lang-markdown').then(({markdown}) => markdown()),\n },\n {name: 'java', loader: () => import('@codemirror/lang-java').then(({java}) => java())},\n {name: 'html', loader: () => import('@codemirror/lang-html').then(({html}) => html())},\n {\n name: 'csharp',\n loader: () =>\n import('@codemirror/legacy-modes/mode/clike').then(({csharp}) =>\n StreamLanguage.define(csharp),\n ),\n },\n {\n name: 'sh',\n loader: () =>\n import('@codemirror/legacy-modes/mode/shell').then(({shell}) => StreamLanguage.define(shell)),\n },\n {\n name: 'css',\n loader: () =>\n import('@codemirror/legacy-modes/mode/css').then(({css}) => StreamLanguage.define(css)),\n },\n {\n name: 'scss',\n loader: () =>\n import('@codemirror/legacy-modes/mode/css').then(({css}) => StreamLanguage.define(css)),\n },\n {\n name: 'sass',\n loader: () =>\n import('@codemirror/legacy-modes/mode/sass').then(({sass}) => StreamLanguage.define(sass)),\n },\n {\n name: 'ruby',\n loader: () =>\n import('@codemirror/legacy-modes/mode/ruby').then(({ruby}) => StreamLanguage.define(ruby)),\n },\n {\n name: 'python',\n loader: () =>\n import('@codemirror/legacy-modes/mode/python').then(({python}) =>\n StreamLanguage.define(python),\n ),\n },\n {\n name: 'xml',\n loader: () =>\n import('@codemirror/legacy-modes/mode/xml').then(({xml}) => StreamLanguage.define(xml)),\n },\n {\n name: 'yaml',\n loader: () =>\n import('@codemirror/legacy-modes/mode/yaml').then(({yaml}) => StreamLanguage.define(yaml)),\n },\n {\n name: 'golang',\n loader: () =>\n import('@codemirror/legacy-modes/mode/go').then(({go}) => StreamLanguage.define(go)),\n },\n {name: 'text', loader: () => undefined},\n {name: 'batch', loader: () => undefined},\n]\n","import type {ThemeContextValue} from '@sanity/ui'\n\n/**\n * `@sanity/[email protected]` introduced two new tones; \"neutral\" and \"suggest\",\n * which maps to \"default\" and \"primary\" respectively in the old theme.\n * This function returns the \"backwards compatible\" tone value.\n *\n * @returns The tone value that is backwards compatible with the old theme.\n * @internal\n */\nexport function getBackwardsCompatibleTone(\n themeCtx: ThemeContextValue,\n): Exclude<ThemeContextValue['tone'], 'neutral' | 'suggest'> {\n if (themeCtx.tone !== 'neutral' && themeCtx.tone !== 'suggest') {\n return themeCtx.tone\n }\n\n return themeCtx.tone === 'neutral' ? 'default' : 'primary'\n}\n","import {type Extension, StateEffect, StateField} from '@codemirror/state'\nimport {Decoration, type DecorationSet, EditorView, lineNumbers} from '@codemirror/view'\nimport type {ThemeContextValue} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\n\nimport {getBackwardsCompatibleTone} from './backwardsCompatibleTone'\n\nconst highlightLineClass = 'cm-highlight-line'\n\nconst addLineHighlight = StateEffect.define<number>()\nconst removeLineHighlight = StateEffect.define<number>()\n\nconst lineHighlightField = StateField.define({\n create() {\n return Decoration.none\n },\n update(lines, tr) {\n lines = lines.map(tr.changes)\n for (const e of tr.effects) {\n if (e.is(addLineHighlight)) {\n lines = lines.update({add: [lineHighlightMark.range(e.value)]})\n }\n if (e.is(removeLineHighlight)) {\n lines = lines.update({\n filter: (from) => {\n // removeLineHighlight value is lineStart for the highlight, so keep other effects\n return from !== e.value\n },\n })\n }\n }\n return lines\n },\n toJSON(value, state) {\n const highlightLines: number[] = []\n const iter = value.iter()\n while (iter.value) {\n const lineNumber = state.doc.lineAt(iter.from).number\n if (!highlightLines.includes(lineNumber)) {\n highlightLines.push(lineNumber)\n }\n iter.next()\n }\n return highlightLines\n },\n fromJSON(value: number[], state) {\n const lines = state.doc.lines\n const highlights = value\n .filter((line) => line <= lines) // one-indexed\n .map((line) => lineHighlightMark.range(state.doc.line(line).from))\n highlights.sort((a, b) => a.from - b.from)\n try {\n return Decoration.none.update({\n add: highlights,\n })\n } catch (e) {\n console.error(e)\n return Decoration.none\n }\n },\n provide: (f) => EditorView.decorations.from(f),\n})\n\nconst lineHighlightMark = Decoration.line({\n class: highlightLineClass,\n})\n\nexport const highlightState: {\n [prop: string]: StateField<DecorationSet>\n} = {\n highlight: lineHighlightField,\n}\n\nexport interface HighlightLineConfig {\n onHighlightChange?: (lines: number[]) => void\n readOnly?: boolean\n theme: ThemeContextValue\n}\n\nfunction createCodeMirrorTheme(options: {themeCtx: ThemeContextValue}) {\n const {themeCtx} = options\n\n const fallbackTone = getBackwardsCompatibleTone(themeCtx)\n\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\n // oxlint-disable-next-line typescript/no-deprecated\n const light = {color: themeCtx.theme.color.light[fallbackTone]}\n\n return EditorView.baseTheme({\n '.cm-lineNumbers': {\n cursor: 'default',\n },\n '.cm-line.cm-line': {\n position: 'relative',\n },\n\n // need set background with pseudoelement so it does not render over selection color\n [`.${highlightLineClass}::before`]: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: -3,\n content: \"''\",\n boxSizing: 'border-box',\n },\n [`&dark .${highlightLineClass}::before`]: {\n background: rgba(dark.color.muted.caution.pressed.bg, 0.5),\n },\n [`&light .${highlightLineClass}::before`]: {\n background: rgba(light.color.muted.caution.pressed.bg, 0.75),\n },\n })\n}\n\nexport const highlightLine = (config: HighlightLineConfig): Extension => {\n const highlightTheme = createCodeMirrorTheme({themeCtx: config.theme})\n\n return [\n lineHighlightField,\n config.readOnly\n ? []\n : lineNumbers({\n domEventHandlers: {\n mousedown: (editorView, lineInfo) => {\n // Determine if the line for the clicked gutter line number has highlighted state or not\n const line = editorView.state.doc.lineAt(lineInfo.from)\n let isHighlighted = false\n editorView.state\n .field(lineHighlightField)\n .between(line.from, line.to, (_from, _to, value) => {\n if (value) {\n isHighlighted = true\n return false // stop iteration\n }\n return undefined\n })\n\n if (isHighlighted) {\n editorView.dispatch({effects: removeLineHighlight.of(line.from)})\n } else {\n editorView.dispatch({effects: addLineHighlight.of(line.from)})\n }\n if (config?.onHighlightChange) {\n config.onHighlightChange(editorView.state.toJSON(highlightState).highlight)\n }\n return true\n },\n },\n }),\n highlightTheme,\n ]\n}\n\n/**\n * Adds and removes highlights to the provided view using highlightLines\n * @param view\n * @param highlightLines\n */\nexport function setHighlightedLines(view: EditorView, highlightLines: number[]): void {\n const doc = view.state.doc\n const lines = doc.lines\n //1-based line numbers\n const allLineNumbers = Array.from({length: lines}, (_x, i) => i + 1)\n view.dispatch({\n effects: allLineNumbers.map((lineNumber) => {\n const line = doc.line(lineNumber)\n if (highlightLines?.includes(lineNumber)) {\n return addLineHighlight.of(line.from)\n }\n return removeLineHighlight.of(line.from)\n }),\n })\n}\n","import type {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {useRootTheme} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\nimport {useMemo} from 'react'\n\nimport {getBackwardsCompatibleTone} from './backwardsCompatibleTone'\n\nexport function useThemeExtension(): Extension {\n const themeCtx = useRootTheme()\n\n return useMemo(() => {\n const fallbackTone = getBackwardsCompatibleTone(themeCtx)\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\n // oxlint-disable-next-line typescript/no-deprecated\n const light = {color: themeCtx.theme.color.light[fallbackTone]}\n\n return EditorView.baseTheme({\n '&.cm-editor': {\n height: '100%',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n\n // Matching brackets\n '&.cm-editor.cm-focused .cm-matchingBracket': {\n backgroundColor: 'transparent',\n },\n '&.cm-editor.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'transparent',\n },\n '&dark.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&dark.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n\n // Size and padding of gutter\n '& .cm-lineNumbers .cm-gutterElement': {\n minWidth: `32px !important`,\n padding: `0 8px !important`,\n },\n '& .cm-gutter.cm-foldGutter': {\n width: `0px !important`,\n },\n\n // Color of gutter\n '&dark .cm-gutters': {\n color: `${rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(dark.color.base.border, 0.5)}`,\n },\n '&light .cm-gutters': {\n color: `${rgba(light.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(light.color.base.border, 0.5)}`,\n },\n })\n }, [themeCtx])\n}\n","import type {Extension} from '@codemirror/state'\nimport {tags as t} from '@lezer/highlight'\nimport {useTheme} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\nimport {createTheme} from '@uiw/codemirror-themes'\nimport {useMemo} from 'react'\n\nexport function useCodeMirrorTheme(): Extension {\n const theme = useTheme()\n\n return useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n // oxlint-disable-next-line typescript/no-deprecated\n const {base, card, dark, syntax} = theme.sanity.color\n\n return createTheme({\n theme: dark ? 'dark' : 'light',\n settings: {\n background: card.enabled.bg,\n foreground: card.enabled.code.fg,\n lineHighlight: card.enabled.bg,\n fontFamily: codeFont.family,\n caret: base.focusRing,\n selection: rgba(base.focusRing, 0.2),\n selectionMatch: rgba(base.focusRing, 0.4),\n gutterBackground: card.disabled.bg,\n gutterForeground: card.disabled.code.fg,\n gutterActiveForeground: card.enabled.fg,\n },\n styles: [\n {\n tag: [t.heading, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: card.enabled.fg,\n },\n {tag: t.angleBracket, color: card.enabled.code.fg},\n {tag: t.atom, color: syntax.keyword},\n {tag: t.attributeName, color: syntax.attrName},\n {tag: t.bool, color: syntax.boolean},\n {tag: t.bracket, color: card.enabled.code.fg},\n {tag: t.className, color: syntax.className},\n {tag: t.comment, color: syntax.comment},\n {tag: t.definition(t.typeName), color: syntax.function},\n {\n tag: [\n t.definition(t.variableName),\n t.function(t.variableName),\n t.className,\n t.attributeName,\n ],\n color: syntax.function,\n },\n {tag: [t.function(t.propertyName), t.propertyName], color: syntax.function},\n {tag: t.keyword, color: syntax.keyword},\n {tag: t.null, color: syntax.number},\n {tag: t.number, color: syntax.number},\n {tag: t.meta, color: card.enabled.code.fg},\n {tag: t.operator, color: syntax.operator},\n {tag: t.propertyName, color: syntax.property},\n {tag: [t.string, t.special(t.brace)], color: syntax.string},\n {tag: t.tagName, color: syntax.className},\n {tag: t.typeName, color: syntax.keyword},\n ],\n })\n }, [theme])\n}\n","import type {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {rem, useTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useFontSizeExtension(props: {fontSize: number}): Extension {\n const {fontSize: fontSizeProp} = props\n const theme = useTheme()\n\n return useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n const {fontSize, lineHeight} = codeFont.sizes[fontSizeProp] || codeFont.sizes[2]!\n\n return EditorView.baseTheme({\n '&': {\n fontSize: rem(fontSize),\n },\n\n '& .cm-scroller': {\n lineHeight: `${lineHeight / fontSize} !important`,\n },\n })\n }, [fontSizeProp, theme])\n}\n","import type {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {useRootTheme} from '@sanity/ui'\nimport CodeMirror, {type ReactCodeMirrorProps, type ReactCodeMirrorRef} from '@uiw/react-codemirror'\nimport {type Ref, useCallback, useContext, useEffect, useMemo, useState} from 'react'\n\nimport {CodeInputConfigContext} from './CodeModeContext'\nimport {defaultCodeModes} from './defaultCodeModes'\nimport {\n highlightLine,\n highlightState,\n setHighlightedLines,\n} from './extensions/highlightLineExtension'\nimport {useThemeExtension} from './extensions/theme'\nimport {useCodeMirrorTheme} from './extensions/useCodeMirrorTheme'\nimport {useFontSizeExtension} from './extensions/useFontSize'\n\nexport interface CodeMirrorProps extends ReactCodeMirrorProps {\n highlightLines?: number[]\n languageMode?: string\n onHighlightChange?: (lines: number[]) => void\n}\n\n/**\n * CodeMirrorProxy is a wrapper component around CodeMirror that we lazy load to reduce initial bundle size.\n *\n * It is also responsible for integrating any CodeMirror extensions.\n */\nfunction CodeMirrorProxy(props: CodeMirrorProps & {ref?: Ref<ReactCodeMirrorRef>}) {\n const {\n basicSetup: basicSetupProp,\n highlightLines,\n languageMode,\n onHighlightChange,\n readOnly,\n value,\n ref,\n ...codeMirrorProps\n } = props\n\n const themeCtx = useRootTheme()\n const codeMirrorTheme = useCodeMirrorTheme()\n const [editorView, setEditorView] = useState<EditorView | undefined>(undefined)\n\n // Resolve extensions\n const themeExtension = useThemeExtension()\n const fontSizeExtension = useFontSizeExtension({fontSize: 1})\n const languageExtension = useLanguageExtension(languageMode)\n const highlightLineExtension = useMemo(\n () =>\n highlightLine({\n onHighlightChange,\n readOnly,\n theme: themeCtx,\n }),\n [onHighlightChange, readOnly, themeCtx],\n )\n\n const extensions = useMemo(() => {\n const baseExtensions = [\n themeExtension,\n fontSizeExtension,\n highlightLineExtension,\n EditorView.lineWrapping,\n ]\n if (languageExtension) {\n return [...baseExtensions, languageExtension]\n }\n return baseExtensions\n }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension])\n\n useEffect(() => {\n if (editorView) {\n setHighlightedLines(editorView, highlightLines ?? [])\n }\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }, [editorView, highlightLines, value])\n\n const [initialState] = useState(() => {\n return {\n json: {\n doc: value ?? '',\n selection: {\n main: 0,\n ranges: [{anchor: 0, head: 0}],\n },\n highlight: highlightLines ?? [],\n },\n fields: highlightState,\n }\n })\n\n const handleCreateEditor = useCallback((view: EditorView) => {\n setEditorView(view)\n }, [])\n\n const basicSetup = useMemo(\n () =>\n basicSetupProp ?? {\n highlightActiveLine: false,\n },\n [basicSetupProp],\n )\n\n return (\n <CodeMirror\n {...codeMirrorProps}\n value={value}\n ref={ref}\n extensions={extensions}\n theme={codeMirrorTheme}\n onCreateEditor={handleCreateEditor}\n initialState={initialState}\n basicSetup={basicSetup}\n readOnly={readOnly}\n />\n )\n}\n\nfunction useLanguageExtension(mode?: string) {\n const codeConfig = useContext(CodeInputConfigContext)\n\n const [languageExtension, setLanguageExtension] = useState<Extension | undefined>()\n\n useEffect(() => {\n const customModes = codeConfig?.codeModes ?? []\n const modes = [...customModes, ...defaultCodeModes]\n\n const codeMode = modes.find((m) => m.name === mode)\n if (!codeMode?.loader) {\n console.warn(\n `Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`,\n )\n }\n let active = true\n Promise.resolve(codeMode?.loader())\n .then((extension) => {\n if (active) {\n setLanguageExtension(extension)\n }\n return undefined\n })\n .catch((e) => {\n console.error(`Failed to load language mode ${mode}`, e)\n if (active) {\n setLanguageExtension(undefined)\n }\n })\n return () => {\n active = false\n }\n }, [mode, codeConfig])\n\n return languageExtension\n}\n\nexport default CodeMirrorProxy\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"CodeMirrorProxy-VeTh1vQ-.js","names":["getBackwardsCompatibleTone(themeCtx)","EditorView.baseTheme({\n '&.cm-editor': {\n height: '100%',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n\n // Matching brackets\n '&.cm-editor.cm-focused .cm-matchingBracket': {\n backgroundColor: 'transparent',\n },\n '&.cm-editor.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'transparent',\n },\n '&dark.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&dark.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n\n // Size and padding of gutter\n '& .cm-lineNumbers .cm-gutterElement': {\n minWidth: `32px !important`,\n padding: `0 8px !important`,\n },\n '& .cm-gutter.cm-foldGutter': {\n width: `0px !important`,\n },\n\n // Color of gutter\n '&dark .cm-gutters': {\n color: `${rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(dark.color.base.border, 0.5)}`,\n },\n '&light .cm-gutters': {\n color: `${rgba(light.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(light.color.base.border, 0.5)}`,\n },\n })","themeCtx.theme.color.dark[fallbackTone]","light","useMemo(() => {\n const fallbackTone = getBackwardsCompatibleTone(themeCtx)\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\n // oxlint-disable-next-line typescript/no-deprecated\n const light = {color: themeCtx.theme.color.light[fallbackTone]}\n\n return EditorView.baseTheme({\n '&.cm-editor': {\n height: '100%',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n\n // Matching brackets\n '&.cm-editor.cm-focused .cm-matchingBracket': {\n backgroundColor: 'transparent',\n },\n '&.cm-editor.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'transparent',\n },\n '&dark.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&dark.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n\n // Size and padding of gutter\n '& .cm-lineNumbers .cm-gutterElement': {\n minWidth: `32px !important`,\n padding: `0 8px !important`,\n },\n '& .cm-gutter.cm-foldGutter': {\n width: `0px !important`,\n },\n\n // Color of gutter\n '&dark .cm-gutters': {\n color: `${rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(dark.color.base.border, 0.5)}`,\n },\n '&light .cm-gutters': {\n color: `${rgba(light.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(light.color.base.border, 0.5)}`,\n },\n })\n }, [themeCtx])","_c","createTheme({\n theme: dark ? 'dark' : 'light',\n settings: {\n background: card.enabled.bg,\n foreground: card.enabled.code.fg,\n lineHighlight: card.enabled.bg,\n fontFamily: codeFont.family,\n caret: base.focusRing,\n selection: rgba(base.focusRing, 0.2),\n selectionMatch: rgba(base.focusRing, 0.4),\n gutterBackground: card.disabled.bg,\n gutterForeground: card.disabled.code.fg,\n gutterActiveForeground: card.enabled.fg,\n },\n styles: [\n {\n tag: [t.heading, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: card.enabled.fg,\n },\n {tag: t.angleBracket, color: card.enabled.code.fg},\n {tag: t.atom, color: syntax.keyword},\n {tag: t.attributeName, color: syntax.attrName},\n {tag: t.bool, color: syntax.boolean},\n {tag: t.bracket, color: card.enabled.code.fg},\n {tag: t.className, color: syntax.className},\n {tag: t.comment, color: syntax.comment},\n {tag: t.definition(t.typeName), color: syntax.function},\n {\n tag: [\n t.definition(t.variableName),\n t.function(t.variableName),\n t.className,\n t.attributeName,\n ],\n color: syntax.function,\n },\n {tag: [t.function(t.propertyName), t.propertyName], color: syntax.function},\n {tag: t.keyword, color: syntax.keyword},\n {tag: t.null, color: syntax.number},\n {tag: t.number, color: syntax.number},\n {tag: t.meta, color: card.enabled.code.fg},\n {tag: t.operator, color: syntax.operator},\n {tag: t.propertyName, color: syntax.property},\n {tag: [t.string, t.special(t.brace)], color: syntax.string},\n {tag: t.tagName, color: syntax.className},\n {tag: t.typeName, color: syntax.keyword},\n ],\n })","focusRing","bg","fg","family","attrName","boolean","className","comment","function","keyword","number","operator","property","string","dark ? 'dark' : 'light'","useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n // oxlint-disable-next-line typescript/no-deprecated\n const {base, card, dark, syntax} = theme.sanity.color\n\n return createTheme({\n theme: dark ? 'dark' : 'light',\n settings: {\n background: card.enabled.bg,\n foreground: card.enabled.code.fg,\n lineHighlight: card.enabled.bg,\n fontFamily: codeFont.family,\n caret: base.focusRing,\n selection: rgba(base.focusRing, 0.2),\n selectionMatch: rgba(base.focusRing, 0.4),\n gutterBackground: card.disabled.bg,\n gutterForeground: card.disabled.code.fg,\n gutterActiveForeground: card.enabled.fg,\n },\n styles: [\n {\n tag: [t.heading, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: card.enabled.fg,\n },\n {tag: t.angleBracket, color: card.enabled.code.fg},\n {tag: t.atom, color: syntax.keyword},\n {tag: t.attributeName, color: syntax.attrName},\n {tag: t.bool, color: syntax.boolean},\n {tag: t.bracket, color: card.enabled.code.fg},\n {tag: t.className, color: syntax.className},\n {tag: t.comment, color: syntax.comment},\n {tag: t.definition(t.typeName), color: syntax.function},\n {\n tag: [\n t.definition(t.variableName),\n t.function(t.variableName),\n t.className,\n t.attributeName,\n ],\n color: syntax.function,\n },\n {tag: [t.function(t.propertyName), t.propertyName], color: syntax.function},\n {tag: t.keyword, color: syntax.keyword},\n {tag: t.null, color: syntax.number},\n {tag: t.number, color: syntax.number},\n {tag: t.meta, color: card.enabled.code.fg},\n {tag: t.operator, color: syntax.operator},\n {tag: t.propertyName, color: syntax.property},\n {tag: [t.string, t.special(t.brace)], color: syntax.string},\n {tag: t.tagName, color: syntax.className},\n {tag: t.typeName, color: syntax.keyword},\n ],\n })\n }, [theme])","_c","t","EditorView.baseTheme({\n '&': {\n fontSize: rem(fontSize),\n },\n\n '& .cm-scroller': {\n lineHeight: `${lineHeight / fontSize} !important`,\n },\n })","useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n const {fontSize, lineHeight} = codeFont.sizes[fontSizeProp] || codeFont.sizes[2]!\n\n return EditorView.baseTheme({\n '&': {\n fontSize: rem(fontSize),\n },\n\n '& .cm-scroller': {\n lineHeight: `${lineHeight / fontSize} !important`,\n },\n })\n }, [fontSizeProp, theme])","_c","{fontSize: 1}","highlightLine({\n onHighlightChange,\n readOnly,\n theme: themeCtx,\n })","useMemo(\n () =>\n highlightLine({\n onHighlightChange,\n readOnly,\n theme: themeCtx,\n }),\n [onHighlightChange, readOnly, themeCtx],\n )","useMemo(() => {\n const baseExtensions = [\n themeExtension,\n fontSizeExtension,\n highlightLineExtension,\n EditorView.lineWrapping,\n ]\n if (languageExtension) {\n return [...baseExtensions, languageExtension]\n }\n return baseExtensions\n }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension])","[\n themeExtension,\n fontSizeExtension,\n highlightLineExtension,\n EditorView.lineWrapping,\n ]","[...baseExtensions, languageExtension]","() => {\n if (editorView) {\n setHighlightedLines(editorView, highlightLines ?? [])\n }\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }","[editorView, highlightLines, value]","() => {\n return {\n json: {\n doc: value ?? '',\n selection: {\n main: 0,\n ranges: [{anchor: 0, head: 0}],\n },\n highlight: highlightLines ?? [],\n },\n fields: highlightState,\n }\n }","(view: EditorView) => {\n setEditorView(view)\n }","useCallback((view: EditorView) => {\n setEditorView(view)\n }, [])","basicSetupProp ?? {\n highlightActiveLine: false,\n }","useMemo(\n () =>\n basicSetupProp ?? {\n highlightActiveLine: false,\n },\n [basicSetupProp],\n )","<CodeMirror\n {...codeMirrorProps}\n value={value}\n ref={ref}\n extensions={extensions}\n theme={codeMirrorTheme}\n onCreateEditor={handleCreateEditor}\n initialState={initialState}\n basicSetup={basicSetup}\n readOnly={readOnly}\n />","() => {\n const customModes = codeConfig?.codeModes ?? []\n const modes = [...customModes, ...defaultCodeModes]\n\n const codeMode = modes.find((m) => m.name === mode)\n if (!codeMode?.loader) {\n console.warn(\n `Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`,\n )\n }\n let active = true\n Promise.resolve(codeMode?.loader())\n .then((extension) => {\n if (active) {\n setLanguageExtension(extension)\n }\n return undefined\n })\n .catch((e) => {\n console.error(`Failed to load language mode ${mode}`, e)\n if (active) {\n setLanguageExtension(undefined)\n }\n })\n return () => {\n active = false\n }\n }","codeModes","[mode, codeConfig]","_c"],"sources":["../src/codemirror/defaultCodeModes.ts","../src/codemirror/extensions/backwardsCompatibleTone.ts","../src/codemirror/extensions/highlightLineExtension.ts","../src/codemirror/extensions/theme.ts","../src/codemirror/extensions/useCodeMirrorTheme.ts","../src/codemirror/extensions/useFontSize.ts","../src/codemirror/CodeMirrorProxy.tsx"],"sourcesContent":["import {StreamLanguage} from '@codemirror/language'\nimport type {Extension} from '@codemirror/state'\n\nexport interface CodeMode {\n name: string\n loader: ModeLoader\n}\nexport type ModeLoader = () => Promise<Extension | undefined> | Extension | undefined\n\nexport const defaultCodeModes: CodeMode[] = [\n {\n name: 'groq',\n loader: () => import('@sanity/lezer-groq').then(({groq}) => groq()),\n },\n {\n name: 'javascript',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) => javascript({jsx: false})),\n },\n {\n name: 'jsx',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) => javascript({jsx: true})),\n },\n {\n name: 'typescript',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) =>\n javascript({jsx: false, typescript: true}),\n ),\n },\n {\n name: 'tsx',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) =>\n javascript({jsx: true, typescript: true}),\n ),\n },\n {name: 'php', loader: () => import('@codemirror/lang-php').then(({php}) => php())},\n {name: 'sql', loader: () => import('@codemirror/lang-sql').then(({sql}) => sql())},\n {\n name: 'mysql',\n loader: () => import('@codemirror/lang-sql').then(({sql, MySQL}) => sql({dialect: MySQL})),\n },\n {name: 'json', loader: () => import('@codemirror/lang-json').then(({json}) => json())},\n {\n name: 'markdown',\n loader: () => import('@codemirror/lang-markdown').then(({markdown}) => markdown()),\n },\n {name: 'java', loader: () => import('@codemirror/lang-java').then(({java}) => java())},\n {name: 'html', loader: () => import('@codemirror/lang-html').then(({html}) => html())},\n {\n name: 'csharp',\n loader: () =>\n import('@codemirror/legacy-modes/mode/clike').then(({csharp}) =>\n StreamLanguage.define(csharp),\n ),\n },\n {\n name: 'sh',\n loader: () =>\n import('@codemirror/legacy-modes/mode/shell').then(({shell}) => StreamLanguage.define(shell)),\n },\n {\n name: 'css',\n loader: () =>\n import('@codemirror/legacy-modes/mode/css').then(({css}) => StreamLanguage.define(css)),\n },\n {\n name: 'scss',\n loader: () =>\n import('@codemirror/legacy-modes/mode/css').then(({css}) => StreamLanguage.define(css)),\n },\n {\n name: 'sass',\n loader: () =>\n import('@codemirror/legacy-modes/mode/sass').then(({sass}) => StreamLanguage.define(sass)),\n },\n {\n name: 'ruby',\n loader: () =>\n import('@codemirror/legacy-modes/mode/ruby').then(({ruby}) => StreamLanguage.define(ruby)),\n },\n {\n name: 'python',\n loader: () =>\n import('@codemirror/legacy-modes/mode/python').then(({python}) =>\n StreamLanguage.define(python),\n ),\n },\n {\n name: 'xml',\n loader: () =>\n import('@codemirror/legacy-modes/mode/xml').then(({xml}) => StreamLanguage.define(xml)),\n },\n {\n name: 'yaml',\n loader: () =>\n import('@codemirror/legacy-modes/mode/yaml').then(({yaml}) => StreamLanguage.define(yaml)),\n },\n {\n name: 'golang',\n loader: () =>\n import('@codemirror/legacy-modes/mode/go').then(({go}) => StreamLanguage.define(go)),\n },\n {name: 'text', loader: () => undefined},\n {name: 'batch', loader: () => undefined},\n]\n","import type {ThemeContextValue} from '@sanity/ui'\n\n/**\n * `@sanity/[email protected]` introduced two new tones; \"neutral\" and \"suggest\",\n * which maps to \"default\" and \"primary\" respectively in the old theme.\n * This function returns the \"backwards compatible\" tone value.\n *\n * @returns The tone value that is backwards compatible with the old theme.\n * @internal\n */\nexport function getBackwardsCompatibleTone(\n themeCtx: ThemeContextValue,\n): Exclude<ThemeContextValue['tone'], 'neutral' | 'suggest'> {\n if (themeCtx.tone !== 'neutral' && themeCtx.tone !== 'suggest') {\n return themeCtx.tone\n }\n\n return themeCtx.tone === 'neutral' ? 'default' : 'primary'\n}\n","import {type Extension, StateEffect, StateField} from '@codemirror/state'\nimport {Decoration, type DecorationSet, EditorView, lineNumbers} from '@codemirror/view'\nimport type {ThemeContextValue} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\n\nimport {getBackwardsCompatibleTone} from './backwardsCompatibleTone'\n\nconst highlightLineClass = 'cm-highlight-line'\n\nconst addLineHighlight = StateEffect.define<number>()\nconst removeLineHighlight = StateEffect.define<number>()\n\nconst lineHighlightField = StateField.define({\n create() {\n return Decoration.none\n },\n update(lines, tr) {\n lines = lines.map(tr.changes)\n for (const e of tr.effects) {\n if (e.is(addLineHighlight)) {\n lines = lines.update({add: [lineHighlightMark.range(e.value)]})\n }\n if (e.is(removeLineHighlight)) {\n lines = lines.update({\n filter: (from) => {\n // removeLineHighlight value is lineStart for the highlight, so keep other effects\n return from !== e.value\n },\n })\n }\n }\n return lines\n },\n toJSON(value, state) {\n const highlightLines: number[] = []\n const iter = value.iter()\n while (iter.value) {\n const lineNumber = state.doc.lineAt(iter.from).number\n if (!highlightLines.includes(lineNumber)) {\n highlightLines.push(lineNumber)\n }\n iter.next()\n }\n return highlightLines\n },\n fromJSON(value: number[], state) {\n const lines = state.doc.lines\n const highlights = value\n .filter((line) => line <= lines) // one-indexed\n .map((line) => lineHighlightMark.range(state.doc.line(line).from))\n highlights.sort((a, b) => a.from - b.from)\n try {\n return Decoration.none.update({\n add: highlights,\n })\n } catch (e) {\n console.error(e)\n return Decoration.none\n }\n },\n provide: (f) => EditorView.decorations.from(f),\n})\n\nconst lineHighlightMark = Decoration.line({\n class: highlightLineClass,\n})\n\nexport const highlightState: {\n [prop: string]: StateField<DecorationSet>\n} = {\n highlight: lineHighlightField,\n}\n\nexport interface HighlightLineConfig {\n onHighlightChange?: (lines: number[]) => void\n readOnly?: boolean\n theme: ThemeContextValue\n}\n\nfunction createCodeMirrorTheme(options: {themeCtx: ThemeContextValue}) {\n const {themeCtx} = options\n\n const fallbackTone = getBackwardsCompatibleTone(themeCtx)\n\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\n // oxlint-disable-next-line typescript/no-deprecated\n const light = {color: themeCtx.theme.color.light[fallbackTone]}\n\n return EditorView.baseTheme({\n '.cm-lineNumbers': {\n cursor: 'default',\n },\n '.cm-line.cm-line': {\n position: 'relative',\n },\n\n // need set background with pseudoelement so it does not render over selection color\n [`.${highlightLineClass}::before`]: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: -3,\n content: \"''\",\n boxSizing: 'border-box',\n },\n [`&dark .${highlightLineClass}::before`]: {\n background: rgba(dark.color.muted.caution.pressed.bg, 0.5),\n },\n [`&light .${highlightLineClass}::before`]: {\n background: rgba(light.color.muted.caution.pressed.bg, 0.75),\n },\n })\n}\n\nexport const highlightLine = (config: HighlightLineConfig): Extension => {\n const highlightTheme = createCodeMirrorTheme({themeCtx: config.theme})\n\n return [\n lineHighlightField,\n config.readOnly\n ? []\n : lineNumbers({\n domEventHandlers: {\n mousedown: (editorView, lineInfo) => {\n // Determine if the line for the clicked gutter line number has highlighted state or not\n const line = editorView.state.doc.lineAt(lineInfo.from)\n let isHighlighted = false\n editorView.state\n .field(lineHighlightField)\n .between(line.from, line.to, (_from, _to, value) => {\n if (value) {\n isHighlighted = true\n return false // stop iteration\n }\n return undefined\n })\n\n if (isHighlighted) {\n editorView.dispatch({effects: removeLineHighlight.of(line.from)})\n } else {\n editorView.dispatch({effects: addLineHighlight.of(line.from)})\n }\n if (config?.onHighlightChange) {\n config.onHighlightChange(editorView.state.toJSON(highlightState).highlight)\n }\n return true\n },\n },\n }),\n highlightTheme,\n ]\n}\n\n/**\n * Adds and removes highlights to the provided view using highlightLines\n * @param view\n * @param highlightLines\n */\nexport function setHighlightedLines(view: EditorView, highlightLines: number[]): void {\n const doc = view.state.doc\n const lines = doc.lines\n //1-based line numbers\n const allLineNumbers = Array.from({length: lines}, (_x, i) => i + 1)\n view.dispatch({\n effects: allLineNumbers.map((lineNumber) => {\n const line = doc.line(lineNumber)\n if (highlightLines?.includes(lineNumber)) {\n return addLineHighlight.of(line.from)\n }\n return removeLineHighlight.of(line.from)\n }),\n })\n}\n","import type {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {useRootTheme} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\nimport {useMemo} from 'react'\n\nimport {getBackwardsCompatibleTone} from './backwardsCompatibleTone'\n\nexport function useThemeExtension(): Extension {\n const themeCtx = useRootTheme()\n\n return useMemo(() => {\n const fallbackTone = getBackwardsCompatibleTone(themeCtx)\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\n // oxlint-disable-next-line typescript/no-deprecated\n const light = {color: themeCtx.theme.color.light[fallbackTone]}\n\n return EditorView.baseTheme({\n '&.cm-editor': {\n height: '100%',\n },\n '&.cm-editor.cm-focused': {\n outline: 'none',\n },\n\n // Matching brackets\n '&.cm-editor.cm-focused .cm-matchingBracket': {\n backgroundColor: 'transparent',\n },\n '&.cm-editor.cm-focused .cm-nonmatchingBracket': {\n backgroundColor: 'transparent',\n },\n '&dark.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&dark.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${dark.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-matchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n '&light.cm-editor.cm-focused .cm-nonmatchingBracket': {\n outline: `1px solid ${light.color.base.border}`,\n },\n\n // Size and padding of gutter\n '& .cm-lineNumbers .cm-gutterElement': {\n minWidth: `32px !important`,\n padding: `0 8px !important`,\n },\n '& .cm-gutter.cm-foldGutter': {\n width: `0px !important`,\n },\n\n // Color of gutter\n '&dark .cm-gutters': {\n color: `${rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(dark.color.base.border, 0.5)}`,\n },\n '&light .cm-gutters': {\n color: `${rgba(light.color.card.enabled.code.fg, 0.5)} !important`,\n borderRight: `1px solid ${rgba(light.color.base.border, 0.5)}`,\n },\n })\n }, [themeCtx])\n}\n","import type {Extension} from '@codemirror/state'\nimport {tags as t} from '@lezer/highlight'\nimport {useTheme} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\nimport {createTheme} from '@uiw/codemirror-themes'\nimport {useMemo} from 'react'\n\nexport function useCodeMirrorTheme(): Extension {\n const theme = useTheme()\n\n return useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n // oxlint-disable-next-line typescript/no-deprecated\n const {base, card, dark, syntax} = theme.sanity.color\n\n return createTheme({\n theme: dark ? 'dark' : 'light',\n settings: {\n background: card.enabled.bg,\n foreground: card.enabled.code.fg,\n lineHighlight: card.enabled.bg,\n fontFamily: codeFont.family,\n caret: base.focusRing,\n selection: rgba(base.focusRing, 0.2),\n selectionMatch: rgba(base.focusRing, 0.4),\n gutterBackground: card.disabled.bg,\n gutterForeground: card.disabled.code.fg,\n gutterActiveForeground: card.enabled.fg,\n },\n styles: [\n {\n tag: [t.heading, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: card.enabled.fg,\n },\n {tag: t.angleBracket, color: card.enabled.code.fg},\n {tag: t.atom, color: syntax.keyword},\n {tag: t.attributeName, color: syntax.attrName},\n {tag: t.bool, color: syntax.boolean},\n {tag: t.bracket, color: card.enabled.code.fg},\n {tag: t.className, color: syntax.className},\n {tag: t.comment, color: syntax.comment},\n {tag: t.definition(t.typeName), color: syntax.function},\n {\n tag: [\n t.definition(t.variableName),\n t.function(t.variableName),\n t.className,\n t.attributeName,\n ],\n color: syntax.function,\n },\n {tag: [t.function(t.propertyName), t.propertyName], color: syntax.function},\n {tag: t.keyword, color: syntax.keyword},\n {tag: t.null, color: syntax.number},\n {tag: t.number, color: syntax.number},\n {tag: t.meta, color: card.enabled.code.fg},\n {tag: t.operator, color: syntax.operator},\n {tag: t.propertyName, color: syntax.property},\n {tag: [t.string, t.special(t.brace)], color: syntax.string},\n {tag: t.tagName, color: syntax.className},\n {tag: t.typeName, color: syntax.keyword},\n ],\n })\n }, [theme])\n}\n","import type {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {rem, useTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useFontSizeExtension(props: {fontSize: number}): Extension {\n const {fontSize: fontSizeProp} = props\n const theme = useTheme()\n\n return useMemo(() => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {code: codeFont} = theme.sanity.fonts\n const {fontSize, lineHeight} = codeFont.sizes[fontSizeProp] || codeFont.sizes[2]!\n\n return EditorView.baseTheme({\n '&': {\n fontSize: rem(fontSize),\n },\n\n '& .cm-scroller': {\n lineHeight: `${lineHeight / fontSize} !important`,\n },\n })\n }, [fontSizeProp, theme])\n}\n","import type {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {useRootTheme} from '@sanity/ui'\nimport CodeMirror, {type ReactCodeMirrorProps, type ReactCodeMirrorRef} from '@uiw/react-codemirror'\nimport {type Ref, useCallback, useContext, useEffect, useMemo, useState} from 'react'\n\nimport {CodeInputConfigContext} from './CodeModeContext'\nimport {defaultCodeModes} from './defaultCodeModes'\nimport {\n highlightLine,\n highlightState,\n setHighlightedLines,\n} from './extensions/highlightLineExtension'\nimport {useThemeExtension} from './extensions/theme'\nimport {useCodeMirrorTheme} from './extensions/useCodeMirrorTheme'\nimport {useFontSizeExtension} from './extensions/useFontSize'\n\nexport interface CodeMirrorProps extends ReactCodeMirrorProps {\n highlightLines?: number[]\n languageMode?: string\n onHighlightChange?: (lines: number[]) => void\n}\n\n/**\n * CodeMirrorProxy is a wrapper component around CodeMirror that we lazy load to reduce initial bundle size.\n *\n * It is also responsible for integrating any CodeMirror extensions.\n */\nfunction CodeMirrorProxy(props: CodeMirrorProps & {ref?: Ref<ReactCodeMirrorRef>}) {\n const {\n basicSetup: basicSetupProp,\n highlightLines,\n languageMode,\n onHighlightChange,\n readOnly,\n value,\n ref,\n ...codeMirrorProps\n } = props\n\n const themeCtx = useRootTheme()\n const codeMirrorTheme = useCodeMirrorTheme()\n const [editorView, setEditorView] = useState<EditorView | undefined>(undefined)\n\n // Resolve extensions\n const themeExtension = useThemeExtension()\n const fontSizeExtension = useFontSizeExtension({fontSize: 1})\n const languageExtension = useLanguageExtension(languageMode)\n const highlightLineExtension = useMemo(\n () =>\n highlightLine({\n onHighlightChange,\n readOnly,\n theme: themeCtx,\n }),\n [onHighlightChange, readOnly, themeCtx],\n )\n\n const extensions = useMemo(() => {\n const baseExtensions = [\n themeExtension,\n fontSizeExtension,\n highlightLineExtension,\n EditorView.lineWrapping,\n ]\n if (languageExtension) {\n return [...baseExtensions, languageExtension]\n }\n return baseExtensions\n }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension])\n\n useEffect(() => {\n if (editorView) {\n setHighlightedLines(editorView, highlightLines ?? [])\n }\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }, [editorView, highlightLines, value])\n\n const [initialState] = useState(() => {\n return {\n json: {\n doc: value ?? '',\n selection: {\n main: 0,\n ranges: [{anchor: 0, head: 0}],\n },\n highlight: highlightLines ?? [],\n },\n fields: highlightState,\n }\n })\n\n const handleCreateEditor = useCallback((view: EditorView) => {\n setEditorView(view)\n }, [])\n\n const basicSetup = useMemo(\n () =>\n basicSetupProp ?? {\n highlightActiveLine: false,\n },\n [basicSetupProp],\n )\n\n return (\n <CodeMirror\n {...codeMirrorProps}\n value={value}\n ref={ref}\n extensions={extensions}\n theme={codeMirrorTheme}\n onCreateEditor={handleCreateEditor}\n initialState={initialState}\n basicSetup={basicSetup}\n readOnly={readOnly}\n />\n )\n}\n\nfunction useLanguageExtension(mode?: string) {\n const codeConfig = useContext(CodeInputConfigContext)\n\n const [languageExtension, setLanguageExtension] = useState<Extension | undefined>()\n\n useEffect(() => {\n const customModes = codeConfig?.codeModes ?? []\n const modes = [...customModes, ...defaultCodeModes]\n\n const codeMode = modes.find((m) => m.name === mode)\n if (!codeMode?.loader) {\n console.warn(\n `Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`,\n )\n }\n let active = true\n Promise.resolve(codeMode?.loader())\n .then((extension) => {\n if (active) {\n setLanguageExtension(extension)\n }\n return undefined\n })\n .catch((e) => {\n console.error(`Failed to load language mode ${mode}`, e)\n if (active) {\n setLanguageExtension(undefined)\n }\n })\n return () => {\n active = false\n }\n }, [mode, codeConfig])\n\n return languageExtension\n}\n\nexport default CodeMirrorProxy\n"],"mappings":";;;;;;;;;;;;AASA,MAAa,mBAA+B;CAC1C;EACE,MAAM;EACN,cAAc,OAAO,qBAAqB,CAAC,MAAM,EAAC,WAAU,KAAK,CAAC;CACpE;CACA;EACE,MAAM;EACN,cACE,OAAO,8BAA8B,CAAC,MAAM,EAAC,iBAAgB,WAAW,EAAC,KAAK,GAAK,CAAC,CAAC;CACzF;CACA;EACE,MAAM;EACN,cACE,OAAO,8BAA8B,CAAC,MAAM,EAAC,iBAAgB,WAAW,EAAC,KAAK,GAAI,CAAC,CAAC;CACxF;CACA;EACE,MAAM;EACN,cACE,OAAO,8BAA8B,CAAC,MAAM,EAAC,iBAC3C,WAAW;GAAC,KAAK;GAAO,YAAY;EAAI,CAAC,CAC3C;CACJ;CACA;EACE,MAAM;EACN,cACE,OAAO,8BAA8B,CAAC,MAAM,EAAC,iBAC3C,WAAW;GAAC,KAAK;GAAM,YAAY;EAAI,CAAC,CAC1C;CACJ;CACA;EAAC,MAAM;EAAO,cAAc,OAAO,uBAAuB,CAAC,MAAM,EAAC,UAAS,IAAI,CAAC;CAAC;CACjF;EAAC,MAAM;EAAO,cAAc,OAAO,uBAAuB,CAAC,MAAM,EAAC,UAAS,IAAI,CAAC;CAAC;CACjF;EACE,MAAM;EACN,cAAc,OAAO,uBAAuB,CAAC,MAAM,EAAC,KAAK,YAAW,IAAI,EAAC,SAAS,MAAK,CAAC,CAAC;CAC3F;CACA;EAAC,MAAM;EAAQ,cAAc,OAAO,wBAAwB,CAAC,MAAM,EAAC,WAAU,KAAK,CAAC;CAAC;CACrF;EACE,MAAM;EACN,cAAc,OAAO,4BAA4B,CAAC,MAAM,EAAC,eAAc,SAAS,CAAC;CACnF;CACA;EAAC,MAAM;EAAQ,cAAc,OAAO,wBAAwB,CAAC,MAAM,EAAC,WAAU,KAAK,CAAC;CAAC;CACrF;EAAC,MAAM;EAAQ,cAAc,OAAO,wBAAwB,CAAC,MAAM,EAAC,WAAU,KAAK,CAAC;CAAC;CACrF;EACE,MAAM;EACN,cACE,OAAO,sCAAsC,CAAC,MAAM,EAAC,aACnD,eAAe,OAAO,MAAM,CAC9B;CACJ;CACA;EACE,MAAM;EACN,cACE,OAAO,sCAAsC,CAAC,MAAM,EAAC,YAAW,eAAe,OAAO,KAAK,CAAC;CAChG;CACA;EACE,MAAM;EACN,cACE,OAAO,oCAAoC,CAAC,MAAM,EAAC,UAAS,eAAe,OAAO,GAAG,CAAC;CAC1F;CACA;EACE,MAAM;EACN,cACE,OAAO,oCAAoC,CAAC,MAAM,EAAC,UAAS,eAAe,OAAO,GAAG,CAAC;CAC1F;CACA;EACE,MAAM;EACN,cACE,OAAO,qCAAqC,CAAC,MAAM,EAAC,WAAU,eAAe,OAAO,IAAI,CAAC;CAC7F;CACA;EACE,MAAM;EACN,cACE,OAAO,qCAAqC,CAAC,MAAM,EAAC,WAAU,eAAe,OAAO,IAAI,CAAC;CAC7F;CACA;EACE,MAAM;EACN,cACE,OAAO,uCAAuC,CAAC,MAAM,EAAC,aACpD,eAAe,OAAO,MAAM,CAC9B;CACJ;CACA;EACE,MAAM;EACN,cACE,OAAO,oCAAoC,CAAC,MAAM,EAAC,UAAS,eAAe,OAAO,GAAG,CAAC;CAC1F;CACA;EACE,MAAM;EACN,cACE,OAAO,qCAAqC,CAAC,MAAM,EAAC,WAAU,eAAe,OAAO,IAAI,CAAC;CAC7F;CACA;EACE,MAAM;EACN,cACE,OAAO,mCAAmC,CAAC,MAAM,EAAC,SAAQ,eAAe,OAAO,EAAE,CAAC;CACvF;CACA;EAAC,MAAM;EAAQ,cAAc,KAAA;CAAS;CACtC;EAAC,MAAM;EAAS,cAAc,KAAA;CAAS;AACzC;;;;;;;;;ACjGA,SAAgB,2BACd,UAC2D;CAK3D,OAJI,SAAS,SAAS,aAAa,SAAS,SAAS,YAC5C,SAAS,OAGX,SAAS,SAAS,YAAY,YAAY;AACnD;ACXA,MAAM,qBAAqB,qBAErB,mBAAmB,YAAY,OAAe,GAC9C,sBAAsB,YAAY,OAAe,GAEjD,qBAAqB,WAAW,OAAO;CAC3C,SAAS;EACP,OAAO,WAAW;CACpB;CACA,OAAO,OAAO,IAAI;EAChB,QAAQ,MAAM,IAAI,GAAG,OAAO;EAC5B,KAAK,IAAM,KAAK,GAAG,SAIjB,AAHI,EAAE,GAAG,gBAAgB,MACvB,QAAQ,MAAM,OAAO,EAAC,KAAK,CAAC,kBAAkB,MAAM,EAAE,KAAK,CAAC,EAAC,CAAC,IAE5D,EAAE,GAAG,mBAAmB,MAC1B,QAAQ,MAAM,OAAO,EACnB,SAAS,SAEA,SAAS,EAAE,MAEtB,CAAC;EAGL,OAAO;CACT;CACA,OAAO,OAAO,OAAO;EACnB,IAAM,iBAA2B,CAAC,GAC5B,OAAO,MAAM,KAAK;EACxB,OAAO,KAAK,QAAO;GACjB,IAAM,aAAa,MAAM,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC;GAI/C,AAHK,eAAe,SAAS,UAAU,KACrC,eAAe,KAAK,UAAU,GAEhC,KAAK,KAAK;EACZ;EACA,OAAO;CACT;CACA,SAAS,OAAiB,OAAO;EAC/B,IAAM,QAAQ,MAAM,IAAI,OAClB,aAAa,MAChB,QAAQ,SAAS,QAAQ,KAAK,CAAC,CAC/B,KAAK,SAAS,kBAAkB,MAAM,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;EACnE,WAAW,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI;EACzC,IAAI;GACF,OAAO,WAAW,KAAK,OAAO,EAC5B,KAAK,WACP,CAAC;EACH,SAAS,GAAG;GAEV,OADA,QAAQ,MAAM,CAAC,GACR,WAAW;EACpB;CACF;CACA,UAAU,MAAM,WAAW,YAAY,KAAK,CAAC;AAC/C,CAAC,GAEK,oBAAoB,WAAW,KAAK,EACxC,OAAO,mBACT,CAAC,GAEY,iBAET,EACF,WAAW,mBACb;AAQA,SAAS,sBAAsB,SAAwC;CACrE,IAAM,EAAC,aAAY,SAEb,eAAe,2BAA2B,QAAQ,GAIlD,OAAO,EAAC,OAAO,SAAS,MAAM,MAAM,KAAK,cAAa,GAEtD,QAAQ,EAAC,OAAO,SAAS,MAAM,MAAM,MAAM,cAAa;CAE9D,OAAO,WAAW,UAAU;EAC1B,mBAAmB,EACjB,QAAQ,UACV;EACA,oBAAoB,EAClB,UAAU,WACZ;GAGC,IAAI,mBAAmB,YAAY;GAClC,UAAU;GACV,KAAK;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,QAAQ;GACR,SAAS;GACT,WAAW;EACb;GACC,UAAU,mBAAmB,YAAY,EACxC,YAAY,KAAK,KAAK,MAAM,MAAM,QAAQ,QAAQ,IAAI,EAAG,EAC3D;GACC,WAAW,mBAAmB,YAAY,EACzC,YAAY,KAAK,MAAM,MAAM,MAAM,QAAQ,QAAQ,IAAI,GAAI,EAC7D;CACF,CAAC;AACH;AAEA,MAAa,iBAAiB,WAA2C;CACvE,IAAM,iBAAiB,sBAAsB,EAAC,UAAU,OAAO,MAAK,CAAC;CAErE,OAAO;EACL;EACA,OAAO,WACH,CAAC,IACD,YAAY,EACV,kBAAkB,EAChB,YAAY,YAAY,aAAa;GAEnC,IAAM,OAAO,WAAW,MAAM,IAAI,OAAO,SAAS,IAAI,GAClD,gBAAgB;GAmBpB,OAlBA,WAAW,MACR,MAAM,kBAAkB,CAAC,CACzB,QAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,KAAK,UAAU;IAClD,IAAI,OAEF,OADA,gBAAgB,IACT;GAGX,CAAC,GAEC,gBACF,WAAW,SAAS,EAAC,SAAS,oBAAoB,GAAG,KAAK,IAAI,EAAC,CAAC,IAEhE,WAAW,SAAS,EAAC,SAAS,iBAAiB,GAAG,KAAK,IAAI,EAAC,CAAC,GAE3D,QAAQ,qBACV,OAAO,kBAAkB,WAAW,MAAM,OAAO,cAAc,CAAC,CAAC,SAAS,GAErE;EACT,EACF,EACF,CAAC;EACL;CACF;AACF;;;;;;AAOA,SAAgB,oBAAoB,MAAkB,gBAAgC;CACpF,IAAM,MAAM,KAAK,MAAM,KACjB,QAAQ,IAAI,OAEZ,iBAAiB,MAAM,KAAK,EAAC,QAAQ,MAAK,IAAI,IAAI,MAAM,IAAI,CAAC;CACnE,KAAK,SAAS,EACZ,SAAS,eAAe,KAAK,eAAe;EAC1C,IAAM,OAAO,IAAI,KAAK,UAAU;EAIhC,OAHI,gBAAgB,SAAS,UAAU,IAC9B,iBAAiB,GAAG,KAAK,IAAI,IAE/B,oBAAoB,GAAG,KAAK,IAAI;CACzC,CAAC,EACH,CAAC;AACH;ACxKA,SAAgB,oBAA+B;eACvC,WAAW,aAAa,GAGPA;CAA2B,AAAA,EAAA,OAAA,wBAA3B,KAAA,2BAA2B,QAAQ,GAAR,EAAA,KAAA;CAAhD,IAAM,eAAeA,IAGA,KAAA,SAAS,MAAM,MAAM,KAAK,eAIxCC;CAF0C,IAAA,EAAA,OAAA,gBAAA,EAAA,OAF5BC,MAAAA,EAAAA,OAEsBC,SAAZ,MAAM,MAAM,OAAA;EAF3C,IAAM,OAAO,EAAC,OAAOD,GAAuC,GAEtD,QAAQ,EAAC,OAAO,SAAS,MAAM,MAAM,MAAM,cAAa;EAEvD,KAAA,WAAW,UAAU;GAC1B,eAAe,EACb,QAAQ,OACV;GACA,0BAA0B,EACxB,SAAS,OACX;GAGA,8CAA8C,EAC5C,iBAAiB,cACnB;GACA,iDAAiD,EAC/C,iBAAiB,cACnB;GACA,kDAAkD,EAChD,SAAS,aAAa,KAAK,MAAM,KAAK,SACxC;GACA,qDAAqD,EACnD,SAAS,aAAa,KAAK,MAAM,KAAK,SACxC;GACA,mDAAmD,EACjD,SAAS,aAAa,MAAM,MAAM,KAAK,SACzC;GACA,sDAAsD,EACpD,SAAS,aAAa,MAAM,MAAM,KAAK,SACzC;GAGA,uCAAuC;IACrC,UAAU;IACV,SAAS;GACX;GACA,8BAA8B,EAC5B,OAAO,iBACT;GAGA,qBAAqB;IACnB,OAAO,GAAG,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,IAAI,EAAG,EAAE;IACrD,aAAa,aAAa,KAAK,KAAK,MAAM,KAAK,QAAQ,EAAG;GAC5D;GACA,sBAAsB;IACpB,OAAO,GAAG,KAAK,MAAM,MAAM,KAAK,QAAQ,KAAK,IAAI,EAAG,EAAE;IACtD,aAAa,aAAa,KAAK,MAAM,MAAM,KAAK,QAAQ,EAAG;GAC7D;EACF,CAAC,GAhDgD,EAAA,KAAA,cAF5BA,EAAAA,KAAAA,IAEsBC,EAAAA,KAAAA,SAAZ,MAAM,MAAM;;CAN7C,OAAOC;AAwDT;AC5DA,SAAgB,qBAAgC;gBACxC,QAAQ,SAAS,GAKf,EAAC,MAAM,aAAY,MAAM,OAAO,OAEhC,EAAC,MAAM,MAAM,MAAM,WAAU,MAAM,OAAO,OAGvC,KAAA,OAAO,SAAS,SADlBE;CAPT,OAe2BC,EAAAA,OAAAA,KAAAA,aAAAA,EAAAA,OAEWC,KAAT,SAAS,MAAA,EAAA,OACKC,KADd,SACS,KAAK,MAAA,EAAA,OARZD,KAAR,QAAQ,MAAA,EAAA,OACKC,KADb,QACQ,KAAK,MAAA,EAAA,OAQOA,KATpB,QASoB,MAAA,EAAA,OANhBC,SAAAA,UAAAA,EAAAA,OAegBC,OAAAA,YAAAA,EAAAA,OACTC,OAAAA,WAAAA,EAAAA,OAEKC,OAAAA,aAAAA,EAAAA,QACFC,OAAAA,WAAAA,EAAAA,QACeC,OAAAA,YAAAA,EAAAA,QANlBC,OAAAA,WAAAA,EAAAA,QAkBAC,OAAAA,UAAAA,EAAAA,QAGIC,OAAAA,YAAAA,EAAAA,QACIC,OAAAA,YAAAA,EAAAA,QACgBC,OAAAA,UAAAA,EAAAA,QA1C/CC,MADF,KAAA,YAAY;EACjB,OAAOA;EACP,UAAU;GACR,YAAY,KAAK,QAAQ;GACzB,YAAY,KAAK,QAAQ,KAAK;GAC9B,eAAe,KAAK,QAAQ;GAC5B,YAAY,SAAS;GACrB,OAAO,KAAK;GACZ,WAAW,KAAK,KAAK,WAAW,EAAG;GACnC,gBAAgB,KAAK,KAAK,WAAW,EAAG;GACxC,kBAAkB,KAAK,SAAS;GAChC,kBAAkB,KAAK,SAAS,KAAK;GACrC,wBAAwB,KAAK,QAAQ;EACvC;EACA,QAAQ;GACN;IACE,KAAK;KAACG,KAAE;KAASA,KAAE;KAAUA,KAAE;KAAUA,KAAE;KAAUA,KAAE;KAAUA,KAAE;IAAQ;IAC3E,OAAO,KAAK,QAAQ;GACtB;GACA;IAAC,KAAKA,KAAE;IAAc,OAAO,KAAK,QAAQ,KAAK;GAAE;GACjD;IAAC,KAAKA,KAAE;IAAM,OAAO,OAAO;GAAO;GACnC;IAAC,KAAKA,KAAE;IAAe,OAAO,OAAO;GAAQ;GAC7C;IAAC,KAAKA,KAAE;IAAM,OAAO,OAAO;GAAO;GACnC;IAAC,KAAKA,KAAE;IAAS,OAAO,KAAK,QAAQ,KAAK;GAAE;GAC5C;IAAC,KAAKA,KAAE;IAAW,OAAO,OAAO;GAAS;GAC1C;IAAC,KAAKA,KAAE;IAAS,OAAO,OAAO;GAAO;GACtC;IAAC,KAAKA,KAAE,WAAWA,KAAE,QAAQ;IAAG,OAAO,OAAO;GAAQ;GACtD;IACE,KAAK;KACHA,KAAE,WAAWA,KAAE,YAAY;KAC3BA,KAAE,SAASA,KAAE,YAAY;KACzBA,KAAE;KACFA,KAAE;IACJ;IACA,OAAO,OAAO;GAChB;GACA;IAAC,KAAK,CAACA,KAAE,SAASA,KAAE,YAAY,GAAGA,KAAE,YAAY;IAAG,OAAO,OAAO;GAAQ;GAC1E;IAAC,KAAKA,KAAE;IAAS,OAAO,OAAO;GAAO;GACtC;IAAC,KAAKA,KAAE;IAAM,OAAO,OAAO;GAAM;GAClC;IAAC,KAAKA,KAAE;IAAQ,OAAO,OAAO;GAAM;GACpC;IAAC,KAAKA,KAAE;IAAM,OAAO,KAAK,QAAQ,KAAK;GAAE;GACzC;IAAC,KAAKA,KAAE;IAAU,OAAO,OAAO;GAAQ;GACxC;IAAC,KAAKA,KAAE;IAAc,OAAO,OAAO;GAAQ;GAC5C;IAAC,KAAK,CAACA,KAAE,QAAQA,KAAE,QAAQA,KAAE,KAAK,CAAC;IAAG,OAAO,OAAO;GAAM;GAC1D;IAAC,KAAKA,KAAE;IAAS,OAAO,OAAO;GAAS;GACxC;IAAC,KAAKA,KAAE;IAAU,OAAO,OAAO;GAAO;EACzC;CACF,CAAC,GAvCwBjB,EAAAA,KAAAA,KAAAA,WAEWC,EAAAA,KAAAA,KAAT,SAAS,IACKC,EAAAA,KAAAA,KADd,SACS,KAAK,IARZD,EAAAA,KAAAA,KAAR,QAAQ,IACKC,EAAAA,KAAAA,KADb,QACQ,KAAK,IAQOA,EAAAA,KAAAA,KATpB,QASoB,IANhBC,EAAAA,KAAAA,SAAAA,QAegBC,EAAAA,KAAAA,OAAAA,UACTC,EAAAA,KAAAA,OAAAA,SAEKC,EAAAA,KAAAA,OAAAA,WACFC,EAAAA,MAAAA,OAAAA,SACeC,EAAAA,MAAAA,OAAAA,UANlBC,EAAAA,MAAAA,OAAAA,SAkBAC,EAAAA,MAAAA,OAAAA,QAGIC,EAAAA,MAAAA,OAAAA,UACIC,EAAAA,MAAAA,OAAAA,UACgBC,EAAAA,MAAAA,OAAAA,QA1C/CC,EAAAA,MAAAA,8BARJC;AAwDT;AC7DA,SAAgB,qBAAqB,OAAsC;eACnE,EAAC,UAAU,iBAAgB,OAMzB,EAAC,MAAM,aALD,SAKa,CAAA,CAAM,OAAO,OAChC,EAAC,UAAU,eAAc,SAAS,MAAM,iBAAiB,SAAS,MAAM,IAEvEG;CANT,OAQoB,EAAA,OAAA,YAAA,EAAA,OAIC,cANZ,KAAA,WAAW,UAAU;EAC1B,KAAK,EACH,UAAU,IAAI,QAAQ,EACxB;EAEA,kBAAkB,EAChB,YAAY,GAAG,aAAa,SAAS,aACvC;CACF,CAAC,GANiB,EAAA,KAAA,UAIC,EAAA,KAAA,oCAZdC;AAgBT;;;;;;ACGA,SAAS,gBAAgB,OAA0D;gBAEnE,gBAOT,iBANH,gBACA,cACA,mBACA,UAEA,KADA;CAGE,AAAA,EAAA,OAAA,4KATE,CACJ,YAAY,gBACZ,gBACA,cACA,mBACA,UACA,OACA,KACA,GAAA,mBACE;CAEJ,IAAM,WAAW,aAAa,GACxB,kBAAkB,mBAAmB,GACrC,CAAC,YAAY,iBAAiB,SAAiC,KAAA,CAAS,GAGxE,iBAAiB,kBAAkB,GACME;qDAAC,KAAA,EAAA,UAAU,EAAC;CAA3D,IAAM,oBAAoB,qBAAqBA,EAAa,GACtD,oBAAoB,qBAAqB,YAAY,GAGvDC;CACE,AAAA,EAAA,QAAA,qBAAA,EAAA,QACA,YAAA,EAAA,QACO,YAHT,KAAA,cAAc;EACZ;EACA;EACA,OAAO;CACT,CAAC,GAHC,EAAA,MAAA,mBACA,EAAA,MAAA,UACO,EAAA,MAAA;CALb,IAAM,yBAAyBC,IAUZC;;EACMC,IAAAA;EAErB,AAAA,EAAA,QAAA,qBAAA,EAAA,QACA,0BAAA,EAAA,QAFA,kBADqB,KAAA;GACrB;GACA;GACA;GACA,WAAW;EACb,GAHE,EAAA,MAAA,mBACA,EAAA,MAAA,wBAFA,EAAA,MAAA;EADF,IAAM,iBAAiBA;EAMvB,IAAI,mBAAmB;GACdC,IAAAA;GAAP,AAAW,EAAA,QAAA,kBAAA,EAAA,QAAgB,qBAApB,KAAA,CAAC,GAAG,gBAAgB,iBAAiB,GAAjC,EAAA,MAAA,gBAAgB,EAAA,MAAA,6CAA3B,KAAOA;GAAP,MAAA;EACF;EACA,KAAO;;CAVT,IAAM,aAAaF,IAaTG;CACJ,AAAA,EAAA,QAAA,cAAA,EAAA,QAC8B,kBAF1B,WAAM;EACd,AAAI,cACF,oBAAoB,YAAY,kBAAkB,CAAC,CAAC;CAGxD,GAJM,EAAA,MAAA,YAC8B,EAAA,MAAA;CAGjCC,IAAAA;CALH,AAKI,EAAA,QAAA,cAAA,EAAA,QAAY,kBAAA,EAAA,QAAgB,SAA7B,KAAA;EAAC;EAAY;EAAgB;CAAK,GAAjC,EAAA,MAAA,YAAY,EAAA,MAAA,gBAAgB,EAAA,MAAA,iCALhC,UAAUD,IAKPC,EAAmC;CAENC,IAAAA;CAQf,AAAA,EAAA,QAAA,kBAAA,EAAA,QALN,SAHqB,YACvB;EACL,MAAM;GACJ,KAAK,SAAS;GACd,WAAW;IACT,MAAM;IACN,QAAQ,CAAC;KAAC,QAAQ;KAAG,MAAM;IAAC,CAAC;GAC/B;GACA,WAAW,kBAAkB,CAAC;EAChC;EACA,QAAQ;CACV,IAHe,EAAA,MAAA,gBALN,EAAA,MAAA;CAHX,IAAM,CAAC,gBAAgB,SAASA,EAY/B,GAEsCC;sDAAC,MAAA,SAAqB;EAC3D,cAAc,IAAI;CACpB;CAFA,IAAM,qBAAqBC,IAMvBC;0CAAkB,KAAA,kBAAA,EAChB,qBAAqB,GACvB,GAFA,EAAA,MAAA;CAFJ,IAAM,aAAaC,IASjBC;CADF,OASgB,EAAA,QAAA,cAAA,EAAA,QAPR,mBAAA,EAAA,QAIG,mBAAA,EAAA,QADK,cAAA,EAAA,QAGE,gBAAA,EAAA,QAEJ,YAAA,EAAA,QANL,OAAA,EAAA,QADE,SAFT,KAAA,oBAAC,YAAD;EACE,GAAI;EACG;EACF;EACO;EACZ,OAAO;EACP,gBAAgB;EACF;EACF;EACF;CACX,CAAA,GAFa,EAAA,MAAA,YAPR,EAAA,MAAA,iBAIG,EAAA,MAAA,iBADK,EAAA,MAAA,YAGE,EAAA,MAAA,cAEJ,EAAA,MAAA,UANL,EAAA,MAAA,KADE,EAAA,MAAA,iCAFTA;AAYJ;AAEA,SAAS,qBAAqB,MAAe;eACrC,aAAa,WAAW,sBAAsB,GAE9C,CAAC,mBAAmB,wBAAwB,SAAgC,GAExEC;CACwBC,AAAAA,EAAAA,OAAAA,YAAAA,aAAAA,EAAAA,OAGc,QAJtC,WAAM;EAId,IAAM,WAAW,CAFF,GADK,YAAY,aAAa,CAAC,GACf,GAAG,gBAEjB,CAAA,CAAM,MAAM,MAAM,EAAE,SAAS,IAAI;EAClD,AAAK,UAAU,UACb,QAAQ,KACN,uCAAuC,KAAK,wCAC9C;EAEF,IAAI,SAAS;EAcb,OAbA,QAAQ,QAAQ,UAAU,OAAO,CAAC,CAAC,CAChC,MAAM,cAAc;GACnB,AAAI,UACF,qBAAqB,SAAS;EAGlC,CAAC,CAAC,CACD,OAAO,MAAM;GAEZ,AADA,QAAQ,MAAM,gCAAgC,QAAQ,CAAC,GACnD,UACF,qBAAqB,KAAA,CAAS;EAElC,CAAC,SACU;GACX,SAAS;EACX;CACF,GA1BkCA,EAAAA,KAAAA,YAAAA,WAGc,EAAA,KAAA;CAuB7CC,IAAAA;CAEH,OAFU,EAAA,OAAA,cAAA,EAAA,OAAN,QAAD,KAAA,CAAC,MAAM,UAAU,GAAV,EAAA,KAAA,YAAN,EAAA,KAAA,8BA3BJ,UAAUF,IA2BPE,EAAkB,GAEd;AACT"}
\ No newline at end of file