@sanity/code-input 5.1.3 → 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/README.md +0 -1
- package/lib/_chunks-cjs/CodeMirrorProxy.cjs +16 -38
- package/lib/_chunks-cjs/CodeMirrorProxy.cjs.map +1 -1
- package/lib/_chunks-cjs/index.cjs +18 -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 +18 -38
- package/lib/_chunks-es/index.js.map +1 -1
- package/package.json +8 -8
- package/src/config.ts +1 -0
- 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 -457
- package/lib/_legacy/index.esm.js.map +0 -1
- package/lib/index.esm.js +0 -8
- package/lib/index.esm.js.map +0 -1
package/README.md
CHANGED
|
@@ -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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"}
|
|
@@ -33,24 +33,22 @@ const SUPPORTED_LANGUAGES = [
|
|
|
33
33
|
{ title: "SASS", value: "sass" },
|
|
34
34
|
{ title: "SCSS", value: "scss" },
|
|
35
35
|
{ title: "sh", value: "sh" },
|
|
36
|
+
{ title: "SQL", value: "sql" },
|
|
36
37
|
{ title: "TSX", value: "tsx" },
|
|
37
38
|
{ title: "TypeScript", value: "typescript" },
|
|
38
39
|
{ title: "XML", value: "xml" },
|
|
39
40
|
{ title: "YAML", value: "yaml" }
|
|
40
41
|
], LANGUAGE_ALIASES = { js: "javascript" }, PATH_CODE = ["code"], defaultLanguageMode = "text";
|
|
41
42
|
function useLanguageMode(schemaType, value) {
|
|
42
|
-
|
|
43
|
-
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;
|
|
44
44
|
return { language, languageMode, languages };
|
|
45
45
|
}
|
|
46
46
|
function resolveAliasedLanguage(lang) {
|
|
47
|
-
|
|
48
|
-
return (_a = lang && LANGUAGE_ALIASES[lang]) != null ? _a : lang;
|
|
47
|
+
return (lang && LANGUAGE_ALIASES[lang]) ?? lang;
|
|
49
48
|
}
|
|
50
49
|
function useLanguageAlternatives(type) {
|
|
51
50
|
return react.useMemo(() => {
|
|
52
|
-
|
|
53
|
-
const languageAlternatives = (_a = type.options) == null ? void 0 : _a.languageAlternatives;
|
|
51
|
+
const languageAlternatives = type.options?.languageAlternatives;
|
|
54
52
|
if (!languageAlternatives)
|
|
55
53
|
return SUPPORTED_LANGUAGES;
|
|
56
54
|
if (!Array.isArray(languageAlternatives))
|
|
@@ -68,14 +66,6 @@ function useLanguageAlternatives(type) {
|
|
|
68
66
|
}, []);
|
|
69
67
|
}, [type]);
|
|
70
68
|
}
|
|
71
|
-
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) => {
|
|
72
|
-
for (var prop in b || (b = {}))
|
|
73
|
-
__hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
|
|
74
|
-
if (__getOwnPropSymbols$1)
|
|
75
|
-
for (var prop of __getOwnPropSymbols$1(b))
|
|
76
|
-
__propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
|
|
77
|
-
return a;
|
|
78
|
-
}, __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
79
69
|
function LanguageInput(props) {
|
|
80
70
|
const { language, languages, onChange, elementProps } = props, handleChange = react.useCallback(
|
|
81
71
|
(e) => {
|
|
@@ -84,7 +74,7 @@ function LanguageInput(props) {
|
|
|
84
74
|
},
|
|
85
75
|
[onChange]
|
|
86
76
|
);
|
|
87
|
-
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)) });
|
|
88
78
|
}
|
|
89
79
|
function LanguageField(props) {
|
|
90
80
|
const { member, languages, language, renderItem, renderField, renderPreview } = props, renderInput = react.useCallback(
|
|
@@ -160,7 +150,6 @@ const EditorContainer = styled__default.default(ui.Card)(({ theme }) => {
|
|
|
160
150
|
`;
|
|
161
151
|
});
|
|
162
152
|
function CodeInput(props) {
|
|
163
|
-
var _a;
|
|
164
153
|
const {
|
|
165
154
|
members,
|
|
166
155
|
elementProps,
|
|
@@ -180,8 +169,7 @@ function CodeInput(props) {
|
|
|
180
169
|
[onChange]
|
|
181
170
|
), handleCodeChange = react.useCallback(
|
|
182
171
|
(code) => {
|
|
183
|
-
|
|
184
|
-
const path = PATH_CODE, fixedLanguage = (_a2 = type.options) == null ? void 0 : _a2.language;
|
|
172
|
+
const path = PATH_CODE, fixedLanguage = type.options?.language;
|
|
185
173
|
onChange([
|
|
186
174
|
sanity.setIfMissing({ _type: type.name, language: fixedLanguage }),
|
|
187
175
|
code ? sanity.set(code, path) : sanity.unset(path)
|
|
@@ -199,7 +187,7 @@ function CodeInput(props) {
|
|
|
199
187
|
languageMode,
|
|
200
188
|
onChange: handleCodeChange,
|
|
201
189
|
value: inputProps.value,
|
|
202
|
-
highlightLines: value
|
|
190
|
+
highlightLines: value?.highlightedLines,
|
|
203
191
|
onHighlightChange,
|
|
204
192
|
readOnly,
|
|
205
193
|
onFocus: handleCodeFocus,
|
|
@@ -232,7 +220,7 @@ function CodeInput(props) {
|
|
|
232
220
|
renderPreview
|
|
233
221
|
}
|
|
234
222
|
),
|
|
235
|
-
|
|
223
|
+
type.options?.withFilename && filenameMember && /* @__PURE__ */ jsxRuntime.jsx(
|
|
236
224
|
sanity.MemberField,
|
|
237
225
|
{
|
|
238
226
|
member: filenameMember,
|
|
@@ -349,15 +337,15 @@ const PreviewContainer = styled__default.default(ui.Box)`
|
|
|
349
337
|
function PreviewCode(props) {
|
|
350
338
|
const { selection, schemaType: type } = props, { languageMode } = useLanguageMode(type, props.selection), CodeMirror = useCodeMirror();
|
|
351
339
|
return /* @__PURE__ */ jsxRuntime.jsx(PreviewContainer, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Card, { padding: 4, children: [
|
|
352
|
-
selection
|
|
340
|
+
selection?.filename || selection?.language ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
353
341
|
ui.Card,
|
|
354
342
|
{
|
|
355
343
|
paddingBottom: 4,
|
|
356
344
|
marginBottom: selection.code ? 4 : 0,
|
|
357
345
|
borderBottom: !!selection.code,
|
|
358
346
|
children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { align: "center", justify: "flex-end", children: [
|
|
359
|
-
selection
|
|
360
|
-
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
|
|
361
349
|
] })
|
|
362
350
|
}
|
|
363
351
|
) : null,
|
|
@@ -366,8 +354,8 @@ function PreviewCode(props) {
|
|
|
366
354
|
{
|
|
367
355
|
readOnly: !0,
|
|
368
356
|
editable: !1,
|
|
369
|
-
value:
|
|
370
|
-
highlightLines:
|
|
357
|
+
value: selection?.code || "",
|
|
358
|
+
highlightLines: selection?.highlightedLines || [],
|
|
371
359
|
basicSetup: {
|
|
372
360
|
lineNumbers: !1,
|
|
373
361
|
foldGutter: !1,
|
|
@@ -423,31 +411,23 @@ const codeTypeName = "code", codeSchema = sanity.defineType({
|
|
|
423
411
|
},
|
|
424
412
|
prepare: (value) => ({
|
|
425
413
|
title: value.filename || (value.language || "unknown").toUpperCase(),
|
|
426
|
-
media: getMedia(value
|
|
414
|
+
media: getMedia(value?.language),
|
|
427
415
|
selection: value
|
|
428
416
|
})
|
|
429
417
|
}
|
|
430
|
-
}), CodeInputConfigContext = react.createContext(void 0)
|
|
431
|
-
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) => {
|
|
432
|
-
for (var prop in b || (b = {}))
|
|
433
|
-
__hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);
|
|
434
|
-
if (__getOwnPropSymbols)
|
|
435
|
-
for (var prop of __getOwnPropSymbols(b))
|
|
436
|
-
__propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);
|
|
437
|
-
return a;
|
|
438
|
-
}, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
439
|
-
const codeInput = sanity.definePlugin((config) => {
|
|
418
|
+
}), CodeInputConfigContext = react.createContext(void 0), codeInput = sanity.definePlugin((config) => {
|
|
440
419
|
const codeModes = config && config.codeModes, basePlugin = {
|
|
441
420
|
name: "@sanity/code-input",
|
|
442
421
|
schema: { types: [codeSchema] }
|
|
443
422
|
};
|
|
444
|
-
return codeModes ?
|
|
423
|
+
return codeModes ? {
|
|
424
|
+
...basePlugin,
|
|
445
425
|
form: {
|
|
446
426
|
components: {
|
|
447
427
|
input: (props) => props.id !== "root" ? props.renderDefault(props) : /* @__PURE__ */ jsxRuntime.jsx(CodeInputConfigContext.Provider, { value: config, children: props.renderDefault(props) })
|
|
448
428
|
}
|
|
449
429
|
}
|
|
450
|
-
}
|
|
430
|
+
} : basePlugin;
|
|
451
431
|
});
|
|
452
432
|
exports.CodeInputConfigContext = CodeInputConfigContext;
|
|
453
433
|
exports.PreviewCode = PreviewCode;
|