@health-samurai/react-components 0.0.0-alpha.13 → 0.0.0-alpha.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/code-editor/index.tsx"],"names":[],"mappings":"AAgCA,OAAO,EAGN,KAAK,SAAS,EAId,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKN,UAAU,EASV,KAAK,UAAU,EACf,MAAM,kBAAkB,CAAC;AAykB1B,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAsCrD,KAAK,eAAe,GAAG;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AAExC,wBAAgB,UAAU,CAAC,EAC1B,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAgB,EAChB,EAAE,EACF,IAAa,EACb,eAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EAAE,gBAAuB,EACnC,UAAU,EAAE,gBAAuB,EACnC,WAAW,EAAE,iBAAwB,EACrC,gBAAgB,GAChB,EAAE,eAAe,2CAmLjB;AAiJD,wBAAgB,WAAW,CAAC,EAC3B,oBAAoB,EACpB,EAAE,EACF,YAAY,EACZ,YAAY,EACZ,QAAQ,GACR,EAAE;IACF,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,2CA4GA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/code-editor/index.tsx"],"names":[],"mappings":"AAgCA,OAAO,EAGN,KAAK,SAAS,EAId,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKN,UAAU,EASV,KAAK,UAAU,EACf,MAAM,kBAAkB,CAAC;AA6nB1B,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAsCrD,KAAK,eAAe,GAAG;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;IACnC,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC;AAExC,wBAAgB,UAAU,CAAC,EAC1B,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAgB,EAChB,EAAE,EACF,IAAa,EACb,eAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EAAE,gBAAuB,EACnC,UAAU,EAAE,gBAAuB,EACnC,WAAW,EAAE,iBAAwB,EACrC,gBAAgB,GAChB,EAAE,eAAe,2CAiMjB;AA4JD,wBAAgB,WAAW,CAAC,EAC3B,oBAAoB,EACpB,EAAE,EACF,YAAY,EACZ,YAAY,EACZ,QAAQ,GACR,EAAE;IACF,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,2CA4GA"}
@@ -10,7 +10,7 @@ import { closeSearchPanel, findNext, findPrevious, getSearchQuery, highlightSele
10
10
  import { Compartment, EditorState, RangeSet, StateEffect, StateField } from "@codemirror/state";
11
11
  import { crosshairCursor, Decoration, drawSelection, dropCursor, EditorView, GutterMarker, gutterLineClass, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers, rectangularSelection } from "@codemirror/view";
12
12
  import { tags } from "@lezer/highlight";
13
- import { ChevronDown, ChevronUp, X } from "lucide-react";
13
+ import { Braces, ChevronDown, ChevronUp, Terminal, X } from "lucide-react";
14
14
  import * as React from "react";
15
15
  import { flushSync } from "react-dom";
16
16
  import { createRoot } from "react-dom/client";
@@ -125,17 +125,21 @@ const errorTooltipHandler = EditorView.domEventHandlers({
125
125
  return false;
126
126
  }
127
127
  });
128
- const baseTheme = EditorView.baseTheme({
128
+ const baseTheme = EditorView.theme({
129
129
  "&": {
130
130
  backgroundColor: "var(--color-bg-primary)",
131
131
  height: "100%",
132
132
  width: "100%",
133
- fontSize: "14px",
134
- paddingTop: "8px",
135
- paddingBottom: "8px"
133
+ fontSize: "14px"
134
+ },
135
+ "&.cm-editor": {
136
+ paddingTop: "0 !important",
137
+ paddingBottom: "0 !important"
136
138
  },
137
139
  ".cm-scroller": {
138
- overflow: "auto"
140
+ overflow: "auto",
141
+ paddingTop: "8px",
142
+ paddingBottom: "8px"
139
143
  },
140
144
  ".cm-content": {
141
145
  fontFamily: "var(--font-family-mono)",
@@ -144,6 +148,9 @@ const baseTheme = EditorView.baseTheme({
144
148
  "&.cm-focused": {
145
149
  outline: "none"
146
150
  },
151
+ ".cm-cursor, .cm-dropCursor": {
152
+ borderLeftColor: "var(--color-text-primary)"
153
+ },
147
154
  ".cm-gutter": {
148
155
  fontFamily: "var(--font-family-mono)"
149
156
  },
@@ -169,17 +176,61 @@ const baseTheme = EditorView.baseTheme({
169
176
  backgroundColor: "color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)"
170
177
  }
171
178
  });
179
+ const completionTheme = EditorView.theme({
180
+ ".cm-tooltip.cm-tooltip-autocomplete > ul": {
181
+ maxHeight: "400px"
182
+ },
183
+ ".cm-tooltip.cm-tooltip-autocomplete > ul > li": {
184
+ display: "flex",
185
+ alignItems: "center",
186
+ gap: "8px"
187
+ },
188
+ ".cm-completionLabel": {
189
+ flex: "1",
190
+ minWidth: "0"
191
+ },
192
+ ".cm-completionDetail": {
193
+ color: "var(--color-text-tertiary)",
194
+ fontSize: "12px",
195
+ marginLeft: "auto",
196
+ whiteSpace: "nowrap"
197
+ },
198
+ ".cm-completionInfo": {
199
+ backgroundColor: "var(--color-bg-primary)",
200
+ border: "1px solid var(--color-border-primary)",
201
+ borderRadius: "var(--radius-md)",
202
+ color: "var(--color-text-secondary)",
203
+ fontFamily: "var(--font-family-sans)",
204
+ fontSize: "12px",
205
+ padding: "8px 12px",
206
+ lineHeight: "1.4",
207
+ whiteSpace: "normal",
208
+ maxWidth: "300px"
209
+ },
210
+ ".cm-completion-icon": {
211
+ display: "flex",
212
+ alignItems: "center",
213
+ justifyContent: "center",
214
+ width: "16px",
215
+ height: "16px",
216
+ flexShrink: "0"
217
+ }
218
+ });
172
219
  const readOnlyTheme = EditorView.theme({
173
220
  "&": {
174
221
  backgroundColor: "var(--color-bg-secondary)",
175
222
  height: "100%",
176
223
  width: "100%",
177
- fontSize: "14px",
178
- paddingTop: "8px",
179
- paddingBottom: "8px"
224
+ fontSize: "14px"
225
+ },
226
+ "&.cm-editor": {
227
+ paddingTop: "0 !important",
228
+ paddingBottom: "0 !important"
180
229
  },
181
230
  ".cm-scroller": {
182
- overflow: "auto"
231
+ overflow: "auto",
232
+ paddingTop: "8px",
233
+ paddingBottom: "8px"
183
234
  },
184
235
  ".cm-content": {
185
236
  fontFamily: "var(--font-family-mono)",
@@ -435,59 +486,59 @@ const customSearchExtension = [
435
486
  const customHighlightStyle = HighlightStyle.define([
436
487
  {
437
488
  tag: tags.propertyName,
438
- color: "#EA4A35"
489
+ color: "var(--hs-syntax-property)"
439
490
  },
440
491
  {
441
492
  tag: tags.string,
442
- color: "#405CBF"
493
+ color: "var(--hs-syntax-string)"
443
494
  },
444
495
  {
445
496
  tag: tags.number,
446
- color: "#00A984"
497
+ color: "var(--hs-syntax-number)"
447
498
  },
448
499
  {
449
500
  tag: tags.bool,
450
- color: "#569cd6"
501
+ color: "var(--hs-syntax-keyword)"
451
502
  },
452
503
  {
453
504
  tag: tags.null,
454
- color: "#569cd6"
505
+ color: "var(--hs-syntax-keyword)"
455
506
  },
456
507
  {
457
508
  tag: tags.keyword,
458
- color: "#569cd6"
509
+ color: "var(--hs-syntax-keyword)"
459
510
  },
460
511
  {
461
512
  tag: tags.operatorKeyword,
462
- color: "#405CBF"
513
+ color: "var(--hs-syntax-string)"
463
514
  },
464
515
  {
465
516
  tag: tags.controlKeyword,
466
- color: "#EA4A35"
517
+ color: "var(--hs-syntax-property)"
467
518
  },
468
519
  {
469
520
  tag: tags.typeName,
470
- color: "#00A984"
521
+ color: "var(--hs-syntax-number)"
471
522
  },
472
523
  {
473
524
  tag: tags.variableName,
474
- color: "#EA4A35"
525
+ color: "var(--hs-syntax-property)"
475
526
  },
476
527
  {
477
528
  tag: tags.operator,
478
- color: "#405CBF"
529
+ color: "var(--hs-syntax-string)"
479
530
  },
480
531
  {
481
532
  tag: tags.comment,
482
- color: "#00A984"
533
+ color: "var(--hs-syntax-comment)"
483
534
  },
484
535
  {
485
536
  tag: tags.lineComment,
486
- color: "#00A984"
537
+ color: "var(--hs-syntax-comment)"
487
538
  },
488
539
  {
489
540
  tag: tags.blockComment,
490
- color: "#00A984"
541
+ color: "var(--hs-syntax-comment)"
491
542
  }
492
543
  ]);
493
544
  const SQL_KEYWORDS = [
@@ -653,13 +704,30 @@ export function CodeEditor({ defaultValue, currentValue, onChange, onUpdate, vie
653
704
  languageCompartment.current.of([]),
654
705
  bracketMatching(),
655
706
  closeBrackets(),
656
- autocompletion(),
707
+ autocompletion({
708
+ icons: false,
709
+ maxRenderedOptions: 1000,
710
+ addToOptions: [
711
+ {
712
+ render: renderCompletionIcon,
713
+ position: 20
714
+ }
715
+ ],
716
+ optionClass: (_completion)=>"!px-2 !py-1 rounded-md aria-selected:!bg-bg-quaternary aria-selected:!text-text-primary hover:!bg-bg-secondary flex items-center gap-2",
717
+ tooltipClass: (_state)=>"!bg-bg-primary rounded-md p-2 shadow-md !border-border-primary !typo-body",
718
+ compareCompletions: (a, b)=>{
719
+ const aIsProperty = a.type === "property" ? 0 : 1;
720
+ const bIsProperty = b.type === "property" ? 0 : 1;
721
+ return aIsProperty - bIsProperty;
722
+ }
723
+ }),
657
724
  rectangularSelection(),
658
725
  crosshairCursor(),
659
726
  highlightActiveLine(),
660
727
  highlightActiveLineGutter(),
661
728
  highlightSelectionMatches(),
662
729
  themeCompartment.current.of(baseTheme),
730
+ completionTheme,
663
731
  keymap.of([
664
732
  ...closeBracketsKeymap,
665
733
  ...defaultKeymap,
@@ -829,6 +897,9 @@ const editorInputTheme = EditorView.theme({
829
897
  fontSize: "var(--font-size-sm)",
830
898
  color: "var(--color-text-primary)"
831
899
  },
900
+ ".cm-cursor, .cm-dropCursor": {
901
+ borderLeftColor: "var(--color-text-primary)"
902
+ },
832
903
  "&.cm-editor.cm-focused": {
833
904
  outline: "none"
834
905
  },
@@ -862,10 +933,23 @@ const editorInputTheme = EditorView.theme({
862
933
  flexShrink: "0"
863
934
  }
864
935
  });
936
+ const KeywordIcon = ()=>/*#__PURE__*/ _jsx(Terminal, {
937
+ size: 16,
938
+ color: "#717684"
939
+ });
940
+ const OperatorIcon = ()=>/*#__PURE__*/ _jsx(Braces, {
941
+ size: 16,
942
+ color: "#717684"
943
+ });
865
944
  function getCompletionIcon(completion) {
866
945
  if (completion.type === "function") return SquareFunctionIcon;
946
+ if (completion.type === "keyword") return KeywordIcon;
947
+ if (completion.type === "operator") return OperatorIcon;
867
948
  const detail = completion.detail;
868
- if (!detail) return null;
949
+ if (!detail) {
950
+ if (completion.type === "variable") return SquareFunctionIcon;
951
+ return null;
952
+ }
869
953
  const typeName = detail.replace(/\[\]$/, "");
870
954
  if (!typeName) return null;
871
955
  const firstChar = typeName[0];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/code-editor/index.tsx"],"sourcesContent":["import {\n\tacceptCompletion,\n\tautocompletion,\n\ttype Completion,\n\tcloseBrackets,\n\tcloseBracketsKeymap,\n\tcompletionKeymap,\n} from \"@codemirror/autocomplete\";\nimport { defaultKeymap, history, historyKeymap } from \"@codemirror/commands\";\nimport { json, jsonParseLinter } from \"@codemirror/lang-json\";\nimport { SQLDialect, sql } from \"@codemirror/lang-sql\";\nimport { yaml } from \"@codemirror/lang-yaml\";\nimport {\n\tbracketMatching,\n\tfoldGutter,\n\tfoldKeymap,\n\tHighlightStyle,\n\tindentOnInput,\n\tsyntaxHighlighting,\n} from \"@codemirror/language\";\nimport { linter, lintGutter, lintKeymap } from \"@codemirror/lint\";\nimport {\n\tcloseSearchPanel,\n\tfindNext,\n\tfindPrevious,\n\tgetSearchQuery,\n\thighlightSelectionMatches,\n\tSearchQuery,\n\tsearch,\n\tsearchKeymap,\n\tsetSearchQuery,\n} from \"@codemirror/search\";\nimport {\n\tCompartment,\n\tEditorState,\n\ttype Extension,\n\tRangeSet,\n\tStateEffect,\n\tStateField,\n} from \"@codemirror/state\";\nimport {\n\tcrosshairCursor,\n\tDecoration,\n\tdrawSelection,\n\tdropCursor,\n\tEditorView,\n\tGutterMarker,\n\tgutterLineClass,\n\thighlightActiveLine,\n\thighlightActiveLineGutter,\n\thighlightSpecialChars,\n\tkeymap,\n\tlineNumbers,\n\trectangularSelection,\n\ttype ViewUpdate,\n} from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\nimport { ChevronDown, ChevronUp, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { ComplexTypeIcon, SquareFunctionIcon, TypCodeIcon } from \"../../icons\";\nimport { http } from \"./http\";\n\n// --- Issue lines: gutter highlighting, line background, hover tooltip ---\n\ntype IssueLine = { line: number; message?: string };\n\nclass ErrorLineGutterMarker extends GutterMarker {\n\telementClass = \"cm-errorLineGutter\";\n}\nconst errorLineMarker = new ErrorLineGutterMarker();\nconst errorLineDecoration = Decoration.line({ class: \"cm-errorLine\" });\n\nconst setIssueLinesEffect = StateEffect.define<IssueLine[]>();\n\nlet errorTooltipEl: HTMLDivElement | null = null;\n\nfunction showErrorTooltip(anchor: Element, message: string) {\n\thideErrorTooltip();\n\n\tconst tooltip = document.createElement(\"div\");\n\ttooltip.textContent = message;\n\tObject.assign(tooltip.style, {\n\t\tposition: \"fixed\",\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tpadding: \"6px 10px\",\n\t\tfontSize: \"12px\",\n\t\tlineHeight: \"1.4\",\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\tzIndex: \"1000\",\n\t\tpointerEvents: \"none\",\n\t\tmaxWidth: \"400px\",\n\t\twhiteSpace: \"pre-wrap\",\n\t});\n\tdocument.body.appendChild(tooltip);\n\terrorTooltipEl = tooltip;\n\n\tconst guttersEl = anchor.closest(\".cm-gutters\");\n\tconst guttersRect = guttersEl\n\t\t? guttersEl.getBoundingClientRect()\n\t\t: anchor.getBoundingClientRect();\n\tconst anchorRect = anchor.getBoundingClientRect();\n\ttooltip.style.left = `${guttersRect.right + 4}px`;\n\ttooltip.style.top = `${anchorRect.top}px`;\n}\n\nfunction hideErrorTooltip() {\n\terrorTooltipEl?.remove();\n\terrorTooltipEl = null;\n}\n\nconst issueLinesField = StateField.define<{\n\tgutterMarkers: RangeSet<GutterMarker>;\n\tlineDecorations: RangeSet<Decoration>;\n\tmessages: Map<number, string>;\n}>({\n\tcreate() {\n\t\treturn {\n\t\t\tgutterMarkers: RangeSet.empty,\n\t\t\tlineDecorations: Decoration.none,\n\t\t\tmessages: new Map(),\n\t\t};\n\t},\n\tupdate(state, tr) {\n\t\tfor (const effect of tr.effects) {\n\t\t\tif (effect.is(setIssueLinesEffect)) {\n\t\t\t\tconst markers: { from: number; to: number; value: GutterMarker }[] = [];\n\t\t\t\tconst lineDecos: {\n\t\t\t\t\tfrom: number;\n\t\t\t\t\tto: number;\n\t\t\t\t\tvalue: Decoration;\n\t\t\t\t}[] = [];\n\t\t\t\tconst messages = new Map<number, string>();\n\t\t\t\tconst doc = tr.state.doc;\n\n\t\t\t\tfor (const issue of effect.value) {\n\t\t\t\t\tif (issue.line >= 1 && issue.line <= doc.lines) {\n\t\t\t\t\t\tconst line = doc.line(issue.line);\n\t\t\t\t\t\tmarkers.push(errorLineMarker.range(line.from));\n\t\t\t\t\t\tlineDecos.push(errorLineDecoration.range(line.from));\n\t\t\t\t\t\tif (issue.message) {\n\t\t\t\t\t\t\tmessages.set(issue.line, issue.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: RangeSet.of(markers, true),\n\t\t\t\t\tlineDecorations: Decoration.set(lineDecos, true),\n\t\t\t\t\tmessages,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t},\n\tprovide(field) {\n\t\treturn [\n\t\t\tgutterLineClass.from(field, (val) => val.gutterMarkers),\n\t\t\tEditorView.decorations.from(field, (val) => val.lineDecorations),\n\t\t];\n\t},\n});\n\nconst errorTooltipHandler = EditorView.domEventHandlers({\n\tmouseover(event, view) {\n\t\tconst target = event.target as HTMLElement;\n\t\tconst gutterEl = target.closest(\n\t\t\t\".cm-lineNumbers .cm-gutterElement\",\n\t\t) as HTMLElement | null;\n\t\tif (!gutterEl) {\n\t\t\thideErrorTooltip();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lineNo = Number.parseInt(gutterEl.textContent ?? \"\", 10);\n\t\tif (Number.isNaN(lineNo)) {\n\t\t\thideErrorTooltip();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { messages } = view.state.field(issueLinesField);\n\t\tconst message = messages.get(lineNo);\n\t\tif (!message) {\n\t\t\thideErrorTooltip();\n\t\t\treturn false;\n\t\t}\n\n\t\tshowErrorTooltip(gutterEl, message);\n\t\treturn false;\n\t},\n\tmouseleave() {\n\t\thideErrorTooltip();\n\t\treturn false;\n\t},\n});\n\nconst baseTheme = EditorView.baseTheme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tpaddingLeft: \"16px\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0)\",\n\t},\n\t\".cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n\t\".cm-errorLine\": {\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n});\n\nconst readOnlyTheme = EditorView.theme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tpaddingLeft: \"16px\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0)\",\n\t},\n\t\".cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n\t\".cm-errorLine\": {\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n});\n\nconst iconButtonStyle: React.CSSProperties = {\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"28px\",\n\theight: \"28px\",\n\tborder: \"none\",\n\tborderRadius: \"var(--radius-sm)\",\n\tbackground: \"transparent\",\n\tcolor: \"var(--color-text-secondary)\",\n\tcursor: \"pointer\",\n\tpadding: 0,\n};\n\nfunction getMatchInfo(\n\tstate: EditorState,\n\tsearchText: string,\n): { current: number; total: number } {\n\tif (!searchText) return { current: 0, total: 0 };\n\tconst doc = state.doc.toString();\n\tconst sel = state.selection.main;\n\tconst lowerDoc = doc.toLowerCase();\n\tconst lowerSearch = searchText.toLowerCase();\n\tconst searchLen = searchText.length;\n\tlet total = 0;\n\tlet current = 0;\n\tlet pos = 0;\n\tfor (;;) {\n\t\tconst idx = lowerDoc.indexOf(lowerSearch, pos);\n\t\tif (idx === -1) break;\n\t\ttotal++;\n\t\tif (idx === sel.from && idx + searchLen === sel.to) {\n\t\t\tcurrent = total;\n\t\t}\n\t\tpos = idx + 1;\n\t}\n\treturn { current, total };\n}\n\nfunction createSearchPanel(view: EditorView) {\n\tconst dom = document.createElement(\"div\");\n\tconst root = createRoot(dom);\n\n\tconst panelRef: {\n\t\tsetSearch: ((v: string) => void) | null;\n\t\tsetMatch: ((info: { current: number; total: number }) => void) | null;\n\t\tlastSearch: string;\n\t\tlastCurrent: number;\n\t\tlastTotal: number;\n\t} = {\n\t\tsetSearch: null,\n\t\tsetMatch: null,\n\t\tlastSearch: \"\",\n\t\tlastCurrent: 0,\n\t\tlastTotal: 0,\n\t};\n\n\tfunction Panel() {\n\t\tconst [value, setValue] = React.useState(\n\t\t\t() => getSearchQuery(view.state).search,\n\t\t);\n\t\tconst [match, setMatchState] = React.useState({ current: 0, total: 0 });\n\n\t\tpanelRef.setSearch = setValue;\n\t\tpanelRef.setMatch = setMatchState;\n\n\t\tconst handleChange = (newValue: string) => {\n\t\t\tsetValue(newValue);\n\t\t\tview.dispatch({\n\t\t\t\teffects: setSearchQuery.of(new SearchQuery({ search: newValue })),\n\t\t\t});\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tgap: \"2px\",\n\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\t\tboxShadow: \"0 2px 8px rgba(0, 0, 0, 0.12)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => handleChange(e.target.value)}\n\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (e.shiftKey) findPrevious(view);\n\t\t\t\t\t\t\telse findNext(view);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (e.key === \"Escape\") {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tcloseSearchPanel(view);\n\t\t\t\t\t\t\tview.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tplaceholder=\"Find...\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"28px\",\n\t\t\t\t\t\tpadding: \"0 8px\",\n\t\t\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\t\t\t\tcolor: \"var(--color-text-primary)\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tflex: \"0 0 200px\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\t\t\tcolor: \"var(--color-text-secondary)\",\n\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\tminWidth: \"70px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tvisibility: value ? \"visible\" : \"hidden\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{value\n\t\t\t\t\t\t? match.total > 0\n\t\t\t\t\t\t\t? `${match.current} of ${match.total}`\n\t\t\t\t\t\t\t: \"No results\"\n\t\t\t\t\t\t: \"No results\"}\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => findPrevious(view)}\n\t\t\t\t\ttitle=\"Previous match\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<ChevronUp size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => findNext(view)}\n\t\t\t\t\ttitle=\"Next match\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tcloseSearchPanel(view);\n\t\t\t\t\t\tview.focus();\n\t\t\t\t\t}}\n\t\t\t\t\ttitle=\"Close\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<X size={14} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tflushSync(() => {\n\t\troot.render(<Panel />);\n\t});\n\n\tconst input = dom.querySelector(\"input\");\n\tif (input) input.setAttribute(\"main-field\", \"true\");\n\n\t// Compute initial match info\n\tconst q = getSearchQuery(view.state);\n\tpanelRef.lastSearch = q.search;\n\tif (q.search) {\n\t\tconst info = getMatchInfo(view.state, q.search);\n\t\tpanelRef.lastCurrent = info.current;\n\t\tpanelRef.lastTotal = info.total;\n\t\tpanelRef.setMatch?.(info);\n\t}\n\n\treturn {\n\t\tdom,\n\t\ttop: true,\n\t\tmount() {\n\t\t\tconst el = dom.querySelector(\"input\");\n\t\t\tif (el) {\n\t\t\t\tel.focus();\n\t\t\t\tel.select();\n\t\t\t}\n\t\t},\n\t\tupdate(update: ViewUpdate) {\n\t\t\tconst query = getSearchQuery(update.state);\n\n\t\t\tif (query.search !== panelRef.lastSearch) {\n\t\t\t\tpanelRef.setSearch?.(query.search);\n\t\t\t}\n\t\t\tpanelRef.lastSearch = query.search;\n\n\t\t\tconst info = getMatchInfo(update.state, query.search);\n\t\t\tif (\n\t\t\t\tinfo.current !== panelRef.lastCurrent ||\n\t\t\t\tinfo.total !== panelRef.lastTotal\n\t\t\t) {\n\t\t\t\tpanelRef.lastCurrent = info.current;\n\t\t\t\tpanelRef.lastTotal = info.total;\n\t\t\t\tpanelRef.setMatch?.(info);\n\t\t\t}\n\t\t},\n\t\tdestroy() {\n\t\t\troot.unmount();\n\t\t\tpanelRef.setSearch = null;\n\t\t\tpanelRef.setMatch = null;\n\t\t},\n\t};\n}\n\nconst searchPanelTheme = EditorView.baseTheme({\n\t\".cm-panels-top\": {\n\t\tposition: \"absolute\",\n\t\ttop: \"4px\",\n\t\tright: \"4px\",\n\t\tleft: \"auto\",\n\t\tzIndex: \"10\",\n\t\tbackgroundColor: \"transparent\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-searchMatch\": {\n\t\tbackgroundColor: \"#e9f2fc\",\n\t},\n\t\".cm-searchMatch-selected\": {\n\t\tbackgroundColor: \"#d0e2f8\",\n\t},\n});\n\nconst customSearchExtension = [\n\tsearch({ createPanel: createSearchPanel }),\n\tsearchPanelTheme,\n];\n\nconst customHighlightStyle = HighlightStyle.define([\n\t{ tag: tags.propertyName, color: \"#EA4A35\" },\n\t{ tag: tags.string, color: \"#405CBF\" },\n\t{ tag: tags.number, color: \"#00A984\" },\n\t{ tag: tags.bool, color: \"#569cd6\" },\n\t{ tag: tags.null, color: \"#569cd6\" },\n\t{ tag: tags.keyword, color: \"#569cd6\" },\n\t{ tag: tags.operatorKeyword, color: \"#405CBF\" },\n\t{ tag: tags.controlKeyword, color: \"#EA4A35\" },\n\t{ tag: tags.typeName, color: \"#00A984\" },\n\t{ tag: tags.variableName, color: \"#EA4A35\" },\n\t{ tag: tags.operator, color: \"#405CBF\" },\n\t{ tag: tags.comment, color: \"#00A984\" },\n\t{ tag: tags.lineComment, color: \"#00A984\" },\n\t{ tag: tags.blockComment, color: \"#00A984\" },\n]);\n\nconst SQL_KEYWORDS = [\n\t\"select\",\n\t\"from\",\n\t\"where\",\n\t\"and\",\n\t\"or\",\n\t\"not\",\n\t\"in\",\n\t\"between\",\n\t\"like\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"create\",\n\t\"drop\",\n\t\"alter\",\n\t\"table\",\n\t\"index\",\n\t\"join\",\n\t\"inner\",\n\t\"left\",\n\t\"right\",\n\t\"outer\",\n\t\"on\",\n\t\"as\",\n\t\"order\",\n\t\"by\",\n\t\"group\",\n\t\"having\",\n\t\"limit\",\n\t\"offset\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"distinct\",\n\t\"all\",\n\t\"exists\",\n\t\"case\",\n\t\"when\",\n\t\"then\",\n\t\"else\",\n\t\"end\",\n\t\"null\",\n\t\"true\",\n\t\"false\",\n\t\"is\",\n\t\"asc\",\n\t\"desc\",\n];\n\nconst SQL_BUILTIN = [\n\t\"varchar\",\n\t\"char\",\n\t\"text\",\n\t\"integer\",\n\t\"int\",\n\t\"bigint\",\n\t\"decimal\",\n\t\"numeric\",\n\t\"float\",\n\t\"real\",\n\t\"boolean\",\n\t\"date\",\n\t\"time\",\n\t\"timestamp\",\n\t\"uuid\",\n\t\"count\",\n\t\"sum\",\n\t\"avg\",\n\t\"min\",\n\t\"max\",\n\t\"coalesce\",\n\t\"concat\",\n\t\"substring\",\n\t\"upper\",\n\t\"lower\",\n\t\"trim\",\n\t\"length\",\n\t\"now\",\n\t\"current_date\",\n\t\"current_time\",\n];\n\nconst customSQLDialect = SQLDialect.define({\n\tkeywords: SQL_KEYWORDS.join(\" \"),\n\tbuiltin: SQL_BUILTIN.join(\" \"),\n});\n\ntype LanguageMode = \"json\" | \"http\" | \"sql\" | \"yaml\";\n\nfunction languageExtensions(mode: LanguageMode, sqlExtraBuiltins?: string[]) {\n\tif (mode === \"http\") {\n\t\tconst jsonLang = json();\n\t\tconst yamlLang = yaml();\n\t\treturn [\n\t\t\thttp((ct) =>\n\t\t\t\tct === \"application/json\"\n\t\t\t\t\t? jsonLang.language\n\t\t\t\t\t: ct === \"text/yaml\" ||\n\t\t\t\t\t\t\tct === \"application/yaml\" ||\n\t\t\t\t\t\t\tct === \"application/x-yaml\"\n\t\t\t\t\t\t? yamlLang.language\n\t\t\t\t\t\t: null,\n\t\t\t),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t];\n\t} else if (mode === \"sql\") {\n\t\tlet dialect = customSQLDialect;\n\t\tif (sqlExtraBuiltins && sqlExtraBuiltins.length > 0) {\n\t\t\tdialect = SQLDialect.define({\n\t\t\t\tkeywords: SQL_KEYWORDS.join(\" \"),\n\t\t\t\tbuiltin: [...SQL_BUILTIN, ...sqlExtraBuiltins].join(\" \"),\n\t\t\t});\n\t\t}\n\t\treturn [sql({ dialect }), syntaxHighlighting(customHighlightStyle)];\n\t} else if (mode === \"yaml\") {\n\t\treturn [yaml(), syntaxHighlighting(customHighlightStyle)];\n\t} else {\n\t\treturn [\n\t\t\tjson(),\n\t\t\tlinter(jsonParseLinter(), { delay: 300 }),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t];\n\t}\n}\n\ntype CodeEditorProps = {\n\treadOnly?: boolean;\n\tisReadOnlyTheme?: boolean;\n\tdefaultValue?: string;\n\tcurrentValue?: string;\n\tonChange?: (value: string) => void;\n\tonUpdate?: (update: ViewUpdate) => void;\n\tid?: string;\n\tmode?: LanguageMode;\n\tviewCallback?: (view: EditorView) => void;\n\tadditionalExtensions?: Extension[];\n\tissueLineNumbers?: { line: number; message?: string }[];\n\tfoldGutter?: boolean;\n\tlintGutter?: boolean;\n\tlineNumbers?: boolean;\n\tsqlExtraBuiltins?: string[];\n};\n\nexport type CodeEditorView = EditorView;\n\nexport function CodeEditor({\n\tdefaultValue,\n\tcurrentValue,\n\tonChange,\n\tonUpdate,\n\tviewCallback,\n\treadOnly = false,\n\tid,\n\tmode = \"json\",\n\tisReadOnlyTheme = false,\n\tadditionalExtensions,\n\tissueLineNumbers,\n\tfoldGutter: enableFoldGutter = true,\n\tlintGutter: enableLintGutter = true,\n\tlineNumbers: enableLineNumbers = true,\n\tsqlExtraBuiltins,\n}: CodeEditorProps) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\n\tconst initialValue = React.useRef(defaultValue ?? \"\");\n\n\tconst onChangeComparment = React.useRef(new Compartment());\n\tconst onUpdateComparment = React.useRef(new Compartment());\n\tconst languageCompartment = React.useRef(new Compartment());\n\tconst readOnlyCompartment = React.useRef(new Compartment());\n\tconst themeCompartment = React.useRef(new Compartment());\n\tconst additionalExtensionsCompartment = React.useRef(new Compartment());\n\n\tReact.useEffect(() => {\n\t\tif (!domRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: domRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: initialValue.current,\n\t\t\t\textensions: [\n\t\t\t\t\tEditorView.contentAttributes.of({ \"data-gramm\": \"false\" }),\n\t\t\t\t\treadOnlyCompartment.current.of(EditorState.readOnly.of(false)),\n\t\t\t\t\t...(enableLineNumbers ? [lineNumbers()] : []),\n\t\t\t\t\t...(enableFoldGutter ? [foldGutter()] : []),\n\t\t\t\t\thighlightSpecialChars(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tdrawSelection(),\n\t\t\t\t\tdropCursor(),\n\t\t\t\t\tEditorState.allowMultipleSelections.of(true),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\tlanguageCompartment.current.of([]),\n\t\t\t\t\tbracketMatching(),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\tautocompletion(),\n\t\t\t\t\trectangularSelection(),\n\t\t\t\t\tcrosshairCursor(),\n\t\t\t\t\thighlightActiveLine(),\n\t\t\t\t\thighlightActiveLineGutter(),\n\t\t\t\t\thighlightSelectionMatches(),\n\t\t\t\t\tthemeCompartment.current.of(baseTheme),\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t\t...(enableLintGutter ? [lintGutter()] : []),\n\t\t\t\t\tissueLinesField,\n\t\t\t\t\terrorTooltipHandler,\n\t\t\t\t\t...customSearchExtension,\n\t\t\t\t\tonChangeComparment.current.of([]),\n\t\t\t\t\tonUpdateComparment.current.of([]),\n\t\t\t\t\tadditionalExtensionsCompartment.current.of([]),\n\t\t\t\t],\n\t\t\t}),\n\t\t});\n\n\t\tsetView(() => view);\n\n\t\treturn () => {\n\t\t\tview.destroy();\n\t\t\tsetView(() => null);\n\t\t};\n\t}, [enableFoldGutter, enableLineNumbers, enableLintGutter]);\n\n\tReact.useEffect(() => {\n\t\tif (viewCallback && view) {\n\t\t\tviewCallback(view);\n\t\t}\n\t}, [view, viewCallback]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onChangeComparment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\tonChange(update.view.state.doc.toString());\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onChange]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onUpdateComparment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tonUpdate(update);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onUpdate]);\n\n\t// FIXME: it is probably better to have CM manage its state.\n\tReact.useEffect(() => {\n\t\tif (!view || currentValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== currentValue) {\n\t\t\tview.dispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: currentValue,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}, [currentValue, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: languageCompartment.current.reconfigure(\n\t\t\t\tlanguageExtensions(mode, sqlExtraBuiltins),\n\t\t\t),\n\t\t});\n\t}, [mode, view, sqlExtraBuiltins]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\treadOnlyCompartment.current.reconfigure(\n\t\t\t\t\tEditorState.readOnly.of(readOnly),\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [readOnly, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tthemeCompartment.current.reconfigure(\n\t\t\t\t\tisReadOnlyTheme ? readOnlyTheme : baseTheme,\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [isReadOnlyTheme, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tadditionalExtensionsCompartment.current.reconfigure(\n\t\t\t\t\tadditionalExtensions ?? [],\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [additionalExtensions, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: setIssueLinesEffect.of(issueLineNumbers ?? []),\n\t\t});\n\t}, [issueLineNumbers, view]);\n\n\treturn <div className=\"h-full w-full\" ref={domRef} id={id} />;\n}\n\nconst editorInputTheme = EditorView.theme({\n\t\".cm-content\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tfontWeight: \"var(--font-weight-normal)\",\n\t\theight: \"36px\",\n\t\tpadding: \"8px 12px 8px 12px\",\n\t\tfontSize: \"14px\",\n\t},\n\t\".cm-editor\": {\n\t\tfontSize: \"var(--font-size-sm)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\"&.cm-editor.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\"&.cm-editor.cm-focused .cm-content\": {\n\t\tborder: \"1px solid var(--color-border-link)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t},\n\t\".cm-line\": {\n\t\tpadding: \"0\",\n\t},\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul\": {\n\t\tmaxHeight: \"400px\",\n\t},\n\t\".cm-completionInfo\": {\n\t\tdisplay: \"none\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t},\n\t\".cm-completionLabel\": {\n\t\tcolor: \"var(--color-text-link)\",\n\t\tfontSize: \"14px\",\n\t},\n\t\".cm-completionDetail\": {\n\t\tdisplay: \"none\",\n\t},\n\t\".cm-completion-icon\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tflexShrink: \"0\",\n\t},\n});\n\nfunction getCompletionIcon(completion: Completion): React.FC | null {\n\tif (completion.type === \"function\") return SquareFunctionIcon;\n\tconst detail = completion.detail;\n\tif (!detail) return null;\n\tconst typeName = detail.replace(/\\[\\]$/, \"\");\n\tif (!typeName) return null;\n\tconst firstChar = typeName[0];\n\tif (!firstChar) return null;\n\tconst isComplex = firstChar === firstChar.toUpperCase();\n\treturn isComplex ? ComplexTypeIcon : TypCodeIcon;\n}\n\nfunction renderCompletionIcon(completion: Completion): Node {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"cm-completion-icon\";\n\tconst Icon = getCompletionIcon(completion);\n\tif (Icon) {\n\t\tflushSync(() => {\n\t\t\tcreateRoot(container).render(<Icon />);\n\t\t});\n\t}\n\treturn container;\n}\n\nlet activeTooltip: HTMLDivElement | null = null;\nlet activeRafId: number | null = null;\n\nfunction cleanupActiveTooltip() {\n\tactiveTooltip?.remove();\n\tactiveTooltip = null;\n\tif (activeRafId !== null) {\n\t\tcancelAnimationFrame(activeRafId);\n\t\tactiveRafId = null;\n\t}\n}\n\nfunction renderCompletionDetail(completion: Completion): Node | null {\n\tconst detail = completion.detail;\n\tif (!detail) return null;\n\n\tconst anchor = document.createElement(\"span\");\n\tanchor.style.display = \"none\";\n\n\tconst showTooltip = () => {\n\t\tcleanupActiveTooltip();\n\n\t\tconst tooltip = document.createElement(\"div\");\n\t\ttooltip.textContent = detail;\n\t\tObject.assign(tooltip.style, {\n\t\t\tposition: \"fixed\",\n\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\tpadding: \"8px 12px\",\n\t\t\tfontSize: \"12px\",\n\t\t\tlineHeight: \"1.4\",\n\t\t\tcolor: \"var(--color-text-secondary)\",\n\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\twhiteSpace: \"normal\",\n\t\t\twidth: \"280px\",\n\t\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\t\tzIndex: \"1000\",\n\t\t\tpointerEvents: \"none\",\n\t\t});\n\t\tdocument.body.appendChild(tooltip);\n\t\tactiveTooltip = tooltip;\n\n\t\tconst autocompleteEl = anchor.closest(\".cm-tooltip-autocomplete\");\n\t\tconst anchorRect = autocompleteEl\n\t\t\t? autocompleteEl.getBoundingClientRect()\n\t\t\t: anchor.getBoundingClientRect();\n\t\ttooltip.style.top = `${anchorRect.top}px`;\n\t\ttooltip.style.left = `${anchorRect.right + 8}px`;\n\n\t\tconst checkAlive = () => {\n\t\t\tif (!anchor.isConnected) {\n\t\t\t\tcleanupActiveTooltip();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tactiveRafId = requestAnimationFrame(checkAlive);\n\t\t};\n\t\tactiveRafId = requestAnimationFrame(checkAlive);\n\t};\n\n\trequestAnimationFrame(() => {\n\t\tconst option = anchor.closest(\"li\");\n\t\tif (!option) return;\n\t\toption.addEventListener(\"mouseenter\", showTooltip);\n\t\toption.addEventListener(\"mouseleave\", cleanupActiveTooltip);\n\t});\n\n\treturn anchor;\n}\n\nexport function EditorInput({\n\tadditionalExtensions,\n\tid,\n\tdefaultValue,\n\tcurrentValue,\n\tonChange,\n}: {\n\tadditionalExtensions?: Extension[];\n\tid: string;\n\tdefaultValue?: string;\n\tcurrentValue?: string;\n\tonChange?: (value: string) => void;\n}) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\tconst additionalExtensionsCompartment = React.useRef(new Compartment());\n\tconst onChangeCompartment = React.useRef(new Compartment());\n\tconst initialValue = React.useRef(defaultValue ?? \"\");\n\n\tReact.useEffect(() => {\n\t\tif (!domRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: domRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: initialValue.current,\n\t\t\t\textensions: [\n\t\t\t\t\tautocompletion({\n\t\t\t\t\t\ticons: false,\n\t\t\t\t\t\tmaxRenderedOptions: 1000,\n\t\t\t\t\t\tcloseOnBlur: false,\n\t\t\t\t\t\taddToOptions: [\n\t\t\t\t\t\t\t{ render: renderCompletionIcon, position: 20 },\n\t\t\t\t\t\t\t{ render: renderCompletionDetail, position: 80 },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptionClass: (_completion) =>\n\t\t\t\t\t\t\t\"!px-2 !py-1 rounded-md aria-selected:!bg-bg-quaternary aria-selected:!text-text-primary hover:!bg-bg-secondary grid grid-cols-[16px_1fr] items-center gap-2\",\n\t\t\t\t\t\ttooltipClass: (_state) =>\n\t\t\t\t\t\t\t\"!bg-bg-primary rounded-md p-2 shadow-md !border-border-primary !typo-body\",\n\t\t\t\t\t\tcompareCompletions: (a, b) => {\n\t\t\t\t\t\t\tconst aIsProperty = a.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\tconst bIsProperty = b.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\treturn aIsProperty - bIsProperty;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\teditorInputTheme,\n\t\t\t\t\tEditorView.contentAttributes.of({ \"data-gramm\": \"false\" }),\n\t\t\t\t\t...customSearchExtension,\n\t\t\t\t\tadditionalExtensionsCompartment.current.of([]),\n\t\t\t\t\tonChangeCompartment.current.of([]),\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t{ key: \"Tab\", preventDefault: true, run: acceptCompletion },\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t],\n\t\t\t}),\n\t\t});\n\n\t\tsetView(() => view);\n\n\t\treturn () => {\n\t\t\tview.destroy();\n\t\t\tsetView(() => null);\n\t\t};\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tadditionalExtensionsCompartment.current.reconfigure(\n\t\t\t\t\tadditionalExtensions ?? [],\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [additionalExtensions, view]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onChangeCompartment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\tonChange(update.view.state.doc.toString());\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onChange]);\n\n\tReact.useEffect(() => {\n\t\tif (!view || currentValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== currentValue) {\n\t\t\tview.dispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: currentValue,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}, [currentValue, view]);\n\n\treturn <div className=\"h-full w-full\" ref={domRef} id={id} />;\n}\n"],"names":["acceptCompletion","autocompletion","closeBrackets","closeBracketsKeymap","completionKeymap","defaultKeymap","history","historyKeymap","json","jsonParseLinter","SQLDialect","sql","yaml","bracketMatching","foldGutter","foldKeymap","HighlightStyle","indentOnInput","syntaxHighlighting","linter","lintGutter","lintKeymap","closeSearchPanel","findNext","findPrevious","getSearchQuery","highlightSelectionMatches","SearchQuery","search","searchKeymap","setSearchQuery","Compartment","EditorState","RangeSet","StateEffect","StateField","crosshairCursor","Decoration","drawSelection","dropCursor","EditorView","GutterMarker","gutterLineClass","highlightActiveLine","highlightActiveLineGutter","highlightSpecialChars","keymap","lineNumbers","rectangularSelection","tags","ChevronDown","ChevronUp","X","React","flushSync","createRoot","ComplexTypeIcon","SquareFunctionIcon","TypCodeIcon","http","ErrorLineGutterMarker","elementClass","errorLineMarker","errorLineDecoration","line","class","setIssueLinesEffect","define","errorTooltipEl","showErrorTooltip","anchor","message","hideErrorTooltip","tooltip","document","createElement","textContent","Object","assign","style","position","backgroundColor","border","borderRadius","padding","fontSize","lineHeight","color","fontFamily","boxShadow","zIndex","pointerEvents","maxWidth","whiteSpace","body","appendChild","guttersEl","closest","guttersRect","getBoundingClientRect","anchorRect","left","right","top","remove","issueLinesField","create","gutterMarkers","empty","lineDecorations","none","messages","Map","update","state","tr","effect","effects","is","markers","lineDecos","doc","issue","value","lines","push","range","from","set","of","provide","field","val","decorations","errorTooltipHandler","domEventHandlers","mouseover","event","view","target","gutterEl","lineNo","Number","parseInt","isNaN","get","mouseleave","baseTheme","height","width","paddingTop","paddingBottom","overflow","outline","paddingLeft","readOnlyTheme","theme","iconButtonStyle","display","alignItems","justifyContent","background","cursor","getMatchInfo","searchText","current","total","toString","sel","selection","main","lowerDoc","toLowerCase","lowerSearch","searchLen","length","pos","idx","indexOf","to","createSearchPanel","dom","root","panelRef","setSearch","setMatch","lastSearch","lastCurrent","lastTotal","Panel","setValue","useState","match","setMatchState","handleChange","newValue","dispatch","div","gap","input","onChange","e","onKeyDown","key","preventDefault","shiftKey","focus","placeholder","flex","span","minWidth","textAlign","visibility","button","type","onClick","title","size","render","querySelector","setAttribute","q","info","mount","el","select","query","destroy","unmount","searchPanelTheme","customSearchExtension","createPanel","customHighlightStyle","tag","propertyName","string","number","bool","null","keyword","operatorKeyword","controlKeyword","typeName","variableName","operator","comment","lineComment","blockComment","SQL_KEYWORDS","SQL_BUILTIN","customSQLDialect","keywords","join","builtin","languageExtensions","mode","sqlExtraBuiltins","jsonLang","yamlLang","ct","language","dialect","delay","CodeEditor","defaultValue","currentValue","onUpdate","viewCallback","readOnly","id","isReadOnlyTheme","additionalExtensions","issueLineNumbers","enableFoldGutter","enableLintGutter","enableLineNumbers","domRef","useRef","setView","initialValue","onChangeComparment","onUpdateComparment","languageCompartment","readOnlyCompartment","themeCompartment","additionalExtensionsCompartment","useEffect","parent","extensions","contentAttributes","allowMultipleSelections","reconfigure","updateListener","docChanged","undefined","currentDoc","changes","insert","className","ref","editorInputTheme","fontWeight","maxHeight","flexShrink","getCompletionIcon","completion","detail","replace","firstChar","isComplex","toUpperCase","renderCompletionIcon","container","Icon","activeTooltip","activeRafId","cleanupActiveTooltip","cancelAnimationFrame","renderCompletionDetail","showTooltip","autocompleteEl","checkAlive","isConnected","requestAnimationFrame","option","addEventListener","EditorInput","onChangeCompartment","icons","maxRenderedOptions","closeOnBlur","addToOptions","optionClass","_completion","tooltipClass","_state","compareCompletions","a","b","aIsProperty","bIsProperty","run"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/code-editor/index.tsx"],"sourcesContent":["import {\n\tacceptCompletion,\n\tautocompletion,\n\ttype Completion,\n\tcloseBrackets,\n\tcloseBracketsKeymap,\n\tcompletionKeymap,\n} from \"@codemirror/autocomplete\";\nimport { defaultKeymap, history, historyKeymap } from \"@codemirror/commands\";\nimport { json, jsonParseLinter } from \"@codemirror/lang-json\";\nimport { SQLDialect, sql } from \"@codemirror/lang-sql\";\nimport { yaml } from \"@codemirror/lang-yaml\";\nimport {\n\tbracketMatching,\n\tfoldGutter,\n\tfoldKeymap,\n\tHighlightStyle,\n\tindentOnInput,\n\tsyntaxHighlighting,\n} from \"@codemirror/language\";\nimport { linter, lintGutter, lintKeymap } from \"@codemirror/lint\";\nimport {\n\tcloseSearchPanel,\n\tfindNext,\n\tfindPrevious,\n\tgetSearchQuery,\n\thighlightSelectionMatches,\n\tSearchQuery,\n\tsearch,\n\tsearchKeymap,\n\tsetSearchQuery,\n} from \"@codemirror/search\";\nimport {\n\tCompartment,\n\tEditorState,\n\ttype Extension,\n\tRangeSet,\n\tStateEffect,\n\tStateField,\n} from \"@codemirror/state\";\nimport {\n\tcrosshairCursor,\n\tDecoration,\n\tdrawSelection,\n\tdropCursor,\n\tEditorView,\n\tGutterMarker,\n\tgutterLineClass,\n\thighlightActiveLine,\n\thighlightActiveLineGutter,\n\thighlightSpecialChars,\n\tkeymap,\n\tlineNumbers,\n\trectangularSelection,\n\ttype ViewUpdate,\n} from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\nimport { Braces, ChevronDown, ChevronUp, Terminal, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { ComplexTypeIcon, SquareFunctionIcon, TypCodeIcon } from \"../../icons\";\nimport { http } from \"./http\";\n\n// --- Issue lines: gutter highlighting, line background, hover tooltip ---\n\ntype IssueLine = { line: number; message?: string };\n\nclass ErrorLineGutterMarker extends GutterMarker {\n\telementClass = \"cm-errorLineGutter\";\n}\nconst errorLineMarker = new ErrorLineGutterMarker();\nconst errorLineDecoration = Decoration.line({ class: \"cm-errorLine\" });\n\nconst setIssueLinesEffect = StateEffect.define<IssueLine[]>();\n\nlet errorTooltipEl: HTMLDivElement | null = null;\n\nfunction showErrorTooltip(anchor: Element, message: string) {\n\thideErrorTooltip();\n\n\tconst tooltip = document.createElement(\"div\");\n\ttooltip.textContent = message;\n\tObject.assign(tooltip.style, {\n\t\tposition: \"fixed\",\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tpadding: \"6px 10px\",\n\t\tfontSize: \"12px\",\n\t\tlineHeight: \"1.4\",\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\tzIndex: \"1000\",\n\t\tpointerEvents: \"none\",\n\t\tmaxWidth: \"400px\",\n\t\twhiteSpace: \"pre-wrap\",\n\t});\n\tdocument.body.appendChild(tooltip);\n\terrorTooltipEl = tooltip;\n\n\tconst guttersEl = anchor.closest(\".cm-gutters\");\n\tconst guttersRect = guttersEl\n\t\t? guttersEl.getBoundingClientRect()\n\t\t: anchor.getBoundingClientRect();\n\tconst anchorRect = anchor.getBoundingClientRect();\n\ttooltip.style.left = `${guttersRect.right + 4}px`;\n\ttooltip.style.top = `${anchorRect.top}px`;\n}\n\nfunction hideErrorTooltip() {\n\terrorTooltipEl?.remove();\n\terrorTooltipEl = null;\n}\n\nconst issueLinesField = StateField.define<{\n\tgutterMarkers: RangeSet<GutterMarker>;\n\tlineDecorations: RangeSet<Decoration>;\n\tmessages: Map<number, string>;\n}>({\n\tcreate() {\n\t\treturn {\n\t\t\tgutterMarkers: RangeSet.empty,\n\t\t\tlineDecorations: Decoration.none,\n\t\t\tmessages: new Map(),\n\t\t};\n\t},\n\tupdate(state, tr) {\n\t\tfor (const effect of tr.effects) {\n\t\t\tif (effect.is(setIssueLinesEffect)) {\n\t\t\t\tconst markers: { from: number; to: number; value: GutterMarker }[] = [];\n\t\t\t\tconst lineDecos: {\n\t\t\t\t\tfrom: number;\n\t\t\t\t\tto: number;\n\t\t\t\t\tvalue: Decoration;\n\t\t\t\t}[] = [];\n\t\t\t\tconst messages = new Map<number, string>();\n\t\t\t\tconst doc = tr.state.doc;\n\n\t\t\t\tfor (const issue of effect.value) {\n\t\t\t\t\tif (issue.line >= 1 && issue.line <= doc.lines) {\n\t\t\t\t\t\tconst line = doc.line(issue.line);\n\t\t\t\t\t\tmarkers.push(errorLineMarker.range(line.from));\n\t\t\t\t\t\tlineDecos.push(errorLineDecoration.range(line.from));\n\t\t\t\t\t\tif (issue.message) {\n\t\t\t\t\t\t\tmessages.set(issue.line, issue.message);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: RangeSet.of(markers, true),\n\t\t\t\t\tlineDecorations: Decoration.set(lineDecos, true),\n\t\t\t\t\tmessages,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t},\n\tprovide(field) {\n\t\treturn [\n\t\t\tgutterLineClass.from(field, (val) => val.gutterMarkers),\n\t\t\tEditorView.decorations.from(field, (val) => val.lineDecorations),\n\t\t];\n\t},\n});\n\nconst errorTooltipHandler = EditorView.domEventHandlers({\n\tmouseover(event, view) {\n\t\tconst target = event.target as HTMLElement;\n\t\tconst gutterEl = target.closest(\n\t\t\t\".cm-lineNumbers .cm-gutterElement\",\n\t\t) as HTMLElement | null;\n\t\tif (!gutterEl) {\n\t\t\thideErrorTooltip();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst lineNo = Number.parseInt(gutterEl.textContent ?? \"\", 10);\n\t\tif (Number.isNaN(lineNo)) {\n\t\t\thideErrorTooltip();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { messages } = view.state.field(issueLinesField);\n\t\tconst message = messages.get(lineNo);\n\t\tif (!message) {\n\t\t\thideErrorTooltip();\n\t\t\treturn false;\n\t\t}\n\n\t\tshowErrorTooltip(gutterEl, message);\n\t\treturn false;\n\t},\n\tmouseleave() {\n\t\thideErrorTooltip();\n\t\treturn false;\n\t},\n});\n\nconst baseTheme = EditorView.theme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t},\n\t\"&.cm-editor\": {\n\t\tpaddingTop: \"0 !important\",\n\t\tpaddingBottom: \"0 !important\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-cursor, .cm-dropCursor\": {\n\t\tborderLeftColor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tpaddingLeft: \"16px\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0)\",\n\t},\n\t\".cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n\t\".cm-errorLine\": {\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n});\n\nconst completionTheme = EditorView.theme({\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul\": {\n\t\tmaxHeight: \"400px\",\n\t},\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul > li\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tgap: \"8px\",\n\t},\n\t\".cm-completionLabel\": {\n\t\tflex: \"1\",\n\t\tminWidth: \"0\",\n\t},\n\t\".cm-completionDetail\": {\n\t\tcolor: \"var(--color-text-tertiary)\",\n\t\tfontSize: \"12px\",\n\t\tmarginLeft: \"auto\",\n\t\twhiteSpace: \"nowrap\",\n\t},\n\t\".cm-completionInfo\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tcolor: \"var(--color-text-secondary)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tfontSize: \"12px\",\n\t\tpadding: \"8px 12px\",\n\t\tlineHeight: \"1.4\",\n\t\twhiteSpace: \"normal\",\n\t\tmaxWidth: \"300px\",\n\t},\n\t\".cm-completion-icon\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tflexShrink: \"0\",\n\t},\n});\n\nconst readOnlyTheme = EditorView.theme({\n\t\"&\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tfontSize: \"14px\",\n\t},\n\t\"&.cm-editor\": {\n\t\tpaddingTop: \"0 !important\",\n\t\tpaddingBottom: \"0 !important\",\n\t},\n\t\".cm-scroller\": {\n\t\toverflow: \"auto\",\n\t\tpaddingTop: \"8px\",\n\t\tpaddingBottom: \"8px\",\n\t},\n\t\".cm-content\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t\tpadding: \"0\",\n\t},\n\t\"&.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\".cm-gutter\": {\n\t\tfontFamily: \"var(--font-family-mono)\",\n\t},\n\t\".cm-gutters\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tpaddingLeft: \"16px\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0)\",\n\t},\n\t\".cm-errorLineGutter\": {\n\t\tcolor: \"var(--color-text-error-primary)\",\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n\t\".cm-errorLine\": {\n\t\tbackgroundColor:\n\t\t\t\"color-mix(in srgb, var(--color-text-error-primary) 7%, transparent)\",\n\t},\n});\n\nconst iconButtonStyle: React.CSSProperties = {\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\twidth: \"28px\",\n\theight: \"28px\",\n\tborder: \"none\",\n\tborderRadius: \"var(--radius-sm)\",\n\tbackground: \"transparent\",\n\tcolor: \"var(--color-text-secondary)\",\n\tcursor: \"pointer\",\n\tpadding: 0,\n};\n\nfunction getMatchInfo(\n\tstate: EditorState,\n\tsearchText: string,\n): { current: number; total: number } {\n\tif (!searchText) return { current: 0, total: 0 };\n\tconst doc = state.doc.toString();\n\tconst sel = state.selection.main;\n\tconst lowerDoc = doc.toLowerCase();\n\tconst lowerSearch = searchText.toLowerCase();\n\tconst searchLen = searchText.length;\n\tlet total = 0;\n\tlet current = 0;\n\tlet pos = 0;\n\tfor (;;) {\n\t\tconst idx = lowerDoc.indexOf(lowerSearch, pos);\n\t\tif (idx === -1) break;\n\t\ttotal++;\n\t\tif (idx === sel.from && idx + searchLen === sel.to) {\n\t\t\tcurrent = total;\n\t\t}\n\t\tpos = idx + 1;\n\t}\n\treturn { current, total };\n}\n\nfunction createSearchPanel(view: EditorView) {\n\tconst dom = document.createElement(\"div\");\n\tconst root = createRoot(dom);\n\n\tconst panelRef: {\n\t\tsetSearch: ((v: string) => void) | null;\n\t\tsetMatch: ((info: { current: number; total: number }) => void) | null;\n\t\tlastSearch: string;\n\t\tlastCurrent: number;\n\t\tlastTotal: number;\n\t} = {\n\t\tsetSearch: null,\n\t\tsetMatch: null,\n\t\tlastSearch: \"\",\n\t\tlastCurrent: 0,\n\t\tlastTotal: 0,\n\t};\n\n\tfunction Panel() {\n\t\tconst [value, setValue] = React.useState(\n\t\t\t() => getSearchQuery(view.state).search,\n\t\t);\n\t\tconst [match, setMatchState] = React.useState({ current: 0, total: 0 });\n\n\t\tpanelRef.setSearch = setValue;\n\t\tpanelRef.setMatch = setMatchState;\n\n\t\tconst handleChange = (newValue: string) => {\n\t\t\tsetValue(newValue);\n\t\t\tview.dispatch({\n\t\t\t\teffects: setSearchQuery.of(new SearchQuery({ search: newValue })),\n\t\t\t});\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tgap: \"2px\",\n\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\t\tboxShadow: \"0 2px 8px rgba(0, 0, 0, 0.12)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={(e) => handleChange(e.target.value)}\n\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (e.shiftKey) findPrevious(view);\n\t\t\t\t\t\t\telse findNext(view);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (e.key === \"Escape\") {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tcloseSearchPanel(view);\n\t\t\t\t\t\t\tview.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tplaceholder=\"Find...\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: \"28px\",\n\t\t\t\t\t\tpadding: \"0 8px\",\n\t\t\t\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\t\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\t\t\t\tcolor: \"var(--color-text-primary)\",\n\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\tflex: \"0 0 200px\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\t\t\t\tcolor: \"var(--color-text-secondary)\",\n\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\tminWidth: \"70px\",\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tvisibility: value ? \"visible\" : \"hidden\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{value\n\t\t\t\t\t\t? match.total > 0\n\t\t\t\t\t\t\t? `${match.current} of ${match.total}`\n\t\t\t\t\t\t\t: \"No results\"\n\t\t\t\t\t\t: \"No results\"}\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => findPrevious(view)}\n\t\t\t\t\ttitle=\"Previous match\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<ChevronUp size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => findNext(view)}\n\t\t\t\t\ttitle=\"Next match\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<ChevronDown size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tcloseSearchPanel(view);\n\t\t\t\t\t\tview.focus();\n\t\t\t\t\t}}\n\t\t\t\t\ttitle=\"Close\"\n\t\t\t\t\tstyle={iconButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<X size={14} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tflushSync(() => {\n\t\troot.render(<Panel />);\n\t});\n\n\tconst input = dom.querySelector(\"input\");\n\tif (input) input.setAttribute(\"main-field\", \"true\");\n\n\t// Compute initial match info\n\tconst q = getSearchQuery(view.state);\n\tpanelRef.lastSearch = q.search;\n\tif (q.search) {\n\t\tconst info = getMatchInfo(view.state, q.search);\n\t\tpanelRef.lastCurrent = info.current;\n\t\tpanelRef.lastTotal = info.total;\n\t\tpanelRef.setMatch?.(info);\n\t}\n\n\treturn {\n\t\tdom,\n\t\ttop: true,\n\t\tmount() {\n\t\t\tconst el = dom.querySelector(\"input\");\n\t\t\tif (el) {\n\t\t\t\tel.focus();\n\t\t\t\tel.select();\n\t\t\t}\n\t\t},\n\t\tupdate(update: ViewUpdate) {\n\t\t\tconst query = getSearchQuery(update.state);\n\n\t\t\tif (query.search !== panelRef.lastSearch) {\n\t\t\t\tpanelRef.setSearch?.(query.search);\n\t\t\t}\n\t\t\tpanelRef.lastSearch = query.search;\n\n\t\t\tconst info = getMatchInfo(update.state, query.search);\n\t\t\tif (\n\t\t\t\tinfo.current !== panelRef.lastCurrent ||\n\t\t\t\tinfo.total !== panelRef.lastTotal\n\t\t\t) {\n\t\t\t\tpanelRef.lastCurrent = info.current;\n\t\t\t\tpanelRef.lastTotal = info.total;\n\t\t\t\tpanelRef.setMatch?.(info);\n\t\t\t}\n\t\t},\n\t\tdestroy() {\n\t\t\troot.unmount();\n\t\t\tpanelRef.setSearch = null;\n\t\t\tpanelRef.setMatch = null;\n\t\t},\n\t};\n}\n\nconst searchPanelTheme = EditorView.baseTheme({\n\t\".cm-panels-top\": {\n\t\tposition: \"absolute\",\n\t\ttop: \"4px\",\n\t\tright: \"4px\",\n\t\tleft: \"auto\",\n\t\tzIndex: \"10\",\n\t\tbackgroundColor: \"transparent\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-searchMatch\": {\n\t\tbackgroundColor: \"#e9f2fc\",\n\t},\n\t\".cm-searchMatch-selected\": {\n\t\tbackgroundColor: \"#d0e2f8\",\n\t},\n});\n\nconst customSearchExtension = [\n\tsearch({ createPanel: createSearchPanel }),\n\tsearchPanelTheme,\n];\n\nconst customHighlightStyle = HighlightStyle.define([\n\t{ tag: tags.propertyName, color: \"var(--hs-syntax-property)\" },\n\t{ tag: tags.string, color: \"var(--hs-syntax-string)\" },\n\t{ tag: tags.number, color: \"var(--hs-syntax-number)\" },\n\t{ tag: tags.bool, color: \"var(--hs-syntax-keyword)\" },\n\t{ tag: tags.null, color: \"var(--hs-syntax-keyword)\" },\n\t{ tag: tags.keyword, color: \"var(--hs-syntax-keyword)\" },\n\t{ tag: tags.operatorKeyword, color: \"var(--hs-syntax-string)\" },\n\t{ tag: tags.controlKeyword, color: \"var(--hs-syntax-property)\" },\n\t{ tag: tags.typeName, color: \"var(--hs-syntax-number)\" },\n\t{ tag: tags.variableName, color: \"var(--hs-syntax-property)\" },\n\t{ tag: tags.operator, color: \"var(--hs-syntax-string)\" },\n\t{ tag: tags.comment, color: \"var(--hs-syntax-comment)\" },\n\t{ tag: tags.lineComment, color: \"var(--hs-syntax-comment)\" },\n\t{ tag: tags.blockComment, color: \"var(--hs-syntax-comment)\" },\n]);\n\nconst SQL_KEYWORDS = [\n\t\"select\",\n\t\"from\",\n\t\"where\",\n\t\"and\",\n\t\"or\",\n\t\"not\",\n\t\"in\",\n\t\"between\",\n\t\"like\",\n\t\"insert\",\n\t\"update\",\n\t\"delete\",\n\t\"create\",\n\t\"drop\",\n\t\"alter\",\n\t\"table\",\n\t\"index\",\n\t\"join\",\n\t\"inner\",\n\t\"left\",\n\t\"right\",\n\t\"outer\",\n\t\"on\",\n\t\"as\",\n\t\"order\",\n\t\"by\",\n\t\"group\",\n\t\"having\",\n\t\"limit\",\n\t\"offset\",\n\t\"union\",\n\t\"intersect\",\n\t\"except\",\n\t\"distinct\",\n\t\"all\",\n\t\"exists\",\n\t\"case\",\n\t\"when\",\n\t\"then\",\n\t\"else\",\n\t\"end\",\n\t\"null\",\n\t\"true\",\n\t\"false\",\n\t\"is\",\n\t\"asc\",\n\t\"desc\",\n];\n\nconst SQL_BUILTIN = [\n\t\"varchar\",\n\t\"char\",\n\t\"text\",\n\t\"integer\",\n\t\"int\",\n\t\"bigint\",\n\t\"decimal\",\n\t\"numeric\",\n\t\"float\",\n\t\"real\",\n\t\"boolean\",\n\t\"date\",\n\t\"time\",\n\t\"timestamp\",\n\t\"uuid\",\n\t\"count\",\n\t\"sum\",\n\t\"avg\",\n\t\"min\",\n\t\"max\",\n\t\"coalesce\",\n\t\"concat\",\n\t\"substring\",\n\t\"upper\",\n\t\"lower\",\n\t\"trim\",\n\t\"length\",\n\t\"now\",\n\t\"current_date\",\n\t\"current_time\",\n];\n\nconst customSQLDialect = SQLDialect.define({\n\tkeywords: SQL_KEYWORDS.join(\" \"),\n\tbuiltin: SQL_BUILTIN.join(\" \"),\n});\n\ntype LanguageMode = \"json\" | \"http\" | \"sql\" | \"yaml\";\n\nfunction languageExtensions(mode: LanguageMode, sqlExtraBuiltins?: string[]) {\n\tif (mode === \"http\") {\n\t\tconst jsonLang = json();\n\t\tconst yamlLang = yaml();\n\t\treturn [\n\t\t\thttp((ct) =>\n\t\t\t\tct === \"application/json\"\n\t\t\t\t\t? jsonLang.language\n\t\t\t\t\t: ct === \"text/yaml\" ||\n\t\t\t\t\t\t\tct === \"application/yaml\" ||\n\t\t\t\t\t\t\tct === \"application/x-yaml\"\n\t\t\t\t\t\t? yamlLang.language\n\t\t\t\t\t\t: null,\n\t\t\t),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t];\n\t} else if (mode === \"sql\") {\n\t\tlet dialect = customSQLDialect;\n\t\tif (sqlExtraBuiltins && sqlExtraBuiltins.length > 0) {\n\t\t\tdialect = SQLDialect.define({\n\t\t\t\tkeywords: SQL_KEYWORDS.join(\" \"),\n\t\t\t\tbuiltin: [...SQL_BUILTIN, ...sqlExtraBuiltins].join(\" \"),\n\t\t\t});\n\t\t}\n\t\treturn [sql({ dialect }), syntaxHighlighting(customHighlightStyle)];\n\t} else if (mode === \"yaml\") {\n\t\treturn [yaml(), syntaxHighlighting(customHighlightStyle)];\n\t} else {\n\t\treturn [\n\t\t\tjson(),\n\t\t\tlinter(jsonParseLinter(), { delay: 300 }),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t];\n\t}\n}\n\ntype CodeEditorProps = {\n\treadOnly?: boolean;\n\tisReadOnlyTheme?: boolean;\n\tdefaultValue?: string;\n\tcurrentValue?: string;\n\tonChange?: (value: string) => void;\n\tonUpdate?: (update: ViewUpdate) => void;\n\tid?: string;\n\tmode?: LanguageMode;\n\tviewCallback?: (view: EditorView) => void;\n\tadditionalExtensions?: Extension[];\n\tissueLineNumbers?: { line: number; message?: string }[];\n\tfoldGutter?: boolean;\n\tlintGutter?: boolean;\n\tlineNumbers?: boolean;\n\tsqlExtraBuiltins?: string[];\n};\n\nexport type CodeEditorView = EditorView;\n\nexport function CodeEditor({\n\tdefaultValue,\n\tcurrentValue,\n\tonChange,\n\tonUpdate,\n\tviewCallback,\n\treadOnly = false,\n\tid,\n\tmode = \"json\",\n\tisReadOnlyTheme = false,\n\tadditionalExtensions,\n\tissueLineNumbers,\n\tfoldGutter: enableFoldGutter = true,\n\tlintGutter: enableLintGutter = true,\n\tlineNumbers: enableLineNumbers = true,\n\tsqlExtraBuiltins,\n}: CodeEditorProps) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\n\tconst initialValue = React.useRef(defaultValue ?? \"\");\n\n\tconst onChangeComparment = React.useRef(new Compartment());\n\tconst onUpdateComparment = React.useRef(new Compartment());\n\tconst languageCompartment = React.useRef(new Compartment());\n\tconst readOnlyCompartment = React.useRef(new Compartment());\n\tconst themeCompartment = React.useRef(new Compartment());\n\tconst additionalExtensionsCompartment = React.useRef(new Compartment());\n\n\tReact.useEffect(() => {\n\t\tif (!domRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: domRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: initialValue.current,\n\t\t\t\textensions: [\n\t\t\t\t\tEditorView.contentAttributes.of({ \"data-gramm\": \"false\" }),\n\t\t\t\t\treadOnlyCompartment.current.of(EditorState.readOnly.of(false)),\n\t\t\t\t\t...(enableLineNumbers ? [lineNumbers()] : []),\n\t\t\t\t\t...(enableFoldGutter ? [foldGutter()] : []),\n\t\t\t\t\thighlightSpecialChars(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tdrawSelection(),\n\t\t\t\t\tdropCursor(),\n\t\t\t\t\tEditorState.allowMultipleSelections.of(true),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\tlanguageCompartment.current.of([]),\n\t\t\t\t\tbracketMatching(),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\tautocompletion({\n\t\t\t\t\t\ticons: false,\n\t\t\t\t\t\tmaxRenderedOptions: 1000,\n\t\t\t\t\t\taddToOptions: [{ render: renderCompletionIcon, position: 20 }],\n\t\t\t\t\t\toptionClass: (_completion) =>\n\t\t\t\t\t\t\t\"!px-2 !py-1 rounded-md aria-selected:!bg-bg-quaternary aria-selected:!text-text-primary hover:!bg-bg-secondary flex items-center gap-2\",\n\t\t\t\t\t\ttooltipClass: (_state) =>\n\t\t\t\t\t\t\t\"!bg-bg-primary rounded-md p-2 shadow-md !border-border-primary !typo-body\",\n\t\t\t\t\t\tcompareCompletions: (a, b) => {\n\t\t\t\t\t\t\tconst aIsProperty = a.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\tconst bIsProperty = b.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\treturn aIsProperty - bIsProperty;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\trectangularSelection(),\n\t\t\t\t\tcrosshairCursor(),\n\t\t\t\t\thighlightActiveLine(),\n\t\t\t\t\thighlightActiveLineGutter(),\n\t\t\t\t\thighlightSelectionMatches(),\n\t\t\t\t\tthemeCompartment.current.of(baseTheme),\n\t\t\t\t\tcompletionTheme,\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t\t...(enableLintGutter ? [lintGutter()] : []),\n\t\t\t\t\tissueLinesField,\n\t\t\t\t\terrorTooltipHandler,\n\t\t\t\t\t...customSearchExtension,\n\t\t\t\t\tonChangeComparment.current.of([]),\n\t\t\t\t\tonUpdateComparment.current.of([]),\n\t\t\t\t\tadditionalExtensionsCompartment.current.of([]),\n\t\t\t\t],\n\t\t\t}),\n\t\t});\n\n\t\tsetView(() => view);\n\n\t\treturn () => {\n\t\t\tview.destroy();\n\t\t\tsetView(() => null);\n\t\t};\n\t}, [enableFoldGutter, enableLineNumbers, enableLintGutter]);\n\n\tReact.useEffect(() => {\n\t\tif (viewCallback && view) {\n\t\t\tviewCallback(view);\n\t\t}\n\t}, [view, viewCallback]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onChangeComparment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\tonChange(update.view.state.doc.toString());\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onChange]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onUpdateComparment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (onUpdate) {\n\t\t\t\t\t\tonUpdate(update);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onUpdate]);\n\n\t// FIXME: it is probably better to have CM manage its state.\n\tReact.useEffect(() => {\n\t\tif (!view || currentValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== currentValue) {\n\t\t\tview.dispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: currentValue,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}, [currentValue, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: languageCompartment.current.reconfigure(\n\t\t\t\tlanguageExtensions(mode, sqlExtraBuiltins),\n\t\t\t),\n\t\t});\n\t}, [mode, view, sqlExtraBuiltins]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\treadOnlyCompartment.current.reconfigure(\n\t\t\t\t\tEditorState.readOnly.of(readOnly),\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [readOnly, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tthemeCompartment.current.reconfigure(\n\t\t\t\t\tisReadOnlyTheme ? readOnlyTheme : baseTheme,\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [isReadOnlyTheme, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tadditionalExtensionsCompartment.current.reconfigure(\n\t\t\t\t\tadditionalExtensions ?? [],\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [additionalExtensions, view]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: setIssueLinesEffect.of(issueLineNumbers ?? []),\n\t\t});\n\t}, [issueLineNumbers, view]);\n\n\treturn <div className=\"h-full w-full\" ref={domRef} id={id} />;\n}\n\nconst editorInputTheme = EditorView.theme({\n\t\".cm-content\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t\tfontWeight: \"var(--font-weight-normal)\",\n\t\theight: \"36px\",\n\t\tpadding: \"8px 12px 8px 12px\",\n\t\tfontSize: \"14px\",\n\t},\n\t\".cm-editor\": {\n\t\tfontSize: \"var(--font-size-sm)\",\n\t\tcolor: \"var(--color-text-primary)\",\n\t},\n\t\".cm-cursor, .cm-dropCursor\": {\n\t\tborderLeftColor: \"var(--color-text-primary)\",\n\t},\n\t\"&.cm-editor.cm-focused\": {\n\t\toutline: \"none\",\n\t},\n\t\"&.cm-editor.cm-focused .cm-content\": {\n\t\tborder: \"1px solid var(--color-border-link)\",\n\t\tborderRadius: \"var(--radius-md)\",\n\t},\n\t\".cm-line\": {\n\t\tpadding: \"0\",\n\t},\n\t\".cm-tooltip.cm-tooltip-autocomplete > ul\": {\n\t\tmaxHeight: \"400px\",\n\t},\n\t\".cm-completionInfo\": {\n\t\tdisplay: \"none\",\n\t\tfontFamily: \"var(--font-family-sans)\",\n\t},\n\t\".cm-completionLabel\": {\n\t\tcolor: \"var(--color-text-link)\",\n\t\tfontSize: \"14px\",\n\t},\n\t\".cm-completionDetail\": {\n\t\tdisplay: \"none\",\n\t},\n\t\".cm-completion-icon\": {\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\twidth: \"16px\",\n\t\theight: \"16px\",\n\t\tflexShrink: \"0\",\n\t},\n});\n\nconst KeywordIcon = () => <Terminal size={16} color=\"#717684\" />;\nconst OperatorIcon = () => <Braces size={16} color=\"#717684\" />;\n\nfunction getCompletionIcon(completion: Completion): React.FC | null {\n\tif (completion.type === \"function\") return SquareFunctionIcon;\n\tif (completion.type === \"keyword\") return KeywordIcon;\n\tif (completion.type === \"operator\") return OperatorIcon;\n\tconst detail = completion.detail;\n\tif (!detail) {\n\t\tif (completion.type === \"variable\") return SquareFunctionIcon;\n\t\treturn null;\n\t}\n\tconst typeName = detail.replace(/\\[\\]$/, \"\");\n\tif (!typeName) return null;\n\tconst firstChar = typeName[0];\n\tif (!firstChar) return null;\n\tconst isComplex = firstChar === firstChar.toUpperCase();\n\treturn isComplex ? ComplexTypeIcon : TypCodeIcon;\n}\n\nfunction renderCompletionIcon(completion: Completion): Node {\n\tconst container = document.createElement(\"div\");\n\tcontainer.className = \"cm-completion-icon\";\n\tconst Icon = getCompletionIcon(completion);\n\tif (Icon) {\n\t\tflushSync(() => {\n\t\t\tcreateRoot(container).render(<Icon />);\n\t\t});\n\t}\n\treturn container;\n}\n\nlet activeTooltip: HTMLDivElement | null = null;\nlet activeRafId: number | null = null;\n\nfunction cleanupActiveTooltip() {\n\tactiveTooltip?.remove();\n\tactiveTooltip = null;\n\tif (activeRafId !== null) {\n\t\tcancelAnimationFrame(activeRafId);\n\t\tactiveRafId = null;\n\t}\n}\n\nfunction renderCompletionDetail(completion: Completion): Node | null {\n\tconst detail = completion.detail;\n\tif (!detail) return null;\n\n\tconst anchor = document.createElement(\"span\");\n\tanchor.style.display = \"none\";\n\n\tconst showTooltip = () => {\n\t\tcleanupActiveTooltip();\n\n\t\tconst tooltip = document.createElement(\"div\");\n\t\ttooltip.textContent = detail;\n\t\tObject.assign(tooltip.style, {\n\t\t\tposition: \"fixed\",\n\t\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\t\tborder: \"1px solid var(--color-border-primary)\",\n\t\t\tborderRadius: \"var(--radius-md)\",\n\t\t\tpadding: \"8px 12px\",\n\t\t\tfontSize: \"12px\",\n\t\t\tlineHeight: \"1.4\",\n\t\t\tcolor: \"var(--color-text-secondary)\",\n\t\t\tfontFamily: \"var(--font-family-sans)\",\n\t\t\twhiteSpace: \"normal\",\n\t\t\twidth: \"280px\",\n\t\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\t\tzIndex: \"1000\",\n\t\t\tpointerEvents: \"none\",\n\t\t});\n\t\tdocument.body.appendChild(tooltip);\n\t\tactiveTooltip = tooltip;\n\n\t\tconst autocompleteEl = anchor.closest(\".cm-tooltip-autocomplete\");\n\t\tconst anchorRect = autocompleteEl\n\t\t\t? autocompleteEl.getBoundingClientRect()\n\t\t\t: anchor.getBoundingClientRect();\n\t\ttooltip.style.top = `${anchorRect.top}px`;\n\t\ttooltip.style.left = `${anchorRect.right + 8}px`;\n\n\t\tconst checkAlive = () => {\n\t\t\tif (!anchor.isConnected) {\n\t\t\t\tcleanupActiveTooltip();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tactiveRafId = requestAnimationFrame(checkAlive);\n\t\t};\n\t\tactiveRafId = requestAnimationFrame(checkAlive);\n\t};\n\n\trequestAnimationFrame(() => {\n\t\tconst option = anchor.closest(\"li\");\n\t\tif (!option) return;\n\t\toption.addEventListener(\"mouseenter\", showTooltip);\n\t\toption.addEventListener(\"mouseleave\", cleanupActiveTooltip);\n\t});\n\n\treturn anchor;\n}\n\nexport function EditorInput({\n\tadditionalExtensions,\n\tid,\n\tdefaultValue,\n\tcurrentValue,\n\tonChange,\n}: {\n\tadditionalExtensions?: Extension[];\n\tid: string;\n\tdefaultValue?: string;\n\tcurrentValue?: string;\n\tonChange?: (value: string) => void;\n}) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\tconst additionalExtensionsCompartment = React.useRef(new Compartment());\n\tconst onChangeCompartment = React.useRef(new Compartment());\n\tconst initialValue = React.useRef(defaultValue ?? \"\");\n\n\tReact.useEffect(() => {\n\t\tif (!domRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst view = new EditorView({\n\t\t\tparent: domRef.current,\n\t\t\tstate: EditorState.create({\n\t\t\t\tdoc: initialValue.current,\n\t\t\t\textensions: [\n\t\t\t\t\tautocompletion({\n\t\t\t\t\t\ticons: false,\n\t\t\t\t\t\tmaxRenderedOptions: 1000,\n\t\t\t\t\t\tcloseOnBlur: false,\n\t\t\t\t\t\taddToOptions: [\n\t\t\t\t\t\t\t{ render: renderCompletionIcon, position: 20 },\n\t\t\t\t\t\t\t{ render: renderCompletionDetail, position: 80 },\n\t\t\t\t\t\t],\n\t\t\t\t\t\toptionClass: (_completion) =>\n\t\t\t\t\t\t\t\"!px-2 !py-1 rounded-md aria-selected:!bg-bg-quaternary aria-selected:!text-text-primary hover:!bg-bg-secondary grid grid-cols-[16px_1fr] items-center gap-2\",\n\t\t\t\t\t\ttooltipClass: (_state) =>\n\t\t\t\t\t\t\t\"!bg-bg-primary rounded-md p-2 shadow-md !border-border-primary !typo-body\",\n\t\t\t\t\t\tcompareCompletions: (a, b) => {\n\t\t\t\t\t\t\tconst aIsProperty = a.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\tconst bIsProperty = b.type === \"property\" ? 0 : 1;\n\t\t\t\t\t\t\treturn aIsProperty - bIsProperty;\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t\tcloseBrackets(),\n\t\t\t\t\thistory(),\n\t\t\t\t\tindentOnInput(),\n\t\t\t\t\teditorInputTheme,\n\t\t\t\t\tEditorView.contentAttributes.of({ \"data-gramm\": \"false\" }),\n\t\t\t\t\t...customSearchExtension,\n\t\t\t\t\tadditionalExtensionsCompartment.current.of([]),\n\t\t\t\t\tonChangeCompartment.current.of([]),\n\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t{ key: \"Tab\", preventDefault: true, run: acceptCompletion },\n\t\t\t\t\t\t...closeBracketsKeymap,\n\t\t\t\t\t\t...defaultKeymap,\n\t\t\t\t\t\t...searchKeymap,\n\t\t\t\t\t\t...historyKeymap,\n\t\t\t\t\t\t...foldKeymap,\n\t\t\t\t\t\t...completionKeymap,\n\t\t\t\t\t\t...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t],\n\t\t\t}),\n\t\t});\n\n\t\tsetView(() => view);\n\n\t\treturn () => {\n\t\t\tview.destroy();\n\t\t\tsetView(() => null);\n\t\t};\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tview.dispatch({\n\t\t\teffects: [\n\t\t\t\tadditionalExtensionsCompartment.current.reconfigure(\n\t\t\t\t\tadditionalExtensions ?? [],\n\t\t\t\t),\n\t\t\t],\n\t\t});\n\t}, [additionalExtensions, view]);\n\n\tReact.useEffect(() => {\n\t\tview?.dispatch({\n\t\t\teffects: onChangeCompartment.current.reconfigure([\n\t\t\t\tEditorView.updateListener.of((update) => {\n\t\t\t\t\tif (update.docChanged && onChange) {\n\t\t\t\t\t\tonChange(update.view.state.doc.toString());\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t]),\n\t\t});\n\t}, [view, onChange]);\n\n\tReact.useEffect(() => {\n\t\tif (!view || currentValue === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== currentValue) {\n\t\t\tview.dispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: currentValue,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}, [currentValue, view]);\n\n\treturn <div className=\"h-full w-full\" ref={domRef} id={id} />;\n}\n"],"names":["acceptCompletion","autocompletion","closeBrackets","closeBracketsKeymap","completionKeymap","defaultKeymap","history","historyKeymap","json","jsonParseLinter","SQLDialect","sql","yaml","bracketMatching","foldGutter","foldKeymap","HighlightStyle","indentOnInput","syntaxHighlighting","linter","lintGutter","lintKeymap","closeSearchPanel","findNext","findPrevious","getSearchQuery","highlightSelectionMatches","SearchQuery","search","searchKeymap","setSearchQuery","Compartment","EditorState","RangeSet","StateEffect","StateField","crosshairCursor","Decoration","drawSelection","dropCursor","EditorView","GutterMarker","gutterLineClass","highlightActiveLine","highlightActiveLineGutter","highlightSpecialChars","keymap","lineNumbers","rectangularSelection","tags","Braces","ChevronDown","ChevronUp","Terminal","X","React","flushSync","createRoot","ComplexTypeIcon","SquareFunctionIcon","TypCodeIcon","http","ErrorLineGutterMarker","elementClass","errorLineMarker","errorLineDecoration","line","class","setIssueLinesEffect","define","errorTooltipEl","showErrorTooltip","anchor","message","hideErrorTooltip","tooltip","document","createElement","textContent","Object","assign","style","position","backgroundColor","border","borderRadius","padding","fontSize","lineHeight","color","fontFamily","boxShadow","zIndex","pointerEvents","maxWidth","whiteSpace","body","appendChild","guttersEl","closest","guttersRect","getBoundingClientRect","anchorRect","left","right","top","remove","issueLinesField","create","gutterMarkers","empty","lineDecorations","none","messages","Map","update","state","tr","effect","effects","is","markers","lineDecos","doc","issue","value","lines","push","range","from","set","of","provide","field","val","decorations","errorTooltipHandler","domEventHandlers","mouseover","event","view","target","gutterEl","lineNo","Number","parseInt","isNaN","get","mouseleave","baseTheme","theme","height","width","paddingTop","paddingBottom","overflow","outline","borderLeftColor","paddingLeft","completionTheme","maxHeight","display","alignItems","gap","flex","minWidth","marginLeft","justifyContent","flexShrink","readOnlyTheme","iconButtonStyle","background","cursor","getMatchInfo","searchText","current","total","toString","sel","selection","main","lowerDoc","toLowerCase","lowerSearch","searchLen","length","pos","idx","indexOf","to","createSearchPanel","dom","root","panelRef","setSearch","setMatch","lastSearch","lastCurrent","lastTotal","Panel","setValue","useState","match","setMatchState","handleChange","newValue","dispatch","div","input","onChange","e","onKeyDown","key","preventDefault","shiftKey","focus","placeholder","span","textAlign","visibility","button","type","onClick","title","size","render","querySelector","setAttribute","q","info","mount","el","select","query","destroy","unmount","searchPanelTheme","customSearchExtension","createPanel","customHighlightStyle","tag","propertyName","string","number","bool","null","keyword","operatorKeyword","controlKeyword","typeName","variableName","operator","comment","lineComment","blockComment","SQL_KEYWORDS","SQL_BUILTIN","customSQLDialect","keywords","join","builtin","languageExtensions","mode","sqlExtraBuiltins","jsonLang","yamlLang","ct","language","dialect","delay","CodeEditor","defaultValue","currentValue","onUpdate","viewCallback","readOnly","id","isReadOnlyTheme","additionalExtensions","issueLineNumbers","enableFoldGutter","enableLintGutter","enableLineNumbers","domRef","useRef","setView","initialValue","onChangeComparment","onUpdateComparment","languageCompartment","readOnlyCompartment","themeCompartment","additionalExtensionsCompartment","useEffect","parent","extensions","contentAttributes","allowMultipleSelections","icons","maxRenderedOptions","addToOptions","renderCompletionIcon","optionClass","_completion","tooltipClass","_state","compareCompletions","a","b","aIsProperty","bIsProperty","reconfigure","updateListener","docChanged","undefined","currentDoc","changes","insert","className","ref","editorInputTheme","fontWeight","KeywordIcon","OperatorIcon","getCompletionIcon","completion","detail","replace","firstChar","isComplex","toUpperCase","container","Icon","activeTooltip","activeRafId","cleanupActiveTooltip","cancelAnimationFrame","renderCompletionDetail","showTooltip","autocompleteEl","checkAlive","isConnected","requestAnimationFrame","option","addEventListener","EditorInput","onChangeCompartment","closeOnBlur","run"],"mappings":"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"}
@@ -183,13 +183,13 @@ function FhirStructureView({ tree }) {
183
183
  tree
184
184
  ]);
185
185
  return /*#__PURE__*/ _jsxs("div", {
186
- className: "h-fit w-fit min-h-0 min-w-0",
186
+ className: "min-h-0 min-w-0",
187
187
  children: [
188
188
  /*#__PURE__*/ _jsxs("div", {
189
- className: "flex items-center gap-2 font-semibold text-xs text-text-secondary border-b py-2 bg-bg-primary sticky top-0 z-20",
189
+ className: "flex items-center gap-2 font-semibold text-xs text-text-secondary border-b py-2 pl-[34px] bg-bg-primary sticky top-0 z-20",
190
190
  children: [
191
191
  /*#__PURE__*/ _jsx("div", {
192
- className: "min-w-[260px] w-[260px] ml-4",
192
+ className: "min-w-[260px] w-[260px]",
193
193
  children: "Name"
194
194
  }),
195
195
  /*#__PURE__*/ _jsx("div", {
@@ -205,7 +205,7 @@ function FhirStructureView({ tree }) {
205
205
  children: "Type"
206
206
  }),
207
207
  /*#__PURE__*/ _jsx("div", {
208
- className: "min-w-[200px] w-[200px]",
208
+ className: "flex-1",
209
209
  children: "Description"
210
210
  })
211
211
  ]