@salilvnair/dui 1.0.2 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"monaco-setup.js","sources":["../src/hooks/useAppTheme.ts","../src/services/dk-repl.ts","../src/hooks/useBreakpointGutter.ts","../src/store/debug-store.ts","../src/lib/components/input/EditorView.monaco.tsx","../src/lib/components/input/DiffEditorView.monaco.tsx","../src/monaco-setup.ts"],"sourcesContent":["/**\n * useAppTheme — returns 'dark' | 'light' and re-renders on change.\n *\n * Detects theme from (in priority order):\n * 1. VS Code webview: data-vscode-theme-kind on <body> (set by VS Code host)\n * 2. Generic: data-theme on <html> (daakia / other web apps)\n * 3. Fallback: 'dark'\n */\nimport { useState, useEffect } from 'react';\n\nfunction resolveTheme(): 'dark' | 'light' {\n const vsKind =\n document.body?.getAttribute('data-vscode-theme-kind') ||\n document.documentElement.getAttribute('data-vscode-theme-kind');\n if (vsKind) return vsKind === 'vscode-light' ? 'light' : 'dark';\n return (document.documentElement.getAttribute('data-theme') as 'dark' | 'light') || 'dark';\n}\n\nexport function useAppTheme(): 'dark' | 'light' {\n const [theme, setTheme] = useState<'dark' | 'light'>(resolveTheme);\n\n useEffect(() => {\n const update = () => setTheme(resolveTheme());\n const htmlObs = new MutationObserver(update);\n htmlObs.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'data-vscode-theme-kind'] });\n const bodyObs = new MutationObserver(update);\n if (document.body) bodyObs.observe(document.body, { attributes: true, attributeFilter: ['data-vscode-theme-kind'] });\n return () => { htmlObs.disconnect(); bodyObs.disconnect(); };\n }, []);\n\n return theme;\n}\n","// Stub — dk-repl completions are daakia-specific and not used in standalone DUI.\nexport const DK_TYPE_DEFS = '';\nexport function getDkCompletions(_text: string, _monaco: unknown, _pos: unknown): unknown[] {\n return [];\n}\n","import { useRef, useEffect, useCallback, MutableRefObject } from 'react';\n\nexport interface BreakpointGutterOptions {\n breakpoints?: number[];\n disabledBreakpoints?: number[];\n conditionalBreakpointLines?: number[];\n /** Currently paused line (1-based) — shows yellow highlight */\n pausedLine?: number | null;\n onToggleBreakpoint?: (line: number) => void;\n onGlyphContextMenu?: (line: number, pos: { x: number; y: number }) => void;\n}\n\n/**\n * Encapsulates all breakpoint gutter logic for a Monaco editor:\n * - Line validation (only skips empty lines)\n * - Breakpoint dot decorations (red/disabled/conditional)\n * - Glyph margin click & context-menu handlers\n * - Hover hint (faded dot on valid, non-breakpointed lines)\n *\n * Returns `attach(editor, monaco)` to be called in onMount,\n * and handles cleanup/decoration updates via effects.\n */\nexport function useBreakpointGutter(options: BreakpointGutterOptions) {\n const {\n breakpoints,\n disabledBreakpoints,\n conditionalBreakpointLines,\n pausedLine,\n onToggleBreakpoint,\n onGlyphContextMenu,\n } = options;\n\n const editorRef = useRef<any>(null);\n const monacoRef = useRef<any>(null);\n const decorationsRef = useRef<string[]>([]);\n const pausedDecoRef = useRef<string[]>([]);\n const hoverDecoRef = useRef<string[]>([]);\n const disposablesRef = useRef<any[]>([]);\n\n const isBreakpointableLine = useCallback((lineNo: number): boolean => {\n const editor = editorRef.current;\n if (!editor) return true;\n const model = editor.getModel();\n if (!model || lineNo > model.getLineCount()) return false;\n const lineContent = model.getLineContent(lineNo).trim();\n return !!lineContent;\n }, []);\n\n // Sync breakpoint decorations when breakpoints change\n useEffect(() => {\n const editor = editorRef.current;\n const monaco = monacoRef.current;\n if (!editor || !monaco) return;\n\n const decos: any[] = [];\n\n if (breakpoints) {\n for (const line of breakpoints) {\n // Skip breakpoint glyph on the paused line — the arrow \"gulps\" it\n if (pausedLine && line === pausedLine) continue;\n\n const isDisabled = disabledBreakpoints?.includes(line);\n const isConditional = conditionalBreakpointLines?.includes(line);\n let glyphClass = 'daakia-bp-glyph';\n if (isDisabled) glyphClass = 'daakia-bp-glyph--disabled';\n else if (isConditional) glyphClass = 'daakia-bp-glyph--conditional';\n\n decos.push({\n range: new monaco.Range(line, 1, line, 1),\n options: {\n isWholeLine: true,\n className: isDisabled ? '' : 'daakia-bp-line',\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n glyphMarginClassName: glyphClass,\n glyphMarginHoverMessage: {\n value: isConditional ? 'Conditional Breakpoint' : isDisabled ? 'Disabled Breakpoint' : 'Breakpoint',\n },\n },\n });\n }\n }\n\n decorationsRef.current = editor.deltaDecorations(decorationsRef.current, decos);\n }, [breakpoints, disabledBreakpoints, conditionalBreakpointLines, pausedLine]);\n\n // Sync paused-line highlight (yellow background + arrow in glyph margin)\n useEffect(() => {\n const editor = editorRef.current;\n const monaco = monacoRef.current;\n if (!editor || !monaco) return;\n\n if (pausedLine) {\n // Use combined class when paused line is also a breakpoint line\n const isOnBreakpoint = breakpoints?.includes(pausedLine);\n const glyphClass = isOnBreakpoint\n ? 'daakia-paused-line__arrow daakia-paused-line__arrow--with-bp'\n : 'daakia-paused-line__arrow';\n\n pausedDecoRef.current = editor.deltaDecorations(pausedDecoRef.current, [{\n range: new monaco.Range(pausedLine, 1, pausedLine, 1),\n options: {\n isWholeLine: true,\n className: 'daakia-paused-line',\n glyphMarginClassName: glyphClass,\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n },\n }]);\n // Scroll to the paused line\n editor.revealLineInCenter(pausedLine);\n } else {\n pausedDecoRef.current = editor.deltaDecorations(pausedDecoRef.current, []);\n }\n }, [pausedLine, breakpoints]);\n\n // Cleanup disposables on unmount\n useEffect(() => {\n return () => {\n disposablesRef.current.forEach(d => d?.dispose?.());\n disposablesRef.current = [];\n };\n }, []);\n\n /**\n * Call this inside Monaco's onMount handler to attach all gutter interactions.\n * Returns the disposables (also tracked internally for auto-cleanup).\n */\n const attach = useCallback((editor: any, monaco: any) => {\n editorRef.current = editor;\n monacoRef.current = monaco;\n\n // Mark the entire margin container so RightClickMenu can detect gutter clicks\n const domNode = editor.getDomNode();\n if (domNode) {\n const marginContainer = domNode.querySelector('.margin');\n if (marginContainer) marginContainer.setAttribute('data-daakia-bp-gutter', '');\n }\n\n // Left-click to toggle breakpoint (right-click is handled separately for context menu)\n if (onToggleBreakpoint) {\n const d1 = editor.onMouseDown((e: any) => {\n if (e.event.leftButton && e.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) {\n const line = e.target.position?.lineNumber;\n if (line && isBreakpointableLine(line)) onToggleBreakpoint(line);\n }\n });\n disposablesRef.current.push(d1);\n }\n\n // Right-click context menu — use DOM-level listener to intercept BEFORE Monaco shows its own menu\n if (onGlyphContextMenu) {\n let glyphRightClick: { line: number; x: number; y: number } | null = null;\n\n // Detect right-click on any gutter zone (glyph margin, line numbers, line decorations)\n const d2a = editor.onMouseDown((e: any) => {\n if (\n e.event.rightButton &&\n (e.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN ||\n e.target.type === monaco.editor.MouseTargetType.GUTTER_LINE_NUMBERS ||\n e.target.type === monaco.editor.MouseTargetType.GUTTER_LINE_DECORATIONS)\n ) {\n const line = e.target.position?.lineNumber;\n if (line && isBreakpointableLine(line)) {\n glyphRightClick = { line, x: e.event.posx, y: e.event.posy };\n }\n }\n });\n disposablesRef.current.push(d2a);\n\n // DOM-level contextmenu intercept — prevents Monaco's built-in menu on gutter area\n const domNode = editor.getDomNode();\n if (domNode) {\n const domHandler = (ev: MouseEvent) => {\n if (glyphRightClick) {\n ev.preventDefault();\n ev.stopPropagation();\n onGlyphContextMenu(glyphRightClick.line, { x: glyphRightClick.x, y: glyphRightClick.y });\n glyphRightClick = null;\n } else if ((ev.target as HTMLElement).closest('[data-daakia-bp-gutter]')) {\n // Fallback: block Monaco's default menu for any gutter right-click\n ev.preventDefault();\n ev.stopPropagation();\n }\n };\n domNode.addEventListener('contextmenu', domHandler, true); // capture phase\n disposablesRef.current.push({ dispose: () => domNode.removeEventListener('contextmenu', domHandler, true) });\n }\n }\n\n // Hover hint: faded dot on valid non-breakpointed lines\n if (onToggleBreakpoint) {\n const d3 = editor.onMouseMove((e: any) => {\n if (e.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) {\n const line = e.target.position?.lineNumber;\n if (line && isBreakpointableLine(line)) {\n const model = editor.getModel();\n if (model) {\n const lineDecos = model.getLineDecorations(line);\n const hasBpDeco = lineDecos?.some((d: any) =>\n d.options?.glyphMarginClassName?.startsWith('daakia-bp-glyph') &&\n !d.options?.glyphMarginClassName?.includes('hover')\n );\n if (!hasBpDeco) {\n hoverDecoRef.current = editor.deltaDecorations(hoverDecoRef.current, [{\n range: new monaco.Range(line, 1, line, 1),\n options: {\n isWholeLine: false,\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n glyphMarginClassName: 'daakia-bp-glyph--hover',\n glyphMarginHoverMessage: { value: 'Left-click to add a breakpoint' },\n },\n }]);\n return;\n }\n }\n }\n }\n // Clear hover when not on glyph margin\n if (hoverDecoRef.current.length) {\n hoverDecoRef.current = editor.deltaDecorations(hoverDecoRef.current, []);\n }\n });\n disposablesRef.current.push(d3);\n\n const d4 = editor.onMouseLeave(() => {\n if (hoverDecoRef.current.length) {\n hoverDecoRef.current = editor.deltaDecorations(hoverDecoRef.current, []);\n }\n });\n disposablesRef.current.push(d4);\n }\n\n // Apply breakpoint decorations immediately after attach (fixes disappearing on remount)\n if (breakpoints) {\n const decos: any[] = [];\n for (const line of breakpoints) {\n const isDisabled = disabledBreakpoints?.includes(line);\n const isConditional = conditionalBreakpointLines?.includes(line);\n let glyphClass = 'daakia-bp-glyph';\n if (isDisabled) glyphClass = 'daakia-bp-glyph--disabled';\n else if (isConditional) glyphClass = 'daakia-bp-glyph--conditional';\n\n decos.push({\n range: new monaco.Range(line, 1, line, 1),\n options: {\n isWholeLine: true,\n className: isDisabled ? '' : 'daakia-bp-line',\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n glyphMarginClassName: glyphClass,\n glyphMarginHoverMessage: {\n value: isConditional ? 'Conditional Breakpoint' : isDisabled ? 'Disabled Breakpoint' : 'Breakpoint',\n },\n },\n });\n }\n decorationsRef.current = editor.deltaDecorations(decorationsRef.current, decos);\n }\n }, [onToggleBreakpoint, onGlyphContextMenu, isBreakpointableLine, breakpoints, disabledBreakpoints, conditionalBreakpointLines]);\n\n return { attach };\n}\n","// Stub — debug store is daakia-specific.\ninterface DebugState {\n navigateLine: number | null;\n setNavigateLine: (line: number | null) => void;\n active: boolean;\n status: 'idle' | 'running' | 'paused';\n variables: { name: string; value: unknown; type: string }[];\n}\n\nconst state: DebugState = {\n navigateLine: null,\n setNavigateLine: () => {},\n active: false,\n status: 'idle',\n variables: [],\n};\n\nexport function useDebugStore<T>(selector: (s: DebugState) => T): T {\n return selector(state);\n}\nuseDebugStore.getState = () => state;\n","import Editor, { type OnMount } from '@monaco-editor/react';\nimport { useRef, useMemo, useEffect } from 'react';\nimport { useAppTheme } from '../../../hooks/useAppTheme';\nimport { getDkCompletions, DK_TYPE_DEFS } from '../../../services/dk-repl';\nimport { initGraphQLCompletionProvider } from '../../../services/graphql-completion';\nimport { useEditorBase } from '../../core/EditorBase';\nimport { EditorShell } from './EditorView.shell';\nimport type { EditorViewProps, EditorLanguage, EditorOptions, EditorContextMenuMode } from './EditorView';\n\n// ─── Debug-only imports — only loaded when debugSupported=true ─────────────────\nimport { useBreakpointGutter } from '../../../hooks/useBreakpointGutter';\nimport { useDebugVariableHover } from '../../../hooks/useDebugVariableHover';\nimport { useDebugStore } from '../../../store/debug-store';\n\n// This file is only ever reached by '@salilvnair/dui/monaco-setup' — a\n// separate, explicit opt-in subpath, never referenced (statically or via\n// lazy()) from the main package entry. That's what makes a plain top-level\n// import safe here: importing monaco-setup already requires Monaco installed.\n// See monaco-runtime.ts for why an in-place lazy()/dynamic-import approach\n// inside the always-loaded EditorView.tsx does not work.\n\nlet dkLibRegistered = false;\n\nconst EXT_MAP: Partial<Record<EditorLanguage, string>> = {\n javascript: '.js', typescript: '.ts', json: '.json', xml: '.xml',\n html: '.html', css: '.css', graphql: '.graphql', python: '.py',\n yaml: '.yaml', sql: '.sql', markdown: '.md', plaintext: '.txt', proto: '.proto',\n};\n\nfunction formatXml(xml: string): string {\n const INDENT = ' ';\n let depth = 0;\n let result = '';\n const tokens = xml.replace(/>\\s*</g, '><').split(/(?<=>)(?=<)/);\n for (const token of tokens) {\n const isClosing = /^<\\//.test(token);\n const isSelfClosing = /\\/>$/.test(token) || /^<!/.test(token) || /^<\\?/.test(token);\n if (isClosing) depth = Math.max(0, depth - 1);\n result += INDENT.repeat(depth) + token.trim() + '\\n';\n if (!isClosing && !isSelfClosing && /^<[^/!?]/.test(token)) depth++;\n }\n return result.trimEnd();\n}\n\nfunction formatYaml(yaml: string): string {\n return yaml\n .split('\\n')\n .map(line => line.trimEnd())\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\nfunction formatSql(sql: string): string {\n const CLAUSE_RE = /\\b(SELECT|DISTINCT|FROM|WHERE|INNER JOIN|LEFT JOIN|RIGHT JOIN|FULL OUTER JOIN|FULL JOIN|CROSS JOIN|JOIN|ON|AND|OR|NOT|ORDER BY|GROUP BY|HAVING|LIMIT|OFFSET|UNION ALL|UNION|INTERSECT|EXCEPT|INSERT INTO|VALUES|UPDATE|SET|DELETE FROM|CREATE TABLE|DROP TABLE|ALTER TABLE|WITH)\\b/gi;\n return sql\n .replace(/\\s+/g, ' ')\n .replace(CLAUSE_RE, '\\n$1')\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .join('\\n');\n}\n\n// ─── Simple variant — no debug hooks at all ───────────────────────────────────\n\nfunction EditorViewSimple({\n value, onChange, language = 'json', height = '200px', minHeight,\n readOnly = false, placeholder, wordWrap = true, size, fontSize,\n className = '', bordered = false, onEditorMount, contextMenuMode = 'native', contextMenuItems, editorOptions, accentColor,\n}: EditorViewProps) {\n const base = useEditorBase(size);\n const resolvedFontSize = fontSize ?? base.fontSize;\n const theme = useAppTheme();\n const editorRef = useRef<any>(null);\n const disposablesRef = useRef<any[]>([]);\n const modelPath = useMemo(\n () => `inmemory://daakia/${crypto.randomUUID()}${EXT_MAP[language] || '.txt'}`,\n [language],\n );\n const resolvedHeight = typeof height === 'number' ? `${height}px` : height;\n const containerHeight = minHeight ? `max(${resolvedHeight}, ${minHeight}px)` : resolvedHeight;\n\n useEffect(() => {\n return () => {\n disposablesRef.current.forEach(d => d?.dispose?.());\n disposablesRef.current = [];\n const editor = editorRef.current;\n if (editor) { const m = editor.getModel(); if (m) m.dispose(); }\n };\n }, []);\n\n // No manual model.setValue() sync here — the controlled `value` prop on\n // <Editor> below already keeps the model in sync on every change (that's\n // what \"controlled\" means for @monaco-editor/react, readOnly or not). A\n // redundant manual setValue() bypass used to live here; it fired in a\n // separate, later effect than the library's own internal sync, triggering\n // a second, out-of-band re-tokenization pass — which is what caused\n // readOnly editors (e.g. Daakia's response JSON viewer) to briefly render\n // monochrome and only pick up real syntax colors a moment later.\n\n const handleMount: OnMount = (editor, monacoInstance) => {\n editorRef.current = editor;\n disposablesRef.current = [];\n mountCommon(editor, monacoInstance, { language, value, placeholder, onEditorMount, contextMenuMode });\n };\n\n const resolvedTheme = theme === 'light' ? 'daakia-light' : 'daakia-dark';\n\n return (\n <EditorShell bordered={bordered} containerHeight={containerHeight} contextMenuMode={contextMenuMode} contextMenuItems={contextMenuItems} accentColor={accentColor}>\n <Editor\n height=\"100%\"\n language={language}\n path={modelPath}\n value={value}\n theme={resolvedTheme}\n onChange={v => onChange?.(v ?? '')}\n onMount={handleMount}\n options={buildOptions({ readOnly, fontSize: resolvedFontSize, wordWrap, glyphMargin: false, contextMenuMode, editorOptions, theme: resolvedTheme })}\n />\n </EditorShell>\n );\n}\n\n// ─── Debug variant — subscribes to debug store + breakpoint hooks ─────────────\n\nfunction EditorViewDebug({\n value, onChange, language = 'json', height = '200px', minHeight,\n readOnly = false, placeholder, wordWrap = true, size, fontSize,\n className = '', bordered = false,\n breakpoints, disabledBreakpoints, conditionalBreakpointLines, pausedLine,\n onToggleBreakpoint, onGlyphContextMenu, onEditorMount, contextMenuMode = 'native', contextMenuItems, editorOptions, accentColor,\n}: EditorViewProps) {\n const base = useEditorBase(size);\n const resolvedFontSize = fontSize ?? base.fontSize;\n const theme = useAppTheme();\n const editorRef = useRef<any>(null);\n const disposablesRef = useRef<any[]>([]);\n const modelPath = useMemo(\n () => `inmemory://daakia/${crypto.randomUUID()}${EXT_MAP[language] || '.txt'}`,\n [language],\n );\n const resolvedHeight = typeof height === 'number' ? `${height}px` : height;\n const containerHeight = minHeight ? `max(${resolvedHeight}, ${minHeight}px)` : resolvedHeight;\n\n // Debug hooks — always called here (React rules), never called in Simple variant\n const { attach: attachBreakpointGutter } = useBreakpointGutter({\n breakpoints, disabledBreakpoints, conditionalBreakpointLines, pausedLine,\n onToggleBreakpoint, onGlyphContextMenu,\n });\n const { attach: attachDebugHover } = useDebugVariableHover();\n const navigateLine = useDebugStore(s => s.navigateLine);\n\n useEffect(() => {\n return () => {\n disposablesRef.current.forEach(d => d?.dispose?.());\n disposablesRef.current = [];\n const editor = editorRef.current;\n if (editor) { const m = editor.getModel(); if (m) m.dispose(); }\n };\n }, []);\n\n // See EditorViewSimple above — no manual model.setValue() sync needed;\n // the controlled `value` prop on <Editor> below already handles it, and a\n // redundant bypass here caused the same delayed-tokenization symptom.\n\n useEffect(() => {\n if (!navigateLine || !editorRef.current || !breakpoints) return;\n editorRef.current.revealLineInCenter(navigateLine);\n editorRef.current.setPosition({ lineNumber: navigateLine, column: 1 });\n useDebugStore.getState().setNavigateLine(null);\n }, [navigateLine, breakpoints]);\n\n const handleMount: OnMount = (editor, monacoInstance) => {\n editorRef.current = editor;\n disposablesRef.current = [];\n // Attach debug features\n attachBreakpointGutter(editor, monacoInstance);\n attachDebugHover(editor, monacoInstance);\n mountCommon(editor, monacoInstance, { language, value, placeholder, onEditorMount, contextMenuMode });\n };\n\n const resolvedTheme = theme === 'light' ? 'daakia-light' : 'daakia-dark';\n\n return (\n <EditorShell bordered={bordered} containerHeight={containerHeight} contextMenuMode={contextMenuMode} contextMenuItems={contextMenuItems} accentColor={accentColor}>\n <Editor\n height=\"100%\"\n language={language}\n path={modelPath}\n value={value}\n theme={resolvedTheme}\n onChange={v => onChange?.(v ?? '')}\n onMount={handleMount}\n options={buildOptions({ readOnly, fontSize: resolvedFontSize, wordWrap, glyphMargin: !!onToggleBreakpoint, contextMenuMode, editorOptions, theme: resolvedTheme })}\n />\n </EditorShell>\n );\n}\n\n// ─── Public export — registered into monaco-runtime by monaco-setup.ts ──────\n\nexport function EditorViewMonacoImpl({ debugSupported = false, className = '', ...rest }: EditorViewProps) {\n if (debugSupported) return <EditorViewDebug className={className} {...rest} />;\n return <EditorViewSimple className={className} {...rest} />;\n}\n\n// ─── Shared Monaco options builder ───────────────────────────────────────────\n\nfunction buildOptions({ readOnly, fontSize, wordWrap, glyphMargin, contextMenuMode = 'native', editorOptions, theme }: {\n readOnly: boolean;\n fontSize: number;\n wordWrap: boolean;\n glyphMargin: boolean;\n contextMenuMode?: EditorContextMenuMode;\n editorOptions?: EditorOptions;\n theme: string;\n}) {\n const o = editorOptions ?? {};\n return {\n // Baked into construction options (not just the top-level <Editor theme=\"\"> prop)\n // so Monaco applies it before its first paint — @monaco-editor/react creates the\n // editor first and only calls the global setTheme() afterward as a separate step,\n // which is what caused a flash of the default white 'vs' theme on every remount\n // (tab switch, subtab switch, new-tab-then-close) before this fix.\n theme,\n // ── Consumer-overridable defaults ────────────────────────────────────────\n lineNumbers: (o.lineNumbers ?? 'on') as 'on' | 'off' | 'relative' | 'interval',\n minimap: { enabled: o.minimap ?? false },\n scrollBeyondLastLine: o.scrollBeyondLastLine ?? false,\n smoothScrolling: o.smoothScrolling ?? false,\n mouseWheelZoom: o.mouseWheelZoom ?? false,\n folding: o.folding ?? true,\n showFoldingControls: (o.showFoldingControls ?? 'mouseover') as 'always' | 'never' | 'mouseover',\n tabSize: o.tabSize ?? 2,\n formatOnPaste: o.formatOnPaste ?? true,\n formatOnType: o.formatOnType ?? true,\n autoIndent: (o.autoIndent ?? 'full') as 'none' | 'keep' | 'brackets' | 'advanced' | 'full',\n renderWhitespace: (o.renderWhitespace ?? 'selection') as 'none' | 'boundary' | 'selection' | 'trailing' | 'all',\n matchBrackets: (o.matchBrackets ?? 'always') as 'never' | 'near' | 'always',\n bracketPairColorization: { enabled: o.bracketPairColorization ?? true },\n colorDecorators: o.colorDecorators ?? true,\n linkedEditing: o.linkedEditing ?? true,\n copyWithSyntaxHighlighting: o.copyWithSyntaxHighlighting ?? true,\n quickSuggestions: o.quickSuggestions ?? true,\n suggestOnTriggerCharacters: o.suggestOnTriggerCharacters ?? true,\n acceptSuggestionOnEnter: (o.acceptSuggestionOnEnter ?? 'on') as 'on' | 'off' | 'smart',\n hover: { enabled: o.hover ?? true },\n parameterHints: { enabled: o.parameterHints ?? true },\n codeLens: o.codeLens ?? false,\n inlayHints: { enabled: (o.inlayHints ?? false) ? 'on' as const : 'off' as const },\n padding: { top: o.padding?.top ?? 8, bottom: o.padding?.bottom ?? 8 },\n ...(o.cursorStyle && { cursorStyle: o.cursorStyle as any }),\n ...(o.cursorBlinking && { cursorBlinking: o.cursorBlinking as any }),\n ...(o.lineHeight && { lineHeight: o.lineHeight }),\n ...(o.letterSpacing && { letterSpacing: o.letterSpacing }),\n ...(o.rulers && { rulers: o.rulers }),\n ...(o.lineDecorationsWidth !== undefined && { lineDecorationsWidth: o.lineDecorationsWidth }),\n ...(o.lineNumbersMinChars !== undefined && { lineNumbersMinChars: o.lineNumbersMinChars }),\n // ── Prop-level overrides (top-level EditorView props win over editorOptions) ─\n readOnly,\n fontSize,\n wordWrap: (o.wordWrap ?? (wordWrap ? 'on' : 'off')) as 'off' | 'on' | 'wordWrapColumn' | 'bounded',\n // ── DUI structural — never overridable ──────────────────────────────────\n automaticLayout: true,\n glyphMargin,\n renderLineHighlight: (o.renderLineHighlight ?? (glyphMargin ? 'line' : 'none')) as 'none' | 'gutter' | 'line' | 'all',\n fixedOverflowWidgets: true,\n contextmenu: contextMenuMode === 'native',\n overviewRulerLanes: 0,\n hideCursorInOverviewRuler: true,\n overviewRulerBorder: false,\n scrollbar: {\n vertical: o.scrollbar?.vertical ?? 'auto',\n horizontal: o.scrollbar?.horizontal ?? 'auto',\n verticalScrollbarSize: o.scrollbar?.verticalScrollbarSize ?? 6,\n horizontalScrollbarSize: o.scrollbar?.horizontalScrollbarSize ?? 6,\n },\n fontFamily: o.fontFamily ?? 'Menlo, Monaco, \"Courier New\", monospace',\n autoClosingBrackets: 'always' as const,\n autoClosingQuotes: 'always' as const,\n autoClosingDelete: 'always' as const,\n autoSurround: 'languageDefined' as const,\n guides: { bracketPairs: true, indentation: true },\n suggest: {\n showKeywords: o.suggest?.showKeywords ?? true,\n showSnippets: o.suggest?.showSnippets ?? true,\n showValues: o.suggest?.showValues ?? true,\n showProperties: o.suggest?.showProperties ?? true,\n ...(o.suggest?.showIcons !== undefined && { showIcons: o.suggest.showIcons }),\n },\n };\n}\n\n// ─── Shared mount logic (everything that isn't debug-specific) ────────────────\n\nfunction mountCommon(\n editor: any,\n monacoInstance: any,\n { language, value, placeholder, onEditorMount, contextMenuMode = 'native' }: {\n language: EditorLanguage;\n value: string;\n placeholder?: string;\n onEditorMount?: (editor: any, monaco: any) => void;\n contextMenuMode?: EditorContextMenuMode;\n },\n) {\n // Layout fixes for flex/overflow containers\n const relayout = () => editor.layout();\n relayout();\n requestAnimationFrame(relayout);\n setTimeout(relayout, 50);\n setTimeout(relayout, 200);\n const parent = editor.getContainerDomNode().parentElement;\n if (parent) {\n const ro = new ResizeObserver(relayout);\n ro.observe(parent);\n editor.onDidDispose(() => ro.disconnect());\n }\n\n editor.updateOptions({\n autoClosingBrackets: 'always', autoClosingQuotes: 'always',\n autoClosingDelete: 'always', autoSurround: 'languageDefined', autoIndent: 'full',\n });\n\n // Clipboard overrides — modern Clipboard API (webview-compatible)\n const KM = monacoInstance.KeyMod;\n const KC = monacoInstance.KeyCode;\n\n editor.addAction({\n id: 'daakia.clipboard.copy', label: 'Copy',\n keybindings: [KM.CtrlCmd | KC.KeyC],\n run: (ed: any) => {\n const sel = ed.getSelection();\n if (sel && !sel.isEmpty()) {\n navigator.clipboard.writeText(ed.getModel()?.getValueInRange(sel) || '');\n } else {\n const pos = ed.getPosition();\n if (pos) navigator.clipboard.writeText((ed.getModel()?.getLineContent(pos.lineNumber) || '') + '\\n');\n }\n },\n });\n\n editor.addAction({\n id: 'daakia.clipboard.cut', label: 'Cut',\n keybindings: [KM.CtrlCmd | KC.KeyX],\n run: (ed: any) => {\n const sel = ed.getSelection();\n if (sel && !sel.isEmpty()) {\n navigator.clipboard.writeText(ed.getModel()?.getValueInRange(sel) || '');\n ed.executeEdits('cut', [{ range: sel, text: '' }]);\n } else {\n const pos = ed.getPosition();\n if (pos) {\n const model = ed.getModel();\n if (model) {\n navigator.clipboard.writeText(model.getLineContent(pos.lineNumber) + '\\n');\n ed.executeEdits('cut', [{ range: new monacoInstance.Range(pos.lineNumber, 1, pos.lineNumber + 1, 1), text: '' }]);\n }\n }\n }\n },\n });\n\n editor.addAction({\n id: 'daakia.clipboard.paste', label: 'Paste',\n keybindings: [KM.CtrlCmd | KC.KeyV],\n run: async (ed: any) => {\n try {\n const text = await navigator.clipboard.readText();\n if (text) {\n const sel = ed.getSelection();\n if (sel) ed.executeEdits('paste', [{ range: sel, text, forceMoveMarkers: true }]);\n }\n } catch { /* clipboard permission denied */ }\n },\n });\n\n editor.addAction({\n id: 'daakia.clipboard.selectAll', label: 'Select All',\n keybindings: [KM.CtrlCmd | KC.KeyA],\n run: (ed: any) => { const m = ed.getModel(); if (m) ed.setSelection(m.getFullModelRange()); },\n });\n\n // Format Document — Shift+Alt+F\n editor.addAction({\n id: 'daakia.format.document', label: 'Format Document',\n keybindings: [KM.Shift | KM.Alt | KC.KeyF],\n contextMenuGroupId: 'modification', contextMenuOrder: 1.5,\n run: async (ed: any) => {\n const model = ed.getModel();\n if (!model) return;\n const langId = model.getLanguageId();\n if (langId === 'xml' || langId === 'html') {\n try {\n const raw = model.getValue();\n const formatted = formatXml(raw);\n if (formatted !== raw) ed.executeEdits('daakia.format', [{ range: model.getFullModelRange(), text: formatted }]);\n } catch { /* malformed XML */ }\n } else if (langId === 'yaml') {\n try {\n const raw = model.getValue();\n const formatted = formatYaml(raw);\n if (formatted !== raw) ed.executeEdits('daakia.format', [{ range: model.getFullModelRange(), text: formatted }]);\n } catch { /* malformed YAML */ }\n } else if (langId === 'sql') {\n try {\n const raw = model.getValue();\n const formatted = formatSql(raw);\n if (formatted !== raw) ed.executeEdits('daakia.format', [{ range: model.getFullModelRange(), text: formatted }]);\n } catch { /* malformed SQL */ }\n } else {\n await ed.getAction('editor.action.formatDocument')?.run();\n }\n },\n });\n\n // Find & Replace — Ctrl+Shift+H\n editor.addAction({\n id: 'daakia.findAndReplace', label: 'Find and Replace',\n keybindings: [KM.CtrlCmd | KM.Shift | KC.KeyH],\n contextMenuGroupId: 'navigation', contextMenuOrder: 1.5,\n run: () => editor.getAction('editor.action.startFindReplaceAction')?.run(),\n });\n\n // Auto-closing config per language\n const model = editor.getModel();\n if (model) {\n const langId = model.getLanguageId();\n if (langId === 'xml' || langId === 'html') {\n monacoInstance.languages.setLanguageConfiguration(langId, {\n autoClosingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n { open: '<', close: '>', notIn: ['string'] },\n ],\n brackets: [['{', '}'], ['[', ']'], ['(', ')'], ['<', '>']],\n surroundingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"' }, { open: \"'\", close: \"'\" }, { open: '<', close: '>' },\n ],\n onEnterRules: [\n {\n beforeText: /<([_:\\w][_:\\w\\-.\\d]*)([^/>]*(?!\\/)>)\\s*$/i,\n afterText: /^<\\/([_:\\w][_:\\w\\-.\\d]*)\\s*>$/i,\n action: { indentAction: monacoInstance.languages.IndentAction.IndentOutdent },\n },\n {\n beforeText: /<([_:\\w][_:\\w\\-.\\d]*)([^/>]*(?!\\/)>)\\s*$/i,\n action: { indentAction: monacoInstance.languages.IndentAction.Indent },\n },\n ],\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n });\n monacoInstance.languages.registerCompletionItemProvider(langId, {\n triggerCharacters: ['/'],\n provideCompletionItems: (mdl: any, position: any) => {\n const textUntilPosition = mdl.getValueInRange({\n startLineNumber: 1, startColumn: 1,\n endLineNumber: position.lineNumber, endColumn: position.column,\n });\n const match = textUntilPosition.match(/<\\/\\s*$/);\n if (match) {\n const openTags: string[] = [];\n const tagRegex = /<\\/?([_:\\w][_:\\w\\-.\\d]*)[^>]*\\/?>/g;\n let m;\n while ((m = tagRegex.exec(textUntilPosition.slice(0, -2))) !== null) {\n if (m[0].startsWith('</')) openTags.pop();\n else if (!m[0].endsWith('/>')) openTags.push(m[1]);\n }\n const lastOpen = openTags[openTags.length - 1];\n if (lastOpen) {\n return {\n suggestions: [{\n label: `/${lastOpen}>`,\n kind: monacoInstance.languages.CompletionItemKind.Keyword,\n insertText: `${lastOpen}>`,\n range: {\n startLineNumber: position.lineNumber, startColumn: position.column,\n endLineNumber: position.lineNumber, endColumn: position.column,\n },\n }],\n };\n }\n }\n return { suggestions: [] };\n },\n });\n } else {\n monacoInstance.languages.setLanguageConfiguration(langId, {\n autoClosingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n ],\n brackets: [['{', '}'], ['[', ']'], ['(', ')']],\n surroundingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"' }, { open: \"'\", close: \"'\" },\n ],\n });\n }\n }\n\n // GraphQL tokenizer + completion\n const langs = monacoInstance.languages.getLanguages();\n if (!langs.some((l: any) => l.id === 'graphql')) {\n monacoInstance.languages.register({ id: 'graphql' });\n monacoInstance.languages.setMonarchTokensProvider('graphql', {\n keywords: ['type', 'input', 'enum', 'union', 'interface', 'scalar', 'schema', 'query', 'mutation', 'subscription', 'fragment', 'on', 'extend', 'implements', 'directive', 'repeatable'],\n typeKeywords: ['String', 'Int', 'Float', 'Boolean', 'ID'],\n operators: ['!', '=', '|', '&', '...'],\n symbols: /[=!|&]+/,\n tokenizer: {\n root: [\n [/#.*$/, 'comment'], [/\"([^\"\\\\]|\\\\.)*\"/, 'string'], [/\"\"\"[\\s\\S]*?\"\"\"/, 'string'],\n [/\\b(type|input|enum|union|interface|scalar|schema|extend|implements|directive|repeatable)\\b/, 'keyword'],\n [/\\b(query|mutation|subscription|fragment|on)\\b/, 'keyword.control'],\n [/\\b(String|Int|Float|Boolean|ID)\\b/, 'type.identifier'],\n [/\\b[A-Z][a-zA-Z0-9_]*\\b/, 'type.identifier'],\n [/\\b[a-z_][a-zA-Z0-9_]*(?=\\s*[:(])/, 'variable'],\n [/\\b[a-z_][a-zA-Z0-9_]*\\b/, 'identifier'],\n [/[{}()\\[\\]]/, '@brackets'], [/[!:=|&]/, 'operator'],\n [/\\$[a-zA-Z_]\\w*/, 'variable'], [/@[a-zA-Z_]\\w*/, 'annotation'],\n ],\n },\n } as any);\n }\n if (language === 'graphql') initGraphQLCompletionProvider(monacoInstance);\n\n // dk + console intellisense — JavaScript editors only\n if (language === 'javascript') {\n if (!dkLibRegistered) {\n monacoInstance.languages.typescript.javascriptDefaults.addExtraLib(DK_TYPE_DEFS, 'dk-globals.d.ts');\n dkLibRegistered = true;\n }\n monacoInstance.languages.registerCompletionItemProvider('javascript', {\n triggerCharacters: ['.'],\n provideCompletionItems: (mdl: any, pos: any) => {\n const textUntilPosition = mdl.getValueInRange({\n startLineNumber: pos.lineNumber, startColumn: 1,\n endLineNumber: pos.lineNumber, endColumn: pos.column,\n });\n const suggestions = getDkCompletions(textUntilPosition, monacoInstance, pos);\n if (suggestions.length > 0) return { suggestions };\n const range = { startLineNumber: pos.lineNumber, endLineNumber: pos.lineNumber, startColumn: pos.column, endColumn: pos.column };\n if (/\\bconsole\\.\\s*$/.test(textUntilPosition)) {\n return {\n suggestions: [\n { label: 'log', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'log(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Log output', range },\n { label: 'info', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'info(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Info output', range },\n { label: 'warn', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'warn(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Warning output', range },\n { label: 'error', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'error(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Error output', range },\n { label: 'debug', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'debug(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Debug output', range },\n ],\n };\n }\n return { suggestions: [] };\n },\n });\n }\n\n if (!value && placeholder) editor.updateOptions({ placeholder });\n onEditorMount?.(editor, monacoInstance);\n editor.updateOptions({ contextmenu: contextMenuMode === 'native' });\n}\n","import { DiffEditor, type DiffOnMount } from '@monaco-editor/react';\nimport { useAppTheme } from '../../../hooks/useAppTheme';\nimport type { DiffEditorViewProps } from './DiffEditorView';\n\n// This file is only ever reached by '@salilvnair/dui/monaco-setup' — see\n// EditorView.monaco.tsx for why that makes a plain top-level import safe.\n\nexport function DiffEditorViewMonacoImpl({\n original,\n modified,\n language = 'sql',\n height = 300,\n readOnly = true,\n renderSideBySide = true,\n wordWrap = false,\n fontSize = 12,\n theme,\n onMount,\n}: DiffEditorViewProps) {\n const appTheme = useAppTheme();\n const resolvedTheme = theme ?? (appTheme === 'light' ? 'vs' : 'vs-dark');\n const h = typeof height === 'number' ? `${height}px` : height;\n\n return (\n <DiffEditor\n height={h}\n language={language}\n theme={resolvedTheme}\n original={original}\n modified={modified}\n onMount={onMount as DiffOnMount | undefined}\n options={{\n readOnly,\n renderSideBySide,\n // Monaco silently drops to inline/unified rendering below its own\n // width threshold regardless of renderSideBySide — this diff editor\n // is often mounted inside narrow panels (e.g. Merkle's expanded\n // table row), so pin side-by-side explicitly instead of letting it\n // auto-collapse.\n useInlineViewWhenSpaceIsLimited: false,\n wordWrap: wordWrap ? 'on' : 'off',\n fontSize,\n automaticLayout: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: 'on',\n folding: true,\n ignoreTrimWhitespace: false,\n }}\n />\n );\n}\n","/**\n * Self-host Monaco Editor — no CDN required.\n * This configures workers inline so the webview CSP doesn't need external access.\n * Also defines a custom \"vscode-dark+\" theme to match real VS Code colors.\n */\nimport { loader } from '@monaco-editor/react';\nimport * as monaco from 'monaco-editor';\nimport { markMonacoReady, registerMonacoEditorImpl, registerMonacoDiffEditorImpl } from './lib/monaco-runtime';\nimport { EditorViewMonacoImpl } from './lib/components/input/EditorView.monaco';\nimport { DiffEditorViewMonacoImpl } from './lib/components/input/DiffEditorView.monaco';\nimport editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker&inline';\nimport jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker&inline';\nimport htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker&inline';\nimport tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker&inline';\nimport {\n javascriptDefaults,\n typescriptDefaults,\n ScriptTarget,\n ModuleKind,\n ModuleResolutionKind,\n JsxEmit,\n} from 'monaco-editor/esm/vs/language/typescript/monaco.contribution';\n\n(window as any).MonacoEnvironment = {\n getWorker(_: string, label: string) {\n if (label === 'json') return new jsonWorker();\n if (label === 'html' || label === 'handlebars' || label === 'razor') return new htmlWorker();\n if (label === 'typescript' || label === 'javascript') return new tsWorker();\n return new editorWorker();\n },\n};\n\n// Define VS Code \"Dark+\" matching theme\nmonaco.editor.defineTheme('daakia-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [\n // JSON\n { token: 'string.key.json', foreground: '9CDCFE' },\n { token: 'string.value.json', foreground: 'CE9178' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'keyword.json', foreground: '569CD6' }, // true/false/null\n // General\n { token: 'string', foreground: 'CE9178' },\n { token: 'keyword', foreground: '569CD6' },\n { token: 'comment', foreground: '6A9955' },\n { token: 'type', foreground: '4EC9B0' },\n { token: 'identifier', foreground: '9CDCFE' },\n { token: 'variable', foreground: '9CDCFE' },\n { token: 'constant', foreground: '4FC1FF' },\n // JS/TS\n { token: 'keyword.js', foreground: 'C586C0' },\n { token: 'keyword.ts', foreground: 'C586C0' },\n { token: 'string.js', foreground: 'CE9178' },\n { token: 'string.ts', foreground: 'CE9178' },\n { token: 'number.js', foreground: 'B5CEA8' },\n { token: 'number.ts', foreground: 'B5CEA8' },\n { token: 'regexp', foreground: 'D16969' },\n { token: 'delimiter', foreground: 'D4D4D4' },\n { token: 'delimiter.bracket', foreground: 'FFD700' },\n // XML/HTML\n { token: 'tag', foreground: '569CD6' },\n { token: 'attribute.name', foreground: '9CDCFE' },\n { token: 'attribute.value', foreground: 'CE9178' },\n // GraphQL\n { token: 'keyword.graphql', foreground: 'C586C0' },\n { token: 'keyword.control.graphql', foreground: 'C586C0' },\n { token: 'type.identifier.graphql', foreground: 'E5C07B' },\n { token: 'variable.graphql', foreground: '9CDCFE' },\n { token: 'string.graphql', foreground: 'CE9178' },\n { token: 'comment.graphql', foreground: '6A9955' },\n { token: 'annotation.graphql', foreground: 'DCDCAA' },\n { token: 'operator.graphql', foreground: 'D4D4D4' },\n { token: 'identifier.graphql', foreground: 'D4D4D4' },\n ],\n colors: {\n 'editor.background': '#1e1e1e',\n 'editor.foreground': '#D4D4D4',\n 'editor.lineHighlightBackground': '#2a2a2a',\n 'editor.selectionBackground': '#264f78',\n 'editor.inactiveSelectionBackground': '#3a3d41',\n 'editorLineNumber.foreground': '#858585',\n 'editorLineNumber.activeForeground': '#C6C6C6',\n 'editorCursor.foreground': '#AEAFAD',\n 'editor.selectionHighlightBackground': '#ADD6FF26',\n 'editorIndentGuide.background': '#404040',\n 'editorIndentGuide.activeBackground': '#707070',\n 'editorBracketMatch.background': '#0064001a',\n 'editorBracketMatch.border': '#888888',\n 'editorGutter.background': '#1e1e1e',\n 'editorWidget.background': '#252526',\n 'editorSuggestWidget.background': '#252526',\n 'editorSuggestWidget.border': '#454545',\n 'editorSuggestWidget.selectedBackground': '#04395e',\n 'list.hoverBackground': '#2a2d2e',\n 'input.background': '#3c3c3c',\n 'focusBorder': '#6366f1',\n },\n});\n\n// Configure TypeScript/JavaScript language service for full IntelliSense\n// allowNonTsExtensions is critical — without it, in-memory models (no .js/.ts extension)\n// won't get definition/reference/rename support from the TypeScript worker.\njavascriptDefaults.setCompilerOptions({\n target: ScriptTarget.ESNext,\n module: ModuleKind.ESNext,\n allowNonTsExtensions: true,\n allowJs: true,\n checkJs: true,\n strict: false,\n noEmit: true,\n esModuleInterop: true,\n moduleResolution: ModuleResolutionKind.NodeJs,\n jsx: JsxEmit.React,\n});\n\njavascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n});\n\n// Ensure all models are immediately synced to the TypeScript worker\n// (required for Go to Definition, Peek, etc. to work)\njavascriptDefaults.setEagerModelSync(true);\ntypescriptDefaults.setEagerModelSync(true);\n\ntypescriptDefaults.setCompilerOptions({\n target: ScriptTarget.ESNext,\n module: ModuleKind.ESNext,\n allowNonTsExtensions: true,\n allowJs: true,\n strict: false,\n noEmit: true,\n esModuleInterop: true,\n moduleResolution: ModuleResolutionKind.NodeJs,\n jsx: JsxEmit.React,\n});\n\n// Define VS Code \"Light+\" matching theme\nmonaco.editor.defineTheme('daakia-light', {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'string.key.json', foreground: '0451a5' },\n { token: 'string.value.json', foreground: 'a31515' },\n { token: 'number', foreground: '09885a' },\n { token: 'keyword.json', foreground: '0000ff' },\n { token: 'string', foreground: 'a31515' },\n { token: 'keyword', foreground: '0000ff' },\n { token: 'comment', foreground: '008000' },\n { token: 'type', foreground: '267f99' },\n { token: 'identifier', foreground: '001080' },\n { token: 'variable', foreground: '001080' },\n { token: 'constant', foreground: '0070c1' },\n { token: 'keyword.js', foreground: 'af00db' },\n { token: 'keyword.ts', foreground: 'af00db' },\n { token: 'string.js', foreground: 'a31515' },\n { token: 'string.ts', foreground: 'a31515' },\n { token: 'number.js', foreground: '09885a' },\n { token: 'number.ts', foreground: '09885a' },\n { token: 'regexp', foreground: 'c41a16' },\n { token: 'delimiter', foreground: '000000' },\n { token: 'delimiter.bracket', foreground: '000000' },\n { token: 'tag', foreground: '800000' },\n { token: 'attribute.name', foreground: 'ff0000' },\n { token: 'attribute.value', foreground: '0451a5' },\n { token: 'keyword.graphql', foreground: 'af00db' },\n { token: 'type.identifier.graphql', foreground: '267f99' },\n { token: 'variable.graphql', foreground: '001080' },\n { token: 'string.graphql', foreground: 'a31515' },\n { token: 'comment.graphql', foreground: '008000' },\n { token: 'operator.graphql', foreground: '000000' },\n { token: 'identifier.graphql', foreground: '000000' },\n ],\n colors: {\n 'editor.background': '#ffffff',\n 'editor.foreground': '#000000',\n 'editor.lineHighlightBackground': '#f5f5f5',\n 'editor.selectionBackground': '#add6ff',\n 'editor.inactiveSelectionBackground': '#e5ebf1',\n 'editorLineNumber.foreground': '#237893',\n 'editorLineNumber.activeForeground': '#0b216f',\n 'editorCursor.foreground': '#000000',\n 'editor.selectionHighlightBackground': '#add6ff4d',\n 'editorIndentGuide.background1': '#d3d3d3',\n 'editorIndentGuide.activeBackground1': '#939393',\n 'editorGutter.background': '#ffffff',\n 'editorWidget.background': '#f3f3f3',\n 'editorSuggestWidget.background': '#f3f3f3',\n 'editorSuggestWidget.border': '#c8c8c8',\n 'editorSuggestWidget.selectedBackground': '#0060c0',\n 'list.hoverBackground': '#f0f0f0',\n 'input.background': '#ffffff',\n 'input.border': '#d1d5db',\n 'focusBorder': '#6366f1',\n },\n});\n\nloader.config({ monaco });\n\n// Expose monaco globally for context menu access to editor instances\n(window as any).monaco = monaco;\n\n// Register the real Monaco-backed implementations, then flip the shared\n// readiness gate — EditorView/DiffEditorView now render these instead of\n// their lightweight fallback.\nregisterMonacoEditorImpl(EditorViewMonacoImpl);\nregisterMonacoDiffEditorImpl(DiffEditorViewMonacoImpl);\nmarkMonacoReady();\n\n/** Call this whenever the app theme changes to re-theme all open Monaco editors */\nexport function applyMonacoTheme(theme: 'dark' | 'light') {\n monaco.editor.setTheme(theme === 'dark' ? 'daakia-dark' : 'daakia-light');\n}\n\nexport { monaco };\n"],"names":["resolveTheme","vsKind","_a","useAppTheme","theme","setTheme","useState","useEffect","update","htmlObs","bodyObs","DK_TYPE_DEFS","getDkCompletions","_text","_monaco","_pos","useBreakpointGutter","options","breakpoints","disabledBreakpoints","conditionalBreakpointLines","pausedLine","onToggleBreakpoint","onGlyphContextMenu","editorRef","useRef","monacoRef","decorationsRef","pausedDecoRef","hoverDecoRef","disposablesRef","isBreakpointableLine","useCallback","lineNo","editor","model","monaco","decos","line","isDisabled","isConditional","glyphClass","d","domNode","marginContainer","d1","e","glyphRightClick","d2a","domHandler","ev","d3","lineDecos","_b","_d","_c","d4","state","useDebugStore","selector","dkLibRegistered","EXT_MAP","formatXml","xml","depth","result","tokens","token","isClosing","isSelfClosing","formatYaml","yaml","formatSql","sql","CLAUSE_RE","EditorViewSimple","value","onChange","language","height","minHeight","readOnly","placeholder","wordWrap","size","fontSize","className","bordered","onEditorMount","contextMenuMode","contextMenuItems","editorOptions","accentColor","base","useEditorBase","resolvedFontSize","modelPath","useMemo","resolvedHeight","containerHeight","m","handleMount","monacoInstance","mountCommon","resolvedTheme","EditorShell","jsx","Editor","v","buildOptions","EditorViewDebug","attachBreakpointGutter","navigateLine","s","EditorViewMonacoImpl","debugSupported","rest","glyphMargin","o","_e","_f","_g","_h","_i","_j","_k","relayout","parent","ro","KM","KC","ed","sel","pos","text","langId","raw","formatted","mdl","position","textUntilPosition","openTags","tagRegex","lastOpen","l","suggestions","range","DiffEditorViewMonacoImpl","original","modified","renderSideBySide","onMount","appTheme","h","DiffEditor","_","label","jsonWorker","htmlWorker","tsWorker","editorWorker","javascriptDefaults","ScriptTarget","ModuleKind","ModuleResolutionKind","JsxEmit","typescriptDefaults","loader","registerMonacoEditorImpl","registerMonacoDiffEditorImpl","markMonacoReady","applyMonacoTheme"],"mappings":"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"}
1
+ {"version":3,"file":"monaco-setup.js","sources":["../src/hooks/useAppTheme.ts","../src/services/dk-repl.ts","../src/hooks/useBreakpointGutter.ts","../src/store/debug-store.ts","../src/lib/components/input/EditorView.monaco.tsx","../src/lib/components/input/DiffEditorView.monaco.tsx","../src/monaco-setup.ts"],"sourcesContent":["/**\n * useAppTheme — returns 'dark' | 'light' and re-renders on change.\n *\n * Detects theme from (in priority order):\n * 1. VS Code webview: data-vscode-theme-kind on <body> (set by VS Code host)\n * 2. Generic: data-theme on <html> (daakia / other web apps)\n * 3. Fallback: 'dark'\n */\nimport { useState, useEffect } from 'react';\n\nfunction resolveTheme(): 'dark' | 'light' {\n const vsKind =\n document.body?.getAttribute('data-vscode-theme-kind') ||\n document.documentElement.getAttribute('data-vscode-theme-kind');\n if (vsKind) return vsKind === 'vscode-light' ? 'light' : 'dark';\n return (document.documentElement.getAttribute('data-theme') as 'dark' | 'light') || 'dark';\n}\n\nexport function useAppTheme(): 'dark' | 'light' {\n const [theme, setTheme] = useState<'dark' | 'light'>(resolveTheme);\n\n useEffect(() => {\n const update = () => setTheme(resolveTheme());\n const htmlObs = new MutationObserver(update);\n htmlObs.observe(document.documentElement, { attributes: true, attributeFilter: ['data-theme', 'data-vscode-theme-kind'] });\n const bodyObs = new MutationObserver(update);\n if (document.body) bodyObs.observe(document.body, { attributes: true, attributeFilter: ['data-vscode-theme-kind'] });\n return () => { htmlObs.disconnect(); bodyObs.disconnect(); };\n }, []);\n\n return theme;\n}\n","// Stub — dk-repl completions are daakia-specific and not used in standalone DUI.\nexport const DK_TYPE_DEFS = '';\nexport function getDkCompletions(_text: string, _monaco: unknown, _pos: unknown): unknown[] {\n return [];\n}\n","import { useRef, useEffect, useCallback, MutableRefObject } from 'react';\n\nexport interface BreakpointGutterOptions {\n breakpoints?: number[];\n disabledBreakpoints?: number[];\n conditionalBreakpointLines?: number[];\n /** Currently paused line (1-based) — shows yellow highlight */\n pausedLine?: number | null;\n onToggleBreakpoint?: (line: number) => void;\n onGlyphContextMenu?: (line: number, pos: { x: number; y: number }) => void;\n}\n\n/**\n * Encapsulates all breakpoint gutter logic for a Monaco editor:\n * - Line validation (only skips empty lines)\n * - Breakpoint dot decorations (red/disabled/conditional)\n * - Glyph margin click & context-menu handlers\n * - Hover hint (faded dot on valid, non-breakpointed lines)\n *\n * Returns `attach(editor, monaco)` to be called in onMount,\n * and handles cleanup/decoration updates via effects.\n */\nexport function useBreakpointGutter(options: BreakpointGutterOptions) {\n const {\n breakpoints,\n disabledBreakpoints,\n conditionalBreakpointLines,\n pausedLine,\n onToggleBreakpoint,\n onGlyphContextMenu,\n } = options;\n\n const editorRef = useRef<any>(null);\n const monacoRef = useRef<any>(null);\n const decorationsRef = useRef<string[]>([]);\n const pausedDecoRef = useRef<string[]>([]);\n const hoverDecoRef = useRef<string[]>([]);\n const disposablesRef = useRef<any[]>([]);\n\n const isBreakpointableLine = useCallback((lineNo: number): boolean => {\n const editor = editorRef.current;\n if (!editor) return true;\n const model = editor.getModel();\n if (!model || lineNo > model.getLineCount()) return false;\n const lineContent = model.getLineContent(lineNo).trim();\n return !!lineContent;\n }, []);\n\n // Sync breakpoint decorations when breakpoints change\n useEffect(() => {\n const editor = editorRef.current;\n const monaco = monacoRef.current;\n if (!editor || !monaco) return;\n\n const decos: any[] = [];\n\n if (breakpoints) {\n for (const line of breakpoints) {\n // Skip breakpoint glyph on the paused line — the arrow \"gulps\" it\n if (pausedLine && line === pausedLine) continue;\n\n const isDisabled = disabledBreakpoints?.includes(line);\n const isConditional = conditionalBreakpointLines?.includes(line);\n let glyphClass = 'daakia-bp-glyph';\n if (isDisabled) glyphClass = 'daakia-bp-glyph--disabled';\n else if (isConditional) glyphClass = 'daakia-bp-glyph--conditional';\n\n decos.push({\n range: new monaco.Range(line, 1, line, 1),\n options: {\n isWholeLine: true,\n className: isDisabled ? '' : 'daakia-bp-line',\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n glyphMarginClassName: glyphClass,\n glyphMarginHoverMessage: {\n value: isConditional ? 'Conditional Breakpoint' : isDisabled ? 'Disabled Breakpoint' : 'Breakpoint',\n },\n },\n });\n }\n }\n\n decorationsRef.current = editor.deltaDecorations(decorationsRef.current, decos);\n }, [breakpoints, disabledBreakpoints, conditionalBreakpointLines, pausedLine]);\n\n // Sync paused-line highlight (yellow background + arrow in glyph margin)\n useEffect(() => {\n const editor = editorRef.current;\n const monaco = monacoRef.current;\n if (!editor || !monaco) return;\n\n if (pausedLine) {\n // Use combined class when paused line is also a breakpoint line\n const isOnBreakpoint = breakpoints?.includes(pausedLine);\n const glyphClass = isOnBreakpoint\n ? 'daakia-paused-line__arrow daakia-paused-line__arrow--with-bp'\n : 'daakia-paused-line__arrow';\n\n pausedDecoRef.current = editor.deltaDecorations(pausedDecoRef.current, [{\n range: new monaco.Range(pausedLine, 1, pausedLine, 1),\n options: {\n isWholeLine: true,\n className: 'daakia-paused-line',\n glyphMarginClassName: glyphClass,\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n },\n }]);\n // Scroll to the paused line\n editor.revealLineInCenter(pausedLine);\n } else {\n pausedDecoRef.current = editor.deltaDecorations(pausedDecoRef.current, []);\n }\n }, [pausedLine, breakpoints]);\n\n // Cleanup disposables on unmount\n useEffect(() => {\n return () => {\n disposablesRef.current.forEach(d => d?.dispose?.());\n disposablesRef.current = [];\n };\n }, []);\n\n /**\n * Call this inside Monaco's onMount handler to attach all gutter interactions.\n * Returns the disposables (also tracked internally for auto-cleanup).\n */\n const attach = useCallback((editor: any, monaco: any) => {\n editorRef.current = editor;\n monacoRef.current = monaco;\n\n // Mark the entire margin container so RightClickMenu can detect gutter clicks\n const domNode = editor.getDomNode();\n if (domNode) {\n const marginContainer = domNode.querySelector('.margin');\n if (marginContainer) marginContainer.setAttribute('data-daakia-bp-gutter', '');\n }\n\n // Left-click to toggle breakpoint (right-click is handled separately for context menu)\n if (onToggleBreakpoint) {\n const d1 = editor.onMouseDown((e: any) => {\n if (e.event.leftButton && e.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) {\n const line = e.target.position?.lineNumber;\n if (line && isBreakpointableLine(line)) onToggleBreakpoint(line);\n }\n });\n disposablesRef.current.push(d1);\n }\n\n // Right-click context menu — use DOM-level listener to intercept BEFORE Monaco shows its own menu\n if (onGlyphContextMenu) {\n let glyphRightClick: { line: number; x: number; y: number } | null = null;\n\n // Detect right-click on any gutter zone (glyph margin, line numbers, line decorations)\n const d2a = editor.onMouseDown((e: any) => {\n if (\n e.event.rightButton &&\n (e.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN ||\n e.target.type === monaco.editor.MouseTargetType.GUTTER_LINE_NUMBERS ||\n e.target.type === monaco.editor.MouseTargetType.GUTTER_LINE_DECORATIONS)\n ) {\n const line = e.target.position?.lineNumber;\n if (line && isBreakpointableLine(line)) {\n glyphRightClick = { line, x: e.event.posx, y: e.event.posy };\n }\n }\n });\n disposablesRef.current.push(d2a);\n\n // DOM-level contextmenu intercept — prevents Monaco's built-in menu on gutter area\n const domNode = editor.getDomNode();\n if (domNode) {\n const domHandler = (ev: MouseEvent) => {\n if (glyphRightClick) {\n ev.preventDefault();\n ev.stopPropagation();\n onGlyphContextMenu(glyphRightClick.line, { x: glyphRightClick.x, y: glyphRightClick.y });\n glyphRightClick = null;\n } else if ((ev.target as HTMLElement).closest('[data-daakia-bp-gutter]')) {\n // Fallback: block Monaco's default menu for any gutter right-click\n ev.preventDefault();\n ev.stopPropagation();\n }\n };\n domNode.addEventListener('contextmenu', domHandler, true); // capture phase\n disposablesRef.current.push({ dispose: () => domNode.removeEventListener('contextmenu', domHandler, true) });\n }\n }\n\n // Hover hint: faded dot on valid non-breakpointed lines\n if (onToggleBreakpoint) {\n const d3 = editor.onMouseMove((e: any) => {\n if (e.target.type === monaco.editor.MouseTargetType.GUTTER_GLYPH_MARGIN) {\n const line = e.target.position?.lineNumber;\n if (line && isBreakpointableLine(line)) {\n const model = editor.getModel();\n if (model) {\n const lineDecos = model.getLineDecorations(line);\n const hasBpDeco = lineDecos?.some((d: any) =>\n d.options?.glyphMarginClassName?.startsWith('daakia-bp-glyph') &&\n !d.options?.glyphMarginClassName?.includes('hover')\n );\n if (!hasBpDeco) {\n hoverDecoRef.current = editor.deltaDecorations(hoverDecoRef.current, [{\n range: new monaco.Range(line, 1, line, 1),\n options: {\n isWholeLine: false,\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n glyphMarginClassName: 'daakia-bp-glyph--hover',\n glyphMarginHoverMessage: { value: 'Left-click to add a breakpoint' },\n },\n }]);\n return;\n }\n }\n }\n }\n // Clear hover when not on glyph margin\n if (hoverDecoRef.current.length) {\n hoverDecoRef.current = editor.deltaDecorations(hoverDecoRef.current, []);\n }\n });\n disposablesRef.current.push(d3);\n\n const d4 = editor.onMouseLeave(() => {\n if (hoverDecoRef.current.length) {\n hoverDecoRef.current = editor.deltaDecorations(hoverDecoRef.current, []);\n }\n });\n disposablesRef.current.push(d4);\n }\n\n // Apply breakpoint decorations immediately after attach (fixes disappearing on remount)\n if (breakpoints) {\n const decos: any[] = [];\n for (const line of breakpoints) {\n const isDisabled = disabledBreakpoints?.includes(line);\n const isConditional = conditionalBreakpointLines?.includes(line);\n let glyphClass = 'daakia-bp-glyph';\n if (isDisabled) glyphClass = 'daakia-bp-glyph--disabled';\n else if (isConditional) glyphClass = 'daakia-bp-glyph--conditional';\n\n decos.push({\n range: new monaco.Range(line, 1, line, 1),\n options: {\n isWholeLine: true,\n className: isDisabled ? '' : 'daakia-bp-line',\n stickiness: monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n glyphMarginClassName: glyphClass,\n glyphMarginHoverMessage: {\n value: isConditional ? 'Conditional Breakpoint' : isDisabled ? 'Disabled Breakpoint' : 'Breakpoint',\n },\n },\n });\n }\n decorationsRef.current = editor.deltaDecorations(decorationsRef.current, decos);\n }\n }, [onToggleBreakpoint, onGlyphContextMenu, isBreakpointableLine, breakpoints, disabledBreakpoints, conditionalBreakpointLines]);\n\n return { attach };\n}\n","// Stub — debug store is daakia-specific.\ninterface DebugState {\n navigateLine: number | null;\n setNavigateLine: (line: number | null) => void;\n active: boolean;\n status: 'idle' | 'running' | 'paused';\n variables: { name: string; value: unknown; type: string }[];\n}\n\nconst state: DebugState = {\n navigateLine: null,\n setNavigateLine: () => {},\n active: false,\n status: 'idle',\n variables: [],\n};\n\nexport function useDebugStore<T>(selector: (s: DebugState) => T): T {\n return selector(state);\n}\nuseDebugStore.getState = () => state;\n","import Editor, { type OnMount } from '@monaco-editor/react';\nimport { useRef, useMemo, useEffect } from 'react';\nimport { useAppTheme } from '../../../hooks/useAppTheme';\nimport { getDkCompletions, DK_TYPE_DEFS } from '../../../services/dk-repl';\nimport { initGraphQLCompletionProvider } from '../../../services/graphql-completion';\nimport { useEditorBase } from '../../core/EditorBase';\nimport { EditorShell } from './EditorView.shell';\nimport type { EditorViewProps, EditorLanguage, EditorOptions, EditorContextMenuMode } from './EditorView';\n\n// ─── Debug-only imports — only loaded when debugSupported=true ─────────────────\nimport { useBreakpointGutter } from '../../../hooks/useBreakpointGutter';\nimport { useDebugVariableHover } from '../../../hooks/useDebugVariableHover';\nimport { useDebugStore } from '../../../store/debug-store';\n\n// This file is only ever reached by '@salilvnair/dui/monaco-setup' — a\n// separate, explicit opt-in subpath, never referenced (statically or via\n// lazy()) from the main package entry. That's what makes a plain top-level\n// import safe here: importing monaco-setup already requires Monaco installed.\n// See monaco-runtime.ts for why an in-place lazy()/dynamic-import approach\n// inside the always-loaded EditorView.tsx does not work.\n\nlet dkLibRegistered = false;\n\n// Monaco's language configuration and completion providers are GLOBAL per\n// language id, not per editor — registering them inside every mount stacked a\n// fresh provider on each remount (N editors open → the same suggestion N times).\nconst tagLangConfigured = new Set<string>();\nconst plainLangConfigured = new Set<string>();\n\n// HTML elements that never take a closing tag. XML has no such concept — every\n// element there is closed or self-closed — so this only applies to language 'html'.\nconst VOID_TAGS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr',\n]);\n\n// An opening tag ending exactly at the caret. The attribute group tolerates\n// quoted '>' (e.g. <a title=\"a > b\">) by consuming whole quoted strings first.\nconst OPEN_TAG_AT_CARET = /<([_:a-zA-Z][-_:.\\w]*)((?:\"[^\"]*\"|'[^']*'|[^'\">])*)>$/;\nconst ANY_TAG = /<\\/?([_:a-zA-Z][-_:.\\w]*)((?:\"[^\"]*\"|'[^']*'|[^'\">])*)>/g;\n\nfunction escapeRe(s: string) { return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); }\n\n/** Innermost still-open tag in `text`, or null. Used to complete `</`. */\nfunction innermostOpenTag(text: string): string | null {\n const scrubbed = text.replace(/<!--[\\s\\S]*?-->/g, '').replace(/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/g, '');\n const stack: string[] = [];\n ANY_TAG.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = ANY_TAG.exec(scrubbed)) !== null) {\n const [full, name, attrs] = m;\n if (full.startsWith('</')) {\n const at = stack.lastIndexOf(name);\n if (at !== -1) stack.length = at; else stack.pop();\n } else if (!attrs.trimEnd().endsWith('/')) {\n stack.push(name);\n }\n }\n return stack.length ? stack[stack.length - 1] : null;\n}\n\nfunction configureTagLanguage(monacoInstance: any, langId: 'xml' | 'html') {\n if (tagLangConfigured.has(langId)) return;\n tagLangConfigured.add(langId);\n const config = {\n // Deliberately no { open: '<', close: '>' } here — matching VS Code's own\n // html/xml language configuration. Auto-inserting '>' would mean the user's\n // own '>' keystroke merely skips over it, producing no model change, and\n // tag auto-closing (which is what people actually expect) could never fire.\n autoClosingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n { open: '<!--', close: '-->', notIn: ['comment', 'string'] },\n ],\n brackets: [['{', '}'], ['[', ']'], ['(', ')'], ['<', '>']],\n surroundingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"' }, { open: \"'\", close: \"'\" }, { open: '<', close: '>' },\n ],\n comments: { blockComment: ['<!--', '-->'] },\n onEnterRules: [\n {\n // Enter between <a>|</a> — open the pair onto three lines, caret indented.\n beforeText: /<([_:\\w][_:\\w\\-.\\d]*)([^/>]*(?!\\/)>)\\s*$/i,\n afterText: /^<\\/([_:\\w][_:\\w\\-.\\d]*)\\s*>$/i,\n action: { indentAction: monacoInstance.languages.IndentAction.IndentOutdent },\n },\n {\n beforeText: /<([_:\\w][_:\\w\\-.\\d]*)([^/>]*(?!\\/)>)\\s*$/i,\n action: { indentAction: monacoInstance.languages.IndentAction.Indent },\n },\n ],\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n };\n\n // Monaco registers its own xml/html language configuration from a LAZILY\n // IMPORTED module, and among equal-priority registrations the last one wins.\n // A plain synchronous call here therefore loses the race and their config —\n // which auto-closes '<' with '>' — stays in force, so typing '<' produced\n // '<>' and a completed '</tag' left a stray '>' behind. Re-apply on a short\n // bounded schedule (disposing the previous registration so only one of ours\n // is ever live) to land after their import resolves, whenever that is.\n let live = monacoInstance.languages.setLanguageConfiguration(langId, config);\n for (const delay of [50, 250, 1000]) {\n setTimeout(() => {\n const next = monacoInstance.languages.setLanguageConfiguration(langId, config);\n live?.dispose?.();\n live = next;\n }, delay);\n }\n}\n\n/**\n * VS Code-style tag auto-closing for XML/HTML.\n *\n * Monaco's basic-languages XML support has no tag awareness at all — that lives\n * in VS Code's HTML language service, which isn't bundled here. So we do it\n * ourselves: typing '>' completes the element, and typing '/' after '<' fills\n * in the innermost open tag. Both are plain model edits, so undo/redo and the\n * {{var}} decorations keep working normally.\n *\n * This relies on '<' NOT being an auto-closing pair (see configureTagLanguage):\n * if Monaco auto-inserted '>', typing '>' would only skip over the existing one\n * and produce no content change for us to react to.\n */\nfunction installTagAutoClose(editor: any, monacoInstance: any) {\n let reentrant = false;\n const sub = editor.onDidChangeModelContent((e: any) => {\n if (reentrant || e.isUndoing || e.isRedoing) return;\n const model = editor.getModel();\n if (!model) return;\n const langId = model.getLanguageId();\n if (langId !== 'xml' && langId !== 'html') return;\n // Only react to a single typed character — never to paste, multi-cursor or\n // a programmatic setValue, where guessing the user's intent is wrong.\n if (e.changes.length !== 1) return;\n const change = e.changes[0];\n if (change.text !== '>' && change.text !== '/') return;\n\n const line = change.range.startLineNumber;\n const column = change.range.startColumn + change.text.length;\n const before = model.getValueInRange({\n startLineNumber: 1, startColumn: 1, endLineNumber: line, endColumn: column,\n });\n\n let insert: string;\n let caretShift: number;\n let consumeNext = 0; // characters after the caret this edit should replace\n\n if (change.text === '>') {\n const open = OPEN_TAG_AT_CARET.exec(before);\n if (!open) return;\n if (open[2].trimEnd().endsWith('/')) return; // <br/> — already self-closed\n if (langId === 'html' && VOID_TAGS.has(open[1].toLowerCase())) return;\n const rest = model.getValueInRange({\n startLineNumber: line, startColumn: column,\n endLineNumber: line, endColumn: model.getLineMaxColumn(line),\n });\n if (new RegExp(`^\\\\s*</${escapeRe(open[1])}\\\\s*>`).test(rest)) return; // closing tag already sits here\n insert = `</${open[1]}>`;\n caretShift = 0; // caret stays between the tags\n } else {\n if (!/<\\/$/.test(before)) return;\n const tag = innermostOpenTag(before.slice(0, -2));\n if (!tag) return;\n insert = `${tag}>`;\n caretShift = insert.length; // caret lands after the completed tag\n // Swallow a '>' sitting right at the caret. It can only be one Monaco\n // auto-inserted when '<' was typed — '</>' is not valid markup — and\n // leaving it behind produced '</tag>>'. Defensive: the language config\n // above normally prevents that pair from existing at all.\n if (model.getLineContent(line).charAt(column - 1) === '>') consumeNext = 1;\n }\n\n reentrant = true;\n try {\n editor.executeEdits(\n 'daakia.autoCloseTag',\n [{ range: new monacoInstance.Range(line, column, line, column + consumeNext), text: insert, forceMoveMarkers: false }],\n [new monacoInstance.Selection(line, column + caretShift, line, column + caretShift)],\n );\n } finally {\n reentrant = false;\n }\n });\n editor.onDidDispose(() => sub.dispose());\n}\n\nconst EXT_MAP: Partial<Record<EditorLanguage, string>> = {\n javascript: '.js', typescript: '.ts', json: '.json', xml: '.xml',\n html: '.html', css: '.css', graphql: '.graphql', python: '.py',\n yaml: '.yaml', sql: '.sql', markdown: '.md', plaintext: '.txt', proto: '.proto',\n};\n\nfunction formatXml(xml: string): string {\n const INDENT = ' ';\n let depth = 0;\n let result = '';\n const tokens = xml.replace(/>\\s*</g, '><').split(/(?<=>)(?=<)/);\n for (const token of tokens) {\n const isClosing = /^<\\//.test(token);\n const isSelfClosing = /\\/>$/.test(token) || /^<!/.test(token) || /^<\\?/.test(token);\n if (isClosing) depth = Math.max(0, depth - 1);\n result += INDENT.repeat(depth) + token.trim() + '\\n';\n if (!isClosing && !isSelfClosing && /^<[^/!?]/.test(token)) depth++;\n }\n return result.trimEnd();\n}\n\nfunction formatYaml(yaml: string): string {\n return yaml\n .split('\\n')\n .map(line => line.trimEnd())\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n}\n\nfunction formatSql(sql: string): string {\n const CLAUSE_RE = /\\b(SELECT|DISTINCT|FROM|WHERE|INNER JOIN|LEFT JOIN|RIGHT JOIN|FULL OUTER JOIN|FULL JOIN|CROSS JOIN|JOIN|ON|AND|OR|NOT|ORDER BY|GROUP BY|HAVING|LIMIT|OFFSET|UNION ALL|UNION|INTERSECT|EXCEPT|INSERT INTO|VALUES|UPDATE|SET|DELETE FROM|CREATE TABLE|DROP TABLE|ALTER TABLE|WITH)\\b/gi;\n return sql\n .replace(/\\s+/g, ' ')\n .replace(CLAUSE_RE, '\\n$1')\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line.length > 0)\n .join('\\n');\n}\n\n// ─── Simple variant — no debug hooks at all ───────────────────────────────────\n\nfunction EditorViewSimple({\n value, onChange, language = 'json', height = '200px', minHeight,\n readOnly = false, placeholder, wordWrap = true, size, fontSize,\n className = '', bordered = false, onEditorMount, contextMenuMode = 'native', contextMenuItems, editorOptions, accentColor,\n}: EditorViewProps) {\n const base = useEditorBase(size);\n const resolvedFontSize = fontSize ?? base.fontSize;\n const theme = useAppTheme();\n const editorRef = useRef<any>(null);\n const disposablesRef = useRef<any[]>([]);\n const modelPath = useMemo(\n () => `inmemory://daakia/${crypto.randomUUID()}${EXT_MAP[language] || '.txt'}`,\n [language],\n );\n const resolvedHeight = typeof height === 'number' ? `${height}px` : height;\n const containerHeight = minHeight ? `max(${resolvedHeight}, ${minHeight}px)` : resolvedHeight;\n\n useEffect(() => {\n return () => {\n disposablesRef.current.forEach(d => d?.dispose?.());\n disposablesRef.current = [];\n const editor = editorRef.current;\n if (editor) { const m = editor.getModel(); if (m) m.dispose(); }\n };\n }, []);\n\n // Placeholder is otherwise only applied inside mountCommon, i.e. once at mount — so a\n // parent that swaps it later (e.g. changing Content Type from JSON to form-urlencoded)\n // kept showing the original example. Keep it in sync with the prop.\n useEffect(() => {\n editorRef.current?.updateOptions({ placeholder } as any);\n }, [placeholder]);\n\n // No manual model.setValue() sync here — the controlled `value` prop on\n // <Editor> below already keeps the model in sync on every change (that's\n // what \"controlled\" means for @monaco-editor/react, readOnly or not). A\n // redundant manual setValue() bypass used to live here; it fired in a\n // separate, later effect than the library's own internal sync, triggering\n // a second, out-of-band re-tokenization pass — which is what caused\n // readOnly editors (e.g. Daakia's response JSON viewer) to briefly render\n // monochrome and only pick up real syntax colors a moment later.\n\n const handleMount: OnMount = (editor, monacoInstance) => {\n editorRef.current = editor;\n disposablesRef.current = [];\n mountCommon(editor, monacoInstance, { language, value, placeholder, onEditorMount, contextMenuMode });\n };\n\n const resolvedTheme = theme === 'light' ? 'daakia-light' : 'daakia-dark';\n\n return (\n <EditorShell bordered={bordered} containerHeight={containerHeight} contextMenuMode={contextMenuMode} contextMenuItems={contextMenuItems} accentColor={accentColor}>\n <Editor\n height=\"100%\"\n language={language}\n path={modelPath}\n value={value}\n theme={resolvedTheme}\n onChange={v => onChange?.(v ?? '')}\n onMount={handleMount}\n options={buildOptions({ readOnly, fontSize: resolvedFontSize, wordWrap, glyphMargin: false, contextMenuMode, editorOptions, theme: resolvedTheme })}\n />\n </EditorShell>\n );\n}\n\n// ─── Debug variant — subscribes to debug store + breakpoint hooks ─────────────\n\nfunction EditorViewDebug({\n value, onChange, language = 'json', height = '200px', minHeight,\n readOnly = false, placeholder, wordWrap = true, size, fontSize,\n className = '', bordered = false,\n breakpoints, disabledBreakpoints, conditionalBreakpointLines, pausedLine,\n onToggleBreakpoint, onGlyphContextMenu, onEditorMount, contextMenuMode = 'native', contextMenuItems, editorOptions, accentColor,\n}: EditorViewProps) {\n const base = useEditorBase(size);\n const resolvedFontSize = fontSize ?? base.fontSize;\n const theme = useAppTheme();\n const editorRef = useRef<any>(null);\n const disposablesRef = useRef<any[]>([]);\n const modelPath = useMemo(\n () => `inmemory://daakia/${crypto.randomUUID()}${EXT_MAP[language] || '.txt'}`,\n [language],\n );\n const resolvedHeight = typeof height === 'number' ? `${height}px` : height;\n const containerHeight = minHeight ? `max(${resolvedHeight}, ${minHeight}px)` : resolvedHeight;\n\n // Debug hooks — always called here (React rules), never called in Simple variant\n const { attach: attachBreakpointGutter } = useBreakpointGutter({\n breakpoints, disabledBreakpoints, conditionalBreakpointLines, pausedLine,\n onToggleBreakpoint, onGlyphContextMenu,\n });\n const { attach: attachDebugHover } = useDebugVariableHover();\n const navigateLine = useDebugStore(s => s.navigateLine);\n\n useEffect(() => {\n return () => {\n disposablesRef.current.forEach(d => d?.dispose?.());\n disposablesRef.current = [];\n const editor = editorRef.current;\n if (editor) { const m = editor.getModel(); if (m) m.dispose(); }\n };\n }, []);\n\n // Placeholder is otherwise only applied inside mountCommon, i.e. once at mount — so a\n // parent that swaps it later (e.g. changing Content Type from JSON to form-urlencoded)\n // kept showing the original example. Keep it in sync with the prop.\n useEffect(() => {\n editorRef.current?.updateOptions({ placeholder } as any);\n }, [placeholder]);\n\n // See EditorViewSimple above — no manual model.setValue() sync needed;\n // the controlled `value` prop on <Editor> below already handles it, and a\n // redundant bypass here caused the same delayed-tokenization symptom.\n\n useEffect(() => {\n if (!navigateLine || !editorRef.current || !breakpoints) return;\n editorRef.current.revealLineInCenter(navigateLine);\n editorRef.current.setPosition({ lineNumber: navigateLine, column: 1 });\n useDebugStore.getState().setNavigateLine(null);\n }, [navigateLine, breakpoints]);\n\n const handleMount: OnMount = (editor, monacoInstance) => {\n editorRef.current = editor;\n disposablesRef.current = [];\n // Attach debug features\n attachBreakpointGutter(editor, monacoInstance);\n attachDebugHover(editor, monacoInstance);\n mountCommon(editor, monacoInstance, { language, value, placeholder, onEditorMount, contextMenuMode });\n };\n\n const resolvedTheme = theme === 'light' ? 'daakia-light' : 'daakia-dark';\n\n return (\n <EditorShell bordered={bordered} containerHeight={containerHeight} contextMenuMode={contextMenuMode} contextMenuItems={contextMenuItems} accentColor={accentColor}>\n <Editor\n height=\"100%\"\n language={language}\n path={modelPath}\n value={value}\n theme={resolvedTheme}\n onChange={v => onChange?.(v ?? '')}\n onMount={handleMount}\n options={buildOptions({ readOnly, fontSize: resolvedFontSize, wordWrap, glyphMargin: !!onToggleBreakpoint, contextMenuMode, editorOptions, theme: resolvedTheme })}\n />\n </EditorShell>\n );\n}\n\n// ─── Public export — registered into monaco-runtime by monaco-setup.ts ──────\n\nexport function EditorViewMonacoImpl({ debugSupported = false, className = '', ...rest }: EditorViewProps) {\n if (debugSupported) return <EditorViewDebug className={className} {...rest} />;\n return <EditorViewSimple className={className} {...rest} />;\n}\n\n// ─── Shared Monaco options builder ───────────────────────────────────────────\n\nfunction buildOptions({ readOnly, fontSize, wordWrap, glyphMargin, contextMenuMode = 'native', editorOptions, theme }: {\n readOnly: boolean;\n fontSize: number;\n wordWrap: boolean;\n glyphMargin: boolean;\n contextMenuMode?: EditorContextMenuMode;\n editorOptions?: EditorOptions;\n theme: string;\n}) {\n const o = editorOptions ?? {};\n return {\n // Baked into construction options (not just the top-level <Editor theme=\"\"> prop)\n // so Monaco applies it before its first paint — @monaco-editor/react creates the\n // editor first and only calls the global setTheme() afterward as a separate step,\n // which is what caused a flash of the default white 'vs' theme on every remount\n // (tab switch, subtab switch, new-tab-then-close) before this fix.\n theme,\n // ── Consumer-overridable defaults ────────────────────────────────────────\n lineNumbers: (o.lineNumbers ?? 'on') as 'on' | 'off' | 'relative' | 'interval',\n minimap: { enabled: o.minimap ?? false },\n scrollBeyondLastLine: o.scrollBeyondLastLine ?? false,\n smoothScrolling: o.smoothScrolling ?? false,\n mouseWheelZoom: o.mouseWheelZoom ?? false,\n folding: o.folding ?? true,\n showFoldingControls: (o.showFoldingControls ?? 'mouseover') as 'always' | 'never' | 'mouseover',\n tabSize: o.tabSize ?? 2,\n formatOnPaste: o.formatOnPaste ?? true,\n formatOnType: o.formatOnType ?? true,\n autoIndent: (o.autoIndent ?? 'full') as 'none' | 'keep' | 'brackets' | 'advanced' | 'full',\n renderWhitespace: (o.renderWhitespace ?? 'selection') as 'none' | 'boundary' | 'selection' | 'trailing' | 'all',\n matchBrackets: (o.matchBrackets ?? 'always') as 'never' | 'near' | 'always',\n bracketPairColorization: { enabled: o.bracketPairColorization ?? true },\n colorDecorators: o.colorDecorators ?? true,\n linkedEditing: o.linkedEditing ?? true,\n copyWithSyntaxHighlighting: o.copyWithSyntaxHighlighting ?? true,\n quickSuggestions: o.quickSuggestions ?? true,\n suggestOnTriggerCharacters: o.suggestOnTriggerCharacters ?? true,\n acceptSuggestionOnEnter: (o.acceptSuggestionOnEnter ?? 'on') as 'on' | 'off' | 'smart',\n hover: { enabled: o.hover ?? true },\n parameterHints: { enabled: o.parameterHints ?? true },\n codeLens: o.codeLens ?? false,\n inlayHints: { enabled: (o.inlayHints ?? false) ? 'on' as const : 'off' as const },\n padding: { top: o.padding?.top ?? 8, bottom: o.padding?.bottom ?? 8 },\n ...(o.cursorStyle && { cursorStyle: o.cursorStyle as any }),\n ...(o.cursorBlinking && { cursorBlinking: o.cursorBlinking as any }),\n ...(o.lineHeight && { lineHeight: o.lineHeight }),\n ...(o.letterSpacing && { letterSpacing: o.letterSpacing }),\n ...(o.rulers && { rulers: o.rulers }),\n ...(o.lineDecorationsWidth !== undefined && { lineDecorationsWidth: o.lineDecorationsWidth }),\n ...(o.lineNumbersMinChars !== undefined && { lineNumbersMinChars: o.lineNumbersMinChars }),\n // ── Prop-level overrides (top-level EditorView props win over editorOptions) ─\n readOnly,\n fontSize,\n wordWrap: (o.wordWrap ?? (wordWrap ? 'on' : 'off')) as 'off' | 'on' | 'wordWrapColumn' | 'bounded',\n // ── DUI structural — never overridable ──────────────────────────────────\n automaticLayout: true,\n glyphMargin,\n renderLineHighlight: (o.renderLineHighlight ?? (glyphMargin ? 'line' : 'none')) as 'none' | 'gutter' | 'line' | 'all',\n fixedOverflowWidgets: true,\n contextmenu: contextMenuMode === 'native',\n overviewRulerLanes: 0,\n hideCursorInOverviewRuler: true,\n overviewRulerBorder: false,\n scrollbar: {\n vertical: o.scrollbar?.vertical ?? 'auto',\n horizontal: o.scrollbar?.horizontal ?? 'auto',\n verticalScrollbarSize: o.scrollbar?.verticalScrollbarSize ?? 6,\n horizontalScrollbarSize: o.scrollbar?.horizontalScrollbarSize ?? 6,\n },\n fontFamily: o.fontFamily ?? 'Menlo, Monaco, \"Courier New\", monospace',\n autoClosingBrackets: 'always' as const,\n autoClosingQuotes: 'always' as const,\n autoClosingDelete: 'always' as const,\n autoSurround: 'languageDefined' as const,\n guides: { bracketPairs: true, indentation: true },\n suggest: {\n showKeywords: o.suggest?.showKeywords ?? true,\n showSnippets: o.suggest?.showSnippets ?? true,\n showValues: o.suggest?.showValues ?? true,\n showProperties: o.suggest?.showProperties ?? true,\n ...(o.suggest?.showIcons !== undefined && { showIcons: o.suggest.showIcons }),\n },\n };\n}\n\n// ─── Shared mount logic (everything that isn't debug-specific) ────────────────\n\nfunction mountCommon(\n editor: any,\n monacoInstance: any,\n { language, value, placeholder, onEditorMount, contextMenuMode = 'native' }: {\n language: EditorLanguage;\n value: string;\n placeholder?: string;\n onEditorMount?: (editor: any, monaco: any) => void;\n contextMenuMode?: EditorContextMenuMode;\n },\n) {\n // Layout fixes for flex/overflow containers\n const relayout = () => editor.layout();\n relayout();\n requestAnimationFrame(relayout);\n setTimeout(relayout, 50);\n setTimeout(relayout, 200);\n const parent = editor.getContainerDomNode().parentElement;\n if (parent) {\n const ro = new ResizeObserver(relayout);\n ro.observe(parent);\n editor.onDidDispose(() => ro.disconnect());\n }\n\n editor.updateOptions({\n autoClosingBrackets: 'always', autoClosingQuotes: 'always',\n autoClosingDelete: 'always', autoSurround: 'languageDefined', autoIndent: 'full',\n });\n\n // Clipboard overrides — modern Clipboard API (webview-compatible)\n const KM = monacoInstance.KeyMod;\n const KC = monacoInstance.KeyCode;\n\n editor.addAction({\n id: 'daakia.clipboard.copy', label: 'Copy',\n keybindings: [KM.CtrlCmd | KC.KeyC],\n run: (ed: any) => {\n const sel = ed.getSelection();\n if (sel && !sel.isEmpty()) {\n navigator.clipboard.writeText(ed.getModel()?.getValueInRange(sel) || '');\n } else {\n const pos = ed.getPosition();\n if (pos) navigator.clipboard.writeText((ed.getModel()?.getLineContent(pos.lineNumber) || '') + '\\n');\n }\n },\n });\n\n editor.addAction({\n id: 'daakia.clipboard.cut', label: 'Cut',\n keybindings: [KM.CtrlCmd | KC.KeyX],\n run: (ed: any) => {\n const sel = ed.getSelection();\n if (sel && !sel.isEmpty()) {\n navigator.clipboard.writeText(ed.getModel()?.getValueInRange(sel) || '');\n ed.executeEdits('cut', [{ range: sel, text: '' }]);\n } else {\n const pos = ed.getPosition();\n if (pos) {\n const model = ed.getModel();\n if (model) {\n navigator.clipboard.writeText(model.getLineContent(pos.lineNumber) + '\\n');\n ed.executeEdits('cut', [{ range: new monacoInstance.Range(pos.lineNumber, 1, pos.lineNumber + 1, 1), text: '' }]);\n }\n }\n }\n },\n });\n\n editor.addAction({\n id: 'daakia.clipboard.paste', label: 'Paste',\n keybindings: [KM.CtrlCmd | KC.KeyV],\n run: async (ed: any) => {\n try {\n const text = await navigator.clipboard.readText();\n if (text) {\n const sel = ed.getSelection();\n if (sel) ed.executeEdits('paste', [{ range: sel, text, forceMoveMarkers: true }]);\n }\n } catch { /* clipboard permission denied */ }\n },\n });\n\n editor.addAction({\n id: 'daakia.clipboard.selectAll', label: 'Select All',\n keybindings: [KM.CtrlCmd | KC.KeyA],\n run: (ed: any) => { const m = ed.getModel(); if (m) ed.setSelection(m.getFullModelRange()); },\n });\n\n // Format Document — Shift+Alt+F\n editor.addAction({\n id: 'daakia.format.document', label: 'Format Document',\n keybindings: [KM.Shift | KM.Alt | KC.KeyF],\n contextMenuGroupId: 'modification', contextMenuOrder: 1.5,\n run: async (ed: any) => {\n const model = ed.getModel();\n if (!model) return;\n const langId = model.getLanguageId();\n if (langId === 'xml' || langId === 'html') {\n try {\n const raw = model.getValue();\n const formatted = formatXml(raw);\n if (formatted !== raw) ed.executeEdits('daakia.format', [{ range: model.getFullModelRange(), text: formatted }]);\n } catch { /* malformed XML */ }\n } else if (langId === 'yaml') {\n try {\n const raw = model.getValue();\n const formatted = formatYaml(raw);\n if (formatted !== raw) ed.executeEdits('daakia.format', [{ range: model.getFullModelRange(), text: formatted }]);\n } catch { /* malformed YAML */ }\n } else if (langId === 'sql') {\n try {\n const raw = model.getValue();\n const formatted = formatSql(raw);\n if (formatted !== raw) ed.executeEdits('daakia.format', [{ range: model.getFullModelRange(), text: formatted }]);\n } catch { /* malformed SQL */ }\n } else {\n await ed.getAction('editor.action.formatDocument')?.run();\n }\n },\n });\n\n // Find & Replace — Ctrl+Shift+H\n editor.addAction({\n id: 'daakia.findAndReplace', label: 'Find and Replace',\n keybindings: [KM.CtrlCmd | KM.Shift | KC.KeyH],\n contextMenuGroupId: 'navigation', contextMenuOrder: 1.5,\n run: () => editor.getAction('editor.action.startFindReplaceAction')?.run(),\n });\n\n // Auto-closing config. XML/HTML is registered unconditionally rather than\n // only when the editor currently holds that language — a Content Type switch\n // (JSON → application/xml) swaps the model in place without re-running mount,\n // so a lazily-registered xml config would never arrive.\n configureTagLanguage(monacoInstance, 'xml');\n configureTagLanguage(monacoInstance, 'html');\n const model = editor.getModel();\n if (model) {\n const langId = model.getLanguageId();\n if (langId !== 'xml' && langId !== 'html' && !plainLangConfigured.has(langId)) {\n plainLangConfigured.add(langId);\n monacoInstance.languages.setLanguageConfiguration(langId, {\n autoClosingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string'] },\n { open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n ],\n brackets: [['{', '}'], ['[', ']'], ['(', ')']],\n surroundingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"' }, { open: \"'\", close: \"'\" },\n ],\n });\n }\n }\n installTagAutoClose(editor, monacoInstance);\n\n // GraphQL tokenizer + completion\n const langs = monacoInstance.languages.getLanguages();\n if (!langs.some((l: any) => l.id === 'graphql')) {\n monacoInstance.languages.register({ id: 'graphql' });\n monacoInstance.languages.setMonarchTokensProvider('graphql', {\n keywords: ['type', 'input', 'enum', 'union', 'interface', 'scalar', 'schema', 'query', 'mutation', 'subscription', 'fragment', 'on', 'extend', 'implements', 'directive', 'repeatable'],\n typeKeywords: ['String', 'Int', 'Float', 'Boolean', 'ID'],\n operators: ['!', '=', '|', '&', '...'],\n symbols: /[=!|&]+/,\n tokenizer: {\n root: [\n [/#.*$/, 'comment'], [/\"([^\"\\\\]|\\\\.)*\"/, 'string'], [/\"\"\"[\\s\\S]*?\"\"\"/, 'string'],\n [/\\b(type|input|enum|union|interface|scalar|schema|extend|implements|directive|repeatable)\\b/, 'keyword'],\n [/\\b(query|mutation|subscription|fragment|on)\\b/, 'keyword.control'],\n [/\\b(String|Int|Float|Boolean|ID)\\b/, 'type.identifier'],\n [/\\b[A-Z][a-zA-Z0-9_]*\\b/, 'type.identifier'],\n [/\\b[a-z_][a-zA-Z0-9_]*(?=\\s*[:(])/, 'variable'],\n [/\\b[a-z_][a-zA-Z0-9_]*\\b/, 'identifier'],\n [/[{}()\\[\\]]/, '@brackets'], [/[!:=|&]/, 'operator'],\n [/\\$[a-zA-Z_]\\w*/, 'variable'], [/@[a-zA-Z_]\\w*/, 'annotation'],\n ],\n },\n } as any);\n }\n if (language === 'graphql') initGraphQLCompletionProvider(monacoInstance);\n\n // dk + console intellisense — JavaScript editors only\n if (language === 'javascript') {\n if (!dkLibRegistered) {\n monacoInstance.languages.typescript.javascriptDefaults.addExtraLib(DK_TYPE_DEFS, 'dk-globals.d.ts');\n dkLibRegistered = true;\n }\n monacoInstance.languages.registerCompletionItemProvider('javascript', {\n triggerCharacters: ['.'],\n provideCompletionItems: (mdl: any, pos: any) => {\n const textUntilPosition = mdl.getValueInRange({\n startLineNumber: pos.lineNumber, startColumn: 1,\n endLineNumber: pos.lineNumber, endColumn: pos.column,\n });\n const suggestions = getDkCompletions(textUntilPosition, monacoInstance, pos);\n if (suggestions.length > 0) return { suggestions };\n const range = { startLineNumber: pos.lineNumber, endLineNumber: pos.lineNumber, startColumn: pos.column, endColumn: pos.column };\n if (/\\bconsole\\.\\s*$/.test(textUntilPosition)) {\n return {\n suggestions: [\n { label: 'log', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'log(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Log output', range },\n { label: 'info', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'info(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Info output', range },\n { label: 'warn', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'warn(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Warning output', range },\n { label: 'error', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'error(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Error output', range },\n { label: 'debug', kind: monacoInstance.languages.CompletionItemKind.Function, insertText: 'debug(${1})', insertTextRules: monacoInstance.languages.CompletionItemInsertTextRule.InsertAsSnippet, detail: 'Debug output', range },\n ],\n };\n }\n return { suggestions: [] };\n },\n });\n }\n\n if (!value && placeholder) editor.updateOptions({ placeholder });\n onEditorMount?.(editor, monacoInstance);\n editor.updateOptions({ contextmenu: contextMenuMode === 'native' });\n}\n","import { DiffEditor, type DiffOnMount } from '@monaco-editor/react';\nimport { useAppTheme } from '../../../hooks/useAppTheme';\nimport type { DiffEditorViewProps } from './DiffEditorView';\n\n// This file is only ever reached by '@salilvnair/dui/monaco-setup' — see\n// EditorView.monaco.tsx for why that makes a plain top-level import safe.\n\nexport function DiffEditorViewMonacoImpl({\n original,\n modified,\n language = 'sql',\n height = 300,\n readOnly = true,\n renderSideBySide = true,\n wordWrap = false,\n fontSize = 12,\n theme,\n onMount,\n}: DiffEditorViewProps) {\n const appTheme = useAppTheme();\n const resolvedTheme = theme ?? (appTheme === 'light' ? 'vs' : 'vs-dark');\n const h = typeof height === 'number' ? `${height}px` : height;\n\n return (\n <DiffEditor\n height={h}\n language={language}\n theme={resolvedTheme}\n original={original}\n modified={modified}\n onMount={onMount as DiffOnMount | undefined}\n options={{\n readOnly,\n renderSideBySide,\n // Monaco silently drops to inline/unified rendering below its own\n // width threshold regardless of renderSideBySide — this diff editor\n // is often mounted inside narrow panels (e.g. Merkle's expanded\n // table row), so pin side-by-side explicitly instead of letting it\n // auto-collapse.\n useInlineViewWhenSpaceIsLimited: false,\n wordWrap: wordWrap ? 'on' : 'off',\n fontSize,\n automaticLayout: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: 'on',\n folding: true,\n ignoreTrimWhitespace: false,\n }}\n />\n );\n}\n","/**\n * Self-host Monaco Editor — no CDN required.\n * This configures workers inline so the webview CSP doesn't need external access.\n * Also defines a custom \"vscode-dark+\" theme to match real VS Code colors.\n */\nimport { loader } from '@monaco-editor/react';\nimport * as monaco from 'monaco-editor';\nimport { markMonacoReady, registerMonacoEditorImpl, registerMonacoDiffEditorImpl } from './lib/monaco-runtime';\nimport { EditorViewMonacoImpl } from './lib/components/input/EditorView.monaco';\nimport { DiffEditorViewMonacoImpl } from './lib/components/input/DiffEditorView.monaco';\nimport editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker&inline';\nimport jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker&inline';\nimport htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker&inline';\nimport tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker&inline';\nimport {\n javascriptDefaults,\n typescriptDefaults,\n ScriptTarget,\n ModuleKind,\n ModuleResolutionKind,\n JsxEmit,\n} from 'monaco-editor/esm/vs/language/typescript/monaco.contribution';\n\n(window as any).MonacoEnvironment = {\n getWorker(_: string, label: string) {\n if (label === 'json') return new jsonWorker();\n if (label === 'html' || label === 'handlebars' || label === 'razor') return new htmlWorker();\n if (label === 'typescript' || label === 'javascript') return new tsWorker();\n return new editorWorker();\n },\n};\n\n// Define VS Code \"Dark+\" matching theme\nmonaco.editor.defineTheme('daakia-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [\n // JSON\n { token: 'string.key.json', foreground: '9CDCFE' },\n { token: 'string.value.json', foreground: 'CE9178' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'keyword.json', foreground: '569CD6' }, // true/false/null\n // General\n { token: 'string', foreground: 'CE9178' },\n { token: 'keyword', foreground: '569CD6' },\n { token: 'comment', foreground: '6A9955' },\n { token: 'type', foreground: '4EC9B0' },\n { token: 'identifier', foreground: '9CDCFE' },\n { token: 'variable', foreground: '9CDCFE' },\n { token: 'constant', foreground: '4FC1FF' },\n // JS/TS\n { token: 'keyword.js', foreground: 'C586C0' },\n { token: 'keyword.ts', foreground: 'C586C0' },\n { token: 'string.js', foreground: 'CE9178' },\n { token: 'string.ts', foreground: 'CE9178' },\n { token: 'number.js', foreground: 'B5CEA8' },\n { token: 'number.ts', foreground: 'B5CEA8' },\n { token: 'regexp', foreground: 'D16969' },\n { token: 'delimiter', foreground: 'D4D4D4' },\n { token: 'delimiter.bracket', foreground: 'FFD700' },\n // XML/HTML\n { token: 'tag', foreground: '569CD6' },\n { token: 'attribute.name', foreground: '9CDCFE' },\n { token: 'attribute.value', foreground: 'CE9178' },\n // GraphQL\n { token: 'keyword.graphql', foreground: 'C586C0' },\n { token: 'keyword.control.graphql', foreground: 'C586C0' },\n { token: 'type.identifier.graphql', foreground: 'E5C07B' },\n { token: 'variable.graphql', foreground: '9CDCFE' },\n { token: 'string.graphql', foreground: 'CE9178' },\n { token: 'comment.graphql', foreground: '6A9955' },\n { token: 'annotation.graphql', foreground: 'DCDCAA' },\n { token: 'operator.graphql', foreground: 'D4D4D4' },\n { token: 'identifier.graphql', foreground: 'D4D4D4' },\n ],\n colors: {\n 'editor.background': '#1e1e1e',\n 'editor.foreground': '#D4D4D4',\n 'editor.lineHighlightBackground': '#2a2a2a',\n 'editor.selectionBackground': '#264f78',\n 'editor.inactiveSelectionBackground': '#3a3d41',\n 'editorLineNumber.foreground': '#858585',\n 'editorLineNumber.activeForeground': '#C6C6C6',\n 'editorCursor.foreground': '#AEAFAD',\n 'editor.selectionHighlightBackground': '#ADD6FF26',\n 'editorIndentGuide.background': '#404040',\n 'editorIndentGuide.activeBackground': '#707070',\n 'editorBracketMatch.background': '#0064001a',\n 'editorBracketMatch.border': '#888888',\n 'editorGutter.background': '#1e1e1e',\n 'editorWidget.background': '#252526',\n 'editorSuggestWidget.background': '#252526',\n 'editorSuggestWidget.border': '#454545',\n 'editorSuggestWidget.selectedBackground': '#04395e',\n 'list.hoverBackground': '#2a2d2e',\n 'input.background': '#3c3c3c',\n 'focusBorder': '#6366f1',\n },\n});\n\n// Configure TypeScript/JavaScript language service for full IntelliSense\n// allowNonTsExtensions is critical — without it, in-memory models (no .js/.ts extension)\n// won't get definition/reference/rename support from the TypeScript worker.\njavascriptDefaults.setCompilerOptions({\n target: ScriptTarget.ESNext,\n module: ModuleKind.ESNext,\n allowNonTsExtensions: true,\n allowJs: true,\n checkJs: true,\n strict: false,\n noEmit: true,\n esModuleInterop: true,\n moduleResolution: ModuleResolutionKind.NodeJs,\n jsx: JsxEmit.React,\n});\n\njavascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n});\n\n// Ensure all models are immediately synced to the TypeScript worker\n// (required for Go to Definition, Peek, etc. to work)\njavascriptDefaults.setEagerModelSync(true);\ntypescriptDefaults.setEagerModelSync(true);\n\ntypescriptDefaults.setCompilerOptions({\n target: ScriptTarget.ESNext,\n module: ModuleKind.ESNext,\n allowNonTsExtensions: true,\n allowJs: true,\n strict: false,\n noEmit: true,\n esModuleInterop: true,\n moduleResolution: ModuleResolutionKind.NodeJs,\n jsx: JsxEmit.React,\n});\n\n// Define VS Code \"Light+\" matching theme\nmonaco.editor.defineTheme('daakia-light', {\n base: 'vs',\n inherit: true,\n rules: [\n { token: 'string.key.json', foreground: '0451a5' },\n { token: 'string.value.json', foreground: 'a31515' },\n { token: 'number', foreground: '09885a' },\n { token: 'keyword.json', foreground: '0000ff' },\n { token: 'string', foreground: 'a31515' },\n { token: 'keyword', foreground: '0000ff' },\n { token: 'comment', foreground: '008000' },\n { token: 'type', foreground: '267f99' },\n { token: 'identifier', foreground: '001080' },\n { token: 'variable', foreground: '001080' },\n { token: 'constant', foreground: '0070c1' },\n { token: 'keyword.js', foreground: 'af00db' },\n { token: 'keyword.ts', foreground: 'af00db' },\n { token: 'string.js', foreground: 'a31515' },\n { token: 'string.ts', foreground: 'a31515' },\n { token: 'number.js', foreground: '09885a' },\n { token: 'number.ts', foreground: '09885a' },\n { token: 'regexp', foreground: 'c41a16' },\n { token: 'delimiter', foreground: '000000' },\n { token: 'delimiter.bracket', foreground: '000000' },\n { token: 'tag', foreground: '800000' },\n { token: 'attribute.name', foreground: 'ff0000' },\n { token: 'attribute.value', foreground: '0451a5' },\n { token: 'keyword.graphql', foreground: 'af00db' },\n { token: 'type.identifier.graphql', foreground: '267f99' },\n { token: 'variable.graphql', foreground: '001080' },\n { token: 'string.graphql', foreground: 'a31515' },\n { token: 'comment.graphql', foreground: '008000' },\n { token: 'operator.graphql', foreground: '000000' },\n { token: 'identifier.graphql', foreground: '000000' },\n ],\n colors: {\n 'editor.background': '#ffffff',\n 'editor.foreground': '#000000',\n 'editor.lineHighlightBackground': '#f5f5f5',\n 'editor.selectionBackground': '#add6ff',\n 'editor.inactiveSelectionBackground': '#e5ebf1',\n 'editorLineNumber.foreground': '#237893',\n 'editorLineNumber.activeForeground': '#0b216f',\n 'editorCursor.foreground': '#000000',\n 'editor.selectionHighlightBackground': '#add6ff4d',\n 'editorIndentGuide.background1': '#d3d3d3',\n 'editorIndentGuide.activeBackground1': '#939393',\n 'editorGutter.background': '#ffffff',\n 'editorWidget.background': '#f3f3f3',\n 'editorSuggestWidget.background': '#f3f3f3',\n 'editorSuggestWidget.border': '#c8c8c8',\n 'editorSuggestWidget.selectedBackground': '#0060c0',\n 'list.hoverBackground': '#f0f0f0',\n 'input.background': '#ffffff',\n 'input.border': '#d1d5db',\n 'focusBorder': '#6366f1',\n },\n});\n\nloader.config({ monaco });\n\n// Expose monaco globally for context menu access to editor instances\n(window as any).monaco = monaco;\n\n// Register the real Monaco-backed implementations, then flip the shared\n// readiness gate — EditorView/DiffEditorView now render these instead of\n// their lightweight fallback.\nregisterMonacoEditorImpl(EditorViewMonacoImpl);\nregisterMonacoDiffEditorImpl(DiffEditorViewMonacoImpl);\nmarkMonacoReady();\n\n/** Call this whenever the app theme changes to re-theme all open Monaco editors */\nexport function applyMonacoTheme(theme: 'dark' | 'light') {\n monaco.editor.setTheme(theme === 'dark' ? 'daakia-dark' : 'daakia-light');\n}\n\nexport { monaco };\n"],"names":["resolveTheme","vsKind","_a","useAppTheme","theme","setTheme","useState","useEffect","update","htmlObs","bodyObs","DK_TYPE_DEFS","getDkCompletions","_text","_monaco","_pos","useBreakpointGutter","options","breakpoints","disabledBreakpoints","conditionalBreakpointLines","pausedLine","onToggleBreakpoint","onGlyphContextMenu","editorRef","useRef","monacoRef","decorationsRef","pausedDecoRef","hoverDecoRef","disposablesRef","isBreakpointableLine","useCallback","lineNo","editor","model","monaco","decos","line","isDisabled","isConditional","glyphClass","d","domNode","marginContainer","d1","e","glyphRightClick","d2a","domHandler","ev","d3","lineDecos","_b","_d","_c","d4","state","useDebugStore","selector","dkLibRegistered","tagLangConfigured","plainLangConfigured","VOID_TAGS","OPEN_TAG_AT_CARET","ANY_TAG","escapeRe","s","innermostOpenTag","text","scrubbed","stack","m","full","name","attrs","at","configureTagLanguage","monacoInstance","langId","config","live","delay","next","installTagAutoClose","reentrant","sub","change","column","before","insert","caretShift","consumeNext","open","rest","tag","EXT_MAP","formatXml","xml","depth","result","tokens","token","isClosing","isSelfClosing","formatYaml","yaml","formatSql","sql","CLAUSE_RE","EditorViewSimple","value","onChange","language","height","minHeight","readOnly","placeholder","wordWrap","size","fontSize","className","bordered","onEditorMount","contextMenuMode","contextMenuItems","editorOptions","accentColor","base","useEditorBase","resolvedFontSize","modelPath","useMemo","resolvedHeight","containerHeight","handleMount","mountCommon","resolvedTheme","EditorShell","jsx","Editor","v","buildOptions","EditorViewDebug","attachBreakpointGutter","navigateLine","EditorViewMonacoImpl","debugSupported","glyphMargin","o","_e","_f","_g","_h","_i","_j","_k","relayout","parent","ro","KM","KC","ed","sel","pos","raw","formatted","l","mdl","textUntilPosition","suggestions","range","DiffEditorViewMonacoImpl","original","modified","renderSideBySide","onMount","appTheme","h","DiffEditor","_","label","jsonWorker","htmlWorker","tsWorker","editorWorker","javascriptDefaults","ScriptTarget","ModuleKind","ModuleResolutionKind","JsxEmit","typescriptDefaults","loader","registerMonacoEditorImpl","registerMonacoDiffEditorImpl","markMonacoReady","applyMonacoTheme"],"mappings":"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"}