@sanity/code-input 3.0.1 → 4.1.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 (52) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +140 -64
  3. package/lib/_chunks/CodeMirrorProxy-3836f097.js +619 -0
  4. package/lib/_chunks/CodeMirrorProxy-3836f097.js.map +1 -0
  5. package/lib/_chunks/CodeMirrorProxy-e83d4d37.js +611 -0
  6. package/lib/_chunks/CodeMirrorProxy-e83d4d37.js.map +1 -0
  7. package/lib/_chunks/index-17e68aff.js +563 -0
  8. package/lib/_chunks/index-17e68aff.js.map +1 -0
  9. package/lib/_chunks/index-9a4cb814.js +549 -0
  10. package/lib/_chunks/index-9a4cb814.js.map +1 -0
  11. package/lib/{src/index.d.ts → index.d.ts} +18 -10
  12. package/lib/index.esm.js +1 -1
  13. package/lib/index.esm.js.map +1 -1
  14. package/lib/index.js +10 -1
  15. package/lib/index.js.map +1 -1
  16. package/package.json +53 -27
  17. package/src/CodeInput.tsx +72 -272
  18. package/src/LanguageField.tsx +33 -0
  19. package/src/LanguageInput.tsx +32 -0
  20. package/src/PreviewCode.tsx +40 -68
  21. package/src/__workshop__/index.ts +22 -0
  22. package/src/__workshop__/lazy.tsx +54 -0
  23. package/src/__workshop__/preview.tsx +24 -0
  24. package/src/__workshop__/props.tsx +24 -0
  25. package/src/codemirror/CodeMirrorProxy.tsx +157 -0
  26. package/src/codemirror/CodeModeContext.tsx +4 -0
  27. package/src/codemirror/defaultCodeModes.ts +109 -0
  28. package/src/codemirror/extensions/highlightLineExtension.ts +164 -0
  29. package/src/codemirror/extensions/theme.ts +61 -0
  30. package/src/codemirror/extensions/useCodeMirrorTheme.ts +63 -0
  31. package/src/codemirror/extensions/useFontSize.ts +24 -0
  32. package/src/codemirror/useCodeMirror-client.test.tsx +49 -0
  33. package/src/{ace-editor/AceEditor-server.test.tsx → codemirror/useCodeMirror-server.test.tsx} +3 -4
  34. package/src/codemirror/useCodeMirror.tsx +12 -0
  35. package/src/codemirror/useLanguageMode.tsx +52 -0
  36. package/src/config.ts +1 -13
  37. package/src/getMedia.tsx +0 -2
  38. package/src/index.ts +4 -11
  39. package/src/plugin.tsx +39 -0
  40. package/src/schema.tsx +3 -7
  41. package/src/types.ts +19 -3
  42. package/src/ui/focusRingStyle.ts +27 -0
  43. package/src/useFieldMember.ts +16 -0
  44. package/lib/_chunks/editorSupport-895caf32.esm.js +0 -2
  45. package/lib/_chunks/editorSupport-895caf32.esm.js.map +0 -1
  46. package/lib/_chunks/editorSupport-bda3d360.js +0 -2
  47. package/lib/_chunks/editorSupport-bda3d360.js.map +0 -1
  48. package/src/ace-editor/AceEditor-client.test.tsx +0 -37
  49. package/src/ace-editor/AceEditorLazy.tsx +0 -19
  50. package/src/ace-editor/editorSupport.ts +0 -34
  51. package/src/ace-editor/groq.ts +0 -630
  52. package/src/createHighlightMarkers.ts +0 -24
@@ -0,0 +1,611 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useMemo, forwardRef, useState, useEffect, useCallback, useContext } from 'react';
3
+ import CodeMirror from '@uiw/react-codemirror';
4
+ import { useTheme, rgba, rem, useRootTheme } from '@sanity/ui';
5
+ import { createTheme } from '@uiw/codemirror-themes';
6
+ import { tags } from '@lezer/highlight';
7
+ import { CodeInputConfigContext } from './index-9a4cb814.js';
8
+ import { StreamLanguage } from '@codemirror/language';
9
+ import { StateEffect, StateField } from '@codemirror/state';
10
+ import { Decoration, EditorView, lineNumbers } from '@codemirror/view';
11
+ function useCodeMirrorTheme() {
12
+ const theme = useTheme();
13
+ return useMemo(() => {
14
+ const {
15
+ code: codeFont
16
+ } = theme.sanity.fonts;
17
+ const {
18
+ base,
19
+ card,
20
+ dark,
21
+ syntax
22
+ } = theme.sanity.color;
23
+ return createTheme({
24
+ theme: dark ? "dark" : "light",
25
+ settings: {
26
+ background: card.enabled.bg,
27
+ foreground: card.enabled.code.fg,
28
+ lineHighlight: card.enabled.bg,
29
+ fontFamily: codeFont.family,
30
+ caret: base.focusRing,
31
+ selection: rgba(base.focusRing, 0.2),
32
+ selectionMatch: rgba(base.focusRing, 0.4),
33
+ gutterBackground: card.disabled.bg,
34
+ gutterForeground: card.disabled.code.fg,
35
+ gutterActiveForeground: card.enabled.fg
36
+ },
37
+ styles: [{
38
+ tag: [tags.heading, tags.heading2, tags.heading3, tags.heading4, tags.heading5, tags.heading6],
39
+ color: card.enabled.fg
40
+ }, {
41
+ tag: tags.angleBracket,
42
+ color: card.enabled.code.fg
43
+ }, {
44
+ tag: tags.atom,
45
+ color: syntax.keyword
46
+ }, {
47
+ tag: tags.attributeName,
48
+ color: syntax.attrName
49
+ }, {
50
+ tag: tags.bool,
51
+ color: syntax.boolean
52
+ }, {
53
+ tag: tags.bracket,
54
+ color: card.enabled.code.fg
55
+ }, {
56
+ tag: tags.className,
57
+ color: syntax.className
58
+ }, {
59
+ tag: tags.comment,
60
+ color: syntax.comment
61
+ }, {
62
+ tag: tags.definition(tags.typeName),
63
+ color: syntax.function
64
+ }, {
65
+ tag: [tags.definition(tags.variableName), tags.function(tags.variableName), tags.className, tags.attributeName],
66
+ color: syntax.function
67
+ }, {
68
+ tag: [tags.function(tags.propertyName), tags.propertyName],
69
+ color: syntax.function
70
+ }, {
71
+ tag: tags.keyword,
72
+ color: syntax.keyword
73
+ }, {
74
+ tag: tags.null,
75
+ color: syntax.number
76
+ }, {
77
+ tag: tags.number,
78
+ color: syntax.number
79
+ }, {
80
+ tag: tags.meta,
81
+ color: card.enabled.code.fg
82
+ }, {
83
+ tag: tags.operator,
84
+ color: syntax.operator
85
+ }, {
86
+ tag: tags.propertyName,
87
+ color: syntax.property
88
+ }, {
89
+ tag: [tags.string, tags.special(tags.brace)],
90
+ color: syntax.string
91
+ }, {
92
+ tag: tags.tagName,
93
+ color: syntax.className
94
+ }, {
95
+ tag: tags.typeName,
96
+ color: syntax.keyword
97
+ }]
98
+ });
99
+ }, [theme]);
100
+ }
101
+ const defaultCodeModes = [{
102
+ name: "groq",
103
+ loader: () => import('@codemirror/lang-javascript').then(_ref => {
104
+ let {
105
+ javascript
106
+ } = _ref;
107
+ return javascript({
108
+ jsx: false
109
+ });
110
+ })
111
+ }, {
112
+ name: "javascript",
113
+ loader: () => import('@codemirror/lang-javascript').then(_ref2 => {
114
+ let {
115
+ javascript
116
+ } = _ref2;
117
+ return javascript({
118
+ jsx: false
119
+ });
120
+ })
121
+ }, {
122
+ name: "jsx",
123
+ loader: () => import('@codemirror/lang-javascript').then(_ref3 => {
124
+ let {
125
+ javascript
126
+ } = _ref3;
127
+ return javascript({
128
+ jsx: true
129
+ });
130
+ })
131
+ }, {
132
+ name: "typescript",
133
+ loader: () => import('@codemirror/lang-javascript').then(_ref4 => {
134
+ let {
135
+ javascript
136
+ } = _ref4;
137
+ return javascript({
138
+ jsx: false,
139
+ typescript: true
140
+ });
141
+ })
142
+ }, {
143
+ name: "tsx",
144
+ loader: () => import('@codemirror/lang-javascript').then(_ref5 => {
145
+ let {
146
+ javascript
147
+ } = _ref5;
148
+ return javascript({
149
+ jsx: true,
150
+ typescript: true
151
+ });
152
+ })
153
+ }, {
154
+ name: "php",
155
+ loader: () => import('@codemirror/lang-php').then(_ref6 => {
156
+ let {
157
+ php
158
+ } = _ref6;
159
+ return php();
160
+ })
161
+ }, {
162
+ name: "sql",
163
+ loader: () => import('@codemirror/lang-sql').then(_ref7 => {
164
+ let {
165
+ sql
166
+ } = _ref7;
167
+ return sql();
168
+ })
169
+ }, {
170
+ name: "mysql",
171
+ loader: () => import('@codemirror/lang-sql').then(_ref8 => {
172
+ let {
173
+ sql,
174
+ MySQL
175
+ } = _ref8;
176
+ return sql({
177
+ dialect: MySQL
178
+ });
179
+ })
180
+ }, {
181
+ name: "json",
182
+ loader: () => import('@codemirror/lang-json').then(_ref9 => {
183
+ let {
184
+ json
185
+ } = _ref9;
186
+ return json();
187
+ })
188
+ }, {
189
+ name: "markdown",
190
+ loader: () => import('@codemirror/lang-markdown').then(_ref10 => {
191
+ let {
192
+ markdown
193
+ } = _ref10;
194
+ return markdown();
195
+ })
196
+ }, {
197
+ name: "java",
198
+ loader: () => import('@codemirror/lang-java').then(_ref11 => {
199
+ let {
200
+ java
201
+ } = _ref11;
202
+ return java();
203
+ })
204
+ }, {
205
+ name: "html",
206
+ loader: () => import('@codemirror/lang-html').then(_ref12 => {
207
+ let {
208
+ html
209
+ } = _ref12;
210
+ return html();
211
+ })
212
+ }, {
213
+ name: "csharp",
214
+ loader: () => import('@codemirror/legacy-modes/mode/clike').then(_ref13 => {
215
+ let {
216
+ csharp
217
+ } = _ref13;
218
+ return StreamLanguage.define(csharp);
219
+ })
220
+ }, {
221
+ name: "sh",
222
+ loader: () => import('@codemirror/legacy-modes/mode/shell').then(_ref14 => {
223
+ let {
224
+ shell
225
+ } = _ref14;
226
+ return StreamLanguage.define(shell);
227
+ })
228
+ }, {
229
+ name: "css",
230
+ loader: () => import('@codemirror/legacy-modes/mode/css').then(_ref15 => {
231
+ let {
232
+ css
233
+ } = _ref15;
234
+ return StreamLanguage.define(css);
235
+ })
236
+ }, {
237
+ name: "scss",
238
+ loader: () => import('@codemirror/legacy-modes/mode/css').then(_ref16 => {
239
+ let {
240
+ css
241
+ } = _ref16;
242
+ return StreamLanguage.define(css);
243
+ })
244
+ }, {
245
+ name: "sass",
246
+ loader: () => import('@codemirror/legacy-modes/mode/sass').then(_ref17 => {
247
+ let {
248
+ sass
249
+ } = _ref17;
250
+ return StreamLanguage.define(sass);
251
+ })
252
+ }, {
253
+ name: "ruby",
254
+ loader: () => import('@codemirror/legacy-modes/mode/ruby').then(_ref18 => {
255
+ let {
256
+ ruby
257
+ } = _ref18;
258
+ return StreamLanguage.define(ruby);
259
+ })
260
+ }, {
261
+ name: "python",
262
+ loader: () => import('@codemirror/legacy-modes/mode/python').then(_ref19 => {
263
+ let {
264
+ python
265
+ } = _ref19;
266
+ return StreamLanguage.define(python);
267
+ })
268
+ }, {
269
+ name: "xml",
270
+ loader: () => import('@codemirror/legacy-modes/mode/xml').then(_ref20 => {
271
+ let {
272
+ xml
273
+ } = _ref20;
274
+ return StreamLanguage.define(xml);
275
+ })
276
+ }, {
277
+ name: "yaml",
278
+ loader: () => import('@codemirror/legacy-modes/mode/yaml').then(_ref21 => {
279
+ let {
280
+ yaml
281
+ } = _ref21;
282
+ return StreamLanguage.define(yaml);
283
+ })
284
+ }, {
285
+ name: "golang",
286
+ loader: () => import('@codemirror/legacy-modes/mode/go').then(_ref22 => {
287
+ let {
288
+ go
289
+ } = _ref22;
290
+ return StreamLanguage.define(go);
291
+ })
292
+ }, {
293
+ name: "text",
294
+ loader: () => void 0
295
+ }, {
296
+ name: "batch",
297
+ loader: () => void 0
298
+ }];
299
+ const highlightLineClass = "cm-highlight-line";
300
+ const addLineHighlight = StateEffect.define();
301
+ const removeLineHighlight = StateEffect.define();
302
+ const lineHighlightField = StateField.define({
303
+ create() {
304
+ return Decoration.none;
305
+ },
306
+ update(lines, tr) {
307
+ lines = lines.map(tr.changes);
308
+ for (const e of tr.effects) {
309
+ if (e.is(addLineHighlight)) {
310
+ lines = lines.update({
311
+ add: [lineHighlightMark.range(e.value)]
312
+ });
313
+ }
314
+ if (e.is(removeLineHighlight)) {
315
+ lines = lines.update({
316
+ filter: from => {
317
+ return from !== e.value;
318
+ }
319
+ });
320
+ }
321
+ }
322
+ return lines;
323
+ },
324
+ toJSON(value, state) {
325
+ const highlightLines = [];
326
+ const iter = value.iter();
327
+ while (iter.value) {
328
+ const lineNumber = state.doc.lineAt(iter.from).number;
329
+ if (!highlightLines.includes(lineNumber)) {
330
+ highlightLines.push(lineNumber);
331
+ }
332
+ iter.next();
333
+ }
334
+ return highlightLines;
335
+ },
336
+ fromJSON(value, state) {
337
+ const lines = state.doc.lines;
338
+ const highlights = value.filter(line => line <= lines).map(line => lineHighlightMark.range(state.doc.line(line).from));
339
+ return Decoration.none.update({
340
+ add: highlights
341
+ });
342
+ },
343
+ provide: f => EditorView.decorations.from(f)
344
+ });
345
+ const lineHighlightMark = Decoration.line({
346
+ class: highlightLineClass
347
+ });
348
+ const highlightState = {
349
+ highlight: lineHighlightField
350
+ };
351
+ function createCodeMirrorTheme(options) {
352
+ const {
353
+ themeCtx
354
+ } = options;
355
+ const dark = {
356
+ color: themeCtx.theme.color.dark[themeCtx.tone]
357
+ };
358
+ const light = {
359
+ color: themeCtx.theme.color.light[themeCtx.tone]
360
+ };
361
+ return EditorView.baseTheme({
362
+ ".cm-lineNumbers": {
363
+ cursor: "default"
364
+ },
365
+ ".cm-line.cm-line": {
366
+ position: "relative"
367
+ },
368
+ // need set background with pseudoelement so it does not render over selection color
369
+ [".".concat(highlightLineClass, "::before")]: {
370
+ position: "absolute",
371
+ top: 0,
372
+ bottom: 0,
373
+ left: 0,
374
+ right: 0,
375
+ zIndex: -3,
376
+ content: "''",
377
+ boxSizing: "border-box"
378
+ },
379
+ ["&dark .".concat(highlightLineClass, "::before")]: {
380
+ background: rgba(dark.color.muted.caution.pressed.bg, 0.5)
381
+ },
382
+ ["&light .".concat(highlightLineClass, "::before")]: {
383
+ background: rgba(light.color.muted.caution.pressed.bg, 0.75)
384
+ }
385
+ });
386
+ }
387
+ const highlightLine = config => {
388
+ const highlightTheme = createCodeMirrorTheme({
389
+ themeCtx: config.theme
390
+ });
391
+ return [lineHighlightField, config.readOnly ? [] : lineNumbers({
392
+ domEventHandlers: {
393
+ mousedown: (editorView, lineInfo) => {
394
+ const line = editorView.state.doc.lineAt(lineInfo.from);
395
+ let isHighlighted = false;
396
+ editorView.state.field(lineHighlightField).between(line.from, line.to, (from, to, value) => {
397
+ if (value) {
398
+ isHighlighted = true;
399
+ return false;
400
+ }
401
+ return void 0;
402
+ });
403
+ if (isHighlighted) {
404
+ editorView.dispatch({
405
+ effects: removeLineHighlight.of(line.from)
406
+ });
407
+ } else {
408
+ editorView.dispatch({
409
+ effects: addLineHighlight.of(line.from)
410
+ });
411
+ }
412
+ if (config == null ? void 0 : config.onHighlightChange) {
413
+ config.onHighlightChange(editorView.state.toJSON(highlightState).highlight);
414
+ }
415
+ return true;
416
+ }
417
+ }
418
+ }), highlightTheme];
419
+ };
420
+ function setHighlightedLines(view, highlightLines) {
421
+ const doc = view.state.doc;
422
+ const lines = doc.lines;
423
+ const allLineNumbers = Array.from({
424
+ length: lines
425
+ }, (x, i) => i + 1);
426
+ view.dispatch({
427
+ effects: allLineNumbers.map(lineNumber => {
428
+ const line = doc.line(lineNumber);
429
+ if (highlightLines == null ? void 0 : highlightLines.includes(lineNumber)) {
430
+ return addLineHighlight.of(line.from);
431
+ }
432
+ return removeLineHighlight.of(line.from);
433
+ })
434
+ });
435
+ }
436
+ function useFontSizeExtension(props) {
437
+ const {
438
+ fontSize: fontSizeProp
439
+ } = props;
440
+ const theme = useTheme();
441
+ return useMemo(() => {
442
+ const {
443
+ code: codeFont
444
+ } = theme.sanity.fonts;
445
+ const {
446
+ fontSize,
447
+ lineHeight
448
+ } = codeFont.sizes[fontSizeProp] || codeFont.sizes[2];
449
+ return EditorView.baseTheme({
450
+ "&": {
451
+ fontSize: rem(fontSize)
452
+ },
453
+ "& .cm-scroller": {
454
+ lineHeight: "".concat(lineHeight / fontSize, " !important")
455
+ }
456
+ });
457
+ }, [fontSizeProp, theme]);
458
+ }
459
+ function useThemeExtension() {
460
+ const themeCtx = useRootTheme();
461
+ return useMemo(() => {
462
+ const dark = {
463
+ color: themeCtx.theme.color.dark[themeCtx.tone]
464
+ };
465
+ const light = {
466
+ color: themeCtx.theme.color.light[themeCtx.tone]
467
+ };
468
+ return EditorView.baseTheme({
469
+ "&.cm-editor": {
470
+ height: "100%"
471
+ },
472
+ "&.cm-editor.cm-focused": {
473
+ outline: "none"
474
+ },
475
+ // Matching brackets
476
+ "&.cm-editor.cm-focused .cm-matchingBracket": {
477
+ backgroundColor: "transparent"
478
+ },
479
+ "&.cm-editor.cm-focused .cm-nonmatchingBracket": {
480
+ backgroundColor: "transparent"
481
+ },
482
+ "&dark.cm-editor.cm-focused .cm-matchingBracket": {
483
+ outline: "1px solid ".concat(dark.color.base.border)
484
+ },
485
+ "&dark.cm-editor.cm-focused .cm-nonmatchingBracket": {
486
+ outline: "1px solid ".concat(dark.color.base.border)
487
+ },
488
+ "&light.cm-editor.cm-focused .cm-matchingBracket": {
489
+ outline: "1px solid ".concat(light.color.base.border)
490
+ },
491
+ "&light.cm-editor.cm-focused .cm-nonmatchingBracket": {
492
+ outline: "1px solid ".concat(light.color.base.border)
493
+ },
494
+ // Size and padding of gutter
495
+ "& .cm-lineNumbers .cm-gutterElement": {
496
+ minWidth: "32px !important",
497
+ padding: "0 8px !important"
498
+ },
499
+ "& .cm-gutter.cm-foldGutter": {
500
+ width: "0px !important"
501
+ },
502
+ // Color of gutter
503
+ "&dark .cm-gutters": {
504
+ color: "".concat(rgba(dark.color.card.enabled.code.fg, 0.5), " !important"),
505
+ borderRight: "1px solid ".concat(rgba(dark.color.base.border, 0.5))
506
+ },
507
+ "&light .cm-gutters": {
508
+ color: "".concat(rgba(light.color.card.enabled.code.fg, 0.5), " !important"),
509
+ borderRight: "1px solid ".concat(rgba(light.color.base.border, 0.5))
510
+ }
511
+ });
512
+ }, [themeCtx]);
513
+ }
514
+ const CodeMirrorProxy = forwardRef(function CodeMirrorProxy2(props, ref) {
515
+ const {
516
+ basicSetup: basicSetupProp,
517
+ highlightLines,
518
+ languageMode,
519
+ onHighlightChange,
520
+ readOnly,
521
+ value,
522
+ ...codeMirrorProps
523
+ } = props;
524
+ const themeCtx = useRootTheme();
525
+ const codeMirrorTheme = useCodeMirrorTheme();
526
+ const [editorView, setEditorView] = useState(void 0);
527
+ const themeExtension = useThemeExtension();
528
+ const fontSizeExtension = useFontSizeExtension({
529
+ fontSize: 1
530
+ });
531
+ const languageExtension = useLanguageExtension(languageMode);
532
+ const highlightLineExtension = useMemo(() => highlightLine({
533
+ onHighlightChange,
534
+ readOnly,
535
+ theme: themeCtx
536
+ }), [onHighlightChange, readOnly, themeCtx]);
537
+ const extensions = useMemo(() => {
538
+ const baseExtensions = [themeExtension, fontSizeExtension, highlightLineExtension, EditorView.lineWrapping];
539
+ if (languageExtension) {
540
+ return [...baseExtensions, languageExtension];
541
+ }
542
+ return baseExtensions;
543
+ }, [fontSizeExtension, highlightLineExtension, languageExtension, themeExtension]);
544
+ useEffect(() => {
545
+ if (editorView) {
546
+ setHighlightedLines(editorView, highlightLines != null ? highlightLines : []);
547
+ }
548
+ }, [editorView, highlightLines, value]);
549
+ const initialState = useMemo(() => {
550
+ return {
551
+ json: {
552
+ doc: value != null ? value : "",
553
+ selection: {
554
+ main: 0,
555
+ ranges: [{
556
+ anchor: 0,
557
+ head: 0
558
+ }]
559
+ },
560
+ highlight: highlightLines != null ? highlightLines : []
561
+ },
562
+ fields: highlightState
563
+ };
564
+ }, []);
565
+ const handleCreateEditor = useCallback(view => {
566
+ setEditorView(view);
567
+ }, []);
568
+ const basicSetup = useMemo(() => basicSetupProp != null ? basicSetupProp : {
569
+ highlightActiveLine: false
570
+ }, [basicSetupProp]);
571
+ return /* @__PURE__ */jsx(CodeMirror, {
572
+ ...codeMirrorProps,
573
+ value,
574
+ ref,
575
+ extensions,
576
+ theme: codeMirrorTheme,
577
+ onCreateEditor: handleCreateEditor,
578
+ initialState,
579
+ basicSetup
580
+ });
581
+ });
582
+ function useLanguageExtension(mode) {
583
+ const codeConfig = useContext(CodeInputConfigContext);
584
+ const [languageExtension, setLanguageExtension] = useState();
585
+ useEffect(() => {
586
+ var _a;
587
+ const customModes = (_a = codeConfig == null ? void 0 : codeConfig.codeModes) != null ? _a : [];
588
+ const modes = [...customModes, ...defaultCodeModes];
589
+ const codeMode = modes.find(m => m.name === mode);
590
+ if (!(codeMode == null ? void 0 : codeMode.loader)) {
591
+ console.warn("Found no codeMode for language mode ".concat(mode, ", syntax highlighting will be disabled."));
592
+ }
593
+ let active = true;
594
+ Promise.resolve(codeMode == null ? void 0 : codeMode.loader()).then(extension => {
595
+ if (active) {
596
+ setLanguageExtension(extension);
597
+ }
598
+ }).catch(e => {
599
+ console.error("Failed to load language mode ".concat(mode), e);
600
+ if (active) {
601
+ setLanguageExtension(void 0);
602
+ }
603
+ });
604
+ return () => {
605
+ active = false;
606
+ };
607
+ }, [mode, codeConfig]);
608
+ return languageExtension;
609
+ }
610
+ export { CodeMirrorProxy as default };
611
+ //# sourceMappingURL=CodeMirrorProxy-e83d4d37.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeMirrorProxy-e83d4d37.js","sources":["../../src/codemirror/extensions/useCodeMirrorTheme.ts","../../src/codemirror/defaultCodeModes.ts","../../src/codemirror/extensions/highlightLineExtension.ts","../../src/codemirror/extensions/useFontSize.ts","../../src/codemirror/extensions/theme.ts","../../src/codemirror/CodeMirrorProxy.tsx"],"sourcesContent":["import {rgba, useTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {createTheme} from '@uiw/codemirror-themes'\nimport {tags as t} from '@lezer/highlight'\nimport {Extension} from '@codemirror/state'\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 {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(({javascript}) => javascript({jsx: false})),\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","/* eslint-disable no-param-reassign */\n\nimport {Extension, StateEffect, StateField} from '@codemirror/state'\nimport {Decoration, EditorView, lineNumbers} from '@codemirror/view'\nimport {ThemeContextValue, rgba} from '@sanity/ui'\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 return Decoration.none.update({\n add: highlights,\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<any>\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 const dark = {color: themeCtx.theme.color.dark[themeCtx.tone]}\n const light = {color: themeCtx.theme.color.light[themeCtx.tone]}\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 {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 {Extension} from '@codemirror/state'\nimport {EditorView} from '@codemirror/view'\nimport {rgba, useRootTheme} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nexport function useThemeExtension(): Extension {\n const themeCtx = useRootTheme()\n\n return useMemo(() => {\n const dark = {color: themeCtx.theme.color.dark[themeCtx.tone]}\n const light = {color: themeCtx.theme.color.light[themeCtx.tone]}\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 {forwardRef, useCallback, useContext, useEffect, useMemo, useState} from 'react'\nimport CodeMirror, {ReactCodeMirrorProps, ReactCodeMirrorRef} from '@uiw/react-codemirror'\nimport {useCodeMirrorTheme} from './extensions/useCodeMirrorTheme'\nimport {Extension} from '@codemirror/state'\nimport {CodeInputConfigContext} from './CodeModeContext'\nimport {defaultCodeModes} from './defaultCodeModes'\nimport {\n highlightLine,\n highlightState,\n setHighlightedLines,\n} from './extensions/highlightLineExtension'\nimport {EditorView} from '@codemirror/view'\nimport {useRootTheme} from '@sanity/ui'\nimport {useFontSizeExtension} from './extensions/useFontSize'\nimport {useThemeExtension} from './extensions/theme'\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>(function CodeMirrorProxy(\n props,\n ref\n) {\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\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":["useCodeMirrorTheme","theme","useTheme","useMemo","code","codeFont","sanity","fonts","base","card","dark","syntax","color","createTheme","settings","background","enabled","bg","foreground","fg","lineHighlight","fontFamily","family","caret","focusRing","selection","rgba","selectionMatch","gutterBackground","disabled","gutterForeground","gutterActiveForeground","styles","tag","t","heading","heading2","heading3","heading4","heading5","heading6","angleBracket","atom","keyword","attributeName","attrName","bool","boolean","bracket","className","comment","definition","typeName","function","variableName","propertyName","null","number","meta","operator","property","string","special","brace","tagName","defaultCodeModes","name","loader","then","javascript","jsx","typescript","php","sql","MySQL","dialect","json","markdown","java","html","csharp","StreamLanguage","define","shell","css","sass","ruby","python","xml","yaml","go","highlightLineClass","addLineHighlight","StateEffect","removeLineHighlight","lineHighlightField","StateField","create","Decoration","none","update","lines","tr","map","changes","e","effects","is","add","lineHighlightMark","range","value","filter","from","toJSON","state","highlightLines","iter","lineNumber","doc","lineAt","includes","push","next","fromJSON","highlights","line","provide","f","EditorView","decorations","class","highlightState","highlight","createCodeMirrorTheme","options","themeCtx","tone","light","baseTheme","cursor","position","top","bottom","left","right","zIndex","content","boxSizing","muted","caution","pressed","highlightLine","config","highlightTheme","readOnly","lineNumbers","domEventHandlers","mousedown","editorView","lineInfo","isHighlighted","field","between","to","dispatch","of","onHighlightChange","setHighlightedLines","view","allLineNumbers","Array","length","x","i","useFontSizeExtension","props","fontSize","fontSizeProp","lineHeight","sizes","rem","useThemeExtension","useRootTheme","height","outline","backgroundColor","border","minWidth","padding","width","borderRight","CodeMirrorProxy","forwardRef","ref","basicSetup","basicSetupProp","languageMode","codeMirrorProps","codeMirrorTheme","setEditorView","useState","themeExtension","fontSizeExtension","languageExtension","useLanguageExtension","highlightLineExtension","extensions","baseExtensions","lineWrapping","useEffect","initialState","main","ranges","anchor","head","fields","handleCreateEditor","useCallback","highlightActiveLine","CodeMirror","onCreateEditor","mode","codeConfig","useContext","CodeInputConfigContext","setLanguageExtension","_a","customModes","codeModes","modes","codeMode","find","m","console","warn","active","Promise","resolve","extension","catch","error"],"mappings":"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"}