@health-samurai/react-components 0.0.0-alpha.18 → 0.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bundle.css +51 -33
  3. package/dist/src/components/code-editor/fhir-autocomplete.d.ts +70 -0
  4. package/dist/src/components/code-editor/fhir-autocomplete.d.ts.map +1 -0
  5. package/dist/src/components/code-editor/fhir-autocomplete.js +1849 -0
  6. package/dist/src/components/code-editor/fhir-autocomplete.js.map +1 -0
  7. package/dist/src/components/code-editor/fhir-autocomplete.test.js +1099 -0
  8. package/dist/src/components/code-editor/fhir-autocomplete.test.js.map +1 -0
  9. package/dist/src/components/code-editor/http/index.d.ts +9 -1
  10. package/dist/src/components/code-editor/http/index.d.ts.map +1 -1
  11. package/dist/src/components/code-editor/http/index.js +423 -3
  12. package/dist/src/components/code-editor/http/index.js.map +1 -1
  13. package/dist/src/components/code-editor/index.d.ts +13 -4
  14. package/dist/src/components/code-editor/index.d.ts.map +1 -1
  15. package/dist/src/components/code-editor/index.js +505 -96
  16. package/dist/src/components/code-editor/index.js.map +1 -1
  17. package/dist/src/components/code-editor/json-ast.d.ts +46 -0
  18. package/dist/src/components/code-editor/json-ast.d.ts.map +1 -0
  19. package/dist/src/components/code-editor/json-ast.js +465 -0
  20. package/dist/src/components/code-editor/json-ast.js.map +1 -0
  21. package/dist/src/components/code-editor/json-ast.test.js +206 -0
  22. package/dist/src/components/code-editor/json-ast.test.js.map +1 -0
  23. package/dist/src/components/code-editor/sql-completion.d.ts +22 -0
  24. package/dist/src/components/code-editor/sql-completion.d.ts.map +1 -0
  25. package/dist/src/components/code-editor/sql-completion.js +895 -0
  26. package/dist/src/components/code-editor/sql-completion.js.map +1 -0
  27. package/dist/src/components/date-picker-input.d.ts +10 -0
  28. package/dist/src/components/date-picker-input.d.ts.map +1 -0
  29. package/dist/src/components/date-picker-input.js +90 -0
  30. package/dist/src/components/date-picker-input.js.map +1 -0
  31. package/dist/src/components/date-picker-input.stories.js +76 -0
  32. package/dist/src/components/date-picker-input.stories.js.map +1 -0
  33. package/dist/src/index.d.ts +1 -0
  34. package/dist/src/index.d.ts.map +1 -1
  35. package/dist/src/index.js +1 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/shadcn/components/ui/alert-dialog.d.ts +1 -1
  38. package/dist/src/shadcn/components/ui/calendar.d.ts +1 -1
  39. package/dist/src/shadcn/components/ui/carousel.d.ts +1 -1
  40. package/dist/src/shadcn/components/ui/chart.d.ts +3 -3
  41. package/dist/src/shadcn/components/ui/chart.d.ts.map +1 -1
  42. package/dist/src/shadcn/components/ui/chart.js +1 -1
  43. package/dist/src/shadcn/components/ui/chart.js.map +1 -1
  44. package/dist/src/shadcn/components/ui/command.d.ts +1 -1
  45. package/dist/src/shadcn/components/ui/pagination.d.ts +1 -1
  46. package/dist/src/shadcn/components/ui/resizable.stories.js +2 -2
  47. package/dist/src/shadcn/components/ui/resizable.stories.js.map +1 -1
  48. package/dist/src/shadcn/components/ui/sidebar.d.ts +4 -4
  49. package/dist/src/shadcn/components/ui/tabs.d.ts +3 -1
  50. package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
  51. package/dist/src/shadcn/components/ui/tabs.js +129 -2
  52. package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
  53. package/dist/src/shadcn/components/ui/tabs.stories.js +1 -1
  54. package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
  55. package/dist/src/shadcn/components/ui/toggle-group.d.ts +1 -1
  56. package/dist/src/typography.css +1 -1
  57. package/package.json +24 -19
  58. package/src/components/code-editor/fhir-autocomplete.test.ts +993 -0
  59. package/src/components/code-editor/fhir-autocomplete.ts +2321 -0
  60. package/src/components/code-editor/http/index.ts +339 -2
  61. package/src/components/code-editor/index.tsx +593 -102
  62. package/src/components/code-editor/json-ast.test.ts +230 -0
  63. package/src/components/code-editor/json-ast.ts +590 -0
  64. package/src/components/code-editor/sql-completion.ts +1105 -0
  65. package/src/components/date-picker-input.stories.tsx +79 -0
  66. package/src/components/date-picker-input.tsx +104 -0
  67. package/src/index.tsx +1 -0
  68. package/src/shadcn/components/ui/chart.tsx +6 -3
  69. package/src/shadcn/components/ui/resizable.stories.tsx +2 -2
  70. package/src/shadcn/components/ui/tabs.stories.tsx +1 -1
  71. package/src/shadcn/components/ui/tabs.tsx +160 -2
  72. package/src/typography.css +1 -1
  73. package/dist/src/components/code-editor/http/grammar/http.test.d.ts +0 -2
  74. package/dist/src/components/code-editor/http/grammar/http.test.d.ts.map +0 -1
@@ -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 { 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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"}
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\tcompletionStatus,\n\tmoveCompletionSelection,\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\tsyntaxTree,\n} from \"@codemirror/language\";\nimport { linter, 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\tPrec,\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\thighlightSpecialChars,\n\tkeymap,\n\tlineNumbers,\n\trectangularSelection,\n\ttype ViewUpdate,\n} from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\nimport { vim } from \"@replit/codemirror-vim\";\nimport {\n\tChevronDown,\n\tChevronsRight,\n\tChevronUp,\n\tHeading,\n\tTable2,\n\tTerminal,\n\tX,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { createRoot } from \"react-dom/client\";\nimport {\n\tComplexTypeIcon,\n\tResourceIcon,\n\tSquareFunctionIcon,\n\tTypCodeIcon,\n} from \"../../icons\";\nimport {\n\tbuildFhirCompletionExtension,\n\ttype ExpandValueSet,\n\tfhirDiagnosticsField,\n\ttype GetStructureDefinitions,\n} from \"./fhir-autocomplete\";\nimport { type GetUrlSuggestions, http } from \"./http\";\nimport {\n\tbuildSqlCompletionExtensions,\n\tfetchSqlMetadata,\n\ttype SqlConfig,\n} from \"./sql-completion\";\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 formatErrorTypeTitle(code: string): string {\n\treturn code\n\t\t.split(\"-\")\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n\nfunction renderErrorCard(msg: string): HTMLElement {\n\tconst card = document.createElement(\"div\");\n\tObject.assign(card.style, {\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\tboxShadow: \"0 2px 6px rgba(0, 0, 0, 0.08)\",\n\t});\n\tconst newlineIdx = msg.indexOf(\"\\n\");\n\tif (newlineIdx !== -1) {\n\t\tconst title = msg.slice(0, newlineIdx);\n\t\tconst body = msg.slice(newlineIdx + 1);\n\n\t\tconst titleEl = document.createElement(\"div\");\n\t\ttitleEl.textContent = formatErrorTypeTitle(title);\n\t\tObject.assign(titleEl.style, { fontWeight: \"600\" });\n\n\t\tconst hr = document.createElement(\"div\");\n\t\tObject.assign(hr.style, {\n\t\t\tborderTop: \"1px solid var(--color-border-primary)\",\n\t\t\tmargin: \"4px 0\",\n\t\t});\n\n\t\tconst bodyEl = document.createElement(\"div\");\n\t\tbodyEl.textContent = body;\n\t\tObject.assign(bodyEl.style, { whiteSpace: \"pre-wrap\" });\n\n\t\tcard.append(titleEl, hr, bodyEl);\n\t} else {\n\t\tcard.textContent = msg;\n\t\tcard.style.whiteSpace = \"pre-wrap\";\n\t}\n\treturn card;\n}\n\nfunction showErrorTooltip(message: string, x: number, y: number) {\n\thideErrorTooltip();\n\n\tconst tooltip = document.createElement(\"div\");\n\tObject.assign(tooltip.style, {\n\t\tposition: \"fixed\",\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\tzIndex: \"1000\",\n\t\tpointerEvents: \"none\",\n\t\tmaxWidth: \"400px\",\n\t\tdisplay: \"flex\",\n\t\tflexDirection: \"column\",\n\t\tgap: \"6px\",\n\t});\n\n\tconst parts = message.split(\"\\n\\x00\\n\");\n\tfor (const part of parts) {\n\t\ttooltip.append(renderErrorCard(part ?? \"\"));\n\t}\n\n\tdocument.body.appendChild(tooltip);\n\terrorTooltipEl = tooltip;\n\n\tconst tooltipRect = tooltip.getBoundingClientRect();\n\tlet top = y - tooltipRect.height - 8;\n\t// If tooltip goes above viewport, show below cursor instead\n\tif (top < 4) {\n\t\ttop = y + 20;\n\t}\n\t// If it still goes below viewport, clamp to bottom\n\tif (top + tooltipRect.height > window.innerHeight - 4) {\n\t\ttop = window.innerHeight - tooltipRect.height - 4;\n\t}\n\t// Final clamp to top\n\tif (top < 4) top = 4;\n\ttooltip.style.left = `${x}px`;\n\ttooltip.style.top = `${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\tif (tr.docChanged) {\n\t\t\ttry {\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: state.gutterMarkers.map(tr.changes),\n\t\t\t\t\tlineDecorations: state.lineDecorations.map(tr.changes),\n\t\t\t\t\tmessages: state.messages,\n\t\t\t\t};\n\t\t\t} catch {\n\t\t\t\treturn {\n\t\t\t\t\tgutterMarkers: RangeSet.empty,\n\t\t\t\t\tlineDecorations: Decoration.none,\n\t\t\t\t\tmessages: new Map(),\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\nfunction getErrorMessageForLine(\n\tview: EditorView,\n\tlineNo: number,\n): string | undefined {\n\tconst issueMsg = view.state.field(issueLinesField).messages.get(lineNo);\n\tif (issueMsg) return issueMsg;\n\ttry {\n\t\treturn view.state.field(fhirDiagnosticsField).messages.get(lineNo);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction handleErrorTooltipMove(event: Event, view: EditorView) {\n\tconst target = event.target as HTMLElement;\n\tconst mouseEvent = event as MouseEvent;\n\n\t// Check gutter line number\n\tconst gutterEl = target.closest(\n\t\t\".cm-lineNumbers .cm-gutterElement\",\n\t) as HTMLElement | null;\n\tif (gutterEl) {\n\t\tconst lineNo = Number.parseInt(gutterEl.textContent ?? \"\", 10);\n\t\tif (!Number.isNaN(lineNo)) {\n\t\t\tconst message = getErrorMessageForLine(view, lineNo);\n\t\t\tif (message) {\n\t\t\t\tshowErrorTooltip(message, mouseEvent.clientX, mouseEvent.clientY);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\thideErrorTooltip();\n\t\treturn false;\n\t}\n\n\t// Check content line (cm-line) — follow cursor\n\tconst lineEl = target.closest(\".cm-line\") as HTMLElement | null;\n\tif (lineEl) {\n\t\tconst pos = view.posAtDOM(lineEl);\n\t\tconst lineNo = view.state.doc.lineAt(pos).number;\n\t\tconst message = getErrorMessageForLine(view, lineNo);\n\t\tif (message) {\n\t\t\tshowErrorTooltip(message, mouseEvent.clientX, mouseEvent.clientY);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\thideErrorTooltip();\n\treturn false;\n}\n\nconst errorTooltipHandler = EditorView.domEventHandlers({\n\tmouseover: handleErrorTooltipMove,\n\tmousemove: handleErrorTooltipMove,\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: \"transparent\",\n\t\tborder: \"none\",\n\t},\n\t\".cm-lineNumbers\": {\n\t\tminWidth: \"3.5ch\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\tminWidth: \"3.5ch\",\n\t\tpaddingRight: \"4px\",\n\t\tcolor: \"var(--color-text-quaternary)\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-primary)\",\n\t\tcolor: \"var(--color-text-secondary)\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.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-foldGutter .cm-gutterElement.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\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\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\tfontFamily: \"var(--font-family-mono)\",\n\t\tfontSize: \"var(--font-size-sm)\",\n\t\tlineHeight: \"var(--font-leading-5)\",\n\t},\n\t\".cm-completionMatchedText\": {\n\t\ttextDecoration: \"none\",\n\t\tfontWeight: \"600\",\n\t\tcolor: \"var(--color-text-link)\",\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-mono)\",\n\t\tfontSize: \"14px\",\n\t\tpadding: \"8px 12px\",\n\t\tmarginLeft: \"8px\",\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\tminWidth: \"3.5ch\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\tminWidth: \"3.5ch\",\n\t\tpaddingRight: \"4px\",\n\t\tcolor: \"var(--color-text-quaternary)\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.cm-activeLineGutter\": {\n\t\tbackgroundColor: \"var(--color-bg-secondary)\",\n\t\tcolor: \"var(--color-text-secondary)\",\n\t},\n\t\".cm-activeLineGutter\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-activeLine\": {\n\t\tbackgroundColor: \"transparent !important\",\n\t},\n\t\".cm-lineNumbers .cm-gutterElement.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-foldGutter .cm-gutterElement.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\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\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\tmarginTop: \"4px\",\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.theme({\n\t\"& .cm-panels-top\": {\n\t\tposition: \"absolute\",\n\t\ttop: \"8px\",\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: \"var(--color-blue-200) !important\",\n\t},\n\t\".cm-searchMatch-selected\": {\n\t\tbackgroundColor: \"var(--color-blue-400) !important\",\n\t},\n\t\".cm-selectionMatch\": {\n\t\tbackgroundColor: \"var(--color-blue-100) !important\",\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\nfunction computeYamlNewlineIndent(lineText: string): string {\n\tconst indent = lineText.match(/^(\\s*)/)?.[1] ?? \"\";\n\tconst trimmed = lineText.trimEnd();\n\n\tif (trimmed.endsWith(\":\")) {\n\t\t// After \"key:\" with no value — increase indent\n\t\t// For \" - key:\", base indent is at the dash content level\n\t\tconst dashMatch = trimmed.match(/^(\\s*-\\s+)/);\n\t\tconst baseIndent = dashMatch?.[1]\n\t\t\t? \" \".repeat(dashMatch[1].length)\n\t\t\t: indent;\n\t\treturn `${baseIndent} `;\n\t}\n\tif (/^\\s*-\\s*$/.test(trimmed)) {\n\t\t// After bare \"- \" (array item marker only) — align to content after dash\n\t\tconst dashMatch = trimmed.match(/^(\\s*-\\s*)/);\n\t\treturn dashMatch?.[1] ? \" \".repeat(dashMatch[1].length) : indent;\n\t}\n\t// Preserve current indent; for \" - key: val\" align to key level\n\tconst dashKeyMatch = trimmed.match(/^(\\s*-\\s+)\\S/);\n\treturn dashKeyMatch?.[1] ? \" \".repeat(dashKeyMatch[1].length) : indent;\n}\n\nfunction yamlEnterKeymap(): Extension {\n\treturn keymap.of([\n\t\t{\n\t\t\tkey: \"Enter\",\n\t\t\trun: (view) => {\n\t\t\t\tconst { state } = view;\n\t\t\t\tconst pos = state.selection.main.head;\n\t\t\t\tconst line = state.doc.lineAt(pos);\n\t\t\t\tconst newIndent = computeYamlNewlineIndent(line.text);\n\n\t\t\t\tview.dispatch({\n\t\t\t\t\tchanges: { from: pos, insert: `\\n${newIndent}` },\n\t\t\t\t\tselection: { anchor: pos + 1 + newIndent.length },\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t},\n\t]);\n}\n\nfunction httpYamlEnterKeymap(): Extension {\n\treturn keymap.of([\n\t\t{\n\t\t\tkey: \"Enter\",\n\t\t\trun: (view) => {\n\t\t\t\tconst { state } = view;\n\t\t\t\tconst pos = state.selection.main.head;\n\t\t\t\tconst doc = state.doc.toString();\n\n\t\t\t\t// Only handle if cursor is in YAML body (after blank line separator)\n\t\t\t\tconst textBeforeCursor = doc.slice(0, pos);\n\t\t\t\tconst blankLineIdx = textBeforeCursor.indexOf(\"\\n\\n\");\n\t\t\t\tif (blankLineIdx === -1 || pos <= blankLineIdx + 1) return false;\n\n\t\t\t\t// Check if the body looks like YAML (not JSON)\n\t\t\t\tconst bodyStart = blankLineIdx + 2;\n\t\t\t\tconst bodyPrefix = doc.slice(bodyStart, bodyStart + 20).trimStart();\n\t\t\t\tif (bodyPrefix.startsWith(\"{\") || bodyPrefix.startsWith(\"[\"))\n\t\t\t\t\treturn false;\n\n\t\t\t\tconst line = state.doc.lineAt(pos);\n\t\t\t\tconst newIndent = computeYamlNewlineIndent(line.text);\n\n\t\t\t\tview.dispatch({\n\t\t\t\t\tchanges: { from: pos, insert: `\\n${newIndent}` },\n\t\t\t\t\tselection: { anchor: pos + 1 + newIndent.length },\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t},\n\t]);\n}\n\ntype LanguageMode = \"json\" | \"http\" | \"sql\" | \"yaml\";\n\nfunction languageExtensions(\n\tmode: LanguageMode,\n\tsqlExtraBuiltins?: string[],\n\tgetUrlSuggestions?: GetUrlSuggestions,\n) {\n\tif (mode === \"http\") {\n\t\tconst jsonLang = json();\n\t\tconst yamlLang = yaml();\n\t\treturn [\n\t\t\thttp(\n\t\t\t\t(ct) =>\n\t\t\t\t\tct === \"application/json\"\n\t\t\t\t\t\t? jsonLang.language\n\t\t\t\t\t\t: ct === \"text/yaml\" ||\n\t\t\t\t\t\t\t\tct === \"application/yaml\" ||\n\t\t\t\t\t\t\t\tct === \"application/x-yaml\"\n\t\t\t\t\t\t\t? yamlLang.language\n\t\t\t\t\t\t\t: null,\n\t\t\t\tgetUrlSuggestions,\n\t\t\t),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\tjsonAutoExpandBraces(),\n\t\t\thttpYamlEnterKeymap(),\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 [\n\t\t\tyaml(),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\tyamlEnterKeymap(),\n\t\t];\n\t} else {\n\t\treturn [\n\t\t\tjson(),\n\t\t\tlinter(\n\t\t\t\t(view) => {\n\t\t\t\t\tif (!view.state.doc.toString().trim()) return [];\n\t\t\t\t\treturn jsonParseLinter()(view);\n\t\t\t\t},\n\t\t\t\t{ delay: 300 },\n\t\t\t),\n\t\t\tsyntaxHighlighting(customHighlightStyle),\n\t\t\tjsonAutoExpandBraces(),\n\t\t];\n\t}\n}\n\nfunction jsonAutoExpandBraces(): Extension {\n\treturn EditorState.transactionFilter.of((tr) => {\n\t\tif (!tr.docChanged) return tr;\n\n\t\tlet braceFrom = -1;\n\t\tlet braceTo = -1;\n\t\tlet changeCount = 0;\n\n\t\ttr.changes.iterChanges((fromA, toA, _fromB, _toB, inserted) => {\n\t\t\tchangeCount++;\n\t\t\tif (inserted.toString() === \"{}\") {\n\t\t\t\tbraceFrom = fromA;\n\t\t\t\tbraceTo = toA;\n\t\t\t}\n\t\t});\n\n\t\tif (changeCount !== 1 || braceFrom === -1) return tr;\n\n\t\tconst tree = syntaxTree(tr.startState);\n\t\tconst nodeBefore = tree.resolveInner(braceFrom, -1);\n\t\tif (nodeBefore.name === \"String\" || nodeBefore.parent?.name === \"String\") {\n\t\t\treturn tr;\n\t\t}\n\n\t\tconst line = tr.startState.doc.lineAt(braceFrom);\n\t\tconst indent = line.text.match(/^(\\s*)/)?.[1] ?? \"\";\n\t\tconst inner = `${indent} `;\n\n\t\t// Check if { is inside an extension array — insert {\"url\": \"\"} snippet\n\t\tconst docText = tr.startState.doc.toString();\n\t\tconst textBefore = docText.slice(0, braceFrom);\n\t\tconst isInExtArray =\n\t\t\t/\"(?:extension|modifierExtension)\"\\s*:\\s*\\[\\s*(?:\\{[\\s\\S]*?\\}\\s*,?\\s*)*$/s.test(\n\t\t\t\ttextBefore,\n\t\t\t);\n\t\tif (isInExtArray) {\n\t\t\tconst insert = `{\\n${inner}\"url\": \"\"\\n${indent}}`;\n\t\t\treturn {\n\t\t\t\tchanges: { from: braceFrom, to: braceTo, insert },\n\t\t\t\tselection: { anchor: braceFrom + insert.lastIndexOf('\"\"') + 1 },\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tchanges: {\n\t\t\t\tfrom: braceFrom,\n\t\t\t\tto: braceTo,\n\t\t\t\tinsert: `{\\n${inner}\\n${indent}}`,\n\t\t\t},\n\t\t\tselection: { anchor: braceFrom + 2 + inner.length },\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\tlineNumbers?: boolean;\n\tsql?: SqlConfig;\n\tgetStructureDefinitions?: GetStructureDefinitions;\n\tresourceTypeHint?: string;\n\texpandValueSet?: ExpandValueSet;\n\tgetUrlSuggestions?: GetUrlSuggestions;\n\tvimMode?: boolean;\n};\n\nexport type CodeEditorView = EditorView;\n\nexport type {\n\tExpandValueSet,\n\tGetStructureDefinitions,\n} from \"./fhir-autocomplete\";\nexport type { GetUrlSuggestions } from \"./http\";\nexport type {\n\tSqlConfig,\n\tSqlMetadata,\n\tSqlQueryType,\n} from \"./sql-completion\";\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\tlineNumbers: enableLineNumbers = true,\n\tsql,\n\tgetStructureDefinitions,\n\tresourceTypeHint,\n\texpandValueSet,\n\tgetUrlSuggestions,\n\tvimMode = false,\n}: CodeEditorProps) {\n\tconst domRef = React.useRef(null);\n\tconst [view, setView] = React.useState<EditorView | null>(null);\n\n\tconst safeDispatch = React.useCallback(\n\t\t(spec: Parameters<EditorView[\"dispatch\"]>[0]) => {\n\t\t\ttry {\n\t\t\t\tview?.dispatch(spec);\n\t\t\t} catch {\n\t\t\t\t// Ignore RangeError from stale decoration positions during reconfigure\n\t\t\t}\n\t\t},\n\t\t[view],\n\t);\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\tconst sqlCompletionCompartment = React.useRef(new Compartment());\n\tconst fhirCompletionCompartment = React.useRef(new Compartment());\n\tconst vimCompartment = React.useRef(new Compartment());\n\tconst [sqlFunctions, setSqlFunctions] = React.useState<\n\t\tstring[] | undefined\n\t>();\n\tconst executeSqlRef = React.useRef(sql?.executeSql);\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\tvimCompartment.current.of(vimMode ? vim() : []),\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\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\tfoldGutter({\n\t\t\t\t\t\t\t\t\tmarkerDOM: (open) => {\n\t\t\t\t\t\t\t\t\t\tconst el = document.createElement(\"span\");\n\t\t\t\t\t\t\t\t\t\tel.style.display = \"flex\";\n\t\t\t\t\t\t\t\t\t\tel.style.alignItems = \"center\";\n\t\t\t\t\t\t\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\t\t\t\t\t\t\tel.style.width = \"100%\";\n\t\t\t\t\t\t\t\t\t\tel.style.height = \"100%\";\n\t\t\t\t\t\t\t\t\t\tel.innerHTML = open\n\t\t\t\t\t\t\t\t\t\t\t? '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>'\n\t\t\t\t\t\t\t\t\t\t\t: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"/></svg>';\n\t\t\t\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\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\tdefaultKeymap: false,\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\thighlightSelectionMatches(),\n\t\t\t\t\tPrec.highest(\n\t\t\t\t\t\tkeymap.of([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"Tab\",\n\t\t\t\t\t\t\t\trun: (v) => {\n\t\t\t\t\t\t\t\t\tif (completionStatus(v.state) === \"active\") {\n\t\t\t\t\t\t\t\t\t\treturn moveCompletionSelection(true)(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"Shift-Tab\",\n\t\t\t\t\t\t\t\trun: (v) => {\n\t\t\t\t\t\t\t\t\tif (completionStatus(v.state) === \"active\") {\n\t\t\t\t\t\t\t\t\t\treturn moveCompletionSelection(false)(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"Enter\",\n\t\t\t\t\t\t\t\trun: (v) => {\n\t\t\t\t\t\t\t\t\tif (completionStatus(v.state) === \"active\") {\n\t\t\t\t\t\t\t\t\t\treturn acceptCompletion(v);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\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...completionKeymap.filter((b) => b.key !== \"Enter\"),\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...lintKeymap,\n\t\t\t\t\t]),\n\t\t\t\t\tissueLinesField,\n\t\t\t\t\terrorTooltipHandler,\n\t\t\t\t\tEditorView.exceptionSink.of(() => {}),\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\tsqlCompletionCompartment.current.of([]),\n\t\t\t\t\tfhirCompletionCompartment.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, vimMode]);\n\n\tReact.useEffect(() => {\n\t\texecuteSqlRef.current = sql?.executeSql;\n\t});\n\n\tReact.useEffect(() => {\n\t\tif (!view || !sql) {\n\t\t\tif (view) {\n\t\t\t\tsafeDispatch({\n\t\t\t\t\teffects: sqlCompletionCompartment.current.reconfigure([]),\n\t\t\t\t});\n\t\t\t}\n\t\t\tsetSqlFunctions(undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tlet cancelled = false;\n\n\t\tfetchSqlMetadata(sql.executeSql)\n\t\t\t.then((metadata) => {\n\t\t\t\tif (cancelled) return;\n\t\t\t\tsetSqlFunctions(metadata.functions);\n\t\t\t\tconst extensions = buildSqlCompletionExtensions(\n\t\t\t\t\tmetadata,\n\t\t\t\t\t(query, type) =>\n\t\t\t\t\t\texecuteSqlRef.current?.(query, type) ?? Promise.resolve([]),\n\t\t\t\t);\n\t\t\t\tsafeDispatch({\n\t\t\t\t\teffects: sqlCompletionCompartment.current.reconfigure(extensions),\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch(() => {});\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [view, sql, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (!view) return;\n\t\tif (getStructureDefinitions) {\n\t\t\tsafeDispatch({\n\t\t\t\teffects: fhirCompletionCompartment.current.reconfigure(\n\t\t\t\t\tbuildFhirCompletionExtension(\n\t\t\t\t\t\tgetStructureDefinitions,\n\t\t\t\t\t\tresourceTypeHint,\n\t\t\t\t\t\texpandValueSet,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t});\n\t\t} else {\n\t\t\tsafeDispatch({\n\t\t\t\teffects: fhirCompletionCompartment.current.reconfigure([]),\n\t\t\t});\n\t\t}\n\t}, [\n\t\tview,\n\t\tgetStructureDefinitions,\n\t\tresourceTypeHint,\n\t\texpandValueSet,\n\t\tsafeDispatch,\n\t]);\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\tsafeDispatch({\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}, [onChange, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tsafeDispatch({\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}, [onUpdate, safeDispatch]);\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\tsafeDispatch({\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, safeDispatch]);\n\n\tconst getUrlSuggestionsRef = React.useRef(getUrlSuggestions);\n\tgetUrlSuggestionsRef.current = getUrlSuggestions;\n\n\tconst stableGetUrlSuggestions = React.useMemo(() => {\n\t\tif (!getUrlSuggestions) return undefined;\n\t\treturn ((path: string, method: string) =>\n\t\t\tgetUrlSuggestionsRef.current?.(path, method) ?? []) as GetUrlSuggestions;\n\t}, [getUrlSuggestions]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: languageCompartment.current.reconfigure(\n\t\t\t\tlanguageExtensions(mode, sqlFunctions, stableGetUrlSuggestions),\n\t\t\t),\n\t\t});\n\t}, [mode, view, sqlFunctions, stableGetUrlSuggestions, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\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, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\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, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: [vimCompartment.current.reconfigure(vimMode ? vim() : [])],\n\t\t});\n\t}, [vimMode, view, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\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, safeDispatch]);\n\n\tReact.useEffect(() => {\n\t\tif (view === null) {\n\t\t\treturn;\n\t\t}\n\t\tsafeDispatch({\n\t\t\teffects: setIssueLinesEffect.of(issueLineNumbers ?? []),\n\t\t});\n\t}, [issueLineNumbers, view, safeDispatch]);\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 = () => <ChevronsRight size={16} color=\"#717684\" />;\nconst TableIcon = () => <Table2 size={16} color=\"#717684\" />;\nconst HeaderIcon = () => <Heading 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\tif (completion.type === \"table\") return TableIcon;\n\tif (completion.type === \"header\") return HeaderIcon;\n\tif (completion.type === \"text\") return TypCodeIcon;\n\tif (completion.type === \"type\") return ResourceIcon;\n\tif (completion.type === \"search-param\") return null;\n\tconst detail = completion.detail;\n\tif (!detail) {\n\t\tif (completion.type === \"variable\") return SquareFunctionIcon;\n\t\treturn TypCodeIcon;\n\t}\n\tconst typeName = detail.replace(/\\[\\]$/, \"\");\n\tif (!typeName) return TypCodeIcon;\n\t// Search param types (TOKEN, REFERENCE) — no icon\n\tif (typeName === typeName.toUpperCase()) return null;\n\tconst firstChar = typeName[0];\n\tif (!firstChar) return TypCodeIcon;\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} else {\n\t\tcontainer.style.display = \"none\";\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","completionStatus","moveCompletionSelection","defaultKeymap","history","historyKeymap","json","jsonParseLinter","SQLDialect","sql","yaml","bracketMatching","foldGutter","foldKeymap","HighlightStyle","indentOnInput","syntaxHighlighting","syntaxTree","linter","lintKeymap","closeSearchPanel","findNext","findPrevious","getSearchQuery","highlightSelectionMatches","SearchQuery","search","searchKeymap","setSearchQuery","Compartment","EditorState","Prec","RangeSet","StateEffect","StateField","crosshairCursor","Decoration","drawSelection","dropCursor","EditorView","GutterMarker","gutterLineClass","highlightSpecialChars","keymap","lineNumbers","rectangularSelection","tags","vim","ChevronDown","ChevronsRight","ChevronUp","Heading","Table2","Terminal","X","React","flushSync","createRoot","ComplexTypeIcon","ResourceIcon","SquareFunctionIcon","TypCodeIcon","buildFhirCompletionExtension","fhirDiagnosticsField","http","buildSqlCompletionExtensions","fetchSqlMetadata","ErrorLineGutterMarker","elementClass","errorLineMarker","errorLineDecoration","line","class","setIssueLinesEffect","define","errorTooltipEl","formatErrorTypeTitle","code","split","map","w","charAt","toUpperCase","slice","join","renderErrorCard","msg","card","document","createElement","Object","assign","style","backgroundColor","border","borderRadius","padding","boxShadow","newlineIdx","indexOf","title","body","titleEl","textContent","fontWeight","hr","borderTop","margin","bodyEl","whiteSpace","append","showErrorTooltip","message","x","y","hideErrorTooltip","tooltip","position","fontSize","lineHeight","color","fontFamily","zIndex","pointerEvents","maxWidth","display","flexDirection","gap","parts","part","appendChild","tooltipRect","getBoundingClientRect","top","height","window","innerHeight","left","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","docChanged","changes","provide","field","val","decorations","getErrorMessageForLine","view","lineNo","issueMsg","get","undefined","handleErrorTooltipMove","event","target","mouseEvent","gutterEl","closest","Number","parseInt","isNaN","clientX","clientY","lineEl","pos","posAtDOM","lineAt","number","errorTooltipHandler","domEventHandlers","mouseover","mousemove","mouseleave","baseTheme","theme","width","paddingTop","paddingBottom","overflow","outline","borderLeftColor","minWidth","paddingRight","alignItems","justifyContent","completionTheme","maxHeight","flex","textDecoration","marginLeft","flexShrink","readOnlyTheme","iconButtonStyle","background","cursor","getMatchInfo","searchText","current","total","toString","sel","selection","main","lowerDoc","toLowerCase","lowerSearch","searchLen","length","idx","to","createSearchPanel","dom","root","panelRef","setSearch","setMatch","lastSearch","lastCurrent","lastTotal","Panel","setValue","useState","match","setMatchState","handleChange","newValue","dispatch","div","marginTop","input","onChange","e","onKeyDown","key","preventDefault","shiftKey","focus","placeholder","span","textAlign","visibility","button","type","onClick","size","render","querySelector","setAttribute","q","info","mount","el","select","query","destroy","unmount","searchPanelTheme","right","customSearchExtension","createPanel","customHighlightStyle","tag","propertyName","string","bool","null","keyword","operatorKeyword","controlKeyword","typeName","variableName","operator","comment","lineComment","blockComment","SQL_KEYWORDS","SQL_BUILTIN","customSQLDialect","keywords","builtin","computeYamlNewlineIndent","lineText","indent","trimmed","trimEnd","endsWith","dashMatch","baseIndent","repeat","test","dashKeyMatch","yamlEnterKeymap","run","head","newIndent","text","insert","anchor","httpYamlEnterKeymap","textBeforeCursor","blankLineIdx","bodyStart","bodyPrefix","trimStart","startsWith","languageExtensions","mode","sqlExtraBuiltins","getUrlSuggestions","jsonLang","yamlLang","ct","language","jsonAutoExpandBraces","dialect","trim","delay","transactionFilter","braceFrom","braceTo","changeCount","iterChanges","fromA","toA","_fromB","_toB","inserted","tree","startState","nodeBefore","resolveInner","name","parent","inner","docText","textBefore","isInExtArray","lastIndexOf","CodeEditor","defaultValue","currentValue","onUpdate","viewCallback","readOnly","id","isReadOnlyTheme","additionalExtensions","issueLineNumbers","enableFoldGutter","enableLineNumbers","getStructureDefinitions","resourceTypeHint","expandValueSet","vimMode","domRef","useRef","setView","safeDispatch","useCallback","spec","initialValue","onChangeComparment","onUpdateComparment","languageCompartment","readOnlyCompartment","themeCompartment","additionalExtensionsCompartment","sqlCompletionCompartment","fhirCompletionCompartment","vimCompartment","sqlFunctions","setSqlFunctions","executeSqlRef","executeSql","useEffect","extensions","contentAttributes","markerDOM","open","innerHTML","allowMultipleSelections","icons","maxRenderedOptions","addToOptions","renderCompletionIcon","optionClass","_completion","tooltipClass","_state","compareCompletions","a","b","aIsProperty","bIsProperty","highest","v","filter","exceptionSink","reconfigure","cancelled","then","metadata","functions","Promise","resolve","catch","updateListener","currentDoc","getUrlSuggestionsRef","stableGetUrlSuggestions","useMemo","path","method","className","ref","editorInputTheme","KeywordIcon","OperatorIcon","TableIcon","HeaderIcon","getCompletionIcon","completion","detail","replace","firstChar","isComplex","container","Icon","activeTooltip","activeRafId","cleanupActiveTooltip","cancelAnimationFrame","renderCompletionDetail","showTooltip","autocompleteEl","anchorRect","checkAlive","isConnected","requestAnimationFrame","option","addEventListener","EditorInput","onChangeCompartment","closeOnBlur"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { syntaxTree } from "@codemirror/language";
2
+ import type { SyntaxNode } from "@lezer/common";
3
+ export interface ScopeView {
4
+ getString(key: string): string | null;
5
+ getStringArray(parentKey: string, arrayKey: string): string[];
6
+ getKeys(): string[];
7
+ }
8
+ export interface DocumentContext {
9
+ fullPath: string[];
10
+ pos: number;
11
+ doc: string;
12
+ cursorPosition: {
13
+ kind: "property";
14
+ prefix: string;
15
+ } | {
16
+ kind: "value";
17
+ key: string;
18
+ prefix: string;
19
+ } | {
20
+ kind: "array-item";
21
+ parentKey: string;
22
+ prefix: string;
23
+ } | {
24
+ kind: "none";
25
+ };
26
+ getScope(levelsUp: number): ScopeView;
27
+ isInsideArray(): boolean;
28
+ }
29
+ export interface PropertyInfo {
30
+ name: string;
31
+ path: string[];
32
+ resourceType: string;
33
+ from: number;
34
+ to: number;
35
+ }
36
+ export interface EmptyStringInfo {
37
+ from: number;
38
+ to: number;
39
+ }
40
+ export declare function buildJsonDocumentContext(doc: string, pos: number): DocumentContext;
41
+ export declare function walkJsonProperties(doc: string, tree: ReturnType<typeof syntaxTree>, resourceTypeHint: string | null): {
42
+ properties: PropertyInfo[];
43
+ emptyStrings: EmptyStringInfo[];
44
+ };
45
+ export declare function findRootJsonObject(doc: string, tree: ReturnType<typeof syntaxTree>): SyntaxNode | null;
46
+ //# sourceMappingURL=json-ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-ast.d.ts","sourceRoot":"","sources":["../../../../src/components/code-editor/json-ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,WAAW,SAAS;IACzB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9D,OAAO,IAAI,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EACX;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACpC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAC9C;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,aAAa,IAAI,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACX;AAqXD,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,eAAe,CAgDjB;AAID,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,EACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC7B;IAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,YAAY,EAAE,eAAe,EAAE,CAAA;CAAE,CAiBjE;AAED,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GACjC,UAAU,GAAG,IAAI,CAuBnB"}