@sanity/code-input 7.1.6 → 7.2.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.
package/README.md CHANGED
@@ -52,6 +52,7 @@ defineType({
52
52
  - `language` - Default language for this code field.
53
53
  - `languageAlternatives` - Array of languages that should be available (se its format in the example below)
54
54
  - `withFilename` - Boolean option to display input field for filename
55
+ - `disableFullscreen` - Boolean option to hide the "Expand editor" button (expanding is enabled by default)
55
56
 
56
57
  ```js
57
58
  //...fields,
@@ -67,10 +68,15 @@ defineField({
67
68
  {title: 'CSS', value: 'css'},
68
69
  ],
69
70
  withFilename: true,
71
+ disableFullscreen: false,
70
72
  },
71
73
  })
72
74
  ```
73
75
 
76
+ The code editor can be expanded to fill the document pane using the "Expand
77
+ editor" button in the top-right corner of the editor (press `Escape` to
78
+ collapse). Set `disableFullscreen: true` to hide this button.
79
+
74
80
  ![Code input with all options in dark mode](assets/all-options.png)
75
81
 
76
82
  ## Add support for more languages
@@ -207,7 +213,6 @@ As outlined above, the actual code is stored in a `code` property, so if your sc
207
213
  Here's an example using [react-refractor](https://github.com/rexxars/react-refractor):
208
214
 
209
215
  ```jsx
210
- import React from 'react'
211
216
  import Refractor from 'react-refractor'
212
217
  import js from 'refractor/lang/javascript'
213
218
 
@@ -1,10 +1,213 @@
1
- import { CodeBlockIcon } from "@sanity/icons";
1
+ import { CollapseIcon, ExpandIcon, CodeBlockIcon } from "@sanity/icons";
2
2
  import { set, unset, MemberField, setIfMissing, defineType, definePlugin } from "sanity";
3
- import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
4
4
  import { c } from "react/compiler-runtime";
5
- import { Select, Stack, Box, Text, Card, Flex, Label } from "@sanity/ui";
6
- import { lazy, useState, useEffect, startTransition, Suspense, createContext } from "react";
5
+ import { Box, Portal, Layer, Card, Tooltip, Button, Text, Select, Stack, Flex, Label } from "@sanity/ui";
6
+ import { useState, useRef, useEffect, lazy, startTransition, Suspense, createContext } from "react";
7
7
  import { styled, css } from "styled-components";
8
+ function focusRingBorderStyle(border) {
9
+ return `inset 0 0 0 ${border.width}px ${border.color}`;
10
+ }
11
+ function focusRingStyle(opts) {
12
+ const {
13
+ base,
14
+ border,
15
+ focusRing
16
+ } = opts, focusRingOutsetWidth = focusRing.offset + focusRing.width, focusRingInsetWidth = 0 - focusRing.offset, bgColor = base ? base.bg : "var(--card-bg-color)";
17
+ return [focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`, border && focusRingBorderStyle(border), focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`, focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`].filter(Boolean).join(",");
18
+ }
19
+ const TOOLTIP_DELAY = {
20
+ open: 400
21
+ }, EDITOR_HEIGHT = 250, DOCUMENT_PANE_SELECTOR = '[data-testid="document-pane"]', DOCUMENT_PANEL_SCROLLER_SELECTOR = '[data-testid="document-panel-scroller"]', SELECTED_PANE_SCROLLER_SELECTOR = `${DOCUMENT_PANE_SELECTOR}[data-pane-selected="true"] ${DOCUMENT_PANEL_SCROLLER_SELECTOR}`;
22
+ function getScrollParent(node) {
23
+ let current = node?.parentElement ?? null;
24
+ for (; current; ) {
25
+ const {
26
+ overflowY
27
+ } = window.getComputedStyle(current);
28
+ if (overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay")
29
+ return current;
30
+ current = current.parentElement;
31
+ }
32
+ return null;
33
+ }
34
+ function getDocumentPaneElement(node) {
35
+ if (!node) return null;
36
+ const ownPane = node.closest(DOCUMENT_PANE_SELECTOR);
37
+ if (ownPane instanceof HTMLElement) {
38
+ const scroller2 = ownPane.querySelector(DOCUMENT_PANEL_SCROLLER_SELECTOR);
39
+ return scroller2 instanceof HTMLElement ? scroller2 : ownPane;
40
+ }
41
+ const selectedScroller = document.querySelector(SELECTED_PANE_SCROLLER_SELECTOR);
42
+ if (selectedScroller instanceof HTMLElement) return selectedScroller;
43
+ const scroller = document.querySelector(DOCUMENT_PANEL_SCROLLER_SELECTOR);
44
+ return scroller instanceof HTMLElement ? scroller : getScrollParent(node);
45
+ }
46
+ const FullscreenRoot = styled.div.withConfig({
47
+ displayName: "FullscreenRoot",
48
+ componentId: "sc-1794wkw-0"
49
+ })`position:relative;`, FullscreenOverlay = /* @__PURE__ */ styled.div.withConfig({
50
+ displayName: "FullscreenOverlay",
51
+ componentId: "sc-1794wkw-1"
52
+ })(({
53
+ theme
54
+ }) => {
55
+ const {
56
+ input
57
+ } = theme.sanity, borderColor = theme.sanity.color.input.default.enabled.border;
58
+ return css`
59
+ box-sizing: border-box;
60
+ overflow: hidden;
61
+ border-top: ${input.border.width}px solid ${borderColor};
62
+ border-bottom: ${input.border.width}px solid ${borderColor};
63
+ `;
64
+ }), ToggleButtonBox = styled(Box).withConfig({
65
+ displayName: "ToggleButtonBox",
66
+ componentId: "sc-1794wkw-2"
67
+ })`position:absolute;top:0;right:0;z-index:2;`, EditorContainer = /* @__PURE__ */ styled(Card).withConfig({
68
+ displayName: "EditorContainer",
69
+ componentId: "sc-1794wkw-3"
70
+ })(({
71
+ theme,
72
+ $fullscreen
73
+ }) => {
74
+ const {
75
+ focusRing,
76
+ input
77
+ } = theme.sanity, base = theme.sanity.color.base, border = {
78
+ color: theme.sanity.color.input.default.enabled.border,
79
+ width: input.border.width
80
+ };
81
+ return css`
82
+ --input-box-shadow: ${focusRingBorderStyle(border)};
83
+
84
+ box-shadow: var(--input-box-shadow);
85
+ height: ${EDITOR_HEIGHT}px;
86
+ min-height: 80px;
87
+ overflow-y: auto;
88
+ position: relative;
89
+ resize: vertical;
90
+ z-index: 0;
91
+
92
+ & > .cm-theme {
93
+ height: 100%;
94
+ }
95
+
96
+ &:focus-within {
97
+ --input-box-shadow: ${focusRingStyle({
98
+ base,
99
+ border,
100
+ focusRing
101
+ })};
102
+ }
103
+
104
+ ${$fullscreen && css`
105
+ height: 100%;
106
+ border-radius: 0;
107
+ resize: none;
108
+ background-color: ${base.bg};
109
+ /* Divider drawn on the overlay so the sides sit flush with the pane */
110
+ box-shadow: none;
111
+ `}
112
+ `;
113
+ });
114
+ function FullscreenEditor(t0) {
115
+ const $ = c(25), {
116
+ enabled,
117
+ children
118
+ } = t0, [isFullscreen, setIsFullscreen] = useState(!1), rootRef = useRef(null), overlayRef = useRef(null), [overlayElement, setOverlayElement] = useState(null);
119
+ let t1;
120
+ $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = (node) => {
121
+ overlayRef.current = node, setOverlayElement(node);
122
+ }, $[0] = t1) : t1 = $[0];
123
+ const setOverlayRef = t1, [paneRect, setPaneRect] = useState(null), [placeholderHeight, setPlaceholderHeight] = useState(EDITOR_HEIGHT), showFullscreen = isFullscreen && paneRect !== null;
124
+ let t2;
125
+ $[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t2 = () => {
126
+ setPaneRect(null), setIsFullscreen(!1);
127
+ }, $[1] = t2) : t2 = $[1];
128
+ const collapse = t2;
129
+ let t3;
130
+ $[2] !== isFullscreen ? (t3 = () => {
131
+ if (isFullscreen) {
132
+ collapse();
133
+ return;
134
+ }
135
+ setPlaceholderHeight(rootRef.current?.offsetHeight ?? EDITOR_HEIGHT), setIsFullscreen(!0);
136
+ }, $[2] = isFullscreen, $[3] = t3) : t3 = $[3];
137
+ const handleToggle = t3;
138
+ let t4;
139
+ $[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t4 = (event) => {
140
+ event.key === "Escape" && (event.preventDefault(), event.stopPropagation(), event.nativeEvent.stopImmediatePropagation(), collapse());
141
+ }, $[4] = t4) : t4 = $[4];
142
+ const handleKeyDown = t4;
143
+ let t5, t6;
144
+ $[5] !== isFullscreen ? (t5 = () => {
145
+ if (!isFullscreen)
146
+ return;
147
+ const paneElement = getDocumentPaneElement(rootRef.current), update = () => {
148
+ const {
149
+ top,
150
+ left,
151
+ width,
152
+ height
153
+ } = paneElement ? paneElement.getBoundingClientRect() : {
154
+ top: 0,
155
+ left: 0,
156
+ width: window.innerWidth,
157
+ height: window.innerHeight
158
+ };
159
+ setPaneRect((prev) => prev && prev.top === top && prev.left === left && prev.width === width && prev.height === height ? prev : {
160
+ top,
161
+ left,
162
+ width,
163
+ height
164
+ });
165
+ }, raf = requestAnimationFrame(update);
166
+ let resizeObserver;
167
+ return paneElement && (resizeObserver = new ResizeObserver(update), resizeObserver.observe(paneElement)), window.addEventListener("resize", update), window.addEventListener("scroll", update, !0), () => {
168
+ cancelAnimationFrame(raf), resizeObserver?.disconnect(), window.removeEventListener("resize", update), window.removeEventListener("scroll", update, !0);
169
+ };
170
+ }, t6 = [isFullscreen], $[5] = isFullscreen, $[6] = t5, $[7] = t6) : (t5 = $[6], t6 = $[7]), useEffect(t5, t6);
171
+ let t7, t8;
172
+ $[8] !== showFullscreen ? (t7 = () => {
173
+ if (!showFullscreen)
174
+ return;
175
+ const raf_0 = requestAnimationFrame(() => {
176
+ const overlay = overlayRef.current;
177
+ overlay && (overlay.querySelector(".cm-content") ?? overlay).focus();
178
+ });
179
+ return () => cancelAnimationFrame(raf_0);
180
+ }, t8 = [showFullscreen], $[8] = showFullscreen, $[9] = t7, $[10] = t8) : (t7 = $[9], t8 = $[10]), useEffect(t7, t8);
181
+ let t9;
182
+ $[11] !== enabled || $[12] !== handleToggle || $[13] !== overlayElement || $[14] !== showFullscreen ? (t9 = enabled && /* @__PURE__ */ jsx(ToggleButtonBox, { padding: 1, children: /* @__PURE__ */ jsx(Tooltip, { animate: !0, arrow: !1, boundaryElement: overlayElement, content: /* @__PURE__ */ jsx(Text, { size: 1, children: showFullscreen ? "Collapse editor" : "Expand editor" }), delay: TOOLTIP_DELAY, placement: "bottom", portal: !0, children: /* @__PURE__ */ jsx(Button, { "aria-label": showFullscreen ? "Collapse editor" : "Expand editor", icon: showFullscreen ? CollapseIcon : ExpandIcon, mode: "ghost", onClick: handleToggle, padding: 2 }) }) }), $[11] = enabled, $[12] = handleToggle, $[13] = overlayElement, $[14] = showFullscreen, $[15] = t9) : t9 = $[15];
183
+ const toggleButton = t9;
184
+ let t10;
185
+ $[16] !== paneRect || $[17] !== showFullscreen ? (t10 = showFullscreen && paneRect ? {
186
+ position: "fixed",
187
+ top: paneRect.top,
188
+ left: paneRect.left,
189
+ width: paneRect.width,
190
+ height: paneRect.height
191
+ } : void 0, $[16] = paneRect, $[17] = showFullscreen, $[18] = t10) : t10 = $[18];
192
+ const fullscreenStyle = t10;
193
+ let t11;
194
+ return $[19] !== children || $[20] !== fullscreenStyle || $[21] !== placeholderHeight || $[22] !== showFullscreen || $[23] !== toggleButton ? (t11 = /* @__PURE__ */ jsx(FullscreenRoot, { ref: rootRef, children: showFullscreen ? /* @__PURE__ */ jsxs(Fragment, { children: [
195
+ /* @__PURE__ */ jsx("div", { "aria-hidden": !0, style: {
196
+ height: placeholderHeight
197
+ } }),
198
+ /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Layer, { children: /* @__PURE__ */ jsxs(FullscreenOverlay, { onKeyDown: handleKeyDown, ref: setOverlayRef, style: fullscreenStyle, tabIndex: -1, children: [
199
+ toggleButton,
200
+ children({
201
+ isFullscreen: showFullscreen
202
+ })
203
+ ] }) }) })
204
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
205
+ toggleButton,
206
+ children({
207
+ isFullscreen: showFullscreen
208
+ })
209
+ ] }) }), $[19] = children, $[20] = fullscreenStyle, $[21] = placeholderHeight, $[22] = showFullscreen, $[23] = toggleButton, $[24] = t11) : t11 = $[24], t11;
210
+ }
8
211
  const CodeMirrorProxy = lazy(() => import("./CodeMirrorProxy.js"));
9
212
  function useMounted() {
10
213
  const $ = c(2), [mounted, setMounted] = useState(!1);
@@ -184,17 +387,6 @@ function LanguageField(props) {
184
387
  let t1;
185
388
  return $[3] !== member || $[4] !== renderField || $[5] !== renderInput || $[6] !== renderItem || $[7] !== renderPreview ? (t1 = /* @__PURE__ */ jsx(MemberField, { member, renderItem, renderField, renderInput, renderPreview }), $[3] = member, $[4] = renderField, $[5] = renderInput, $[6] = renderItem, $[7] = renderPreview, $[8] = t1) : t1 = $[8], t1;
186
389
  }
187
- function focusRingBorderStyle(border) {
188
- return `inset 0 0 0 ${border.width}px ${border.color}`;
189
- }
190
- function focusRingStyle(opts) {
191
- const {
192
- base,
193
- border,
194
- focusRing
195
- } = opts, focusRingOutsetWidth = focusRing.offset + focusRing.width, focusRingInsetWidth = 0 - focusRing.offset, bgColor = base ? base.bg : "var(--card-bg-color)";
196
- return [focusRingInsetWidth > 0 && `inset 0 0 0 ${focusRingInsetWidth}px var(--card-focus-ring-color)`, border && focusRingBorderStyle(border), focusRingInsetWidth < 0 && `0 0 0 ${0 - focusRingInsetWidth}px ${bgColor}`, focusRingOutsetWidth > 0 && `0 0 0 ${focusRingOutsetWidth}px var(--card-focus-ring-color)`].filter(Boolean).join(",");
197
- }
198
390
  function useFieldMember(members, fieldName) {
199
391
  const $ = c(5);
200
392
  let t0;
@@ -205,45 +397,8 @@ function useFieldMember(members, fieldName) {
205
397
  t0 = $[2];
206
398
  return t0;
207
399
  }
208
- const EditorContainer = /* @__PURE__ */ styled(Card).withConfig({
209
- displayName: "EditorContainer",
210
- componentId: "sc-hbj24s-0"
211
- })(({
212
- theme
213
- }) => {
214
- const {
215
- focusRing,
216
- input
217
- } = theme.sanity, base = theme.sanity.color.base, border = {
218
- color: theme.sanity.color.input.default.enabled.border,
219
- width: input.border.width
220
- };
221
- return css`
222
- --input-box-shadow: ${focusRingBorderStyle(border)};
223
-
224
- box-shadow: var(--input-box-shadow);
225
- height: 250px;
226
- min-height: 80px;
227
- overflow-y: auto;
228
- position: relative;
229
- resize: vertical;
230
- z-index: 0;
231
-
232
- & > .cm-theme {
233
- height: 100%;
234
- }
235
-
236
- &:focus-within {
237
- --input-box-shadow: ${focusRingStyle({
238
- base,
239
- border,
240
- focusRing
241
- })};
242
- }
243
- `;
244
- });
245
400
  function CodeInput(props) {
246
- const $ = c(42), {
401
+ const $ = c(43), {
247
402
  members,
248
403
  elementProps,
249
404
  onChange,
@@ -276,22 +431,27 @@ function CodeInput(props) {
276
431
  languages,
277
432
  language,
278
433
  languageMode
279
- } = useLanguageMode(props.schemaType, props.value), mounted = useMounted();
434
+ } = useLanguageMode(props.schemaType, props.value), mounted = useMounted(), fullscreenEnabled = !type.options?.disableFullscreen;
280
435
  let t3;
281
- $[8] !== elementProps.onBlur || $[9] !== handleCodeChange || $[10] !== handleCodeFocus || $[11] !== languageMode || $[12] !== mounted || $[13] !== onHighlightChange || $[14] !== readOnly || $[15] !== value?.highlightedLines ? (t3 = (inputProps) => /* @__PURE__ */ jsx(EditorContainer, { border: !0, overflow: "hidden", radius: 1, sizing: "border", readOnly, children: mounted && /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Box, { padding: 3, children: /* @__PURE__ */ jsx(Text, { children: "Loading code editor..." }) }), children: /* @__PURE__ */ jsx(CodeMirrorProxy, { languageMode, onChange: handleCodeChange, value: inputProps.value, highlightLines: value?.highlightedLines, onHighlightChange, readOnly, onFocus: handleCodeFocus, onBlur: elementProps.onBlur }) }) }), $[8] = elementProps.onBlur, $[9] = handleCodeChange, $[10] = handleCodeFocus, $[11] = languageMode, $[12] = mounted, $[13] = onHighlightChange, $[14] = readOnly, $[15] = value?.highlightedLines, $[16] = t3) : t3 = $[16];
436
+ $[8] !== elementProps.onBlur || $[9] !== fullscreenEnabled || $[10] !== handleCodeChange || $[11] !== handleCodeFocus || $[12] !== languageMode || $[13] !== mounted || $[14] !== onHighlightChange || $[15] !== readOnly || $[16] !== value?.highlightedLines ? (t3 = (inputProps) => /* @__PURE__ */ jsx(FullscreenEditor, { enabled: fullscreenEnabled, children: (t42) => {
437
+ const {
438
+ isFullscreen
439
+ } = t42;
440
+ return /* @__PURE__ */ jsx(EditorContainer, { $fullscreen: isFullscreen, border: !isFullscreen, overflow: "hidden", radius: 1, sizing: "border", readOnly, children: mounted && /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Box, { padding: 3, children: /* @__PURE__ */ jsx(Text, { children: "Loading code editor..." }) }), children: /* @__PURE__ */ jsx(CodeMirrorProxy, { languageMode, onChange: handleCodeChange, value: inputProps.value, highlightLines: value?.highlightedLines, onHighlightChange, readOnly, onFocus: handleCodeFocus, onBlur: elementProps.onBlur }) }) });
441
+ } }), $[8] = elementProps.onBlur, $[9] = fullscreenEnabled, $[10] = handleCodeChange, $[11] = handleCodeFocus, $[12] = languageMode, $[13] = mounted, $[14] = onHighlightChange, $[15] = readOnly, $[16] = value?.highlightedLines, $[17] = t3) : t3 = $[17];
282
442
  const renderCodeInput = t3;
283
443
  let t4;
284
- $[17] !== language || $[18] !== languageFieldMember || $[19] !== languages || $[20] !== renderField || $[21] !== renderInput || $[22] !== renderItem || $[23] !== renderPreview ? (t4 = languageFieldMember && /* @__PURE__ */ jsx(LanguageField, { member: languageFieldMember, language, languages, renderField, renderItem, renderInput, renderPreview }), $[17] = language, $[18] = languageFieldMember, $[19] = languages, $[20] = renderField, $[21] = renderInput, $[22] = renderItem, $[23] = renderPreview, $[24] = t4) : t4 = $[24];
444
+ $[18] !== language || $[19] !== languageFieldMember || $[20] !== languages || $[21] !== renderField || $[22] !== renderInput || $[23] !== renderItem || $[24] !== renderPreview ? (t4 = languageFieldMember && /* @__PURE__ */ jsx(LanguageField, { member: languageFieldMember, language, languages, renderField, renderItem, renderInput, renderPreview }), $[18] = language, $[19] = languageFieldMember, $[20] = languages, $[21] = renderField, $[22] = renderInput, $[23] = renderItem, $[24] = renderPreview, $[25] = t4) : t4 = $[25];
285
445
  let t5;
286
- $[25] !== filenameMember || $[26] !== renderField || $[27] !== renderInput || $[28] !== renderItem || $[29] !== renderPreview || $[30] !== type.options?.withFilename ? (t5 = type.options?.withFilename && filenameMember && /* @__PURE__ */ jsx(MemberField, { member: filenameMember, renderItem, renderField, renderInput, renderPreview }), $[25] = filenameMember, $[26] = renderField, $[27] = renderInput, $[28] = renderItem, $[29] = renderPreview, $[30] = type.options?.withFilename, $[31] = t5) : t5 = $[31];
446
+ $[26] !== filenameMember || $[27] !== renderField || $[28] !== renderInput || $[29] !== renderItem || $[30] !== renderPreview || $[31] !== type.options?.withFilename ? (t5 = type.options?.withFilename && filenameMember && /* @__PURE__ */ jsx(MemberField, { member: filenameMember, renderItem, renderField, renderInput, renderPreview }), $[26] = filenameMember, $[27] = renderField, $[28] = renderInput, $[29] = renderItem, $[30] = renderPreview, $[31] = type.options?.withFilename, $[32] = t5) : t5 = $[32];
287
447
  let t6;
288
- $[32] !== codeFieldMember || $[33] !== renderCodeInput || $[34] !== renderField || $[35] !== renderItem || $[36] !== renderPreview ? (t6 = codeFieldMember && /* @__PURE__ */ jsx(MemberField, { member: codeFieldMember, renderInput: renderCodeInput, renderItem, renderField, renderPreview }), $[32] = codeFieldMember, $[33] = renderCodeInput, $[34] = renderField, $[35] = renderItem, $[36] = renderPreview, $[37] = t6) : t6 = $[37];
448
+ $[33] !== codeFieldMember || $[34] !== renderCodeInput || $[35] !== renderField || $[36] !== renderItem || $[37] !== renderPreview ? (t6 = codeFieldMember && /* @__PURE__ */ jsx(MemberField, { member: codeFieldMember, renderInput: renderCodeInput, renderItem, renderField, renderPreview }), $[33] = codeFieldMember, $[34] = renderCodeInput, $[35] = renderField, $[36] = renderItem, $[37] = renderPreview, $[38] = t6) : t6 = $[38];
289
449
  let t7;
290
- return $[38] !== t4 || $[39] !== t5 || $[40] !== t6 ? (t7 = /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
450
+ return $[39] !== t4 || $[40] !== t5 || $[41] !== t6 ? (t7 = /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
291
451
  t4,
292
452
  t5,
293
453
  t6
294
- ] }), $[38] = t4, $[39] = t5, $[40] = t6, $[41] = t7) : t7 = $[41], t7;
454
+ ] }), $[39] = t4, $[40] = t5, $[41] = t6, $[42] = t7) : t7 = $[42], t7;
295
455
  }
296
456
  function getMedia(language) {
297
457
  if (language === "jsx")
@@ -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, startTransition, useEffect, useState} from 'react'\n\nexport const CodeMirrorProxy = lazy(() => import('./CodeMirrorProxy'))\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false)\n useEffect(() => {\n requestAnimationFrame(() => startTransition(() => setMounted(true)))\n }, [])\n return mounted\n}\n","import type {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_CODE = ['code']\n","import {useMemo} from 'react'\n\nimport {LANGUAGE_ALIASES, SUPPORTED_LANGUAGES} from '../config'\nimport type {CodeInputLanguage, CodeInputValue, CodeSchemaType} from '../types'\n\nconst 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 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 type {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 type 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 // oxlint-disable-next-line no-unsafe-type-assertion - fix later\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 type {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 {\n MemberField,\n type ObjectInputProps,\n type RenderInputCallback,\n set,\n setIfMissing,\n unset,\n} from 'sanity'\nimport {css, styled} from 'styled-components'\n\nimport {CodeMirrorProxy, useMounted} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport {PATH_CODE} from './config'\nimport {LanguageField} from './LanguageField'\nimport type {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 // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {focusRing, input} = theme.sanity\n // oxlint-disable-next-line typescript/no-deprecated\n const base = theme.sanity.color.base\n // oxlint-disable-next-line typescript/no-deprecated\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): React.JSX.Element {\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 mounted = useMounted()\n\n const renderCodeInput: RenderInputCallback = useCallback(\n (inputProps) => {\n return (\n <EditorContainer border overflow=\"hidden\" radius={1} sizing=\"border\" readOnly={readOnly}>\n {mounted && (\n <Suspense\n fallback={\n <Box padding={3}>\n <Text>Loading code editor...</Text>\n </Box>\n }\n >\n <CodeMirrorProxy\n languageMode={languageMode}\n onChange={handleCodeChange}\n // oxlint-disable-next-line no-unsafe-type-assertion - fix later\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 readOnly,\n mounted,\n languageMode,\n handleCodeChange,\n value?.highlightedLines,\n onHighlightChange,\n handleCodeFocus,\n elementProps.onBlur,\n ],\n )\n\n return (\n <Stack gap={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 type {PreviewProps} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {CodeMirrorProxy, useMounted} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport type {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): React.JSX.Element {\n const {selection, schemaType: type} = props\n // oxlint-disable-next-line no-unsafe-type-assertion - fix later\n const {languageMode} = useLanguageMode(type as CodeSchemaType, props.selection)\n\n const mounted = useMounted()\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 {mounted && (\n <Suspense fallback={<Card padding={2}>Loading code preview...</Card>}>\n <CodeMirrorProxy\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, type ObjectDefinition} from 'sanity'\n\nimport {CodeInput} from './CodeInput'\nimport {getMedia} from './getMedia'\nimport {PreviewCode} from './PreviewCode'\nimport type {CodeOptions} from './types'\n\n/**\n * @public\n */\nexport const codeTypeName = 'code'\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' {\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, type Plugin} from 'sanity'\n\nimport {CodeInputConfigContext} from './codemirror/CodeModeContext'\nimport type {CodeMode} from './codemirror/defaultCodeModes'\nimport {codeSchema} from './schema'\n\nexport interface CodeInputConfig {\n codeModes?: CodeMode[]\n}\n\n/**\n * @public\n */\nexport const codeInput: Plugin<CodeInputConfig | void> = definePlugin<CodeInputConfig | void>(\n (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)\n"],"names":["CodeMirrorProxy","lazy","useMounted","$","_c","mounted","setMounted","useState","t0","t1","Symbol","for","requestAnimationFrame","startTransition","useEffect","SUPPORTED_LANGUAGES","title","value","LANGUAGE_ALIASES","js","PATH_CODE","defaultLanguageMode","useLanguageMode","schemaType","languages","useLanguageAlternatives","fixedLanguage","options","language","entry","find","configured","mode","resolveAliasedLanguage","languageMode","t2","lang","type","bb0","languageAlternatives","Array","isArray","Error","reduce","_temp","acc","val","alias","console","warn","concat","LanguageInput","props","onChange","elementProps","e","newValue","currentTarget","set","unset","handleChange","map","LanguageField","member","renderItem","renderField","renderPreview","renderInput","focusRingBorderStyle","border","width","color","focusRingStyle","opts","base","focusRing","focusRingOutsetWidth","offset","focusRingInsetWidth","bgColor","bg","filter","Boolean","join","useFieldMember","members","fieldName","kind","name","EditorContainer","styled","Card","withConfig","displayName","componentId","theme","input","sanity","default","enabled","css","CodeInput","readOnly","onPathFocus","languageFieldMember","filenameMember","codeFieldMember","handleCodeFocus","lines","onHighlightChange","code","setIfMissing","_type","handleCodeChange","t3","onBlur","highlightedLines","inputProps","renderCodeInput","t4","t5","withFilename","t6","t7","getMedia","marker","PreviewContainer","Box","PreviewCode","selection","filename","lineNumbers","foldGutter","highlightSelectionMatches","highlightActiveLineGutter","highlightActiveLine","codeTypeName","codeSchema","defineType","components","preview","icon","CodeBlockIcon","fields","of","select","prepare","toUpperCase","media","CodeInputConfigContext","createContext","undefined","codeInput","definePlugin","config","codeModes","basePlugin","schema","types","form","id","renderDefault"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/ui/focusRingStyle.ts","../../src/CodeInputFullscreen.tsx","../../src/codemirror/useCodeMirror.tsx","../../src/config.ts","../../src/codemirror/useLanguageMode.tsx","../../src/LanguageInput.tsx","../../src/LanguageField.tsx","../../src/useFieldMember.ts","../../src/CodeInput.tsx","../../src/getMedia.tsx","../../src/PreviewCode.tsx","../../src/schema.tsx","../../src/codemirror/CodeModeContext.tsx","../../src/plugin.tsx"],"sourcesContent":["/** @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 {CollapseIcon, ExpandIcon} from '@sanity/icons'\nimport {Box, Button, Card, Layer, Portal, Text, Tooltip} from '@sanity/ui'\nimport {type CSSProperties, type ReactNode, useCallback, useEffect, useRef, useState} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {focusRingBorderStyle, focusRingStyle} from './ui/focusRingStyle'\n\n// Match the Studio's tooltip timing (TOOLTIP_DELAY_PROPS in `sanity`)\nconst TOOLTIP_DELAY = {open: 400}\n\n// Default editor height; also the placeholder height while expanded.\nconst EDITOR_HEIGHT = 250\n\n// Studio DOM markers for the document pane and its scroll container\nconst DOCUMENT_PANE_SELECTOR = '[data-testid=\"document-pane\"]'\nconst DOCUMENT_PANEL_SCROLLER_SELECTOR = '[data-testid=\"document-panel-scroller\"]'\n// Selected pane — disambiguates split-view layouts\nconst SELECTED_PANE_SCROLLER_SELECTOR = `${DOCUMENT_PANE_SELECTOR}[data-pane-selected=\"true\"] ${DOCUMENT_PANEL_SCROLLER_SELECTOR}`\n\n// Nearest scrollable ancestor — last-resort pane fallback.\nfunction getScrollParent(node: HTMLElement | null): HTMLElement | null {\n let current = node?.parentElement ?? null\n while (current) {\n const {overflowY} = window.getComputedStyle(current)\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return current\n }\n current = current.parentElement\n }\n return null\n}\n\n// Resolve the document pane's scroll container so the overlay fills the pane —\n// not the viewport, and not a surrounding modal (rendered in a portal).\nfunction getDocumentPaneElement(node: HTMLElement | null): HTMLElement | null {\n if (!node) return null\n\n const ownPane = node.closest(DOCUMENT_PANE_SELECTOR)\n if (ownPane instanceof HTMLElement) {\n const scroller = ownPane.querySelector(DOCUMENT_PANEL_SCROLLER_SELECTOR)\n return scroller instanceof HTMLElement ? scroller : ownPane\n }\n\n // In a portal (modal): can't walk up. Prefer selected pane, then any pane,\n // then the nearest scrollable ancestor.\n const selectedScroller = document.querySelector(SELECTED_PANE_SCROLLER_SELECTOR)\n if (selectedScroller instanceof HTMLElement) return selectedScroller\n\n const scroller = document.querySelector(DOCUMENT_PANEL_SCROLLER_SELECTOR)\n if (scroller instanceof HTMLElement) return scroller\n\n return getScrollParent(node)\n}\n\n// In-place anchor; also the reference for locating the document pane.\nconst FullscreenRoot = styled.div`\n position: relative;\n`\n\n// Portaled container, pinned to the pane bounds via inline style. Draws the\n// top/bottom divider (flush with the pane sides).\nconst FullscreenOverlay = styled.div(({theme}) => {\n // oxlint-disable-next-line typescript/no-deprecated\n const {input} = theme.sanity\n // oxlint-disable-next-line typescript/no-deprecated\n const borderColor = theme.sanity.color.input.default.enabled.border\n\n return css`\n box-sizing: border-box;\n overflow: hidden;\n border-top: ${input.border.width}px solid ${borderColor};\n border-bottom: ${input.border.width}px solid ${borderColor};\n `\n})\n\nconst ToggleButtonBox = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n`\n\n/** Editor container; fills its parent when `$fullscreen`. */\nexport const EditorContainer = styled(Card)<{$fullscreen: boolean}>(({theme, $fullscreen}) => {\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n const {focusRing, input} = theme.sanity\n // oxlint-disable-next-line typescript/no-deprecated\n const base = theme.sanity.color.base\n // oxlint-disable-next-line typescript/no-deprecated\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: ${EDITOR_HEIGHT}px;\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 ${$fullscreen &&\n css`\n height: 100%;\n border-radius: 0;\n resize: none;\n background-color: ${base.bg};\n /* Divider drawn on the overlay so the sides sit flush with the pane */\n box-shadow: none;\n `}\n `\n})\n\ninterface FullscreenEditorProps {\n /** When false, renders children without the expand button. */\n enabled: boolean\n children: (state: {isFullscreen: boolean}) => ReactNode\n}\n\n/** Wraps the editor with an \"Expand editor\" toggle that fills the document pane. */\nexport function FullscreenEditor({enabled, children}: FullscreenEditorProps): React.JSX.Element {\n const [isFullscreen, setIsFullscreen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n const overlayRef = useRef<HTMLDivElement>(null)\n // Overlay node in state too — used as the tooltip's boundary element.\n const [overlayElement, setOverlayElement] = useState<HTMLDivElement | null>(null)\n const setOverlayRef = useCallback((node: HTMLDivElement | null) => {\n overlayRef.current = node\n setOverlayElement(node)\n }, [])\n // Document pane bounds, used to size the overlay.\n const [paneRect, setPaneRect] = useState<{\n top: number\n left: number\n width: number\n height: number\n } | null>(null)\n // Editor height captured when expanding, so the in-place placeholder keeps the\n // surrounding fields from shifting while the editor is portaled away.\n const [placeholderHeight, setPlaceholderHeight] = useState(EDITOR_HEIGHT)\n\n // Only treat as fullscreen once the pane is measured.\n const showFullscreen = isFullscreen && paneRect !== null\n\n // Reset paneRect alongside isFullscreen so the next expand re-measures (rather\n // than rendering at stale coordinates). Done here, not in the effect cleanup,\n // to avoid a state update when the component unmounts while expanded.\n const collapse = useCallback(() => {\n setPaneRect(null)\n setIsFullscreen(false)\n }, [])\n\n const handleToggle = useCallback(() => {\n if (isFullscreen) {\n collapse()\n return\n }\n setPlaceholderHeight(rootRef.current?.offsetHeight ?? EDITOR_HEIGHT)\n setIsFullscreen(true)\n }, [isFullscreen, collapse])\n\n // Exit on Escape, scoped to the overlay so other Studio UI keeps its own\n // handling; stopImmediatePropagation keeps a surrounding modal open.\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n event.nativeEvent.stopImmediatePropagation()\n collapse()\n }\n },\n [collapse],\n )\n\n // Track the pane bounds while fullscreen so the overlay fills the pane.\n useEffect(() => {\n if (!isFullscreen) return undefined\n\n // Fall back to the viewport if the pane can't be found.\n const paneElement = getDocumentPaneElement(rootRef.current)\n\n const update = () => {\n const {top, left, width, height} = paneElement\n ? paneElement.getBoundingClientRect()\n : {top: 0, left: 0, width: window.innerWidth, height: window.innerHeight}\n // Skip unchanged bounds so scroll events don't cause needless re-renders.\n setPaneRect((prev) =>\n prev &&\n prev.top === top &&\n prev.left === left &&\n prev.width === width &&\n prev.height === height\n ? prev\n : {top, left, width, height},\n )\n }\n\n // Defer so we don't setState synchronously.\n const raf = requestAnimationFrame(update)\n let resizeObserver: ResizeObserver | undefined\n if (paneElement) {\n resizeObserver = new ResizeObserver(update)\n resizeObserver.observe(paneElement)\n }\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n\n return () => {\n cancelAnimationFrame(raf)\n resizeObserver?.disconnect()\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [isFullscreen])\n\n // Portaling drops focus to <body>; move it into the overlay so Escape and\n // typing work.\n useEffect(() => {\n if (!showFullscreen) return undefined\n\n const raf = requestAnimationFrame(() => {\n const overlay = overlayRef.current\n if (!overlay) return\n const editable = overlay.querySelector<HTMLElement>('.cm-content')\n ;(editable ?? overlay).focus()\n })\n\n return () => cancelAnimationFrame(raf)\n }, [showFullscreen])\n\n const toggleButton = enabled && (\n <ToggleButtonBox padding={1}>\n <Tooltip\n animate\n arrow={false}\n // Constrain to the overlay so a surrounding modal's boundary doesn't\n // shift the tooltip; falls back to the viewport when not expanded.\n boundaryElement={overlayElement}\n content={<Text size={1}>{showFullscreen ? 'Collapse editor' : 'Expand editor'}</Text>}\n delay={TOOLTIP_DELAY}\n placement=\"bottom\"\n portal\n >\n <Button\n aria-label={showFullscreen ? 'Collapse editor' : 'Expand editor'}\n icon={showFullscreen ? CollapseIcon : ExpandIcon}\n mode=\"ghost\"\n onClick={handleToggle}\n padding={2}\n />\n </Tooltip>\n </ToggleButtonBox>\n )\n\n const fullscreenStyle: CSSProperties | undefined =\n showFullscreen && paneRect\n ? {\n position: 'fixed',\n top: paneRect.top,\n left: paneRect.left,\n width: paneRect.width,\n height: paneRect.height,\n }\n : undefined\n\n return (\n <FullscreenRoot ref={rootRef}>\n {showFullscreen ? (\n // Hold the editor's spot in the form layout so sibling fields and the\n // document scroll position don't shift while it's portaled away.\n <>\n <div aria-hidden style={{height: placeholderHeight}} />\n {/* Portal out of any modal so position:fixed is viewport-relative;\n Layer stacks it above the modal. */}\n <Portal>\n <Layer>\n <FullscreenOverlay\n onKeyDown={handleKeyDown}\n ref={setOverlayRef}\n style={fullscreenStyle}\n tabIndex={-1}\n >\n {toggleButton}\n {children({isFullscreen: showFullscreen})}\n </FullscreenOverlay>\n </Layer>\n </Portal>\n </>\n ) : (\n <>\n {toggleButton}\n {children({isFullscreen: showFullscreen})}\n </>\n )}\n </FullscreenRoot>\n )\n}\n","import {lazy, startTransition, useEffect, useState} from 'react'\n\nexport const CodeMirrorProxy = lazy(() => import('./CodeMirrorProxy'))\n\nexport function useMounted() {\n const [mounted, setMounted] = useState(false)\n useEffect(() => {\n requestAnimationFrame(() => startTransition(() => setMounted(true)))\n }, [])\n return mounted\n}\n","import type {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_CODE = ['code']\n","import {useMemo} from 'react'\n\nimport {LANGUAGE_ALIASES, SUPPORTED_LANGUAGES} from '../config'\nimport type {CodeInputLanguage, CodeInputValue, CodeSchemaType} from '../types'\n\nconst 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 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 type {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 type 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 // oxlint-disable-next-line no-unsafe-type-assertion - fix later\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","import {useMemo} from 'react'\nimport type {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, Stack, Text} from '@sanity/ui'\nimport {Suspense, useCallback} from 'react'\nimport {\n MemberField,\n type ObjectInputProps,\n type RenderInputCallback,\n set,\n setIfMissing,\n unset,\n} from 'sanity'\n\nimport {EditorContainer, FullscreenEditor} from './CodeInputFullscreen'\nimport {CodeMirrorProxy, useMounted} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport {PATH_CODE} from './config'\nimport {LanguageField} from './LanguageField'\nimport type {CodeInputValue, CodeSchemaType} from './types'\nimport {useFieldMember} from './useFieldMember'\n\nexport type {CodeInputLanguage, CodeInputValue} from './types'\n\n/**\n * @public\n */\nexport interface CodeInputProps extends ObjectInputProps<CodeInputValue, CodeSchemaType> {}\n\n/** @public */\nexport function CodeInput(props: CodeInputProps): React.JSX.Element {\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 mounted = useMounted()\n\n const fullscreenEnabled = !type.options?.disableFullscreen\n\n const renderCodeInput: RenderInputCallback = useCallback(\n (inputProps) => (\n <FullscreenEditor enabled={fullscreenEnabled}>\n {({isFullscreen}) => (\n <EditorContainer\n $fullscreen={isFullscreen}\n border={!isFullscreen}\n overflow=\"hidden\"\n radius={1}\n sizing=\"border\"\n readOnly={readOnly}\n >\n {mounted && (\n <Suspense\n fallback={\n <Box padding={3}>\n <Text>Loading code editor...</Text>\n </Box>\n }\n >\n <CodeMirrorProxy\n languageMode={languageMode}\n onChange={handleCodeChange}\n // oxlint-disable-next-line no-unsafe-type-assertion - fix later\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 </FullscreenEditor>\n ),\n [\n fullscreenEnabled,\n readOnly,\n mounted,\n languageMode,\n handleCodeChange,\n value?.highlightedLines,\n onHighlightChange,\n handleCodeFocus,\n elementProps.onBlur,\n ],\n )\n\n return (\n <Stack gap={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 type {PreviewProps} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {CodeMirrorProxy, useMounted} from './codemirror/useCodeMirror'\nimport {useLanguageMode} from './codemirror/useLanguageMode'\nimport type {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): React.JSX.Element {\n const {selection, schemaType: type} = props\n // oxlint-disable-next-line no-unsafe-type-assertion - fix later\n const {languageMode} = useLanguageMode(type as CodeSchemaType, props.selection)\n\n const mounted = useMounted()\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 {mounted && (\n <Suspense fallback={<Card padding={2}>Loading code preview...</Card>}>\n <CodeMirrorProxy\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, type ObjectDefinition} from 'sanity'\n\nimport {CodeInput} from './CodeInput'\nimport {getMedia} from './getMedia'\nimport {PreviewCode} from './PreviewCode'\nimport type {CodeOptions} from './types'\n\n/**\n * @public\n */\nexport const codeTypeName = 'code'\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' {\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, type Plugin} from 'sanity'\n\nimport {CodeInputConfigContext} from './codemirror/CodeModeContext'\nimport type {CodeMode} from './codemirror/defaultCodeModes'\nimport {codeSchema} from './schema'\n\nexport interface CodeInputConfig {\n codeModes?: CodeMode[]\n}\n\n/**\n * @public\n */\nexport const codeInput: Plugin<CodeInputConfig | void> = definePlugin<CodeInputConfig | void>(\n (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)\n"],"names":["focusRingBorderStyle","border","width","color","focusRingStyle","opts","base","focusRing","focusRingOutsetWidth","offset","focusRingInsetWidth","bgColor","bg","filter","Boolean","join","TOOLTIP_DELAY","open","EDITOR_HEIGHT","DOCUMENT_PANE_SELECTOR","DOCUMENT_PANEL_SCROLLER_SELECTOR","SELECTED_PANE_SCROLLER_SELECTOR","getScrollParent","node","current","parentElement","overflowY","window","getComputedStyle","getDocumentPaneElement","ownPane","closest","HTMLElement","scroller","querySelector","selectedScroller","document","FullscreenRoot","styled","div","withConfig","displayName","componentId","FullscreenOverlay","theme","input","sanity","borderColor","default","enabled","css","ToggleButtonBox","Box","EditorContainer","Card","$fullscreen","FullscreenEditor","t0","$","_c","children","isFullscreen","setIsFullscreen","useState","rootRef","useRef","overlayRef","overlayElement","setOverlayElement","t1","Symbol","for","setOverlayRef","paneRect","setPaneRect","placeholderHeight","setPlaceholderHeight","showFullscreen","t2","collapse","t3","offsetHeight","handleToggle","t4","event","key","preventDefault","stopPropagation","nativeEvent","stopImmediatePropagation","handleKeyDown","t5","t6","paneElement","update","top","left","height","getBoundingClientRect","innerWidth","innerHeight","prev","raf","requestAnimationFrame","resizeObserver","ResizeObserver","observe","addEventListener","cancelAnimationFrame","disconnect","removeEventListener","useEffect","t7","t8","raf_0","overlay","focus","t9","CollapseIcon","ExpandIcon","toggleButton","t10","position","undefined","fullscreenStyle","t11","CodeMirrorProxy","lazy","useMounted","mounted","setMounted","startTransition","SUPPORTED_LANGUAGES","title","value","LANGUAGE_ALIASES","js","PATH_CODE","defaultLanguageMode","useLanguageMode","schemaType","languages","useLanguageAlternatives","fixedLanguage","options","language","entry","find","configured","mode","resolveAliasedLanguage","languageMode","lang","type","bb0","languageAlternatives","Array","isArray","Error","reduce","_temp","acc","val","alias","console","warn","concat","LanguageInput","props","onChange","elementProps","e","newValue","currentTarget","set","unset","handleChange","map","LanguageField","member","renderItem","renderField","renderPreview","renderInput","useFieldMember","members","fieldName","kind","name","CodeInput","readOnly","onPathFocus","languageFieldMember","filenameMember","codeFieldMember","handleCodeFocus","lines","onHighlightChange","code","setIfMissing","_type","handleCodeChange","fullscreenEnabled","disableFullscreen","onBlur","highlightedLines","inputProps","renderCodeInput","withFilename","getMedia","marker","PreviewContainer","PreviewCode","selection","filename","lineNumbers","foldGutter","highlightSelectionMatches","highlightActiveLineGutter","highlightActiveLine","codeTypeName","codeSchema","defineType","components","preview","icon","CodeBlockIcon","fields","of","select","prepare","toUpperCase","media","CodeInputConfigContext","createContext","codeInput","definePlugin","config","codeModes","basePlugin","schema","types","form","id","renderDefault"],"mappings":";;;;;;;AAEO,SAASA,qBAAqBC,QAAgD;AACnF,SAAO,eAAeA,OAAOC,KAAK,MAAMD,OAAOE,KAAK;AACtD;AAIO,SAASC,eAAeC,MAIpB;AACT,QAAM;AAAA,IAACC;AAAAA,IAAML;AAAAA,IAAQM;AAAAA,EAAAA,IAAaF,MAC5BG,uBAAuBD,UAAUE,SAASF,UAAUL,OACpDQ,sBAAsB,IAAIH,UAAUE,QACpCE,UAAUL,OAAOA,KAAKM,KAAK;AAEjC,SAAO,CACLF,sBAAsB,KAAK,eAAeA,mBAAmB,mCAC7DT,UAAUD,qBAAqBC,MAAM,GACrCS,sBAAsB,KAAK,SAAS,IAAIA,mBAAmB,MAAMC,OAAO,IACxEH,uBAAuB,KAAK,SAASA,oBAAoB,iCAAiC,EAEzFK,OAAOC,OAAO,EACdC,KAAK,GAAG;AACb;AClBA,MAAMC,gBAAgB;AAAA,EAACC,MAAM;AAAG,GAG1BC,gBAAgB,KAGhBC,yBAAyB,iCACzBC,mCAAmC,2CAEnCC,kCAAkC,GAAGF,sBAAsB,+BAA+BC,gCAAgC;AAGhI,SAASE,gBAAgBC,MAA8C;AACrE,MAAIC,UAAUD,MAAME,iBAAiB;AACrC,SAAOD,WAAS;AACd,UAAM;AAAA,MAACE;AAAAA,IAAAA,IAAaC,OAAOC,iBAAiBJ,OAAO;AACnD,QAAIE,cAAc,UAAUA,cAAc,YAAYA,cAAc;AAClE,aAAOF;AAETA,cAAUA,QAAQC;AAAAA,EACpB;AACA,SAAO;AACT;AAIA,SAASI,uBAAuBN,MAA8C;AAC5E,MAAI,CAACA,KAAM,QAAO;AAElB,QAAMO,UAAUP,KAAKQ,QAAQZ,sBAAsB;AACnD,MAAIW,mBAAmBE,aAAa;AAClC,UAAMC,YAAWH,QAAQI,cAAcd,gCAAgC;AACvE,WAAOa,qBAAoBD,cAAcC,YAAWH;AAAAA,EACtD;AAIA,QAAMK,mBAAmBC,SAASF,cAAcb,+BAA+B;AAC/E,MAAIc,4BAA4BH,YAAa,QAAOG;AAEpD,QAAMF,WAAWG,SAASF,cAAcd,gCAAgC;AACxE,SAAIa,oBAAoBD,cAAoBC,WAErCX,gBAAgBC,IAAI;AAC7B;AAGA,MAAMc,iBAAiBC,OAAOC,IAAGC,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,uBAM3BC,oBAAoBL,uBAAOC,IAAGC,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,EAAC,CAAC;AAAA,EAACE;AAAK,MAAM;AAEhD,QAAM;AAAA,IAACC;AAAAA,EAAAA,IAASD,MAAME,QAEhBC,cAAcH,MAAME,OAAO3C,MAAM0C,MAAMG,QAAQC,QAAQhD;AAE7D,SAAOiD;AAAAA;AAAAA;AAAAA,kBAGSL,MAAM5C,OAAOC,KAAK,YAAY6C,WAAW;AAAA,qBACtCF,MAAM5C,OAAOC,KAAK,YAAY6C,WAAW;AAAA;AAE9D,CAAC,GAEKI,kBAAkBb,OAAOc,GAAG,EAACZ,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,+CAQtBW,kBAAkBf,uBAAOgB,IAAI,EAACd,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA,EAAyB,CAAC;AAAA,EAACE;AAAAA,EAAOW;AAAW,MAAM;AAG5F,QAAM;AAAA,IAAChD;AAAAA,IAAWsC;AAAAA,EAAAA,IAASD,MAAME,QAE3BxC,OAAOsC,MAAME,OAAO3C,MAAMG,MAG1BL,SAAS;AAAA,IACbE,OAFYyC,MAAME,OAAO3C,MAAM0C,MAElBG,QAAQC,QAAQhD;AAAAA,IAC7BC,OAAO2C,MAAM5C,OAAOC;AAAAA,EAAAA;AAGtB,SAAOgD;AAAAA,0BACiBlD,qBAAqBC,MAAM,CAAC;AAAA;AAAA;AAAA,cAGxCiB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAYCd,eAAe;AAAA,IACnCE;AAAAA,IACAL;AAAAA,IACAM;AAAAA,EAAAA,CACD,CAAC;AAAA;AAAA;AAAA,MAGFgD,eACFL;AAAAA;AAAAA;AAAAA;AAAAA,0BAIsB5C,KAAKM,EAAE;AAAA;AAAA;AAAA,KAG5B;AAAA;AAEL,CAAC;AASM,SAAA4C,iBAAAC,IAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAA0B;AAAA,IAAAV;AAAAA,IAAAW;AAAAA,EAAAA,IAAAH,IAC/B,CAAAI,cAAAC,eAAA,IAAwCC,SAAS,EAAK,GACtDC,UAAgBC,OAAuB,IAAI,GAC3CC,aAAmBD,OAAuB,IAAI,GAE9C,CAAAE,gBAAAC,iBAAA,IAA4CL,SAAgC,IAAI;AAAC,MAAAM;AAAAX,IAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAC/CF,KAAA9C,CAAAA,SAAA;AAChC2C,eAAU1C,UAAWD,MACrB6C,kBAAkB7C,IAAI;AAAA,EAAC,GACxBmC,OAAAW,MAAAA,KAAAX,EAAA,CAAA;AAHD,QAAAc,gBAAsBH,IAKtB,CAAAI,UAAAC,WAAA,IAAgCX,SAKtB,IAAI,GAGd,CAAAY,mBAAAC,oBAAA,IAAkDb,SAAS7C,aAAa,GAGxE2D,iBAAuBhB,gBAAgBY,aAAa;AAAI,MAAAK;AAAApB,IAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAK3BO,KAAAA,MAAA;AAC3BJ,gBAAY,IAAI,GAChBZ,gBAAgB,EAAK;AAAA,EAAC,GACvBJ,OAAAoB,MAAAA,KAAApB,EAAA,CAAA;AAHD,QAAAqB,WAAiBD;AAGX,MAAAE;AAAAtB,WAAAG,gBAE2BmB,KAAAA,MAAA;AAC/B,QAAInB,cAAY;AACdkB,eAAAA;AAAU;AAAA,IAAA;AAGZH,yBAAqBZ,QAAOxC,SAAsByD,gBAA7B/D,aAA8C,GACnE4C,gBAAgB,EAAI;AAAA,EAAC,GACtBJ,OAAAG,cAAAH,OAAAsB,MAAAA,KAAAtB,EAAA,CAAA;AAPD,QAAAwB,eAAqBF;AAOO,MAAAG;AAAAzB,IAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KAK1BY,KAAAC,CAAAA,UAAA;AACMA,UAAKC,QAAS,aAChBD,MAAKE,eAAAA,GACLF,MAAKG,gBAAAA,GACLH,MAAKI,YAAYC,yBAAAA,GACjBV,SAAAA;AAAAA,EACD,GACFrB,OAAAyB,MAAAA,KAAAzB,EAAA,CAAA;AARH,QAAAgC,gBAAsBP;AAUrB,MAAAQ,IAAAC;AAAAlC,WAAAG,gBAGS8B,KAAAA,MAAA;AACR,QAAI,CAAC9B;AAAY;AAGjB,UAAAgC,cAAoBhE,uBAAuBmC,QAAOxC,OAAQ,GAE1DsE,SAAeA,MAAA;AACb,YAAA;AAAA,QAAAC;AAAAA,QAAAC;AAAAA,QAAA9F;AAAAA,QAAA+F;AAAAA,MAAAA,IAAmCJ,cAC/BA,YAAWK,0BADoB;AAAA,QAAAH,KAEzB;AAAA,QAACC,MAAQ;AAAA,QAAC9F,OAASyB,OAAMwE;AAAAA,QAAWF,QAAUtE,OAAMyE;AAAAA,MAAAA;AAE9D1B,kBAAY2B,CAAAA,SACVA,QACAA,KAAIN,QAASA,OACbM,KAAIL,SAAUA,QACdK,KAAInG,UAAWA,SACfmG,KAAIJ,WAAYA,SAJhBI,OAAA;AAAA,QAAAN;AAAAA,QAAAC;AAAAA,QAAA9F;AAAAA,QAAA+F;AAAAA,MAAAA,CAOF;AAAA,IAAC,GAIHK,MAAYC,sBAAsBT,MAAM;AACpCU,QAAAA;AACJ,WAAIX,gBACFW,iBAAiBA,IAAIC,eAAeX,MAAM,GAC1CU,eAAcE,QAASb,WAAW,IAEpClE,OAAMgF,iBAAkB,UAAUb,MAAM,GACxCnE,OAAMgF,iBAAkB,UAAUb,QAAQ,EAAI,GAEvC,MAAA;AACLc,2BAAqBN,GAAG,GACxBE,gBAAcK,WAAAA,GACdlF,OAAMmF,oBAAqB,UAAUhB,MAAM,GAC3CnE,OAAMmF,oBAAqB,UAAUhB,QAAQ,EAAI;AAAA,IAAC;AAAA,EACnD,GACAF,KAAA,CAAC/B,YAAY,GAACH,OAAAG,cAAAH,OAAAiC,IAAAjC,OAAAkC,OAAAD,KAAAjC,EAAA,CAAA,GAAAkC,KAAAlC,EAAA,CAAA,IAtCjBqD,UAAUpB,IAsCPC,EAAc;AAAC,MAAAoB,IAAAC;AAAAvD,WAAAmB,kBAIRmC,KAAAA,MAAA;AACR,QAAI,CAACnC;AAAc;AAEnB,UAAAqC,QAAYX,sBAAsB,MAAA;AAChC,YAAAY,UAAgBjD,WAAU1C;AAC1B,MAAK2F,YACYA,QAAOjF,cAA4B,aAAa,KAC/DiF,SAAmBC,MAAAA;AAAAA,IAAS,CAC/B;AAAC,WAEK,MAAMR,qBAAqBN,KAAG;AAAA,EAAC,GACrCW,KAAA,CAACpC,cAAc,GAACnB,OAAAmB,gBAAAnB,OAAAsD,IAAAtD,QAAAuD,OAAAD,KAAAtD,EAAA,CAAA,GAAAuD,KAAAvD,EAAA,EAAA,IAXnBqD,UAAUC,IAWPC,EAAgB;AAAC,MAAAI;AAAA3D,IAAA,EAAA,MAAAT,WAAAS,EAAA,EAAA,MAAAwB,gBAAAxB,EAAA,EAAA,MAAAS,kBAAAT,UAAAmB,kBAECwC,KAAApE,WACnB,oBAAC,iBAAA,EAAyB,SAAA,GACxB,8BAAC,SAAA,EACC,SAAA,IACO,OAAA,IAGUkB,iCACR,6BAAC,MAAA,EAAW,MAAA,GAAIU,UAAAA,iBAAA,oBAAA,iBAAqD,GACvE7D,OAAAA,eACG,WAAA,UACV,QAAA,IAEA,8BAAC,QAAA,EACa,cAAA6D,iBAAA,oBAAA,iBACN,MAAAA,iBAAAyC,eAAAC,YACD,MAAA,SACIrC,uBACA,SAAA,EAAA,CAAC,EAAA,CAEd,GACF,GACDxB,QAAAT,SAAAS,QAAAwB,cAAAxB,QAAAS,gBAAAT,QAAAmB,gBAAAnB,QAAA2D,MAAAA,KAAA3D,EAAA,EAAA;AAtBD,QAAA8D,eAAqBH;AAsBpB,MAAAI;AAAA/D,IAAA,EAAA,MAAAe,YAAAf,UAAAmB,kBAGC4C,MAAA5C,kBAAAJ,WAAA;AAAA,IAAAiD,UAEgB;AAAA,IAAO3B,KACZtB,SAAQsB;AAAAA,IAAIC,MACXvB,SAAQuB;AAAAA,IAAK9F,OACZuE,SAAQvE;AAAAA,IAAM+F,QACbxB,SAAQwB;AAAAA,EAAAA,IANtB0B,QAQajE,QAAAe,UAAAf,QAAAmB,gBAAAnB,QAAA+D,OAAAA,MAAA/D,EAAA,EAAA;AATf,QAAAkE,kBACEH;AAQa,MAAAI;AAAA,SAAAnE,EAAA,EAAA,MAAAE,YAAAF,EAAA,EAAA,MAAAkE,mBAAAlE,EAAA,EAAA,MAAAiB,qBAAAjB,EAAA,EAAA,MAAAmB,kBAAAnB,UAAA8D,gBAGbK,MAAA,oBAAC,gBAAA,EAAoB7D,KAAAA,SAClBa,UAAAA,iBAAA,qBAAA,UAAA,EAIG,UAAA;AAAA,IAAA,oBAAA,OAAA,EAAK,mBAAmB,OAAA;AAAA,MAAAoB,QAAStB;AAAAA,IAAAA,GAAkB;AAAA,IAGnD,oBAAC,QAAA,EACC,UAAA,oBAAC,OAAA,EACC,UAAA,qBAAC,mBAAA,EACYe,WAAAA,eACNlB,KAAAA,eACEoD,OAAAA,iBACG,UAAA,IAETJ,UAAAA;AAAAA,MAAAA;AAAAA,MACA5D,SAAS;AAAA,QAAAC,cAAegB;AAAAA,MAAAA,CAAe;AAAA,IAAA,EAAA,CAC1C,GACF,EAAA,CACF;AAAA,EAAA,EAAA,CAAS,IAnBZ,qBAAA,UAAA;;IAwBIjB,SAAS;AAAA,MAAAC,cAAegB;AAAAA,IAAAA,CAAe;AAAA,EAAA,EAAA,CAAC,EAAA,CAG/C,GAAiBnB,QAAAE,UAAAF,QAAAkE,iBAAAlE,QAAAiB,mBAAAjB,QAAAmB,gBAAAnB,QAAA8D,cAAA9D,QAAAmE,OAAAA,MAAAnE,EAAA,EAAA,GA5BjBmE;AA4BiB;ACvTd,MAAMC,kBAAkBC,KAAK,MAAM,OAAO,sBAAmB,CAAC;AAE9D,SAAAC,aAAA;AAAA,QAAAtE,IAAAC,EAAA,CAAA,GACL,CAAAsE,SAAAC,UAAA,IAA8BnE,SAAS,EAAK;AAAC,MAAAN,IAAAY;AAAA,SAAAX,EAAA,CAAA,MAAAY,uBAAAC,IAAA,2BAAA,KACnCd,KAAAA,MAAA;AACR8C,0BAAsB,MAAM4B,gBAAgB,MAAMD,WAAW,EAAI,CAAC,CAAC;AAAA,EAAC,GACnE7D,KAAA,CAAA,GAAEX,OAAAD,IAAAC,OAAAW,OAAAZ,KAAAC,EAAA,CAAA,GAAAW,KAAAX,EAAA,CAAA,IAFLqD,UAAUtD,IAEPY,EAAE,GACE4D;AAAO;ACNT,MAAMG,sBAA2C,CACtD;AAAA,EAACC,OAAO;AAAA,EAAcC,OAAO;AAAW,GACxC;AAAA,EAACD,OAAO;AAAA,EAAMC,OAAO;AAAQ,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAOC,OAAO;AAAK,GAC3B;AAAA,EAACD,OAAO;AAAA,EAAMC,OAAO;AAAQ,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAcC,OAAO;AAAY,GACzC;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAOC,OAAO;AAAK,GAC3B;AAAA,EAACD,OAAO;AAAA,EAAYC,OAAO;AAAU,GACrC;AAAA,EAACD,OAAO;AAAA,EAASC,OAAO;AAAO,GAC/B;AAAA,EAACD,OAAO;AAAA,EAAOC,OAAO;AAAK,GAC3B;AAAA,EAACD,OAAO;AAAA,EAAcC,OAAO;AAAM,GACnC;AAAA,EAACD,OAAO;AAAA,EAAUC,OAAO;AAAQ,GACjC;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,GAC7B;AAAA,EAACD,OAAO;AAAA,EAAMC,OAAO;AAAI,GACzB;AAAA,EAACD,OAAO;AAAA,EAAOC,OAAO;AAAK,GAC3B;AAAA,EAACD,OAAO;AAAA,EAAOC,OAAO;AAAK,GAC3B;AAAA,EAACD,OAAO;AAAA,EAAcC,OAAO;AAAY,GACzC;AAAA,EAACD,OAAO;AAAA,EAAOC,OAAO;AAAK,GAC3B;AAAA,EAACD,OAAO;AAAA,EAAQC,OAAO;AAAM,CAAC,GAGnBC,mBAAuD;AAAA,EAACC,IAAI;AAAY,GAExEC,YAAY,CAAC,MAAM,GC3B1BC,sBAAsB;AAErB,SAAAC,gBAAAC,YAAAN,OAAA;AAAA,QAAA5E,IAAAC,EAAA,EAAA,GAQLkF,YAAkBC,wBAAwBF,UAAU,GACpDG,gBAAsBH,WAAUI,SAAkBC,UAClDA,WAAiBX,OAAKW,YAALF,iBAAAL;AAAuD,MAAAjF;AAAA,MAAAC,EAAA,CAAA,MAAAuF,YAAAvF,SAAAmF,WAAA;AAAA,QAAAxE;AAAAX,aAAAuF,YAGtC5E,MAAA6E,WAAWA,MAAKZ,UAAWW,UAAQvF,OAAAuF,UAAAvF,OAAAW,OAAAA,MAAAX,EAAA,CAAA,GAAlDD,KAAAoF,UAASM,KAAM9E,GAAmC,GAACX,OAAAuF,UAAAvF,OAAAmF,WAAAnF,OAAAD;AAAAA,EAAA;AAAAA,SAAAC,EAAA,CAAA;AAAtE,QAAA0F,aAAmB3F;AAAmD,MAAAY;AAAAX,WAAA0F,YAAAC,QAAA3F,SAAAuF,YACjD5E,KAAA+E,YAAUC,QAAUC,uBAAuBL,QAAQ,KAAnDP,qBAA2EhF,EAAA,CAAA,IAAA0F,YAAAC,MAAA3F,OAAAuF,UAAAvF,OAAAW,MAAAA,KAAAX,EAAA,CAAA;AAAhG,QAAA6F,eAAqBlF;AAA2E,MAAAS;AAAA,SAAApB,EAAA,CAAA,MAAAuF,YAAAvF,SAAA6F,gBAAA7F,EAAA,EAAA,MAAAmF,aAEzF/D,KAAA;AAAA,IAAAmE;AAAAA,IAAAM;AAAAA,IAAAV;AAAAA,EAAAA,GAAmCnF,OAAAuF,UAAAvF,OAAA6F,cAAA7F,QAAAmF,WAAAnF,QAAAoB,MAAAA,KAAApB,EAAA,EAAA,GAAnCoB;AAAmC;AAG5C,SAASwE,uBAAuBE,MAAe;AAC7C,UAAQA,QAAQjB,iBAAiBiB,IAAI,MAAMA;AAC7C;AAEA,SAAAV,wBAAAW,MAAA;AAAA,QAAA/F,IAAAC,EAAA,CAAA;AAAA,MAAAF;AAAAiG,OAAA;AAEI,UAAAC,uBAA6BF,KAAIT,SAA8BW;AAC/D,QAAI,CAACA,sBAAoB;AACvBlG,WAAO2E;AAAP,YAAAsB;AAAAA,IAA0B;AAG5B,QAAI,CAACE,MAAKC,QAASF,oBAAoB;AACrC,YAAM,IAAIG,MACR,0DAA0D,OAAOH,oBAAoB,EACvF;AACD,QAAAtF;AAAAX,aAAAiG,wBAEMtF,KAAAsF,qBAAoBI,OAAQC,SAahC,CAAA,CAAE,GAACtG,OAAAiG,sBAAAjG,OAAAW,MAAAA,KAAAX,EAAA,CAAA,GAbND,KAAOY;AAAAA,EAaD;AAAA,SAzBDZ;AA0BG;AA3BZ,SAAAuG,QAAAC,KAAAxG,IAAA;AAakE,QAAA;AAAA,IAAA4E;AAAAA,IAAAC,OAAA4B;AAAAA,IAAAb;AAAAA,EAAAA,IAAA5F,IAC5D0G,QAAc5B,iBAAiB2B,GAAG;AAClC,SAAIC,SACFC,QAAOC,KACL,sIACAH,KACAC,OACAA,KACF,GAEOF,IAAGK,OAAQ;AAAA,IAAAjC;AAAAA,IAAAC,OAAe6B;AAAAA,IAAKd;AAAAA,EAAAA,CAAa,KAE9CY,IAAGK,OAAQ;AAAA,IAAAjC;AAAAA,IAAAC,OAAe4B;AAAAA,IAAGb;AAAAA,EAAAA,CAAO;AAAC;ACzC3C,SAAAkB,cAAAC,OAAA;AAAA,QAAA9G,IAAAC,EAAA,CAAA,GACL;AAAA,IAAAsF;AAAAA,IAAAJ;AAAAA,IAAA4B;AAAAA,IAAAC;AAAAA,EAAAA,IAAsDF;AAAK,MAAA/G;AAAAC,WAAA+G,YAGzDhH,KAAAkH,CAAAA,MAAA;AACE,UAAAC,WAAiBD,EAACE,cAAcvC;AAChCmC,aAASG,WAAWE,IAAIF,QAAkB,IAANG,OAAO;AAAA,EAAC,GAC7CrH,OAAA+G,UAAA/G,OAAAD,MAAAA,KAAAC,EAAA,CAAA;AAJH,QAAAsH,eAAqBvH;AAMpB,MAAAY;AAAAX,WAAAmF,aAIIxE,KAAAwE,UAASoC,IAAKjB,KAId,GAACtG,OAAAmF,WAAAnF,OAAAW,MAAAA,KAAAX,EAAA,CAAA;AAAA,MAAAoB;AAAA,SAAApB,EAAA,CAAA,MAAAgH,gBAAAhH,EAAA,CAAA,MAAAsH,gBAAAtH,EAAA,CAAA,MAAAuF,YAAAvF,SAAAW,MALJS,KAAA,oBAAC,UAAM,GAAK4F,cAAqBzB,iBAAoB+B,UAAAA,cAClD3G,cAKH,GAASX,OAAAgH,cAAAhH,OAAAsH,cAAAtH,OAAAuF,UAAAvF,OAAAW,IAAAX,OAAAoB,MAAAA,KAAApB,EAAA,CAAA,GANToB;AAMS;AAlBN,SAAAkF,MAAAR,MAAA;AAAA,SAcC,oBAAA,YAAgC,OAAAA,KAAIlB,OACjCkB,UAAAA,KAAInB,SADMmB,KAAIlB,KAEjB;AAAS;AClBV,SAAA4C,cAAAV,OAAA;AAAA,QAAA9G,IAAAC,EAAA,CAAA,GAGL;AAAA,IAAAwH;AAAAA,IAAAtC;AAAAA,IAAAI;AAAAA,IAAAmC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAA8Ed;AAAK,MAAA/G;AAAAC,IAAA,CAAA,MAAAuF,YAAAvF,SAAAmF,aAGjFpF,KAAAY,CAAAA,QAAA;AAAC,UAAA;AAAA,MAAAqG;AAAAA,MAAAD;AAAAA,IAAAA,IAAApG;AAA2D,WAExD,oBAAC,eAAA,EACWoG,UAEI,cACJxB,UACCJ,WAAS;AAAA,EACpB,GAELnF,OAAAuF,UAAAvF,OAAAmF,WAAAnF,OAAAD,MAAAA,KAAAC,EAAA,CAAA;AAXH,QAAA6H,cAAoB9H;AAanB,MAAAY;AAAA,SAAAX,EAAA,CAAA,MAAAyH,UAAAzH,EAAA,CAAA,MAAA2H,eAAA3H,EAAA,CAAA,MAAA6H,eAAA7H,EAAA,CAAA,MAAA0H,cAAA1H,SAAA4H,iBAGCjH,KAAA,oBAAC,aAAA,EACS8G,QACIC,YACCC,aACAE,aACED,eAAa,GAC5B5H,OAAAyH,QAAAzH,OAAA2H,aAAA3H,OAAA6H,aAAA7H,OAAA0H,YAAA1H,OAAA4H,eAAA5H,OAAAW,MAAAA,KAAAX,EAAA,CAAA,GANFW;AAME;ACnCC,SAAAmH,eAAAC,SAAAC,WAAA;AAAA,QAAAhI,IAAAC,EAAA,CAAA;AAAA,MAAAF;AAAA,MAAAC,EAAA,CAAA,MAAAgI,aAAAhI,SAAA+H,SAAA;AAAA,QAAApH;AAAAX,aAAAgI,aAOCrH,KAAA8G,YAAmCA,OAAMQ,SAAU,WAAWR,OAAMS,SAAUF,WAAShI,OAAAgI,WAAAhI,OAAAW,MAAAA,KAAAX,EAAA,CAAA,GADzFD,KAAAgI,QAAOtC,KACL9E,EACF,GAACX,OAAAgI,WAAAhI,OAAA+H,SAAA/H,OAAAD;AAAAA,EAAA;AAAAA,SAAAC,EAAA,CAAA;AAAA,SAFDD;AAEC;ACeA,SAAAoI,UAAArB,OAAA;AAAA,QAAA9G,IAAAC,EAAA,EAAA,GACL;AAAA,IAAA8H;AAAAA,IAAAf;AAAAA,IAAAD;AAAAA,IAAAqB;AAAAA,IAAAT;AAAAA,IAAAE;AAAAA,IAAAH;AAAAA,IAAAE;AAAAA,IAAA1C,YAAAa;AAAAA,IAAAnB;AAAAA,IAAAyD;AAAAA,EAAAA,IAYIvB,OAEJwB,sBAA4BR,eAAeC,SAAS,UAAU,GAC9DQ,iBAAuBT,eAAeC,SAAS,UAAU,GACzDS,kBAAwBV,eAAeC,SAAS,MAAM;AAAC,MAAAhI;AAAAC,WAAAqI,eAEnBtI,KAAAA,MAAA;AAClCsI,gBAAYtD,SAAS;AAAA,EAAC,GACvB/E,OAAAqI,aAAArI,OAAAD,MAAAA,KAAAC,EAAA,CAAA;AAFD,QAAAyI,kBAAwB1I;AAEP,MAAAY;AAAAX,WAAA+G,YAGfpG,KAAA+H,WAAqB3B,SAASK,IAAIsB,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAC1I,OAAA+G,UAAA/G,OAAAW,MAAAA,KAAAX,EAAA,CAAA;AADjE,QAAA2I,oBAA0BhI;AAGzB,MAAAS;AAAApB,IAAA,CAAA,MAAA+G,YAAA/G,SAAA+F,KAAAmC,QAAAlI,EAAA,CAAA,MAAA+F,KAAAT,SAAAC,YAGCnE,KAAAwH,CAAAA,SAAA;AAEE,UAAAvD,gBAAsBU,KAAIT,SAAkBC;AAE5CwB,aAAS,CACP8B,aAAa;AAAA,MAAAC,OAAQ/C,KAAImC;AAAAA,MAAK3C,UAAYF;AAAAA,IAAAA,CAAc,GACxDuD,OAAOxB,IAAIwB,MALA7D,SAKwB,IAAVsC,MALdtC,SAKwB,CAAC,CACrC;AAAA,EAAC,GACH/E,OAAA+G,UAAA/G,EAAA,CAAA,IAAA+F,KAAAmC,MAAAlI,EAAA,CAAA,IAAA+F,KAAAT,SAAAC,UAAAvF,OAAAoB,MAAAA,KAAApB,EAAA,CAAA;AATH,QAAA+I,mBAAyB3H,IAYzB;AAAA,IAAA+D;AAAAA,IAAAI;AAAAA,IAAAM;AAAAA,EAAAA,IAA4CZ,gBAAgB6B,MAAK5B,YAAa4B,MAAKlC,KAAM,GAEzFL,UAAgBD,WAAAA,GAEhB0E,oBAA0B,CAACjD,KAAIT,SAA2B2D;AAAA,MAAA3H;AAAAtB,IAAA,CAAA,MAAAgH,aAAAkC,UAAAlJ,EAAA,CAAA,MAAAgJ,qBAAAhJ,EAAA,EAAA,MAAA+I,oBAAA/I,EAAA,EAAA,MAAAyI,mBAAAzI,EAAA,EAAA,MAAA6F,gBAAA7F,EAAA,EAAA,MAAAuE,WAAAvE,EAAA,EAAA,MAAA2I,qBAAA3I,UAAAoI,YAAApI,EAAA,EAAA,MAAA4E,OAAAuE,oBAGxD7H,KAAA8H,CAAAA,mCACG,kBAAA,EAA0BJ,SAAAA,mBACxBvH,UAAAA,CAAAA,QAAA;AAAC,UAAA;AAAA,MAAAtB;AAAAA,IAAAA,IAAAsB;AAAc,WACd,oBAAC,mBACctB,aAAAA,cACL,QAAA,CAACA,cACA,UAAA,UACD,QAAA,GACD,QAAA,UACGiI,UAET7D,UAAAA,WACC,oBAAC,YAEG,UAAA,oBAAC,KAAA,EAAa,SAAA,GACZ,UAAA,oBAAC,QAAK,UAAA,yBAAA,CAAsB,EAAA,CAC9B,GAGF,UAAA,oBAAC,iBAAA,EACesB,cACJkD,UAAAA,kBAEH,OAAAK,WAAUxE,OACD,gBAAAA,OAAKuE,kBACFR,mBACTP,UACDK,SAAAA,iBACD,QAAAzB,aAAYkC,QAAO,EAAA,CAE/B,EAAA,CAEJ;AAAA,EAAkB,EAAA,CAEtB,GACDlJ,EAAA,CAAA,IAAAgH,aAAAkC,QAAAlJ,OAAAgJ,mBAAAhJ,QAAA+I,kBAAA/I,QAAAyI,iBAAAzI,QAAA6F,cAAA7F,QAAAuE,SAAAvE,QAAA2I,mBAAA3I,QAAAoI,UAAApI,EAAA,EAAA,IAAA4E,OAAAuE,kBAAAnJ,QAAAsB,MAAAA,KAAAtB,EAAA,EAAA;AApCH,QAAAqJ,kBAA6C/H;AAgD5C,MAAAG;AAAAzB,IAAA,EAAA,MAAAuF,YAAAvF,EAAA,EAAA,MAAAsI,uBAAAtI,EAAA,EAAA,MAAAmF,aAAAnF,UAAA2H,eAAA3H,EAAA,EAAA,MAAA6H,eAAA7H,EAAA,EAAA,MAAA0H,cAAA1H,EAAA,EAAA,MAAA4H,iBAIInG,KAAA6G,uBACC,oBAAC,eAAA,EACSA,QAAAA,qBACE/C,UACCJ,WACEwC,aACDD,YACCG,aACED,eAAa,GAE/B5H,QAAAuF,UAAAvF,QAAAsI,qBAAAtI,QAAAmF,WAAAnF,QAAA2H,aAAA3H,QAAA6H,aAAA7H,QAAA0H,YAAA1H,QAAA4H,eAAA5H,QAAAyB,MAAAA,KAAAzB,EAAA,EAAA;AAAA,MAAAiC;AAAAjC,IAAA,EAAA,MAAAuI,kBAAAvI,EAAA,EAAA,MAAA2H,eAAA3H,EAAA,EAAA,MAAA6H,eAAA7H,UAAA0H,cAAA1H,EAAA,EAAA,MAAA4H,iBAAA5H,EAAA,EAAA,MAAA+F,KAAAT,SAAAgE,gBAEArH,KAAA8D,KAAIT,SAAsBgE,gBAA1Bf,kBACC,oBAAC,aAAA,EACSA,QAAAA,gBACIb,YACCC,aACAE,aACED,cAAAA,CAAa,GAE/B5H,QAAAuI,gBAAAvI,QAAA2H,aAAA3H,QAAA6H,aAAA7H,QAAA0H,YAAA1H,QAAA4H,eAAA5H,EAAA,EAAA,IAAA+F,KAAAT,SAAAgE,cAAAtJ,QAAAiC,MAAAA,KAAAjC,EAAA,EAAA;AAAA,MAAAkC;AAAAlC,IAAA,EAAA,MAAAwI,mBAAAxI,EAAA,EAAA,MAAAqJ,mBAAArJ,EAAA,EAAA,MAAA2H,eAAA3H,EAAA,EAAA,MAAA0H,cAAA1H,UAAA4H,iBAEA1F,KAAAsG,mBACC,oBAAC,aAAA,EACSA,QAAAA,iBACKa,aAAAA,iBACD3B,YACCC,aACEC,cAAAA,CAAa,GAE/B5H,QAAAwI,iBAAAxI,QAAAqJ,iBAAArJ,QAAA2H,aAAA3H,QAAA0H,YAAA1H,QAAA4H,eAAA5H,QAAAkC,MAAAA,KAAAlC,EAAA,EAAA;AAAA,MAAAsD;AAAA,SAAAtD,EAAA,EAAA,MAAAyB,MAAAzB,UAAAiC,MAAAjC,EAAA,EAAA,MAAAkC,MA/BHoB,0BAAC,OAAA,EAAW,KAAA,GACT7B,UAAAA;AAAAA,IAAAA;AAAAA,IAYAQ;AAAAA,IAUAC;AAAAA,EAAAA,GASH,GAAQlC,QAAAyB,IAAAzB,QAAAiC,IAAAjC,QAAAkC,IAAAlC,QAAAsD,MAAAA,KAAAtD,EAAA,EAAA,GAhCRsD;AAgCQ;AC5JL,SAASiG,SAAShE,UAAmB;AAC1C,MAAIA,aAAa;AACf,WACE,oBAAC,SAAI,OAAM,8BAA6B,SAAQ,eAC9C,UAAA,qBAAC,KAAA,EAAE,MAAK,WACN,UAAA;AAAA,MAAA,oBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,QAAM;AAAA,MAChC,oBAAC,QAAA,EAAK,GAAE,8sEAAA,CAA6sE;AAAA,IAAA,EAAA,CACvtE,EAAA,CACF;AAIJ,MAAIA,aAAa;AACf,WACE,qBAAC,OAAA,EAAI,OAAM,8BAA6B,SAAQ,eAC9C,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,MAAK,WAAU,GAAE,uCAAqC;AAAA,MAC5D,oBAAC,QAAA,EACC,MAAK,WACL,GAAE,89BAAA,CAA69B;AAAA,IAAA,GAEn+B;AAIJ,MAAIA,aAAa;AACf,WACE,oBAAC,OAAA,EAAI,OAAM,8BAA6B,SAAQ,eAC9C,UAAA,oBAAC,KAAA,EAAE,WAAU,8BACX,UAAA,qBAAC,KAAA,EAAE,WAAU,6CACX,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,GAAE,+mBAAA,CAA8mB;AAAA,MACtnB,oBAAC,QAAA,EAAK,GAAE,wRAAA,CAAuR;AAAA,MAC/R,oBAAC,QAAA,EAAK,GAAE,+mBAAA,CAA8mB;AAAA,IAAA,EAAA,CACxnB,GACF,GACF;AAIJ,MAAIA,aAAa;AACf,gCACG,OAAA,EACC,OAAM,8BACN,YAAW,gCACX,SAAQ,eAER,UAAA;AAAA,MAAA,qBAAC,QAAA,EACC,UAAA;AAAA,QAAA,qBAAC,kBAAA,EAAe,IAAG,KACjB,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,QAAO,IAAA,CAAG;AAAA,UAChB,oBAAC,QAAA,EAAK,QAAO,KAAI,WAAU,OAAA,CAAM;AAAA,QAAA,GACnC;AAAA,4BACC,kBAAA,EACC,IAAG,WACH,IAAG,WACH,IAAG,YACH,IAAG,WACH,IAAG,KACH,WAAU,MACV,eAAc,kBACd,mBAAkB,6CAA2C;AAAA,4BAE9D,kBAAA,EACC,IAAG,YACH,IAAG,WACH,IAAG,WACH,IAAG,WACH,IAAG,KACH,WAAU,MACV,eAAc,kBACd,mBAAkB,4CAAA,CAA2C;AAAA,MAAA,GAEjE;AAAA,MACA,oBAAC,QAAA,EACC,GAAE,gTACF,OAAO;AAAA,QAACiE,QAAQ;AAAA,MAAA,GAChB,OAAM,QACN,MAAK,WACL,UAAS,WACT,UAAS,WAAS;AAAA,MAEpB,oBAAC,QAAA,EACC,GAAE,4SACF,OAAO;AAAA,QAACA,QAAQ;AAAA,MAAA,GAChB,OAAM,QACN,MAAK,WACL,UAAS,WACT,UAAS,UAAA,CAAS;AAAA,IAAA,GAEtB;AAKN;ACnFA,MAAMC,mBAAmB7K,OAAOc,GAAG,EAACZ,WAAA;AAAA,EAAAC,aAAA;AAAA,EAAAC,aAAA;AAAA,CAAA;AAc7B,SAAA0K,YAAA5C,OAAA;AAAA,QAAA9G,IAAAC,EAAA,EAAA,GACL;AAAA,IAAA0J;AAAAA,IAAAzE,YAAAa;AAAAA,EAAAA,IAAsCe,OAEtC;AAAA,IAAAjB;AAAAA,EAAAA,IAAuBZ,gBAAgBc,MAAwBe,MAAK6C,SAAU,GAE9EpF,UAAgBD,WAAAA;AAAY,MAAAvE;AAAAC,WAAA2J,aAIrB5J,KAAA4J,WAASC,YAAcD,WAASpE,WAC/B,oBAAC,MAAA,EACgB,eAAA,GACD,cAAAoE,UAASf,OAAT,IAAA,GACA,cAAA,CAAC,CAACe,UAASf,MAEzB,UAAA,qBAAC,MAAA,EAAW,OAAA,UAAiB,SAAA,YAC1Be,UAAAA;AAAAA,IAAAA,WAASC,WACR,oBAAC,KAAA,EAAU,MAAA,GACT,UAAA,oBAAC,MAAA,EACC,UAAA,8BAAOD,UAAAA,UAASC,UAAU,EAAA,CAC5B,GACF,IALD;AAAA,IAOAD,WAASpE,WAAa,oBAAC,OAAA,EAAM,OAAA,IAAOoE,UAAAA,UAASpE,UAAU,IAAvD;AAAA,EAAA,EAAA,CACH,EAAA,CACF,IAhBD,MAiBOvF,OAAA2J,WAAA3J,OAAAD,MAAAA,KAAAC,EAAA,CAAA;AAAA,MAAAW;AAAAX,IAAA,CAAA,MAAA6F,gBAAA7F,EAAA,CAAA,MAAAuE,WAAAvE,EAAA,CAAA,MAAA2J,WAAAf,QAAA5I,EAAA,CAAA,MAAA2J,WAAAR,oBACPxI,KAAA4D,WACC,oBAAC,UAAA,EAAmB,UAAA,oBAAC,MAAA,EAAc,SAAA,GAAG,UAAA,0BAAA,CAAuB,GAC3D,UAAA,oBAAC,iBAAA,EACC,UAAA,IACU,UAAA,IACH,OAAAoF,WAASf,QAAT,IACS,gBAAAe,WAASR,oBAAT,CAAA,GACJ,YAAA;AAAA,IAAAU,aACG;AAAA,IAAKC,YACN;AAAA,IAAKC,2BACU;AAAA,IAAKC,2BACL;AAAA,IAAKC,qBACX;AAAA,EAAA,GAETpE,aAAAA,CAAY,GAE9B,GACD7F,OAAA6F,cAAA7F,OAAAuE,SAAAvE,EAAA,CAAA,IAAA2J,WAAAf,MAAA5I,EAAA,CAAA,IAAA2J,WAAAR,kBAAAnJ,OAAAW,MAAAA,KAAAX,EAAA,CAAA;AAAA,MAAAoB;AAAA,SAAApB,EAAA,CAAA,MAAAD,MAAAC,SAAAW,MArCLS,KAAA,oBAAC,kBAAA,EACC,UAAA,qBAAC,MAAA,EAAc,SAAA,GACZrB,UAAAA;AAAAA,IAAAA;AAAAA,IAkBAY;AAAAA,EAAAA,EAAAA,CAkBH,GACF,GAAmBX,OAAAD,IAAAC,OAAAW,IAAAX,OAAAoB,MAAAA,KAAApB,EAAA,CAAA,GAvCnBoB;AAuCmB;AC1DhB,MAAM8I,eAAe,QAoBfC,aAAaC,WAAW;AAAA,EACnClC,MAAM;AAAA,EACNnC,MAAM;AAAA,EACNpB,OAAO;AAAA,EACP0F,YAAY;AAAA,IAAClL,OAAOgJ;AAAAA,IAAWmC,SAASZ;AAAAA,EAAAA;AAAAA,EACxCa,MAAMC;AAAAA,EACNC,QAAQ,CACN;AAAA,IACEvC,MAAM;AAAA,IACNvD,OAAO;AAAA,IACPoB,MAAM;AAAA,EAAA,GAER;AAAA,IACEmC,MAAM;AAAA,IACNvD,OAAO;AAAA,IACPoB,MAAM;AAAA,EAAA,GAER;AAAA,IACEpB,OAAO;AAAA,IACPuD,MAAM;AAAA,IACNnC,MAAM;AAAA,EAAA,GAER;AAAA,IACEpB,OAAO;AAAA,IACPuD,MAAM;AAAA,IACNnC,MAAM;AAAA,IACN2E,IAAI,CACF;AAAA,MACE3E,MAAM;AAAA,MACNpB,OAAO;AAAA,IAAA,CACR;AAAA,EAAA,CAEJ;AAAA,EAEH2F,SAAS;AAAA,IACPK,QAAQ;AAAA,MACNpF,UAAU;AAAA,MACVqD,MAAM;AAAA,MACNgB,UAAU;AAAA,MACVT,kBAAkB;AAAA,IAAA;AAAA,IAEpByB,SAAUhG,CAAAA,WAMD;AAAA,MACLD,OAAOC,MAAMgF,aAAahF,MAAMW,YAAY,WAAWsF,YAAAA;AAAAA,MACvDC,OAAOvB,SAAS3E,OAAOW,QAAQ;AAAA,MAC/BoE,WAAW/E;AAAAA,IAAAA;AAAAA,EACb;AAGN,CAAC,GCjFYmG,yBAAyBC,cAA2C/G,MAAS,GCS7EgH,YAA4CC,aACtDC,CAAAA,WAAW;AACV,QAAMC,YAAYD,UAAUA,OAAOC,WAC7BC,aAAa;AAAA,IACjBnD,MAAM;AAAA,IACNoD,QAAQ;AAAA,MAACC,OAAO,CAACpB,UAAU;AAAA,IAAA;AAAA,EAAC;AAE9B,SAAKiB,YAGE;AAAA,IACL,GAAGC;AAAAA,IACHG,MAAM;AAAA,MACJnB,YAAY;AAAA,QACVlL,OAAQ2H,CAAAA,UACFA,MAAM2E,OAAO,SACR3E,MAAM4E,cAAc5E,KAAK,IAGhC,oBAAC,uBAAuB,UAAvB,EAAgC,OAAOqE,QACrCrE,UAAAA,MAAM4E,cAAc5E,KAAK,EAAA,CAC5B;AAAA,MAAA;AAAA,IAGN;AAAA,EACF,IAjBOuE;AAmBX,CACF;"}
package/dist/index.d.ts CHANGED
@@ -24,6 +24,12 @@ interface CodeOptions {
24
24
  languageAlternatives?: CodeInputLanguage[];
25
25
  language?: string;
26
26
  withFilename?: boolean;
27
+ /**
28
+ * Hides the fullscreen toggle button on the editor.
29
+ *
30
+ * @defaultValue false
31
+ */
32
+ disableFullscreen?: boolean;
27
33
  }
28
34
  /**
29
35
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/schema.tsx","../src/CodeInput.tsx","../src/PreviewCode.tsx","../src/codemirror/defaultCodeModes.ts","../src/plugin.tsx"],"mappings":";;UAEiB,iBAAA;EACf,KAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;UAMe,cAAA;EACf,KAAA;EACA,IAAA;EACA,QAAA;EACA,QAAA;EACA,gBAAA;AAAA;;;;UAKe,WAAA;EACf,KAAA;EACA,SAAA;EACA,oBAAA,GAAuB,iBAAiB;EACxC,QAAA;EACA,YAAA;AAAA;;;;UAMe,cAAA,SAAuB,IAAA,CAAK,gBAAA;EAC3C,OAAA,GAAU,WAAA;AAAA;;AA/BZ;;cCSa,YAAA;;;;UAKI,cAAA,SAAuB,IAAA,CAAK,gBAAA;EAC3C,IAAA,SAAa,YAAA;EACb,OAAA,GAAU,WAAA;AAAA;AAAA;EAAA,UAKO,oBAAA;IACf,IAAA,EAAM,cAAc;EAAA;AAAA;;;;cAOX,UAAA;;;;;;;;;;;AD7Bb;;;AAAA,UEuBiB,cAAA,SAAuB,gBAAA,CAAiB,cAAA,EAAgB,cAAA;;iBAyCzD,SAAA,CAAU,KAAA,EAAO,cAAA,GAAiB,KAAA,CAAM,GAAA,CAAI,OAAO;;AFhEnE;;UGciB,gBAAA,SAAyB,YAAY;EACpD,SAAA,GAAY,cAAA;AAAA;;;;iBAME,WAAA,CAAY,KAAA,EAAO,gBAAA,GAAmB,KAAA,CAAM,GAAA,CAAI,OAAO;AAAA,UCpBtD,QAAA;EACf,IAAA;EACA,MAAA,EAAQ,UAAU;AAAA;AAAA,KAER,UAAA,SAAmB,OAAA,CAAQ,SAAA,gBAAyB,SAAA;AAAA,UCD/C,eAAA;EACf,SAAA,GAAY,QAAQ;AAAA;;;;cAMT,SAAA,EAAW,MAAM,CAAC,eAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/schema.tsx","../src/CodeInput.tsx","../src/PreviewCode.tsx","../src/codemirror/defaultCodeModes.ts","../src/plugin.tsx"],"mappings":";;UAEiB,iBAAA;EACf,KAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;UAMe,cAAA;EACf,KAAA;EACA,IAAA;EACA,QAAA;EACA,QAAA;EACA,gBAAA;AAAA;;;;UAKe,WAAA;EACf,KAAA;EACA,SAAA;EACA,oBAAA,GAAuB,iBAAiB;EACxC,QAAA;EACA,YAAA;;;;;;EAMA,iBAAA;AAAA;;;;UAMe,cAAA,SAAuB,IAAA,CAAK,gBAAA;EAC3C,OAAA,GAAU,WAAA;AAAA;;AArCZ;;cCSa,YAAA;;;;UAKI,cAAA,SAAuB,IAAA,CAAK,gBAAA;EAC3C,IAAA,SAAa,YAAA;EACb,OAAA,GAAU,WAAA;AAAA;AAAA;EAAA,UAKO,oBAAA;IACf,IAAA,EAAM,cAAc;EAAA;AAAA;;;;cAOX,UAAA;;;;;;;;;;;AD7Bb;;;AAAA,UEsBiB,cAAA,SAAuB,gBAAA,CAAiB,cAAA,EAAgB,cAAA;;iBAGzD,SAAA,CAAU,KAAA,EAAO,cAAA,GAAiB,KAAA,CAAM,GAAA,CAAI,OAAO;;AFzBnE;;UGciB,gBAAA,SAAyB,YAAY;EACpD,SAAA,GAAY,cAAA;AAAA;;;;iBAME,WAAA,CAAY,KAAA,EAAO,gBAAA,GAAmB,KAAA,CAAM,GAAA,CAAI,OAAO;AAAA,UCpBtD,QAAA;EACf,IAAA;EACA,MAAA,EAAQ,UAAU;AAAA;AAAA,KAER,UAAA,SAAmB,OAAA,CAAQ,SAAA,gBAAyB,SAAA;AAAA,UCD/C,eAAA;EACf,SAAA,GAAY,QAAQ;AAAA;;;;cAMT,SAAA,EAAW,MAAM,CAAC,eAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/code-input",
3
- "version": "7.1.6",
3
+ "version": "7.2.0",
4
4
  "description": "Sanity input component for code, powered by CodeMirror",
5
5
  "keywords": [
6
6
  "cms",
@@ -40,10 +40,10 @@
40
40
  "@codemirror/lang-markdown": "^6.5.0",
41
41
  "@codemirror/lang-php": "^6.0.2",
42
42
  "@codemirror/lang-sql": "^6.10.0",
43
- "@codemirror/language": "^6.12.3",
43
+ "@codemirror/language": "^6.12.4",
44
44
  "@codemirror/legacy-modes": "^6.5.3",
45
- "@codemirror/state": "^6.6.0",
46
- "@codemirror/view": "^6.43.1",
45
+ "@codemirror/state": "^6.7.0",
46
+ "@codemirror/view": "^6.43.3",
47
47
  "@lezer/highlight": "^1.2.3",
48
48
  "@sanity/icons": "^3.7.4",
49
49
  "@sanity/lezer-groq": "^1.0.4",
@@ -52,14 +52,14 @@
52
52
  "@uiw/react-codemirror": "^4.25.10"
53
53
  },
54
54
  "devDependencies": {
55
- "@sanity/pkg-utils": "^10.5.7",
55
+ "@sanity/pkg-utils": "^10.8.0",
56
56
  "@types/node": "^24.13.2",
57
57
  "@types/react": "^19.2.17",
58
58
  "babel-plugin-react-compiler": "^1.0.0",
59
59
  "babel-plugin-styled-components": "^2.3.0",
60
60
  "react": "^19.2.7",
61
- "sanity": "^6.1.0",
62
- "styled-components": "^6.4.2",
61
+ "sanity": "^6.2.0",
62
+ "styled-components": "^6.4.3",
63
63
  "@repo/package.config": "0.0.0",
64
64
  "@repo/tsconfig": "0.0.0"
65
65
  },