@sanity/code-input 6.0.4 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +1 -16
  2. package/assets/all-options.png +0 -0
  3. package/assets/basic-input.png +0 -0
  4. package/dist/_chunks-es/CodeMirrorProxy.js +510 -0
  5. package/dist/_chunks-es/CodeMirrorProxy.js.map +1 -0
  6. package/dist/_chunks-es/index.js +427 -0
  7. package/dist/_chunks-es/index.js.map +1 -0
  8. package/dist/index.d.ts +95 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/package.json +31 -86
  11. package/lib/_chunks-cjs/CodeMirrorProxy.cjs +0 -407
  12. package/lib/_chunks-cjs/CodeMirrorProxy.cjs.map +0 -1
  13. package/lib/_chunks-cjs/index.cjs +0 -433
  14. package/lib/_chunks-cjs/index.cjs.map +0 -1
  15. package/lib/_chunks-es/CodeMirrorProxy.js +0 -395
  16. package/lib/_chunks-es/CodeMirrorProxy.js.map +0 -1
  17. package/lib/_chunks-es/index.js +0 -437
  18. package/lib/_chunks-es/index.js.map +0 -1
  19. package/lib/index.cjs +0 -8
  20. package/lib/index.cjs.map +0 -1
  21. package/lib/index.d.cts +0 -121
  22. package/lib/index.d.ts +0 -121
  23. package/sanity.json +0 -8
  24. package/src/CodeInput.tsx +0 -181
  25. package/src/LanguageField.tsx +0 -41
  26. package/src/LanguageInput.tsx +0 -35
  27. package/src/PreviewCode.tsx +0 -71
  28. package/src/codemirror/CodeMirrorProxy.tsx +0 -159
  29. package/src/codemirror/CodeModeContext.tsx +0 -5
  30. package/src/codemirror/defaultCodeModes.ts +0 -109
  31. package/src/codemirror/extensions/backwardsCompatibleTone.ts +0 -19
  32. package/src/codemirror/extensions/highlightLineExtension.ts +0 -175
  33. package/src/codemirror/extensions/theme.ts +0 -65
  34. package/src/codemirror/extensions/useCodeMirrorTheme.ts +0 -64
  35. package/src/codemirror/extensions/useFontSize.ts +0 -24
  36. package/src/codemirror/useCodeMirror-client.test.tsx +0 -51
  37. package/src/codemirror/useCodeMirror-server.test.tsx +0 -18
  38. package/src/codemirror/useCodeMirror.tsx +0 -11
  39. package/src/codemirror/useLanguageMode.tsx +0 -60
  40. package/src/config.ts +0 -35
  41. package/src/getMedia.tsx +0 -93
  42. package/src/index.ts +0 -8
  43. package/src/plugin.tsx +0 -40
  44. package/src/sanity-ui.d.ts +0 -5
  45. package/src/schema.tsx +0 -86
  46. package/src/types.ts +0 -35
  47. package/src/ui/focusRingStyle.ts +0 -27
  48. package/src/useFieldMember.ts +0 -16
  49. package/v2-incompatible.js +0 -11
  50. /package/{lib → dist}/index.js +0 -0
  51. /package/{lib → dist}/index.js.map +0 -0
package/package.json CHANGED
@@ -1,49 +1,38 @@
1
1
  {
2
2
  "name": "@sanity/code-input",
3
- "version": "6.0.4",
3
+ "version": "7.0.0",
4
4
  "description": "Sanity input component for code, powered by CodeMirror",
5
5
  "keywords": [
6
- "sanity",
7
6
  "cms",
7
+ "code-editor",
8
+ "code-input",
9
+ "content",
8
10
  "headless",
9
11
  "realtime",
10
- "content",
11
- "code-input",
12
- "sanity-plugin",
13
- "code-editor"
12
+ "sanity",
13
+ "sanity-plugin"
14
14
  ],
15
- "homepage": "https://github.com/sanity-io/code-input#readme",
15
+ "homepage": "https://github.com/sanity-io/plugins/tree/main/plugins/@sanity/code-input#readme",
16
16
  "bugs": {
17
- "url": "https://github.com/sanity-io/code-input/issues"
17
+ "url": "https://github.com/sanity-io/plugins/issues"
18
18
  },
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "git@github.com:sanity-io/code-input.git"
21
+ "url": "git+ssh://git@github.com/sanity-io/plugins.git",
22
+ "directory": "plugins/@sanity/code-input"
22
23
  },
23
- "license": "MIT",
24
24
  "author": "Sanity.io <hello@sanity.io>",
25
- "sideEffects": false,
25
+ "license": "MIT",
26
26
  "type": "module",
27
27
  "exports": {
28
- ".": {
29
- "source": "./src/index.ts",
30
- "import": "./lib/index.js",
31
- "require": "./lib/index.cjs",
32
- "default": "./lib/index.js"
33
- },
28
+ ".": "./dist/index.js",
34
29
  "./package.json": "./package.json"
35
30
  },
36
- "main": "./lib/index.cjs",
37
- "module": "./lib/index.js",
38
- "types": "./lib/index.d.ts",
31
+ "types": "./dist/index.d.ts",
39
32
  "files": [
40
- "lib",
41
- "sanity.json",
42
- "src",
43
- "v2-incompatible.js"
33
+ "assets",
34
+ "dist"
44
35
  ],
45
- "browserslist": "extends @sanity/browserslist-config",
46
- "prettier": "@sanity/prettier-config",
47
36
  "dependencies": {
48
37
  "@codemirror/autocomplete": "^6.19.0",
49
38
  "@codemirror/commands": "^6.9.0",
@@ -62,79 +51,35 @@
62
51
  "@juggle/resize-observer": "^3.4.0",
63
52
  "@lezer/highlight": "^1.2.1",
64
53
  "@sanity/icons": "^3.7.4",
65
- "@sanity/incompatible-plugin": "^1.0.5",
66
- "@sanity/ui": "^3.1.10",
54
+ "@sanity/ui": "^3.1.11",
67
55
  "@uiw/codemirror-themes": "^4.25.2",
68
56
  "@uiw/react-codemirror": "^4.25.2"
69
57
  },
70
58
  "devDependencies": {
71
- "@babel/core": "^7.28.4",
72
- "@babel/preset-env": "^7.28.3",
73
- "@babel/preset-react": "^7.27.1",
74
- "@changesets/changelog-github": "^0.5.1",
75
- "@changesets/cli": "^2.29.7",
76
- "@eslint/js": "^9.37.0",
77
- "@sanity/browserslist-config": "^1.0.5",
78
- "@sanity/pkg-utils": "^8.1.21",
79
- "@sanity/plugin-kit": "^4.0.19",
80
- "@sanity/prettier-config": "^2.0.1",
81
- "@sanity/vision": "^4.10.3",
82
- "@testing-library/jest-dom": "^6.9.1",
83
- "@testing-library/react": "^16.3.0",
84
- "@types/jest": "^30.0.0",
85
- "@types/react": "^19.2.2",
86
- "@types/react-dom": "^19.2.2",
59
+ "@sanity/pkg-utils": "^10.2.1",
60
+ "@types/react": "^19.2.7",
61
+ "@typescript/native-preview": "7.0.0-dev.20251216.1",
87
62
  "babel-plugin-react-compiler": "^1.0.0",
88
- "eslint": "^9.37.0",
89
- "eslint-config-prettier": "^10.1.8",
90
- "eslint-formatter-gha": "^1.6.0",
91
- "eslint-plugin-react": "^7.37.5",
92
- "eslint-plugin-react-hooks": "^7.0.0",
93
- "globals": "^16.4.0",
94
- "husky": "^8.0.3",
95
- "jest": "^30.2.0",
96
- "jest-environment-jsdom": "^30.2.0",
97
- "lint-staged": "^15.5.2",
98
- "npm-run-all2": "^5.0.0",
99
- "prettier": "^3.6.2",
100
- "react": "^19.2.0",
101
- "react-dom": "^19.2.0",
102
- "rimraf": "^5.0.5",
103
- "sanity": "^4.10.3",
63
+ "babel-plugin-styled-components": "^2.1.4",
64
+ "eslint": "^9.39.2",
65
+ "react": "^19.2.3",
66
+ "sanity": "^5.0.1",
104
67
  "styled-components": "^6.1.19",
105
- "ts-jest": "^29.4.5",
106
68
  "typescript": "5.9.3",
107
- "typescript-eslint": "^8.46.1"
69
+ "@repo/eslint-config": "0.0.7",
70
+ "@repo/tsconfig": "1.0.0",
71
+ "@repo/package.config": "0.0.0"
108
72
  },
109
73
  "peerDependencies": {
110
- "react": "^18 || >=19.0.0-0",
111
- "react-dom": "^18 || >=19.0.0-0",
112
- "sanity": "^3 || ^4.0.0-0 || ^5",
113
- "styled-components": "^5.2 || ^6"
74
+ "react": "^19.2",
75
+ "sanity": "^5",
76
+ "styled-components": "^6.1"
114
77
  },
115
78
  "engines": {
116
79
  "node": ">=20.19 <22 || >=22.12"
117
80
  },
118
- "sanityExchangeUrl": "https://www.sanity.io/plugins/code-input",
119
- "sanityPlugin": {
120
- "verifyPackage": {
121
- "babelConfig": false,
122
- "tsconfig": false,
123
- "tsc": false,
124
- "nodeEngine": false,
125
- "eslintImports": false
126
- }
127
- },
128
81
  "scripts": {
129
- "build": "plugin-kit verify-package --silent && pkg-utils build --strict --check --clean",
130
- "clean": "rimraf lib",
131
- "dev": "sanity dev",
132
- "format": "prettier --write .",
133
- "link-watch": "plugin-kit link-watch",
134
- "lint": "eslint .",
135
- "release": "changeset publish",
136
- "test": "jest",
137
- "type-check": "tsc --noEmit",
138
- "watch": "pkg-utils watch --strict"
82
+ "build": "pkg build --strict --check --clean",
83
+ "lint": "eslint ."
139
84
  }
140
85
  }
@@ -1,407 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __copyProps = (to, from, except, desc) => {
8
- if (from && typeof from == "object" || typeof from == "function")
9
- for (let key of __getOwnPropNames(from))
10
- !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- return to;
12
- };
13
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
14
- // If the importer is in node compatibility mode or this is not an ESM
15
- // file that has been converted to a CommonJS file using a Babel-
16
- // compatible transform (i.e. "__esModule" has not been set), then set
17
- // "default" to the CommonJS "module.exports" for node compatibility.
18
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
19
- mod
20
- ));
21
- var jsxRuntime = require("react/jsx-runtime"), view = require("@codemirror/view"), ui = require("@sanity/ui"), CodeMirror = require("@uiw/react-codemirror"), react = require("react"), index = require("./index.cjs"), language = require("@codemirror/language"), state = require("@codemirror/state"), theme = require("@sanity/ui/theme"), highlight = require("@lezer/highlight"), codemirrorThemes = require("@uiw/codemirror-themes");
22
- function _interopDefaultCompat(e) {
23
- return e && typeof e == "object" && "default" in e ? e : { default: e };
24
- }
25
- var CodeMirror__default = /* @__PURE__ */ _interopDefaultCompat(CodeMirror);
26
- const defaultCodeModes = [
27
- {
28
- name: "groq",
29
- loader: () => import("@codemirror/lang-javascript").then(({ javascriptLanguage }) => javascriptLanguage)
30
- },
31
- {
32
- name: "javascript",
33
- loader: () => import("@codemirror/lang-javascript").then(({ javascript }) => javascript({ jsx: !1 }))
34
- },
35
- {
36
- name: "jsx",
37
- loader: () => import("@codemirror/lang-javascript").then(({ javascript }) => javascript({ jsx: !0 }))
38
- },
39
- {
40
- name: "typescript",
41
- loader: () => import("@codemirror/lang-javascript").then(
42
- ({ javascript }) => javascript({ jsx: !1, typescript: !0 })
43
- )
44
- },
45
- {
46
- name: "tsx",
47
- loader: () => import("@codemirror/lang-javascript").then(
48
- ({ javascript }) => javascript({ jsx: !0, typescript: !0 })
49
- )
50
- },
51
- { name: "php", loader: () => import("@codemirror/lang-php").then(({ php }) => php()) },
52
- { name: "sql", loader: () => import("@codemirror/lang-sql").then(({ sql }) => sql()) },
53
- {
54
- name: "mysql",
55
- loader: () => import("@codemirror/lang-sql").then(({ sql, MySQL }) => sql({ dialect: MySQL }))
56
- },
57
- { name: "json", loader: () => import("@codemirror/lang-json").then(({ json }) => json()) },
58
- {
59
- name: "markdown",
60
- loader: () => import("@codemirror/lang-markdown").then(({ markdown }) => markdown())
61
- },
62
- { name: "java", loader: () => import("@codemirror/lang-java").then(({ java }) => java()) },
63
- { name: "html", loader: () => import("@codemirror/lang-html").then(({ html }) => html()) },
64
- {
65
- name: "csharp",
66
- loader: () => import("@codemirror/legacy-modes/mode/clike").then(
67
- ({ csharp }) => language.StreamLanguage.define(csharp)
68
- )
69
- },
70
- {
71
- name: "sh",
72
- loader: () => import("@codemirror/legacy-modes/mode/shell").then(({ shell }) => language.StreamLanguage.define(shell))
73
- },
74
- {
75
- name: "css",
76
- loader: () => import("@codemirror/legacy-modes/mode/css").then(({ css }) => language.StreamLanguage.define(css))
77
- },
78
- {
79
- name: "scss",
80
- loader: () => import("@codemirror/legacy-modes/mode/css").then(({ css }) => language.StreamLanguage.define(css))
81
- },
82
- {
83
- name: "sass",
84
- loader: () => import("@codemirror/legacy-modes/mode/sass").then(({ sass }) => language.StreamLanguage.define(sass))
85
- },
86
- {
87
- name: "ruby",
88
- loader: () => import("@codemirror/legacy-modes/mode/ruby").then(({ ruby }) => language.StreamLanguage.define(ruby))
89
- },
90
- {
91
- name: "python",
92
- loader: () => import("@codemirror/legacy-modes/mode/python").then(
93
- ({ python }) => language.StreamLanguage.define(python)
94
- )
95
- },
96
- {
97
- name: "xml",
98
- loader: () => import("@codemirror/legacy-modes/mode/xml").then(({ xml }) => language.StreamLanguage.define(xml))
99
- },
100
- {
101
- name: "yaml",
102
- loader: () => import("@codemirror/legacy-modes/mode/yaml").then(({ yaml }) => language.StreamLanguage.define(yaml))
103
- },
104
- {
105
- name: "golang",
106
- loader: () => import("@codemirror/legacy-modes/mode/go").then(({ go }) => language.StreamLanguage.define(go))
107
- },
108
- { name: "text", loader: () => {
109
- } },
110
- { name: "batch", loader: () => {
111
- } }
112
- ];
113
- function getBackwardsCompatibleTone(themeCtx) {
114
- return themeCtx.tone !== "neutral" && themeCtx.tone !== "suggest" ? themeCtx.tone : themeCtx.tone === "neutral" ? "default" : "primary";
115
- }
116
- const highlightLineClass = "cm-highlight-line", addLineHighlight = state.StateEffect.define(), removeLineHighlight = state.StateEffect.define(), lineHighlightField = state.StateField.define({
117
- create() {
118
- return view.Decoration.none;
119
- },
120
- update(lines, tr) {
121
- lines = lines.map(tr.changes);
122
- for (const e of tr.effects)
123
- e.is(addLineHighlight) && (lines = lines.update({ add: [lineHighlightMark.range(e.value)] })), e.is(removeLineHighlight) && (lines = lines.update({
124
- filter: (from) => from !== e.value
125
- }));
126
- return lines;
127
- },
128
- toJSON(value, state2) {
129
- const highlightLines = [], iter = value.iter();
130
- for (; iter.value; ) {
131
- const lineNumber = state2.doc.lineAt(iter.from).number;
132
- highlightLines.includes(lineNumber) || highlightLines.push(lineNumber), iter.next();
133
- }
134
- return highlightLines;
135
- },
136
- fromJSON(value, state2) {
137
- const lines = state2.doc.lines, highlights = value.filter((line) => line <= lines).map((line) => lineHighlightMark.range(state2.doc.line(line).from));
138
- highlights.sort((a, b) => a.from - b.from);
139
- try {
140
- return view.Decoration.none.update({
141
- add: highlights
142
- });
143
- } catch (e) {
144
- return console.error(e), view.Decoration.none;
145
- }
146
- },
147
- provide: (f) => view.EditorView.decorations.from(f)
148
- }), lineHighlightMark = view.Decoration.line({
149
- class: highlightLineClass
150
- }), highlightState = {
151
- highlight: lineHighlightField
152
- };
153
- function createCodeMirrorTheme(options) {
154
- const { themeCtx } = options, fallbackTone = getBackwardsCompatibleTone(themeCtx), dark = { color: themeCtx.theme.color.dark[fallbackTone] }, light = { color: themeCtx.theme.color.light[fallbackTone] };
155
- return view.EditorView.baseTheme({
156
- ".cm-lineNumbers": {
157
- cursor: "default"
158
- },
159
- ".cm-line.cm-line": {
160
- position: "relative"
161
- },
162
- // need set background with pseudoelement so it does not render over selection color
163
- [`.${highlightLineClass}::before`]: {
164
- position: "absolute",
165
- top: 0,
166
- bottom: 0,
167
- left: 0,
168
- right: 0,
169
- zIndex: -3,
170
- content: "''",
171
- boxSizing: "border-box"
172
- },
173
- [`&dark .${highlightLineClass}::before`]: {
174
- background: theme.rgba(dark.color.muted.caution.pressed.bg, 0.5)
175
- },
176
- [`&light .${highlightLineClass}::before`]: {
177
- background: theme.rgba(light.color.muted.caution.pressed.bg, 0.75)
178
- }
179
- });
180
- }
181
- const highlightLine = (config) => {
182
- const highlightTheme = createCodeMirrorTheme({ themeCtx: config.theme });
183
- return [
184
- lineHighlightField,
185
- config.readOnly ? [] : view.lineNumbers({
186
- domEventHandlers: {
187
- mousedown: (editorView, lineInfo) => {
188
- const line = editorView.state.doc.lineAt(lineInfo.from);
189
- let isHighlighted = !1;
190
- return editorView.state.field(lineHighlightField).between(line.from, line.to, (_from, _to, value) => {
191
- if (value)
192
- return isHighlighted = !0, !1;
193
- }), isHighlighted ? editorView.dispatch({ effects: removeLineHighlight.of(line.from) }) : editorView.dispatch({ effects: addLineHighlight.of(line.from) }), config?.onHighlightChange && config.onHighlightChange(editorView.state.toJSON(highlightState).highlight), !0;
194
- }
195
- }
196
- }),
197
- highlightTheme
198
- ];
199
- };
200
- function setHighlightedLines(view2, highlightLines) {
201
- const doc = view2.state.doc, lines = doc.lines, allLineNumbers = Array.from({ length: lines }, (_x, i) => i + 1);
202
- view2.dispatch({
203
- effects: allLineNumbers.map((lineNumber) => {
204
- const line = doc.line(lineNumber);
205
- return highlightLines?.includes(lineNumber) ? addLineHighlight.of(line.from) : removeLineHighlight.of(line.from);
206
- })
207
- });
208
- }
209
- function useThemeExtension() {
210
- const themeCtx = ui.useRootTheme();
211
- return react.useMemo(() => {
212
- const fallbackTone = getBackwardsCompatibleTone(themeCtx), dark = { color: themeCtx.theme.color.dark[fallbackTone] }, light = { color: themeCtx.theme.color.light[fallbackTone] };
213
- return view.EditorView.baseTheme({
214
- "&.cm-editor": {
215
- height: "100%"
216
- },
217
- "&.cm-editor.cm-focused": {
218
- outline: "none"
219
- },
220
- // Matching brackets
221
- "&.cm-editor.cm-focused .cm-matchingBracket": {
222
- backgroundColor: "transparent"
223
- },
224
- "&.cm-editor.cm-focused .cm-nonmatchingBracket": {
225
- backgroundColor: "transparent"
226
- },
227
- "&dark.cm-editor.cm-focused .cm-matchingBracket": {
228
- outline: `1px solid ${dark.color.base.border}`
229
- },
230
- "&dark.cm-editor.cm-focused .cm-nonmatchingBracket": {
231
- outline: `1px solid ${dark.color.base.border}`
232
- },
233
- "&light.cm-editor.cm-focused .cm-matchingBracket": {
234
- outline: `1px solid ${light.color.base.border}`
235
- },
236
- "&light.cm-editor.cm-focused .cm-nonmatchingBracket": {
237
- outline: `1px solid ${light.color.base.border}`
238
- },
239
- // Size and padding of gutter
240
- "& .cm-lineNumbers .cm-gutterElement": {
241
- minWidth: "32px !important",
242
- padding: "0 8px !important"
243
- },
244
- "& .cm-gutter.cm-foldGutter": {
245
- width: "0px !important"
246
- },
247
- // Color of gutter
248
- "&dark .cm-gutters": {
249
- color: `${theme.rgba(dark.color.card.enabled.code.fg, 0.5)} !important`,
250
- borderRight: `1px solid ${theme.rgba(dark.color.base.border, 0.5)}`
251
- },
252
- "&light .cm-gutters": {
253
- color: `${theme.rgba(light.color.card.enabled.code.fg, 0.5)} !important`,
254
- borderRight: `1px solid ${theme.rgba(light.color.base.border, 0.5)}`
255
- }
256
- });
257
- }, [themeCtx]);
258
- }
259
- function useCodeMirrorTheme() {
260
- const theme$1 = ui.useTheme();
261
- return react.useMemo(() => {
262
- const { code: codeFont } = theme$1.sanity.fonts, { base, card, dark, syntax } = theme$1.sanity.color;
263
- return codemirrorThemes.createTheme({
264
- theme: dark ? "dark" : "light",
265
- settings: {
266
- background: card.enabled.bg,
267
- foreground: card.enabled.code.fg,
268
- lineHighlight: card.enabled.bg,
269
- fontFamily: codeFont.family,
270
- caret: base.focusRing,
271
- selection: theme.rgba(base.focusRing, 0.2),
272
- selectionMatch: theme.rgba(base.focusRing, 0.4),
273
- gutterBackground: card.disabled.bg,
274
- gutterForeground: card.disabled.code.fg,
275
- gutterActiveForeground: card.enabled.fg
276
- },
277
- styles: [
278
- {
279
- tag: [highlight.tags.heading, highlight.tags.heading2, highlight.tags.heading3, highlight.tags.heading4, highlight.tags.heading5, highlight.tags.heading6],
280
- color: card.enabled.fg
281
- },
282
- { tag: highlight.tags.angleBracket, color: card.enabled.code.fg },
283
- { tag: highlight.tags.atom, color: syntax.keyword },
284
- { tag: highlight.tags.attributeName, color: syntax.attrName },
285
- { tag: highlight.tags.bool, color: syntax.boolean },
286
- { tag: highlight.tags.bracket, color: card.enabled.code.fg },
287
- { tag: highlight.tags.className, color: syntax.className },
288
- { tag: highlight.tags.comment, color: syntax.comment },
289
- { tag: highlight.tags.definition(highlight.tags.typeName), color: syntax.function },
290
- {
291
- tag: [
292
- highlight.tags.definition(highlight.tags.variableName),
293
- highlight.tags.function(highlight.tags.variableName),
294
- highlight.tags.className,
295
- highlight.tags.attributeName
296
- ],
297
- color: syntax.function
298
- },
299
- { tag: [highlight.tags.function(highlight.tags.propertyName), highlight.tags.propertyName], color: syntax.function },
300
- { tag: highlight.tags.keyword, color: syntax.keyword },
301
- { tag: highlight.tags.null, color: syntax.number },
302
- { tag: highlight.tags.number, color: syntax.number },
303
- { tag: highlight.tags.meta, color: card.enabled.code.fg },
304
- { tag: highlight.tags.operator, color: syntax.operator },
305
- { tag: highlight.tags.propertyName, color: syntax.property },
306
- { tag: [highlight.tags.string, highlight.tags.special(highlight.tags.brace)], color: syntax.string },
307
- { tag: highlight.tags.tagName, color: syntax.className },
308
- { tag: highlight.tags.typeName, color: syntax.keyword }
309
- ]
310
- });
311
- }, [theme$1]);
312
- }
313
- function useFontSizeExtension(props) {
314
- const { fontSize: fontSizeProp } = props, theme2 = ui.useTheme();
315
- return react.useMemo(() => {
316
- const { code: codeFont } = theme2.sanity.fonts, { fontSize, lineHeight } = codeFont.sizes[fontSizeProp] || codeFont.sizes[2];
317
- return view.EditorView.baseTheme({
318
- "&": {
319
- fontSize: ui.rem(fontSize)
320
- },
321
- "& .cm-scroller": {
322
- lineHeight: `${lineHeight / fontSize} !important`
323
- }
324
- });
325
- }, [fontSizeProp, theme2]);
326
- }
327
- const CodeMirrorProxy = react.forwardRef(
328
- function(props, ref) {
329
- const {
330
- basicSetup: basicSetupProp,
331
- highlightLines,
332
- languageMode,
333
- onHighlightChange,
334
- readOnly,
335
- value,
336
- ...codeMirrorProps
337
- } = props, themeCtx = ui.useRootTheme(), codeMirrorTheme = useCodeMirrorTheme(), [editorView, setEditorView] = react.useState(void 0), themeExtension = useThemeExtension(), fontSizeExtension = useFontSizeExtension({ fontSize: 1 }), languageExtension = useLanguageExtension(languageMode), highlightLineExtension = react.useMemo(
338
- () => highlightLine({
339
- onHighlightChange,
340
- readOnly,
341
- theme: themeCtx
342
- }),
343
- [onHighlightChange, readOnly, themeCtx]
344
- ), extensions = react.useMemo(() => {
345
- const baseExtensions = [
346
- themeExtension,
347
- fontSizeExtension,
348
- highlightLineExtension,
349
- view.EditorView.lineWrapping
350
- ];
351
- return languageExtension ? [...baseExtensions, languageExtension] : baseExtensions;
352
- }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension]);
353
- react.useEffect(() => {
354
- editorView && setHighlightedLines(editorView, highlightLines ?? []);
355
- }, [editorView, highlightLines, value]);
356
- const initialState = react.useMemo(() => ({
357
- json: {
358
- doc: value ?? "",
359
- selection: {
360
- main: 0,
361
- ranges: [{ anchor: 0, head: 0 }]
362
- },
363
- highlight: highlightLines ?? []
364
- },
365
- fields: highlightState
366
- }), []), handleCreateEditor = react.useCallback((view2) => {
367
- setEditorView(view2);
368
- }, []), basicSetup = react.useMemo(
369
- () => basicSetupProp ?? {
370
- highlightActiveLine: !1
371
- },
372
- [basicSetupProp]
373
- );
374
- return /* @__PURE__ */ jsxRuntime.jsx(
375
- CodeMirror__default.default,
376
- {
377
- ...codeMirrorProps,
378
- value,
379
- ref,
380
- extensions,
381
- theme: codeMirrorTheme,
382
- onCreateEditor: handleCreateEditor,
383
- initialState,
384
- basicSetup
385
- }
386
- );
387
- }
388
- );
389
- function useLanguageExtension(mode) {
390
- const codeConfig = react.useContext(index.CodeInputConfigContext), [languageExtension, setLanguageExtension] = react.useState();
391
- return react.useEffect(() => {
392
- const codeMode = [...codeConfig?.codeModes ?? [], ...defaultCodeModes].find((m) => m.name === mode);
393
- codeMode?.loader || console.warn(
394
- `Found no codeMode for language mode ${mode}, syntax highlighting will be disabled.`
395
- );
396
- let active = !0;
397
- return Promise.resolve(codeMode?.loader()).then((extension) => {
398
- active && setLanguageExtension(extension);
399
- }).catch((e) => {
400
- console.error(`Failed to load language mode ${mode}`, e), active && setLanguageExtension(void 0);
401
- }), () => {
402
- active = !1;
403
- };
404
- }, [mode, codeConfig]), languageExtension;
405
- }
406
- exports.default = CodeMirrorProxy;
407
- //# sourceMappingURL=CodeMirrorProxy.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodeMirrorProxy.cjs","sources":["../../src/codemirror/defaultCodeModes.ts","../../src/codemirror/extensions/backwardsCompatibleTone.ts","../../src/codemirror/extensions/highlightLineExtension.ts","../../src/codemirror/extensions/theme.ts","../../src/codemirror/extensions/useCodeMirrorTheme.ts","../../src/codemirror/extensions/useFontSize.ts","../../src/codemirror/CodeMirrorProxy.tsx"],"sourcesContent":["import {StreamLanguage} from '@codemirror/language'\nimport type {Extension} from '@codemirror/state'\n\nexport interface CodeMode {\n name: string\n loader: ModeLoader\n}\nexport type ModeLoader = () => Promise<Extension | undefined> | Extension | undefined\n\nexport const defaultCodeModes: CodeMode[] = [\n {\n name: 'groq',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascriptLanguage}) => javascriptLanguage),\n },\n {\n name: 'javascript',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) => javascript({jsx: false})),\n },\n {\n name: 'jsx',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) => javascript({jsx: true})),\n },\n {\n name: 'typescript',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) =>\n javascript({jsx: false, typescript: true}),\n ),\n },\n {\n name: 'tsx',\n loader: () =>\n import('@codemirror/lang-javascript').then(({javascript}) =>\n javascript({jsx: true, typescript: true}),\n ),\n },\n {name: 'php', loader: () => import('@codemirror/lang-php').then(({php}) => php())},\n {name: 'sql', loader: () => import('@codemirror/lang-sql').then(({sql}) => sql())},\n {\n name: 'mysql',\n loader: () => import('@codemirror/lang-sql').then(({sql, MySQL}) => sql({dialect: MySQL})),\n },\n {name: 'json', loader: () => import('@codemirror/lang-json').then(({json}) => json())},\n {\n name: 'markdown',\n loader: () => import('@codemirror/lang-markdown').then(({markdown}) => markdown()),\n },\n {name: 'java', loader: () => import('@codemirror/lang-java').then(({java}) => java())},\n {name: 'html', loader: () => import('@codemirror/lang-html').then(({html}) => html())},\n {\n name: 'csharp',\n loader: () =>\n import('@codemirror/legacy-modes/mode/clike').then(({csharp}) =>\n StreamLanguage.define(csharp),\n ),\n },\n {\n name: 'sh',\n loader: () =>\n import('@codemirror/legacy-modes/mode/shell').then(({shell}) => StreamLanguage.define(shell)),\n },\n {\n name: 'css',\n loader: () =>\n import('@codemirror/legacy-modes/mode/css').then(({css}) => StreamLanguage.define(css)),\n },\n {\n name: 'scss',\n loader: () =>\n import('@codemirror/legacy-modes/mode/css').then(({css}) => StreamLanguage.define(css)),\n },\n {\n name: 'sass',\n loader: () =>\n import('@codemirror/legacy-modes/mode/sass').then(({sass}) => StreamLanguage.define(sass)),\n },\n {\n name: 'ruby',\n loader: () =>\n import('@codemirror/legacy-modes/mode/ruby').then(({ruby}) => StreamLanguage.define(ruby)),\n },\n {\n name: 'python',\n loader: () =>\n import('@codemirror/legacy-modes/mode/python').then(({python}) =>\n StreamLanguage.define(python),\n ),\n },\n {\n name: 'xml',\n loader: () =>\n import('@codemirror/legacy-modes/mode/xml').then(({xml}) => StreamLanguage.define(xml)),\n },\n {\n name: 'yaml',\n loader: () =>\n import('@codemirror/legacy-modes/mode/yaml').then(({yaml}) => StreamLanguage.define(yaml)),\n },\n {\n name: 'golang',\n loader: () =>\n import('@codemirror/legacy-modes/mode/go').then(({go}) => StreamLanguage.define(go)),\n },\n {name: 'text', loader: () => undefined},\n {name: 'batch', loader: () => undefined},\n]\n","import type {ThemeContextValue} from '@sanity/ui'\n\n/**\n * `@sanity/ui@v2.9` introduced two new tones; \"neutral\" and \"suggest\",\n * which maps to \"default\" and \"primary\" respectively in the old theme.\n * This function returns the \"backwards compatible\" tone value.\n *\n * @returns The tone value that is backwards compatible with the old theme.\n * @internal\n */\nexport function getBackwardsCompatibleTone(\n themeCtx: ThemeContextValue,\n): Exclude<ThemeContextValue['tone'], 'neutral' | 'suggest'> {\n if (themeCtx.tone !== 'neutral' && themeCtx.tone !== 'suggest') {\n return themeCtx.tone\n }\n\n return themeCtx.tone === 'neutral' ? 'default' : 'primary'\n}\n","import {type Extension, StateEffect, StateField} from '@codemirror/state'\nimport {Decoration, type DecorationSet, EditorView, lineNumbers} from '@codemirror/view'\nimport type {ThemeContextValue} from '@sanity/ui'\nimport {rgba} from '@sanity/ui/theme'\n\nimport {getBackwardsCompatibleTone} from './backwardsCompatibleTone'\n\nconst highlightLineClass = 'cm-highlight-line'\n\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 // eslint-disable-next-line no-console\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 // eslint-disable-next-line no-console\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 // eslint-disable-next-line no-console\n console.error(`Failed to load language mode ${mode}`, e)\n if (active) {\n setLanguageExtension(undefined)\n }\n })\n return () => {\n active = false\n }\n }, [mode, codeConfig])\n\n return languageExtension\n}\n\nexport default CodeMirrorProxy\n"],"names":["StreamLanguage","StateEffect","StateField","Decoration","state","EditorView","rgba","lineNumbers","view","useRootTheme","useMemo","theme","useTheme","createTheme","t","rem","forwardRef","useState","useEffect","useCallback","jsx","CodeMirror","useContext","CodeInputConfigContext"],"mappings":"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"}