@sanity/code-input 5.2.0 → 5.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/CodeMirrorProxy.cjs +16 -38
- package/lib/_chunks-cjs/CodeMirrorProxy.cjs.map +1 -1
- package/lib/_chunks-cjs/index.cjs +17 -38
- package/lib/_chunks-cjs/index.cjs.map +1 -1
- package/lib/_chunks-es/CodeMirrorProxy.js +18 -40
- package/lib/_chunks-es/CodeMirrorProxy.js.map +1 -1
- package/lib/_chunks-es/index.js +17 -38
- package/lib/_chunks-es/index.js.map +1 -1
- package/package.json +8 -8
- package/src/sanity-ui.d.ts +6 -0
- package/lib/_legacy/CodeMirrorProxy.esm.js +0 -417
- package/lib/_legacy/CodeMirrorProxy.esm.js.map +0 -1
- package/lib/_legacy/index.esm.js +0 -458
- package/lib/_legacy/index.esm.js.map +0 -1
- package/lib/index.esm.js +0 -8
- package/lib/index.esm.js.map +0 -1
|
@@ -190,7 +190,7 @@ const highlightLine = (config) => {
|
|
|
190
190
|
return editorView.state.field(lineHighlightField).between(line.from, line.to, (from, to, value) => {
|
|
191
191
|
if (value)
|
|
192
192
|
return isHighlighted = !0, !1;
|
|
193
|
-
}), isHighlighted ? editorView.dispatch({ effects: removeLineHighlight.of(line.from) }) : editorView.dispatch({ effects: addLineHighlight.of(line.from) }), config
|
|
193
|
+
}), isHighlighted ? editorView.dispatch({ effects: removeLineHighlight.of(line.from) }) : editorView.dispatch({ effects: addLineHighlight.of(line.from) }), config?.onHighlightChange && config.onHighlightChange(editorView.state.toJSON(highlightState).highlight), !0;
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
}),
|
|
@@ -202,7 +202,7 @@ function setHighlightedLines(view2, highlightLines) {
|
|
|
202
202
|
view2.dispatch({
|
|
203
203
|
effects: allLineNumbers.map((lineNumber) => {
|
|
204
204
|
const line = doc.line(lineNumber);
|
|
205
|
-
return highlightLines
|
|
205
|
+
return highlightLines?.includes(lineNumber) ? addLineHighlight.of(line.from) : removeLineHighlight.of(line.from);
|
|
206
206
|
})
|
|
207
207
|
});
|
|
208
208
|
}
|
|
@@ -324,39 +324,17 @@ function useFontSizeExtension(props) {
|
|
|
324
324
|
});
|
|
325
325
|
}, [fontSizeProp, theme2]);
|
|
326
326
|
}
|
|
327
|
-
var __defProp2 = Object.defineProperty, __defProps = Object.defineProperties, __getOwnPropDescs = Object.getOwnPropertyDescriptors, __getOwnPropSymbols = Object.getOwnPropertySymbols, __hasOwnProp2 = Object.prototype.hasOwnProperty, __propIsEnum = Object.prototype.propertyIsEnumerable, __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues = (a, b) => {
|
|
328
|
-
for (var prop in b || (b = {}))
|
|
329
|
-
__hasOwnProp2.call(b, prop) && __defNormalProp(a, prop, b[prop]);
|
|
330
|
-
if (__getOwnPropSymbols)
|
|
331
|
-
for (var prop of __getOwnPropSymbols(b))
|
|
332
|
-
__propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);
|
|
333
|
-
return a;
|
|
334
|
-
}, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)), __objRest = (source, exclude) => {
|
|
335
|
-
var target = {};
|
|
336
|
-
for (var prop in source)
|
|
337
|
-
__hasOwnProp2.call(source, prop) && exclude.indexOf(prop) < 0 && (target[prop] = source[prop]);
|
|
338
|
-
if (source != null && __getOwnPropSymbols)
|
|
339
|
-
for (var prop of __getOwnPropSymbols(source))
|
|
340
|
-
exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop) && (target[prop] = source[prop]);
|
|
341
|
-
return target;
|
|
342
|
-
};
|
|
343
327
|
const CodeMirrorProxy = react.forwardRef(
|
|
344
328
|
function(props, ref) {
|
|
345
|
-
const
|
|
329
|
+
const {
|
|
346
330
|
basicSetup: basicSetupProp,
|
|
347
331
|
highlightLines,
|
|
348
332
|
languageMode,
|
|
349
333
|
onHighlightChange,
|
|
350
334
|
readOnly,
|
|
351
|
-
value
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
"highlightLines",
|
|
355
|
-
"languageMode",
|
|
356
|
-
"onHighlightChange",
|
|
357
|
-
"readOnly",
|
|
358
|
-
"value"
|
|
359
|
-
]), themeCtx = ui.useRootTheme(), codeMirrorTheme = useCodeMirrorTheme(), [editorView, setEditorView] = react.useState(void 0), themeExtension = useThemeExtension(), fontSizeExtension = useFontSizeExtension({ fontSize: 1 }), languageExtension = useLanguageExtension(languageMode), highlightLineExtension = react.useMemo(
|
|
335
|
+
value,
|
|
336
|
+
...codeMirrorProps
|
|
337
|
+
} = props, themeCtx = ui.useRootTheme(), codeMirrorTheme = useCodeMirrorTheme(), [editorView, setEditorView] = react.useState(void 0), themeExtension = useThemeExtension(), fontSizeExtension = useFontSizeExtension({ fontSize: 1 }), languageExtension = useLanguageExtension(languageMode), highlightLineExtension = react.useMemo(
|
|
360
338
|
() => highlightLine({
|
|
361
339
|
onHighlightChange,
|
|
362
340
|
readOnly,
|
|
@@ -373,29 +351,30 @@ const CodeMirrorProxy = react.forwardRef(
|
|
|
373
351
|
return languageExtension ? [...baseExtensions, languageExtension] : baseExtensions;
|
|
374
352
|
}, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension]);
|
|
375
353
|
react.useEffect(() => {
|
|
376
|
-
editorView && setHighlightedLines(editorView, highlightLines
|
|
354
|
+
editorView && setHighlightedLines(editorView, highlightLines ?? []);
|
|
377
355
|
}, [editorView, highlightLines, value]);
|
|
378
356
|
const initialState = react.useMemo(() => ({
|
|
379
357
|
json: {
|
|
380
|
-
doc: value
|
|
358
|
+
doc: value ?? "",
|
|
381
359
|
selection: {
|
|
382
360
|
main: 0,
|
|
383
361
|
ranges: [{ anchor: 0, head: 0 }]
|
|
384
362
|
},
|
|
385
|
-
highlight: highlightLines
|
|
363
|
+
highlight: highlightLines ?? []
|
|
386
364
|
},
|
|
387
365
|
fields: highlightState
|
|
388
366
|
}), []), handleCreateEditor = react.useCallback((view2) => {
|
|
389
367
|
setEditorView(view2);
|
|
390
368
|
}, []), basicSetup = react.useMemo(
|
|
391
|
-
() => basicSetupProp
|
|
369
|
+
() => basicSetupProp ?? {
|
|
392
370
|
highlightActiveLine: !1
|
|
393
371
|
},
|
|
394
372
|
[basicSetupProp]
|
|
395
373
|
);
|
|
396
374
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
397
375
|
CodeMirror__default.default,
|
|
398
|
-
|
|
376
|
+
{
|
|
377
|
+
...codeMirrorProps,
|
|
399
378
|
value,
|
|
400
379
|
ref,
|
|
401
380
|
extensions,
|
|
@@ -403,20 +382,19 @@ const CodeMirrorProxy = react.forwardRef(
|
|
|
403
382
|
onCreateEditor: handleCreateEditor,
|
|
404
383
|
initialState,
|
|
405
384
|
basicSetup
|
|
406
|
-
}
|
|
385
|
+
}
|
|
407
386
|
);
|
|
408
387
|
}
|
|
409
388
|
);
|
|
410
389
|
function useLanguageExtension(mode) {
|
|
411
390
|
const codeConfig = react.useContext(index.CodeInputConfigContext), [languageExtension, setLanguageExtension] = react.useState();
|
|
412
391
|
return react.useEffect(() => {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
codeMode != null && codeMode.loader || console.warn(
|
|
392
|
+
const codeMode = [...codeConfig?.codeModes ?? [], ...defaultCodeModes].find((m) => m.name === mode);
|
|
393
|
+
codeMode?.loader || console.warn(
|
|
416
394
|
`Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`
|
|
417
395
|
);
|
|
418
396
|
let active = !0;
|
|
419
|
-
return Promise.resolve(codeMode
|
|
397
|
+
return Promise.resolve(codeMode?.loader()).then((extension) => {
|
|
420
398
|
active && setLanguageExtension(extension);
|
|
421
399
|
}).catch((e) => {
|
|
422
400
|
console.error(`Failed to load language mode ${mode}`, e), active && setLanguageExtension(void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeMirrorProxy.cjs","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: () =>\n import('@codemirror/lang-javascript').then(({javascriptLanguage}) => javascriptLanguage),\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/ui@v2.9` 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","/* eslint-disable no-param-reassign */\n\nimport {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\nexport const addLineHighlight = StateEffect.define<number>()\nexport const removeLineHighlight = StateEffect.define<number>()\n\nexport const 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 const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\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 const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\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 const {code: codeFont} = theme.sanity.fonts\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 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 {forwardRef, 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 */\nconst CodeMirrorProxy = forwardRef<ReactCodeMirrorRef, CodeMirrorProps>(\n function CodeMirrorProxy(props, ref) {\n const {\n basicSetup: basicSetupProp,\n highlightLines,\n languageMode,\n onHighlightChange,\n readOnly,\n value,\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 }, [editorView, highlightLines, value])\n\n const initialState = useMemo(() => {\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 // only need to calculate this on initial render\n // eslint-disable-next-line react-hooks/exhaustive-deps\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 />\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 })\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"],"names":["StreamLanguage","StateEffect","StateField","Decoration","state","EditorView","rgba","lineNumbers","view","useRootTheme","useMemo","theme","useTheme","createTheme","t","rem","forwardRef","useState","useEffect","useCallback","jsx","CodeMirror","useContext","CodeInputConfigContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CodeMirrorProxy.cjs","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: () =>\n import('@codemirror/lang-javascript').then(({javascriptLanguage}) => javascriptLanguage),\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/ui@v2.9` 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","/* eslint-disable no-param-reassign */\n\nimport {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\nexport const addLineHighlight = StateEffect.define<number>()\nexport const removeLineHighlight = StateEffect.define<number>()\n\nexport const 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 const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\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 const dark = {color: themeCtx.theme.color.dark[fallbackTone]}\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 const {code: codeFont} = theme.sanity.fonts\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 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 {forwardRef, 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 */\nconst CodeMirrorProxy = forwardRef<ReactCodeMirrorRef, CodeMirrorProps>(\n function CodeMirrorProxy(props, ref) {\n const {\n basicSetup: basicSetupProp,\n highlightLines,\n languageMode,\n onHighlightChange,\n readOnly,\n value,\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 }, [editorView, highlightLines, value])\n\n const initialState = useMemo(() => {\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 // only need to calculate this on initial render\n // eslint-disable-next-line react-hooks/exhaustive-deps\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 />\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 })\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"],"names":["StreamLanguage","StateEffect","StateField","Decoration","state","EditorView","rgba","lineNumbers","view","useRootTheme","useMemo","theme","useTheme","createTheme","t","rem","forwardRef","useState","useEffect","useCallback","jsx","CodeMirror","useContext","CodeInputConfigContext"],"mappings":"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"}
|
|
@@ -40,18 +40,15 @@ const SUPPORTED_LANGUAGES = [
|
|
|
40
40
|
{ title: "YAML", value: "yaml" }
|
|
41
41
|
], LANGUAGE_ALIASES = { js: "javascript" }, PATH_CODE = ["code"], defaultLanguageMode = "text";
|
|
42
42
|
function useLanguageMode(schemaType, value) {
|
|
43
|
-
|
|
44
|
-
const languages = useLanguageAlternatives(schemaType), fixedLanguage = (_a = schemaType.options) == null ? void 0 : _a.language, language = (_c = (_b = value == null ? void 0 : value.language) != null ? _b : fixedLanguage) != null ? _c : defaultLanguageMode, configured = languages.find((entry) => entry.value === language), languageMode = (_e = (_d = configured == null ? void 0 : configured.mode) != null ? _d : resolveAliasedLanguage(language)) != null ? _e : defaultLanguageMode;
|
|
43
|
+
const languages = useLanguageAlternatives(schemaType), fixedLanguage = schemaType.options?.language, language = value?.language ?? fixedLanguage ?? defaultLanguageMode, languageMode = languages.find((entry) => entry.value === language)?.mode ?? resolveAliasedLanguage(language) ?? defaultLanguageMode;
|
|
45
44
|
return { language, languageMode, languages };
|
|
46
45
|
}
|
|
47
46
|
function resolveAliasedLanguage(lang) {
|
|
48
|
-
|
|
49
|
-
return (_a = lang && LANGUAGE_ALIASES[lang]) != null ? _a : lang;
|
|
47
|
+
return (lang && LANGUAGE_ALIASES[lang]) ?? lang;
|
|
50
48
|
}
|
|
51
49
|
function useLanguageAlternatives(type) {
|
|
52
50
|
return react.useMemo(() => {
|
|
53
|
-
|
|
54
|
-
const languageAlternatives = (_a = type.options) == null ? void 0 : _a.languageAlternatives;
|
|
51
|
+
const languageAlternatives = type.options?.languageAlternatives;
|
|
55
52
|
if (!languageAlternatives)
|
|
56
53
|
return SUPPORTED_LANGUAGES;
|
|
57
54
|
if (!Array.isArray(languageAlternatives))
|
|
@@ -69,14 +66,6 @@ function useLanguageAlternatives(type) {
|
|
|
69
66
|
}, []);
|
|
70
67
|
}, [type]);
|
|
71
68
|
}
|
|
72
|
-
var __defProp$1 = Object.defineProperty, __defProps$1 = Object.defineProperties, __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors, __getOwnPropSymbols$1 = Object.getOwnPropertySymbols, __hasOwnProp$1 = Object.prototype.hasOwnProperty, __propIsEnum$1 = Object.prototype.propertyIsEnumerable, __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$1 = (a, b) => {
|
|
73
|
-
for (var prop in b || (b = {}))
|
|
74
|
-
__hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
|
|
75
|
-
if (__getOwnPropSymbols$1)
|
|
76
|
-
for (var prop of __getOwnPropSymbols$1(b))
|
|
77
|
-
__propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
|
|
78
|
-
return a;
|
|
79
|
-
}, __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
80
69
|
function LanguageInput(props) {
|
|
81
70
|
const { language, languages, onChange, elementProps } = props, handleChange = react.useCallback(
|
|
82
71
|
(e) => {
|
|
@@ -85,7 +74,7 @@ function LanguageInput(props) {
|
|
|
85
74
|
},
|
|
86
75
|
[onChange]
|
|
87
76
|
);
|
|
88
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Select,
|
|
77
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ui.Select, { ...elementProps, value: language, onChange: handleChange, children: languages.map((lang) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: lang.value, children: lang.title }, lang.value)) });
|
|
89
78
|
}
|
|
90
79
|
function LanguageField(props) {
|
|
91
80
|
const { member, languages, language, renderItem, renderField, renderPreview } = props, renderInput = react.useCallback(
|
|
@@ -161,7 +150,6 @@ const EditorContainer = styled__default.default(ui.Card)(({ theme }) => {
|
|
|
161
150
|
`;
|
|
162
151
|
});
|
|
163
152
|
function CodeInput(props) {
|
|
164
|
-
var _a;
|
|
165
153
|
const {
|
|
166
154
|
members,
|
|
167
155
|
elementProps,
|
|
@@ -181,8 +169,7 @@ function CodeInput(props) {
|
|
|
181
169
|
[onChange]
|
|
182
170
|
), handleCodeChange = react.useCallback(
|
|
183
171
|
(code) => {
|
|
184
|
-
|
|
185
|
-
const path = PATH_CODE, fixedLanguage = (_a2 = type.options) == null ? void 0 : _a2.language;
|
|
172
|
+
const path = PATH_CODE, fixedLanguage = type.options?.language;
|
|
186
173
|
onChange([
|
|
187
174
|
sanity.setIfMissing({ _type: type.name, language: fixedLanguage }),
|
|
188
175
|
code ? sanity.set(code, path) : sanity.unset(path)
|
|
@@ -200,7 +187,7 @@ function CodeInput(props) {
|
|
|
200
187
|
languageMode,
|
|
201
188
|
onChange: handleCodeChange,
|
|
202
189
|
value: inputProps.value,
|
|
203
|
-
highlightLines: value
|
|
190
|
+
highlightLines: value?.highlightedLines,
|
|
204
191
|
onHighlightChange,
|
|
205
192
|
readOnly,
|
|
206
193
|
onFocus: handleCodeFocus,
|
|
@@ -233,7 +220,7 @@ function CodeInput(props) {
|
|
|
233
220
|
renderPreview
|
|
234
221
|
}
|
|
235
222
|
),
|
|
236
|
-
|
|
223
|
+
type.options?.withFilename && filenameMember && /* @__PURE__ */ jsxRuntime.jsx(
|
|
237
224
|
sanity.MemberField,
|
|
238
225
|
{
|
|
239
226
|
member: filenameMember,
|
|
@@ -350,15 +337,15 @@ const PreviewContainer = styled__default.default(ui.Box)`
|
|
|
350
337
|
function PreviewCode(props) {
|
|
351
338
|
const { selection, schemaType: type } = props, { languageMode } = useLanguageMode(type, props.selection), CodeMirror = useCodeMirror();
|
|
352
339
|
return /* @__PURE__ */ jsxRuntime.jsx(PreviewContainer, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Card, { padding: 4, children: [
|
|
353
|
-
selection
|
|
340
|
+
selection?.filename || selection?.language ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
354
341
|
ui.Card,
|
|
355
342
|
{
|
|
356
343
|
paddingBottom: 4,
|
|
357
344
|
marginBottom: selection.code ? 4 : 0,
|
|
358
345
|
borderBottom: !!selection.code,
|
|
359
346
|
children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { align: "center", justify: "flex-end", children: [
|
|
360
|
-
selection
|
|
361
|
-
selection
|
|
347
|
+
selection?.filename ? /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { flex: 1, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { children: /* @__PURE__ */ jsxRuntime.jsx("code", { children: selection.filename }) }) }) : null,
|
|
348
|
+
selection?.language ? /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { muted: !0, children: selection.language }) : null
|
|
362
349
|
] })
|
|
363
350
|
}
|
|
364
351
|
) : null,
|
|
@@ -367,8 +354,8 @@ function PreviewCode(props) {
|
|
|
367
354
|
{
|
|
368
355
|
readOnly: !0,
|
|
369
356
|
editable: !1,
|
|
370
|
-
value:
|
|
371
|
-
highlightLines:
|
|
357
|
+
value: selection?.code || "",
|
|
358
|
+
highlightLines: selection?.highlightedLines || [],
|
|
372
359
|
basicSetup: {
|
|
373
360
|
lineNumbers: !1,
|
|
374
361
|
foldGutter: !1,
|
|
@@ -424,31 +411,23 @@ const codeTypeName = "code", codeSchema = sanity.defineType({
|
|
|
424
411
|
},
|
|
425
412
|
prepare: (value) => ({
|
|
426
413
|
title: value.filename || (value.language || "unknown").toUpperCase(),
|
|
427
|
-
media: getMedia(value
|
|
414
|
+
media: getMedia(value?.language),
|
|
428
415
|
selection: value
|
|
429
416
|
})
|
|
430
417
|
}
|
|
431
|
-
}), CodeInputConfigContext = react.createContext(void 0)
|
|
432
|
-
var __defProp = Object.defineProperty, __defProps = Object.defineProperties, __getOwnPropDescs = Object.getOwnPropertyDescriptors, __getOwnPropSymbols = Object.getOwnPropertySymbols, __hasOwnProp = Object.prototype.hasOwnProperty, __propIsEnum = Object.prototype.propertyIsEnumerable, __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues = (a, b) => {
|
|
433
|
-
for (var prop in b || (b = {}))
|
|
434
|
-
__hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);
|
|
435
|
-
if (__getOwnPropSymbols)
|
|
436
|
-
for (var prop of __getOwnPropSymbols(b))
|
|
437
|
-
__propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);
|
|
438
|
-
return a;
|
|
439
|
-
}, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
440
|
-
const codeInput = sanity.definePlugin((config) => {
|
|
418
|
+
}), CodeInputConfigContext = react.createContext(void 0), codeInput = sanity.definePlugin((config) => {
|
|
441
419
|
const codeModes = config && config.codeModes, basePlugin = {
|
|
442
420
|
name: "@sanity/code-input",
|
|
443
421
|
schema: { types: [codeSchema] }
|
|
444
422
|
};
|
|
445
|
-
return codeModes ?
|
|
423
|
+
return codeModes ? {
|
|
424
|
+
...basePlugin,
|
|
446
425
|
form: {
|
|
447
426
|
components: {
|
|
448
427
|
input: (props) => props.id !== "root" ? props.renderDefault(props) : /* @__PURE__ */ jsxRuntime.jsx(CodeInputConfigContext.Provider, { value: config, children: props.renderDefault(props) })
|
|
449
428
|
}
|
|
450
429
|
}
|
|
451
|
-
}
|
|
430
|
+
} : basePlugin;
|
|
452
431
|
});
|
|
453
432
|
exports.CodeInputConfigContext = CodeInputConfigContext;
|
|
454
433
|
exports.PreviewCode = PreviewCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/codemirror/useCodeMirror.tsx","../../src/config.ts","../../src/codemirror/useLanguageMode.tsx","../../src/LanguageInput.tsx","../../src/LanguageField.tsx","../../src/ui/focusRingStyle.ts","../../src/useFieldMember.ts","../../src/CodeInput.tsx","../../src/getMedia.tsx","../../src/PreviewCode.tsx","../../src/schema.tsx","../../src/codemirror/CodeModeContext.tsx","../../src/plugin.tsx"],"sourcesContent":["import {lazy, useEffect, useState} from 'react'\n\nexport const CodeMirrorProxy = lazy(() => import('./CodeMirrorProxy'))\n\nexport function useCodeMirror() {\n const [mounted, setMounted] = useState(false)\n useEffect(() => {\n requestAnimationFrame(() => setMounted(true))\n }, [])\n\n return mounted ? CodeMirrorProxy : null\n}\n","import {CodeInputLanguage} from './types'\n\n// NOTE: MAKE SURE THESE ALIGN WITH CODE MODES IN ./codemirror/defaultCodeModes.ts\nexport const SUPPORTED_LANGUAGES: CodeInputLanguage[] = [\n {title: 'Batch file', value: 'batchfile'},\n {title: 'C#', value: 'csharp'},\n {title: 'CSS', value: 'css'},\n {title: 'Go', value: 'golang'},\n {title: 'GROQ', value: 'groq'},\n {title: 'HTML', value: 'html'},\n {title: 'Java', value: 'java'},\n {title: 'JavaScript', value: 'javascript'},\n {title: 'JSON', value: 'json'},\n {title: 'JSX', value: 'jsx'},\n {title: 'Markdown', value: 'markdown'},\n {title: 'MySQL', value: 'mysql'},\n {title: 'PHP', value: 'php'},\n {title: 'Plain text', value: 'text'},\n {title: 'Python', value: 'python'},\n {title: 'Ruby', value: 'ruby'},\n {title: 'SASS', value: 'sass'},\n {title: 'SCSS', value: 'scss'},\n {title: 'sh', value: 'sh'},\n {title: 'SQL', value: 'sql'},\n {title: 'TSX', value: 'tsx'},\n {title: 'TypeScript', value: 'typescript'},\n {title: 'XML', value: 'xml'},\n {title: 'YAML', value: 'yaml'},\n]\n\nexport const LANGUAGE_ALIASES: Record<string, string | undefined> = {js: 'javascript'}\n\nexport const PATH_LANGUAGE = ['language']\nexport const PATH_CODE = ['code']\nexport const PATH_FILENAME = ['filename']\n","import {useMemo} from 'react'\n\nimport {LANGUAGE_ALIASES, SUPPORTED_LANGUAGES} from '../config'\nimport type {CodeInputLanguage, CodeInputValue, CodeSchemaType} from '../types'\n\nexport const defaultLanguageMode = 'text'\n\nexport function useLanguageMode(\n schemaType: CodeSchemaType,\n value?: CodeInputValue,\n): {\n language: string\n languageMode: string\n languages: CodeInputLanguage[]\n} {\n const languages = useLanguageAlternatives(schemaType)\n const fixedLanguage = schemaType.options?.language\n const language = value?.language ?? fixedLanguage ?? defaultLanguageMode\n\n // the language config from the schema\n const configured = languages.find((entry) => entry.value === language)\n const languageMode = configured?.mode ?? resolveAliasedLanguage(language) ?? defaultLanguageMode\n\n return {language, languageMode, languages}\n}\n\nfunction resolveAliasedLanguage(lang?: string) {\n return (lang && LANGUAGE_ALIASES[lang]) ?? lang\n}\n\nfunction useLanguageAlternatives(type: CodeSchemaType) {\n return useMemo((): CodeInputLanguage[] => {\n const languageAlternatives = type.options?.languageAlternatives\n if (!languageAlternatives) {\n return SUPPORTED_LANGUAGES\n }\n\n if (!Array.isArray(languageAlternatives)) {\n throw new Error(\n `'options.languageAlternatives' should be an array, got ${typeof languageAlternatives}`,\n )\n }\n\n return languageAlternatives.reduce((acc: CodeInputLanguage[], {title, value: val, mode}) => {\n const alias = LANGUAGE_ALIASES[val]\n if (alias) {\n // eslint-disable-next-line no-console\n console.warn(\n `'options.languageAlternatives' lists a language with value \"%s\", which is an alias of \"%s\" - please replace the value to read \"%s\"`,\n val,\n alias,\n alias,\n )\n\n return acc.concat({title, value: alias, mode: mode})\n }\n return acc.concat({title, value: val, mode})\n }, [])\n }, [type])\n}\n","import {Select} from '@sanity/ui'\nimport {type ChangeEvent, useCallback} from 'react'\nimport {set, type StringInputProps, unset} from 'sanity'\n\nimport {CodeInputLanguage} from './types'\n\nexport interface LanguageInputProps {\n language: string\n languages: CodeInputLanguage[]\n onChange: StringInputProps['onChange']\n elementProps: StringInputProps['elementProps']\n}\n\n/** @internal */\nexport function LanguageInput(props: LanguageInputProps) {\n const {language, languages, onChange, elementProps} = props\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLSelectElement>) => {\n const newValue = e.currentTarget.value\n onChange(newValue ? set(newValue) : unset())\n },\n [onChange],\n )\n\n return (\n <Select {...elementProps} value={language} onChange={handleChange}>\n {languages.map((lang: {title: string; value: string}) => (\n <option key={lang.value} value={lang.value}>\n {lang.title}\n </option>\n ))}\n </Select>\n )\n}\n","import {useCallback} from 'react'\nimport {\n FieldMember,\n type InputProps,\n MemberField,\n type MemberFieldProps,\n type PrimitiveInputElementProps,\n} from 'sanity'\n\nimport {LanguageInput} from './LanguageInput'\nimport type {CodeInputLanguage} from './types'\n\nexport function LanguageField(\n props: MemberFieldProps & {member: FieldMember; language: string; languages: CodeInputLanguage[]},\n) {\n const {member, languages, language, renderItem, renderField, renderPreview} = props\n\n const renderInput = useCallback(\n ({elementProps, onChange}: Omit<InputProps, 'renderDefault'>) => {\n return (\n <LanguageInput\n onChange={onChange}\n elementProps={elementProps as PrimitiveInputElementProps}\n language={language}\n languages={languages}\n />\n )\n },\n [languages, language],\n )\n\n return (\n <MemberField\n member={member}\n renderItem={renderItem}\n renderField={renderField}\n renderInput={renderInput}\n renderPreview={renderPreview}\n />\n )\n}\n","/** @internal */\n// todo: import from @sanity/ui instead\nexport function focusRingBorderStyle(border: {color: string; width: number}): string {\n return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\n/** @internal */\n// todo: import from @sanity/ui instead\nexport function focusRingStyle(opts: {\n base?: {bg: string}\n border?: {color: string; width: number}\n focusRing: {offset: number; width: number}\n}): string {\n const {base, border, focusRing} = opts\n const focusRingOutsetWidth = focusRing.offset + focusRing.width\n const focusRingInsetWidth = 0 - focusRing.offset\n const bgColor = base ? base.bg : 'var(--card-bg-color)'\n\n return [\n focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`,\n border && focusRingBorderStyle(border),\n focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`,\n focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`,\n ]\n .filter(Boolean)\n .join(',')\n}\n","import {useMemo} from 'react'\nimport {FieldMember, ObjectMember} from 'sanity'\n\n/** @internal */\nexport function useFieldMember(\n members: ObjectMember[],\n fieldName: string,\n): FieldMember | undefined {\n return useMemo(\n () =>\n members.find(\n (member): member is FieldMember => member.kind === 'field' && member.name === fieldName,\n ),\n [members, fieldName],\n )\n}\n","import {Box, Card, Stack, Text} from '@sanity/ui'\nimport {Suspense, useCallback} from 'react'\nimport {MemberField, ObjectInputProps, RenderInputCallback, set, setIfMissing, unset} from 'sanity'\nimport styled, {css} from 'styled-components'\n\nimport {useCodeMirror} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport {PATH_CODE} from './config'\nimport {LanguageField} from './LanguageField'\nimport {CodeInputValue, CodeSchemaType} from './types'\nimport {focusRingBorderStyle, focusRingStyle} from './ui/focusRingStyle'\nimport {useFieldMember} from './useFieldMember'\n\nexport type {CodeInputLanguage, CodeInputValue} from './types'\n\n/**\n * @public\n */\nexport interface CodeInputProps extends ObjectInputProps<CodeInputValue, CodeSchemaType> {}\n\nconst EditorContainer = styled(Card)(({theme}) => {\n const {focusRing, input} = theme.sanity\n const base = theme.sanity.color.base\n const color = theme.sanity.color.input\n const border = {\n color: color.default.enabled.border,\n width: input.border.width,\n }\n\n return css`\n --input-box-shadow: ${focusRingBorderStyle(border)};\n\n box-shadow: var(--input-box-shadow);\n height: 250px;\n min-height: 80px;\n overflow-y: auto;\n position: relative;\n resize: vertical;\n z-index: 0;\n\n & > .cm-theme {\n height: 100%;\n }\n\n &:focus-within {\n --input-box-shadow: ${focusRingStyle({\n base,\n border,\n focusRing,\n })};\n }\n `\n})\n\n/** @public */\nexport function CodeInput(props: CodeInputProps) {\n const {\n members,\n elementProps,\n onChange,\n readOnly,\n renderField,\n renderInput,\n renderItem,\n renderPreview,\n schemaType: type,\n value,\n onPathFocus,\n } = props\n\n const languageFieldMember = useFieldMember(members, 'language')\n const filenameMember = useFieldMember(members, 'filename')\n const codeFieldMember = useFieldMember(members, 'code')\n\n const handleCodeFocus = useCallback(() => {\n onPathFocus(PATH_CODE)\n }, [onPathFocus])\n\n const onHighlightChange = useCallback(\n (lines: number[]) => onChange(set(lines, ['highlightedLines'])),\n [onChange],\n )\n\n const handleCodeChange = useCallback(\n (code: string) => {\n const path = PATH_CODE\n const fixedLanguage = type.options?.language\n\n onChange([\n setIfMissing({_type: type.name, language: fixedLanguage}),\n code ? set(code, path) : unset(path),\n ])\n },\n [onChange, type],\n )\n const {languages, language, languageMode} = useLanguageMode(props.schemaType, props.value)\n\n const CodeMirror = useCodeMirror()\n\n const renderCodeInput: RenderInputCallback = useCallback(\n (inputProps) => {\n return (\n <EditorContainer border overflow=\"hidden\" radius={1} sizing=\"border\" readOnly={readOnly}>\n {CodeMirror && (\n <Suspense\n fallback={\n <Box padding={3}>\n <Text>Loading code editor...</Text>\n </Box>\n }\n >\n <CodeMirror\n languageMode={languageMode}\n onChange={handleCodeChange}\n value={inputProps.value as string}\n highlightLines={value?.highlightedLines}\n onHighlightChange={onHighlightChange}\n readOnly={readOnly}\n onFocus={handleCodeFocus}\n onBlur={elementProps.onBlur}\n />\n </Suspense>\n )}\n </EditorContainer>\n )\n },\n [\n CodeMirror,\n handleCodeChange,\n handleCodeFocus,\n onHighlightChange,\n languageMode,\n elementProps.onBlur,\n readOnly,\n value,\n ],\n )\n\n return (\n <Stack space={4}>\n {languageFieldMember && (\n <LanguageField\n member={languageFieldMember}\n language={language}\n languages={languages}\n renderField={renderField}\n renderItem={renderItem}\n renderInput={renderInput}\n renderPreview={renderPreview}\n />\n )}\n\n {type.options?.withFilename && filenameMember && (\n <MemberField\n member={filenameMember}\n renderItem={renderItem}\n renderField={renderField}\n renderInput={renderInput}\n renderPreview={renderPreview}\n />\n )}\n\n {codeFieldMember && (\n <MemberField\n member={codeFieldMember}\n renderInput={renderCodeInput}\n renderItem={renderItem}\n renderField={renderField}\n renderPreview={renderPreview}\n />\n )}\n </Stack>\n )\n}\n","export function getMedia(language?: string) {\n if (language === 'jsx') {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\">\n <g fill=\"#61DAFB\">\n <circle cx=\"64\" cy=\"64\" r=\"11.4\" />\n <path d=\"M107.3 45.2c-2.2-.8-4.5-1.6-6.9-2.3.6-2.4 1.1-4.8 1.5-7.1 2.1-13.2-.2-22.5-6.6-26.1-1.9-1.1-4-1.6-6.4-1.6-7 0-15.9 5.2-24.9 13.9-9-8.7-17.9-13.9-24.9-13.9-2.4 0-4.5.5-6.4 1.6-6.4 3.7-8.7 13-6.6 26.1.4 2.3.9 4.7 1.5 7.1-2.4.7-4.7 1.4-6.9 2.3C8.2 50 1.4 56.6 1.4 64s6.9 14 19.3 18.8c2.2.8 4.5 1.6 6.9 2.3-.6 2.4-1.1 4.8-1.5 7.1-2.1 13.2.2 22.5 6.6 26.1 1.9 1.1 4 1.6 6.4 1.6 7.1 0 16-5.2 24.9-13.9 9 8.7 17.9 13.9 24.9 13.9 2.4 0 4.5-.5 6.4-1.6 6.4-3.7 8.7-13 6.6-26.1-.4-2.3-.9-4.7-1.5-7.1 2.4-.7 4.7-1.4 6.9-2.3 12.5-4.8 19.3-11.4 19.3-18.8s-6.8-14-19.3-18.8zM92.5 14.7c4.1 2.4 5.5 9.8 3.8 20.3-.3 2.1-.8 4.3-1.4 6.6-5.2-1.2-10.7-2-16.5-2.5-3.4-4.8-6.9-9.1-10.4-13 7.4-7.3 14.9-12.3 21-12.3 1.3 0 2.5.3 3.5.9zM81.3 74c-1.8 3.2-3.9 6.4-6.1 9.6-3.7.3-7.4.4-11.2.4-3.9 0-7.6-.1-11.2-.4-2.2-3.2-4.2-6.4-6-9.6-1.9-3.3-3.7-6.7-5.3-10 1.6-3.3 3.4-6.7 5.3-10 1.8-3.2 3.9-6.4 6.1-9.6 3.7-.3 7.4-.4 11.2-.4 3.9 0 7.6.1 11.2.4 2.2 3.2 4.2 6.4 6 9.6 1.9 3.3 3.7 6.7 5.3 10-1.7 3.3-3.4 6.6-5.3 10zm8.3-3.3c1.5 3.5 2.7 6.9 3.8 10.3-3.4.8-7 1.4-10.8 1.9 1.2-1.9 2.5-3.9 3.6-6 1.2-2.1 2.3-4.2 3.4-6.2zM64 97.8c-2.4-2.6-4.7-5.4-6.9-8.3 2.3.1 4.6.2 6.9.2 2.3 0 4.6-.1 6.9-.2-2.2 2.9-4.5 5.7-6.9 8.3zm-18.6-15c-3.8-.5-7.4-1.1-10.8-1.9 1.1-3.3 2.3-6.8 3.8-10.3 1.1 2 2.2 4.1 3.4 6.1 1.2 2.2 2.4 4.1 3.6 6.1zm-7-25.5c-1.5-3.5-2.7-6.9-3.8-10.3 3.4-.8 7-1.4 10.8-1.9-1.2 1.9-2.5 3.9-3.6 6-1.2 2.1-2.3 4.2-3.4 6.2zM64 30.2c2.4 2.6 4.7 5.4 6.9 8.3-2.3-.1-4.6-.2-6.9-.2-2.3 0-4.6.1-6.9.2 2.2-2.9 4.5-5.7 6.9-8.3zm22.2 21l-3.6-6c3.8.5 7.4 1.1 10.8 1.9-1.1 3.3-2.3 6.8-3.8 10.3-1.1-2.1-2.2-4.2-3.4-6.2zM31.7 35c-1.7-10.5-.3-17.9 3.8-20.3 1-.6 2.2-.9 3.5-.9 6 0 13.5 4.9 21 12.3-3.5 3.8-7 8.2-10.4 13-5.8.5-11.3 1.4-16.5 2.5-.6-2.3-1-4.5-1.4-6.6zM7 64c0-4.7 5.7-9.7 15.7-13.4 2-.8 4.2-1.5 6.4-2.1 1.6 5 3.6 10.3 6 15.6-2.4 5.3-4.5 10.5-6 15.5C15.3 75.6 7 69.6 7 64zm28.5 49.3c-4.1-2.4-5.5-9.8-3.8-20.3.3-2.1.8-4.3 1.4-6.6 5.2 1.2 10.7 2 16.5 2.5 3.4 4.8 6.9 9.1 10.4 13-7.4 7.3-14.9 12.3-21 12.3-1.3 0-2.5-.3-3.5-.9zM96.3 93c1.7 10.5.3 17.9-3.8 20.3-1 .6-2.2.9-3.5.9-6 0-13.5-4.9-21-12.3 3.5-3.8 7-8.2 10.4-13 5.8-.5 11.3-1.4 16.5-2.5.6 2.3 1 4.5 1.4 6.6zm9-15.6c-2 .8-4.2 1.5-6.4 2.1-1.6-5-3.6-10.3-6-15.6 2.4-5.3 4.5-10.5 6-15.5 13.8 4 22.1 10 22.1 15.6 0 4.7-5.8 9.7-15.7 13.4z\" />\n </g>\n </svg>\n )\n }\n\n if (language === 'javascript') {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\">\n <path fill=\"#F0DB4F\" d=\"M1.408 1.408h125.184v125.185H1.408z\" />\n <path\n fill=\"#323330\"\n d=\"M116.347 96.736c-.917-5.711-4.641-10.508-15.672-14.981-3.832-1.761-8.104-3.022-9.377-5.926-.452-1.69-.512-2.642-.226-3.665.821-3.32 4.784-4.355 7.925-3.403 2.023.678 3.938 2.237 5.093 4.724 5.402-3.498 5.391-3.475 9.163-5.879-1.381-2.141-2.118-3.129-3.022-4.045-3.249-3.629-7.676-5.498-14.756-5.355l-3.688.477c-3.534.893-6.902 2.748-8.877 5.235-5.926 6.724-4.236 18.492 2.975 23.335 7.104 5.332 17.54 6.545 18.873 11.531 1.297 6.104-4.486 8.08-10.234 7.378-4.236-.881-6.592-3.034-9.139-6.949-4.688 2.713-4.688 2.713-9.508 5.485 1.143 2.499 2.344 3.63 4.26 5.795 9.068 9.198 31.76 8.746 35.83-5.176.165-.478 1.261-3.666.38-8.581zM69.462 58.943H57.753l-.048 30.272c0 6.438.333 12.34-.714 14.149-1.713 3.558-6.152 3.117-8.175 2.427-2.059-1.012-3.106-2.451-4.319-4.485-.333-.584-.583-1.036-.667-1.071l-9.52 5.83c1.583 3.249 3.915 6.069 6.902 7.901 4.462 2.678 10.459 3.499 16.731 2.059 4.082-1.189 7.604-3.652 9.448-7.401 2.666-4.915 2.094-10.864 2.07-17.444.06-10.735.001-21.468.001-32.237z\"\n />\n </svg>\n )\n }\n\n if (language === 'php') {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 800 400\">\n <g transform=\"translate(-44.632 -141.55)\">\n <g transform=\"matrix(8.3528 0 0 8.3119 -727.13 -3759.5)\">\n <path d=\"m99.974 479.48h14.204c4.1693 0.0354 7.1903 1.2367 9.063 3.604 1.8726 2.3674 2.491 5.6004 1.855 9.699-0.24737 1.8727-0.79504 3.71-1.643 5.512-0.8127 1.802-1.9434 3.4273-3.392 4.876-1.7667 1.8373-3.657 3.0033-5.671 3.498-2.014 0.49467-4.0987 0.742-6.254 0.742h-6.36l-2.014 10.07h-7.367l7.579-38.001m6.201 6.042-3.18 15.9c0.21198 0.0353 0.42398 0.053 0.636 0.053h0.742c3.392 0.0353 6.2186-0.30033 8.48-1.007 2.2613-0.74199 3.7806-3.3213 4.558-7.738 0.63597-3.71-0.00003-5.8476-1.908-6.413-1.8727-0.56531-4.2224-0.83031-7.049-0.795-0.42402 0.0353-0.83035 0.053-1.219 0.053-0.35335 0.00002-0.72435 0.00002-1.113 0l0.053-0.053\" />\n <path d=\"m133.49 469.36h7.314l-2.067 10.123h6.572c3.604 0.0707 6.2893 0.81269 8.056 2.226 1.802 1.4134 2.332 4.0987 1.59 8.056l-3.551 17.649h-7.42l3.392-16.854c0.35328-1.7666 0.2473-3.021-0.318-3.763-0.56536-0.74198-1.7844-1.113-3.657-1.113l-5.883-0.053-4.346 21.783h-7.314l7.632-38.054\" />\n <path d=\"m162.81 479.48h14.204c4.1693 0.0354 7.1903 1.2367 9.063 3.604 1.8726 2.3674 2.491 5.6004 1.855 9.699-0.24737 1.8727-0.79503 3.71-1.643 5.512-0.8127 1.802-1.9434 3.4273-3.392 4.876-1.7667 1.8373-3.657 3.0033-5.671 3.498-2.014 0.49467-4.0987 0.742-6.254 0.742h-6.36l-2.014 10.07h-7.367l7.579-38.001m6.201 6.042-3.18 15.9c0.21199 0.0353 0.42399 0.053 0.636 0.053h0.742c3.392 0.0353 6.2186-0.30033 8.48-1.007 2.2613-0.74199 3.7806-3.3213 4.558-7.738 0.63597-3.71-0.00003-5.8476-1.908-6.413-1.8727-0.56531-4.2224-0.83031-7.049-0.795-0.42402 0.0353-0.83035 0.053-1.219 0.053-0.35335 0.00002-0.72435 0.00002-1.113 0l0.053-0.053\" />\n </g>\n </g>\n </svg>\n )\n }\n\n if (language === 'json') {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 160 160\"\n >\n <defs>\n <linearGradient id=\"a\">\n <stop offset=\"0\" />\n <stop offset=\"1\" stopColor=\"#fff\" />\n </linearGradient>\n <linearGradient\n x1=\"-553.27\"\n y1=\"525.908\"\n x2=\"-666.116\"\n y2=\"413.045\"\n id=\"c\"\n xlinkHref=\"#a\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(.99884 0 0 .9987 689.008 -388.844)\"\n />\n <linearGradient\n x1=\"-666.117\"\n y1=\"413.045\"\n x2=\"-553.27\"\n y2=\"525.908\"\n id=\"b\"\n xlinkHref=\"#a\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(.99884 0 0 .9987 689.008 -388.844)\"\n />\n </defs>\n <path\n d=\"M79.865 119.1c35.397 48.255 70.04-13.469 69.988-50.587-.06-43.886-44.54-68.414-70.017-68.414C38.943.1 0 33.895 0 80.135 0 131.531 44.64 160 79.836 160c-7.965-1.147-34.507-6.834-34.863-67.967-.24-41.346 13.487-57.865 34.805-50.599.477.177 23.514 9.265 23.514 38.95 0 29.56-23.427 38.716-23.427 38.716z\"\n style={{marker: 'none'}}\n color=\"#000\"\n fill=\"url(#b)\"\n fillRule=\"evenodd\"\n overflow=\"visible\"\n />\n <path\n d=\"M79.823 41.4C56.433 33.34 27.78 52.618 27.78 91.23c0 63.048 46.72 68.77 52.384 68.77C121.057 160 160 126.204 160 79.964 160 28.568 115.36.1 80.164.1c9.749-1.35 52.541 10.55 52.541 69.037 0 38.141-31.953 58.905-52.735 50.033-.478-.177-23.514-9.264-23.514-38.95 0-29.56 23.367-38.818 23.367-38.818z\"\n style={{marker: 'none'}}\n color=\"#000\"\n fill=\"url(#c)\"\n fillRule=\"evenodd\"\n overflow=\"visible\"\n />\n </svg>\n )\n }\n\n return undefined\n}\n","import {Box, Card, Flex, Label, Text} from '@sanity/ui'\nimport {Suspense} from 'react'\nimport {PreviewProps} from 'sanity'\nimport styled from 'styled-components'\n\nimport {useCodeMirror} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport {CodeInputValue, CodeSchemaType} from './types'\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n`\n\n/**\n * @public\n */\nexport interface PreviewCodeProps extends PreviewProps {\n selection?: CodeInputValue\n}\n\n/**\n * @public\n */\nexport function PreviewCode(props: PreviewCodeProps) {\n const {selection, schemaType: type} = props\n const {languageMode} = useLanguageMode(type as CodeSchemaType, props.selection)\n\n const CodeMirror = useCodeMirror()\n return (\n <PreviewContainer>\n <Card padding={4}>\n {selection?.filename || selection?.language ? (\n <Card\n paddingBottom={4}\n marginBottom={selection.code ? 4 : 0}\n borderBottom={!!selection.code}\n >\n <Flex align=\"center\" justify=\"flex-end\">\n {selection?.filename ? (\n <Box flex={1}>\n <Text>\n <code>{selection.filename}</code>\n </Text>\n </Box>\n ) : null}\n {selection?.language ? <Label muted>{selection.language}</Label> : null}\n </Flex>\n </Card>\n ) : null}\n {CodeMirror && (\n <Suspense fallback={<Card padding={2}>Loading code preview...</Card>}>\n <CodeMirror\n readOnly\n editable={false}\n value={selection?.code || ''}\n highlightLines={selection?.highlightedLines || []}\n basicSetup={{\n lineNumbers: false,\n foldGutter: false,\n highlightSelectionMatches: false,\n highlightActiveLineGutter: false,\n highlightActiveLine: false,\n }}\n languageMode={languageMode}\n />\n </Suspense>\n )}\n </Card>\n </PreviewContainer>\n )\n}\n","import {CodeBlockIcon} from '@sanity/icons'\nimport {defineType, ObjectDefinition} from 'sanity'\n\nimport {CodeInput} from './CodeInput'\nimport {getMedia} from './getMedia'\nimport {PreviewCode} from './PreviewCode'\nimport {CodeOptions} from './types'\n\n/**\n * @public\n */\nexport const codeTypeName = 'code' as const\n\n/**\n * @public\n */\nexport interface CodeDefinition extends Omit<ObjectDefinition, 'type' | 'fields' | 'options'> {\n type: typeof codeTypeName\n options?: CodeOptions\n}\n\ndeclare module '@sanity/types' {\n // makes type: 'code' narrow correctly when using defineType/defineField/defineArrayMember\n export interface IntrinsicDefinitions {\n code: CodeDefinition\n }\n}\n\n/**\n * @public\n */\nexport const codeSchema = defineType({\n name: 'code',\n type: 'object',\n title: 'Code',\n components: {input: CodeInput, preview: PreviewCode},\n icon: CodeBlockIcon,\n fields: [\n {\n name: 'language',\n title: 'Language',\n type: 'string',\n },\n {\n name: 'filename',\n title: 'Filename',\n type: 'string',\n },\n {\n title: 'Code',\n name: 'code',\n type: 'text',\n },\n {\n title: 'Highlighted lines',\n name: 'highlightedLines',\n type: 'array',\n of: [\n {\n type: 'number',\n title: 'Highlighted line',\n },\n ],\n },\n ],\n preview: {\n select: {\n language: 'language',\n code: 'code',\n filename: 'filename',\n highlightedLines: 'highlightedLines',\n },\n prepare: (value: {\n language?: string\n code?: string\n filename?: string\n highlightedLines?: number[]\n }) => {\n return {\n title: value.filename || (value.language || 'unknown').toUpperCase(),\n media: getMedia(value?.language),\n selection: value,\n }\n },\n },\n})\n","import {createContext} from 'react'\n\nimport type {CodeInputConfig} from '../plugin'\n\nexport const CodeInputConfigContext = createContext<CodeInputConfig | undefined>(undefined)\n","import {definePlugin} from 'sanity'\n\nimport {CodeInputConfigContext} from './codemirror/CodeModeContext'\nimport {CodeMode} from './codemirror/defaultCodeModes'\nimport {codeSchema} from './schema'\n\nexport interface CodeInputConfig {\n codeModes?: CodeMode[]\n}\n\n/**\n * @public\n */\nexport const codeInput = definePlugin<CodeInputConfig | void>((config) => {\n const codeModes = config && config.codeModes\n const basePlugin = {\n name: '@sanity/code-input',\n schema: {types: [codeSchema]},\n }\n if (!codeModes) {\n return basePlugin\n }\n return {\n ...basePlugin,\n form: {\n components: {\n input: (props) => {\n if (props.id !== 'root') {\n return props.renderDefault(props)\n }\n return (\n <CodeInputConfigContext.Provider value={config}>\n {props.renderDefault(props)}\n </CodeInputConfigContext.Provider>\n )\n },\n },\n },\n }\n})\n"],"names":["lazy","useState","useEffect","useMemo","useCallback","set","unset","jsx","Select","MemberField","styled","Card","css","_a","setIfMissing","Suspense","Box","Text","jsxs","Stack","Flex","Label","defineType","CodeBlockIcon","createContext","definePlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/codemirror/useCodeMirror.tsx","../../src/config.ts","../../src/codemirror/useLanguageMode.tsx","../../src/LanguageInput.tsx","../../src/LanguageField.tsx","../../src/ui/focusRingStyle.ts","../../src/useFieldMember.ts","../../src/CodeInput.tsx","../../src/getMedia.tsx","../../src/PreviewCode.tsx","../../src/schema.tsx","../../src/codemirror/CodeModeContext.tsx","../../src/plugin.tsx"],"sourcesContent":["import {lazy, useEffect, useState} from 'react'\n\nexport const CodeMirrorProxy = lazy(() => import('./CodeMirrorProxy'))\n\nexport function useCodeMirror() {\n const [mounted, setMounted] = useState(false)\n useEffect(() => {\n requestAnimationFrame(() => setMounted(true))\n }, [])\n\n return mounted ? CodeMirrorProxy : null\n}\n","import {CodeInputLanguage} from './types'\n\n// NOTE: MAKE SURE THESE ALIGN WITH CODE MODES IN ./codemirror/defaultCodeModes.ts\nexport const SUPPORTED_LANGUAGES: CodeInputLanguage[] = [\n {title: 'Batch file', value: 'batchfile'},\n {title: 'C#', value: 'csharp'},\n {title: 'CSS', value: 'css'},\n {title: 'Go', value: 'golang'},\n {title: 'GROQ', value: 'groq'},\n {title: 'HTML', value: 'html'},\n {title: 'Java', value: 'java'},\n {title: 'JavaScript', value: 'javascript'},\n {title: 'JSON', value: 'json'},\n {title: 'JSX', value: 'jsx'},\n {title: 'Markdown', value: 'markdown'},\n {title: 'MySQL', value: 'mysql'},\n {title: 'PHP', value: 'php'},\n {title: 'Plain text', value: 'text'},\n {title: 'Python', value: 'python'},\n {title: 'Ruby', value: 'ruby'},\n {title: 'SASS', value: 'sass'},\n {title: 'SCSS', value: 'scss'},\n {title: 'sh', value: 'sh'},\n {title: 'SQL', value: 'sql'},\n {title: 'TSX', value: 'tsx'},\n {title: 'TypeScript', value: 'typescript'},\n {title: 'XML', value: 'xml'},\n {title: 'YAML', value: 'yaml'},\n]\n\nexport const LANGUAGE_ALIASES: Record<string, string | undefined> = {js: 'javascript'}\n\nexport const PATH_LANGUAGE = ['language']\nexport const PATH_CODE = ['code']\nexport const PATH_FILENAME = ['filename']\n","import {useMemo} from 'react'\n\nimport {LANGUAGE_ALIASES, SUPPORTED_LANGUAGES} from '../config'\nimport type {CodeInputLanguage, CodeInputValue, CodeSchemaType} from '../types'\n\nexport const defaultLanguageMode = 'text'\n\nexport function useLanguageMode(\n schemaType: CodeSchemaType,\n value?: CodeInputValue,\n): {\n language: string\n languageMode: string\n languages: CodeInputLanguage[]\n} {\n const languages = useLanguageAlternatives(schemaType)\n const fixedLanguage = schemaType.options?.language\n const language = value?.language ?? fixedLanguage ?? defaultLanguageMode\n\n // the language config from the schema\n const configured = languages.find((entry) => entry.value === language)\n const languageMode = configured?.mode ?? resolveAliasedLanguage(language) ?? defaultLanguageMode\n\n return {language, languageMode, languages}\n}\n\nfunction resolveAliasedLanguage(lang?: string) {\n return (lang && LANGUAGE_ALIASES[lang]) ?? lang\n}\n\nfunction useLanguageAlternatives(type: CodeSchemaType) {\n return useMemo((): CodeInputLanguage[] => {\n const languageAlternatives = type.options?.languageAlternatives\n if (!languageAlternatives) {\n return SUPPORTED_LANGUAGES\n }\n\n if (!Array.isArray(languageAlternatives)) {\n throw new Error(\n `'options.languageAlternatives' should be an array, got ${typeof languageAlternatives}`,\n )\n }\n\n return languageAlternatives.reduce((acc: CodeInputLanguage[], {title, value: val, mode}) => {\n const alias = LANGUAGE_ALIASES[val]\n if (alias) {\n // eslint-disable-next-line no-console\n console.warn(\n `'options.languageAlternatives' lists a language with value \"%s\", which is an alias of \"%s\" - please replace the value to read \"%s\"`,\n val,\n alias,\n alias,\n )\n\n return acc.concat({title, value: alias, mode: mode})\n }\n return acc.concat({title, value: val, mode})\n }, [])\n }, [type])\n}\n","import {Select} from '@sanity/ui'\nimport {type ChangeEvent, useCallback} from 'react'\nimport {set, type StringInputProps, unset} from 'sanity'\n\nimport {CodeInputLanguage} from './types'\n\nexport interface LanguageInputProps {\n language: string\n languages: CodeInputLanguage[]\n onChange: StringInputProps['onChange']\n elementProps: StringInputProps['elementProps']\n}\n\n/** @internal */\nexport function LanguageInput(props: LanguageInputProps) {\n const {language, languages, onChange, elementProps} = props\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLSelectElement>) => {\n const newValue = e.currentTarget.value\n onChange(newValue ? set(newValue) : unset())\n },\n [onChange],\n )\n\n return (\n <Select {...elementProps} value={language} onChange={handleChange}>\n {languages.map((lang: {title: string; value: string}) => (\n <option key={lang.value} value={lang.value}>\n {lang.title}\n </option>\n ))}\n </Select>\n )\n}\n","import {useCallback} from 'react'\nimport {\n FieldMember,\n type InputProps,\n MemberField,\n type MemberFieldProps,\n type PrimitiveInputElementProps,\n} from 'sanity'\n\nimport {LanguageInput} from './LanguageInput'\nimport type {CodeInputLanguage} from './types'\n\nexport function LanguageField(\n props: MemberFieldProps & {member: FieldMember; language: string; languages: CodeInputLanguage[]},\n) {\n const {member, languages, language, renderItem, renderField, renderPreview} = props\n\n const renderInput = useCallback(\n ({elementProps, onChange}: Omit<InputProps, 'renderDefault'>) => {\n return (\n <LanguageInput\n onChange={onChange}\n elementProps={elementProps as PrimitiveInputElementProps}\n language={language}\n languages={languages}\n />\n )\n },\n [languages, language],\n )\n\n return (\n <MemberField\n member={member}\n renderItem={renderItem}\n renderField={renderField}\n renderInput={renderInput}\n renderPreview={renderPreview}\n />\n )\n}\n","/** @internal */\n// todo: import from @sanity/ui instead\nexport function focusRingBorderStyle(border: {color: string; width: number}): string {\n return `inset 0 0 0 ${border.width}px ${border.color}`\n}\n\n/** @internal */\n// todo: import from @sanity/ui instead\nexport function focusRingStyle(opts: {\n base?: {bg: string}\n border?: {color: string; width: number}\n focusRing: {offset: number; width: number}\n}): string {\n const {base, border, focusRing} = opts\n const focusRingOutsetWidth = focusRing.offset + focusRing.width\n const focusRingInsetWidth = 0 - focusRing.offset\n const bgColor = base ? base.bg : 'var(--card-bg-color)'\n\n return [\n focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`,\n border && focusRingBorderStyle(border),\n focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`,\n focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`,\n ]\n .filter(Boolean)\n .join(',')\n}\n","import {useMemo} from 'react'\nimport {FieldMember, ObjectMember} from 'sanity'\n\n/** @internal */\nexport function useFieldMember(\n members: ObjectMember[],\n fieldName: string,\n): FieldMember | undefined {\n return useMemo(\n () =>\n members.find(\n (member): member is FieldMember => member.kind === 'field' && member.name === fieldName,\n ),\n [members, fieldName],\n )\n}\n","import {Box, Card, Stack, Text} from '@sanity/ui'\nimport {Suspense, useCallback} from 'react'\nimport {MemberField, ObjectInputProps, RenderInputCallback, set, setIfMissing, unset} from 'sanity'\nimport styled, {css} from 'styled-components'\n\nimport {useCodeMirror} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport {PATH_CODE} from './config'\nimport {LanguageField} from './LanguageField'\nimport {CodeInputValue, CodeSchemaType} from './types'\nimport {focusRingBorderStyle, focusRingStyle} from './ui/focusRingStyle'\nimport {useFieldMember} from './useFieldMember'\n\nexport type {CodeInputLanguage, CodeInputValue} from './types'\n\n/**\n * @public\n */\nexport interface CodeInputProps extends ObjectInputProps<CodeInputValue, CodeSchemaType> {}\n\nconst EditorContainer = styled(Card)(({theme}) => {\n const {focusRing, input} = theme.sanity\n const base = theme.sanity.color.base\n const color = theme.sanity.color.input\n const border = {\n color: color.default.enabled.border,\n width: input.border.width,\n }\n\n return css`\n --input-box-shadow: ${focusRingBorderStyle(border)};\n\n box-shadow: var(--input-box-shadow);\n height: 250px;\n min-height: 80px;\n overflow-y: auto;\n position: relative;\n resize: vertical;\n z-index: 0;\n\n & > .cm-theme {\n height: 100%;\n }\n\n &:focus-within {\n --input-box-shadow: ${focusRingStyle({\n base,\n border,\n focusRing,\n })};\n }\n `\n})\n\n/** @public */\nexport function CodeInput(props: CodeInputProps) {\n const {\n members,\n elementProps,\n onChange,\n readOnly,\n renderField,\n renderInput,\n renderItem,\n renderPreview,\n schemaType: type,\n value,\n onPathFocus,\n } = props\n\n const languageFieldMember = useFieldMember(members, 'language')\n const filenameMember = useFieldMember(members, 'filename')\n const codeFieldMember = useFieldMember(members, 'code')\n\n const handleCodeFocus = useCallback(() => {\n onPathFocus(PATH_CODE)\n }, [onPathFocus])\n\n const onHighlightChange = useCallback(\n (lines: number[]) => onChange(set(lines, ['highlightedLines'])),\n [onChange],\n )\n\n const handleCodeChange = useCallback(\n (code: string) => {\n const path = PATH_CODE\n const fixedLanguage = type.options?.language\n\n onChange([\n setIfMissing({_type: type.name, language: fixedLanguage}),\n code ? set(code, path) : unset(path),\n ])\n },\n [onChange, type],\n )\n const {languages, language, languageMode} = useLanguageMode(props.schemaType, props.value)\n\n const CodeMirror = useCodeMirror()\n\n const renderCodeInput: RenderInputCallback = useCallback(\n (inputProps) => {\n return (\n <EditorContainer border overflow=\"hidden\" radius={1} sizing=\"border\" readOnly={readOnly}>\n {CodeMirror && (\n <Suspense\n fallback={\n <Box padding={3}>\n <Text>Loading code editor...</Text>\n </Box>\n }\n >\n <CodeMirror\n languageMode={languageMode}\n onChange={handleCodeChange}\n value={inputProps.value as string}\n highlightLines={value?.highlightedLines}\n onHighlightChange={onHighlightChange}\n readOnly={readOnly}\n onFocus={handleCodeFocus}\n onBlur={elementProps.onBlur}\n />\n </Suspense>\n )}\n </EditorContainer>\n )\n },\n [\n CodeMirror,\n handleCodeChange,\n handleCodeFocus,\n onHighlightChange,\n languageMode,\n elementProps.onBlur,\n readOnly,\n value,\n ],\n )\n\n return (\n <Stack space={4}>\n {languageFieldMember && (\n <LanguageField\n member={languageFieldMember}\n language={language}\n languages={languages}\n renderField={renderField}\n renderItem={renderItem}\n renderInput={renderInput}\n renderPreview={renderPreview}\n />\n )}\n\n {type.options?.withFilename && filenameMember && (\n <MemberField\n member={filenameMember}\n renderItem={renderItem}\n renderField={renderField}\n renderInput={renderInput}\n renderPreview={renderPreview}\n />\n )}\n\n {codeFieldMember && (\n <MemberField\n member={codeFieldMember}\n renderInput={renderCodeInput}\n renderItem={renderItem}\n renderField={renderField}\n renderPreview={renderPreview}\n />\n )}\n </Stack>\n )\n}\n","export function getMedia(language?: string) {\n if (language === 'jsx') {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\">\n <g fill=\"#61DAFB\">\n <circle cx=\"64\" cy=\"64\" r=\"11.4\" />\n <path d=\"M107.3 45.2c-2.2-.8-4.5-1.6-6.9-2.3.6-2.4 1.1-4.8 1.5-7.1 2.1-13.2-.2-22.5-6.6-26.1-1.9-1.1-4-1.6-6.4-1.6-7 0-15.9 5.2-24.9 13.9-9-8.7-17.9-13.9-24.9-13.9-2.4 0-4.5.5-6.4 1.6-6.4 3.7-8.7 13-6.6 26.1.4 2.3.9 4.7 1.5 7.1-2.4.7-4.7 1.4-6.9 2.3C8.2 50 1.4 56.6 1.4 64s6.9 14 19.3 18.8c2.2.8 4.5 1.6 6.9 2.3-.6 2.4-1.1 4.8-1.5 7.1-2.1 13.2.2 22.5 6.6 26.1 1.9 1.1 4 1.6 6.4 1.6 7.1 0 16-5.2 24.9-13.9 9 8.7 17.9 13.9 24.9 13.9 2.4 0 4.5-.5 6.4-1.6 6.4-3.7 8.7-13 6.6-26.1-.4-2.3-.9-4.7-1.5-7.1 2.4-.7 4.7-1.4 6.9-2.3 12.5-4.8 19.3-11.4 19.3-18.8s-6.8-14-19.3-18.8zM92.5 14.7c4.1 2.4 5.5 9.8 3.8 20.3-.3 2.1-.8 4.3-1.4 6.6-5.2-1.2-10.7-2-16.5-2.5-3.4-4.8-6.9-9.1-10.4-13 7.4-7.3 14.9-12.3 21-12.3 1.3 0 2.5.3 3.5.9zM81.3 74c-1.8 3.2-3.9 6.4-6.1 9.6-3.7.3-7.4.4-11.2.4-3.9 0-7.6-.1-11.2-.4-2.2-3.2-4.2-6.4-6-9.6-1.9-3.3-3.7-6.7-5.3-10 1.6-3.3 3.4-6.7 5.3-10 1.8-3.2 3.9-6.4 6.1-9.6 3.7-.3 7.4-.4 11.2-.4 3.9 0 7.6.1 11.2.4 2.2 3.2 4.2 6.4 6 9.6 1.9 3.3 3.7 6.7 5.3 10-1.7 3.3-3.4 6.6-5.3 10zm8.3-3.3c1.5 3.5 2.7 6.9 3.8 10.3-3.4.8-7 1.4-10.8 1.9 1.2-1.9 2.5-3.9 3.6-6 1.2-2.1 2.3-4.2 3.4-6.2zM64 97.8c-2.4-2.6-4.7-5.4-6.9-8.3 2.3.1 4.6.2 6.9.2 2.3 0 4.6-.1 6.9-.2-2.2 2.9-4.5 5.7-6.9 8.3zm-18.6-15c-3.8-.5-7.4-1.1-10.8-1.9 1.1-3.3 2.3-6.8 3.8-10.3 1.1 2 2.2 4.1 3.4 6.1 1.2 2.2 2.4 4.1 3.6 6.1zm-7-25.5c-1.5-3.5-2.7-6.9-3.8-10.3 3.4-.8 7-1.4 10.8-1.9-1.2 1.9-2.5 3.9-3.6 6-1.2 2.1-2.3 4.2-3.4 6.2zM64 30.2c2.4 2.6 4.7 5.4 6.9 8.3-2.3-.1-4.6-.2-6.9-.2-2.3 0-4.6.1-6.9.2 2.2-2.9 4.5-5.7 6.9-8.3zm22.2 21l-3.6-6c3.8.5 7.4 1.1 10.8 1.9-1.1 3.3-2.3 6.8-3.8 10.3-1.1-2.1-2.2-4.2-3.4-6.2zM31.7 35c-1.7-10.5-.3-17.9 3.8-20.3 1-.6 2.2-.9 3.5-.9 6 0 13.5 4.9 21 12.3-3.5 3.8-7 8.2-10.4 13-5.8.5-11.3 1.4-16.5 2.5-.6-2.3-1-4.5-1.4-6.6zM7 64c0-4.7 5.7-9.7 15.7-13.4 2-.8 4.2-1.5 6.4-2.1 1.6 5 3.6 10.3 6 15.6-2.4 5.3-4.5 10.5-6 15.5C15.3 75.6 7 69.6 7 64zm28.5 49.3c-4.1-2.4-5.5-9.8-3.8-20.3.3-2.1.8-4.3 1.4-6.6 5.2 1.2 10.7 2 16.5 2.5 3.4 4.8 6.9 9.1 10.4 13-7.4 7.3-14.9 12.3-21 12.3-1.3 0-2.5-.3-3.5-.9zM96.3 93c1.7 10.5.3 17.9-3.8 20.3-1 .6-2.2.9-3.5.9-6 0-13.5-4.9-21-12.3 3.5-3.8 7-8.2 10.4-13 5.8-.5 11.3-1.4 16.5-2.5.6 2.3 1 4.5 1.4 6.6zm9-15.6c-2 .8-4.2 1.5-6.4 2.1-1.6-5-3.6-10.3-6-15.6 2.4-5.3 4.5-10.5 6-15.5 13.8 4 22.1 10 22.1 15.6 0 4.7-5.8 9.7-15.7 13.4z\" />\n </g>\n </svg>\n )\n }\n\n if (language === 'javascript') {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\">\n <path fill=\"#F0DB4F\" d=\"M1.408 1.408h125.184v125.185H1.408z\" />\n <path\n fill=\"#323330\"\n d=\"M116.347 96.736c-.917-5.711-4.641-10.508-15.672-14.981-3.832-1.761-8.104-3.022-9.377-5.926-.452-1.69-.512-2.642-.226-3.665.821-3.32 4.784-4.355 7.925-3.403 2.023.678 3.938 2.237 5.093 4.724 5.402-3.498 5.391-3.475 9.163-5.879-1.381-2.141-2.118-3.129-3.022-4.045-3.249-3.629-7.676-5.498-14.756-5.355l-3.688.477c-3.534.893-6.902 2.748-8.877 5.235-5.926 6.724-4.236 18.492 2.975 23.335 7.104 5.332 17.54 6.545 18.873 11.531 1.297 6.104-4.486 8.08-10.234 7.378-4.236-.881-6.592-3.034-9.139-6.949-4.688 2.713-4.688 2.713-9.508 5.485 1.143 2.499 2.344 3.63 4.26 5.795 9.068 9.198 31.76 8.746 35.83-5.176.165-.478 1.261-3.666.38-8.581zM69.462 58.943H57.753l-.048 30.272c0 6.438.333 12.34-.714 14.149-1.713 3.558-6.152 3.117-8.175 2.427-2.059-1.012-3.106-2.451-4.319-4.485-.333-.584-.583-1.036-.667-1.071l-9.52 5.83c1.583 3.249 3.915 6.069 6.902 7.901 4.462 2.678 10.459 3.499 16.731 2.059 4.082-1.189 7.604-3.652 9.448-7.401 2.666-4.915 2.094-10.864 2.07-17.444.06-10.735.001-21.468.001-32.237z\"\n />\n </svg>\n )\n }\n\n if (language === 'php') {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 800 400\">\n <g transform=\"translate(-44.632 -141.55)\">\n <g transform=\"matrix(8.3528 0 0 8.3119 -727.13 -3759.5)\">\n <path d=\"m99.974 479.48h14.204c4.1693 0.0354 7.1903 1.2367 9.063 3.604 1.8726 2.3674 2.491 5.6004 1.855 9.699-0.24737 1.8727-0.79504 3.71-1.643 5.512-0.8127 1.802-1.9434 3.4273-3.392 4.876-1.7667 1.8373-3.657 3.0033-5.671 3.498-2.014 0.49467-4.0987 0.742-6.254 0.742h-6.36l-2.014 10.07h-7.367l7.579-38.001m6.201 6.042-3.18 15.9c0.21198 0.0353 0.42398 0.053 0.636 0.053h0.742c3.392 0.0353 6.2186-0.30033 8.48-1.007 2.2613-0.74199 3.7806-3.3213 4.558-7.738 0.63597-3.71-0.00003-5.8476-1.908-6.413-1.8727-0.56531-4.2224-0.83031-7.049-0.795-0.42402 0.0353-0.83035 0.053-1.219 0.053-0.35335 0.00002-0.72435 0.00002-1.113 0l0.053-0.053\" />\n <path d=\"m133.49 469.36h7.314l-2.067 10.123h6.572c3.604 0.0707 6.2893 0.81269 8.056 2.226 1.802 1.4134 2.332 4.0987 1.59 8.056l-3.551 17.649h-7.42l3.392-16.854c0.35328-1.7666 0.2473-3.021-0.318-3.763-0.56536-0.74198-1.7844-1.113-3.657-1.113l-5.883-0.053-4.346 21.783h-7.314l7.632-38.054\" />\n <path d=\"m162.81 479.48h14.204c4.1693 0.0354 7.1903 1.2367 9.063 3.604 1.8726 2.3674 2.491 5.6004 1.855 9.699-0.24737 1.8727-0.79503 3.71-1.643 5.512-0.8127 1.802-1.9434 3.4273-3.392 4.876-1.7667 1.8373-3.657 3.0033-5.671 3.498-2.014 0.49467-4.0987 0.742-6.254 0.742h-6.36l-2.014 10.07h-7.367l7.579-38.001m6.201 6.042-3.18 15.9c0.21199 0.0353 0.42399 0.053 0.636 0.053h0.742c3.392 0.0353 6.2186-0.30033 8.48-1.007 2.2613-0.74199 3.7806-3.3213 4.558-7.738 0.63597-3.71-0.00003-5.8476-1.908-6.413-1.8727-0.56531-4.2224-0.83031-7.049-0.795-0.42402 0.0353-0.83035 0.053-1.219 0.053-0.35335 0.00002-0.72435 0.00002-1.113 0l0.053-0.053\" />\n </g>\n </g>\n </svg>\n )\n }\n\n if (language === 'json') {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 160 160\"\n >\n <defs>\n <linearGradient id=\"a\">\n <stop offset=\"0\" />\n <stop offset=\"1\" stopColor=\"#fff\" />\n </linearGradient>\n <linearGradient\n x1=\"-553.27\"\n y1=\"525.908\"\n x2=\"-666.116\"\n y2=\"413.045\"\n id=\"c\"\n xlinkHref=\"#a\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(.99884 0 0 .9987 689.008 -388.844)\"\n />\n <linearGradient\n x1=\"-666.117\"\n y1=\"413.045\"\n x2=\"-553.27\"\n y2=\"525.908\"\n id=\"b\"\n xlinkHref=\"#a\"\n gradientUnits=\"userSpaceOnUse\"\n gradientTransform=\"matrix(.99884 0 0 .9987 689.008 -388.844)\"\n />\n </defs>\n <path\n d=\"M79.865 119.1c35.397 48.255 70.04-13.469 69.988-50.587-.06-43.886-44.54-68.414-70.017-68.414C38.943.1 0 33.895 0 80.135 0 131.531 44.64 160 79.836 160c-7.965-1.147-34.507-6.834-34.863-67.967-.24-41.346 13.487-57.865 34.805-50.599.477.177 23.514 9.265 23.514 38.95 0 29.56-23.427 38.716-23.427 38.716z\"\n style={{marker: 'none'}}\n color=\"#000\"\n fill=\"url(#b)\"\n fillRule=\"evenodd\"\n overflow=\"visible\"\n />\n <path\n d=\"M79.823 41.4C56.433 33.34 27.78 52.618 27.78 91.23c0 63.048 46.72 68.77 52.384 68.77C121.057 160 160 126.204 160 79.964 160 28.568 115.36.1 80.164.1c9.749-1.35 52.541 10.55 52.541 69.037 0 38.141-31.953 58.905-52.735 50.033-.478-.177-23.514-9.264-23.514-38.95 0-29.56 23.367-38.818 23.367-38.818z\"\n style={{marker: 'none'}}\n color=\"#000\"\n fill=\"url(#c)\"\n fillRule=\"evenodd\"\n overflow=\"visible\"\n />\n </svg>\n )\n }\n\n return undefined\n}\n","import {Box, Card, Flex, Label, Text} from '@sanity/ui'\nimport {Suspense} from 'react'\nimport {PreviewProps} from 'sanity'\nimport styled from 'styled-components'\n\nimport {useCodeMirror} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport {CodeInputValue, CodeSchemaType} from './types'\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n`\n\n/**\n * @public\n */\nexport interface PreviewCodeProps extends PreviewProps {\n selection?: CodeInputValue\n}\n\n/**\n * @public\n */\nexport function PreviewCode(props: PreviewCodeProps) {\n const {selection, schemaType: type} = props\n const {languageMode} = useLanguageMode(type as CodeSchemaType, props.selection)\n\n const CodeMirror = useCodeMirror()\n return (\n <PreviewContainer>\n <Card padding={4}>\n {selection?.filename || selection?.language ? (\n <Card\n paddingBottom={4}\n marginBottom={selection.code ? 4 : 0}\n borderBottom={!!selection.code}\n >\n <Flex align=\"center\" justify=\"flex-end\">\n {selection?.filename ? (\n <Box flex={1}>\n <Text>\n <code>{selection.filename}</code>\n </Text>\n </Box>\n ) : null}\n {selection?.language ? <Label muted>{selection.language}</Label> : null}\n </Flex>\n </Card>\n ) : null}\n {CodeMirror && (\n <Suspense fallback={<Card padding={2}>Loading code preview...</Card>}>\n <CodeMirror\n readOnly\n editable={false}\n value={selection?.code || ''}\n highlightLines={selection?.highlightedLines || []}\n basicSetup={{\n lineNumbers: false,\n foldGutter: false,\n highlightSelectionMatches: false,\n highlightActiveLineGutter: false,\n highlightActiveLine: false,\n }}\n languageMode={languageMode}\n />\n </Suspense>\n )}\n </Card>\n </PreviewContainer>\n )\n}\n","import {CodeBlockIcon} from '@sanity/icons'\nimport {defineType, ObjectDefinition} from 'sanity'\n\nimport {CodeInput} from './CodeInput'\nimport {getMedia} from './getMedia'\nimport {PreviewCode} from './PreviewCode'\nimport {CodeOptions} from './types'\n\n/**\n * @public\n */\nexport const codeTypeName = 'code' as const\n\n/**\n * @public\n */\nexport interface CodeDefinition extends Omit<ObjectDefinition, 'type' | 'fields' | 'options'> {\n type: typeof codeTypeName\n options?: CodeOptions\n}\n\ndeclare module '@sanity/types' {\n // makes type: 'code' narrow correctly when using defineType/defineField/defineArrayMember\n export interface IntrinsicDefinitions {\n code: CodeDefinition\n }\n}\n\n/**\n * @public\n */\nexport const codeSchema = defineType({\n name: 'code',\n type: 'object',\n title: 'Code',\n components: {input: CodeInput, preview: PreviewCode},\n icon: CodeBlockIcon,\n fields: [\n {\n name: 'language',\n title: 'Language',\n type: 'string',\n },\n {\n name: 'filename',\n title: 'Filename',\n type: 'string',\n },\n {\n title: 'Code',\n name: 'code',\n type: 'text',\n },\n {\n title: 'Highlighted lines',\n name: 'highlightedLines',\n type: 'array',\n of: [\n {\n type: 'number',\n title: 'Highlighted line',\n },\n ],\n },\n ],\n preview: {\n select: {\n language: 'language',\n code: 'code',\n filename: 'filename',\n highlightedLines: 'highlightedLines',\n },\n prepare: (value: {\n language?: string\n code?: string\n filename?: string\n highlightedLines?: number[]\n }) => {\n return {\n title: value.filename || (value.language || 'unknown').toUpperCase(),\n media: getMedia(value?.language),\n selection: value,\n }\n },\n },\n})\n","import {createContext} from 'react'\n\nimport type {CodeInputConfig} from '../plugin'\n\nexport const CodeInputConfigContext = createContext<CodeInputConfig | undefined>(undefined)\n","import {definePlugin} from 'sanity'\n\nimport {CodeInputConfigContext} from './codemirror/CodeModeContext'\nimport {CodeMode} from './codemirror/defaultCodeModes'\nimport {codeSchema} from './schema'\n\nexport interface CodeInputConfig {\n codeModes?: CodeMode[]\n}\n\n/**\n * @public\n */\nexport const codeInput = definePlugin<CodeInputConfig | void>((config) => {\n const codeModes = config && config.codeModes\n const basePlugin = {\n name: '@sanity/code-input',\n schema: {types: [codeSchema]},\n }\n if (!codeModes) {\n return basePlugin\n }\n return {\n ...basePlugin,\n form: {\n components: {\n input: (props) => {\n if (props.id !== 'root') {\n return props.renderDefault(props)\n }\n return (\n <CodeInputConfigContext.Provider value={config}>\n {props.renderDefault(props)}\n </CodeInputConfigContext.Provider>\n )\n },\n },\n },\n }\n})\n"],"names":["lazy","useState","useEffect","useMemo","useCallback","set","unset","jsx","Select","MemberField","styled","Card","css","setIfMissing","Suspense","Box","Text","jsxs","Stack","Flex","Label","defineType","CodeBlockIcon","createContext","definePlugin"],"mappings":"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"}
|