@sanity/code-input 5.2.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { Decoration, EditorView, lineNumbers } from "@codemirror/view";
2
+ import { lineNumbers, EditorView, Decoration } from "@codemirror/view";
3
3
  import { useRootTheme, useTheme, rem } from "@sanity/ui";
4
4
  import CodeMirror from "@uiw/react-codemirror";
5
5
  import { useMemo, forwardRef, useState, useEffect, useCallback, useContext } from "react";
6
6
  import { CodeInputConfigContext } from "./index.js";
7
7
  import { StreamLanguage } from "@codemirror/language";
8
- import { StateEffect, StateField } from "@codemirror/state";
8
+ import { StateField, StateEffect } from "@codemirror/state";
9
9
  import { rgba } from "@sanity/ui/theme";
10
10
  import { tags } from "@lezer/highlight";
11
11
  import { createTheme } from "@uiw/codemirror-themes";
@@ -176,7 +176,7 @@ const highlightLine = (config) => {
176
176
  return editorView.state.field(lineHighlightField).between(line.from, line.to, (from, to, value) => {
177
177
  if (value)
178
178
  return isHighlighted = !0, !1;
179
- }), isHighlighted ? editorView.dispatch({ effects: removeLineHighlight.of(line.from) }) : editorView.dispatch({ effects: addLineHighlight.of(line.from) }), config != null && config.onHighlightChange && config.onHighlightChange(editorView.state.toJSON(highlightState).highlight), !0;
179
+ }), 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;
180
180
  }
181
181
  }
182
182
  }),
@@ -188,7 +188,7 @@ function setHighlightedLines(view, highlightLines) {
188
188
  view.dispatch({
189
189
  effects: allLineNumbers.map((lineNumber) => {
190
190
  const line = doc.line(lineNumber);
191
- return highlightLines != null && highlightLines.includes(lineNumber) ? addLineHighlight.of(line.from) : removeLineHighlight.of(line.from);
191
+ return highlightLines?.includes(lineNumber) ? addLineHighlight.of(line.from) : removeLineHighlight.of(line.from);
192
192
  })
193
193
  });
194
194
  }
@@ -310,39 +310,17 @@ function useFontSizeExtension(props) {
310
310
  });
311
311
  }, [fontSizeProp, theme]);
312
312
  }
313
- 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) => {
314
- for (var prop in b || (b = {}))
315
- __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);
316
- if (__getOwnPropSymbols)
317
- for (var prop of __getOwnPropSymbols(b))
318
- __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);
319
- return a;
320
- }, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)), __objRest = (source, exclude) => {
321
- var target = {};
322
- for (var prop in source)
323
- __hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0 && (target[prop] = source[prop]);
324
- if (source != null && __getOwnPropSymbols)
325
- for (var prop of __getOwnPropSymbols(source))
326
- exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop) && (target[prop] = source[prop]);
327
- return target;
328
- };
329
313
  const CodeMirrorProxy = forwardRef(
330
314
  function(props, ref) {
331
- const _a = props, {
315
+ const {
332
316
  basicSetup: basicSetupProp,
333
317
  highlightLines,
334
318
  languageMode,
335
319
  onHighlightChange,
336
320
  readOnly,
337
- value
338
- } = _a, codeMirrorProps = __objRest(_a, [
339
- "basicSetup",
340
- "highlightLines",
341
- "languageMode",
342
- "onHighlightChange",
343
- "readOnly",
344
- "value"
345
- ]), themeCtx = useRootTheme(), codeMirrorTheme = useCodeMirrorTheme(), [editorView, setEditorView] = useState(void 0), themeExtension = useThemeExtension(), fontSizeExtension = useFontSizeExtension({ fontSize: 1 }), languageExtension = useLanguageExtension(languageMode), highlightLineExtension = useMemo(
321
+ value,
322
+ ...codeMirrorProps
323
+ } = props, themeCtx = useRootTheme(), codeMirrorTheme = useCodeMirrorTheme(), [editorView, setEditorView] = useState(void 0), themeExtension = useThemeExtension(), fontSizeExtension = useFontSizeExtension({ fontSize: 1 }), languageExtension = useLanguageExtension(languageMode), highlightLineExtension = useMemo(
346
324
  () => highlightLine({
347
325
  onHighlightChange,
348
326
  readOnly,
@@ -359,29 +337,30 @@ const CodeMirrorProxy = forwardRef(
359
337
  return languageExtension ? [...baseExtensions, languageExtension] : baseExtensions;
360
338
  }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension]);
361
339
  useEffect(() => {
362
- editorView && setHighlightedLines(editorView, highlightLines != null ? highlightLines : []);
340
+ editorView && setHighlightedLines(editorView, highlightLines ?? []);
363
341
  }, [editorView, highlightLines, value]);
364
342
  const initialState = useMemo(() => ({
365
343
  json: {
366
- doc: value != null ? value : "",
344
+ doc: value ?? "",
367
345
  selection: {
368
346
  main: 0,
369
347
  ranges: [{ anchor: 0, head: 0 }]
370
348
  },
371
- highlight: highlightLines != null ? highlightLines : []
349
+ highlight: highlightLines ?? []
372
350
  },
373
351
  fields: highlightState
374
352
  }), []), handleCreateEditor = useCallback((view) => {
375
353
  setEditorView(view);
376
354
  }, []), basicSetup = useMemo(
377
- () => basicSetupProp != null ? basicSetupProp : {
355
+ () => basicSetupProp ?? {
378
356
  highlightActiveLine: !1
379
357
  },
380
358
  [basicSetupProp]
381
359
  );
382
360
  return /* @__PURE__ */ jsx(
383
361
  CodeMirror,
384
- __spreadProps(__spreadValues({}, codeMirrorProps), {
362
+ {
363
+ ...codeMirrorProps,
385
364
  value,
386
365
  ref,
387
366
  extensions,
@@ -389,20 +368,19 @@ const CodeMirrorProxy = forwardRef(
389
368
  onCreateEditor: handleCreateEditor,
390
369
  initialState,
391
370
  basicSetup
392
- })
371
+ }
393
372
  );
394
373
  }
395
374
  );
396
375
  function useLanguageExtension(mode) {
397
376
  const codeConfig = useContext(CodeInputConfigContext), [languageExtension, setLanguageExtension] = useState();
398
377
  return useEffect(() => {
399
- var _a;
400
- const codeMode = [...(_a = codeConfig == null ? void 0 : codeConfig.codeModes) != null ? _a : [], ...defaultCodeModes].find((m) => m.name === mode);
401
- codeMode != null && codeMode.loader || console.warn(
378
+ const codeMode = [...codeConfig?.codeModes ?? [], ...defaultCodeModes].find((m) => m.name === mode);
379
+ codeMode?.loader || console.warn(
402
380
  `Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`
403
381
  );
404
382
  let active = !0;
405
- return Promise.resolve(codeMode == null ? void 0 : codeMode.loader()).then((extension) => {
383
+ return Promise.resolve(codeMode?.loader()).then((extension) => {
406
384
  active && setLanguageExtension(extension);
407
385
  }).catch((e) => {
408
386
  console.error(`Failed to load language mode ${mode}`, e), active && setLanguageExtension(void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"CodeMirrorProxy.js","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":["t"],"mappings":"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"}
1
+ {"version":3,"file":"CodeMirrorProxy.js","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":["t"],"mappings":"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"}
@@ -38,18 +38,15 @@ const SUPPORTED_LANGUAGES = [
38
38
  { title: "YAML", value: "yaml" }
39
39
  ], LANGUAGE_ALIASES = { js: "javascript" }, PATH_CODE = ["code"], defaultLanguageMode = "text";
40
40
  function useLanguageMode(schemaType, value) {
41
- var _a, _b, _c, _d, _e;
42
- 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;
41
+ const languages = useLanguageAlternatives(schemaType), fixedLanguage = schemaType.options?.language, language = value?.language ?? fixedLanguage ?? defaultLanguageMode, languageMode = languages.find((entry) => entry.value === language)?.mode ?? resolveAliasedLanguage(language) ?? defaultLanguageMode;
43
42
  return { language, languageMode, languages };
44
43
  }
45
44
  function resolveAliasedLanguage(lang) {
46
- var _a;
47
- return (_a = lang && LANGUAGE_ALIASES[lang]) != null ? _a : lang;
45
+ return (lang && LANGUAGE_ALIASES[lang]) ?? lang;
48
46
  }
49
47
  function useLanguageAlternatives(type) {
50
48
  return useMemo(() => {
51
- var _a;
52
- const languageAlternatives = (_a = type.options) == null ? void 0 : _a.languageAlternatives;
49
+ const languageAlternatives = type.options?.languageAlternatives;
53
50
  if (!languageAlternatives)
54
51
  return SUPPORTED_LANGUAGES;
55
52
  if (!Array.isArray(languageAlternatives))
@@ -67,14 +64,6 @@ function useLanguageAlternatives(type) {
67
64
  }, []);
68
65
  }, [type]);
69
66
  }
70
- 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) => {
71
- for (var prop in b || (b = {}))
72
- __hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
73
- if (__getOwnPropSymbols$1)
74
- for (var prop of __getOwnPropSymbols$1(b))
75
- __propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);
76
- return a;
77
- }, __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
78
67
  function LanguageInput(props) {
79
68
  const { language, languages, onChange, elementProps } = props, handleChange = useCallback(
80
69
  (e) => {
@@ -83,7 +72,7 @@ function LanguageInput(props) {
83
72
  },
84
73
  [onChange]
85
74
  );
86
- return /* @__PURE__ */ jsx(Select, __spreadProps$1(__spreadValues$1({}, elementProps), { value: language, onChange: handleChange, children: languages.map((lang) => /* @__PURE__ */ jsx("option", { value: lang.value, children: lang.title }, lang.value)) }));
75
+ return /* @__PURE__ */ jsx(Select, { ...elementProps, value: language, onChange: handleChange, children: languages.map((lang) => /* @__PURE__ */ jsx("option", { value: lang.value, children: lang.title }, lang.value)) });
87
76
  }
88
77
  function LanguageField(props) {
89
78
  const { member, languages, language, renderItem, renderField, renderPreview } = props, renderInput = useCallback(
@@ -159,7 +148,6 @@ const EditorContainer = styled(Card)(({ theme }) => {
159
148
  `;
160
149
  });
161
150
  function CodeInput(props) {
162
- var _a;
163
151
  const {
164
152
  members,
165
153
  elementProps,
@@ -179,8 +167,7 @@ function CodeInput(props) {
179
167
  [onChange]
180
168
  ), handleCodeChange = useCallback(
181
169
  (code) => {
182
- var _a2;
183
- const path = PATH_CODE, fixedLanguage = (_a2 = type.options) == null ? void 0 : _a2.language;
170
+ const path = PATH_CODE, fixedLanguage = type.options?.language;
184
171
  onChange([
185
172
  setIfMissing({ _type: type.name, language: fixedLanguage }),
186
173
  code ? set(code, path) : unset(path)
@@ -198,7 +185,7 @@ function CodeInput(props) {
198
185
  languageMode,
199
186
  onChange: handleCodeChange,
200
187
  value: inputProps.value,
201
- highlightLines: value == null ? void 0 : value.highlightedLines,
188
+ highlightLines: value?.highlightedLines,
202
189
  onHighlightChange,
203
190
  readOnly,
204
191
  onFocus: handleCodeFocus,
@@ -231,7 +218,7 @@ function CodeInput(props) {
231
218
  renderPreview
232
219
  }
233
220
  ),
234
- ((_a = type.options) == null ? void 0 : _a.withFilename) && filenameMember && /* @__PURE__ */ jsx(
221
+ type.options?.withFilename && filenameMember && /* @__PURE__ */ jsx(
235
222
  MemberField,
236
223
  {
237
224
  member: filenameMember,
@@ -348,15 +335,15 @@ const PreviewContainer = styled(Box)`
348
335
  function PreviewCode(props) {
349
336
  const { selection, schemaType: type } = props, { languageMode } = useLanguageMode(type, props.selection), CodeMirror = useCodeMirror();
350
337
  return /* @__PURE__ */ jsx(PreviewContainer, { children: /* @__PURE__ */ jsxs(Card, { padding: 4, children: [
351
- selection != null && selection.filename || selection != null && selection.language ? /* @__PURE__ */ jsx(
338
+ selection?.filename || selection?.language ? /* @__PURE__ */ jsx(
352
339
  Card,
353
340
  {
354
341
  paddingBottom: 4,
355
342
  marginBottom: selection.code ? 4 : 0,
356
343
  borderBottom: !!selection.code,
357
344
  children: /* @__PURE__ */ jsxs(Flex, { align: "center", justify: "flex-end", children: [
358
- selection != null && selection.filename ? /* @__PURE__ */ jsx(Box, { flex: 1, children: /* @__PURE__ */ jsx(Text, { children: /* @__PURE__ */ jsx("code", { children: selection.filename }) }) }) : null,
359
- selection != null && selection.language ? /* @__PURE__ */ jsx(Label, { muted: !0, children: selection.language }) : null
345
+ selection?.filename ? /* @__PURE__ */ jsx(Box, { flex: 1, children: /* @__PURE__ */ jsx(Text, { children: /* @__PURE__ */ jsx("code", { children: selection.filename }) }) }) : null,
346
+ selection?.language ? /* @__PURE__ */ jsx(Label, { muted: !0, children: selection.language }) : null
360
347
  ] })
361
348
  }
362
349
  ) : null,
@@ -365,8 +352,8 @@ function PreviewCode(props) {
365
352
  {
366
353
  readOnly: !0,
367
354
  editable: !1,
368
- value: (selection == null ? void 0 : selection.code) || "",
369
- highlightLines: (selection == null ? void 0 : selection.highlightedLines) || [],
355
+ value: selection?.code || "",
356
+ highlightLines: selection?.highlightedLines || [],
370
357
  basicSetup: {
371
358
  lineNumbers: !1,
372
359
  foldGutter: !1,
@@ -422,31 +409,23 @@ const codeTypeName = "code", codeSchema = defineType({
422
409
  },
423
410
  prepare: (value) => ({
424
411
  title: value.filename || (value.language || "unknown").toUpperCase(),
425
- media: getMedia(value == null ? void 0 : value.language),
412
+ media: getMedia(value?.language),
426
413
  selection: value
427
414
  })
428
415
  }
429
- }), CodeInputConfigContext = createContext(void 0);
430
- 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) => {
431
- for (var prop in b || (b = {}))
432
- __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);
433
- if (__getOwnPropSymbols)
434
- for (var prop of __getOwnPropSymbols(b))
435
- __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);
436
- return a;
437
- }, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
438
- const codeInput = definePlugin((config) => {
416
+ }), CodeInputConfigContext = createContext(void 0), codeInput = definePlugin((config) => {
439
417
  const codeModes = config && config.codeModes, basePlugin = {
440
418
  name: "@sanity/code-input",
441
419
  schema: { types: [codeSchema] }
442
420
  };
443
- return codeModes ? __spreadProps(__spreadValues({}, basePlugin), {
421
+ return codeModes ? {
422
+ ...basePlugin,
444
423
  form: {
445
424
  components: {
446
425
  input: (props) => props.id !== "root" ? props.renderDefault(props) : /* @__PURE__ */ jsx(CodeInputConfigContext.Provider, { value: config, children: props.renderDefault(props) })
447
426
  }
448
427
  }
449
- }) : basePlugin;
428
+ } : basePlugin;
450
429
  });
451
430
  export {
452
431
  CodeInputConfigContext,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","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":[],"mappings":"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"}