@omniviewdev/editors 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.production.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.development.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/compiler-runtime.js","../src/themes/useEditorTheme.ts","../src/themes/monaco.ts","../src/utils/language.ts","../src/schemas/EditorSchemaRegistry.ts","../src/components/code-editor/CodeEditor.tsx","../src/components/diff-viewer/DiffViewer.tsx","../src/themes/xterm.ts","../src/components/terminal/Terminal.tsx","../src/components/markdown-preview/MarkdownPreview.tsx","../src/components/command-palette/CommandPalette.tsx","../src/components/object-inspector/ObjectInspector.tsx","../../../node_modules/.pnpm/vscode-uri@3.1.0/node_modules/vscode-uri/lib/esm/index.mjs","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markerSeverity.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markerTag.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/range.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/relatedInformation.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markerData.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/textEdit.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/workspaceFileEditOptions.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/workspaceFileEdit.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/workspaceEdit.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/codeAction.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/command.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionItemKind.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionItemTag.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markdownString.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/singleEditOperation.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionItem.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionList.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/symbolKind.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/symbolTag.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/documentSymbol.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/foldingRange.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/formattingOptions.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/hover.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/position.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/link.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/locationLink.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/selectionRanges.js","../../../node_modules/.pnpm/monaco-marker-data-provider@1.2.5/node_modules/monaco-marker-data-provider/dist/monaco-marker-data-provider.js","../../../node_modules/.pnpm/monaco-worker-manager@2.0.1_monaco-editor@0.52.2/node_modules/monaco-worker-manager/index.js","../../../node_modules/.pnpm/monaco-yaml@5.4.1_monaco-editor@0.52.2/node_modules/monaco-yaml/index.js","../src/setup/setupMonacoWorkers.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-compiler-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nexports.c = function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n};\n","/**\n * @license React\n * react-compiler-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n var ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n exports.c = function (size) {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher.useMemoCache(size);\n };\n })();\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-compiler-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-compiler-runtime.development.js');\n}\n","import { useTheme } from '@omniviewdev/base-ui';\nimport type { EditorTheme } from './types';\n\nexport function getEditorThemeRoot(element?: HTMLElement | null): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n return element?.closest<HTMLElement>('[data-ov-theme]') ?? element ?? document.documentElement;\n}\n\nexport function getComputedThemeStyle(element?: HTMLElement | null): CSSStyleDeclaration | null {\n const root = getEditorThemeRoot(element);\n return root ? getComputedStyle(root) : null;\n}\n\nexport function getComputedToken(token: string, element?: HTMLElement | null): string {\n return getComputedThemeStyle(element)?.getPropertyValue(token).trim() ?? '';\n}\n\nexport function useEditorTheme(): EditorTheme {\n const { activeTheme } = useTheme();\n return { id: activeTheme.id, base: activeTheme.base, registration: activeTheme };\n}\n","import { getComputedThemeStyle, getEditorThemeRoot } from './useEditorTheme';\nimport type { BuiltInThemeId } from '@omniviewdev/base-ui';\n\ninterface MonacoThemeData {\n base: 'vs' | 'vs-dark' | 'hc-black' | 'hc-light';\n inherit: boolean;\n rules: Array<{ token: string; foreground?: string; fontStyle?: string }>;\n colors: Record<string, string>;\n}\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst SERIALIZED_RGB =\n /^rgba?\\(\\s*([\\d.]+)(?:\\s*,\\s*|\\s+)([\\d.]+)(?:\\s*,\\s*|\\s+)([\\d.]+)(?:\\s*(?:,|\\/)\\s*([\\d.]+))?\\s*\\)$/i;\n\nfunction byteToHex(value: number): string {\n return Math.max(0, Math.min(255, Math.round(value)))\n .toString(16)\n .padStart(2, '0');\n}\n\nfunction serializedColorToHex(color: string): string {\n const trimmed = color.trim();\n if (HEX_COLOR.test(trimmed)) return trimmed;\n\n const match = trimmed.match(SERIALIZED_RGB);\n if (!match) return '';\n const alpha = match[4] === undefined ? 1 : Number(match[4]);\n const rgb = `#${byteToHex(Number(match[1]))}${byteToHex(Number(match[2]))}${byteToHex(Number(match[3]))}`;\n return alpha >= 1 ? rgb : `${rgb}${byteToHex(alpha * 255)}`;\n}\n\ninterface MonacoColorNormalizer {\n normalize(color: string): string;\n dispose(): void;\n}\n\nfunction createMonacoColorNormalizer(root: HTMLElement | null): MonacoColorNormalizer {\n if (!root) {\n return {\n normalize: serializedColorToHex,\n dispose() {},\n };\n }\n\n const surface = root.ownerDocument.createElement('canvas');\n surface.width = 1;\n surface.height = 1;\n surface.setAttribute('aria-hidden', 'true');\n surface.style.cssText =\n 'position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;visibility:hidden';\n root.append(surface);\n let context: CanvasRenderingContext2D | null | undefined;\n\n return {\n normalize(color) {\n const direct = serializedColorToHex(color);\n if (direct) return direct;\n\n surface.style.color = '';\n surface.style.color = color.trim();\n if (!surface.style.color) return '';\n\n const computed = getComputedStyle(surface).color;\n const serialized = serializedColorToHex(computed);\n if (serialized) return serialized;\n if (!/^(?:color|lab|lch|oklab|oklch)\\(/i.test(computed)) return '';\n\n try {\n context ??= surface.getContext('2d', { willReadFrequently: true });\n if (!context) return '';\n context.clearRect(0, 0, 1, 1);\n context.fillStyle = '#010203';\n context.fillStyle = computed;\n if (context.fillStyle === '#010203') return '';\n context.fillRect(0, 0, 1, 1);\n const pixel = context.getImageData(0, 0, 1, 1).data;\n const rgb = `#${byteToHex(pixel[0]!)}${byteToHex(pixel[1]!)}${byteToHex(pixel[2]!)}`;\n return pixel[3] === 255 ? rgb : `${rgb}${byteToHex(pixel[3]!)}`;\n } catch {\n return '';\n }\n },\n\n dispose() {\n surface.remove();\n },\n };\n}\n\nfunction getBaseTheme(mode: BuiltInThemeId): 'vs' | 'vs-dark' | 'hc-black' | 'hc-light' {\n switch (mode) {\n case 'light':\n case 'solarized-light':\n return 'vs';\n case 'high-contrast-dark':\n return 'hc-black';\n case 'high-contrast-light':\n return 'hc-light';\n default:\n return 'vs-dark';\n }\n}\n\n/**\n * Build a token rule, omitting foreground if the CSS variable is not defined.\n * Monaco throws on empty-string foreground values, so we filter them out\n * and let `inherit: true` fall back to the base theme defaults.\n */\nfunction tokenRule(\n name: string,\n fgVar: string,\n styles: CSSStyleDeclaration | null,\n normalizer: MonacoColorNormalizer,\n styleVar?: string,\n styleDefault?: string,\n): { token: string; foreground?: string; fontStyle?: string } | null {\n const foreground = normalizer.normalize(styles?.getPropertyValue(fgVar).trim() ?? '');\n if (!foreground) return null;\n const entry: { token: string; foreground: string; fontStyle?: string } = {\n token: name,\n foreground: foreground.slice(1),\n };\n if (styleVar) {\n entry.fontStyle = styles?.getPropertyValue(styleVar).trim() || styleDefault || '';\n }\n return entry;\n}\n\n/**\n * Filter a color map to exclude entries with empty-string values.\n * Monaco accepts missing keys but throws on empty strings.\n */\nfunction filterColors(colors: Record<string, string>): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(colors)) {\n if (value) result[key] = value;\n }\n return result;\n}\n\nexport function buildMonacoTheme(\n mode: BuiltInThemeId,\n element?: HTMLElement | null,\n): MonacoThemeData {\n const root = getEditorThemeRoot(element);\n const styles = getComputedThemeStyle(root);\n const normalizer = createMonacoColorNormalizer(root);\n const rule = (name: string, fgVar: string, styleVar?: string, styleDefault?: string) =>\n tokenRule(name, fgVar, styles, normalizer, styleVar, styleDefault);\n const color = (name: string) => normalizer.normalize(styles?.getPropertyValue(name).trim() ?? '');\n\n try {\n const rules = [\n rule('comment', '--ov-syntax-comment', '--ov-syntax-style-comment', 'italic'),\n rule('string', '--ov-syntax-string'),\n rule('string.escape', '--ov-syntax-string-escape'),\n rule('number', '--ov-syntax-number'),\n rule('keyword', '--ov-syntax-keyword', '--ov-syntax-style-keyword'),\n rule('keyword.control', '--ov-syntax-keyword-control'),\n rule('keyword.operator', '--ov-syntax-keyword-operator'),\n rule('type', '--ov-syntax-type', '--ov-syntax-style-type'),\n rule('type.identifier', '--ov-syntax-type'),\n rule('class', '--ov-syntax-class'),\n rule('interface', '--ov-syntax-interface'),\n rule('function', '--ov-syntax-function', '--ov-syntax-style-function'),\n rule('function.declaration', '--ov-syntax-function'),\n rule('method', '--ov-syntax-method'),\n rule('variable', '--ov-syntax-variable'),\n rule('parameter', '--ov-syntax-parameter'),\n rule('property', '--ov-syntax-property'),\n rule('namespace', '--ov-syntax-namespace'),\n rule('decorator', '--ov-syntax-decorator'),\n rule('regexp', '--ov-syntax-regexp'),\n rule('operator', '--ov-syntax-operator'),\n rule('delimiter', '--ov-syntax-punctuation'),\n rule('delimiter.bracket', '--ov-syntax-punctuation'),\n ].filter((entry): entry is NonNullable<typeof entry> => entry !== null);\n\n return {\n base: getBaseTheme(mode),\n inherit: true,\n rules,\n colors: filterColors({\n 'editor.background': color('--ov-color-editor-bg'),\n 'editor.foreground': color('--ov-color-editor-fg'),\n 'editorCursor.foreground': color('--ov-color-editor-cursor'),\n 'editor.selectionBackground': color('--ov-color-editor-selection-bg'),\n 'editor.inactiveSelectionBackground': color('--ov-color-editor-selection-inactive-bg'),\n 'editor.lineHighlightBackground': color('--ov-color-editor-line-highlight-bg'),\n 'editor.lineHighlightBorder': color('--ov-color-editor-line-highlight-border'),\n 'editorLineNumber.foreground': color('--ov-color-editor-line-number'),\n 'editorLineNumber.activeForeground': color('--ov-color-editor-line-number-active'),\n 'editorWhitespace.foreground': color('--ov-color-editor-whitespace'),\n 'editorIndentGuide.background': color('--ov-color-editor-indent-guide'),\n 'editorIndentGuide.activeBackground': color('--ov-color-editor-indent-guide-active'),\n 'editorRuler.foreground': color('--ov-color-editor-ruler'),\n 'editor.findMatchBackground': color('--ov-color-editor-find-match-bg'),\n 'editor.findMatchBorder': color('--ov-color-editor-find-match-border'),\n 'editor.findMatchHighlightBackground': color('--ov-color-editor-find-range-bg'),\n 'editorLink.activeForeground': color('--ov-color-editor-link'),\n 'editorBracketMatch.background': color('--ov-color-editor-bracket-match-bg'),\n 'editorBracketMatch.border': color('--ov-color-editor-bracket-match-border'),\n 'editorBracketHighlight.foreground1': color('--ov-color-editor-bracket-1'),\n 'editorBracketHighlight.foreground2': color('--ov-color-editor-bracket-2'),\n 'editorBracketHighlight.foreground3': color('--ov-color-editor-bracket-3'),\n 'editorBracketHighlight.foreground4': color('--ov-color-editor-bracket-4'),\n 'editorBracketHighlight.foreground5': color('--ov-color-editor-bracket-5'),\n 'editorBracketHighlight.foreground6': color('--ov-color-editor-bracket-6'),\n 'editorGutter.background': color('--ov-color-gutter-bg'),\n 'editorGutter.addedBackground': color('--ov-color-gutter-added'),\n 'editorGutter.modifiedBackground': color('--ov-color-gutter-modified'),\n 'editorGutter.deletedBackground': color('--ov-color-gutter-deleted'),\n 'diffEditor.insertedTextBackground': color('--ov-color-diff-insert-bg'),\n 'diffEditor.removedTextBackground': color('--ov-color-diff-remove-bg'),\n 'minimap.background': color('--ov-color-minimap-bg'),\n 'minimap.selectionHighlight': color('--ov-color-minimap-selection'),\n 'minimap.errorHighlight': color('--ov-color-minimap-error'),\n 'minimap.warningHighlight': color('--ov-color-minimap-warning'),\n 'minimap.findMatchHighlight': color('--ov-color-minimap-find-match'),\n }),\n };\n } finally {\n normalizer.dispose();\n }\n}\n\nexport const OV_MONACO_THEME = 'ov-theme';\n","const EXTENSION_MAP: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n rb: 'ruby',\n rs: 'rust',\n go: 'go',\n java: 'java',\n kt: 'kotlin',\n kts: 'kotlin',\n cs: 'csharp',\n fs: 'fsharp',\n swift: 'swift',\n c: 'c',\n cpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n h: 'c',\n hpp: 'cpp',\n css: 'css',\n scss: 'scss',\n less: 'less',\n html: 'html',\n htm: 'html',\n xml: 'xml',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n sh: 'shell',\n bash: 'shell',\n zsh: 'shell',\n ps1: 'powershell',\n dockerfile: 'dockerfile',\n tf: 'hcl',\n hcl: 'hcl',\n toml: 'ini',\n ini: 'ini',\n lua: 'lua',\n r: 'r',\n dart: 'dart',\n php: 'php',\n pl: 'perl',\n ex: 'elixir',\n exs: 'elixir',\n erl: 'erlang',\n hs: 'haskell',\n scala: 'scala',\n clj: 'clojure',\n graphql: 'graphql',\n gql: 'graphql',\n proto: 'protobuf',\n vue: 'html',\n svelte: 'html',\n};\n\nexport function detectLanguage(filename: string): string | undefined {\n const lower = filename.toLowerCase();\n // Handle dotfiles like \"Dockerfile\"\n const base = lower.split('/').pop() ?? lower;\n if (base === 'dockerfile') return 'dockerfile';\n if (base === 'makefile') return 'makefile';\n\n const ext = base.split('.').pop();\n if (!ext) return undefined;\n return EXTENSION_MAP[ext];\n}\n","/**\n * EditorSchemaRegistry — runtime registry for adding language schemas\n * (primarily YAML/JSON) to Monaco editors.\n *\n * Plugins register schemas at runtime via `register()`. The CodeEditor\n * subscribes via `onChange()` and calls `applyYamlSchemas()` / `applyJsonSchemas()`\n * whenever schemas change.\n *\n * @example\n * ```ts\n * import { editorSchemas } from '@omniviewdev/editors';\n *\n * // Plugin registers a Kubernetes Deployment schema\n * editorSchemas.register({\n * uri: 'https://kubernetesjsonschema.dev/v1.25.0/deployment-apps-v1.json',\n * fileMatch: ['*apps%3A%3Av1%3A%3ADeployment.yaml'],\n * schema: deploymentJsonSchema,\n * });\n * ```\n */\n\nconst DEBUG = false;\nfunction log(...args: unknown[]) {\n if (DEBUG) console.log('[schema-registry]', ...args);\n}\nfunction warn(...args: unknown[]) {\n if (DEBUG) console.warn('[schema-registry]', ...args);\n}\n\nexport interface EditorSchema {\n /** Unique URI identifying this schema. Must be a valid https:// URL. */\n uri: string;\n /**\n * Glob patterns for filenames this schema applies to.\n * Tested against the full Monaco model URI string — use URL-encoded\n * colons (`%3A`) for structured GVR filenames.\n *\n * @example ['*core%3A%3Av1%3A%3APod.yaml']\n */\n fileMatch: string[];\n /** The JSON Schema object. */\n schema: Record<string, unknown>;\n /**\n * Human-readable name shown in hover tooltips as the \"Source:\" link text.\n * If omitted, the URI basename is used.\n * @example \"Pod (v1)\"\n */\n name?: string;\n /**\n * Description shown in hover tooltips below the schema title.\n * Supports plain text (markdown special chars will be escaped).\n */\n description?: string;\n}\n\ntype SchemaChangeListener = () => void;\n\n/**\n * Simple glob matcher — supports `*` (matches any sequence of chars).\n * Used to replicate the fileMatch behavior of monaco-yaml.\n */\nfunction globMatch(pattern: string, str: string): boolean {\n // Simple iterative glob matcher — avoids RegExp to prevent ReDoS.\n let pi = 0;\n let si = 0;\n let starPi = -1;\n let starSi = -1;\n\n while (si < str.length) {\n if (pi < pattern.length && (pattern[pi] === str[si] || pattern[pi] === '?')) {\n pi++;\n si++;\n } else if (pi < pattern.length && pattern[pi] === '*') {\n starPi = pi;\n starSi = si;\n pi++;\n } else if (starPi >= 0) {\n pi = starPi + 1;\n starSi++;\n si = starSi;\n } else {\n return false;\n }\n }\n\n while (pi < pattern.length && pattern[pi] === '*') {\n pi++;\n }\n\n return pi === pattern.length;\n}\n\ntype YamlHandle = {\n update: (options: Record<string, unknown>) => void;\n dispose: () => void;\n};\n\nclass EditorSchemaRegistryImpl {\n private _schemas = new Map<string, EditorSchema>();\n private _listeners = new Set<SchemaChangeListener>();\n private _yamlHandle: YamlHandle | null = null;\n\n /** All currently registered schemas. */\n get schemas(): EditorSchema[] {\n return Array.from(this._schemas.values());\n }\n\n /**\n * Inject the yaml handle created by `setupMonacoWorkers`.\n * Called once at startup before any editor mounts.\n * @internal\n */\n _setYamlHandle(handle: YamlHandle): void {\n log('_setYamlHandle called — handle keys:', Object.keys(handle));\n this._yamlHandle = handle;\n }\n\n /**\n * Register a schema. If a schema with the same URI exists, it is replaced.\n * Notifies all listeners (active editors) to reconfigure.\n */\n register(schema: EditorSchema): void {\n log('register() — uri:', schema.uri, 'fileMatch:', schema.fileMatch,\n 'schema keys:', Object.keys(schema.schema).slice(0, 10));\n this._schemas.set(schema.uri, schema);\n this._notify();\n }\n\n /** Register multiple schemas at once. */\n registerAll(schemas: EditorSchema[]): void {\n log('registerAll() —', schemas.length, 'schemas:',\n schemas.map(s => s.uri));\n for (const s of schemas) {\n this._schemas.set(s.uri, s);\n }\n this._notify();\n }\n\n /** Unregister a schema by URI. */\n unregister(uri: string): boolean {\n log('unregister() — uri:', uri);\n const deleted = this._schemas.delete(uri);\n if (deleted) this._notify();\n else log(' schema not found, nothing to unregister');\n return deleted;\n }\n\n /** Clear all registered schemas. */\n clear(): void {\n log('clear() — removing', this._schemas.size, 'schemas');\n this._schemas.clear();\n this._notify();\n }\n\n /**\n * Find all registered schemas whose `fileMatch` patterns match the given\n * model URI string. Uses the same glob-like matching that monaco-yaml uses.\n */\n getSchemasForUri(modelUri: string): EditorSchema[] {\n return this.schemas.filter((s) =>\n s.fileMatch.some((pattern) => globMatch(pattern, modelUri)),\n );\n }\n\n /** Whether the YAML handle has been injected (workers initialized). */\n get isYamlReady(): boolean {\n return this._yamlHandle !== null;\n }\n\n /** Subscribe to schema changes. Returns an unsubscribe function. */\n onChange(listener: SchemaChangeListener): () => void {\n this._listeners.add(listener);\n log('onChange() — listener added, total listeners:', this._listeners.size);\n return () => {\n this._listeners.delete(listener);\n log('onChange() — listener removed, total listeners:', this._listeners.size);\n };\n }\n\n /**\n * Push all registered YAML schemas to the monaco-yaml worker via `update()`.\n * The yaml handle must have been injected by `setupMonacoWorkers` at startup.\n */\n applyYamlSchemas(): void {\n if (!this._yamlHandle) {\n warn('applyYamlSchemas() — NO yaml handle! Was setupMonacoWorkers imported?');\n return;\n }\n const schemas = this.schemas;\n const mapped = schemas.map((s) => ({\n uri: s.uri,\n fileMatch: s.fileMatch,\n schema: s.schema as Record<string, unknown>,\n // name/description are passed through to yaml-language-server's\n // registerExternalSchema — they appear in hover tooltips.\n ...(s.name && { name: s.name }),\n ...(s.description && { description: s.description }),\n }));\n log('applyYamlSchemas() — pushing', schemas.length, 'schemas');\n this._yamlHandle.update({\n enableSchemaRequest: false,\n schemas: mapped,\n });\n log('applyYamlSchemas() — update() called successfully');\n }\n\n /**\n * Apply all JSON schemas to Monaco's built-in JSON language service.\n * Accepts the `monaco` namespace so the registry itself doesn't import\n * `monaco-editor` — keeping it usable before Monaco loads.\n */\n applyJsonSchemas(monacoInstance: unknown): void {\n const m = monacoInstance as {\n json?: {\n jsonDefaults?: {\n setDiagnosticsOptions: (opts: {\n validate: boolean;\n schemas: Array<{\n uri: string;\n fileMatch: string[];\n schema: Record<string, unknown>;\n }>;\n }) => void;\n };\n };\n // Fallback for pre-0.55 (languages.json.jsonDefaults)\n languages?: {\n json?: {\n jsonDefaults?: {\n setDiagnosticsOptions: (opts: {\n validate: boolean;\n schemas: Array<{\n uri: string;\n fileMatch: string[];\n schema: Record<string, unknown>;\n }>;\n }) => void;\n };\n };\n };\n };\n\n const diagnosticsOptions = {\n validate: true,\n schemas: this.schemas.map((s) => ({\n uri: s.uri,\n fileMatch: s.fileMatch,\n schema: s.schema,\n })),\n };\n\n // 0.55+ top-level namespace\n const jsonDefaults = m.json?.jsonDefaults ?? m.languages?.json?.jsonDefaults;\n log('applyJsonSchemas() —', this.schemas.length, 'schemas, jsonDefaults available:',\n !!jsonDefaults);\n jsonDefaults?.setDiagnosticsOptions(diagnosticsOptions);\n }\n\n /** Log the current state of the registry for debugging. */\n debugState(): void {\n log('=== Registry State ===');\n log(' Schemas:', this._schemas.size);\n for (const [uri, schema] of this._schemas) {\n log(` ${uri} → fileMatch: ${JSON.stringify(schema.fileMatch)}`);\n }\n log(' Listeners:', this._listeners.size);\n log(' YAML handle:', this._yamlHandle ? 'SET' : 'NOT SET');\n log('======================');\n }\n\n private _notify(): void {\n log('_notify() — notifying', this._listeners.size, 'listeners');\n for (const fn of this._listeners) {\n try {\n fn();\n } catch (err) {\n console.error('[schema-registry] listener threw during _notify():', err);\n }\n }\n }\n}\n\n/** Singleton schema registry instance. */\nexport const editorSchemas = new EditorSchemaRegistryImpl();\n\nexport type { EditorSchemaRegistryImpl as EditorSchemaRegistry };\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from 'react';\nimport * as monaco from 'monaco-editor';\nimport { useEditorTheme } from '../../themes/useEditorTheme';\nimport { buildMonacoTheme, OV_MONACO_THEME } from '../../themes/monaco';\nimport { detectLanguage } from '../../utils/language';\nimport { editorSchemas } from '../../schemas';\nimport styles from './CodeEditor.module.css';\n\n// ---------------------------------------------------------------------------\n// Debug logging (set to false for production)\n// ---------------------------------------------------------------------------\n\nconst DEBUG = false;\nfunction log(...args: unknown[]) {\n if (DEBUG) console.log('[CodeEditor]', ...args);\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Severity levels matching Monaco's MarkerSeverity enum. */\nexport type DiagnosticSeverity = 'error' | 'warning' | 'info' | 'hint';\n\n/** A parsed diagnostic from the editor's validation markers. */\nexport interface EditorDiagnostic {\n /** Human-readable error message. */\n message: string;\n /** Severity level. */\n severity: DiagnosticSeverity;\n /** 1-based line number. */\n startLineNumber: number;\n /** 1-based column number. */\n startColumn: number;\n /** 1-based end line number. */\n endLineNumber: number;\n /** 1-based end column number. */\n endColumn: number;\n /** The owner/source of the marker (e.g. \"yaml\", \"typescript\"). */\n source?: string;\n /** Optional error code. */\n code?: string;\n}\n\n/** Cursor position info passed to `onCursorChange`. */\nexport interface CursorPosition {\n /** 1-based line number. */\n lineNumber: number;\n /** 1-based column number. */\n column: number;\n}\n\nexport interface CodeEditorProps {\n /** The editor content. Controlled — updates push new text into the editor. */\n value: string;\n /** Fires when the user edits content. Omit for a read-only display. */\n onChange?: (value: string) => void;\n\n // -- File identity ----------------------------------------------------------\n\n /** Explicit Monaco language id (e.g. `\"yaml\"`, `\"typescript\"`). */\n language?: string;\n /**\n * Virtual filename / path used to derive the language (when `language` is\n * omitted) and, more importantly, to set the Monaco model URI so that\n * `monaco-yaml` / JSON schema `fileMatch` patterns can match.\n *\n * For structured resources use the convention:\n * `<plugin>/<connectionId>/<group>::<version>::<resource>.yaml`\n *\n * @example \"kubernetes/demo-cluster/core::v1::Pod.yaml\"\n */\n filename?: string;\n\n // -- Editor behaviour -------------------------------------------------------\n\n readOnly?: boolean;\n lineNumbers?: boolean;\n minimap?: boolean;\n wordWrap?: boolean;\n tabSize?: number;\n /** Show TypeScript / JavaScript diagnostics (squiggly error markers). @default false */\n diagnostics?: boolean;\n /** Trigger completions automatically as the user types. @default false */\n quickSuggestions?: boolean;\n /**\n * Enable syntax highlighting. When false the editor still renders text but\n * without any token colouring — useful for plain log output.\n * @default true\n */\n syntaxHighlighting?: boolean;\n\n // -- Lifecycle callbacks ----------------------------------------------------\n\n /**\n * Called once after the Monaco editor mounts, exposing the raw editor and\n * `monaco` namespace for advanced configuration (custom keybindings,\n * language registration, LSP server attachment, etc.).\n */\n onMount?: (\n editor: monaco.editor.IStandaloneCodeEditor,\n monacoInstance: typeof monaco,\n ) => void;\n\n /**\n * Called whenever the editor's validation markers change. Provides a parsed\n * array of diagnostics that can be displayed in a problems panel, status bar,\n * or custom UI.\n *\n * Fires for all marker owners (YAML, TypeScript, JSON, etc.).\n */\n onDiagnostics?: (diagnostics: EditorDiagnostic[]) => void;\n\n /**\n * Called when the cursor position changes. Useful for breadcrumb navigation,\n * status bar line/column display, or position tracking.\n */\n onCursorChange?: (position: CursorPosition) => void;\n\n // -- Layout -----------------------------------------------------------------\n\n height?: string | number;\n width?: string | number;\n /**\n * Show decorative border and border-radius around the editor.\n * Set to `false` when embedding in an IDE layout or panel.\n * @default true\n */\n bordered?: boolean;\n className?: string;\n}\n\n/**\n * Snapshot of editor internal state for debug panels / troubleshooting.\n * Obtained via `handle.getDebugState()`.\n */\nexport interface EditorDebugState {\n // -- Model ------------------------------------------------------------------\n /** The model URI string (drives schema matching). */\n modelUri: string | null;\n /** The resolved language id (e.g. \"yaml\", \"typescript\"). */\n modelLanguage: string | null;\n /** Total number of lines. */\n modelLineCount: number;\n /** Total character count. */\n modelContentLength: number;\n /** Monaco's internal version id — incremented on every edit including undo. */\n modelVersionId: number;\n /** End-of-line sequence (`\\n` or `\\r\\n`). */\n modelEOL: string | null;\n\n // -- Cursor / Selection -----------------------------------------------------\n cursorPosition: CursorPosition | null;\n /** All active selections (multi-cursor). */\n selections: Array<{\n startLineNumber: number;\n startColumn: number;\n endLineNumber: number;\n endColumn: number;\n }>;\n\n // -- Diagnostics ------------------------------------------------------------\n /** Total marker count across all owners. */\n diagnosticsTotal: number;\n /** Breakdown by severity. */\n diagnosticsBySeverity: Record<DiagnosticSeverity, number>;\n /** Breakdown by owner/source (e.g. { yaml: 2, typescript: 1 }). */\n diagnosticsBySource: Record<string, number>;\n\n // -- Schema -----------------------------------------------------------------\n /** Total registered schemas in the EditorSchemaRegistry. */\n registeredSchemaCount: number;\n /** Schemas whose fileMatch patterns match the current model URI. */\n matchingSchemas: Array<{ uri: string; name?: string; fileMatch: string[] }>;\n\n // -- Editor -----------------------------------------------------------------\n /** Whether the editor is read-only. */\n isReadOnly: boolean;\n /** Whether the editor or its widgets have focus. */\n isFocused: boolean;\n\n // -- Monaco environment -----------------------------------------------------\n /** Total number of Monaco models in memory. */\n totalModelCount: number;\n /** Number of registered languages. */\n registeredLanguageCount: number;\n /** Whether the YAML handle is set (worker initialized). */\n yamlHandleSet: boolean;\n}\n\nexport interface CodeEditorHandle {\n /** The underlying Monaco standalone code editor, or null before mount. */\n getEditor: () => monaco.editor.IStandaloneCodeEditor | null;\n /** The `monaco-editor` module namespace. */\n getMonaco: () => typeof monaco;\n /** Focus the editor. */\n focus: () => void;\n /** Get the current diagnostics (validation markers) for the editor model. */\n getDiagnostics: () => EditorDiagnostic[];\n /**\n * Snapshot the full editor debug state — model info, cursor, diagnostics,\n * schemas, environment. Designed for debug panels and troubleshooting.\n */\n getDebugState: () => EditorDebugState;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\nfunction getOrCreateModel(\n value: string,\n language: string | undefined,\n path: string | undefined,\n): monaco.editor.ITextModel {\n if (path) {\n const uri = monaco.Uri.parse(path);\n log('getOrCreateModel — parsed URI:', uri.toString(), '| language:', language);\n const existing = monaco.editor.getModel(uri);\n if (existing) {\n log(' reusing existing model');\n return existing;\n }\n log(' creating new model with URI');\n return monaco.editor.createModel(value, language, uri);\n }\n log('getOrCreateModel — no path, creating anonymous model | language:', language);\n return monaco.editor.createModel(value, language);\n}\n\nfunction severityToString(severity: monaco.MarkerSeverity): DiagnosticSeverity {\n switch (severity) {\n case monaco.MarkerSeverity.Error: return 'error';\n case monaco.MarkerSeverity.Warning: return 'warning';\n case monaco.MarkerSeverity.Info: return 'info';\n default: return 'hint';\n }\n}\n\nfunction markersTodiagnostics(model: monaco.editor.ITextModel): EditorDiagnostic[] {\n return monaco.editor.getModelMarkers({ resource: model.uri }).map((m) => ({\n message: m.message,\n severity: severityToString(m.severity),\n startLineNumber: m.startLineNumber,\n startColumn: m.startColumn,\n endLineNumber: m.endLineNumber,\n endColumn: m.endColumn,\n source: m.source ?? undefined,\n code: typeof m.code === 'string' ? m.code : m.code?.value,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const CodeEditor = forwardRef<CodeEditorHandle, CodeEditorProps>(\n function CodeEditor(\n {\n value,\n onChange,\n onMount: onMountProp,\n onDiagnostics,\n onCursorChange,\n language,\n filename,\n readOnly = false,\n lineNumbers = true,\n minimap = false,\n wordWrap = false,\n tabSize = 2,\n diagnostics = false,\n quickSuggestions = false,\n syntaxHighlighting = true,\n height = '100%',\n width = '100%',\n bordered = true,\n className,\n },\n ref,\n ) {\n const theme = useEditorTheme();\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [isReady, setIsReady] = useState(false);\n const preventTriggerChangeEvent = useRef(false);\n const subscriptionRef = useRef<monaco.IDisposable | null>(null);\n const markerSubscriptionRef = useRef<monaco.IDisposable | null>(null);\n const cursorSubscriptionRef = useRef<monaco.IDisposable | null>(null);\n\n const resolvedLanguage = language ?? (filename ? detectLanguage(filename) : undefined);\n\n log('render — filename:', filename, '| resolvedLanguage:', resolvedLanguage);\n\n // Pretty-print JSON when the language is JSON\n const displayValue = useMemo(() => {\n if (resolvedLanguage === 'json' && value) {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n return value;\n }, [resolvedLanguage, value]);\n\n // -----------------------------------------------------------------------\n // Mount / Unmount\n // -----------------------------------------------------------------------\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n log('=== MOUNT ===');\n\n // Theme\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n\n // TypeScript / JavaScript compiler options (global — JSX & target config)\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: 2, // JsxEmit.React\n jsxFactory: 'React.createElement',\n allowNonTsExtensions: true,\n allowJs: true,\n target: 99, // ESNext\n });\n\n // Model — the URI drives schema fileMatch\n const model = getOrCreateModel(\n displayValue,\n syntaxHighlighting ? resolvedLanguage : 'plaintext',\n filename,\n );\n log(' model created — uri:', model.uri.toString());\n\n const editor = monaco.editor.create(containerRef.current, {\n model,\n readOnly,\n lineNumbers: lineNumbers ? 'on' : 'off',\n minimap: { enabled: minimap },\n wordWrap: wordWrap ? 'on' : 'off',\n quickSuggestions: quickSuggestions\n ? { other: true, strings: true, comments: false }\n : false,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n fontSize: 13,\n fontFamily: 'var(--ov-font-family-mono, monospace)',\n tabSize,\n renderValidationDecorations: diagnostics ? 'on' : 'off',\n });\n\n editorRef.current = editor;\n\n // Apply registered schemas so completions/validation are live\n editorSchemas.applyYamlSchemas();\n editorSchemas.applyJsonSchemas(monaco);\n\n onMountProp?.(editor, monaco);\n setIsReady(true);\n log('=== MOUNT COMPLETE ===');\n\n return () => {\n log('=== UNMOUNT ===');\n subscriptionRef.current?.dispose();\n subscriptionRef.current = null;\n markerSubscriptionRef.current?.dispose();\n markerSubscriptionRef.current = null;\n cursorSubscriptionRef.current?.dispose();\n cursorSubscriptionRef.current = null;\n // Detach model before disposing to avoid WordHighlighter \"Canceled\" errors\n const m = editor.getModel();\n editor.setModel(null);\n m?.dispose();\n editor.dispose();\n editorRef.current = null;\n setIsReady(false);\n };\n // Intentional mount-once effect — props like value, language, readOnly,\n // theme, filename, and callbacks are synced via dedicated effects below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // -----------------------------------------------------------------------\n // Prop → editor syncing\n // -----------------------------------------------------------------------\n\n // Value\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !isReady || displayValue === undefined) return;\n if (editor.getOption(monaco.editor.EditorOption.readOnly)) {\n editor.setValue(displayValue);\n } else if (displayValue !== editor.getValue()) {\n const model = editor.getModel();\n if (!model) return;\n preventTriggerChangeEvent.current = true;\n editor.executeEdits('', [\n {\n range: model.getFullModelRange(),\n text: displayValue,\n forceMoveMarkers: true,\n },\n ]);\n editor.pushUndoStop();\n preventTriggerChangeEvent.current = false;\n }\n }, [displayValue, isReady]);\n\n // Options\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n editorRef.current.updateOptions({\n readOnly,\n lineNumbers: lineNumbers ? 'on' : 'off',\n minimap: { enabled: minimap },\n wordWrap: wordWrap ? 'on' : 'off',\n quickSuggestions: quickSuggestions\n ? { other: true, strings: true, comments: false }\n : false,\n tabSize,\n renderValidationDecorations: diagnostics ? 'on' : 'off',\n });\n }, [readOnly, lineNumbers, minimap, wordWrap, quickSuggestions, tabSize, diagnostics, isReady]);\n\n // Language (including syntax highlighting toggle)\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const model = editorRef.current.getModel();\n if (model) {\n const lang = syntaxHighlighting ? (resolvedLanguage ?? 'plaintext') : 'plaintext';\n log('setModelLanguage →', lang);\n monaco.editor.setModelLanguage(model, lang);\n }\n }, [resolvedLanguage, syntaxHighlighting, isReady]);\n\n // Filename → model URI swap (for schema fileMatch)\n const prevFilenameRef = useRef(filename);\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !isReady) return;\n if (prevFilenameRef.current === filename) return;\n log('filename changed:', prevFilenameRef.current, '→', filename);\n prevFilenameRef.current = filename;\n\n const currentModel = editor.getModel();\n const currentValue = currentModel?.getValue?.() ?? displayValue;\n // Detach model before disposing to avoid WordHighlighter \"Canceled\" errors\n editor.setModel(null);\n currentModel?.dispose();\n const newModel = getOrCreateModel(currentValue, syntaxHighlighting ? resolvedLanguage : 'plaintext', filename);\n editor.setModel(newModel);\n log(' new model set — uri:', newModel.uri.toString());\n }, [filename, isReady, resolvedLanguage, syntaxHighlighting, displayValue]);\n\n // Theme\n useEffect(() => {\n if (!isReady) return;\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n }, [isReady, theme.registration]);\n\n // onChange subscription\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n subscriptionRef.current?.dispose();\n if (onChange) {\n subscriptionRef.current = editorRef.current.onDidChangeModelContent(() => {\n if (!preventTriggerChangeEvent.current) {\n onChange(editorRef.current!.getValue());\n }\n });\n }\n }, [onChange, isReady]);\n\n // onDiagnostics subscription — listen to marker changes on the model\n useEffect(() => {\n if (!isReady) return;\n markerSubscriptionRef.current?.dispose();\n if (onDiagnostics) {\n markerSubscriptionRef.current = monaco.editor.onDidChangeMarkers((uris) => {\n const model = editorRef.current?.getModel();\n if (!model) return;\n const modelUri = model.uri.toString();\n if (uris.some((u) => u.toString() === modelUri)) {\n onDiagnostics(markersTodiagnostics(model));\n }\n });\n }\n }, [onDiagnostics, isReady]);\n\n // onCursorChange subscription\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n cursorSubscriptionRef.current?.dispose();\n if (onCursorChange) {\n cursorSubscriptionRef.current = editorRef.current.onDidChangeCursorPosition((e) => {\n onCursorChange({\n lineNumber: e.position.lineNumber,\n column: e.position.column,\n });\n });\n }\n }, [onCursorChange, isReady]);\n\n // Live schema updates — re-apply whenever the registry changes\n useEffect(() => {\n if (!isReady) return;\n return editorSchemas.onChange(() => {\n editorSchemas.applyYamlSchemas();\n editorSchemas.applyJsonSchemas(monaco);\n });\n }, [isReady]);\n\n // -----------------------------------------------------------------------\n // Imperative handle\n // -----------------------------------------------------------------------\n\n useImperativeHandle(ref, () => ({\n getEditor: () => editorRef.current,\n getMonaco: () => monaco,\n focus: () => editorRef.current?.focus(),\n getDiagnostics: () => {\n const model = editorRef.current?.getModel();\n return model ? markersTodiagnostics(model) : [];\n },\n getDebugState: (): EditorDebugState => {\n const editor = editorRef.current;\n const model = editor?.getModel() ?? null;\n const markers = model\n ? monaco.editor.getModelMarkers({ resource: model.uri })\n : [];\n const modelUri = model?.uri.toString() ?? null;\n\n // Diagnostics breakdown\n const diagnosticsBySeverity: Record<DiagnosticSeverity, number> = {\n error: 0, warning: 0, info: 0, hint: 0,\n };\n const diagnosticsBySource: Record<string, number> = {};\n for (const m of markers) {\n const sev = severityToString(m.severity);\n diagnosticsBySeverity[sev]++;\n const src = m.source ?? 'unknown';\n diagnosticsBySource[src] = (diagnosticsBySource[src] ?? 0) + 1;\n }\n\n // Schema matching\n const matchingSchemas = modelUri\n ? editorSchemas.getSchemasForUri(modelUri).map((s) => ({\n uri: s.uri,\n name: s.name,\n fileMatch: s.fileMatch,\n }))\n : [];\n\n const pos = editor?.getPosition() ?? null;\n const sels = editor?.getSelections() ?? [];\n\n return {\n modelUri,\n modelLanguage: model?.getLanguageId() ?? null,\n modelLineCount: model?.getLineCount() ?? 0,\n modelContentLength: model?.getValueLength() ?? 0,\n modelVersionId: model?.getVersionId() ?? 0,\n modelEOL: model?.getEOL() ?? null,\n cursorPosition: pos ? { lineNumber: pos.lineNumber, column: pos.column } : null,\n selections: sels.map((s) => ({\n startLineNumber: s.startLineNumber,\n startColumn: s.startColumn,\n endLineNumber: s.endLineNumber,\n endColumn: s.endColumn,\n })),\n diagnosticsTotal: markers.length,\n diagnosticsBySeverity,\n diagnosticsBySource,\n registeredSchemaCount: editorSchemas.schemas.length,\n matchingSchemas,\n isReadOnly: editor?.getOption(monaco.editor.EditorOption.readOnly) ?? false,\n isFocused: editor?.hasWidgetFocus() ?? false,\n totalModelCount: monaco.editor.getModels().length,\n registeredLanguageCount: monaco.languages.getLanguages().length,\n yamlHandleSet: editorSchemas.isYamlReady,\n };\n },\n }));\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n\n const toDim = (v: string | number) => (typeof v === 'number' ? `${v}px` : v);\n\n return (\n <div\n className={cn(styles.Root, className)}\n style={\n {\n '--_editor-height': toDim(height),\n '--_editor-width': toDim(width),\n } as CSSProperties\n }\n data-testid=\"code-editor\"\n {...(!bordered ? { 'data-borderless': '' } : {})}\n >\n <div ref={containerRef} className={styles.Inner} />\n </div>\n );\n },\n);\n\nCodeEditor.displayName = 'CodeEditor';\n","import { forwardRef, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport * as monaco from 'monaco-editor';\nimport { useEditorTheme } from '../../themes/useEditorTheme';\nimport { buildMonacoTheme, OV_MONACO_THEME } from '../../themes/monaco';\nimport styles from './DiffViewer.module.css';\n\nexport type DiffMode = 'side-by-side' | 'inline';\n\nexport interface DiffViewerProps {\n original: string;\n modified: string;\n language?: string;\n mode?: DiffMode;\n readOnly?: boolean;\n height?: string | number;\n /**\n * Show decorative border and border-radius around the viewer.\n * Set to `false` when embedding in an IDE layout or panel.\n * @default true\n */\n bordered?: boolean;\n className?: string;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\nexport const DiffViewer = forwardRef<HTMLDivElement, DiffViewerProps>(function DiffViewer(\n {\n original,\n modified,\n language,\n mode = 'side-by-side',\n readOnly = true,\n height = '100%',\n bordered = true,\n className,\n },\n ref,\n) {\n const theme = useEditorTheme();\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<monaco.editor.IStandaloneDiffEditor | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n // Create editor on mount\n useEffect(() => {\n if (!containerRef.current) return;\n\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n\n const editor = monaco.editor.createDiffEditor(containerRef.current, {\n readOnly,\n renderSideBySide: mode === 'side-by-side',\n renderValidationDecorations: 'off',\n scrollBeyondLastLine: false,\n automaticLayout: true,\n fontSize: 13,\n fontFamily: 'var(--ov-font-family-mono, monospace)',\n });\n\n const originalModel = monaco.editor.createModel(original, language);\n const modifiedModel = monaco.editor.createModel(modified, language);\n editor.setModel({ original: originalModel, modified: modifiedModel });\n\n editorRef.current = editor;\n setIsReady(true);\n\n return () => {\n editor.getModel()?.original?.dispose();\n editor.getModel()?.modified?.dispose();\n editor.dispose();\n editorRef.current = null;\n setIsReady(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Update original content\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const origModel = editorRef.current.getModel()?.original;\n if (origModel && original !== origModel.getValue()) {\n origModel.setValue(original);\n }\n }, [original, isReady]);\n\n // Update modified content\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const modifiedEditor = editorRef.current.getModifiedEditor();\n if (modified !== modifiedEditor.getValue()) {\n editorRef.current.getModel()?.modified?.setValue(modified);\n }\n }, [modified, isReady]);\n\n // Update language\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const lang = language ?? 'plaintext';\n const models = editorRef.current.getModel();\n if (models?.original) monaco.editor.setModelLanguage(models.original, lang);\n if (models?.modified) monaco.editor.setModelLanguage(models.modified, lang);\n }, [language, isReady]);\n\n // Update options\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n editorRef.current.updateOptions({\n readOnly,\n renderSideBySide: mode === 'side-by-side',\n });\n }, [readOnly, mode, isReady]);\n\n // Update theme\n useEffect(() => {\n if (!isReady) return;\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n }, [isReady, theme.registration]);\n\n const toDim = (v: string | number) => (typeof v === 'number' ? `${v}px` : v);\n\n return (\n <div\n ref={ref}\n className={cn(styles.Root, className)}\n style={\n {\n '--_diff-height': toDim(height ?? '100%'),\n } as CSSProperties\n }\n data-testid=\"diff-viewer\"\n {...(!bordered ? { 'data-borderless': '' } : {})}\n >\n <div ref={containerRef} className={styles.Inner} />\n </div>\n );\n});\n\nDiffViewer.displayName = 'DiffViewer';\n","import { getComputedThemeStyle } from './useEditorTheme';\n\nexport interface XtermThemeData {\n background: string;\n foreground: string;\n cursor: string;\n cursorAccent?: string;\n selectionBackground: string;\n selectionForeground?: string;\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightRed: string;\n brightGreen: string;\n brightYellow: string;\n brightBlue: string;\n brightMagenta: string;\n brightCyan: string;\n brightWhite: string;\n}\n\nexport function buildXtermTheme(element?: HTMLElement | null): XtermThemeData {\n const styles = getComputedThemeStyle(element);\n const token = (name: string, fallback = '') => styles?.getPropertyValue(name).trim() || fallback;\n\n return {\n background: token('--ov-color-terminal-bg', '#0d0e10'),\n foreground: token('--ov-color-terminal-fg', '#e2e7ee'),\n cursor: token('--ov-color-terminal-cursor', '#89a7ee'),\n selectionBackground: token('--ov-color-terminal-selection-bg', 'rgba(90,127,226,0.18)'),\n selectionForeground: token('--ov-color-terminal-selection-fg') || undefined,\n black: token('--ov-color-ansi-black', '#3b4252'),\n red: token('--ov-color-ansi-red', '#bf616a'),\n green: token('--ov-color-ansi-green', '#a3be8c'),\n yellow: token('--ov-color-ansi-yellow', '#ebcb8b'),\n blue: token('--ov-color-ansi-blue', '#81a1c1'),\n magenta: token('--ov-color-ansi-magenta', '#b48ead'),\n cyan: token('--ov-color-ansi-cyan', '#88c0d0'),\n white: token('--ov-color-ansi-white', '#e5e9f0'),\n brightBlack: token('--ov-color-ansi-bright-black', '#4c566a'),\n brightRed: token('--ov-color-ansi-bright-red', '#d08770'),\n brightGreen: token('--ov-color-ansi-bright-green', '#a3be8c'),\n brightYellow: token('--ov-color-ansi-bright-yellow', '#ebcb8b'),\n brightBlue: token('--ov-color-ansi-bright-blue', '#81a1c1'),\n brightMagenta: token('--ov-color-ansi-bright-magenta', '#b48ead'),\n brightCyan: token('--ov-color-ansi-bright-cyan', '#8fbcbb'),\n brightWhite: token('--ov-color-ansi-bright-white', '#eceff4'),\n };\n}\n","import '@xterm/xterm/css/xterm.css';\n\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from 'react';\nimport { useEditorTheme } from '../../themes/useEditorTheme';\nimport { buildXtermTheme } from '../../themes/xterm';\nimport styles from './Terminal.module.css';\n\n/**\n * Signal types matching the Omniview plugin SDK's StreamSignal enum.\n * These map 1:1 to `core/exec/signal/{SIGNAL}/{sessionId}` Wails events.\n */\nexport type TerminalSignal =\n | 'ERROR'\n | 'CLOSE'\n | 'SIGINT'\n | 'SIGQUIT'\n | 'SIGTERM'\n | 'SIGKILL'\n | 'SIGHUP'\n | 'SIGUSR1'\n | 'SIGUSR2'\n | 'SIGWINCH';\n\n/**\n * Structured error payload from the plugin SDK's StreamError.\n * Received with the 'ERROR' signal when a session encounters an error.\n */\nexport interface TerminalErrorInfo {\n /** Short error title for display. */\n title: string;\n /** Suggested resolution or next step. */\n suggestion: string;\n /** Raw error message for debugging. */\n raw: string;\n /** Whether the session can be retried. */\n retryable?: boolean;\n /** Alternative commands to try (e.g., different shells). */\n retryCommands?: string[];\n}\n\n/** Options for terminal search operations. */\nexport interface TerminalSearchOptions {\n /** Whether the search should be case-sensitive. */\n caseSensitive?: boolean;\n /** Whether the search should match whole words only. */\n wholeWord?: boolean;\n /** Whether the search term is a regex. */\n regex?: boolean;\n /** Whether to search incrementally (highlight as you type). */\n incremental?: boolean;\n}\n\nexport interface TerminalProps {\n // ── Session / data callbacks ──────────────────────────────────────────\n\n /** Called when user types input. Wire to `ExecClient.WriteSession(sessionId, data)`. */\n onData?: (data: string) => void;\n /** Called when user pastes binary data. */\n onBinaryData?: (data: string) => void;\n /** Called on terminal resize with new dimensions. Wire to `ExecClient.ResizeSession(sessionId, rows, cols)`. */\n onResize?: (cols: number, rows: number) => void;\n /**\n * Called when a signal is received (for exec plugin integration).\n * Not invoked internally — the consumer's session layer should call\n * `callbacksRef.current.onSignal?.(signal, payload)` when a signal\n * arrives over the session transport (e.g., Wails event bus).\n */\n onSignal?: (signal: TerminalSignal, payload?: unknown) => void;\n /** Called when the terminal init encounters an error (e.g., failed to load xterm). */\n onError?: (error: Error) => void;\n /**\n * Called when the terminal session closes.\n * Not invoked internally — wire this from your session transport's\n * close/disconnect handler.\n */\n onClose?: (code?: number) => void;\n /**\n * Called once when the terminal is fully initialized and ready to accept writes.\n * This is the right time to attach to a session and start writing data.\n * Receives the current dimensions so the consumer can send an initial resize.\n */\n onReady?: (dimensions: { cols: number; rows: number }) => void;\n\n // ── xterm event callbacks ─────────────────────────────────────────────\n\n /** Called when the terminal bell is triggered. */\n onBell?: () => void;\n /** Called when the terminal title changes (via escape sequence). */\n onTitleChange?: (title: string) => void;\n /** Called on each keypress with the key and DOM event. */\n onKey?: (event: { key: string; domEvent: KeyboardEvent }) => void;\n /** Called when the text selection changes. */\n onSelectionChange?: () => void;\n /** Called on each line feed. */\n onLineFeed?: () => void;\n /** Called when the viewport scrolls. */\n onScroll?: (newPosition: number) => void;\n /**\n * Called after write data has been parsed (at most once per animation frame).\n * Useful as a \"render complete\" signal for high-throughput output.\n */\n onWriteParsed?: () => void;\n\n // ── Appearance ────────────────────────────────────────────────────────\n\n /** Font size in pixels. */\n fontSize?: number;\n /** Font family override. */\n fontFamily?: string;\n /** Font weight ('normal', 'bold', '100'-'900'). */\n fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n /** Font weight for bold text. */\n fontWeightBold?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n /** Enable cursor blink. */\n cursorBlink?: boolean;\n /** Cursor style. */\n cursorStyle?: 'block' | 'underline' | 'bar';\n /** Width of the cursor in CSS pixels (only applies to bar cursor). */\n cursorWidth?: number;\n /** Line height multiplier. */\n lineHeight?: number;\n /** Letter spacing in pixels. */\n letterSpacing?: number;\n /** Whether to draw bold text in bright colors. */\n drawBoldTextInBrightColors?: boolean;\n\n // ── Behavior ──────────────────────────────────────────────────────────\n\n /** Maximum scrollback buffer lines. 0 = unlimited. */\n scrollback?: number;\n /** Convert \\n to \\r\\n for proper line endings. */\n convertEol?: boolean;\n /** Allow transparent background. */\n allowTransparency?: boolean;\n /** Treat macOS Option key as Meta (for proper Alt-key sequences). */\n macOptionIsMeta?: boolean;\n /** Allow macOS Option+Click to force selection. */\n macOptionClickForcesSelection?: boolean;\n /** Enable clickable URLs in terminal output. */\n linkHandling?: boolean;\n /** Disable user input (read-only / log-viewer mode). */\n disableStdin?: boolean;\n /** Intercept key events before xterm processes them. Return false to prevent default handling. */\n customKeyEventHandler?: (event: KeyboardEvent) => boolean;\n /** Auto-focus the terminal after initialization. */\n autoFocus?: boolean;\n\n // ── Rendering ─────────────────────────────────────────────────────────\n\n /** Renderer to use. 'auto' tries WebGL then falls back to DOM. */\n renderer?: 'auto' | 'webgl' | 'dom';\n /** Initial number of rows before fit. */\n rows?: number;\n /** Initial number of columns before fit. */\n cols?: number;\n\n // ── Accessibility ─────────────────────────────────────────────────────\n\n /** Enable screen reader mode for accessibility. */\n screenReaderMode?: boolean;\n /** Minimum contrast ratio for text (1-21). */\n minimumContrastRatio?: number;\n\n // ── Layout ────────────────────────────────────────────────────────────\n\n /** Custom CSS class. */\n className?: string;\n}\n\nexport interface TerminalHandle {\n // ── Write ─────────────────────────────────────────────────────────────\n\n /** Write a string or Uint8Array to the terminal. */\n write: (data: string | Uint8Array) => void;\n /** Write a string followed by a newline. */\n writeln: (data: string) => void;\n\n // ── Terminal state ────────────────────────────────────────────────────\n\n /** Clear the terminal viewport and scrollback. */\n clear: () => void;\n /** Focus the terminal. */\n focus: () => void;\n /** Blur (unfocus) the terminal. */\n blur: () => void;\n /** Re-fit the terminal to its container. */\n fit: () => void;\n /** Get the current terminal dimensions, or null if not initialized. */\n getDimensions: () => { cols: number; rows: number } | null;\n /** Reset the terminal (clear + reset state). */\n reset: () => void;\n\n // ── Search ────────────────────────────────────────────────────────────\n\n /** Find the next match for a search term. */\n findNext: (term: string, options?: TerminalSearchOptions) => boolean;\n /** Find the previous match for a search term. */\n findPrevious: (term: string, options?: TerminalSearchOptions) => boolean;\n /** Clear search highlights. */\n clearSearch: () => void;\n\n // ── Selection ─────────────────────────────────────────────────────────\n\n /** Get the current text selection. */\n getSelection: () => string;\n /** Whether text is currently selected. */\n hasSelection: () => boolean;\n /** Select all terminal content. */\n selectAll: () => void;\n /** Clear the current selection. */\n clearSelection: () => void;\n\n // ── Scrolling ─────────────────────────────────────────────────────────\n\n /** Scroll to the bottom of the terminal. */\n scrollToBottom: () => void;\n /** Scroll to a specific line. */\n scrollToLine: (line: number) => void;\n /** Scroll up by N lines. */\n scrollUp: (lines: number) => void;\n /** Scroll down by N lines. */\n scrollDown: (lines: number) => void;\n\n // ── Clipboard ─────────────────────────────────────────────────────────\n\n /** Paste data into the terminal. */\n paste: (data: string) => void;\n\n // ── Buffer ────────────────────────────────────────────────────────────\n\n /** Get the full buffer content as a string (via SerializeAddon). */\n getBufferContent: () => string;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\n/**\n * Simple debounce for resize handlers. Returns a debounced function\n * and a cancel function for cleanup.\n */\nfunction debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n ms: number,\n): { run: (...args: Parameters<T>) => void; cancel: () => void } {\n let timer: ReturnType<typeof setTimeout> | null = null;\n return {\n run: (...args: Parameters<T>) => {\n if (timer !== null) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, ms);\n },\n cancel: () => {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n },\n };\n}\n\n/**\n * Production-grade terminal component built on xterm.js 6.\n *\n * Designed for the Omniview IDE bottom-drawer terminal, but usable anywhere.\n * Wire `onData` → `ExecClient.WriteSession` and `onResize` → `ExecClient.ResizeSession`,\n * then write session stdout/stderr to the handle's `write()` method.\n *\n * @example\n * ```tsx\n * const ref = useRef<TerminalHandle>(null);\n *\n * <Terminal\n * ref={ref}\n * onReady={({ cols, rows }) => {\n * attachSession(sessionId);\n * resizeSession(sessionId, rows, cols);\n * }}\n * onData={(data) => writeSession(sessionId, data)}\n * onResize={(cols, rows) => resizeSession(sessionId, rows, cols)}\n * autoFocus\n * />\n * ```\n */\nexport const Terminal = forwardRef<TerminalHandle, TerminalProps>(function Terminal(\n {\n onData,\n onBinaryData,\n onResize,\n onSignal,\n onError,\n onClose,\n onReady,\n onBell,\n onTitleChange,\n onKey,\n onSelectionChange,\n onLineFeed,\n onScroll,\n onWriteParsed,\n fontSize = 13,\n fontFamily,\n fontWeight,\n fontWeightBold,\n scrollback = 5000,\n cursorBlink = true,\n cursorStyle,\n cursorWidth,\n lineHeight,\n letterSpacing,\n drawBoldTextInBrightColors = true,\n convertEol = true,\n allowTransparency = true,\n macOptionIsMeta = true,\n macOptionClickForcesSelection = true,\n linkHandling = true,\n disableStdin,\n customKeyEventHandler,\n autoFocus = false,\n renderer = 'auto',\n rows: initialRows,\n cols: initialCols,\n screenReaderMode,\n minimumContrastRatio,\n className,\n },\n ref,\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const termRef = useRef<unknown>(null);\n const fitAddonRef = useRef<unknown>(null);\n const searchAddonRef = useRef<unknown>(null);\n const serializeAddonRef = useRef<unknown>(null);\n const addonsRef = useRef<Array<{ dispose: () => void }>>([]);\n const observerRef = useRef<ResizeObserver | null>(null);\n const debouncedFitRef = useRef<{ run: () => void; cancel: () => void } | null>(null);\n const windowResizeCleanupRef = useRef<(() => void) | null>(null);\n const theme = useEditorTheme();\n\n // Stable refs for callbacks to avoid re-initializing terminal\n const callbacksRef = useRef({\n onData, onBinaryData, onResize, onSignal, onError, onClose, onReady,\n onBell, onTitleChange, onKey, onSelectionChange, onLineFeed, onScroll, onWriteParsed,\n });\n callbacksRef.current = {\n onData, onBinaryData, onResize, onSignal, onError, onClose, onReady,\n onBell, onTitleChange, onKey, onSelectionChange, onLineFeed, onScroll, onWriteParsed,\n };\n\n const fit = useCallback(() => {\n try {\n const addon = fitAddonRef.current as { fit?: () => void } | null;\n addon?.fit?.();\n } catch {\n // fit() can throw if container has zero dimensions (e.g., hidden tab)\n }\n }, []);\n\n useImperativeHandle(ref, () => ({\n write: (data: string | Uint8Array) => {\n const t = termRef.current as { write?: (d: string | Uint8Array) => void } | null;\n t?.write?.(data);\n },\n writeln: (data: string) => {\n const t = termRef.current as { writeln?: (d: string) => void } | null;\n t?.writeln?.(data);\n },\n clear: () => {\n const t = termRef.current as { clear?: () => void } | null;\n t?.clear?.();\n },\n focus: () => {\n const t = termRef.current as { focus?: () => void } | null;\n t?.focus?.();\n },\n blur: () => {\n const t = termRef.current as { blur?: () => void } | null;\n t?.blur?.();\n },\n fit,\n getDimensions: () => {\n const t = termRef.current as { cols?: number; rows?: number } | null;\n if (t && typeof t.cols === 'number' && typeof t.rows === 'number') {\n return { cols: t.cols, rows: t.rows };\n }\n return null;\n },\n reset: () => {\n const t = termRef.current as { reset?: () => void } | null;\n t?.reset?.();\n },\n scrollToBottom: () => {\n const t = termRef.current as { scrollToBottom?: () => void } | null;\n t?.scrollToBottom?.();\n },\n findNext: (term: string, options?: TerminalSearchOptions): boolean => {\n const s = searchAddonRef.current as { findNext?: (t: string, o?: TerminalSearchOptions) => boolean } | null;\n return s?.findNext?.(term, options) ?? false;\n },\n findPrevious: (term: string, options?: TerminalSearchOptions): boolean => {\n const s = searchAddonRef.current as { findPrevious?: (t: string, o?: TerminalSearchOptions) => boolean } | null;\n return s?.findPrevious?.(term, options) ?? false;\n },\n clearSearch: () => {\n const s = searchAddonRef.current as { clearDecorations?: () => void } | null;\n s?.clearDecorations?.();\n },\n getSelection: (): string => {\n const t = termRef.current as { getSelection?: () => string } | null;\n return t?.getSelection?.() ?? '';\n },\n hasSelection: (): boolean => {\n const t = termRef.current as { hasSelection?: () => boolean } | null;\n return t?.hasSelection?.() ?? false;\n },\n selectAll: () => {\n const t = termRef.current as { selectAll?: () => void } | null;\n t?.selectAll?.();\n },\n clearSelection: () => {\n const t = termRef.current as { clearSelection?: () => void } | null;\n t?.clearSelection?.();\n },\n scrollToLine: (line: number) => {\n const t = termRef.current as { scrollToLine?: (l: number) => void } | null;\n t?.scrollToLine?.(line);\n },\n scrollUp: (lines: number) => {\n const t = termRef.current as { scrollLines?: (l: number) => void } | null;\n t?.scrollLines?.(-lines);\n },\n scrollDown: (lines: number) => {\n const t = termRef.current as { scrollLines?: (l: number) => void } | null;\n t?.scrollLines?.(lines);\n },\n paste: (data: string) => {\n const t = termRef.current as { paste?: (d: string) => void } | null;\n t?.paste?.(data);\n },\n getBufferContent: (): string => {\n const s = serializeAddonRef.current as { serialize?: () => string } | null;\n return s?.serialize?.() ?? '';\n },\n }));\n\n // Initialize xterm lazily.\n // @note Mount-only props (read once during init, not reactive): fontFamily, fontWeight,\n // fontWeightBold, allowTransparency, convertEol, macOptionIsMeta,\n // macOptionClickForcesSelection, drawBoldTextInBrightColors, disableStdin, cursorWidth,\n // initialRows, initialCols, screenReaderMode, minimumContrastRatio, customKeyEventHandler,\n // autoFocus, renderer, linkHandling. Changing these after mount requires remounting.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n let disposed = false;\n\n async function init() {\n // Wait for fonts to be ready to prevent wrong char width measurements\n await document.fonts.ready;\n\n const [{ Terminal: XTerminal }, { FitAddon }, { SearchAddon }, { SerializeAddon }, { Unicode11Addon }] =\n await Promise.all([\n import('@xterm/xterm'),\n import('@xterm/addon-fit'),\n import('@xterm/addon-search'),\n import('@xterm/addon-serialize'),\n import('@xterm/addon-unicode11'),\n ]);\n\n if (disposed) return;\n\n const xtermTheme = buildXtermTheme(container);\n const termOptions: Record<string, unknown> = {\n fontSize,\n fontFamily: fontFamily || \"'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', monospace\",\n theme: xtermTheme,\n allowTransparency,\n cursorBlink,\n convertEol,\n scrollback,\n macOptionIsMeta,\n macOptionClickForcesSelection,\n allowProposedApi: true,\n drawBoldTextInBrightColors,\n };\n\n if (fontWeight !== undefined) termOptions.fontWeight = fontWeight;\n if (fontWeightBold !== undefined) termOptions.fontWeightBold = fontWeightBold;\n if (disableStdin !== undefined) termOptions.disableStdin = disableStdin;\n if (cursorStyle !== undefined) termOptions.cursorStyle = cursorStyle;\n if (cursorWidth !== undefined) termOptions.cursorWidth = cursorWidth;\n if (lineHeight !== undefined) termOptions.lineHeight = lineHeight;\n if (letterSpacing !== undefined) termOptions.letterSpacing = letterSpacing;\n if (initialRows !== undefined) termOptions.rows = initialRows;\n if (initialCols !== undefined) termOptions.cols = initialCols;\n if (screenReaderMode !== undefined) termOptions.screenReaderMode = screenReaderMode;\n if (minimumContrastRatio !== undefined) termOptions.minimumContrastRatio = minimumContrastRatio;\n\n const term = new XTerminal(termOptions);\n\n if (customKeyEventHandler) {\n (term as unknown as { attachCustomKeyEventHandler: (h: (e: KeyboardEvent) => boolean) => void })\n .attachCustomKeyEventHandler(customKeyEventHandler);\n }\n\n const loadedAddons: Array<{ dispose: () => void }> = [];\n\n const fitAddon = new FitAddon();\n const searchAddon = new SearchAddon();\n const serializeAddon = new SerializeAddon();\n const unicode11Addon = new Unicode11Addon();\n term.loadAddon(fitAddon);\n term.loadAddon(searchAddon);\n term.loadAddon(serializeAddon);\n term.loadAddon(unicode11Addon);\n loadedAddons.push(fitAddon, searchAddon, serializeAddon, unicode11Addon);\n\n // Activate unicode11 for proper emoji/CJK width\n (term as unknown as { unicode: { activeVersion: string } }).unicode.activeVersion = '11';\n\n // Load web links addon for clickable URLs\n if (linkHandling) {\n try {\n const { WebLinksAddon } = await import('@xterm/addon-web-links');\n if (!disposed) {\n const webLinksAddon = new WebLinksAddon();\n term.loadAddon(webLinksAddon);\n loadedAddons.push(webLinksAddon);\n }\n } catch {\n // Web links addon not available, non-critical\n }\n }\n\n if (disposed) {\n term.dispose();\n return;\n }\n\n // Open terminal in container\n term.open(container!);\n\n // Load renderer based on prop\n if (renderer === 'auto' || renderer === 'webgl') {\n try {\n const { WebglAddon } = await import('@xterm/addon-webgl');\n if (!disposed) {\n const webglAddon = new WebglAddon();\n webglAddon.onContextLoss(() => {\n webglAddon.dispose();\n });\n term.loadAddon(webglAddon);\n loadedAddons.push(webglAddon);\n }\n } catch {\n // WebGL not available, DOM renderer is used as fallback\n }\n }\n // renderer === 'dom' — no extra addon needed\n\n if (disposed) {\n for (const addon of loadedAddons) {\n try {\n addon.dispose();\n } catch {\n // ignore\n }\n }\n term.dispose();\n return;\n }\n\n // Theme may have changed while optional addons were loading.\n term.options.theme = buildXtermTheme(container);\n\n // Initial fit\n fitAddon.fit();\n\n // Store refs\n termRef.current = term;\n fitAddonRef.current = fitAddon;\n searchAddonRef.current = searchAddon;\n serializeAddonRef.current = serializeAddon;\n addonsRef.current = loadedAddons;\n\n // Wire up callbacks via stable refs\n term.onData((data: string) => {\n callbacksRef.current.onData?.(data);\n });\n\n term.onBinary((data: string) => {\n callbacksRef.current.onBinaryData?.(data);\n });\n\n term.onResize(({ cols, rows }: { cols: number; rows: number }) => {\n callbacksRef.current.onResize?.(cols, rows);\n });\n\n (term as unknown as { onBell: (cb: () => void) => void }).onBell(() => {\n callbacksRef.current.onBell?.();\n });\n\n (term as unknown as { onTitleChange: (cb: (t: string) => void) => void }).onTitleChange(\n (title: string) => {\n callbacksRef.current.onTitleChange?.(title);\n },\n );\n\n (term as unknown as { onKey: (cb: (e: { key: string; domEvent: KeyboardEvent }) => void) => void }).onKey(\n (event: { key: string; domEvent: KeyboardEvent }) => {\n callbacksRef.current.onKey?.(event);\n },\n );\n\n (term as unknown as { onSelectionChange: (cb: () => void) => void }).onSelectionChange(() => {\n callbacksRef.current.onSelectionChange?.();\n });\n\n (term as unknown as { onLineFeed: (cb: () => void) => void }).onLineFeed(() => {\n callbacksRef.current.onLineFeed?.();\n });\n\n (term as unknown as { onScroll: (cb: (p: number) => void) => void }).onScroll((pos: number) => {\n callbacksRef.current.onScroll?.(pos);\n });\n\n (term as unknown as { onWriteParsed: (cb: () => void) => void }).onWriteParsed(() => {\n callbacksRef.current.onWriteParsed?.();\n });\n\n // Debounced fit for resize handling (10ms debounce like legacy impl)\n const debouncedFit = debounce(() => {\n try {\n fitAddon.fit();\n } catch {\n // Ignore fit errors (zero-size container, etc.)\n }\n }, 10);\n debouncedFitRef.current = debouncedFit;\n\n // ResizeObserver for container resize\n const resizeObserver = new ResizeObserver(() => {\n debouncedFit.run();\n });\n resizeObserver.observe(container!);\n observerRef.current = resizeObserver;\n\n // Window resize handler as additional safety\n const handleWindowResize = () => {\n debouncedFit.run();\n };\n window.addEventListener('resize', handleWindowResize);\n\n // Store window resize cleanup in a ref (not on the DOM node)\n windowResizeCleanupRef.current = () => {\n window.removeEventListener('resize', handleWindowResize);\n };\n\n // Auto-focus if requested\n if (autoFocus) {\n term.focus();\n }\n\n // Notify consumer that the terminal is ready\n callbacksRef.current.onReady?.({ cols: term.cols, rows: term.rows });\n }\n\n init().catch((err) => {\n callbacksRef.current.onError?.(err instanceof Error ? err : new Error(String(err)));\n });\n\n return () => {\n disposed = true;\n\n // Cancel pending debounced fit\n debouncedFitRef.current?.cancel();\n debouncedFitRef.current = null;\n\n // Disconnect resize observer\n observerRef.current?.disconnect();\n observerRef.current = null;\n\n // Remove window resize listener\n windowResizeCleanupRef.current?.();\n windowResizeCleanupRef.current = null;\n\n // Dispose addons first, then terminal (proper order)\n for (const addon of addonsRef.current) {\n try {\n addon.dispose();\n } catch {\n // ignore addon disposal errors\n }\n }\n addonsRef.current = [];\n\n // Dispose terminal\n const term = termRef.current as { dispose?: () => void } | null;\n try {\n term?.dispose?.();\n } catch {\n // ignore terminal disposal errors\n }\n\n termRef.current = null;\n fitAddonRef.current = null;\n searchAddonRef.current = null;\n serializeAddonRef.current = null;\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update theme dynamically without recreating terminal\n useEffect(() => {\n const term = termRef.current as { options?: { theme: unknown } } | null;\n if (term?.options) {\n term.options.theme = buildXtermTheme(containerRef.current);\n }\n }, [theme.registration]);\n\n // Update font size dynamically\n useEffect(() => {\n const term = termRef.current as { options?: { fontSize: number } } | null;\n if (term?.options) {\n term.options.fontSize = fontSize;\n debouncedFitRef.current?.run();\n }\n }, [fontSize]);\n\n // Update dynamically updatable options\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (cursorBlink !== undefined) term.options.cursorBlink = cursorBlink;\n }, [cursorBlink]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (cursorStyle !== undefined) term.options.cursorStyle = cursorStyle;\n }, [cursorStyle]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (scrollback !== undefined) term.options.scrollback = scrollback;\n }, [scrollback]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (lineHeight !== undefined) {\n term.options.lineHeight = lineHeight;\n debouncedFitRef.current?.run();\n }\n }, [lineHeight]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (letterSpacing !== undefined) {\n term.options.letterSpacing = letterSpacing;\n debouncedFitRef.current?.run();\n }\n }, [letterSpacing]);\n\n return <div ref={containerRef} className={cn(styles.Root, className)} data-testid=\"terminal\" />;\n});\n\nTerminal.displayName = 'Terminal';\n","import { Children, forwardRef, isValidElement, lazy, Suspense, useId, useMemo, type ComponentType, type HTMLAttributes, type ReactNode } from 'react';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\n\nimport type { Options as ReactMarkdownOptions } from 'react-markdown';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport {\n Accordion,\n Blockquote,\n Checkbox,\n Code,\n CodeBlock,\n Link,\n Separator,\n Table,\n} from '@omniviewdev/base-ui';\nimport styles from './MarkdownPreview.module.css';\n\nconst REMARK_PLUGINS: NonNullable<ReactMarkdownOptions['remarkPlugins']> = [remarkGfm];\n\nconst ReactMarkdown = lazy(() => import('react-markdown'));\n\nexport interface MarkdownPreviewProps extends HTMLAttributes<HTMLDivElement> {\n content: string;\n allowHtml?: boolean;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\n/** Recursively extract plain text from a hast node tree. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hastText(node: any): string {\n if (!node) return '';\n if (node.type === 'text') return node.value ?? '';\n if (Array.isArray(node.children)) return node.children.map(hastText).join('');\n return '';\n}\n\n/** Accordion wrapper for <details>/<summary> that uses useId() for a stable, deterministic ID. */\nfunction DetailsAccordion({ summaryText, children }: { summaryText: string; children: ReactNode[] }) {\n const id = useId();\n const itemId = `md-details-${id}`;\n return (\n <Accordion animation=\"fast\">\n <Accordion.Item id={itemId} title={summaryText}>\n {children}\n </Accordion.Item>\n </Accordion>\n );\n}\n\n/** Stable component overrides for react-markdown */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MdProps = Record<string, any>;\n\nconst markdownComponents: Record<string, ComponentType<MdProps>> = {\n // Code blocks & inline code\n pre: ({ children }: MdProps) => <>{children}</>,\n code: ({ className, children }: MdProps) => {\n const match = /language-([^\\s]+)/.exec(className ?? '');\n const text = String(children).replace(/\\n$/, '');\n // Fenced blocks: has language class OR contains newlines (multiline = block)\n if (match || text.includes('\\n')) {\n return (\n <CodeBlock language={match?.[1]} copyable>\n {text}\n </CodeBlock>\n );\n }\n return <Code>{children}</Code>;\n },\n\n // Tables\n table: ({ children }: MdProps) => (\n <Table.Root striped hoverable size=\"sm\">\n {children}\n </Table.Root>\n ),\n thead: ({ children }: MdProps) => <Table.Head>{children}</Table.Head>,\n tbody: ({ children }: MdProps) => <Table.Body>{children}</Table.Body>,\n tr: ({ children }: MdProps) => <Table.Row>{children}</Table.Row>,\n th: ({ children, style }: MdProps) => (\n <Table.HeaderCell style={style}>{children}</Table.HeaderCell>\n ),\n td: ({ children, style }: MdProps) => (\n <Table.Cell style={style}>{children}</Table.Cell>\n ),\n\n // Links\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n a: ({ children, href, node, ...rest }: MdProps) => (\n <Link {...rest} href={href} target=\"_blank\" rel=\"noopener noreferrer\" underline=\"hover\">\n {children}\n </Link>\n ),\n\n // Blockquotes\n blockquote: ({ children }: MdProps) => <Blockquote variant=\"plain\">{children}</Blockquote>,\n\n // Horizontal rules\n hr: () => <Separator />,\n\n // Details/summary → Accordion — extract title from the hast node's summary child\n details: ({ children, node }: MdProps) => {\n // Extract summary text from the hast AST (before React renders it)\n let summaryText = 'Details';\n if (node?.children) {\n const summaryNode = node.children.find(\n (c: MdProps) => c.tagName === 'summary',\n );\n if (summaryNode) {\n const text = hastText(summaryNode).trim();\n if (text) summaryText = text;\n }\n }\n\n // Filter out the rendered summary element from React children\n const body: ReactNode[] = [];\n Children.forEach(children, (child) => {\n // Skip the hidden summary marker\n if (isValidElement(child) && (child.props as MdProps)?.['data-md-summary']) {\n return;\n }\n body.push(child);\n });\n\n return <DetailsAccordion summaryText={summaryText}>{body}</DetailsAccordion>;\n },\n // Mark summary so details can filter it out; text is extracted from hast node\n summary: ({ children }: MdProps) => (\n <span hidden data-md-summary>{children}</span>\n ),\n\n // Task list checkboxes — use compound parts for inline rendering\n input: ({ type, checked, disabled }: MdProps) => {\n if (type === 'checkbox') {\n return (\n <Checkbox.Root checked={checked} disabled={disabled} size=\"sm\" className=\"ov-md-checkbox\">\n <Checkbox.Control>\n <Checkbox.Indicator keepMounted />\n </Checkbox.Control>\n </Checkbox.Root>\n );\n }\n return null;\n },\n};\n\nexport const MarkdownPreview = forwardRef<HTMLDivElement, MarkdownPreviewProps>(\n function MarkdownPreview({ content, allowHtml = false, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(styles.Root, className)}\n data-testid=\"markdown-preview\"\n {...props}\n >\n <Suspense\n fallback={\n <div className={styles.Loading} data-testid=\"markdown-loading\">\n Loading…\n </div>\n }\n >\n <MarkdownContent content={content} allowHtml={allowHtml} />\n </Suspense>\n </div>\n );\n },\n);\n\nMarkdownPreview.displayName = 'MarkdownPreview';\n\n/** Sanitize schema that extends the default to allow class on any element (needed for alerts). */\nconst sanitizeSchema = {\n ...defaultSchema,\n attributes: {\n ...defaultSchema.attributes,\n '*': [...(defaultSchema.attributes?.['*'] ?? []), 'className'],\n },\n};\n\n/** Inner component that uses lazy-loaded deps */\nfunction MarkdownContent({ content, allowHtml }: { content: string; allowHtml: boolean }) {\n const rehypePlugins = useMemo(\n () => (allowHtml ? [rehypeRaw, [rehypeSanitize, sanitizeSchema]] : []),\n [allowHtml],\n );\n\n return (\n <ReactMarkdown\n skipHtml={!allowHtml}\n remarkPlugins={REMARK_PLUGINS}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rehypePlugins={rehypePlugins as any}\n components={markdownComponents}\n >\n {content}\n </ReactMarkdown>\n );\n}\n","import {\n forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useSyncExternalStore,\n type ReactNode, type RefObject,\n} from 'react';\nimport {\n CommandList, useCommandListConfig, useCommandListStoreContext,\n} from '@omniviewdev/base-ui';\nimport styles from './CommandPalette.module.css';\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n shortcut?: string;\n group?: string;\n disabled?: boolean;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n commands: CommandItem[];\n onSelect: (command: CommandItem) => void;\n placeholder?: string;\n /** Caller-owned pending state; previous commands cannot execute while loading. */\n loading?: boolean;\n /** Caller-owned failure message. Takes precedence over loading and empty states. */\n error?: string;\n}\n\nfunction getCommandKey(cmd: CommandItem): string {\n return cmd.id;\n}\n\nfunction fuzzyMatch(text: string, query: string): boolean {\n const lower = text.toLowerCase();\n const q = query.toLowerCase();\n let qi = 0;\n for (let i = 0; i < lower.length && qi < q.length; i++) {\n if (lower[i] === q[qi]) qi++;\n }\n return qi === q.length;\n}\n\nfunction matchesCommand(cmd: CommandItem, query: string): boolean {\n return fuzzyMatch(cmd.label, query) ||\n (cmd.description ? fuzzyMatch(cmd.description, query) : false) ||\n (cmd.group ? fuzzyMatch(cmd.group, query) : false);\n}\n\nconst NO_COMMANDS: CommandItem[] = [];\n\n/** CommandList puts combobox state on its root; the palette keeps it on the focused input. */\nfunction PaletteInput({ inputRef }: { inputRef: RefObject<HTMLInputElement | null> }) {\n const { listId } = useCommandListConfig();\n const store = useCommandListStoreContext();\n const { activeKey } = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const activeId = activeKey != null ? `${listId}-item-${activeKey}` : undefined;\n\n useLayoutEffect(() => {\n if (activeId) {\n inputRef.current?.ownerDocument.getElementById(activeId)?.scrollIntoView?.({ block: 'nearest' });\n }\n }, [activeId, inputRef]);\n\n return (\n <CommandList.Input\n ref={inputRef}\n autoFocus={false}\n role=\"combobox\"\n aria-label=\"Search commands\"\n aria-expanded=\"true\"\n aria-haspopup=\"listbox\"\n aria-activedescendant={activeId}\n autoComplete=\"off\"\n spellCheck={false}\n data-testid=\"command-palette-input\"\n />\n );\n}\n\nexport const CommandPalette = forwardRef<HTMLDivElement, CommandPaletteProps>(\n function CommandPalette(\n { open, onClose, commands, onSelect, placeholder = 'Type a command…', loading = false, error },\n ref,\n ) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const composingRef = useRef(false);\n const failed = error !== undefined;\n const enabledCommands = useMemo(\n () => commands.filter((c) => !c.disabled),\n [commands],\n );\n const visibleCommands = failed || loading ? NO_COMMANDS : enabledCommands;\n\n // Group only contiguous runs. Merging equal group labels would reorder caller results.\n const groups = useMemo(() => {\n const keys = new Map<string, string>();\n const labels = new Map<string, string>();\n let previous: string | undefined;\n let run = -1;\n for (const command of visibleCommands) {\n const label = command.group || 'Other commands';\n if (label !== previous) run++;\n previous = label;\n const key = String(run);\n keys.set(command.id, key);\n labels.set(key, label);\n }\n return { keys, labels, grouped: visibleCommands.some((command) => command.group) };\n }, [visibleCommands]);\n const groupBy = useCallback((cmd: CommandItem) => groups.keys.get(cmd.id)!, [groups]);\n const groupLabel = useCallback((key: string) => groups.labels.get(key)!, [groups]);\n\n useLayoutEffect(() => {\n if (!open) return;\n const dialog = dialogRef.current;\n const doc = dialog?.ownerDocument;\n const opener = doc?.activeElement;\n composingRef.current = false;\n inputRef.current?.focus({ preventScroll: true });\n return () => {\n // Respect commands that intentionally focus a navigation destination.\n if (opener instanceof HTMLElement && opener.isConnected &&\n (doc?.activeElement === doc?.body || dialog?.contains(doc?.activeElement ?? null))) {\n opener.focus({ preventScroll: true });\n }\n };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n role=\"presentation\"\n className={styles.Overlay}\n onClick={onClose}\n data-testid=\"command-palette-overlay\"\n >\n <div\n ref={(node) => {\n dialogRef.current = node;\n if (typeof ref === 'function') return ref(node);\n if (ref) ref.current = node;\n }}\n className={styles.Root}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(event) => {\n // Nonfocusable headings/results must not strand keyboard focus on the page body.\n if (event.button === 0 && event.target instanceof Element &&\n !event.target.closest('input, button')) {\n event.preventDefault();\n inputRef.current?.focus({ preventScroll: true });\n }\n }}\n onKeyDown={(e) => e.stopPropagation()}\n onCompositionStartCapture={() => { composingRef.current = true; }}\n onCompositionEndCapture={() => { composingRef.current = false; }}\n onKeyDownCapture={(event) => {\n // Stop command handlers without preventing the IME's native default action.\n if (composingRef.current || event.nativeEvent.isComposing || event.keyCode === 229) {\n event.stopPropagation();\n return;\n }\n // A focused Clear search button owns Enter/Space, not the command list.\n if (event.target instanceof HTMLButtonElement &&\n event.key !== 'Escape' && event.key !== 'Tab') {\n event.stopPropagation();\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n onClose();\n } else if (event.key === 'Tab') {\n const controls = dialogRef.current?.querySelectorAll<HTMLElement>(\n 'input:not(:disabled), button:not(:disabled)',\n );\n if (!controls?.length) return;\n const first = controls[0]!;\n const last = controls[controls.length - 1]!;\n const active = first.ownerDocument.activeElement;\n if ((event.shiftKey && active === first) || (!event.shiftKey && active === last)) {\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n }\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n data-testid=\"command-palette\"\n >\n <CommandList.Root\n className={styles.CommandList}\n role=\"presentation\"\n aria-expanded={undefined}\n aria-haspopup={undefined}\n aria-owns={undefined}\n aria-activedescendant={undefined}\n items={visibleCommands}\n itemKey={getCommandKey}\n renderItem={(cmd, meta) => (\n <CommandList.Item\n itemKey={meta.key}\n data-testid={`command-item-${cmd.id}`}\n >\n {cmd.icon && (\n <CommandList.ItemIcon aria-hidden=\"true\">{cmd.icon}</CommandList.ItemIcon>\n )}\n <CommandList.ItemLabel>{cmd.label}</CommandList.ItemLabel>\n {cmd.description && (\n <CommandList.ItemDescription>\n {cmd.description}\n </CommandList.ItemDescription>\n )}\n {cmd.shortcut && (\n <CommandList.ItemShortcut>\n {cmd.shortcut}\n </CommandList.ItemShortcut>\n )}\n </CommandList.Item>\n )}\n filterFn={matchesCommand}\n sortByScore={false}\n groupBy={groups.grouped ? groupBy : undefined}\n groupLabel={groupLabel}\n loading={loading && !failed}\n onAction={(key) => {\n const current = visibleCommands.find((command) => command.id === key && !command.disabled);\n if (!current) return;\n onSelect(current);\n onClose();\n }}\n onDismiss={onClose}\n placeholder={placeholder}\n density=\"compact\"\n >\n <PaletteInput inputRef={inputRef} />\n <CommandList.Results\n className={styles.Results}\n aria-label=\"Commands\"\n aria-busy={loading && !failed}\n data-testid=\"command-palette-list\"\n />\n {failed ? (\n <div role=\"alert\" className={styles.Message} data-testid=\"command-palette-error\">\n {error || 'Unable to load commands.'}\n </div>\n ) : (\n <>\n <CommandList.Loading role=\"status\" data-testid=\"command-palette-loading\">\n Loading commands…\n </CommandList.Loading>\n <CommandList.Empty role=\"status\" data-testid=\"command-palette-empty\">\n No matching commands\n </CommandList.Empty>\n </>\n )}\n </CommandList.Root>\n </div>\n </div>\n );\n },\n);\n\nCommandPalette.displayName = 'CommandPalette';\n","import { forwardRef, useCallback, useEffect, useMemo, useRef, useState, type CSSProperties, type HTMLAttributes } from 'react';\nimport styles from './ObjectInspector.module.css';\n\nexport type InspectorFormat = 'json' | 'yaml';\n\nexport interface ObjectInspectorProps extends HTMLAttributes<HTMLDivElement> {\n data: unknown;\n format?: InspectorFormat;\n defaultExpanded?: boolean | number;\n searchable?: boolean;\n copyable?: boolean;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\nfunction getType(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n return typeof value;\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return JSON.stringify(value);\n if (typeof value === 'boolean') return String(value);\n if (typeof value === 'number') return String(value);\n return String(value);\n}\n\nfunction shouldExpand(defaultExpanded: boolean | number, depth: number): boolean {\n if (typeof defaultExpanded === 'boolean') return defaultExpanded;\n return depth < defaultExpanded;\n}\n\nfunction matchesSearch(key: string, value: unknown, query: string): boolean {\n const q = query.toLowerCase();\n if (key.toLowerCase().includes(q)) return true;\n if (typeof value === 'string' && value.toLowerCase().includes(q)) return true;\n if (typeof value === 'number' && String(value).includes(q)) return true;\n if (typeof value === 'boolean' && String(value).includes(q)) return true;\n return false;\n}\n\n/** Check if a value is a non-null object that can be tracked by WeakSet. */\nfunction isObjectRef(value: unknown): value is object {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n}\n\n/** Subset of WeakSet used for ancestor tracking (read-only checks). */\ninterface AncestorSet {\n has(value: object): boolean;\n}\n\n/**\n * Check if any descendant of `value` matches `query`. Results are cached\n * per object+query in `cache` to avoid O(n²) re-scanning from each TreeNode.\n */\nfunction subtreeMatches(\n value: unknown,\n query: string,\n ancestors: AncestorSet,\n cache: WeakMap<object, boolean>,\n): boolean {\n if (!query) return false;\n const type = getType(value);\n if (type !== 'object' && type !== 'array') return false;\n if (value === null || value === undefined) return false;\n if (isObjectRef(value) && ancestors.has(value)) return false;\n\n // Return cached result if available\n if (isObjectRef(value) && cache.has(value)) return cache.get(value)!;\n\n const childAncestors: AncestorSet = {\n has: (v: object) => v === value || ancestors.has(v),\n };\n let result = false;\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (matchesSearch(k, v, query) || subtreeMatches(v, query, childAncestors, cache)) {\n result = true;\n break;\n }\n }\n\n if (isObjectRef(value)) cache.set(value, result);\n return result;\n}\n\ninterface TreeNodeProps {\n nodeKey: string;\n value: unknown;\n depth: number;\n defaultExpanded: boolean | number;\n searchQuery: string;\n isLast: boolean;\n /** Ancestor object references for circular reference detection. */\n ancestors: AncestorSet;\n /** Per-query cache for subtreeMatches results (shared across all nodes). */\n searchCache: WeakMap<object, boolean>;\n}\n\nfunction TreeNode({\n nodeKey,\n value,\n depth,\n defaultExpanded,\n searchQuery,\n isLast,\n ancestors,\n searchCache,\n}: TreeNodeProps) {\n const type = getType(value);\n const isExpandable = type === 'object' || type === 'array';\n\n // Detect circular references by checking if this value is already an ancestor\n const isCircular = isExpandable && isObjectRef(value) && ancestors.has(value);\n\n const [expanded, setExpanded] = useState(\n () => isExpandable && !isCircular && shouldExpand(defaultExpanded, depth),\n );\n\n // Track whether the node was force-expanded by search so we can restore\n // the exact pre-search state when the search is cleared.\n const searchExpandedRef = useRef(false);\n const preSearchExpandedRef = useRef(false);\n\n // Auto-expand when search matches a descendant\n const hasDescendantMatch = useMemo(\n () => searchQuery ? subtreeMatches(value, searchQuery, ancestors, searchCache) : false,\n [searchQuery, value, ancestors, searchCache],\n );\n\n // Force expand when search finds matches in descendants\n useEffect(() => {\n if (searchQuery && hasDescendantMatch && isExpandable && !isCircular && !expanded) {\n // Only snapshot pre-search state the first time we force-open\n if (!searchExpandedRef.current) {\n preSearchExpandedRef.current = expanded;\n }\n searchExpandedRef.current = true;\n setExpanded(true);\n }\n // Restore pre-search state when search clears OR node stops matching\n if (searchExpandedRef.current && (!searchQuery || !hasDescendantMatch)) {\n searchExpandedRef.current = false;\n setExpanded(preSearchExpandedRef.current);\n }\n }, [searchQuery, hasDescendantMatch, isExpandable, isCircular, expanded]);\n\n // Create a new ancestors set that includes this value for children.\n // WeakSet doesn't support iteration, so we use a duck-typed wrapper\n // that checks both the parent set and the current value.\n const childAncestors = useMemo(() => {\n if (!isExpandable || !isObjectRef(value) || isCircular) return ancestors;\n return {\n has: (v: object) => v === value || ancestors.has(v),\n };\n }, [isExpandable, value, isCircular, ancestors]);\n\n const entries = useMemo(() => {\n if (!isExpandable || value === null || value === undefined || isCircular) return [];\n return Object.entries(value as Record<string, unknown>);\n }, [isExpandable, value, isCircular]);\n\n const toggle = useCallback(() => {\n if (isExpandable && !isCircular) setExpanded((prev) => !prev);\n }, [isExpandable, isCircular]);\n\n const isHighlighted = searchQuery && matchesSearch(nodeKey, value, searchQuery);\n\n const preview = isCircular\n ? '[Circular]'\n : isExpandable\n ? type === 'array'\n ? `Array(${(value as unknown[]).length})`\n : `{${entries.length}}`\n : null;\n\n return (\n <div className={styles.Node} data-depth={depth}>\n <div\n className={cn(styles.Row, isHighlighted && styles.RowHighlight)}\n style={{ '--_inspector-depth-indent': `${depth * 16}px` } as CSSProperties}\n onClick={toggle}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggle();\n }\n }}\n tabIndex={0}\n role=\"treeitem\"\n aria-expanded={isExpandable && !isCircular ? expanded : undefined}\n data-testid={`inspector-node-${nodeKey}`}\n >\n {isExpandable && !isCircular ? (\n <span className={cn(styles.Chevron, expanded && styles.ChevronExpanded)}>&#9656;</span>\n ) : (\n <span className={styles.ChevronSpacer} />\n )}\n <span className={styles.Key}>{nodeKey}</span>\n <span className={styles.Colon}>: </span>\n {isExpandable ? (\n <span className={styles.Preview}>{preview}</span>\n ) : (\n <span className={styles.Value} data-type={type}>\n {formatValue(value)}\n </span>\n )}\n {!isLast && !expanded && <span className={styles.Comma}>,</span>}\n </div>\n {expanded &&\n entries.map(([k, v], i) => (\n <TreeNode\n key={k}\n nodeKey={k}\n value={v}\n depth={depth + 1}\n defaultExpanded={defaultExpanded}\n searchQuery={searchQuery}\n isLast={i === entries.length - 1}\n ancestors={childAncestors}\n searchCache={searchCache}\n />\n ))}\n </div>\n );\n}\n\n/** Shared empty WeakSet used as the initial ancestors set. */\nconst EMPTY_ANCESTORS: AncestorSet = new WeakSet<object>();\n\nexport const ObjectInspector = forwardRef<HTMLDivElement, ObjectInspectorProps>(\n function ObjectInspector(\n {\n data,\n format = 'json',\n defaultExpanded = 1,\n searchable = false,\n copyable = false,\n className,\n ...props\n },\n ref,\n ) {\n const [searchQuery, setSearchQuery] = useState('');\n\n const handleCopy = useCallback(async () => {\n try {\n let text: string;\n if (format === 'yaml') {\n text = toYaml(data);\n } else {\n text = safeJsonStringify(data);\n }\n await navigator.clipboard.writeText(text);\n } catch {\n // Clipboard API may not be available (e.g., insecure context)\n }\n }, [data, format]);\n\n // Root starts with an empty ancestors set — the root node itself\n // is not its own ancestor, but its children will see it as one\n const rootAncestors = EMPTY_ANCESTORS;\n\n // Per-query cache for subtreeMatches — invalidated when query changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const searchCache = useMemo(() => new WeakMap<object, boolean>(), [searchQuery]);\n\n return (\n <div\n ref={ref}\n className={cn(styles.Root, className)}\n data-testid=\"object-inspector\"\n data-format={format}\n {...props}\n >\n {(searchable || copyable) && (\n <div className={styles.Toolbar}>\n {searchable && (\n <input\n className={styles.SearchInput}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search keys/values…\"\n aria-label=\"Search object\"\n data-testid=\"inspector-search\"\n />\n )}\n {copyable && (\n <button\n className={styles.CopyButton}\n onClick={handleCopy}\n data-testid=\"inspector-copy\"\n type=\"button\"\n >\n Copy\n </button>\n )}\n </div>\n )}\n <div className={styles.Tree} role=\"tree\" data-testid=\"inspector-tree\">\n <TreeNode\n nodeKey=\"root\"\n value={data}\n depth={0}\n defaultExpanded={defaultExpanded}\n searchQuery={searchQuery}\n isLast\n ancestors={rootAncestors}\n searchCache={searchCache}\n />\n </div>\n </div>\n );\n },\n);\n\nObjectInspector.displayName = 'ObjectInspector';\n\n/** JSON.stringify with circular reference safety (ancestor-stack approach). */\nfunction safeJsonStringify(value: unknown): string {\n // Use an ancestor stack so shared (but non-cyclic) references serialize fully.\n // JSON.stringify calls the replacer with `this` bound to the object that\n // contains the current key. We track ancestors by pushing on enter and\n // popping when we leave.\n const stack: object[] = [];\n return JSON.stringify(\n value,\n function (this: unknown, _key: string, val: unknown) {\n if (typeof val !== 'object' || val === null) return val;\n\n // Trim the stack: `this` is the parent container. Pop until the\n // top of the stack IS the parent (or the stack is empty).\n while (stack.length > 0 && stack[stack.length - 1] !== this) {\n stack.pop();\n }\n\n if (stack.includes(val as object)) return '[Circular]';\n stack.push(val as object);\n return val;\n },\n 2,\n );\n}\n\n/** Check if a YAML scalar needs quoting. */\nfunction needsYamlQuoting(s: string): boolean {\n if (s === '') return true;\n if (/^[\\s]/.test(s) || /[\\s]$/.test(s)) return true;\n // Starts with indicator characters or reserved values\n if (/^[-?:,[\\]{}#&*!|>'\"%@`]/.test(s)) return true;\n // Contains colon+space, hash+space, or other flow indicators\n if (/[:\\s]#|:\\s|[{}[\\],]/.test(s)) return true;\n // YAML boolean/null literals (case-insensitive)\n if (/^(true|false|yes|no|on|off|null|~)$/i.test(s)) return true;\n // Looks like a number\n if (/^[+-]?(\\d+\\.?\\d*|\\.inf|\\.nan)$/i.test(s)) return true;\n return false;\n}\n\n/** Quote a YAML scalar with double quotes, escaping special chars. */\nfunction quoteYaml(s: string): string {\n return '\"' + s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t').replace(/\\r/g, '\\\\r') + '\"';\n}\n\n/** Safely serialize a string as a YAML scalar. */\nfunction yamlScalar(s: string, indent: number): string {\n const prefix = ' '.repeat(indent);\n // Multi-line strings use block scalar\n if (s.includes('\\n')) {\n return `|\\n${prefix} ${s.split('\\n').join(`\\n${prefix} `)}`;\n }\n return needsYamlQuoting(s) ? quoteYaml(s) : s;\n}\n\n/** Simple YAML serializer (no dependency, ancestor-stack approach) */\nfunction toYaml(value: unknown, indent: number = 0, ancestors?: object[]): string {\n const prefix = ' '.repeat(indent);\n if (value === null) return 'null';\n if (value === undefined) return 'null';\n if (typeof value === 'string') return yamlScalar(value, indent);\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n\n if (typeof value === 'object') {\n const stack = ancestors ?? [];\n if (stack.includes(value)) return '\"[Circular]\"';\n const childStack = [...stack, value];\n\n if (Array.isArray(value)) {\n if (value.length === 0) return '[]';\n return value\n .map((item) => `${prefix}- ${toYaml(item, indent + 1, childStack).trimStart()}`)\n .join('\\n');\n }\n\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) return '{}';\n return entries\n .map(([k, v]) => {\n const safeKey = needsYamlQuoting(k) ? quoteYaml(k) : k;\n const serialized = toYaml(v, indent + 1, childStack);\n if (\n typeof v === 'object' &&\n v !== null &&\n (Array.isArray(v) ? v.length > 0 : Object.keys(v).length > 0)\n ) {\n return `${prefix}${safeKey}:\\n${serialized}`;\n }\n return `${prefix}${safeKey}: ${serialized}`;\n })\n .join('\\n');\n }\n\n return String(value);\n}\n","var LIB;(()=>{\"use strict\";var t={975:t=>{function e(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var r,n=\"\",i=0,o=-1,s=0,h=0;h<=t.length;++h){if(h<t.length)r=t.charCodeAt(h);else{if(47===r)break;r=47}if(47===r){if(o===h-1||1===s);else if(o!==h-1&&2===s){if(n.length<2||2!==i||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){var a=n.lastIndexOf(\"/\");if(a!==n.length-1){-1===a?(n=\"\",i=0):i=(n=n.slice(0,a)).length-1-n.lastIndexOf(\"/\"),o=h,s=0;continue}}else if(2===n.length||1===n.length){n=\"\",i=0,o=h,s=0;continue}e&&(n.length>0?n+=\"/..\":n=\"..\",i=2)}else n.length>0?n+=\"/\"+t.slice(o+1,h):n=t.slice(o+1,h),i=h-o-1;o=h,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var t,n=\"\",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var s;o>=0?s=arguments[o]:(void 0===t&&(t=process.cwd()),s=t),e(s),0!==s.length&&(n=s+\"/\"+n,i=47===s.charCodeAt(0))}return n=r(n,!i),i?n.length>0?\"/\"+n:\"/\":n.length>0?n:\".\"},normalize:function(t){if(e(t),0===t.length)return\".\";var n=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t=\".\"),t.length>0&&i&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,r=0;r<arguments.length;++r){var i=arguments[r];e(i),i.length>0&&(void 0===t?t=i:t+=\"/\"+i)}return void 0===t?\".\":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return\"\";if((t=n.resolve(t))===(r=n.resolve(r)))return\"\";for(var i=1;i<t.length&&47===t.charCodeAt(i);++i);for(var o=t.length,s=o-i,h=1;h<r.length&&47===r.charCodeAt(h);++h);for(var a=r.length-h,c=s<a?s:a,f=-1,u=0;u<=c;++u){if(u===c){if(a>c){if(47===r.charCodeAt(h+u))return r.slice(h+u+1);if(0===u)return r.slice(h+u)}else s>c&&(47===t.charCodeAt(i+u)?f=u:0===u&&(f=0));break}var l=t.charCodeAt(i+u);if(l!==r.charCodeAt(h+u))break;47===l&&(f=u)}var g=\"\";for(u=i+f+1;u<=o;++u)u!==o&&47!==t.charCodeAt(u)||(0===g.length?g+=\"..\":g+=\"/..\");return g.length>0?g+r.slice(h+f):(h+=f,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return\".\";for(var r=t.charCodeAt(0),n=47===r,i=-1,o=!0,s=t.length-1;s>=1;--s)if(47===(r=t.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?\"/\":\".\":n&&1===i?\"//\":t.slice(0,i)},basename:function(t,r){if(void 0!==r&&\"string\"!=typeof r)throw new TypeError('\"ext\" argument must be a string');e(t);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return\"\";var h=r.length-1,a=-1;for(n=t.length-1;n>=0;--n){var c=t.charCodeAt(n);if(47===c){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),h>=0&&(c===r.charCodeAt(h)?-1==--h&&(o=n):(h=-1,o=a))}return i===o?o=a:-1===o&&(o=t.length),t.slice(i,o)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?\"\":t.slice(i,o)},extname:function(t){e(t);for(var r=-1,n=0,i=-1,o=!0,s=0,h=t.length-1;h>=0;--h){var a=t.charCodeAt(h);if(47!==a)-1===i&&(o=!1,i=h+1),46===a?-1===r?r=h:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=h+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?\"\":t.slice(r,i)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||\"\")+(e.ext||\"\");return r?r===e.root?r+n:r+\"/\"+n:n}(0,t)},parse:function(t){e(t);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return r;var n,i=t.charCodeAt(0),o=47===i;o?(r.root=\"/\",n=1):n=0;for(var s=-1,h=0,a=-1,c=!0,f=t.length-1,u=0;f>=n;--f)if(47!==(i=t.charCodeAt(f)))-1===a&&(c=!1,a=f+1),46===i?-1===s?s=f:1!==u&&(u=1):-1!==s&&(u=-1);else if(!c){h=f+1;break}return-1===s||-1===a||0===u||1===u&&s===a-1&&s===h+1?-1!==a&&(r.base=r.name=0===h&&o?t.slice(1,a):t.slice(h,a)):(0===h&&o?(r.name=t.slice(1,s),r.base=t.slice(1,a)):(r.name=t.slice(h,s),r.base=t.slice(h,a)),r.ext=t.slice(s,a)),h>0?r.dir=t.slice(0,h-1):o&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};n.posix=n,t.exports=n}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})};var n={};let i;if(r.r(n),r.d(n,{URI:()=>l,Utils:()=>I}),\"object\"==typeof process)i=\"win32\"===process.platform;else if(\"object\"==typeof navigator){let t=navigator.userAgent;i=t.indexOf(\"Windows\")>=0}const o=/^\\w[\\w\\d+.-]*$/,s=/^\\//,h=/^\\/\\//;function a(t,e){if(!t.scheme&&e)throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${t.authority}\", path: \"${t.path}\", query: \"${t.query}\", fragment: \"${t.fragment}\"}`);if(t.scheme&&!o.test(t.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(t.path)if(t.authority){if(!s.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(h.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}const c=\"\",f=\"/\",u=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;class l{static isUri(t){return t instanceof l||!!t&&\"string\"==typeof t.authority&&\"string\"==typeof t.fragment&&\"string\"==typeof t.path&&\"string\"==typeof t.query&&\"string\"==typeof t.scheme&&\"string\"==typeof t.fsPath&&\"function\"==typeof t.with&&\"function\"==typeof t.toString}scheme;authority;path;query;fragment;constructor(t,e,r,n,i,o=!1){\"object\"==typeof t?(this.scheme=t.scheme||c,this.authority=t.authority||c,this.path=t.path||c,this.query=t.query||c,this.fragment=t.fragment||c):(this.scheme=function(t,e){return t||e?t:\"file\"}(t,o),this.authority=e||c,this.path=function(t,e){switch(t){case\"https\":case\"http\":case\"file\":e?e[0]!==f&&(e=f+e):e=f}return e}(this.scheme,r||c),this.query=n||c,this.fragment=i||c,a(this,o))}get fsPath(){return v(this,!1)}with(t){if(!t)return this;let{scheme:e,authority:r,path:n,query:i,fragment:o}=t;return void 0===e?e=this.scheme:null===e&&(e=c),void 0===r?r=this.authority:null===r&&(r=c),void 0===n?n=this.path:null===n&&(n=c),void 0===i?i=this.query:null===i&&(i=c),void 0===o?o=this.fragment:null===o&&(o=c),e===this.scheme&&r===this.authority&&n===this.path&&i===this.query&&o===this.fragment?this:new d(e,r,n,i,o)}static parse(t,e=!1){const r=u.exec(t);return r?new d(r[2]||c,w(r[4]||c),w(r[5]||c),w(r[7]||c),w(r[9]||c),e):new d(c,c,c,c,c)}static file(t){let e=c;if(i&&(t=t.replace(/\\\\/g,f)),t[0]===f&&t[1]===f){const r=t.indexOf(f,2);-1===r?(e=t.substring(2),t=f):(e=t.substring(2,r),t=t.substring(r)||f)}return new d(\"file\",e,t,c,c)}static from(t){const e=new d(t.scheme,t.authority,t.path,t.query,t.fragment);return a(e,!0),e}toString(t=!1){return b(this,t)}toJSON(){return this}static revive(t){if(t){if(t instanceof l)return t;{const e=new d(t);return e._formatted=t.external,e._fsPath=t._sep===g?t.fsPath:null,e}}return t}}const g=i?1:void 0;class d extends l{_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=v(this,!1)),this._fsPath}toString(t=!1){return t?b(this,!0):(this._formatted||(this._formatted=b(this,!1)),this._formatted)}toJSON(){const t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=g),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t}}const p={58:\"%3A\",47:\"%2F\",63:\"%3F\",35:\"%23\",91:\"%5B\",93:\"%5D\",64:\"%40\",33:\"%21\",36:\"%24\",38:\"%26\",39:\"%27\",40:\"%28\",41:\"%29\",42:\"%2A\",43:\"%2B\",44:\"%2C\",59:\"%3B\",61:\"%3D\",32:\"%20\"};function m(t,e,r){let n,i=-1;for(let o=0;o<t.length;o++){const s=t.charCodeAt(o);if(s>=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||e&&47===s||r&&91===s||r&&93===s||r&&58===s)-1!==i&&(n+=encodeURIComponent(t.substring(i,o)),i=-1),void 0!==n&&(n+=t.charAt(o));else{void 0===n&&(n=t.substr(0,o));const e=p[s];void 0!==e?(-1!==i&&(n+=encodeURIComponent(t.substring(i,o)),i=-1),n+=e):-1===i&&(i=o)}}return-1!==i&&(n+=encodeURIComponent(t.substring(i))),void 0!==n?n:t}function y(t){let e;for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);35===n||63===n?(void 0===e&&(e=t.substr(0,r)),e+=p[n]):void 0!==e&&(e+=t[r])}return void 0!==e?e:t}function v(t,e){let r;return r=t.authority&&t.path.length>1&&\"file\"===t.scheme?`//${t.authority}${t.path}`:47===t.path.charCodeAt(0)&&(t.path.charCodeAt(1)>=65&&t.path.charCodeAt(1)<=90||t.path.charCodeAt(1)>=97&&t.path.charCodeAt(1)<=122)&&58===t.path.charCodeAt(2)?e?t.path.substr(1):t.path[1].toLowerCase()+t.path.substr(2):t.path,i&&(r=r.replace(/\\//g,\"\\\\\")),r}function b(t,e){const r=e?y:m;let n=\"\",{scheme:i,authority:o,path:s,query:h,fragment:a}=t;if(i&&(n+=i,n+=\":\"),(o||\"file\"===i)&&(n+=f,n+=f),o){let t=o.indexOf(\"@\");if(-1!==t){const e=o.substr(0,t);o=o.substr(t+1),t=e.lastIndexOf(\":\"),-1===t?n+=r(e,!1,!1):(n+=r(e.substr(0,t),!1,!1),n+=\":\",n+=r(e.substr(t+1),!1,!0)),n+=\"@\"}o=o.toLowerCase(),t=o.lastIndexOf(\":\"),-1===t?n+=r(o,!1,!0):(n+=r(o.substr(0,t),!1,!0),n+=o.substr(t))}if(s){if(s.length>=3&&47===s.charCodeAt(0)&&58===s.charCodeAt(2)){const t=s.charCodeAt(1);t>=65&&t<=90&&(s=`/${String.fromCharCode(t+32)}:${s.substr(3)}`)}else if(s.length>=2&&58===s.charCodeAt(1)){const t=s.charCodeAt(0);t>=65&&t<=90&&(s=`${String.fromCharCode(t+32)}:${s.substr(2)}`)}n+=r(s,!0,!1)}return h&&(n+=\"?\",n+=r(h,!1,!1)),a&&(n+=\"#\",n+=e?a:m(a,!1,!1)),n}function C(t){try{return decodeURIComponent(t)}catch{return t.length>3?t.substr(0,3)+C(t.substr(3)):t}}const A=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function w(t){return t.match(A)?t.replace(A,(t=>C(t))):t}var x=r(975);const P=x.posix||x,_=\"/\";var I;!function(t){t.joinPath=function(t,...e){return t.with({path:P.join(t.path,...e)})},t.resolvePath=function(t,...e){let r=t.path,n=!1;r[0]!==_&&(r=_+r,n=!0);let i=P.resolve(r,...e);return n&&i[0]===_&&!t.authority&&(i=i.substring(1)),t.with({path:i})},t.dirname=function(t){if(0===t.path.length||t.path===_)return t;let e=P.dirname(t.path);return 1===e.length&&46===e.charCodeAt(0)&&(e=\"\"),t.with({path:e})},t.basename=function(t){return P.basename(t.path)},t.extname=function(t){return P.extname(t.path)}}(I||(I={})),LIB=n})();export const{URI,Utils}=LIB;\n//# sourceMappingURL=index.mjs.map","/**\n * Convert a Monaco editor marker severity to an LSP diagnostic severity.\n *\n * @param severity\n * The Monaco marker severity to convert.\n * @returns\n * The marker severity as an LSP diagnostic severity.\n */\nexport function fromMarkerSeverity(severity) {\n if (severity === 1) {\n return 4;\n }\n if (severity === 2) {\n return 3;\n }\n if (severity === 4) {\n return 2;\n }\n return 1;\n}\n/**\n * Convert an LSP diagnostic severity to a Monaco editor marker severity.\n *\n * @param severity\n * The LSP diagnostic severity to convert.\n * @returns\n * The diagnostic severity as Monaco editor marker severity.\n */\nexport function toMarkerSeverity(severity) {\n if (severity === 4) {\n return 1;\n }\n if (severity === 3) {\n return 2;\n }\n if (severity === 2) {\n return 4;\n }\n return 8;\n}\n//# sourceMappingURL=markerSeverity.js.map","/**\n * Convert a Monaco editor marker tag to an LSP diagnostic tag.\n *\n * @param tag\n * The Monaco marker tag to convert.\n * @returns\n * The marker tag as an LSP diagnostic tag.\n */\nexport function fromMarkerTag(tag) {\n return tag;\n}\n/**\n * Convert an LSP diagnostic tag to a Monaco editor marker tag.\n *\n * @param tag\n * The LSP diagnostic tag to convert.\n * @returns\n * The diagnostic tag as Monaco editor marker tag.\n */\nexport function toMarkerTag(tag) {\n return tag;\n}\n//# sourceMappingURL=markerTag.js.map","/**\n * Convert a Monaco editor range to an LSP range.\n *\n * @param range\n * The Monaco range to convert.\n * @returns\n * The range as an LSP range.\n */\nexport function fromRange(range) {\n return {\n start: { line: range.startLineNumber - 1, character: range.startColumn - 1 },\n end: { line: range.endLineNumber - 1, character: range.endColumn - 1 }\n };\n}\n/**\n * Convert an LSP range to a Monaco editor range.\n *\n * @param range\n * The LSP range to convert.\n * @returns\n * The range as Monaco editor range.\n */\nexport function toRange(range) {\n return {\n startLineNumber: range.start.line + 1,\n startColumn: range.start.character + 1,\n endLineNumber: range.end.line + 1,\n endColumn: range.end.character + 1\n };\n}\n//# sourceMappingURL=range.js.map","import { URI } from 'vscode-uri';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor related information to an LSP diagnostic related information.\n *\n * @param relatedInformation\n * The Monaco related information to convert.\n * @returns\n * The related information as an LSP diagnostic related information.\n */\nexport function fromRelatedInformation(relatedInformation) {\n return {\n location: {\n range: fromRange(relatedInformation),\n uri: String(relatedInformation.resource)\n },\n message: relatedInformation.message\n };\n}\n/**\n * Convert an LSP diagnostic related information to a Monaco editor related information.\n *\n * @param relatedInformation\n * The LSP diagnostic related information to convert.\n * @returns\n * The diagnostic related information as Monaco editor related information.\n */\nexport function toRelatedInformation(relatedInformation) {\n return {\n ...toRange(relatedInformation.location.range),\n message: relatedInformation.message,\n resource: URI.parse(relatedInformation.location.uri)\n };\n}\n//# sourceMappingURL=relatedInformation.js.map","import { URI } from 'vscode-uri';\nimport { fromMarkerSeverity, toMarkerSeverity } from './markerSeverity.js';\nimport { fromMarkerTag, toMarkerTag } from './markerTag.js';\nimport { fromRange, toRange } from './range.js';\nimport { fromRelatedInformation, toRelatedInformation } from './relatedInformation.js';\n/**\n * Convert a Monaco editor marker data to an LSP diagnostic.\n *\n * @param markerData\n * The Monaco marker data to convert.\n * @returns\n * The marker data as an LSP diagnostic.\n */\nexport function fromMarkerData(markerData) {\n const diagnostic = {\n message: markerData.message,\n range: fromRange(markerData),\n severity: fromMarkerSeverity(markerData.severity)\n };\n if (typeof markerData.code === 'string') {\n diagnostic.code = markerData.code;\n }\n else if (markerData.code != null) {\n diagnostic.code = markerData.code.value;\n diagnostic.codeDescription = { href: String(markerData.code.target) };\n }\n if (markerData.relatedInformation) {\n diagnostic.relatedInformation = markerData.relatedInformation.map(fromRelatedInformation);\n }\n if (markerData.tags) {\n diagnostic.tags = markerData.tags.map(fromMarkerTag);\n }\n if (markerData.source != null) {\n diagnostic.source = markerData.source;\n }\n return diagnostic;\n}\n/**\n * Convert an LSP diagnostic to a Monaco editor marker data.\n *\n * @param diagnostic\n * The LSP diagnostic to convert.\n * @returns\n * The diagnostic as Monaco editor marker data.\n */\nexport function toMarkerData(diagnostic) {\n const markerData = {\n ...toRange(diagnostic.range),\n message: diagnostic.message,\n severity: diagnostic.severity\n ? toMarkerSeverity(diagnostic.severity)\n : 8\n };\n if (diagnostic.code != null) {\n markerData.code =\n diagnostic.codeDescription == null\n ? String(diagnostic.code)\n : { value: String(diagnostic.code), target: URI.parse(diagnostic.codeDescription.href) };\n }\n if (diagnostic.relatedInformation) {\n markerData.relatedInformation = diagnostic.relatedInformation.map(toRelatedInformation);\n }\n if (diagnostic.tags) {\n markerData.tags = diagnostic.tags.map(toMarkerTag);\n }\n if (diagnostic.source != null) {\n markerData.source = diagnostic.source;\n }\n return markerData;\n}\n//# sourceMappingURL=markerData.js.map","import { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor text edit to an LSP text edit.\n *\n * @param textEdit\n * The Monaco text edit to convert.\n * @returns\n * The text edit as an LSP text edit.\n */\nexport function fromTextEdit(textEdit) {\n return {\n range: fromRange(textEdit.range),\n newText: textEdit.text\n };\n}\n/**\n * Convert an LSP text edit to a Monaco editor text edit.\n *\n * @param textEdit\n * The LSP text edit to convert.\n * @returns\n * The text edit as Monaco editor text edit.\n */\nexport function toTextEdit(textEdit) {\n return {\n range: toRange(textEdit.range),\n text: textEdit.newText\n };\n}\n//# sourceMappingURL=textEdit.js.map","/**\n * Convert Monaco editor workspace file edit options to LSP workspace file edit options.\n *\n * @param options\n * The Monaco workspace file edit options to convert.\n * @returns\n * The range as LSP workspace file edit options.\n */\nexport function fromWorkspaceFileEditOptions(options) {\n const result = {};\n if (options.ignoreIfExists != null) {\n result.ignoreIfExists = options.ignoreIfExists;\n }\n if (options.ignoreIfNotExists != null) {\n result.ignoreIfNotExists = options.ignoreIfNotExists;\n }\n if (options.overwrite != null) {\n result.overwrite = options.overwrite;\n }\n if (options.recursive != null) {\n result.recursive = options.recursive;\n }\n return result;\n}\n/**\n * Convert LSP workspace file edit options to Monaco editor workspace file edit options.\n *\n * @param options\n * The LSP workspace file edit options to convert.\n * @returns\n * The workspace file edit options Monaco editor workspace file edit options.\n */\nexport function toWorkspaceFileEditOptions(options) {\n const result = {};\n if (options.ignoreIfExists != null) {\n result.ignoreIfExists = options.ignoreIfExists;\n }\n if (options.ignoreIfNotExists != null) {\n result.ignoreIfNotExists = options.ignoreIfNotExists;\n }\n if (options.overwrite != null) {\n result.overwrite = options.overwrite;\n }\n if (options.recursive != null) {\n result.recursive = options.recursive;\n }\n return result;\n}\n//# sourceMappingURL=workspaceFileEditOptions.js.map","import { URI } from 'vscode-uri';\nimport { fromWorkspaceFileEditOptions, toWorkspaceFileEditOptions } from './workspaceFileEditOptions.js';\n/**\n * Convert Monaco editor workspace file edit options to LSP workspace file edit options.\n *\n * @param workspaceFileEdit\n * The Monaco workspace file edit options to convert.\n * @returns\n * The range as LSP workspace file edit options.\n */\nexport function fromWorkspaceFileEdit(workspaceFileEdit) {\n let result;\n if (workspaceFileEdit.oldResource) {\n result = workspaceFileEdit.newResource\n ? {\n kind: 'rename',\n oldUri: String(workspaceFileEdit.oldResource),\n newUri: String(workspaceFileEdit.newResource)\n }\n : {\n kind: 'delete',\n uri: String(workspaceFileEdit.oldResource)\n };\n }\n else if (workspaceFileEdit.newResource) {\n result = {\n kind: 'create',\n uri: String(workspaceFileEdit.newResource)\n };\n }\n else {\n throw new Error('Could not convert workspace file edit to language server type', {\n cause: workspaceFileEdit\n });\n }\n if (workspaceFileEdit.options) {\n result.options = fromWorkspaceFileEditOptions(workspaceFileEdit.options);\n }\n return result;\n}\n/**\n * Convert an LSP workspace file edit to a Monaco editor workspace file edit.\n *\n * @param workspaceFileEdit\n * The LSP workspace file edit to convert.\n * @returns\n * The workspace file edit options Monaco editor workspace file edit options.\n */\nexport function toWorkspaceFileEdit(workspaceFileEdit) {\n const result = workspaceFileEdit.kind === 'create'\n ? { newResource: URI.parse(workspaceFileEdit.uri) }\n : workspaceFileEdit.kind === 'delete'\n ? { oldResource: URI.parse(workspaceFileEdit.uri) }\n : {\n oldResource: URI.parse(workspaceFileEdit.oldUri),\n newResource: URI.parse(workspaceFileEdit.newUri)\n };\n if (workspaceFileEdit.options) {\n result.options = toWorkspaceFileEditOptions(workspaceFileEdit.options);\n }\n return result;\n}\n//# sourceMappingURL=workspaceFileEdit.js.map","import { URI } from 'vscode-uri';\nimport { fromTextEdit, toTextEdit } from './textEdit.js';\nimport { fromWorkspaceFileEdit, toWorkspaceFileEdit } from './workspaceFileEdit.js';\n/**\n * Convert a Monaco editor workspace edit to an LSP workspace edit.\n *\n * @param workspaceEdit\n * The Monaco workspace edit to convert.\n * @returns\n * The workspace edit as an LSP workspace edit.\n */\nexport function fromWorkspaceEdit(workspaceEdit) {\n const changes = {};\n const documentChanges = [];\n const textDocumentMap = new Map();\n for (const edit of workspaceEdit.edits) {\n if ('resource' in edit) {\n const uri = String(edit.resource);\n if (edit.versionId == null) {\n changes[uri] = [];\n changes[uri].push(fromTextEdit(edit.textEdit));\n }\n else {\n let versionMap = textDocumentMap.get(uri);\n if (!versionMap) {\n versionMap = new Map();\n textDocumentMap.set(uri, versionMap);\n }\n let textDocumentEdits = versionMap.get(edit.versionId);\n if (!textDocumentEdits) {\n textDocumentEdits = [];\n versionMap.set(edit.versionId, textDocumentEdits);\n documentChanges.push({\n textDocument: { uri, version: edit.versionId },\n edits: textDocumentEdits\n });\n }\n textDocumentEdits.push(fromTextEdit(edit.textEdit));\n }\n }\n else {\n documentChanges.push(fromWorkspaceFileEdit(edit));\n }\n }\n return {\n changes,\n documentChanges\n };\n}\n/**\n * Convert an LSP text edit and uri to a Monaco editor workspace text edit.\n *\n * @param textEdit\n * The LSP text edit to convert.\n * @param uri\n * The uri of the workspace text edit.\n * @param versionId\n * The version ID of the workspace text edit.\n * @returns\n * The text edit and uri as Monaco editor workspace text edit.\n */\nfunction toWorkspaceTextEdit(textEdit, uri, versionId) {\n return {\n resource: URI.parse(uri),\n versionId,\n textEdit: toTextEdit(textEdit)\n };\n}\n/**\n * Convert an LSP workspace edit to a Monaco editor workspace edit.\n *\n * @param workspaceEdit\n * The LSP workspace edit to convert.\n * @returns\n * The workspace edit as Monaco editor workspace edit.\n */\nexport function toWorkspaceEdit(workspaceEdit) {\n var _a;\n const edits = [];\n if (workspaceEdit.changes) {\n for (const [uri, textEdits] of Object.entries(workspaceEdit.changes)) {\n for (const textEdit of textEdits) {\n edits.push(toWorkspaceTextEdit(textEdit, uri));\n }\n }\n }\n if (workspaceEdit.documentChanges) {\n for (const documentChange of workspaceEdit.documentChanges) {\n if ('textDocument' in documentChange) {\n for (const textEdit of documentChange.edits) {\n edits.push(toWorkspaceTextEdit(textEdit, documentChange.textDocument.uri, (_a = documentChange.textDocument.version) !== null && _a !== void 0 ? _a : undefined));\n }\n }\n else {\n edits.push(toWorkspaceFileEdit(documentChange));\n }\n }\n }\n return {\n edits\n };\n}\n//# sourceMappingURL=workspaceEdit.js.map","import { fromMarkerData, toMarkerData } from './markerData.js';\nimport { fromWorkspaceEdit, toWorkspaceEdit } from './workspaceEdit.js';\n/**\n * Convert a Monaco editor code action to an LSP code action.\n *\n * @param codeAction\n * The Monaco code action to convert.\n * @returns\n * The code action as an LSP code action.\n */\nexport function fromCodeAction(codeAction) {\n const result = {\n title: codeAction.title\n };\n if (codeAction.diagnostics) {\n result.diagnostics = codeAction.diagnostics.map(fromMarkerData);\n }\n if (codeAction.disabled != null) {\n result.disabled = { reason: codeAction.disabled };\n }\n if (codeAction.edit) {\n result.edit = fromWorkspaceEdit(codeAction.edit);\n }\n if (codeAction.isPreferred != null) {\n result.isPreferred = codeAction.isPreferred;\n }\n if (codeAction.kind) {\n result.kind = codeAction.kind;\n }\n return result;\n}\n/**\n * Convert an LSP code action to a Monaco editor code action.\n *\n * @param codeAction\n * The LSP code action to convert.\n * @returns\n * The code action as Monaco editor code action.\n */\nexport function toCodeAction(codeAction) {\n const result = {\n title: codeAction.title,\n isPreferred: codeAction.isPreferred\n };\n if (codeAction.diagnostics) {\n result.diagnostics = codeAction.diagnostics.map(toMarkerData);\n }\n if (codeAction.disabled) {\n result.disabled = codeAction.disabled.reason;\n }\n if (codeAction.edit) {\n result.edit = toWorkspaceEdit(codeAction.edit);\n }\n if (codeAction.isPreferred != null) {\n result.isPreferred = codeAction.isPreferred;\n }\n if (codeAction.kind) {\n result.kind = codeAction.kind;\n }\n return result;\n}\n//# sourceMappingURL=codeAction.js.map","/**\n * Convert a Monaco editor command to an LSP command.\n *\n * @param command\n * The Monaco command to convert.\n * @returns\n * The command as an LSP command.\n */\nexport function fromCommand(command) {\n const result = {\n title: command.title,\n command: command.id\n };\n if (command.arguments) {\n result.arguments = command.arguments;\n }\n return result;\n}\n/**\n * Convert an LSP command to a Monaco editor command.\n *\n * @param command\n * The LSP command to convert.\n * @returns\n * The command as Monaco editor command.\n */\nexport function toCommand(command) {\n const result = {\n title: command.title,\n id: command.command\n };\n if (command.arguments) {\n result.arguments = command.arguments;\n }\n return result;\n}\n//# sourceMappingURL=command.js.map","/**\n * Convert a Monaco editor completion item kind to an LSP completion item kind.\n *\n * @param kind\n * The Monaco completion item kind to convert.\n * @returns\n * The completion item kind as an LSP completion item kind.\n */\nexport function fromCompletionItemKind(kind) {\n if (kind === 18) {\n return 1;\n }\n if (kind === 0) {\n return 2;\n }\n if (kind === 1) {\n return 3;\n }\n if (kind === 2) {\n return 4;\n }\n if (kind === 3) {\n return 5;\n }\n if (kind === 4) {\n return 6;\n }\n if (kind === 5) {\n return 7;\n }\n if (kind === 7) {\n return 8;\n }\n if (kind === 8) {\n return 9;\n }\n if (kind === 9) {\n return 10;\n }\n if (kind === 12) {\n return 11;\n }\n if (kind === 13) {\n return 12;\n }\n if (kind === 15) {\n return 13;\n }\n if (kind === 17) {\n return 14;\n }\n if (kind === 27) {\n return 15;\n }\n if (kind === 19) {\n return 16;\n }\n if (kind === 20) {\n return 17;\n }\n if (kind === 21) {\n return 18;\n }\n if (kind === 23) {\n return 19;\n }\n if (kind === 16) {\n return 20;\n }\n if (kind === 14) {\n return 21;\n }\n if (kind === 6) {\n return 22;\n }\n if (kind === 10) {\n return 23;\n }\n if (kind === 11) {\n return 24;\n }\n if (kind === 24) {\n return 25;\n }\n}\n/**\n * Convert an LSP completion item kind to a Monaco editor completion item kind.\n *\n * @param kind\n * The LSP completion item kind to convert.\n * @returns\n * The completion item kind as Monaco editor completion item kind.\n */\nexport function toCompletionItemKind(kind) {\n if (kind === 1) {\n return 18;\n }\n if (kind === 2) {\n return 0;\n }\n if (kind === 3) {\n return 1;\n }\n if (kind === 4) {\n return 2;\n }\n if (kind === 5) {\n return 3;\n }\n if (kind === 6) {\n return 4;\n }\n if (kind === 7) {\n return 5;\n }\n if (kind === 8) {\n return 7;\n }\n if (kind === 9) {\n return 8;\n }\n if (kind === 10) {\n return 9;\n }\n if (kind === 11) {\n return 12;\n }\n if (kind === 12) {\n return 13;\n }\n if (kind === 13) {\n return 15;\n }\n if (kind === 14) {\n return 17;\n }\n if (kind === 15) {\n return 27;\n }\n if (kind === 16) {\n return 19;\n }\n if (kind === 17) {\n return 20;\n }\n if (kind === 18) {\n return 21;\n }\n if (kind === 19) {\n return 23;\n }\n if (kind === 20) {\n return 16;\n }\n if (kind === 21) {\n return 14;\n }\n if (kind === 22) {\n return 6;\n }\n if (kind === 23) {\n return 10;\n }\n if (kind === 24) {\n return 11;\n }\n // Kind === 25\n return 24;\n}\n//# sourceMappingURL=completionItemKind.js.map","/**\n * Convert a Monaco editor completion item tag to an LSP completion item tag.\n *\n * @param tag\n * The Monaco completion item tag to convert.\n * @returns\n * The completion item tag as an LSP completion item tag.\n */\nexport function fromCompletionItemTag(tag) {\n return tag;\n}\n/**\n * Convert an LSP completion item tag to a Monaco editor completion item tag.\n *\n * @param tag\n * The LSP completion item tag to convert.\n * @returns\n * The completion item tag as Monaco editor completion item tag.\n */\nexport function toCompletionItemTag(tag) {\n return tag;\n}\n//# sourceMappingURL=completionItemTag.js.map","/**\n * Convert a Monaco editor markdown string to an LSP markup content.\n *\n * @param markdownString\n * The Monaco markdown string to convert.\n * @returns\n * The markdown string as an LSP markup content.\n */\nexport function fromMarkdownString(markdownString) {\n return {\n kind: 'markdown',\n value: markdownString.value\n };\n}\n/**\n * Convert an LSP markup content to a Monaco editor markdown string.\n *\n * @param markupContent\n * The LSP markup content to convert.\n * @returns\n * The markup content as a Monaco editor markdown string.\n */\nexport function toMarkdownString(markupContent) {\n return {\n value: markupContent.value\n };\n}\n//# sourceMappingURL=markdownString.js.map","import { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor single edit operation to an LSP text edit.\n *\n * @param singleEditOperation\n * The Monaco single edit operation to convert.\n * @returns\n * The single edit operation as an LSP text edit.\n */\nexport function fromSingleEditOperation(singleEditOperation) {\n var _a;\n return {\n newText: (_a = singleEditOperation.text) !== null && _a !== void 0 ? _a : '',\n range: fromRange(singleEditOperation.range)\n };\n}\n/**\n * Convert an LSP text edit to a Monaco editor single edit operation.\n *\n * @param textEdit\n * The LSP text edit to convert.\n * @returns\n * The text edit as Monaco editor single edit operation.\n */\nexport function toSingleEditOperation(textEdit) {\n return {\n range: toRange(textEdit.range),\n text: textEdit.newText\n };\n}\n//# sourceMappingURL=singleEditOperation.js.map","import { fromCommand, toCommand } from './command.js';\nimport { fromCompletionItemKind, toCompletionItemKind } from './completionItemKind.js';\nimport { fromCompletionItemTag, toCompletionItemTag } from './completionItemTag.js';\nimport { fromMarkdownString, toMarkdownString } from './markdownString.js';\nimport { fromRange, toRange } from './range.js';\nimport { fromSingleEditOperation, toSingleEditOperation } from './singleEditOperation.js';\n/**\n * Convert a Monaco editor completion item range to an LSP completion item text edit.\n *\n * @param edit\n * The Monaco completion item range to convert.\n * @param newText\n * The text of the text edit.\n * @returns\n * The completion item range as an LSP completion item text edit.\n */\nfunction fromCompletionItemRange(edit, newText) {\n if ('insert' in edit) {\n return {\n newText,\n insert: fromRange(edit.insert),\n replace: fromRange(edit.replace)\n };\n }\n return {\n newText,\n range: fromRange(edit)\n };\n}\n/**\n * Convert a Monaco editor completion item to an LSP completion item.\n *\n * @param completionItem\n * The Monaco completion item to convert.\n * @returns\n * The completion item as an LSP completion item.\n */\nexport function fromCompletionItem(completionItem) {\n const result = {\n kind: fromCompletionItemKind(completionItem.kind),\n label: typeof completionItem.label === 'string' ? completionItem.label : completionItem.label.label,\n textEdit: fromCompletionItemRange(completionItem.range, completionItem.insertText)\n };\n if (completionItem.additionalTextEdits) {\n result.additionalTextEdits = completionItem.additionalTextEdits.map(fromSingleEditOperation);\n }\n if (completionItem.command) {\n result.command = fromCommand(completionItem.command);\n }\n if (completionItem.commitCharacters) {\n result.commitCharacters = completionItem.commitCharacters;\n }\n if (completionItem.detail != null) {\n result.detail = completionItem.detail;\n }\n if (typeof completionItem.documentation === 'string') {\n result.documentation = completionItem.documentation;\n }\n else if (completionItem.documentation) {\n result.documentation = fromMarkdownString(completionItem.documentation);\n }\n if (completionItem.filterText != null) {\n result.filterText = completionItem.filterText;\n }\n if (completionItem.insertTextRules ===\n 4) {\n result.insertTextFormat = 2;\n }\n else if (completionItem.insertTextRules ===\n 1) {\n result.insertTextMode = 2;\n }\n if (completionItem.preselect != null) {\n result.preselect = completionItem.preselect;\n }\n if (completionItem.sortText != null) {\n result.sortText = completionItem.sortText;\n }\n if (completionItem.tags) {\n result.tags = completionItem.tags.map(fromCompletionItemTag);\n }\n return result;\n}\n/**\n * Convert an LSP completion item text edit to a Monaco editor range.\n *\n * @param edit\n * The LSP completion item text edit to convert.\n * @returns\n * The completion item text edit as Monaco editor range.\n */\nfunction toCompletionItemRange(edit) {\n if ('range' in edit) {\n return toRange(edit.range);\n }\n if ('insert' in edit && 'replace' in edit) {\n return {\n insert: toRange(edit.insert),\n replace: toRange(edit.replace)\n };\n }\n return toRange(edit);\n}\n/**\n * Convert an LSP completion item to a Monaco editor completion item.\n *\n * @param completionItem\n * The LSP completion item to convert.\n * @param options\n * Additional options needed to construct the Monaco completion item.\n * @returns\n * The completion item as Monaco editor completion item.\n */\nexport function toCompletionItem(completionItem, options) {\n var _a, _b, _c, _d, _e;\n const itemDefaults = (_a = options.itemDefaults) !== null && _a !== void 0 ? _a : {};\n const textEdit = (_b = completionItem.textEdit) !== null && _b !== void 0 ? _b : itemDefaults.editRange;\n const commitCharacters = (_c = completionItem.commitCharacters) !== null && _c !== void 0 ? _c : itemDefaults.commitCharacters;\n const insertTextFormat = (_d = completionItem.insertTextFormat) !== null && _d !== void 0 ? _d : itemDefaults.insertTextFormat;\n const insertTextMode = (_e = completionItem.insertTextMode) !== null && _e !== void 0 ? _e : itemDefaults.insertTextMode;\n let text = completionItem.insertText;\n let range;\n if (textEdit) {\n range = toCompletionItemRange(textEdit);\n if ('newText' in textEdit) {\n text = textEdit.newText;\n }\n }\n else {\n range = { ...options.range };\n }\n const result = {\n insertText: text !== null && text !== void 0 ? text : completionItem.label,\n kind: completionItem.kind == null\n ? 18\n : toCompletionItemKind(completionItem.kind),\n label: completionItem.label,\n range\n };\n if (completionItem.additionalTextEdits) {\n result.additionalTextEdits = completionItem.additionalTextEdits.map(toSingleEditOperation);\n }\n if (completionItem.command) {\n result.command = toCommand(completionItem.command);\n }\n if (commitCharacters) {\n result.commitCharacters = commitCharacters;\n }\n if (completionItem.detail != null) {\n result.detail = completionItem.detail;\n }\n if (typeof completionItem.documentation === 'string') {\n result.documentation = completionItem.documentation;\n }\n else if (completionItem.documentation) {\n result.documentation = toMarkdownString(completionItem.documentation);\n }\n if (completionItem.filterText != null) {\n result.filterText = completionItem.filterText;\n }\n if (insertTextFormat === 2) {\n result.insertTextRules =\n 4;\n }\n else if (insertTextMode === 2) {\n result.insertTextRules =\n 1;\n }\n if (completionItem.preselect != null) {\n result.preselect = completionItem.preselect;\n }\n if (completionItem.sortText != null) {\n result.sortText = completionItem.sortText;\n }\n if (completionItem.tags) {\n result.tags = completionItem.tags.map(toCompletionItemTag);\n }\n return result;\n}\n//# sourceMappingURL=completionItem.js.map","import { fromCompletionItem, toCompletionItem } from './completionItem.js';\n/**\n * Convert a Monaco editor completion list to an LSP completion list.\n *\n * @param completionList\n * The Monaco completion list to convert.\n * @returns\n * The completion list as an LSP completion list.\n */\nexport function fromCompletionList(completionList) {\n return {\n isIncomplete: Boolean(completionList.incomplete),\n items: completionList.suggestions.map(fromCompletionItem)\n };\n}\n/**\n * Convert an LSP completion list to a Monaco editor completion list.\n *\n * @param completionList\n * The LSP completion list to convert.\n * @param options\n * Additional options needed to construct the Monaco completion list.\n * @returns\n * The completion list as Monaco editor completion list.\n */\nexport function toCompletionList(completionList, options) {\n return {\n incomplete: Boolean(completionList.isIncomplete),\n suggestions: completionList.items.map((item) => toCompletionItem(item, { range: options.range, itemDefaults: completionList.itemDefaults }))\n };\n}\n//# sourceMappingURL=completionList.js.map","/**\n * Convert a Monaco editor symbol kind to an LSP symbol kind.\n *\n * @param symbolKind\n * The Monaco symbol kind to convert.\n * @returns\n * The symbol kind as an LSP symbol kind.\n */\nexport function fromSymbolKind(symbolKind) {\n if (symbolKind === 0) {\n return 1;\n }\n if (symbolKind === 1) {\n return 2;\n }\n if (symbolKind === 2) {\n return 3;\n }\n if (symbolKind === 3) {\n return 4;\n }\n if (symbolKind === 4) {\n return 5;\n }\n if (symbolKind === 5) {\n return 6;\n }\n if (symbolKind === 6) {\n return 7;\n }\n if (symbolKind === 7) {\n return 8;\n }\n if (symbolKind === 8) {\n return 9;\n }\n if (symbolKind === 9) {\n return 10;\n }\n if (symbolKind === 10) {\n return 11;\n }\n if (symbolKind === 11) {\n return 12;\n }\n if (symbolKind === 12) {\n return 13;\n }\n if (symbolKind === 13) {\n return 14;\n }\n if (symbolKind === 14) {\n return 15;\n }\n if (symbolKind === 15) {\n return 16;\n }\n if (symbolKind === 16) {\n return 17;\n }\n if (symbolKind === 17) {\n return 18;\n }\n if (symbolKind === 18) {\n return 19;\n }\n if (symbolKind === 19) {\n return 20;\n }\n if (symbolKind === 20) {\n return 21;\n }\n if (symbolKind === 21) {\n return 22;\n }\n if (symbolKind === 22) {\n return 23;\n }\n if (symbolKind === 23) {\n return 24;\n }\n if (symbolKind === 24) {\n return 25;\n }\n // SymbolKind === SymbolKind.TypeParameter\n return 26;\n}\n/**\n * Convert an LSP symbol kind to a Monaco editor symbol kind.\n *\n * @param symbolKind\n * The LSP symbol kind to convert.\n * @returns\n * The symbol kind as Monaco editor symbol kind.\n */\nexport function toSymbolKind(symbolKind) {\n if (symbolKind === 1) {\n return 0;\n }\n if (symbolKind === 2) {\n return 1;\n }\n if (symbolKind === 3) {\n return 2;\n }\n if (symbolKind === 4) {\n return 3;\n }\n if (symbolKind === 5) {\n return 4;\n }\n if (symbolKind === 6) {\n return 5;\n }\n if (symbolKind === 7) {\n return 6;\n }\n if (symbolKind === 8) {\n return 7;\n }\n if (symbolKind === 9) {\n return 8;\n }\n if (symbolKind === 10) {\n return 9;\n }\n if (symbolKind === 11) {\n return 10;\n }\n if (symbolKind === 12) {\n return 11;\n }\n if (symbolKind === 13) {\n return 12;\n }\n if (symbolKind === 14) {\n return 13;\n }\n if (symbolKind === 15) {\n return 14;\n }\n if (symbolKind === 16) {\n return 15;\n }\n if (symbolKind === 17) {\n return 16;\n }\n if (symbolKind === 18) {\n return 17;\n }\n if (symbolKind === 19) {\n return 18;\n }\n if (symbolKind === 20) {\n return 19;\n }\n if (symbolKind === 21) {\n return 20;\n }\n if (symbolKind === 22) {\n return 21;\n }\n if (symbolKind === 23) {\n return 22;\n }\n if (symbolKind === 24) {\n return 23;\n }\n if (symbolKind === 25) {\n return 24;\n }\n // SymbolKind === 26\n return 25;\n}\n//# sourceMappingURL=symbolKind.js.map","/**\n * Convert a Monaco editor symbol tag to an LSP symbol tag.\n *\n * @param symbolTag\n * The Monaco symbol tag to convert.\n * @returns\n * The symbol tag as an LSP symbol tag.\n */\nexport function fromSymbolTag(symbolTag) {\n return symbolTag;\n}\n/**\n * Convert an LSP symbol tag to a Monaco editor symbol tag.\n *\n * @param symbolTag\n * The LSP symbol tag to convert.\n * @returns\n * The symbol tag as Monaco editor symbol tag.\n */\nexport function toSymbolTag(symbolTag) {\n return symbolTag;\n}\n//# sourceMappingURL=symbolTag.js.map","import { fromRange, toRange } from './range.js';\nimport { fromSymbolKind, toSymbolKind } from './symbolKind.js';\nimport { fromSymbolTag, toSymbolTag } from './symbolTag.js';\n/**\n * Convert a Monaco editor document symbol to an LSP document symbol.\n *\n * @param documentSymbol\n * The Monaco document symbol to convert.\n * @returns\n * The document symbol as an LSP document symbol.\n */\nexport function fromDocumentSymbol(documentSymbol) {\n const result = {\n detail: documentSymbol.detail,\n kind: fromSymbolKind(documentSymbol.kind),\n name: documentSymbol.name,\n range: fromRange(documentSymbol.range),\n selectionRange: fromRange(documentSymbol.selectionRange),\n tags: documentSymbol.tags.map(fromSymbolTag)\n };\n if (documentSymbol.children) {\n result.children = documentSymbol.children.map(fromDocumentSymbol);\n }\n return result;\n}\n/**\n * Convert an LSP document symbol to a Monaco editor document symbol.\n *\n * @param documentSymbol\n * The LSP document symbol to convert.\n * @returns\n * The document symbol as Monaco editor document symbol.\n */\nexport function toDocumentSymbol(documentSymbol) {\n var _a, _b, _c;\n const result = {\n detail: (_a = documentSymbol.detail) !== null && _a !== void 0 ? _a : '',\n kind: toSymbolKind(documentSymbol.kind),\n name: documentSymbol.name,\n range: toRange(documentSymbol.range),\n selectionRange: toRange(documentSymbol.selectionRange),\n tags: (_c = (_b = documentSymbol.tags) === null || _b === void 0 ? void 0 : _b.map(toSymbolTag)) !== null && _c !== void 0 ? _c : []\n };\n if (documentSymbol.children) {\n result.children = documentSymbol.children.map(toDocumentSymbol);\n }\n return result;\n}\n//# sourceMappingURL=documentSymbol.js.map","/**\n * Convert a Monaco editor folding range to an LSP folding range.\n *\n * @param foldingRange\n * The Monaco folding range to convert.\n * @returns\n * The folding range as an LSP folding range.\n */\nexport function fromFoldingRange(foldingRange) {\n const result = {\n startLine: foldingRange.start - 1,\n endLine: foldingRange.end - 1\n };\n if (foldingRange.kind != null) {\n result.kind = foldingRange.kind.value;\n }\n return result;\n}\n/**\n * Convert an LSP folding range to a Monaco editor folding range.\n *\n * @param foldingRange\n * The LSP folding range to convert.\n * @returns\n * The folding range as Monaco editor folding range.\n */\nexport function toFoldingRange(foldingRange) {\n const result = {\n start: foldingRange.startLine + 1,\n end: foldingRange.endLine + 1\n };\n if (foldingRange.kind != null) {\n result.kind = { value: foldingRange.kind };\n }\n return result;\n}\n//# sourceMappingURL=foldingRange.js.map","/**\n * Convert a Monaco editor formatting options to an LSP formatting options.\n *\n * @param formattingOptions\n * The Monaco formatting options to convert.\n * @returns\n * The formatting options as an LSP formatting options.\n */\nexport function fromFormattingOptions(formattingOptions) {\n return {\n insertSpaces: formattingOptions.insertSpaces,\n tabSize: formattingOptions.tabSize\n };\n}\n/**\n * Convert an LSP formatting options to a Monaco editor formatting options.\n *\n * @param formattingOptions\n * The LSP formatting options to convert.\n * @returns\n * The formatting options as Monaco editor formatting options.\n */\nexport function toFormattingOptions(formattingOptions) {\n return {\n insertSpaces: formattingOptions.insertSpaces,\n tabSize: formattingOptions.tabSize\n };\n}\n//# sourceMappingURL=formattingOptions.js.map","import { fromMarkdownString, toMarkdownString } from './markdownString.js';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor hover to an LSP hover.\n *\n * @param hover\n * The Monaco hover to convert.\n * @returns\n * The hover as an LSP hover.\n */\nexport function fromHover(hover) {\n const result = {\n contents: fromMarkdownString(hover.contents[0])\n };\n if (hover.range) {\n result.range = fromRange(hover.range);\n }\n return result;\n}\n/**\n * Get value of a marked string.\n *\n * @param value\n * The marked string to get the value from.\n * @returns\n * The value of the marked string.\n */\nfunction getDeprecatedMarkupValue(value) {\n if (typeof value === 'string') {\n return { value };\n }\n return { value: `\\`\\`\\`${value.language}\\n${value.value}\\n\\`\\`\\`` };\n}\n/**\n * Convert LSP hover item contents to a Monaco markdown string.\n *\n * @param contents\n * The LSP hover contents to convert.\n * @returns\n * The hover contents as a Monaco markdown string.\n */\nfunction toHoverContents(contents) {\n if (typeof contents === 'string' || 'language' in contents) {\n return [getDeprecatedMarkupValue(contents)];\n }\n if (Array.isArray(contents)) {\n return contents.map(getDeprecatedMarkupValue);\n }\n return [toMarkdownString(contents)];\n}\n/**\n * Convert an LSP hover to a Monaco editor hover.\n *\n * @param hover\n * The LSP hover to convert.\n * @returns\n * The hover as Monaco editor hover.\n */\nexport function toHover(hover) {\n const result = {\n contents: toHoverContents(hover.contents)\n };\n if (hover.range) {\n result.range = toRange(hover.range);\n }\n return result;\n}\n//# sourceMappingURL=hover.js.map","/**\n * Convert a Monaco editor position to an LSP range.\n *\n * @param position\n * The Monaco position to convert.\n * @returns\n * The position as an LSP position.\n */\nexport function fromPosition(position) {\n return { character: position.column - 1, line: position.lineNumber - 1 };\n}\n/**\n * Convert an LSP position to a Monaco editor position.\n *\n * @param position\n * The LSP position to convert.\n * @returns\n * The position as Monaco editor position.\n */\nexport function toPosition(position) {\n return { lineNumber: position.line + 1, column: position.character + 1 };\n}\n//# sourceMappingURL=position.js.map","import { URI } from 'vscode-uri';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor link to an LSP document link.\n *\n * @param link\n * The Monaco link to convert.\n * @returns\n * The link as an LSP document link.\n */\nexport function fromLink(link) {\n const result = {\n range: fromRange(link.range)\n };\n if (link.tooltip != null) {\n result.tooltip = link.tooltip;\n }\n if (link.url != null) {\n result.target = String(link.url);\n }\n return result;\n}\n/**\n * Convert an LSP document link to a Monaco editor link.\n *\n * @param documentLink\n * The LSP document link to convert.\n * @returns\n * The document link as Monaco editor link.\n */\nexport function toLink(documentLink) {\n const result = {\n range: toRange(documentLink.range)\n };\n if (documentLink.tooltip != null) {\n result.tooltip = documentLink.tooltip;\n }\n if (documentLink.target != null) {\n result.url = URI.parse(documentLink.target);\n }\n return result;\n}\n//# sourceMappingURL=link.js.map","import { URI } from 'vscode-uri';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor location link to an LSP location link.\n *\n * @param locationLink\n * The Monaco location link to convert.\n * @returns\n * The location link as an LSP location link.\n */\nexport function fromLocationLink(locationLink) {\n const result = {\n targetRange: fromRange(locationLink.range),\n targetSelectionRange: locationLink.targetSelectionRange\n ? fromRange(locationLink.targetSelectionRange)\n : fromRange(locationLink.range),\n targetUri: String(locationLink.uri)\n };\n if (locationLink.originSelectionRange) {\n result.originSelectionRange = fromRange(locationLink.originSelectionRange);\n }\n return result;\n}\n/**\n * Convert an LSP location link to a Monaco editor location link.\n *\n * @param locationLink\n * The LSP location link to convert.\n * @returns\n * The location link as Monaco editor location link.\n */\nexport function toLocationLink(locationLink) {\n const result = {\n range: toRange(locationLink.targetRange),\n targetSelectionRange: toRange(locationLink.targetSelectionRange),\n uri: URI.parse(locationLink.targetUri)\n };\n if (locationLink.originSelectionRange) {\n result.originSelectionRange = toRange(locationLink.originSelectionRange);\n }\n return result;\n}\n//# sourceMappingURL=locationLink.js.map","import { fromRange, toRange } from './range.js';\n/**\n * Convert Monaco editor selection ranges to an LSP selection ranges.\n *\n * @param selectionRanges\n * The Monaco selections range to convert.\n * @returns\n * The selection ranges as LSP selection range.\n */\nexport function fromSelectionRanges(selectionRanges) {\n let result;\n for (let index = selectionRanges.length - 1; index >= 0; index -= 1) {\n const parent = result;\n result = {\n range: fromRange(selectionRanges[index].range)\n };\n if (parent) {\n result.parent = parent;\n }\n }\n return result;\n}\n/**\n * Convert an LSP selection range to Monaco editor selection ranges.\n *\n * @param selectionRange\n * The LSP selection range to convert.\n * @returns\n * The selection range as Monaco editor selection ranges.\n */\nexport function toSelectionRanges(selectionRange) {\n const result = [];\n let current = selectionRange;\n while (current) {\n result.push({\n range: toRange(current.range)\n });\n current = current.parent;\n }\n return result;\n}\n//# sourceMappingURL=selectionRanges.js.map","/**\n * Register a marker data provider that can provide marker data for a model.\n *\n * @param monaco\n * The Monaco editor module.\n * @param languageSelector\n * The language id to register the provider for.\n * @param provider\n * The provider that can provide marker data.\n * @returns\n * A disposable.\n */\nexport function registerMarkerDataProvider(monaco, languageSelector, provider) {\n const listeners = new Map();\n const matchesLanguage = (languageId) => {\n if (languageSelector === '*') {\n return true;\n }\n return Array.isArray(languageSelector)\n ? languageSelector.includes(languageId)\n : languageSelector === languageId;\n };\n const doValidate = async (model) => {\n const versionId = model.getVersionId();\n const markers = await provider.provideMarkerData(model);\n // The model may have been updated disposed by the time marker data has been fetched.\n if (!model.isDisposed() &&\n versionId === model.getVersionId() &&\n matchesLanguage(model.getLanguageId())) {\n monaco.editor.setModelMarkers(model, provider.owner, markers ?? []);\n }\n };\n const onModelAdd = (model) => {\n if (!matchesLanguage(model.getLanguageId())) {\n return;\n }\n let handle;\n const onDidChangeContent = model.onDidChangeContent(() => {\n clearTimeout(handle);\n handle = setTimeout(() => {\n doValidate(model);\n }, 500);\n });\n listeners.set(model, {\n dispose() {\n clearTimeout(handle);\n onDidChangeContent.dispose();\n }\n });\n doValidate(model);\n };\n const onModelRemoved = (model) => {\n monaco.editor.setModelMarkers(model, provider.owner, []);\n const listener = listeners.get(model);\n if (listener) {\n listener.dispose();\n listeners.delete(model);\n }\n };\n /**\n * Call `doReset` on the provider if the model language matches.\n *\n * @param model\n * The model to reset\n * @param languageId\n * The language ID to check.\n */\n function doReset(model, languageId = model.getLanguageId()) {\n if (provider.doReset && matchesLanguage(languageId)) {\n provider.doReset(model);\n }\n }\n const onDidCreateModel = monaco.editor.onDidCreateModel(onModelAdd);\n const onWillDisposeModel = monaco.editor.onWillDisposeModel((model) => {\n onModelRemoved(model);\n doReset(model);\n });\n const onDidChangeModelLanguage = monaco.editor.onDidChangeModelLanguage(({ model, oldLanguage }) => {\n onModelRemoved(model);\n onModelAdd(model);\n doReset(model, oldLanguage);\n });\n for (const model of monaco.editor.getModels()) {\n onModelAdd(model);\n }\n return {\n dispose() {\n for (const model of listeners.keys()) {\n onModelRemoved(model);\n }\n onDidCreateModel.dispose();\n onWillDisposeModel.dispose();\n onDidChangeModelLanguage.dispose();\n },\n async revalidate() {\n await Promise.all(monaco.editor.getModels().map(doValidate));\n }\n };\n}\n//# sourceMappingURL=monaco-marker-data-provider.js.map","/**\n * Create a worker manager.\n *\n * A worker manager is an object which deals with Monaco based web workers, such as cleanups and\n * idle timeouts.\n *\n * @param monaco - The Monaco editor module.\n * @param options - The options of the worker manager.\n * @returns The worker manager.\n */\nexport function createWorkerManager(monaco, options) {\n let { createData, interval = 30_000, label, moduleId, stopWhenIdleFor = 120_000 } = options;\n let worker;\n let lastUsedTime = 0;\n let disposed = false;\n const stopWorker = () => {\n if (worker) {\n worker.dispose();\n worker = undefined;\n }\n };\n const intervalId = setInterval(() => {\n if (!worker) {\n return;\n }\n const timePassedSinceLastUsed = Date.now() - lastUsedTime;\n if (timePassedSinceLastUsed > stopWhenIdleFor) {\n stopWorker();\n }\n }, interval);\n return {\n dispose() {\n disposed = true;\n clearInterval(intervalId);\n stopWorker();\n },\n getWorker(...resources) {\n if (disposed) {\n throw new Error('Worker manager has been disposed');\n }\n lastUsedTime = Date.now();\n if (!worker) {\n worker = monaco.editor.createWebWorker({\n createData,\n label,\n moduleId,\n });\n }\n return worker.withSyncedResources(resources);\n },\n updateCreateData(newCreateData) {\n createData = newCreateData;\n stopWorker();\n },\n };\n}\n","// src/index.ts\nimport {\n fromCodeActionTriggerType,\n fromFormattingOptions,\n fromPosition,\n fromRange,\n toCodeAction,\n toCompletionList,\n toDocumentSymbol,\n toFoldingRange,\n toHover,\n toLink,\n toLocationLink,\n toMarkerData,\n toRange,\n toSelectionRanges,\n toTextEdit\n} from \"monaco-languageserver-types\";\nimport { registerMarkerDataProvider } from \"monaco-marker-data-provider\";\nimport { createWorkerManager } from \"monaco-worker-manager\";\nfunction configureMonacoYaml(monaco, options) {\n const createData = {\n completion: true,\n customTags: [],\n enableSchemaRequest: false,\n format: true,\n isKubernetes: false,\n hover: true,\n schemas: [],\n validate: true,\n yamlVersion: \"1.2\",\n ...options\n };\n monaco.languages.register({\n id: \"yaml\",\n extensions: [\".yaml\", \".yml\"],\n aliases: [\"YAML\", \"yaml\", \"YML\", \"yml\"],\n mimetypes: [\"application/x-yaml\"]\n });\n const workerManager = createWorkerManager(monaco, {\n label: \"yaml\",\n moduleId: \"monaco-yaml/yaml.worker\",\n createData\n });\n const diagnosticMap = /* @__PURE__ */ new WeakMap();\n const markerDataProvider = registerMarkerDataProvider(monaco, \"yaml\", {\n owner: \"yaml\",\n async provideMarkerData(model) {\n const worker = await workerManager.getWorker(model.uri);\n const diagnostics = await worker.doValidation(String(model.uri));\n diagnosticMap.set(model, diagnostics);\n return diagnostics == null ? void 0 : diagnostics.map(toMarkerData);\n },\n async doReset(model) {\n const worker = await workerManager.getWorker(model.uri);\n await worker.resetSchema(String(model.uri));\n }\n });\n const disposables = [\n workerManager,\n markerDataProvider,\n monaco.languages.registerCompletionItemProvider(\"yaml\", {\n triggerCharacters: [\" \", \":\"],\n async provideCompletionItems(model, position) {\n const wordInfo = model.getWordUntilPosition(position);\n const worker = await workerManager.getWorker(model.uri);\n const info = await worker.doComplete(String(model.uri), fromPosition(position));\n if (info) {\n return toCompletionList(info, {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: wordInfo.startColumn,\n endLineNumber: position.lineNumber,\n endColumn: wordInfo.endColumn\n }\n });\n }\n }\n }),\n monaco.languages.registerHoverProvider(\"yaml\", {\n async provideHover(model, position) {\n const worker = await workerManager.getWorker(model.uri);\n const info = await worker.doHover(String(model.uri), fromPosition(position));\n if (info) {\n return toHover(info);\n }\n }\n }),\n monaco.languages.registerDefinitionProvider(\"yaml\", {\n async provideDefinition(model, position) {\n const worker = await workerManager.getWorker(model.uri);\n const locationLinks = await worker.doDefinition(String(model.uri), fromPosition(position));\n return locationLinks == null ? void 0 : locationLinks.map(toLocationLink);\n }\n }),\n monaco.languages.registerDocumentSymbolProvider(\"yaml\", {\n displayName: \"yaml\",\n async provideDocumentSymbols(model) {\n const worker = await workerManager.getWorker(model.uri);\n const items = await worker.findDocumentSymbols(String(model.uri));\n return items == null ? void 0 : items.map(toDocumentSymbol);\n }\n }),\n monaco.languages.registerDocumentFormattingEditProvider(\"yaml\", {\n displayName: \"yaml\",\n async provideDocumentFormattingEdits(model) {\n const worker = await workerManager.getWorker(model.uri);\n const edits = await worker.format(String(model.uri));\n return edits == null ? void 0 : edits.map(toTextEdit);\n }\n }),\n monaco.languages.registerLinkProvider(\"yaml\", {\n async provideLinks(model) {\n const worker = await workerManager.getWorker(model.uri);\n const links = await worker.findLinks(String(model.uri));\n if (links) {\n return {\n links: links.map(toLink)\n };\n }\n }\n }),\n monaco.languages.registerCodeActionProvider(\"yaml\", {\n async provideCodeActions(model, range, context) {\n var _a;\n const worker = await workerManager.getWorker(model.uri);\n const codeActions = await worker.getCodeAction(String(model.uri), fromRange(range), {\n diagnostics: ((_a = diagnosticMap.get(model)) == null ? void 0 : _a.filter((diagnostic) => range.intersectRanges(toRange(diagnostic.range)))) || [],\n only: context.only ? [context.only] : void 0,\n triggerKind: fromCodeActionTriggerType(context.trigger)\n });\n if (codeActions) {\n return {\n actions: codeActions.map(toCodeAction),\n dispose() {\n }\n };\n }\n }\n }),\n monaco.languages.registerFoldingRangeProvider(\"yaml\", {\n async provideFoldingRanges(model) {\n const worker = await workerManager.getWorker(model.uri);\n const foldingRanges = await worker.getFoldingRanges(String(model.uri));\n return foldingRanges == null ? void 0 : foldingRanges.map(toFoldingRange);\n }\n }),\n monaco.languages.setLanguageConfiguration(\"yaml\", {\n comments: {\n lineComment: \"#\"\n },\n brackets: [\n [\"{\", \"}\"],\n [\"[\", \"]\"],\n [\"(\", \")\"]\n ],\n autoClosingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ],\n surroundingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ]\n }),\n monaco.languages.registerOnTypeFormattingEditProvider(\"yaml\", {\n autoFormatTriggerCharacters: [\"\\n\"],\n async provideOnTypeFormattingEdits(model, position, ch, formattingOptions) {\n const worker = await workerManager.getWorker(model.uri);\n const edits = await worker.doDocumentOnTypeFormatting(\n String(model.uri),\n fromPosition(position),\n ch,\n fromFormattingOptions(formattingOptions)\n );\n return edits == null ? void 0 : edits.map(toTextEdit);\n }\n }),\n monaco.languages.registerSelectionRangeProvider(\"yaml\", {\n async provideSelectionRanges(model, positions) {\n const worker = await workerManager.getWorker(model.uri);\n const selectionRanges = await worker.getSelectionRanges(\n String(model.uri),\n positions.map(fromPosition)\n );\n return selectionRanges == null ? void 0 : selectionRanges.map(toSelectionRanges);\n }\n })\n ];\n return {\n dispose() {\n for (const disposable of disposables) {\n disposable.dispose();\n }\n },\n async update(newOptions) {\n workerManager.updateCreateData(Object.assign(createData, newOptions));\n await markerDataProvider.revalidate();\n },\n getOptions() {\n return createData;\n }\n };\n}\nexport {\n configureMonacoYaml\n};\n//# sourceMappingURL=index.js.map\n","/**\n * Configure Monaco web workers for Vite-based environments.\n *\n * Import this module as a **side-effect** before any Monaco editor mounts.\n * It sets up web workers for all language services including\n * YAML (via `monaco-yaml`).\n *\n * @example\n * ```ts\n * // In your app's entry point or Storybook preview:\n * import '@omniviewdev/editors/setup';\n * ```\n */\nimport * as monaco from 'monaco-editor';\nimport { configureMonacoYaml } from 'monaco-yaml';\nimport { editorSchemas } from '../schemas';\n\n// Vite `?worker` imports — Vite bundles each worker with its dependencies,\n// transforming CJS→ESM so they work correctly in the browser Worker context.\nimport EditorWorker from './editor.worker?worker';\nimport JsonWorker from './json.worker?worker';\nimport TsWorker from './ts.worker?worker';\nimport CssWorker from './css.worker?worker';\nimport HtmlWorker from './html.worker?worker';\nimport YamlWorker from './yaml.worker?worker';\n\nconst DEBUG = false;\nfunction log(...args: unknown[]) {\n if (DEBUG) console.log('[monaco-setup]', ...args);\n}\nfunction warn(...args: unknown[]) {\n if (DEBUG) console.warn('[monaco-setup]', ...args);\n}\n\nlog('Module loaded — configuring MonacoEnvironment');\n\n// Idempotency guard — prevent double-initialization when the module is\n// imported more than once (e.g. HMR or duplicate bundles).\nconst SETUP_KEY = '__omniview_monaco_setup__';\nif ((globalThis as Record<string, unknown>)[SETUP_KEY]) {\n log('Already initialized — skipping duplicate setup');\n} else {\n(globalThis as Record<string, unknown>)[SETUP_KEY] = true;\n\n// ---------------------------------------------------------------------------\n// 1. MonacoEnvironment.getWorker — maps language labels to bundled workers\n// ---------------------------------------------------------------------------\n\nconst existingEnv = self.MonacoEnvironment ?? {};\nself.MonacoEnvironment = {\n ...existingEnv,\n getWorker(_workerId: string, label: string) {\n log(`getWorker called — label=\"${label}\", workerId=\"${_workerId}\"`);\n\n let worker: Worker;\n try {\n switch (label) {\n case 'yaml':\n worker = new YamlWorker();\n break;\n case 'json':\n worker = new JsonWorker();\n break;\n case 'typescript':\n case 'javascript':\n worker = new TsWorker();\n break;\n case 'css':\n case 'scss':\n case 'less':\n worker = new CssWorker();\n break;\n case 'html':\n case 'handlebars':\n case 'razor':\n worker = new HtmlWorker();\n break;\n default:\n worker = new EditorWorker();\n break;\n }\n log(`Worker created for \"${label}\" — instanceof Worker: ${worker instanceof Worker}`);\n } catch (err) {\n warn(`Failed to create worker for \"${label}\":`, err);\n throw err;\n }\n\n worker.onerror = (e) => {\n warn(`Worker \"${label}\" error:`, e.message, '| filename:', e.filename);\n };\n\n worker.addEventListener('message', (e) => {\n log(`Worker \"${label}\" first message:`, JSON.stringify(e.data).slice(0, 200));\n }, { once: true });\n\n return worker;\n },\n};\n\nlog('MonacoEnvironment set');\n\n// ---------------------------------------------------------------------------\n// 3. Configure monaco-yaml ONCE at startup with empty schemas\n// ---------------------------------------------------------------------------\n\ntry {\n const yamlHandle = configureMonacoYaml(monaco, {\n enableSchemaRequest: false,\n schemas: [],\n });\n log('configureMonacoYaml succeeded — handle keys:', Object.keys(yamlHandle));\n editorSchemas._setYamlHandle(yamlHandle as unknown as Parameters<typeof editorSchemas._setYamlHandle>[0]);\n log('YAML handle injected into EditorSchemaRegistry');\n} catch (err) {\n // Surface YAML config errors so they are visible in the console even\n // when DEBUG is off — a silent failure here breaks all YAML completions.\n console.error('[monaco-setup] configureMonacoYaml FAILED:', err);\n}\n\n} // end idempotency guard\n\n// Re-export for consumers that need the function form\nexport function setupMonacoWorkers(): void {\n // No-op — importing this module is sufficient. The side effects above\n // have already configured everything. This export exists so consumers\n // can call it explicitly if they prefer that pattern.\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","reactCompilerRuntime_production","size","reactCompilerRuntime_development","compilerRuntimeModule","getEditorThemeRoot","element","document","closest","documentElement","getComputedThemeStyle","root","getComputedStyle","getComputedToken","token","getPropertyValue","trim","useEditorTheme","$","_c","activeTheme","useTheme","t0","id","base","registration","HEX_COLOR","SERIALIZED_RGB","byteToHex","Math","max","min","round","toString","padStart","serializedColorToHex","color","trimmed","test","match","alpha","undefined","Number","rgb","createMonacoColorNormalizer","normalize","dispose","surface","ownerDocument","createElement","width","height","setAttribute","style","cssText","append","context","direct","computed","serialized","getContext","willReadFrequently","clearRect","fillStyle","fillRect","pixel","getImageData","data","remove","getBaseTheme","mode","tokenRule","fgVar","styles","normalizer","styleVar","styleDefault","foreground","entry","slice","fontStyle","filterColors","colors","result","Object","entries","buildMonacoTheme","rule","rules","filter","inherit","OV_MONACO_THEME","EXTENSION_MAP","js","jsx","ts","tsx","py","rb","rs","go","java","kt","kts","cs","fs","swift","c","cpp","cc","cxx","h","hpp","css","scss","less","html","htm","xml","json","yaml","yml","md","mdx","sql","sh","bash","zsh","ps1","dockerfile","tf","hcl","toml","ini","lua","r","dart","php","pl","ex","exs","erl","hs","scala","clj","graphql","gql","proto","vue","svelte","detectLanguage","filename","lower","toLowerCase","split","pop","ext","log","args","globMatch","pattern","str","pi","si","starPi","starSi","length","EditorSchemaRegistryImpl","_schemas","Map","_listeners","Set","_yamlHandle","schemas","Array","from","values","_setYamlHandle","handle","register","schema","uri","fileMatch","set","_notify","registerAll","map","s","unregister","deleted","delete","clear","getSchemasForUri","modelUri","some","isYamlReady","onChange","listener","add","applyYamlSchemas","mapped","description","update","enableSchemaRequest","applyJsonSchemas","monacoInstance","m","diagnosticsOptions","validate","jsonDefaults","languages","setDiagnosticsOptions","debugState","JSON","stringify","fn","err","console","error","editorSchemas","cn","parts","Boolean","join","getOrCreateModel","language","path","monaco","Uri","parse","existing","editor","getModel","createModel","severityToString","severity","MarkerSeverity","Error","Warning","Info","markersTodiagnostics","model","getModelMarkers","resource","message","startLineNumber","startColumn","endLineNumber","endColumn","source","code","CodeEditor","forwardRef","onMount","onMountProp","onDiagnostics","onCursorChange","readOnly","lineNumbers","minimap","wordWrap","tabSize","diagnostics","quickSuggestions","syntaxHighlighting","bordered","className","ref","theme","editorRef","useRef","containerRef","isReady","setIsReady","useState","preventTriggerChangeEvent","subscriptionRef","markerSubscriptionRef","cursorSubscriptionRef","resolvedLanguage","displayValue","useMemo","useEffect","current","defineTheme","setTheme","typescript","typescriptDefaults","setCompilerOptions","jsxFactory","allowNonTsExtensions","allowJs","target","create","enabled","other","strings","comments","scrollBeyondLastLine","automaticLayout","fontSize","fontFamily","renderValidationDecorations","setModel","getOption","EditorOption","setValue","getValue","executeEdits","range","getFullModelRange","text","forceMoveMarkers","pushUndoStop","updateOptions","lang","setModelLanguage","prevFilenameRef","currentModel","currentValue","newModel","onDidChangeModelContent","onDidChangeMarkers","uris","u","onDidChangeCursorPosition","e","lineNumber","position","column","useImperativeHandle","getEditor","getMonaco","focus","getDiagnostics","getDebugState","markers","diagnosticsBySeverity","warning","info","hint","diagnosticsBySource","sev","src","matchingSchemas","pos","getPosition","sels","getSelections","modelLanguage","getLanguageId","modelLineCount","getLineCount","modelContentLength","getValueLength","modelVersionId","getVersionId","modelEOL","getEOL","cursorPosition","selections","diagnosticsTotal","registeredSchemaCount","isReadOnly","isFocused","hasWidgetFocus","totalModelCount","getModels","registeredLanguageCount","getLanguages","yamlHandleSet","toDim","v","Root","Inner","DiffViewer","original","modified","createDiffEditor","renderSideBySide","originalModel","modifiedModel","origModel","modifiedEditor","getModifiedEditor","models","buildXtermTheme","fallback","background","cursor","selectionBackground","selectionForeground","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","debounce","ms","timer","run","clearTimeout","setTimeout","cancel","Terminal","onData","onBinaryData","onResize","onSignal","onError","onClose","onReady","onBell","onTitleChange","onKey","onSelectionChange","onLineFeed","onScroll","onWriteParsed","fontWeight","fontWeightBold","scrollback","cursorBlink","cursorStyle","cursorWidth","lineHeight","letterSpacing","drawBoldTextInBrightColors","convertEol","allowTransparency","macOptionIsMeta","macOptionClickForcesSelection","linkHandling","disableStdin","customKeyEventHandler","autoFocus","renderer","rows","initialRows","cols","initialCols","screenReaderMode","minimumContrastRatio","termRef","fitAddonRef","searchAddonRef","serializeAddonRef","addonsRef","observerRef","debouncedFitRef","windowResizeCleanupRef","callbacksRef","fit","useCallback","addon","write","t","writeln","blur","getDimensions","reset","scrollToBottom","findNext","term","options","findPrevious","clearSearch","clearDecorations","getSelection","hasSelection","selectAll","clearSelection","scrollToLine","line","scrollUp","lines","scrollLines","scrollDown","paste","getBufferContent","serialize","container","disposed","init","fonts","ready","XTerminal","FitAddon","SearchAddon","SerializeAddon","Unicode11Addon","Promise","all","xtermTheme","termOptions","allowProposedApi","attachCustomKeyEventHandler","loadedAddons","fitAddon","searchAddon","serializeAddon","unicode11Addon","loadAddon","push","unicode","activeVersion","WebLinksAddon","webLinksAddon","open","WebglAddon","webglAddon","onContextLoss","onBinary","title","event","debouncedFit","resizeObserver","ResizeObserver","observe","handleWindowResize","window","addEventListener","removeEventListener","catch","String","disconnect","REMARK_PLUGINS","remarkGfm","ReactMarkdown","lazy","hastText","isArray","DetailsAccordion","summaryText","itemId","useId","t1","Accordion","markdownComponents","pre","exec","replace","includes","CodeBlock","Code","table","Table","thead","tbody","tr","th","td","a","href","rest","Link","blockquote","Blockquote","hr","Separator","details","summaryNode","find","tagName","body","Children","forEach","child","summary","input","checked","disabled","Checkbox","MarkdownPreview","content","allowHtml","t2","t3","Symbol","for","Loading","t4","Suspense","MarkdownContent","t5","sanitizeSchema","defaultSchema","attributes","rehypeRaw","rehypeSanitize","rehypePlugins","getCommandKey","cmd","fuzzyMatch","query","q","qi","i","matchesCommand","label","group","NO_COMMANDS","PaletteInput","inputRef","listId","useCommandListConfig","store","useCommandListStoreContext","activeKey","useSyncExternalStore","subscribe","getSnapshot","activeId","getElementById","scrollIntoView","block","useLayoutEffect","CommandList","CommandPalette","commands","onSelect","placeholder","loading","dialogRef","composingRef","failed","enabledCommands","visibleCommands","groups","labels","previous","command","grouped","groupBy","get","groupLabel","dialog","doc","opener","activeElement","preventScroll","HTMLElement","isConnected","contains","Overlay","stopPropagation","button","Element","preventDefault","nativeEvent","isComposing","keyCode","HTMLButtonElement","controls","querySelectorAll","first","last","active","shiftKey","jsxs","meta","icon","shortcut","Results","Message","Fragment","getType","formatValue","shouldExpand","defaultExpanded","depth","matchesSearch","isObjectRef","subtreeMatches","ancestors","cache","has","childAncestors","TreeNode","nodeKey","searchQuery","isLast","searchCache","isExpandable","isCircular","expanded","setExpanded","searchExpandedRef","preSearchExpandedRef","hasDescendantMatch","t6","t7","bb0","t8","bb1","t9","_temp","toggle","t10","isHighlighted","preview","t11","RowHighlight","t12","Row","t13","t14","t15","t16","t17","t18","t19","Chevron","ChevronExpanded","ChevronSpacer","t20","Key","t21","Colon","t22","Preview","Value","t23","Comma","t24","t25","t26","v_0","Node","prev","EMPTY_ANCESTORS","WeakSet","ObjectInspector","format","searchable","copyable","setSearchQuery","handleCopy","toYaml","safeJsonStringify","navigator","clipboard","writeText","rootAncestors","WeakMap","Toolbar","SearchInput","CopyButton","Tree","stack","_key","val","needsYamlQuoting","quoteYaml","yamlScalar","indent","prefix","repeat","childStack","item","trimStart","safeKey","LIB","n","o","f","l","g","I","d","w","b","p","y","C","A","x","P","_","URI","Utils","toMarkerSeverity","toMarkerTag","tag","fromRange","toRange","toRelatedInformation","relatedInformation","toMarkerData","diagnostic","markerData","toTextEdit","textEdit","toWorkspaceFileEditOptions","toWorkspaceFileEdit","workspaceFileEdit","toWorkspaceTextEdit","versionId","toWorkspaceEdit","workspaceEdit","_a","edits","textEdits","documentChange","toCodeAction","codeAction","toCommand","toCompletionItemKind","kind","toCompletionItemTag","toMarkdownString","markupContent","toSingleEditOperation","toCompletionItemRange","edit","toCompletionItem","completionItem","_b","_d","_e","itemDefaults","commitCharacters","insertTextFormat","insertTextMode","toCompletionList","completionList","toSymbolKind","symbolKind","toSymbolTag","symbolTag","toDocumentSymbol","documentSymbol","toFoldingRange","foldingRange","fromFormattingOptions","formattingOptions","getDeprecatedMarkupValue","toHoverContents","contents","toHover","hover","fromPosition","toLink","documentLink","toLocationLink","locationLink","toSelectionRanges","selectionRange","registerMarkerDataProvider","languageSelector","provider","listeners","matchesLanguage","languageId","doValidate","onModelAdd","onDidChangeContent","onModelRemoved","doReset","onDidCreateModel","onWillDisposeModel","onDidChangeModelLanguage","oldLanguage","createWorkerManager","createData","interval","moduleId","stopWhenIdleFor","worker","lastUsedTime","stopWorker","intervalId","resources","newCreateData","configureMonacoYaml","workerManager","diagnosticMap","markerDataProvider","disposables","wordInfo","locationLinks","items","links","codeActions","foldingRanges","ch","positions","selectionRanges","disposable","newOptions","warn","SETUP_KEY","globalThis","existingEnv","self","MonacoEnvironment","getWorker","_workerId","YamlWorker","JsonWorker","TsWorker","CssWorker","HtmlWorker","EditorWorker","Worker","onerror","once","yamlHandle","setupMonacoWorkers"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47]}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.production.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.development.js","../../../node_modules/.pnpm/react@19.2.4/node_modules/react/compiler-runtime.js","../src/themes/useEditorTheme.ts","../src/themes/monaco.ts","../src/utils/language.ts","../src/schemas/EditorSchemaRegistry.ts","../src/components/code-editor/CodeEditor.tsx","../src/components/diff-viewer/DiffViewer.tsx","../src/themes/xterm.ts","../src/components/terminal/Terminal.tsx","../src/components/markdown-preview/MarkdownPreview.tsx","../src/components/command-palette/CommandPalette.tsx","../src/components/object-inspector/ObjectInspector.tsx","../src/components/cel-query-editor/language.ts","../src/components/cel-query-editor/presentation.ts","../src/components/cel-query-editor/bridge.ts","../src/components/cel-query-editor/CelQueryEditor.tsx","../../../node_modules/.pnpm/vscode-uri@3.1.0/node_modules/vscode-uri/lib/esm/index.mjs","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markerSeverity.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markerTag.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/range.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/relatedInformation.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markerData.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/textEdit.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/workspaceFileEditOptions.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/workspaceFileEdit.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/workspaceEdit.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/codeAction.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/command.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionItemKind.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionItemTag.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/markdownString.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/singleEditOperation.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionItem.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/completionList.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/symbolKind.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/symbolTag.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/documentSymbol.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/foldingRange.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/formattingOptions.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/hover.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/position.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/link.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/locationLink.js","../../../node_modules/.pnpm/monaco-languageserver-types@0.4.0/node_modules/monaco-languageserver-types/dist/selectionRanges.js","../../../node_modules/.pnpm/monaco-marker-data-provider@1.2.5/node_modules/monaco-marker-data-provider/dist/monaco-marker-data-provider.js","../../../node_modules/.pnpm/monaco-worker-manager@2.0.1_monaco-editor@0.52.2/node_modules/monaco-worker-manager/index.js","../../../node_modules/.pnpm/monaco-yaml@5.4.1_monaco-editor@0.52.2/node_modules/monaco-yaml/index.js","../src/setup/setupMonacoWorkers.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react-compiler-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nexports.c = function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n};\n","/**\n * @license React\n * react-compiler-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n var ReactSharedInternals =\n require(\"react\").__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n exports.c = function (size) {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher.useMemoCache(size);\n };\n })();\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-compiler-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-compiler-runtime.development.js');\n}\n","import { useTheme } from '@omniviewdev/base-ui';\nimport type { EditorTheme } from './types';\n\nexport function getEditorThemeRoot(element?: HTMLElement | null): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n return element?.closest<HTMLElement>('[data-ov-theme]') ?? element ?? document.documentElement;\n}\n\nexport function getComputedThemeStyle(element?: HTMLElement | null): CSSStyleDeclaration | null {\n const root = getEditorThemeRoot(element);\n return root ? getComputedStyle(root) : null;\n}\n\nexport function getComputedToken(token: string, element?: HTMLElement | null): string {\n return getComputedThemeStyle(element)?.getPropertyValue(token).trim() ?? '';\n}\n\nexport function useEditorTheme(): EditorTheme {\n const { activeTheme } = useTheme();\n return { id: activeTheme.id, base: activeTheme.base, registration: activeTheme };\n}\n","import { getComputedThemeStyle, getEditorThemeRoot } from './useEditorTheme';\nimport type { BuiltInThemeId } from '@omniviewdev/base-ui';\n\ninterface MonacoThemeData {\n base: 'vs' | 'vs-dark' | 'hc-black' | 'hc-light';\n inherit: boolean;\n rules: Array<{ token: string; foreground?: string; fontStyle?: string }>;\n colors: Record<string, string>;\n}\n\nconst HEX_COLOR = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst SERIALIZED_RGB =\n /^rgba?\\(\\s*([\\d.]+)(?:\\s*,\\s*|\\s+)([\\d.]+)(?:\\s*,\\s*|\\s+)([\\d.]+)(?:\\s*(?:,|\\/)\\s*([\\d.]+))?\\s*\\)$/i;\n\nfunction byteToHex(value: number): string {\n return Math.max(0, Math.min(255, Math.round(value)))\n .toString(16)\n .padStart(2, '0');\n}\n\nfunction serializedColorToHex(color: string): string {\n const trimmed = color.trim();\n if (HEX_COLOR.test(trimmed)) return trimmed;\n\n const match = trimmed.match(SERIALIZED_RGB);\n if (!match) return '';\n const alpha = match[4] === undefined ? 1 : Number(match[4]);\n const rgb = `#${byteToHex(Number(match[1]))}${byteToHex(Number(match[2]))}${byteToHex(Number(match[3]))}`;\n return alpha >= 1 ? rgb : `${rgb}${byteToHex(alpha * 255)}`;\n}\n\ninterface MonacoColorNormalizer {\n normalize(color: string): string;\n dispose(): void;\n}\n\nfunction createMonacoColorNormalizer(root: HTMLElement | null): MonacoColorNormalizer {\n if (!root) {\n return {\n normalize: serializedColorToHex,\n dispose() {},\n };\n }\n\n const surface = root.ownerDocument.createElement('canvas');\n surface.width = 1;\n surface.height = 1;\n surface.setAttribute('aria-hidden', 'true');\n surface.style.cssText =\n 'position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;visibility:hidden';\n root.append(surface);\n let context: CanvasRenderingContext2D | null | undefined;\n\n return {\n normalize(color) {\n const direct = serializedColorToHex(color);\n if (direct) return direct;\n\n surface.style.color = '';\n surface.style.color = color.trim();\n if (!surface.style.color) return '';\n\n const computed = getComputedStyle(surface).color;\n const serialized = serializedColorToHex(computed);\n if (serialized) return serialized;\n if (!/^(?:color|lab|lch|oklab|oklch)\\(/i.test(computed)) return '';\n\n try {\n context ??= surface.getContext('2d', { willReadFrequently: true });\n if (!context) return '';\n context.clearRect(0, 0, 1, 1);\n context.fillStyle = '#010203';\n context.fillStyle = computed;\n if (context.fillStyle === '#010203') return '';\n context.fillRect(0, 0, 1, 1);\n const pixel = context.getImageData(0, 0, 1, 1).data;\n const rgb = `#${byteToHex(pixel[0]!)}${byteToHex(pixel[1]!)}${byteToHex(pixel[2]!)}`;\n return pixel[3] === 255 ? rgb : `${rgb}${byteToHex(pixel[3]!)}`;\n } catch {\n return '';\n }\n },\n\n dispose() {\n surface.remove();\n },\n };\n}\n\nfunction getBaseTheme(mode: BuiltInThemeId): 'vs' | 'vs-dark' | 'hc-black' | 'hc-light' {\n switch (mode) {\n case 'light':\n case 'solarized-light':\n return 'vs';\n case 'high-contrast-dark':\n return 'hc-black';\n case 'high-contrast-light':\n return 'hc-light';\n default:\n return 'vs-dark';\n }\n}\n\n/**\n * Build a token rule, omitting foreground if the CSS variable is not defined.\n * Monaco throws on empty-string foreground values, so we filter them out\n * and let `inherit: true` fall back to the base theme defaults.\n */\nfunction tokenRule(\n name: string,\n fgVar: string,\n styles: CSSStyleDeclaration | null,\n normalizer: MonacoColorNormalizer,\n styleVar?: string,\n styleDefault?: string,\n): { token: string; foreground?: string; fontStyle?: string } | null {\n const foreground = normalizer.normalize(styles?.getPropertyValue(fgVar).trim() ?? '');\n if (!foreground) return null;\n const entry: { token: string; foreground: string; fontStyle?: string } = {\n token: name,\n foreground: foreground.slice(1),\n };\n if (styleVar) {\n entry.fontStyle = styles?.getPropertyValue(styleVar).trim() || styleDefault || '';\n }\n return entry;\n}\n\n/**\n * Filter a color map to exclude entries with empty-string values.\n * Monaco accepts missing keys but throws on empty strings.\n */\nfunction filterColors(colors: Record<string, string>): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(colors)) {\n if (value) result[key] = value;\n }\n return result;\n}\n\nexport function buildMonacoTheme(\n mode: BuiltInThemeId,\n element?: HTMLElement | null,\n): MonacoThemeData {\n const root = getEditorThemeRoot(element);\n const styles = getComputedThemeStyle(root);\n const normalizer = createMonacoColorNormalizer(root);\n const rule = (name: string, fgVar: string, styleVar?: string, styleDefault?: string) =>\n tokenRule(name, fgVar, styles, normalizer, styleVar, styleDefault);\n const color = (name: string) => normalizer.normalize(styles?.getPropertyValue(name).trim() ?? '');\n\n try {\n const rules = [\n rule('comment', '--ov-syntax-comment', '--ov-syntax-style-comment', 'italic'),\n rule('string', '--ov-syntax-string'),\n rule('string.escape', '--ov-syntax-string-escape'),\n rule('number', '--ov-syntax-number'),\n rule('keyword', '--ov-syntax-keyword', '--ov-syntax-style-keyword'),\n rule('keyword.control', '--ov-syntax-keyword-control'),\n rule('keyword.operator', '--ov-syntax-keyword-operator'),\n rule('type', '--ov-syntax-type', '--ov-syntax-style-type'),\n rule('type.identifier', '--ov-syntax-type'),\n rule('class', '--ov-syntax-class'),\n rule('interface', '--ov-syntax-interface'),\n rule('function', '--ov-syntax-function', '--ov-syntax-style-function'),\n rule('function.declaration', '--ov-syntax-function'),\n rule('method', '--ov-syntax-method'),\n rule('variable', '--ov-syntax-variable'),\n rule('parameter', '--ov-syntax-parameter'),\n rule('property', '--ov-syntax-property'),\n rule('namespace', '--ov-syntax-namespace'),\n rule('decorator', '--ov-syntax-decorator'),\n rule('regexp', '--ov-syntax-regexp'),\n rule('operator', '--ov-syntax-operator'),\n rule('delimiter', '--ov-syntax-punctuation'),\n rule('delimiter.bracket', '--ov-syntax-punctuation'),\n ].filter((entry): entry is NonNullable<typeof entry> => entry !== null);\n\n return {\n base: getBaseTheme(mode),\n inherit: true,\n rules,\n colors: filterColors({\n 'editor.background': color('--ov-color-editor-bg'),\n 'editor.foreground': color('--ov-color-editor-fg'),\n 'editorCursor.foreground': color('--ov-color-editor-cursor'),\n 'editor.selectionBackground': color('--ov-color-editor-selection-bg'),\n 'editor.inactiveSelectionBackground': color('--ov-color-editor-selection-inactive-bg'),\n 'editor.lineHighlightBackground': color('--ov-color-editor-line-highlight-bg'),\n 'editor.lineHighlightBorder': color('--ov-color-editor-line-highlight-border'),\n 'editorLineNumber.foreground': color('--ov-color-editor-line-number'),\n 'editorLineNumber.activeForeground': color('--ov-color-editor-line-number-active'),\n 'editorWhitespace.foreground': color('--ov-color-editor-whitespace'),\n 'editorIndentGuide.background': color('--ov-color-editor-indent-guide'),\n 'editorIndentGuide.activeBackground': color('--ov-color-editor-indent-guide-active'),\n 'editorRuler.foreground': color('--ov-color-editor-ruler'),\n 'editor.findMatchBackground': color('--ov-color-editor-find-match-bg'),\n 'editor.findMatchBorder': color('--ov-color-editor-find-match-border'),\n 'editor.findMatchHighlightBackground': color('--ov-color-editor-find-range-bg'),\n 'editorLink.activeForeground': color('--ov-color-editor-link'),\n 'editorBracketMatch.background': color('--ov-color-editor-bracket-match-bg'),\n 'editorBracketMatch.border': color('--ov-color-editor-bracket-match-border'),\n 'editorBracketHighlight.foreground1': color('--ov-color-editor-bracket-1'),\n 'editorBracketHighlight.foreground2': color('--ov-color-editor-bracket-2'),\n 'editorBracketHighlight.foreground3': color('--ov-color-editor-bracket-3'),\n 'editorBracketHighlight.foreground4': color('--ov-color-editor-bracket-4'),\n 'editorBracketHighlight.foreground5': color('--ov-color-editor-bracket-5'),\n 'editorBracketHighlight.foreground6': color('--ov-color-editor-bracket-6'),\n 'editorGutter.background': color('--ov-color-gutter-bg'),\n 'editorGutter.addedBackground': color('--ov-color-gutter-added'),\n 'editorGutter.modifiedBackground': color('--ov-color-gutter-modified'),\n 'editorGutter.deletedBackground': color('--ov-color-gutter-deleted'),\n 'diffEditor.insertedTextBackground': color('--ov-color-diff-insert-bg'),\n 'diffEditor.removedTextBackground': color('--ov-color-diff-remove-bg'),\n 'minimap.background': color('--ov-color-minimap-bg'),\n 'minimap.selectionHighlight': color('--ov-color-minimap-selection'),\n 'minimap.errorHighlight': color('--ov-color-minimap-error'),\n 'minimap.warningHighlight': color('--ov-color-minimap-warning'),\n 'minimap.findMatchHighlight': color('--ov-color-minimap-find-match'),\n }),\n };\n } finally {\n normalizer.dispose();\n }\n}\n\nexport const OV_MONACO_THEME = 'ov-theme';\n","const EXTENSION_MAP: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n rb: 'ruby',\n rs: 'rust',\n go: 'go',\n java: 'java',\n kt: 'kotlin',\n kts: 'kotlin',\n cs: 'csharp',\n fs: 'fsharp',\n swift: 'swift',\n c: 'c',\n cpp: 'cpp',\n cc: 'cpp',\n cxx: 'cpp',\n h: 'c',\n hpp: 'cpp',\n css: 'css',\n scss: 'scss',\n less: 'less',\n html: 'html',\n htm: 'html',\n xml: 'xml',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n sh: 'shell',\n bash: 'shell',\n zsh: 'shell',\n ps1: 'powershell',\n dockerfile: 'dockerfile',\n tf: 'hcl',\n hcl: 'hcl',\n toml: 'ini',\n ini: 'ini',\n lua: 'lua',\n r: 'r',\n dart: 'dart',\n php: 'php',\n pl: 'perl',\n ex: 'elixir',\n exs: 'elixir',\n erl: 'erlang',\n hs: 'haskell',\n scala: 'scala',\n clj: 'clojure',\n graphql: 'graphql',\n gql: 'graphql',\n proto: 'protobuf',\n vue: 'html',\n svelte: 'html',\n};\n\nexport function detectLanguage(filename: string): string | undefined {\n const lower = filename.toLowerCase();\n // Handle dotfiles like \"Dockerfile\"\n const base = lower.split('/').pop() ?? lower;\n if (base === 'dockerfile') return 'dockerfile';\n if (base === 'makefile') return 'makefile';\n\n const ext = base.split('.').pop();\n if (!ext) return undefined;\n return EXTENSION_MAP[ext];\n}\n","/**\n * EditorSchemaRegistry — runtime registry for adding language schemas\n * (primarily YAML/JSON) to Monaco editors.\n *\n * Plugins register schemas at runtime via `register()`. The CodeEditor\n * subscribes via `onChange()` and calls `applyYamlSchemas()` / `applyJsonSchemas()`\n * whenever schemas change.\n *\n * @example\n * ```ts\n * import { editorSchemas } from '@omniviewdev/editors';\n *\n * // Plugin registers a Kubernetes Deployment schema\n * editorSchemas.register({\n * uri: 'https://kubernetesjsonschema.dev/v1.25.0/deployment-apps-v1.json',\n * fileMatch: ['*apps%3A%3Av1%3A%3ADeployment.yaml'],\n * schema: deploymentJsonSchema,\n * });\n * ```\n */\n\nconst DEBUG = false;\nfunction log(...args: unknown[]) {\n if (DEBUG) console.log('[schema-registry]', ...args);\n}\nfunction warn(...args: unknown[]) {\n if (DEBUG) console.warn('[schema-registry]', ...args);\n}\n\nexport interface EditorSchema {\n /** Unique URI identifying this schema. Must be a valid https:// URL. */\n uri: string;\n /**\n * Glob patterns for filenames this schema applies to.\n * Tested against the full Monaco model URI string — use URL-encoded\n * colons (`%3A`) for structured GVR filenames.\n *\n * @example ['*core%3A%3Av1%3A%3APod.yaml']\n */\n fileMatch: string[];\n /** The JSON Schema object. */\n schema: Record<string, unknown>;\n /**\n * Human-readable name shown in hover tooltips as the \"Source:\" link text.\n * If omitted, the URI basename is used.\n * @example \"Pod (v1)\"\n */\n name?: string;\n /**\n * Description shown in hover tooltips below the schema title.\n * Supports plain text (markdown special chars will be escaped).\n */\n description?: string;\n}\n\ntype SchemaChangeListener = () => void;\n\n/**\n * Simple glob matcher — supports `*` (matches any sequence of chars).\n * Used to replicate the fileMatch behavior of monaco-yaml.\n */\nfunction globMatch(pattern: string, str: string): boolean {\n // Simple iterative glob matcher — avoids RegExp to prevent ReDoS.\n let pi = 0;\n let si = 0;\n let starPi = -1;\n let starSi = -1;\n\n while (si < str.length) {\n if (pi < pattern.length && (pattern[pi] === str[si] || pattern[pi] === '?')) {\n pi++;\n si++;\n } else if (pi < pattern.length && pattern[pi] === '*') {\n starPi = pi;\n starSi = si;\n pi++;\n } else if (starPi >= 0) {\n pi = starPi + 1;\n starSi++;\n si = starSi;\n } else {\n return false;\n }\n }\n\n while (pi < pattern.length && pattern[pi] === '*') {\n pi++;\n }\n\n return pi === pattern.length;\n}\n\ntype YamlHandle = {\n update: (options: Record<string, unknown>) => void;\n dispose: () => void;\n};\n\nclass EditorSchemaRegistryImpl {\n private _schemas = new Map<string, EditorSchema>();\n private _listeners = new Set<SchemaChangeListener>();\n private _yamlHandle: YamlHandle | null = null;\n\n /** All currently registered schemas. */\n get schemas(): EditorSchema[] {\n return Array.from(this._schemas.values());\n }\n\n /**\n * Inject the yaml handle created by `setupMonacoWorkers`.\n * Called once at startup before any editor mounts.\n * @internal\n */\n _setYamlHandle(handle: YamlHandle): void {\n log('_setYamlHandle called — handle keys:', Object.keys(handle));\n this._yamlHandle = handle;\n }\n\n /**\n * Register a schema. If a schema with the same URI exists, it is replaced.\n * Notifies all listeners (active editors) to reconfigure.\n */\n register(schema: EditorSchema): void {\n log('register() — uri:', schema.uri, 'fileMatch:', schema.fileMatch,\n 'schema keys:', Object.keys(schema.schema).slice(0, 10));\n this._schemas.set(schema.uri, schema);\n this._notify();\n }\n\n /** Register multiple schemas at once. */\n registerAll(schemas: EditorSchema[]): void {\n log('registerAll() —', schemas.length, 'schemas:',\n schemas.map(s => s.uri));\n for (const s of schemas) {\n this._schemas.set(s.uri, s);\n }\n this._notify();\n }\n\n /** Unregister a schema by URI. */\n unregister(uri: string): boolean {\n log('unregister() — uri:', uri);\n const deleted = this._schemas.delete(uri);\n if (deleted) this._notify();\n else log(' schema not found, nothing to unregister');\n return deleted;\n }\n\n /** Clear all registered schemas. */\n clear(): void {\n log('clear() — removing', this._schemas.size, 'schemas');\n this._schemas.clear();\n this._notify();\n }\n\n /**\n * Find all registered schemas whose `fileMatch` patterns match the given\n * model URI string. Uses the same glob-like matching that monaco-yaml uses.\n */\n getSchemasForUri(modelUri: string): EditorSchema[] {\n return this.schemas.filter((s) =>\n s.fileMatch.some((pattern) => globMatch(pattern, modelUri)),\n );\n }\n\n /** Whether the YAML handle has been injected (workers initialized). */\n get isYamlReady(): boolean {\n return this._yamlHandle !== null;\n }\n\n /** Subscribe to schema changes. Returns an unsubscribe function. */\n onChange(listener: SchemaChangeListener): () => void {\n this._listeners.add(listener);\n log('onChange() — listener added, total listeners:', this._listeners.size);\n return () => {\n this._listeners.delete(listener);\n log('onChange() — listener removed, total listeners:', this._listeners.size);\n };\n }\n\n /**\n * Push all registered YAML schemas to the monaco-yaml worker via `update()`.\n * The yaml handle must have been injected by `setupMonacoWorkers` at startup.\n */\n applyYamlSchemas(): void {\n if (!this._yamlHandle) {\n warn('applyYamlSchemas() — NO yaml handle! Was setupMonacoWorkers imported?');\n return;\n }\n const schemas = this.schemas;\n const mapped = schemas.map((s) => ({\n uri: s.uri,\n fileMatch: s.fileMatch,\n schema: s.schema as Record<string, unknown>,\n // name/description are passed through to yaml-language-server's\n // registerExternalSchema — they appear in hover tooltips.\n ...(s.name && { name: s.name }),\n ...(s.description && { description: s.description }),\n }));\n log('applyYamlSchemas() — pushing', schemas.length, 'schemas');\n this._yamlHandle.update({\n enableSchemaRequest: false,\n schemas: mapped,\n });\n log('applyYamlSchemas() — update() called successfully');\n }\n\n /**\n * Apply all JSON schemas to Monaco's built-in JSON language service.\n * Accepts the `monaco` namespace so the registry itself doesn't import\n * `monaco-editor` — keeping it usable before Monaco loads.\n */\n applyJsonSchemas(monacoInstance: unknown): void {\n const m = monacoInstance as {\n json?: {\n jsonDefaults?: {\n setDiagnosticsOptions: (opts: {\n validate: boolean;\n schemas: Array<{\n uri: string;\n fileMatch: string[];\n schema: Record<string, unknown>;\n }>;\n }) => void;\n };\n };\n // Fallback for pre-0.55 (languages.json.jsonDefaults)\n languages?: {\n json?: {\n jsonDefaults?: {\n setDiagnosticsOptions: (opts: {\n validate: boolean;\n schemas: Array<{\n uri: string;\n fileMatch: string[];\n schema: Record<string, unknown>;\n }>;\n }) => void;\n };\n };\n };\n };\n\n const diagnosticsOptions = {\n validate: true,\n schemas: this.schemas.map((s) => ({\n uri: s.uri,\n fileMatch: s.fileMatch,\n schema: s.schema,\n })),\n };\n\n // 0.55+ top-level namespace\n const jsonDefaults = m.json?.jsonDefaults ?? m.languages?.json?.jsonDefaults;\n log('applyJsonSchemas() —', this.schemas.length, 'schemas, jsonDefaults available:',\n !!jsonDefaults);\n jsonDefaults?.setDiagnosticsOptions(diagnosticsOptions);\n }\n\n /** Log the current state of the registry for debugging. */\n debugState(): void {\n log('=== Registry State ===');\n log(' Schemas:', this._schemas.size);\n for (const [uri, schema] of this._schemas) {\n log(` ${uri} → fileMatch: ${JSON.stringify(schema.fileMatch)}`);\n }\n log(' Listeners:', this._listeners.size);\n log(' YAML handle:', this._yamlHandle ? 'SET' : 'NOT SET');\n log('======================');\n }\n\n private _notify(): void {\n log('_notify() — notifying', this._listeners.size, 'listeners');\n for (const fn of this._listeners) {\n try {\n fn();\n } catch (err) {\n console.error('[schema-registry] listener threw during _notify():', err);\n }\n }\n }\n}\n\n/** Singleton schema registry instance. */\nexport const editorSchemas = new EditorSchemaRegistryImpl();\n\nexport type { EditorSchemaRegistryImpl as EditorSchemaRegistry };\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from 'react';\nimport * as monaco from 'monaco-editor';\nimport { useEditorTheme } from '../../themes/useEditorTheme';\nimport { buildMonacoTheme, OV_MONACO_THEME } from '../../themes/monaco';\nimport { detectLanguage } from '../../utils/language';\nimport { editorSchemas } from '../../schemas';\nimport styles from './CodeEditor.module.css';\n\n// ---------------------------------------------------------------------------\n// Debug logging (set to false for production)\n// ---------------------------------------------------------------------------\n\nconst DEBUG = false;\nfunction log(...args: unknown[]) {\n if (DEBUG) console.log('[CodeEditor]', ...args);\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Severity levels matching Monaco's MarkerSeverity enum. */\nexport type DiagnosticSeverity = 'error' | 'warning' | 'info' | 'hint';\n\n/** A parsed diagnostic from the editor's validation markers. */\nexport interface EditorDiagnostic {\n /** Human-readable error message. */\n message: string;\n /** Severity level. */\n severity: DiagnosticSeverity;\n /** 1-based line number. */\n startLineNumber: number;\n /** 1-based column number. */\n startColumn: number;\n /** 1-based end line number. */\n endLineNumber: number;\n /** 1-based end column number. */\n endColumn: number;\n /** The owner/source of the marker (e.g. \"yaml\", \"typescript\"). */\n source?: string;\n /** Optional error code. */\n code?: string;\n}\n\n/** Cursor position info passed to `onCursorChange`. */\nexport interface CursorPosition {\n /** 1-based line number. */\n lineNumber: number;\n /** 1-based column number. */\n column: number;\n}\n\nexport interface CodeEditorProps {\n /** The editor content. Controlled — updates push new text into the editor. */\n value: string;\n /** Fires when the user edits content. Omit for a read-only display. */\n onChange?: (value: string) => void;\n\n // -- File identity ----------------------------------------------------------\n\n /** Explicit Monaco language id (e.g. `\"yaml\"`, `\"typescript\"`). */\n language?: string;\n /**\n * Virtual filename / path used to derive the language (when `language` is\n * omitted) and, more importantly, to set the Monaco model URI so that\n * `monaco-yaml` / JSON schema `fileMatch` patterns can match.\n *\n * For structured resources use the convention:\n * `<plugin>/<connectionId>/<group>::<version>::<resource>.yaml`\n *\n * @example \"kubernetes/demo-cluster/core::v1::Pod.yaml\"\n */\n filename?: string;\n\n // -- Editor behaviour -------------------------------------------------------\n\n readOnly?: boolean;\n lineNumbers?: boolean;\n minimap?: boolean;\n wordWrap?: boolean;\n tabSize?: number;\n /** Show TypeScript / JavaScript diagnostics (squiggly error markers). @default false */\n diagnostics?: boolean;\n /** Trigger completions automatically as the user types. @default false */\n quickSuggestions?: boolean;\n /**\n * Enable syntax highlighting. When false the editor still renders text but\n * without any token colouring — useful for plain log output.\n * @default true\n */\n syntaxHighlighting?: boolean;\n\n // -- Lifecycle callbacks ----------------------------------------------------\n\n /**\n * Called once after the Monaco editor mounts, exposing the raw editor and\n * `monaco` namespace for advanced configuration (custom keybindings,\n * language registration, LSP server attachment, etc.).\n */\n onMount?: (\n editor: monaco.editor.IStandaloneCodeEditor,\n monacoInstance: typeof monaco,\n ) => void;\n\n /**\n * Called whenever the editor's validation markers change. Provides a parsed\n * array of diagnostics that can be displayed in a problems panel, status bar,\n * or custom UI.\n *\n * Fires for all marker owners (YAML, TypeScript, JSON, etc.).\n */\n onDiagnostics?: (diagnostics: EditorDiagnostic[]) => void;\n\n /**\n * Called when the cursor position changes. Useful for breadcrumb navigation,\n * status bar line/column display, or position tracking.\n */\n onCursorChange?: (position: CursorPosition) => void;\n\n // -- Layout -----------------------------------------------------------------\n\n height?: string | number;\n width?: string | number;\n /**\n * Show decorative border and border-radius around the editor.\n * Set to `false` when embedding in an IDE layout or panel.\n * @default true\n */\n bordered?: boolean;\n className?: string;\n}\n\n/**\n * Snapshot of editor internal state for debug panels / troubleshooting.\n * Obtained via `handle.getDebugState()`.\n */\nexport interface EditorDebugState {\n // -- Model ------------------------------------------------------------------\n /** The model URI string (drives schema matching). */\n modelUri: string | null;\n /** The resolved language id (e.g. \"yaml\", \"typescript\"). */\n modelLanguage: string | null;\n /** Total number of lines. */\n modelLineCount: number;\n /** Total character count. */\n modelContentLength: number;\n /** Monaco's internal version id — incremented on every edit including undo. */\n modelVersionId: number;\n /** End-of-line sequence (`\\n` or `\\r\\n`). */\n modelEOL: string | null;\n\n // -- Cursor / Selection -----------------------------------------------------\n cursorPosition: CursorPosition | null;\n /** All active selections (multi-cursor). */\n selections: Array<{\n startLineNumber: number;\n startColumn: number;\n endLineNumber: number;\n endColumn: number;\n }>;\n\n // -- Diagnostics ------------------------------------------------------------\n /** Total marker count across all owners. */\n diagnosticsTotal: number;\n /** Breakdown by severity. */\n diagnosticsBySeverity: Record<DiagnosticSeverity, number>;\n /** Breakdown by owner/source (e.g. { yaml: 2, typescript: 1 }). */\n diagnosticsBySource: Record<string, number>;\n\n // -- Schema -----------------------------------------------------------------\n /** Total registered schemas in the EditorSchemaRegistry. */\n registeredSchemaCount: number;\n /** Schemas whose fileMatch patterns match the current model URI. */\n matchingSchemas: Array<{ uri: string; name?: string; fileMatch: string[] }>;\n\n // -- Editor -----------------------------------------------------------------\n /** Whether the editor is read-only. */\n isReadOnly: boolean;\n /** Whether the editor or its widgets have focus. */\n isFocused: boolean;\n\n // -- Monaco environment -----------------------------------------------------\n /** Total number of Monaco models in memory. */\n totalModelCount: number;\n /** Number of registered languages. */\n registeredLanguageCount: number;\n /** Whether the YAML handle is set (worker initialized). */\n yamlHandleSet: boolean;\n}\n\nexport interface CodeEditorHandle {\n /** The underlying Monaco standalone code editor, or null before mount. */\n getEditor: () => monaco.editor.IStandaloneCodeEditor | null;\n /** The `monaco-editor` module namespace. */\n getMonaco: () => typeof monaco;\n /** Focus the editor. */\n focus: () => void;\n /** Get the current diagnostics (validation markers) for the editor model. */\n getDiagnostics: () => EditorDiagnostic[];\n /**\n * Snapshot the full editor debug state — model info, cursor, diagnostics,\n * schemas, environment. Designed for debug panels and troubleshooting.\n */\n getDebugState: () => EditorDebugState;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\nfunction getOrCreateModel(\n value: string,\n language: string | undefined,\n path: string | undefined,\n): monaco.editor.ITextModel {\n if (path) {\n const uri = monaco.Uri.parse(path);\n log('getOrCreateModel — parsed URI:', uri.toString(), '| language:', language);\n const existing = monaco.editor.getModel(uri);\n if (existing) {\n log(' reusing existing model');\n return existing;\n }\n log(' creating new model with URI');\n return monaco.editor.createModel(value, language, uri);\n }\n log('getOrCreateModel — no path, creating anonymous model | language:', language);\n return monaco.editor.createModel(value, language);\n}\n\nfunction severityToString(severity: monaco.MarkerSeverity): DiagnosticSeverity {\n switch (severity) {\n case monaco.MarkerSeverity.Error: return 'error';\n case monaco.MarkerSeverity.Warning: return 'warning';\n case monaco.MarkerSeverity.Info: return 'info';\n default: return 'hint';\n }\n}\n\nfunction markersTodiagnostics(model: monaco.editor.ITextModel): EditorDiagnostic[] {\n return monaco.editor.getModelMarkers({ resource: model.uri }).map((m) => ({\n message: m.message,\n severity: severityToString(m.severity),\n startLineNumber: m.startLineNumber,\n startColumn: m.startColumn,\n endLineNumber: m.endLineNumber,\n endColumn: m.endColumn,\n source: m.source ?? undefined,\n code: typeof m.code === 'string' ? m.code : m.code?.value,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const CodeEditor = forwardRef<CodeEditorHandle, CodeEditorProps>(\n function CodeEditor(\n {\n value,\n onChange,\n onMount: onMountProp,\n onDiagnostics,\n onCursorChange,\n language,\n filename,\n readOnly = false,\n lineNumbers = true,\n minimap = false,\n wordWrap = false,\n tabSize = 2,\n diagnostics = false,\n quickSuggestions = false,\n syntaxHighlighting = true,\n height = '100%',\n width = '100%',\n bordered = true,\n className,\n },\n ref,\n ) {\n const theme = useEditorTheme();\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [isReady, setIsReady] = useState(false);\n const preventTriggerChangeEvent = useRef(false);\n const subscriptionRef = useRef<monaco.IDisposable | null>(null);\n const markerSubscriptionRef = useRef<monaco.IDisposable | null>(null);\n const cursorSubscriptionRef = useRef<monaco.IDisposable | null>(null);\n\n const resolvedLanguage = language ?? (filename ? detectLanguage(filename) : undefined);\n\n log('render — filename:', filename, '| resolvedLanguage:', resolvedLanguage);\n\n // Pretty-print JSON when the language is JSON\n const displayValue = useMemo(() => {\n if (resolvedLanguage === 'json' && value) {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n } catch {\n return value;\n }\n }\n return value;\n }, [resolvedLanguage, value]);\n\n // -----------------------------------------------------------------------\n // Mount / Unmount\n // -----------------------------------------------------------------------\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n log('=== MOUNT ===');\n\n // Theme\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n\n // TypeScript / JavaScript compiler options (global — JSX & target config)\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n jsx: 2, // JsxEmit.React\n jsxFactory: 'React.createElement',\n allowNonTsExtensions: true,\n allowJs: true,\n target: 99, // ESNext\n });\n\n // Model — the URI drives schema fileMatch\n const model = getOrCreateModel(\n displayValue,\n syntaxHighlighting ? resolvedLanguage : 'plaintext',\n filename,\n );\n log(' model created — uri:', model.uri.toString());\n\n const editor = monaco.editor.create(containerRef.current, {\n model,\n readOnly,\n lineNumbers: lineNumbers ? 'on' : 'off',\n minimap: { enabled: minimap },\n wordWrap: wordWrap ? 'on' : 'off',\n quickSuggestions: quickSuggestions\n ? { other: true, strings: true, comments: false }\n : false,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n fontSize: 13,\n fontFamily: 'var(--ov-font-family-mono, monospace)',\n tabSize,\n renderValidationDecorations: diagnostics ? 'on' : 'off',\n });\n\n editorRef.current = editor;\n\n // Apply registered schemas so completions/validation are live\n editorSchemas.applyYamlSchemas();\n editorSchemas.applyJsonSchemas(monaco);\n\n onMountProp?.(editor, monaco);\n setIsReady(true);\n log('=== MOUNT COMPLETE ===');\n\n return () => {\n log('=== UNMOUNT ===');\n subscriptionRef.current?.dispose();\n subscriptionRef.current = null;\n markerSubscriptionRef.current?.dispose();\n markerSubscriptionRef.current = null;\n cursorSubscriptionRef.current?.dispose();\n cursorSubscriptionRef.current = null;\n // Detach model before disposing to avoid WordHighlighter \"Canceled\" errors\n const m = editor.getModel();\n editor.setModel(null);\n m?.dispose();\n editor.dispose();\n editorRef.current = null;\n setIsReady(false);\n };\n // Intentional mount-once effect — props like value, language, readOnly,\n // theme, filename, and callbacks are synced via dedicated effects below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // -----------------------------------------------------------------------\n // Prop → editor syncing\n // -----------------------------------------------------------------------\n\n // Value\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !isReady || displayValue === undefined) return;\n if (editor.getOption(monaco.editor.EditorOption.readOnly)) {\n editor.setValue(displayValue);\n } else if (displayValue !== editor.getValue()) {\n const model = editor.getModel();\n if (!model) return;\n preventTriggerChangeEvent.current = true;\n editor.executeEdits('', [\n {\n range: model.getFullModelRange(),\n text: displayValue,\n forceMoveMarkers: true,\n },\n ]);\n editor.pushUndoStop();\n preventTriggerChangeEvent.current = false;\n }\n }, [displayValue, isReady]);\n\n // Options\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n editorRef.current.updateOptions({\n readOnly,\n lineNumbers: lineNumbers ? 'on' : 'off',\n minimap: { enabled: minimap },\n wordWrap: wordWrap ? 'on' : 'off',\n quickSuggestions: quickSuggestions\n ? { other: true, strings: true, comments: false }\n : false,\n tabSize,\n renderValidationDecorations: diagnostics ? 'on' : 'off',\n });\n }, [readOnly, lineNumbers, minimap, wordWrap, quickSuggestions, tabSize, diagnostics, isReady]);\n\n // Language (including syntax highlighting toggle)\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const model = editorRef.current.getModel();\n if (model) {\n const lang = syntaxHighlighting ? (resolvedLanguage ?? 'plaintext') : 'plaintext';\n log('setModelLanguage →', lang);\n monaco.editor.setModelLanguage(model, lang);\n }\n }, [resolvedLanguage, syntaxHighlighting, isReady]);\n\n // Filename → model URI swap (for schema fileMatch)\n const prevFilenameRef = useRef(filename);\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || !isReady) return;\n if (prevFilenameRef.current === filename) return;\n log('filename changed:', prevFilenameRef.current, '→', filename);\n prevFilenameRef.current = filename;\n\n const currentModel = editor.getModel();\n const currentValue = currentModel?.getValue?.() ?? displayValue;\n // Detach model before disposing to avoid WordHighlighter \"Canceled\" errors\n editor.setModel(null);\n currentModel?.dispose();\n const newModel = getOrCreateModel(currentValue, syntaxHighlighting ? resolvedLanguage : 'plaintext', filename);\n editor.setModel(newModel);\n log(' new model set — uri:', newModel.uri.toString());\n }, [filename, isReady, resolvedLanguage, syntaxHighlighting, displayValue]);\n\n // Theme\n useEffect(() => {\n if (!isReady) return;\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n }, [isReady, theme.registration]);\n\n // onChange subscription\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n subscriptionRef.current?.dispose();\n if (onChange) {\n subscriptionRef.current = editorRef.current.onDidChangeModelContent(() => {\n if (!preventTriggerChangeEvent.current) {\n onChange(editorRef.current!.getValue());\n }\n });\n }\n }, [onChange, isReady]);\n\n // onDiagnostics subscription — listen to marker changes on the model\n useEffect(() => {\n if (!isReady) return;\n markerSubscriptionRef.current?.dispose();\n if (onDiagnostics) {\n markerSubscriptionRef.current = monaco.editor.onDidChangeMarkers((uris) => {\n const model = editorRef.current?.getModel();\n if (!model) return;\n const modelUri = model.uri.toString();\n if (uris.some((u) => u.toString() === modelUri)) {\n onDiagnostics(markersTodiagnostics(model));\n }\n });\n }\n }, [onDiagnostics, isReady]);\n\n // onCursorChange subscription\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n cursorSubscriptionRef.current?.dispose();\n if (onCursorChange) {\n cursorSubscriptionRef.current = editorRef.current.onDidChangeCursorPosition((e) => {\n onCursorChange({\n lineNumber: e.position.lineNumber,\n column: e.position.column,\n });\n });\n }\n }, [onCursorChange, isReady]);\n\n // Live schema updates — re-apply whenever the registry changes\n useEffect(() => {\n if (!isReady) return;\n return editorSchemas.onChange(() => {\n editorSchemas.applyYamlSchemas();\n editorSchemas.applyJsonSchemas(monaco);\n });\n }, [isReady]);\n\n // -----------------------------------------------------------------------\n // Imperative handle\n // -----------------------------------------------------------------------\n\n useImperativeHandle(ref, () => ({\n getEditor: () => editorRef.current,\n getMonaco: () => monaco,\n focus: () => editorRef.current?.focus(),\n getDiagnostics: () => {\n const model = editorRef.current?.getModel();\n return model ? markersTodiagnostics(model) : [];\n },\n getDebugState: (): EditorDebugState => {\n const editor = editorRef.current;\n const model = editor?.getModel() ?? null;\n const markers = model\n ? monaco.editor.getModelMarkers({ resource: model.uri })\n : [];\n const modelUri = model?.uri.toString() ?? null;\n\n // Diagnostics breakdown\n const diagnosticsBySeverity: Record<DiagnosticSeverity, number> = {\n error: 0, warning: 0, info: 0, hint: 0,\n };\n const diagnosticsBySource: Record<string, number> = {};\n for (const m of markers) {\n const sev = severityToString(m.severity);\n diagnosticsBySeverity[sev]++;\n const src = m.source ?? 'unknown';\n diagnosticsBySource[src] = (diagnosticsBySource[src] ?? 0) + 1;\n }\n\n // Schema matching\n const matchingSchemas = modelUri\n ? editorSchemas.getSchemasForUri(modelUri).map((s) => ({\n uri: s.uri,\n name: s.name,\n fileMatch: s.fileMatch,\n }))\n : [];\n\n const pos = editor?.getPosition() ?? null;\n const sels = editor?.getSelections() ?? [];\n\n return {\n modelUri,\n modelLanguage: model?.getLanguageId() ?? null,\n modelLineCount: model?.getLineCount() ?? 0,\n modelContentLength: model?.getValueLength() ?? 0,\n modelVersionId: model?.getVersionId() ?? 0,\n modelEOL: model?.getEOL() ?? null,\n cursorPosition: pos ? { lineNumber: pos.lineNumber, column: pos.column } : null,\n selections: sels.map((s) => ({\n startLineNumber: s.startLineNumber,\n startColumn: s.startColumn,\n endLineNumber: s.endLineNumber,\n endColumn: s.endColumn,\n })),\n diagnosticsTotal: markers.length,\n diagnosticsBySeverity,\n diagnosticsBySource,\n registeredSchemaCount: editorSchemas.schemas.length,\n matchingSchemas,\n isReadOnly: editor?.getOption(monaco.editor.EditorOption.readOnly) ?? false,\n isFocused: editor?.hasWidgetFocus() ?? false,\n totalModelCount: monaco.editor.getModels().length,\n registeredLanguageCount: monaco.languages.getLanguages().length,\n yamlHandleSet: editorSchemas.isYamlReady,\n };\n },\n }));\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n\n const toDim = (v: string | number) => (typeof v === 'number' ? `${v}px` : v);\n\n return (\n <div\n className={cn(styles.Root, className)}\n style={\n {\n '--_editor-height': toDim(height),\n '--_editor-width': toDim(width),\n } as CSSProperties\n }\n data-testid=\"code-editor\"\n {...(!bordered ? { 'data-borderless': '' } : {})}\n >\n <div ref={containerRef} className={styles.Inner} />\n </div>\n );\n },\n);\n\nCodeEditor.displayName = 'CodeEditor';\n","import { forwardRef, useEffect, useRef, useState, type CSSProperties } from 'react';\nimport * as monaco from 'monaco-editor';\nimport { useEditorTheme } from '../../themes/useEditorTheme';\nimport { buildMonacoTheme, OV_MONACO_THEME } from '../../themes/monaco';\nimport styles from './DiffViewer.module.css';\n\nexport type DiffMode = 'side-by-side' | 'inline';\n\nexport interface DiffViewerProps {\n original: string;\n modified: string;\n language?: string;\n mode?: DiffMode;\n readOnly?: boolean;\n height?: string | number;\n /**\n * Show decorative border and border-radius around the viewer.\n * Set to `false` when embedding in an IDE layout or panel.\n * @default true\n */\n bordered?: boolean;\n className?: string;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\nexport const DiffViewer = forwardRef<HTMLDivElement, DiffViewerProps>(function DiffViewer(\n {\n original,\n modified,\n language,\n mode = 'side-by-side',\n readOnly = true,\n height = '100%',\n bordered = true,\n className,\n },\n ref,\n) {\n const theme = useEditorTheme();\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<monaco.editor.IStandaloneDiffEditor | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n // Create editor on mount\n useEffect(() => {\n if (!containerRef.current) return;\n\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n\n const editor = monaco.editor.createDiffEditor(containerRef.current, {\n readOnly,\n renderSideBySide: mode === 'side-by-side',\n renderValidationDecorations: 'off',\n scrollBeyondLastLine: false,\n automaticLayout: true,\n fontSize: 13,\n fontFamily: 'var(--ov-font-family-mono, monospace)',\n });\n\n const originalModel = monaco.editor.createModel(original, language);\n const modifiedModel = monaco.editor.createModel(modified, language);\n editor.setModel({ original: originalModel, modified: modifiedModel });\n\n editorRef.current = editor;\n setIsReady(true);\n\n return () => {\n editor.getModel()?.original?.dispose();\n editor.getModel()?.modified?.dispose();\n editor.dispose();\n editorRef.current = null;\n setIsReady(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Update original content\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const origModel = editorRef.current.getModel()?.original;\n if (origModel && original !== origModel.getValue()) {\n origModel.setValue(original);\n }\n }, [original, isReady]);\n\n // Update modified content\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const modifiedEditor = editorRef.current.getModifiedEditor();\n if (modified !== modifiedEditor.getValue()) {\n editorRef.current.getModel()?.modified?.setValue(modified);\n }\n }, [modified, isReady]);\n\n // Update language\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n const lang = language ?? 'plaintext';\n const models = editorRef.current.getModel();\n if (models?.original) monaco.editor.setModelLanguage(models.original, lang);\n if (models?.modified) monaco.editor.setModelLanguage(models.modified, lang);\n }, [language, isReady]);\n\n // Update options\n useEffect(() => {\n if (!editorRef.current || !isReady) return;\n editorRef.current.updateOptions({\n readOnly,\n renderSideBySide: mode === 'side-by-side',\n });\n }, [readOnly, mode, isReady]);\n\n // Update theme\n useEffect(() => {\n if (!isReady) return;\n monaco.editor.defineTheme(OV_MONACO_THEME, buildMonacoTheme(theme.base, containerRef.current));\n monaco.editor.setTheme(OV_MONACO_THEME);\n }, [isReady, theme.registration]);\n\n const toDim = (v: string | number) => (typeof v === 'number' ? `${v}px` : v);\n\n return (\n <div\n ref={ref}\n className={cn(styles.Root, className)}\n style={\n {\n '--_diff-height': toDim(height ?? '100%'),\n } as CSSProperties\n }\n data-testid=\"diff-viewer\"\n {...(!bordered ? { 'data-borderless': '' } : {})}\n >\n <div ref={containerRef} className={styles.Inner} />\n </div>\n );\n});\n\nDiffViewer.displayName = 'DiffViewer';\n","import { getComputedThemeStyle } from './useEditorTheme';\n\nexport interface XtermThemeData {\n background: string;\n foreground: string;\n cursor: string;\n cursorAccent?: string;\n selectionBackground: string;\n selectionForeground?: string;\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightRed: string;\n brightGreen: string;\n brightYellow: string;\n brightBlue: string;\n brightMagenta: string;\n brightCyan: string;\n brightWhite: string;\n}\n\nexport function buildXtermTheme(element?: HTMLElement | null): XtermThemeData {\n const styles = getComputedThemeStyle(element);\n const token = (name: string, fallback = '') => styles?.getPropertyValue(name).trim() || fallback;\n\n return {\n background: token('--ov-color-terminal-bg', '#0d0e10'),\n foreground: token('--ov-color-terminal-fg', '#e2e7ee'),\n cursor: token('--ov-color-terminal-cursor', '#89a7ee'),\n selectionBackground: token('--ov-color-terminal-selection-bg', 'rgba(90,127,226,0.18)'),\n selectionForeground: token('--ov-color-terminal-selection-fg') || undefined,\n black: token('--ov-color-ansi-black', '#3b4252'),\n red: token('--ov-color-ansi-red', '#bf616a'),\n green: token('--ov-color-ansi-green', '#a3be8c'),\n yellow: token('--ov-color-ansi-yellow', '#ebcb8b'),\n blue: token('--ov-color-ansi-blue', '#81a1c1'),\n magenta: token('--ov-color-ansi-magenta', '#b48ead'),\n cyan: token('--ov-color-ansi-cyan', '#88c0d0'),\n white: token('--ov-color-ansi-white', '#e5e9f0'),\n brightBlack: token('--ov-color-ansi-bright-black', '#4c566a'),\n brightRed: token('--ov-color-ansi-bright-red', '#d08770'),\n brightGreen: token('--ov-color-ansi-bright-green', '#a3be8c'),\n brightYellow: token('--ov-color-ansi-bright-yellow', '#ebcb8b'),\n brightBlue: token('--ov-color-ansi-bright-blue', '#81a1c1'),\n brightMagenta: token('--ov-color-ansi-bright-magenta', '#b48ead'),\n brightCyan: token('--ov-color-ansi-bright-cyan', '#8fbcbb'),\n brightWhite: token('--ov-color-ansi-bright-white', '#eceff4'),\n };\n}\n","import '@xterm/xterm/css/xterm.css';\n\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from 'react';\nimport { useEditorTheme } from '../../themes/useEditorTheme';\nimport { buildXtermTheme } from '../../themes/xterm';\nimport styles from './Terminal.module.css';\n\n/**\n * Signal types matching the Omniview plugin SDK's StreamSignal enum.\n * These map 1:1 to `core/exec/signal/{SIGNAL}/{sessionId}` Wails events.\n */\nexport type TerminalSignal =\n | 'ERROR'\n | 'CLOSE'\n | 'SIGINT'\n | 'SIGQUIT'\n | 'SIGTERM'\n | 'SIGKILL'\n | 'SIGHUP'\n | 'SIGUSR1'\n | 'SIGUSR2'\n | 'SIGWINCH';\n\n/**\n * Structured error payload from the plugin SDK's StreamError.\n * Received with the 'ERROR' signal when a session encounters an error.\n */\nexport interface TerminalErrorInfo {\n /** Short error title for display. */\n title: string;\n /** Suggested resolution or next step. */\n suggestion: string;\n /** Raw error message for debugging. */\n raw: string;\n /** Whether the session can be retried. */\n retryable?: boolean;\n /** Alternative commands to try (e.g., different shells). */\n retryCommands?: string[];\n}\n\n/** Options for terminal search operations. */\nexport interface TerminalSearchOptions {\n /** Whether the search should be case-sensitive. */\n caseSensitive?: boolean;\n /** Whether the search should match whole words only. */\n wholeWord?: boolean;\n /** Whether the search term is a regex. */\n regex?: boolean;\n /** Whether to search incrementally (highlight as you type). */\n incremental?: boolean;\n}\n\nexport interface TerminalProps {\n // ── Session / data callbacks ──────────────────────────────────────────\n\n /** Called when user types input. Wire to `ExecClient.WriteSession(sessionId, data)`. */\n onData?: (data: string) => void;\n /** Called when user pastes binary data. */\n onBinaryData?: (data: string) => void;\n /** Called on terminal resize with new dimensions. Wire to `ExecClient.ResizeSession(sessionId, rows, cols)`. */\n onResize?: (cols: number, rows: number) => void;\n /**\n * Called when a signal is received (for exec plugin integration).\n * Not invoked internally — the consumer's session layer should call\n * `callbacksRef.current.onSignal?.(signal, payload)` when a signal\n * arrives over the session transport (e.g., Wails event bus).\n */\n onSignal?: (signal: TerminalSignal, payload?: unknown) => void;\n /** Called when the terminal init encounters an error (e.g., failed to load xterm). */\n onError?: (error: Error) => void;\n /**\n * Called when the terminal session closes.\n * Not invoked internally — wire this from your session transport's\n * close/disconnect handler.\n */\n onClose?: (code?: number) => void;\n /**\n * Called once when the terminal is fully initialized and ready to accept writes.\n * This is the right time to attach to a session and start writing data.\n * Receives the current dimensions so the consumer can send an initial resize.\n */\n onReady?: (dimensions: { cols: number; rows: number }) => void;\n\n // ── xterm event callbacks ─────────────────────────────────────────────\n\n /** Called when the terminal bell is triggered. */\n onBell?: () => void;\n /** Called when the terminal title changes (via escape sequence). */\n onTitleChange?: (title: string) => void;\n /** Called on each keypress with the key and DOM event. */\n onKey?: (event: { key: string; domEvent: KeyboardEvent }) => void;\n /** Called when the text selection changes. */\n onSelectionChange?: () => void;\n /** Called on each line feed. */\n onLineFeed?: () => void;\n /** Called when the viewport scrolls. */\n onScroll?: (newPosition: number) => void;\n /**\n * Called after write data has been parsed (at most once per animation frame).\n * Useful as a \"render complete\" signal for high-throughput output.\n */\n onWriteParsed?: () => void;\n\n // ── Appearance ────────────────────────────────────────────────────────\n\n /** Font size in pixels. */\n fontSize?: number;\n /** Font family override. */\n fontFamily?: string;\n /** Font weight ('normal', 'bold', '100'-'900'). */\n fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n /** Font weight for bold text. */\n fontWeightBold?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n /** Enable cursor blink. */\n cursorBlink?: boolean;\n /** Cursor style. */\n cursorStyle?: 'block' | 'underline' | 'bar';\n /** Width of the cursor in CSS pixels (only applies to bar cursor). */\n cursorWidth?: number;\n /** Line height multiplier. */\n lineHeight?: number;\n /** Letter spacing in pixels. */\n letterSpacing?: number;\n /** Whether to draw bold text in bright colors. */\n drawBoldTextInBrightColors?: boolean;\n\n // ── Behavior ──────────────────────────────────────────────────────────\n\n /** Maximum scrollback buffer lines. 0 = unlimited. */\n scrollback?: number;\n /** Convert \\n to \\r\\n for proper line endings. */\n convertEol?: boolean;\n /** Allow transparent background. */\n allowTransparency?: boolean;\n /** Treat macOS Option key as Meta (for proper Alt-key sequences). */\n macOptionIsMeta?: boolean;\n /** Allow macOS Option+Click to force selection. */\n macOptionClickForcesSelection?: boolean;\n /** Enable clickable URLs in terminal output. */\n linkHandling?: boolean;\n /** Disable user input (read-only / log-viewer mode). */\n disableStdin?: boolean;\n /** Intercept key events before xterm processes them. Return false to prevent default handling. */\n customKeyEventHandler?: (event: KeyboardEvent) => boolean;\n /** Auto-focus the terminal after initialization. */\n autoFocus?: boolean;\n\n // ── Rendering ─────────────────────────────────────────────────────────\n\n /** Renderer to use. 'auto' tries WebGL then falls back to DOM. */\n renderer?: 'auto' | 'webgl' | 'dom';\n /** Initial number of rows before fit. */\n rows?: number;\n /** Initial number of columns before fit. */\n cols?: number;\n\n // ── Accessibility ─────────────────────────────────────────────────────\n\n /** Enable screen reader mode for accessibility. */\n screenReaderMode?: boolean;\n /** Minimum contrast ratio for text (1-21). */\n minimumContrastRatio?: number;\n\n // ── Layout ────────────────────────────────────────────────────────────\n\n /** Custom CSS class. */\n className?: string;\n}\n\nexport interface TerminalHandle {\n // ── Write ─────────────────────────────────────────────────────────────\n\n /** Write a string or Uint8Array to the terminal. */\n write: (data: string | Uint8Array) => void;\n /** Write a string followed by a newline. */\n writeln: (data: string) => void;\n\n // ── Terminal state ────────────────────────────────────────────────────\n\n /** Clear the terminal viewport and scrollback. */\n clear: () => void;\n /** Focus the terminal. */\n focus: () => void;\n /** Blur (unfocus) the terminal. */\n blur: () => void;\n /** Re-fit the terminal to its container. */\n fit: () => void;\n /** Get the current terminal dimensions, or null if not initialized. */\n getDimensions: () => { cols: number; rows: number } | null;\n /** Reset the terminal (clear + reset state). */\n reset: () => void;\n\n // ── Search ────────────────────────────────────────────────────────────\n\n /** Find the next match for a search term. */\n findNext: (term: string, options?: TerminalSearchOptions) => boolean;\n /** Find the previous match for a search term. */\n findPrevious: (term: string, options?: TerminalSearchOptions) => boolean;\n /** Clear search highlights. */\n clearSearch: () => void;\n\n // ── Selection ─────────────────────────────────────────────────────────\n\n /** Get the current text selection. */\n getSelection: () => string;\n /** Whether text is currently selected. */\n hasSelection: () => boolean;\n /** Select all terminal content. */\n selectAll: () => void;\n /** Clear the current selection. */\n clearSelection: () => void;\n\n // ── Scrolling ─────────────────────────────────────────────────────────\n\n /** Scroll to the bottom of the terminal. */\n scrollToBottom: () => void;\n /** Scroll to a specific line. */\n scrollToLine: (line: number) => void;\n /** Scroll up by N lines. */\n scrollUp: (lines: number) => void;\n /** Scroll down by N lines. */\n scrollDown: (lines: number) => void;\n\n // ── Clipboard ─────────────────────────────────────────────────────────\n\n /** Paste data into the terminal. */\n paste: (data: string) => void;\n\n // ── Buffer ────────────────────────────────────────────────────────────\n\n /** Get the full buffer content as a string (via SerializeAddon). */\n getBufferContent: () => string;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\n/**\n * Simple debounce for resize handlers. Returns a debounced function\n * and a cancel function for cleanup.\n */\nfunction debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n ms: number,\n): { run: (...args: Parameters<T>) => void; cancel: () => void } {\n let timer: ReturnType<typeof setTimeout> | null = null;\n return {\n run: (...args: Parameters<T>) => {\n if (timer !== null) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, ms);\n },\n cancel: () => {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n },\n };\n}\n\n/**\n * Production-grade terminal component built on xterm.js 6.\n *\n * Designed for the Omniview IDE bottom-drawer terminal, but usable anywhere.\n * Wire `onData` → `ExecClient.WriteSession` and `onResize` → `ExecClient.ResizeSession`,\n * then write session stdout/stderr to the handle's `write()` method.\n *\n * @example\n * ```tsx\n * const ref = useRef<TerminalHandle>(null);\n *\n * <Terminal\n * ref={ref}\n * onReady={({ cols, rows }) => {\n * attachSession(sessionId);\n * resizeSession(sessionId, rows, cols);\n * }}\n * onData={(data) => writeSession(sessionId, data)}\n * onResize={(cols, rows) => resizeSession(sessionId, rows, cols)}\n * autoFocus\n * />\n * ```\n */\nexport const Terminal = forwardRef<TerminalHandle, TerminalProps>(function Terminal(\n {\n onData,\n onBinaryData,\n onResize,\n onSignal,\n onError,\n onClose,\n onReady,\n onBell,\n onTitleChange,\n onKey,\n onSelectionChange,\n onLineFeed,\n onScroll,\n onWriteParsed,\n fontSize = 13,\n fontFamily,\n fontWeight,\n fontWeightBold,\n scrollback = 5000,\n cursorBlink = true,\n cursorStyle,\n cursorWidth,\n lineHeight,\n letterSpacing,\n drawBoldTextInBrightColors = true,\n convertEol = true,\n allowTransparency = true,\n macOptionIsMeta = true,\n macOptionClickForcesSelection = true,\n linkHandling = true,\n disableStdin,\n customKeyEventHandler,\n autoFocus = false,\n renderer = 'auto',\n rows: initialRows,\n cols: initialCols,\n screenReaderMode,\n minimumContrastRatio,\n className,\n },\n ref,\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const termRef = useRef<unknown>(null);\n const fitAddonRef = useRef<unknown>(null);\n const searchAddonRef = useRef<unknown>(null);\n const serializeAddonRef = useRef<unknown>(null);\n const addonsRef = useRef<Array<{ dispose: () => void }>>([]);\n const observerRef = useRef<ResizeObserver | null>(null);\n const debouncedFitRef = useRef<{ run: () => void; cancel: () => void } | null>(null);\n const windowResizeCleanupRef = useRef<(() => void) | null>(null);\n const theme = useEditorTheme();\n\n // Stable refs for callbacks to avoid re-initializing terminal\n const callbacksRef = useRef({\n onData, onBinaryData, onResize, onSignal, onError, onClose, onReady,\n onBell, onTitleChange, onKey, onSelectionChange, onLineFeed, onScroll, onWriteParsed,\n });\n callbacksRef.current = {\n onData, onBinaryData, onResize, onSignal, onError, onClose, onReady,\n onBell, onTitleChange, onKey, onSelectionChange, onLineFeed, onScroll, onWriteParsed,\n };\n\n const fit = useCallback(() => {\n try {\n const addon = fitAddonRef.current as { fit?: () => void } | null;\n addon?.fit?.();\n } catch {\n // fit() can throw if container has zero dimensions (e.g., hidden tab)\n }\n }, []);\n\n useImperativeHandle(ref, () => ({\n write: (data: string | Uint8Array) => {\n const t = termRef.current as { write?: (d: string | Uint8Array) => void } | null;\n t?.write?.(data);\n },\n writeln: (data: string) => {\n const t = termRef.current as { writeln?: (d: string) => void } | null;\n t?.writeln?.(data);\n },\n clear: () => {\n const t = termRef.current as { clear?: () => void } | null;\n t?.clear?.();\n },\n focus: () => {\n const t = termRef.current as { focus?: () => void } | null;\n t?.focus?.();\n },\n blur: () => {\n const t = termRef.current as { blur?: () => void } | null;\n t?.blur?.();\n },\n fit,\n getDimensions: () => {\n const t = termRef.current as { cols?: number; rows?: number } | null;\n if (t && typeof t.cols === 'number' && typeof t.rows === 'number') {\n return { cols: t.cols, rows: t.rows };\n }\n return null;\n },\n reset: () => {\n const t = termRef.current as { reset?: () => void } | null;\n t?.reset?.();\n },\n scrollToBottom: () => {\n const t = termRef.current as { scrollToBottom?: () => void } | null;\n t?.scrollToBottom?.();\n },\n findNext: (term: string, options?: TerminalSearchOptions): boolean => {\n const s = searchAddonRef.current as { findNext?: (t: string, o?: TerminalSearchOptions) => boolean } | null;\n return s?.findNext?.(term, options) ?? false;\n },\n findPrevious: (term: string, options?: TerminalSearchOptions): boolean => {\n const s = searchAddonRef.current as { findPrevious?: (t: string, o?: TerminalSearchOptions) => boolean } | null;\n return s?.findPrevious?.(term, options) ?? false;\n },\n clearSearch: () => {\n const s = searchAddonRef.current as { clearDecorations?: () => void } | null;\n s?.clearDecorations?.();\n },\n getSelection: (): string => {\n const t = termRef.current as { getSelection?: () => string } | null;\n return t?.getSelection?.() ?? '';\n },\n hasSelection: (): boolean => {\n const t = termRef.current as { hasSelection?: () => boolean } | null;\n return t?.hasSelection?.() ?? false;\n },\n selectAll: () => {\n const t = termRef.current as { selectAll?: () => void } | null;\n t?.selectAll?.();\n },\n clearSelection: () => {\n const t = termRef.current as { clearSelection?: () => void } | null;\n t?.clearSelection?.();\n },\n scrollToLine: (line: number) => {\n const t = termRef.current as { scrollToLine?: (l: number) => void } | null;\n t?.scrollToLine?.(line);\n },\n scrollUp: (lines: number) => {\n const t = termRef.current as { scrollLines?: (l: number) => void } | null;\n t?.scrollLines?.(-lines);\n },\n scrollDown: (lines: number) => {\n const t = termRef.current as { scrollLines?: (l: number) => void } | null;\n t?.scrollLines?.(lines);\n },\n paste: (data: string) => {\n const t = termRef.current as { paste?: (d: string) => void } | null;\n t?.paste?.(data);\n },\n getBufferContent: (): string => {\n const s = serializeAddonRef.current as { serialize?: () => string } | null;\n return s?.serialize?.() ?? '';\n },\n }));\n\n // Initialize xterm lazily.\n // @note Mount-only props (read once during init, not reactive): fontFamily, fontWeight,\n // fontWeightBold, allowTransparency, convertEol, macOptionIsMeta,\n // macOptionClickForcesSelection, drawBoldTextInBrightColors, disableStdin, cursorWidth,\n // initialRows, initialCols, screenReaderMode, minimumContrastRatio, customKeyEventHandler,\n // autoFocus, renderer, linkHandling. Changing these after mount requires remounting.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n let disposed = false;\n\n async function init() {\n // Wait for fonts to be ready to prevent wrong char width measurements\n await document.fonts.ready;\n\n const [{ Terminal: XTerminal }, { FitAddon }, { SearchAddon }, { SerializeAddon }, { Unicode11Addon }] =\n await Promise.all([\n import('@xterm/xterm'),\n import('@xterm/addon-fit'),\n import('@xterm/addon-search'),\n import('@xterm/addon-serialize'),\n import('@xterm/addon-unicode11'),\n ]);\n\n if (disposed) return;\n\n const xtermTheme = buildXtermTheme(container);\n const termOptions: Record<string, unknown> = {\n fontSize,\n fontFamily: fontFamily || \"'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', monospace\",\n theme: xtermTheme,\n allowTransparency,\n cursorBlink,\n convertEol,\n scrollback,\n macOptionIsMeta,\n macOptionClickForcesSelection,\n allowProposedApi: true,\n drawBoldTextInBrightColors,\n };\n\n if (fontWeight !== undefined) termOptions.fontWeight = fontWeight;\n if (fontWeightBold !== undefined) termOptions.fontWeightBold = fontWeightBold;\n if (disableStdin !== undefined) termOptions.disableStdin = disableStdin;\n if (cursorStyle !== undefined) termOptions.cursorStyle = cursorStyle;\n if (cursorWidth !== undefined) termOptions.cursorWidth = cursorWidth;\n if (lineHeight !== undefined) termOptions.lineHeight = lineHeight;\n if (letterSpacing !== undefined) termOptions.letterSpacing = letterSpacing;\n if (initialRows !== undefined) termOptions.rows = initialRows;\n if (initialCols !== undefined) termOptions.cols = initialCols;\n if (screenReaderMode !== undefined) termOptions.screenReaderMode = screenReaderMode;\n if (minimumContrastRatio !== undefined) termOptions.minimumContrastRatio = minimumContrastRatio;\n\n const term = new XTerminal(termOptions);\n\n if (customKeyEventHandler) {\n (term as unknown as { attachCustomKeyEventHandler: (h: (e: KeyboardEvent) => boolean) => void })\n .attachCustomKeyEventHandler(customKeyEventHandler);\n }\n\n const loadedAddons: Array<{ dispose: () => void }> = [];\n\n const fitAddon = new FitAddon();\n const searchAddon = new SearchAddon();\n const serializeAddon = new SerializeAddon();\n const unicode11Addon = new Unicode11Addon();\n term.loadAddon(fitAddon);\n term.loadAddon(searchAddon);\n term.loadAddon(serializeAddon);\n term.loadAddon(unicode11Addon);\n loadedAddons.push(fitAddon, searchAddon, serializeAddon, unicode11Addon);\n\n // Activate unicode11 for proper emoji/CJK width\n (term as unknown as { unicode: { activeVersion: string } }).unicode.activeVersion = '11';\n\n // Load web links addon for clickable URLs\n if (linkHandling) {\n try {\n const { WebLinksAddon } = await import('@xterm/addon-web-links');\n if (!disposed) {\n const webLinksAddon = new WebLinksAddon();\n term.loadAddon(webLinksAddon);\n loadedAddons.push(webLinksAddon);\n }\n } catch {\n // Web links addon not available, non-critical\n }\n }\n\n if (disposed) {\n term.dispose();\n return;\n }\n\n // Open terminal in container\n term.open(container!);\n\n // Load renderer based on prop\n if (renderer === 'auto' || renderer === 'webgl') {\n try {\n const { WebglAddon } = await import('@xterm/addon-webgl');\n if (!disposed) {\n const webglAddon = new WebglAddon();\n webglAddon.onContextLoss(() => {\n webglAddon.dispose();\n });\n term.loadAddon(webglAddon);\n loadedAddons.push(webglAddon);\n }\n } catch {\n // WebGL not available, DOM renderer is used as fallback\n }\n }\n // renderer === 'dom' — no extra addon needed\n\n if (disposed) {\n for (const addon of loadedAddons) {\n try {\n addon.dispose();\n } catch {\n // ignore\n }\n }\n term.dispose();\n return;\n }\n\n // Theme may have changed while optional addons were loading.\n term.options.theme = buildXtermTheme(container);\n\n // Initial fit\n fitAddon.fit();\n\n // Store refs\n termRef.current = term;\n fitAddonRef.current = fitAddon;\n searchAddonRef.current = searchAddon;\n serializeAddonRef.current = serializeAddon;\n addonsRef.current = loadedAddons;\n\n // Wire up callbacks via stable refs\n term.onData((data: string) => {\n callbacksRef.current.onData?.(data);\n });\n\n term.onBinary((data: string) => {\n callbacksRef.current.onBinaryData?.(data);\n });\n\n term.onResize(({ cols, rows }: { cols: number; rows: number }) => {\n callbacksRef.current.onResize?.(cols, rows);\n });\n\n (term as unknown as { onBell: (cb: () => void) => void }).onBell(() => {\n callbacksRef.current.onBell?.();\n });\n\n (term as unknown as { onTitleChange: (cb: (t: string) => void) => void }).onTitleChange(\n (title: string) => {\n callbacksRef.current.onTitleChange?.(title);\n },\n );\n\n (term as unknown as { onKey: (cb: (e: { key: string; domEvent: KeyboardEvent }) => void) => void }).onKey(\n (event: { key: string; domEvent: KeyboardEvent }) => {\n callbacksRef.current.onKey?.(event);\n },\n );\n\n (term as unknown as { onSelectionChange: (cb: () => void) => void }).onSelectionChange(() => {\n callbacksRef.current.onSelectionChange?.();\n });\n\n (term as unknown as { onLineFeed: (cb: () => void) => void }).onLineFeed(() => {\n callbacksRef.current.onLineFeed?.();\n });\n\n (term as unknown as { onScroll: (cb: (p: number) => void) => void }).onScroll((pos: number) => {\n callbacksRef.current.onScroll?.(pos);\n });\n\n (term as unknown as { onWriteParsed: (cb: () => void) => void }).onWriteParsed(() => {\n callbacksRef.current.onWriteParsed?.();\n });\n\n // Debounced fit for resize handling (10ms debounce like legacy impl)\n const debouncedFit = debounce(() => {\n try {\n fitAddon.fit();\n } catch {\n // Ignore fit errors (zero-size container, etc.)\n }\n }, 10);\n debouncedFitRef.current = debouncedFit;\n\n // ResizeObserver for container resize\n const resizeObserver = new ResizeObserver(() => {\n debouncedFit.run();\n });\n resizeObserver.observe(container!);\n observerRef.current = resizeObserver;\n\n // Window resize handler as additional safety\n const handleWindowResize = () => {\n debouncedFit.run();\n };\n window.addEventListener('resize', handleWindowResize);\n\n // Store window resize cleanup in a ref (not on the DOM node)\n windowResizeCleanupRef.current = () => {\n window.removeEventListener('resize', handleWindowResize);\n };\n\n // Auto-focus if requested\n if (autoFocus) {\n term.focus();\n }\n\n // Notify consumer that the terminal is ready\n callbacksRef.current.onReady?.({ cols: term.cols, rows: term.rows });\n }\n\n init().catch((err) => {\n callbacksRef.current.onError?.(err instanceof Error ? err : new Error(String(err)));\n });\n\n return () => {\n disposed = true;\n\n // Cancel pending debounced fit\n debouncedFitRef.current?.cancel();\n debouncedFitRef.current = null;\n\n // Disconnect resize observer\n observerRef.current?.disconnect();\n observerRef.current = null;\n\n // Remove window resize listener\n windowResizeCleanupRef.current?.();\n windowResizeCleanupRef.current = null;\n\n // Dispose addons first, then terminal (proper order)\n for (const addon of addonsRef.current) {\n try {\n addon.dispose();\n } catch {\n // ignore addon disposal errors\n }\n }\n addonsRef.current = [];\n\n // Dispose terminal\n const term = termRef.current as { dispose?: () => void } | null;\n try {\n term?.dispose?.();\n } catch {\n // ignore terminal disposal errors\n }\n\n termRef.current = null;\n fitAddonRef.current = null;\n searchAddonRef.current = null;\n serializeAddonRef.current = null;\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update theme dynamically without recreating terminal\n useEffect(() => {\n const term = termRef.current as { options?: { theme: unknown } } | null;\n if (term?.options) {\n term.options.theme = buildXtermTheme(containerRef.current);\n }\n }, [theme.registration]);\n\n // Update font size dynamically\n useEffect(() => {\n const term = termRef.current as { options?: { fontSize: number } } | null;\n if (term?.options) {\n term.options.fontSize = fontSize;\n debouncedFitRef.current?.run();\n }\n }, [fontSize]);\n\n // Update dynamically updatable options\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (cursorBlink !== undefined) term.options.cursorBlink = cursorBlink;\n }, [cursorBlink]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (cursorStyle !== undefined) term.options.cursorStyle = cursorStyle;\n }, [cursorStyle]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (scrollback !== undefined) term.options.scrollback = scrollback;\n }, [scrollback]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (lineHeight !== undefined) {\n term.options.lineHeight = lineHeight;\n debouncedFitRef.current?.run();\n }\n }, [lineHeight]);\n\n useEffect(() => {\n const term = termRef.current as { options?: Record<string, unknown> } | null;\n if (!term?.options) return;\n if (letterSpacing !== undefined) {\n term.options.letterSpacing = letterSpacing;\n debouncedFitRef.current?.run();\n }\n }, [letterSpacing]);\n\n return <div ref={containerRef} className={cn(styles.Root, className)} data-testid=\"terminal\" />;\n});\n\nTerminal.displayName = 'Terminal';\n","import { Children, forwardRef, isValidElement, lazy, Suspense, useId, useMemo, type ComponentType, type HTMLAttributes, type ReactNode } from 'react';\nimport remarkGfm from 'remark-gfm';\nimport rehypeRaw from 'rehype-raw';\n\nimport type { Options as ReactMarkdownOptions } from 'react-markdown';\nimport rehypeSanitize, { defaultSchema } from 'rehype-sanitize';\nimport {\n Accordion,\n Blockquote,\n Checkbox,\n Code,\n CodeBlock,\n Link,\n Separator,\n Table,\n} from '@omniviewdev/base-ui';\nimport styles from './MarkdownPreview.module.css';\n\nconst REMARK_PLUGINS: NonNullable<ReactMarkdownOptions['remarkPlugins']> = [remarkGfm];\n\nconst ReactMarkdown = lazy(() => import('react-markdown'));\n\nexport interface MarkdownPreviewProps extends HTMLAttributes<HTMLDivElement> {\n content: string;\n allowHtml?: boolean;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\n/** Recursively extract plain text from a hast node tree. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hastText(node: any): string {\n if (!node) return '';\n if (node.type === 'text') return node.value ?? '';\n if (Array.isArray(node.children)) return node.children.map(hastText).join('');\n return '';\n}\n\n/** Accordion wrapper for <details>/<summary> that uses useId() for a stable, deterministic ID. */\nfunction DetailsAccordion({ summaryText, children }: { summaryText: string; children: ReactNode[] }) {\n const id = useId();\n const itemId = `md-details-${id}`;\n return (\n <Accordion animation=\"fast\">\n <Accordion.Item id={itemId} title={summaryText}>\n {children}\n </Accordion.Item>\n </Accordion>\n );\n}\n\n/** Stable component overrides for react-markdown */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MdProps = Record<string, any>;\n\nconst markdownComponents: Record<string, ComponentType<MdProps>> = {\n // Code blocks & inline code\n pre: ({ children }: MdProps) => <>{children}</>,\n code: ({ className, children }: MdProps) => {\n const match = /language-([^\\s]+)/.exec(className ?? '');\n const text = String(children).replace(/\\n$/, '');\n // Fenced blocks: has language class OR contains newlines (multiline = block)\n if (match || text.includes('\\n')) {\n return (\n <CodeBlock language={match?.[1]} copyable>\n {text}\n </CodeBlock>\n );\n }\n return <Code>{children}</Code>;\n },\n\n // Tables\n table: ({ children }: MdProps) => (\n <Table.Root striped hoverable size=\"sm\">\n {children}\n </Table.Root>\n ),\n thead: ({ children }: MdProps) => <Table.Head>{children}</Table.Head>,\n tbody: ({ children }: MdProps) => <Table.Body>{children}</Table.Body>,\n tr: ({ children }: MdProps) => <Table.Row>{children}</Table.Row>,\n th: ({ children, style }: MdProps) => (\n <Table.HeaderCell style={style}>{children}</Table.HeaderCell>\n ),\n td: ({ children, style }: MdProps) => (\n <Table.Cell style={style}>{children}</Table.Cell>\n ),\n\n // Links\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n a: ({ children, href, node, ...rest }: MdProps) => (\n <Link {...rest} href={href} target=\"_blank\" rel=\"noopener noreferrer\" underline=\"hover\">\n {children}\n </Link>\n ),\n\n // Blockquotes\n blockquote: ({ children }: MdProps) => <Blockquote variant=\"plain\">{children}</Blockquote>,\n\n // Horizontal rules\n hr: () => <Separator />,\n\n // Details/summary → Accordion — extract title from the hast node's summary child\n details: ({ children, node }: MdProps) => {\n // Extract summary text from the hast AST (before React renders it)\n let summaryText = 'Details';\n if (node?.children) {\n const summaryNode = node.children.find(\n (c: MdProps) => c.tagName === 'summary',\n );\n if (summaryNode) {\n const text = hastText(summaryNode).trim();\n if (text) summaryText = text;\n }\n }\n\n // Filter out the rendered summary element from React children\n const body: ReactNode[] = [];\n Children.forEach(children, (child) => {\n // Skip the hidden summary marker\n if (isValidElement(child) && (child.props as MdProps)?.['data-md-summary']) {\n return;\n }\n body.push(child);\n });\n\n return <DetailsAccordion summaryText={summaryText}>{body}</DetailsAccordion>;\n },\n // Mark summary so details can filter it out; text is extracted from hast node\n summary: ({ children }: MdProps) => (\n <span hidden data-md-summary>{children}</span>\n ),\n\n // Task list checkboxes — use compound parts for inline rendering\n input: ({ type, checked, disabled }: MdProps) => {\n if (type === 'checkbox') {\n return (\n <Checkbox.Root checked={checked} disabled={disabled} size=\"sm\" className=\"ov-md-checkbox\">\n <Checkbox.Control>\n <Checkbox.Indicator keepMounted />\n </Checkbox.Control>\n </Checkbox.Root>\n );\n }\n return null;\n },\n};\n\nexport const MarkdownPreview = forwardRef<HTMLDivElement, MarkdownPreviewProps>(\n function MarkdownPreview({ content, allowHtml = false, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(styles.Root, className)}\n data-testid=\"markdown-preview\"\n {...props}\n >\n <Suspense\n fallback={\n <div className={styles.Loading} data-testid=\"markdown-loading\">\n Loading…\n </div>\n }\n >\n <MarkdownContent content={content} allowHtml={allowHtml} />\n </Suspense>\n </div>\n );\n },\n);\n\nMarkdownPreview.displayName = 'MarkdownPreview';\n\n/** Sanitize schema that extends the default to allow class on any element (needed for alerts). */\nconst sanitizeSchema = {\n ...defaultSchema,\n attributes: {\n ...defaultSchema.attributes,\n '*': [...(defaultSchema.attributes?.['*'] ?? []), 'className'],\n },\n};\n\n/** Inner component that uses lazy-loaded deps */\nfunction MarkdownContent({ content, allowHtml }: { content: string; allowHtml: boolean }) {\n const rehypePlugins = useMemo(\n () => (allowHtml ? [rehypeRaw, [rehypeSanitize, sanitizeSchema]] : []),\n [allowHtml],\n );\n\n return (\n <ReactMarkdown\n skipHtml={!allowHtml}\n remarkPlugins={REMARK_PLUGINS}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rehypePlugins={rehypePlugins as any}\n components={markdownComponents}\n >\n {content}\n </ReactMarkdown>\n );\n}\n","import {\n forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useSyncExternalStore,\n type ReactNode, type RefObject,\n} from 'react';\nimport {\n CommandList, useCommandListConfig, useCommandListStoreContext,\n} from '@omniviewdev/base-ui';\nimport styles from './CommandPalette.module.css';\n\nexport interface CommandItem {\n id: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n shortcut?: string;\n group?: string;\n disabled?: boolean;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n commands: CommandItem[];\n onSelect: (command: CommandItem) => void;\n placeholder?: string;\n /** Caller-owned pending state; previous commands cannot execute while loading. */\n loading?: boolean;\n /** Caller-owned failure message. Takes precedence over loading and empty states. */\n error?: string;\n}\n\nfunction getCommandKey(cmd: CommandItem): string {\n return cmd.id;\n}\n\nfunction fuzzyMatch(text: string, query: string): boolean {\n const lower = text.toLowerCase();\n const q = query.toLowerCase();\n let qi = 0;\n for (let i = 0; i < lower.length && qi < q.length; i++) {\n if (lower[i] === q[qi]) qi++;\n }\n return qi === q.length;\n}\n\nfunction matchesCommand(cmd: CommandItem, query: string): boolean {\n return fuzzyMatch(cmd.label, query) ||\n (cmd.description ? fuzzyMatch(cmd.description, query) : false) ||\n (cmd.group ? fuzzyMatch(cmd.group, query) : false);\n}\n\nconst NO_COMMANDS: CommandItem[] = [];\n\n/** CommandList puts combobox state on its root; the palette keeps it on the focused input. */\nfunction PaletteInput({ inputRef }: { inputRef: RefObject<HTMLInputElement | null> }) {\n const { listId } = useCommandListConfig();\n const store = useCommandListStoreContext();\n const { activeKey } = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const activeId = activeKey != null ? `${listId}-item-${activeKey}` : undefined;\n\n useLayoutEffect(() => {\n if (activeId) {\n inputRef.current?.ownerDocument.getElementById(activeId)?.scrollIntoView?.({ block: 'nearest' });\n }\n }, [activeId, inputRef]);\n\n return (\n <CommandList.Input\n ref={inputRef}\n autoFocus={false}\n role=\"combobox\"\n aria-label=\"Search commands\"\n aria-expanded=\"true\"\n aria-haspopup=\"listbox\"\n aria-activedescendant={activeId}\n autoComplete=\"off\"\n spellCheck={false}\n data-testid=\"command-palette-input\"\n />\n );\n}\n\nexport const CommandPalette = forwardRef<HTMLDivElement, CommandPaletteProps>(\n function CommandPalette(\n { open, onClose, commands, onSelect, placeholder = 'Type a command…', loading = false, error },\n ref,\n ) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const composingRef = useRef(false);\n const failed = error !== undefined;\n const enabledCommands = useMemo(\n () => commands.filter((c) => !c.disabled),\n [commands],\n );\n const visibleCommands = failed || loading ? NO_COMMANDS : enabledCommands;\n\n // Group only contiguous runs. Merging equal group labels would reorder caller results.\n const groups = useMemo(() => {\n const keys = new Map<string, string>();\n const labels = new Map<string, string>();\n let previous: string | undefined;\n let run = -1;\n for (const command of visibleCommands) {\n const label = command.group || 'Other commands';\n if (label !== previous) run++;\n previous = label;\n const key = String(run);\n keys.set(command.id, key);\n labels.set(key, label);\n }\n return { keys, labels, grouped: visibleCommands.some((command) => command.group) };\n }, [visibleCommands]);\n const groupBy = useCallback((cmd: CommandItem) => groups.keys.get(cmd.id)!, [groups]);\n const groupLabel = useCallback((key: string) => groups.labels.get(key)!, [groups]);\n\n useLayoutEffect(() => {\n if (!open) return;\n const dialog = dialogRef.current;\n const doc = dialog?.ownerDocument;\n const opener = doc?.activeElement;\n composingRef.current = false;\n inputRef.current?.focus({ preventScroll: true });\n return () => {\n // Respect commands that intentionally focus a navigation destination.\n if (opener instanceof HTMLElement && opener.isConnected &&\n (doc?.activeElement === doc?.body || dialog?.contains(doc?.activeElement ?? null))) {\n opener.focus({ preventScroll: true });\n }\n };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n role=\"presentation\"\n className={styles.Overlay}\n onClick={onClose}\n data-testid=\"command-palette-overlay\"\n >\n <div\n ref={(node) => {\n dialogRef.current = node;\n if (typeof ref === 'function') return ref(node);\n if (ref) ref.current = node;\n }}\n className={styles.Root}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(event) => {\n // Nonfocusable headings/results must not strand keyboard focus on the page body.\n if (event.button === 0 && event.target instanceof Element &&\n !event.target.closest('input, button')) {\n event.preventDefault();\n inputRef.current?.focus({ preventScroll: true });\n }\n }}\n onKeyDown={(e) => e.stopPropagation()}\n onCompositionStartCapture={() => { composingRef.current = true; }}\n onCompositionEndCapture={() => { composingRef.current = false; }}\n onKeyDownCapture={(event) => {\n // Stop command handlers without preventing the IME's native default action.\n if (composingRef.current || event.nativeEvent.isComposing || event.keyCode === 229) {\n event.stopPropagation();\n return;\n }\n // A focused Clear search button owns Enter/Space, not the command list.\n if (event.target instanceof HTMLButtonElement &&\n event.key !== 'Escape' && event.key !== 'Tab') {\n event.stopPropagation();\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n onClose();\n } else if (event.key === 'Tab') {\n const controls = dialogRef.current?.querySelectorAll<HTMLElement>(\n 'input:not(:disabled), button:not(:disabled)',\n );\n if (!controls?.length) return;\n const first = controls[0]!;\n const last = controls[controls.length - 1]!;\n const active = first.ownerDocument.activeElement;\n if ((event.shiftKey && active === first) || (!event.shiftKey && active === last)) {\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n }\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n data-testid=\"command-palette\"\n >\n <CommandList.Root\n className={styles.CommandList}\n role=\"presentation\"\n aria-expanded={undefined}\n aria-haspopup={undefined}\n aria-owns={undefined}\n aria-activedescendant={undefined}\n items={visibleCommands}\n itemKey={getCommandKey}\n renderItem={(cmd, meta) => (\n <CommandList.Item\n itemKey={meta.key}\n data-testid={`command-item-${cmd.id}`}\n >\n {cmd.icon && (\n <CommandList.ItemIcon aria-hidden=\"true\">{cmd.icon}</CommandList.ItemIcon>\n )}\n <CommandList.ItemLabel>{cmd.label}</CommandList.ItemLabel>\n {cmd.description && (\n <CommandList.ItemDescription>\n {cmd.description}\n </CommandList.ItemDescription>\n )}\n {cmd.shortcut && (\n <CommandList.ItemShortcut>\n {cmd.shortcut}\n </CommandList.ItemShortcut>\n )}\n </CommandList.Item>\n )}\n filterFn={matchesCommand}\n sortByScore={false}\n groupBy={groups.grouped ? groupBy : undefined}\n groupLabel={groupLabel}\n loading={loading && !failed}\n onAction={(key) => {\n const current = visibleCommands.find((command) => command.id === key && !command.disabled);\n if (!current) return;\n onSelect(current);\n onClose();\n }}\n onDismiss={onClose}\n placeholder={placeholder}\n density=\"compact\"\n >\n <PaletteInput inputRef={inputRef} />\n <CommandList.Results\n className={styles.Results}\n aria-label=\"Commands\"\n aria-busy={loading && !failed}\n data-testid=\"command-palette-list\"\n />\n {failed ? (\n <div role=\"alert\" className={styles.Message} data-testid=\"command-palette-error\">\n {error || 'Unable to load commands.'}\n </div>\n ) : (\n <>\n <CommandList.Loading role=\"status\" data-testid=\"command-palette-loading\">\n Loading commands…\n </CommandList.Loading>\n <CommandList.Empty role=\"status\" data-testid=\"command-palette-empty\">\n No matching commands\n </CommandList.Empty>\n </>\n )}\n </CommandList.Root>\n </div>\n </div>\n );\n },\n);\n\nCommandPalette.displayName = 'CommandPalette';\n","import { forwardRef, useCallback, useEffect, useMemo, useRef, useState, type CSSProperties, type HTMLAttributes } from 'react';\nimport styles from './ObjectInspector.module.css';\n\nexport type InspectorFormat = 'json' | 'yaml';\n\nexport interface ObjectInspectorProps extends HTMLAttributes<HTMLDivElement> {\n data: unknown;\n format?: InspectorFormat;\n defaultExpanded?: boolean | number;\n searchable?: boolean;\n copyable?: boolean;\n}\n\nfunction cn(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n\nfunction getType(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n return typeof value;\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return JSON.stringify(value);\n if (typeof value === 'boolean') return String(value);\n if (typeof value === 'number') return String(value);\n return String(value);\n}\n\nfunction shouldExpand(defaultExpanded: boolean | number, depth: number): boolean {\n if (typeof defaultExpanded === 'boolean') return defaultExpanded;\n return depth < defaultExpanded;\n}\n\nfunction matchesSearch(key: string, value: unknown, query: string): boolean {\n const q = query.toLowerCase();\n if (key.toLowerCase().includes(q)) return true;\n if (typeof value === 'string' && value.toLowerCase().includes(q)) return true;\n if (typeof value === 'number' && String(value).includes(q)) return true;\n if (typeof value === 'boolean' && String(value).includes(q)) return true;\n return false;\n}\n\n/** Check if a value is a non-null object that can be tracked by WeakSet. */\nfunction isObjectRef(value: unknown): value is object {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n}\n\n/** Subset of WeakSet used for ancestor tracking (read-only checks). */\ninterface AncestorSet {\n has(value: object): boolean;\n}\n\n/**\n * Check if any descendant of `value` matches `query`. Results are cached\n * per object+query in `cache` to avoid O(n²) re-scanning from each TreeNode.\n */\nfunction subtreeMatches(\n value: unknown,\n query: string,\n ancestors: AncestorSet,\n cache: WeakMap<object, boolean>,\n): boolean {\n if (!query) return false;\n const type = getType(value);\n if (type !== 'object' && type !== 'array') return false;\n if (value === null || value === undefined) return false;\n if (isObjectRef(value) && ancestors.has(value)) return false;\n\n // Return cached result if available\n if (isObjectRef(value) && cache.has(value)) return cache.get(value)!;\n\n const childAncestors: AncestorSet = {\n has: (v: object) => v === value || ancestors.has(v),\n };\n let result = false;\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n if (matchesSearch(k, v, query) || subtreeMatches(v, query, childAncestors, cache)) {\n result = true;\n break;\n }\n }\n\n if (isObjectRef(value)) cache.set(value, result);\n return result;\n}\n\ninterface TreeNodeProps {\n nodeKey: string;\n value: unknown;\n depth: number;\n defaultExpanded: boolean | number;\n searchQuery: string;\n isLast: boolean;\n /** Ancestor object references for circular reference detection. */\n ancestors: AncestorSet;\n /** Per-query cache for subtreeMatches results (shared across all nodes). */\n searchCache: WeakMap<object, boolean>;\n}\n\nfunction TreeNode({\n nodeKey,\n value,\n depth,\n defaultExpanded,\n searchQuery,\n isLast,\n ancestors,\n searchCache,\n}: TreeNodeProps) {\n const type = getType(value);\n const isExpandable = type === 'object' || type === 'array';\n\n // Detect circular references by checking if this value is already an ancestor\n const isCircular = isExpandable && isObjectRef(value) && ancestors.has(value);\n\n const [expanded, setExpanded] = useState(\n () => isExpandable && !isCircular && shouldExpand(defaultExpanded, depth),\n );\n\n // Track whether the node was force-expanded by search so we can restore\n // the exact pre-search state when the search is cleared.\n const searchExpandedRef = useRef(false);\n const preSearchExpandedRef = useRef(false);\n\n // Auto-expand when search matches a descendant\n const hasDescendantMatch = useMemo(\n () => searchQuery ? subtreeMatches(value, searchQuery, ancestors, searchCache) : false,\n [searchQuery, value, ancestors, searchCache],\n );\n\n // Force expand when search finds matches in descendants\n useEffect(() => {\n if (searchQuery && hasDescendantMatch && isExpandable && !isCircular && !expanded) {\n // Only snapshot pre-search state the first time we force-open\n if (!searchExpandedRef.current) {\n preSearchExpandedRef.current = expanded;\n }\n searchExpandedRef.current = true;\n setExpanded(true);\n }\n // Restore pre-search state when search clears OR node stops matching\n if (searchExpandedRef.current && (!searchQuery || !hasDescendantMatch)) {\n searchExpandedRef.current = false;\n setExpanded(preSearchExpandedRef.current);\n }\n }, [searchQuery, hasDescendantMatch, isExpandable, isCircular, expanded]);\n\n // Create a new ancestors set that includes this value for children.\n // WeakSet doesn't support iteration, so we use a duck-typed wrapper\n // that checks both the parent set and the current value.\n const childAncestors = useMemo(() => {\n if (!isExpandable || !isObjectRef(value) || isCircular) return ancestors;\n return {\n has: (v: object) => v === value || ancestors.has(v),\n };\n }, [isExpandable, value, isCircular, ancestors]);\n\n const entries = useMemo(() => {\n if (!isExpandable || value === null || value === undefined || isCircular) return [];\n return Object.entries(value as Record<string, unknown>);\n }, [isExpandable, value, isCircular]);\n\n const toggle = useCallback(() => {\n if (isExpandable && !isCircular) setExpanded((prev) => !prev);\n }, [isExpandable, isCircular]);\n\n const isHighlighted = searchQuery && matchesSearch(nodeKey, value, searchQuery);\n\n const preview = isCircular\n ? '[Circular]'\n : isExpandable\n ? type === 'array'\n ? `Array(${(value as unknown[]).length})`\n : `{${entries.length}}`\n : null;\n\n return (\n <div className={styles.Node} data-depth={depth}>\n <div\n className={cn(styles.Row, isHighlighted && styles.RowHighlight)}\n style={{ '--_inspector-depth-indent': `${depth * 16}px` } as CSSProperties}\n onClick={toggle}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n toggle();\n }\n }}\n tabIndex={0}\n role=\"treeitem\"\n aria-expanded={isExpandable && !isCircular ? expanded : undefined}\n data-testid={`inspector-node-${nodeKey}`}\n >\n {isExpandable && !isCircular ? (\n <span className={cn(styles.Chevron, expanded && styles.ChevronExpanded)}>&#9656;</span>\n ) : (\n <span className={styles.ChevronSpacer} />\n )}\n <span className={styles.Key}>{nodeKey}</span>\n <span className={styles.Colon}>: </span>\n {isExpandable ? (\n <span className={styles.Preview}>{preview}</span>\n ) : (\n <span className={styles.Value} data-type={type}>\n {formatValue(value)}\n </span>\n )}\n {!isLast && !expanded && <span className={styles.Comma}>,</span>}\n </div>\n {expanded &&\n entries.map(([k, v], i) => (\n <TreeNode\n key={k}\n nodeKey={k}\n value={v}\n depth={depth + 1}\n defaultExpanded={defaultExpanded}\n searchQuery={searchQuery}\n isLast={i === entries.length - 1}\n ancestors={childAncestors}\n searchCache={searchCache}\n />\n ))}\n </div>\n );\n}\n\n/** Shared empty WeakSet used as the initial ancestors set. */\nconst EMPTY_ANCESTORS: AncestorSet = new WeakSet<object>();\n\nexport const ObjectInspector = forwardRef<HTMLDivElement, ObjectInspectorProps>(\n function ObjectInspector(\n {\n data,\n format = 'json',\n defaultExpanded = 1,\n searchable = false,\n copyable = false,\n className,\n ...props\n },\n ref,\n ) {\n const [searchQuery, setSearchQuery] = useState('');\n\n const handleCopy = useCallback(async () => {\n try {\n let text: string;\n if (format === 'yaml') {\n text = toYaml(data);\n } else {\n text = safeJsonStringify(data);\n }\n await navigator.clipboard.writeText(text);\n } catch {\n // Clipboard API may not be available (e.g., insecure context)\n }\n }, [data, format]);\n\n // Root starts with an empty ancestors set — the root node itself\n // is not its own ancestor, but its children will see it as one\n const rootAncestors = EMPTY_ANCESTORS;\n\n // Per-query cache for subtreeMatches — invalidated when query changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const searchCache = useMemo(() => new WeakMap<object, boolean>(), [searchQuery]);\n\n return (\n <div\n ref={ref}\n className={cn(styles.Root, className)}\n data-testid=\"object-inspector\"\n data-format={format}\n {...props}\n >\n {(searchable || copyable) && (\n <div className={styles.Toolbar}>\n {searchable && (\n <input\n className={styles.SearchInput}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search keys/values…\"\n aria-label=\"Search object\"\n data-testid=\"inspector-search\"\n />\n )}\n {copyable && (\n <button\n className={styles.CopyButton}\n onClick={handleCopy}\n data-testid=\"inspector-copy\"\n type=\"button\"\n >\n Copy\n </button>\n )}\n </div>\n )}\n <div className={styles.Tree} role=\"tree\" data-testid=\"inspector-tree\">\n <TreeNode\n nodeKey=\"root\"\n value={data}\n depth={0}\n defaultExpanded={defaultExpanded}\n searchQuery={searchQuery}\n isLast\n ancestors={rootAncestors}\n searchCache={searchCache}\n />\n </div>\n </div>\n );\n },\n);\n\nObjectInspector.displayName = 'ObjectInspector';\n\n/** JSON.stringify with circular reference safety (ancestor-stack approach). */\nfunction safeJsonStringify(value: unknown): string {\n // Use an ancestor stack so shared (but non-cyclic) references serialize fully.\n // JSON.stringify calls the replacer with `this` bound to the object that\n // contains the current key. We track ancestors by pushing on enter and\n // popping when we leave.\n const stack: object[] = [];\n return JSON.stringify(\n value,\n function (this: unknown, _key: string, val: unknown) {\n if (typeof val !== 'object' || val === null) return val;\n\n // Trim the stack: `this` is the parent container. Pop until the\n // top of the stack IS the parent (or the stack is empty).\n while (stack.length > 0 && stack[stack.length - 1] !== this) {\n stack.pop();\n }\n\n if (stack.includes(val as object)) return '[Circular]';\n stack.push(val as object);\n return val;\n },\n 2,\n );\n}\n\n/** Check if a YAML scalar needs quoting. */\nfunction needsYamlQuoting(s: string): boolean {\n if (s === '') return true;\n if (/^[\\s]/.test(s) || /[\\s]$/.test(s)) return true;\n // Starts with indicator characters or reserved values\n if (/^[-?:,[\\]{}#&*!|>'\"%@`]/.test(s)) return true;\n // Contains colon+space, hash+space, or other flow indicators\n if (/[:\\s]#|:\\s|[{}[\\],]/.test(s)) return true;\n // YAML boolean/null literals (case-insensitive)\n if (/^(true|false|yes|no|on|off|null|~)$/i.test(s)) return true;\n // Looks like a number\n if (/^[+-]?(\\d+\\.?\\d*|\\.inf|\\.nan)$/i.test(s)) return true;\n return false;\n}\n\n/** Quote a YAML scalar with double quotes, escaping special chars. */\nfunction quoteYaml(s: string): string {\n return '\"' + s.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t').replace(/\\r/g, '\\\\r') + '\"';\n}\n\n/** Safely serialize a string as a YAML scalar. */\nfunction yamlScalar(s: string, indent: number): string {\n const prefix = ' '.repeat(indent);\n // Multi-line strings use block scalar\n if (s.includes('\\n')) {\n return `|\\n${prefix} ${s.split('\\n').join(`\\n${prefix} `)}`;\n }\n return needsYamlQuoting(s) ? quoteYaml(s) : s;\n}\n\n/** Simple YAML serializer (no dependency, ancestor-stack approach) */\nfunction toYaml(value: unknown, indent: number = 0, ancestors?: object[]): string {\n const prefix = ' '.repeat(indent);\n if (value === null) return 'null';\n if (value === undefined) return 'null';\n if (typeof value === 'string') return yamlScalar(value, indent);\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n\n if (typeof value === 'object') {\n const stack = ancestors ?? [];\n if (stack.includes(value)) return '\"[Circular]\"';\n const childStack = [...stack, value];\n\n if (Array.isArray(value)) {\n if (value.length === 0) return '[]';\n return value\n .map((item) => `${prefix}- ${toYaml(item, indent + 1, childStack).trimStart()}`)\n .join('\\n');\n }\n\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) return '{}';\n return entries\n .map(([k, v]) => {\n const safeKey = needsYamlQuoting(k) ? quoteYaml(k) : k;\n const serialized = toYaml(v, indent + 1, childStack);\n if (\n typeof v === 'object' &&\n v !== null &&\n (Array.isArray(v) ? v.length > 0 : Object.keys(v).length > 0)\n ) {\n return `${prefix}${safeKey}:\\n${serialized}`;\n }\n return `${prefix}${safeKey}: ${serialized}`;\n })\n .join('\\n');\n }\n\n return String(value);\n}\n","import type * as Monaco from 'monaco-editor';\n\nexport const CEL_LANGUAGE_ID = 'cel';\nconst initialized = new WeakSet<object>();\n\n/** Lexical presentation only. The host remains authoritative for CEL semantics. */\nexport function registerCelLanguage(monaco: typeof Monaco) {\n if (initialized.has(monaco)) return;\n initialized.add(monaco);\n monaco.languages.register({ id: CEL_LANGUAGE_ID, extensions: ['.cel'], aliases: ['CEL'] });\n monaco.languages.setLanguageConfiguration(CEL_LANGUAGE_ID, {\n comments: { lineComment: '//' },\n brackets: [['{', '}'], ['[', ']'], ['(', ')']],\n autoClosingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"', notIn: ['string', 'comment'] },\n { open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n ],\n surroundingPairs: [\n { open: '{', close: '}' }, { open: '[', close: ']' }, { open: '(', close: ')' },\n { open: '\"', close: '\"' }, { open: \"'\", close: \"'\" },\n ],\n wordPattern: /[a-zA-Z_][a-zA-Z_0-9]*/g,\n });\n monaco.languages.setMonarchTokensProvider(CEL_LANGUAGE_ID, {\n keywords: ['true', 'false', 'null', 'in'],\n tokenizer: {\n root: [\n [/\\/\\/.*$/, 'comment'],\n [/[rR]?[bB]?'''/, 'string', '@tripleSingle'],\n [/[rR]?[bB]?\"\"\"/, 'string', '@tripleDouble'],\n [/[rR]?[bB]?'/, 'string', '@single'],\n [/[rR]?[bB]?\"/, 'string', '@double'],\n [/0[xX][0-9a-fA-F]+[uU]?/, 'number.hex'],\n [/(?:\\d+\\.\\d*|\\.\\d+|\\d+)(?:[eE][+-]?\\d+)?[uU]?/, 'number'],\n [/[a-zA-Z_][a-zA-Z_0-9]*(?=\\s*\\()/, 'type.identifier'],\n [/[a-zA-Z_][a-zA-Z_0-9]*/, { cases: { '@keywords': 'keyword', '@default': 'identifier' } }],\n [/[{}()[\\]]/, '@brackets'],\n [/[!<>=&|+*/%?:-]+/, 'operator'],\n [/[.,]/, 'delimiter'],\n [/\\s+/, 'white'],\n ],\n single: [[/\\\\./, 'string.escape'], [/'/, 'string', '@pop'], [/[^'\\\\]+/, 'string']],\n double: [[/\\\\./, 'string.escape'], [/\"/, 'string', '@pop'], [/[^\"\\\\]+/, 'string']],\n tripleSingle: [[/'''/, 'string', '@pop'], [/\\\\./, 'string.escape'], [/[^'\\\\]+|'/, 'string']],\n tripleDouble: [[/\"\"\"/, 'string', '@pop'], [/\\\\./, 'string.escape'], [/[^\"\\\\]+|\"/, 'string']],\n },\n });\n}\n","import { utf16ToUtf8, utf8ToUtf16 } from '@omniviewdev/base-ui';\n\nexport interface SourcePosition { lineNumber: number; column: number }\n\n/** Source positions retain the host's line endings and UTF-8 byte contract. */\nexport function sourcePosition(text: string, byteOffset: number): SourcePosition {\n const offset = utf8ToUtf16(text, byteOffset);\n let lineNumber = 1;\n let lineStart = 0;\n for (let i = 0; i < offset; i++) {\n if (text[i] === '\\r' || text[i] === '\\n') {\n if (text[i] === '\\r' && text[i + 1] === '\\n') i++;\n if (i >= offset) throw new RangeError('Offset splits a line ending');\n lineNumber++;\n lineStart = i + 1;\n }\n }\n return { lineNumber, column: offset - lineStart + 1 };\n}\n\nexport function sourceOffset(text: string, position: SourcePosition): number {\n if (!Number.isSafeInteger(position.lineNumber) || position.lineNumber < 1 ||\n !Number.isSafeInteger(position.column) || position.column < 1)\n throw new RangeError('Expected a one-based source position');\n let line = 1;\n let start = 0;\n while (line < position.lineNumber) {\n let end = start;\n while (end < text.length && text[end] !== '\\r' && text[end] !== '\\n') end++;\n if (end === text.length) throw new RangeError('Position exceeds source lines');\n start = end + (text[end] === '\\r' && text[end + 1] === '\\n' ? 2 : 1);\n line++;\n }\n const offset = start + position.column - 1;\n let end = start;\n while (end < text.length && text[end] !== '\\r' && text[end] !== '\\n') end++;\n if (offset > end) throw new RangeError('Position exceeds source line');\n return utf16ToUtf8(text, offset);\n}\n\n/** Subsequence matching is bounded to the host's semantic candidates, never inventory. */\nexport function completionMatches(prefix: string, candidate: string): boolean {\n let index = 0;\n const needle = prefix.toLocaleLowerCase();\n for (const character of candidate.toLocaleLowerCase()) {\n if (character === needle[index]) index++;\n if (index === needle.length) return true;\n }\n return needle.length === 0;\n}\n\nexport function latestRequestGate() {\n let active: AbortController | undefined;\n return {\n begin() {\n active?.abort();\n active = new AbortController();\n return active;\n },\n current(operation: AbortController) {\n return active === operation && !operation.signal.aborted;\n },\n cancel() {\n active?.abort();\n active = undefined;\n },\n };\n}\n\nexport function automaticCompletion(callback: () => void, delay = 250) {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const cancel = () => { clearTimeout(timer); timer = undefined; };\n return {\n schedule(delayMs = delay) { cancel(); timer = setTimeout(() => { timer = undefined; callback(); }, delayMs); },\n immediate() { cancel(); callback(); },\n cancel,\n };\n}\n","import type * as Monaco from 'monaco-editor';\nimport type {\n QueryAvailability, QueryCompletion, QueryDocument, QueryLanguageRequest,\n QueryLanguageResponse, QueryLanguageService, QueryHoverService, QuerySignatureService,\n QueryRange, QueryServiceStatus,\n} from '@omniviewdev/base-ui';\nimport { CEL_LANGUAGE_ID, registerCelLanguage } from './language';\nimport { automaticCompletion, completionMatches, latestRequestGate, sourceOffset, sourcePosition } from './presentation';\n\nexport interface CelBridgeState {\n document: QueryDocument;\n contextKey: string;\n request?: QueryLanguageService;\n check?: QueryLanguageService;\n hover?: QueryHoverService;\n signature?: QuerySignatureService;\n onDocumentClose?: (uri: string) => void;\n availability?: QueryAvailability;\n disabled?: boolean;\n onSubmit?: () => void;\n maxSuggestions?: number;\n debounceMs?: number;\n}\nexport interface CelEditorBridge {\n refresh: () => void;\n dispose: () => void;\n}\ninterface ResponseEnvelope {\n documentVersion: number;\n contextKey: string;\n status: QueryServiceStatus;\n message?: string;\n}\n\n/** Monaco 0.52 has no hide-hover command; its editor-scoped controller owns dismissal. */\ninterface Monaco052ContentHoverController extends Monaco.editor.IEditorContribution {\n _hideWidgets: () => void;\n}\n\nexport function attachCelBridge(\n editor: Monaco.editor.IStandaloneCodeEditor,\n monaco: typeof Monaco,\n getState: () => CelBridgeState,\n onStatus: (message: string | undefined) => void,\n debounceMs = 250,\n): CelEditorBridge {\n const model = editor.getModel();\n if (!model) throw new Error('CEL editor requires its own model');\n registerCelLanguage(monaco);\n monaco.editor.setModelLanguage(model, CEL_LANGUAGE_ID);\n const completionGate = latestRequestGate();\n const checkGate = latestRequestGate();\n const hoverGate = latestRequestGate();\n const signatureGate = latestRequestGate();\n let disposed = false;\n let composing = false;\n let generation = 0;\n let completionPermit: number | undefined;\n let completionDismissed = false;\n let localEdit = false;\n let previous: CelBridgeState | undefined;\n const markerOwner = `cel:${model.uri.toString()}`;\n const selector = { language: CEL_LANGUAGE_ID, scheme: model.uri.scheme, pattern: model.uri.path };\n const blocked = () => {\n const state = getState();\n return disposed || model.isDisposed() || composing || state.disabled ||\n Boolean(state.availability && state.availability.status !== 'ready');\n };\n\n function dismissSemanticWidgets() {\n editor.trigger('cel', 'closeParameterHints', {});\n editor.getContribution<Monaco052ContentHoverController>('editor.contrib.contentHover')?._hideWidgets();\n }\n\n function range(source: string, value: QueryRange): Monaco.IRange {\n if (value.unit !== 'utf8-byte' || value.end < value.start)\n throw new RangeError('Expected a half-open UTF-8 range');\n const start = sourcePosition(source, value.start);\n const end = sourcePosition(source, value.end);\n return { startLineNumber: start.lineNumber, startColumn: start.column,\n endLineNumber: end.lineNumber, endColumn: end.column };\n }\n\n async function execute<T extends ResponseEnvelope>(\n service: ((request: QueryLanguageRequest) => Promise<T>) | undefined,\n position: Monaco.IPosition,\n gate: typeof completionGate,\n token?: Monaco.CancellationToken,\n ): Promise<T | undefined> {\n if (!service || blocked() || token?.isCancellationRequested) return;\n const state = getState();\n const document = { ...state.document, uri: model!.uri.toString() };\n const modelVersion = model!.getVersionId();\n const requestGeneration = generation;\n const operation = gate.begin();\n const subscription = token?.onCancellationRequested(() => operation.abort());\n try {\n const response = await service({ document, contextKey: state.contextKey,\n cursor: { offset: sourceOffset(document.text, position), unit: 'utf8-byte' },\n signal: operation.signal });\n const current = getState();\n if (blocked() || !gate.current(operation) || requestGeneration !== generation ||\n model!.isDisposed() || model!.getVersionId() !== modelVersion ||\n current.contextKey !== state.contextKey || current.document.version !== document.version ||\n current.document.text !== document.text || response.documentVersion !== document.version ||\n response.contextKey !== state.contextKey) return;\n if (response.status !== 'ready' && response.status !== 'empty')\n onStatus(response.message ?? `CEL language service ${response.status}.`);\n return response;\n } catch (error) {\n if (!operation.signal.aborted && gate.current(operation) && !disposed)\n onStatus(error instanceof Error ? error.message : 'CEL language service request failed.');\n return;\n } finally {\n subscription?.dispose();\n }\n }\n\n function markers(result: QueryLanguageResponse) {\n if (result.status === 'denied' || result.status === 'unavailable') {\n monaco.editor.setModelMarkers(model!, markerOwner, []);\n return;\n }\n const severities = { error: monaco.MarkerSeverity.Error, warning: monaco.MarkerSeverity.Warning,\n info: monaco.MarkerSeverity.Info, hint: monaco.MarkerSeverity.Hint };\n const values: Monaco.editor.IMarkerData[] = [];\n for (const diagnostic of result.diagnostics) {\n try {\n values.push({ ...range(getState().document.text, diagnostic.range),\n severity: severities[diagnostic.severity], message: diagnostic.message,\n source: 'CEL', code: diagnostic.id });\n } catch {\n onStatus('The language service returned an invalid UTF-8 diagnostic range.');\n }\n }\n monaco.editor.setModelMarkers(model!, markerOwner, values);\n }\n\n function completion(item: QueryCompletion, index: number, position: Monaco.IPosition): Monaco.languages.CompletionItem | undefined {\n if (item.disabledReason) return;\n const source = getState().document.text;\n const editRange = range(source, item.edit.range);\n // Monaco completion edits must be single-line and contain the request cursor.\n if (editRange.startLineNumber !== position.lineNumber || editRange.endLineNumber !== position.lineNumber ||\n editRange.startColumn > position.column || editRange.endColumn < position.column)\n throw new RangeError('Completion range must contain the cursor on one line');\n const prefix = model!.getValueInRange({ ...editRange, endColumn: position.column });\n if (!completionMatches(prefix, item.filterText ?? item.label)) return;\n const kinds = { field: monaco.languages.CompletionItemKind.Field,\n operator: monaco.languages.CompletionItemKind.Operator, value: monaco.languages.CompletionItemKind.Value,\n parameter: monaco.languages.CompletionItemKind.Variable, function: monaco.languages.CompletionItemKind.Function };\n return {\n label: { label: item.label, detail: item.type ? `: ${item.type}` : undefined },\n kind: kinds[item.kind], detail: item.detail ?? item.type,\n documentation: item.description || item.condition\n ? { value: [item.description, item.condition].filter(Boolean).join('\\n\\n'), isTrusted: false }\n : undefined,\n filterText: item.filterText ?? item.label,\n sortText: item.sortText ?? String(index).padStart(6, '0'),\n insertText: item.edit.text,\n insertTextRules: item.insertTextFormat === 'snippet'\n ? monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet : undefined,\n range: editRange,\n };\n }\n\n const scheduler = automaticCompletion(() => {\n if (blocked()) return;\n const state = getState();\n const position = editor.getPosition();\n if (!position) return;\n if (state.check) void execute(state.check, position, checkGate).then(result => {\n if (result) { onStatus(result.message); markers(result); }\n });\n if (state.request && !completionDismissed && editor.hasTextFocus()) {\n completionPermit = model.getVersionId();\n editor.trigger('cel', 'editor.action.triggerSuggest', {});\n }\n }, debounceMs);\n\n const subscriptions: Monaco.IDisposable[] = [\n monaco.languages.registerCompletionItemProvider(selector, {\n async provideCompletionItems(candidate, position, context, token) {\n if (candidate !== model || blocked()) return { suggestions: [] };\n // Monaco also reissues Invoke requests while an existing list is refiltered.\n // Only our scheduler or explicit keybinding may authorize transport work.\n if (context.triggerKind !== 0 || completionPermit !== model.getVersionId())\n return { suggestions: [] };\n completionPermit = undefined;\n const state = getState();\n const result = await execute(state.request, position, completionGate, token);\n if (!result) return { suggestions: [] };\n if (!state.check) markers(result);\n if (result.status !== 'ready') return { suggestions: [] };\n onStatus(result.message);\n const suggestions: Monaco.languages.CompletionItem[] = [];\n for (const [index, item] of result.completions.slice(0, state.maxSuggestions ?? 100).entries()) {\n try {\n const suggestion = completion(item, index, position);\n if (suggestion) suggestions.push(suggestion);\n } catch {\n onStatus('The language service returned an invalid UTF-8 completion range.');\n }\n }\n return { suggestions, incomplete: result.incomplete ?? false };\n },\n }),\n monaco.languages.registerHoverProvider(selector, {\n async provideHover(candidate, position, token) {\n if (candidate !== model) return;\n const result = await execute(getState().hover, position, hoverGate, token);\n if (result?.status !== 'ready' || !result.hover) return;\n try {\n return { range: range(getState().document.text, result.hover.range),\n contents: [{ value: result.hover.contents, isTrusted: false }] };\n } catch { onStatus('The language service returned an invalid UTF-8 hover range.'); return; }\n },\n }),\n monaco.languages.registerSignatureHelpProvider(selector, {\n signatureHelpTriggerCharacters: ['(', ','],\n signatureHelpRetriggerCharacters: [','],\n async provideSignatureHelp(candidate, position, token) {\n if (candidate !== model) return;\n const result = await execute(getState().signature, position, signatureGate, token);\n if (result?.status !== 'ready' || !result.signature) return;\n const signature = result.signature;\n return {\n value: { activeSignature: 0,\n activeParameter: Math.max(0, Math.min(signature.activeParameter, signature.parameters.length - 1)),\n signatures: [{ label: signature.label,\n documentation: signature.documentation ? { value: signature.documentation, isTrusted: false } : undefined,\n parameters: signature.parameters.map(parameter => ({ label: parameter.label,\n documentation: parameter.documentation ? { value: parameter.documentation, isTrusted: false } : undefined })) }] },\n dispose() {},\n };\n },\n }),\n editor.onDidChangeModelContent(() => {\n localEdit = true;\n completionDismissed = false;\n completionPermit = undefined;\n completionGate.cancel(); checkGate.cancel(); hoverGate.cancel(); signatureGate.cancel();\n editor.trigger('cel', 'hideSuggestWidget', {});\n monaco.editor.setModelMarkers(model, markerOwner, []);\n if (!composing) scheduler.schedule(getState().debounceMs ?? debounceMs);\n }),\n editor.onDidChangeCursorPosition(() => {\n completionPermit = undefined;\n completionGate.cancel(); signatureGate.cancel();\n }),\n editor.onDidCompositionStart(() => {\n composing = true;\n completionPermit = undefined;\n scheduler.cancel();\n completionGate.cancel(); checkGate.cancel(); hoverGate.cancel(); signatureGate.cancel();\n editor.trigger('cel', 'hideSuggestWidget', {});\n dismissSemanticWidgets();\n }),\n editor.onDidCompositionEnd(() => {\n composing = false;\n scheduler.schedule(getState().debounceMs ?? debounceMs);\n }),\n editor.onKeyDown(event => {\n if (event.keyCode === monaco.KeyCode.Escape) {\n completionPermit = undefined;\n completionDismissed = true;\n completionGate.cancel();\n }\n }),\n editor.addAction({ id: `cel.complete.${model.id}`, label: 'CEL: Show contextual suggestions',\n precondition: '!suggestWidgetVisible || !suggestWidgetHasFocusedSuggestion',\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Space, monaco.KeyMod.WinCtrl | monaco.KeyCode.Space],\n run: () => {\n if (blocked()) return;\n completionDismissed = false;\n scheduler.immediate();\n } }),\n editor.addAction({ id: `cel.run.${model.id}`, label: 'CEL: Run query',\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],\n run: () => { if (!blocked()) getState().onSubmit?.(); } }),\n ];\n\n function refresh() {\n if (disposed || model!.isDisposed()) return;\n const state = getState();\n const sameContext = previous && previous.contextKey === state.contextKey &&\n previous.request === state.request && previous.check === state.check &&\n previous.hover === state.hover && previous.signature === state.signature &&\n previous.disabled === state.disabled && previous.maxSuggestions === state.maxSuggestions &&\n previous.debounceMs === state.debounceMs &&\n previous.availability?.status === state.availability?.status &&\n previous.availability?.message === state.availability?.message;\n if (previous && (previous.contextKey !== state.contextKey || previous.request !== state.request ||\n previous.check !== state.check || previous.hover !== state.hover || previous.signature !== state.signature))\n previous.onDocumentClose?.(model!.uri.toString());\n const acknowledgedEdit = localEdit && model!.getValue() === state.document.text;\n const sameDocument = previous?.document.text === state.document.text &&\n previous.document.version === state.document.version;\n previous = { ...state, document: { ...state.document },\n availability: state.availability ? { ...state.availability } : undefined };\n localEdit = false;\n // A normal controlled acknowledgement must not add a second scheduling delay,\n // or cancel an explicit request started before React committed the same edit.\n if (sameContext && (acknowledgedEdit || sameDocument)) return;\n completionPermit = undefined;\n completionDismissed = false;\n generation++;\n completionGate.cancel(); checkGate.cancel(); hoverGate.cancel(); signatureGate.cancel();\n scheduler.cancel();\n editor.trigger('cel', 'hideSuggestWidget', {});\n dismissSemanticWidgets();\n monaco.editor.setModelMarkers(model!, markerOwner, []);\n editor.updateOptions({ quickSuggestions: false, suggestOnTriggerCharacters: false,\n wordBasedSuggestions: 'off', parameterHints: { enabled: true },\n suggest: { showWords: false, showStatusBar: true, preview: false, selectionMode: 'always' },\n acceptSuggestionOnEnter: 'on', tabCompletion: 'off',\n renderValidationDecorations: 'on', fixedOverflowWidgets: true,\n padding: { top: 8, bottom: 8 } });\n onStatus(getState().availability?.message);\n if (!blocked()) scheduler.schedule(state.debounceMs ?? debounceMs);\n }\n refresh();\n return {\n refresh,\n dispose() {\n if (disposed) return;\n disposed = true;\n completionPermit = undefined;\n scheduler.cancel();\n completionGate.cancel(); checkGate.cancel(); hoverGate.cancel(); signatureGate.cancel();\n previous?.onDocumentClose?.(model!.uri.toString());\n for (const subscription of subscriptions) subscription.dispose();\n if (!model.isDisposed()) dismissSemanticWidgets();\n if (!model.isDisposed()) monaco.editor.setModelMarkers(model, markerOwner, []);\n },\n };\n}\n","import { lazy, Suspense, useEffect, useRef, useState } from 'react';\nimport type { CSSProperties } from 'react';\nimport type * as Monaco from 'monaco-editor';\nimport type {\n QueryEditorRenderProps, QueryHoverService, QuerySignatureService, QueryLanguageService,\n} from '@omniviewdev/base-ui';\nimport { attachCelBridge, type CelEditorBridge } from './bridge';\nimport { CEL_LANGUAGE_ID } from './language';\nimport styles from './CelQueryEditor.module.css';\n\n// Uses CodeEditor's existing Monaco instance/theme/worker ownership, loaded only in code mode.\nconst LazyCodeEditor = lazy(() => import('../code-editor/CodeEditor').then(module => ({ default: module.CodeEditor })));\nlet nextEditorId = 0;\n\nexport interface CelQueryEditorProps extends QueryEditorRenderProps {\n /** A check channel also runs while unfocused, independently of completion popup visibility. */\n check?: QueryLanguageService;\n hover?: QueryHoverService;\n signature?: QuerySignatureService;\n /** Releases adapter document ownership when this model unmounts or changes context. */\n onDocumentClose?: (uri: string) => void;\n minHeight?: number;\n maxHeight?: number;\n className?: string;\n onMount?: (editor: Monaco.editor.IStandaloneCodeEditor, monaco: typeof Monaco) => void;\n}\n\n/** Controlled, contextual CEL surface. This component never parses or evaluates CEL. */\nexport function CelQueryEditor(props: CelQueryEditorProps) {\n const {\n document, contextKey, request, check, hover, signature, disabled, availability,\n debounceMs = 250, maxSuggestions = 100, label = 'CEL query', placeholder = 'Enter a CEL expression…',\n minHeight = 52, maxHeight = 180, className,\n } = props;\n const latest = useRef(props);\n latest.current = props;\n const [filename] = useState(() => `cel-query-${++nextEditorId}:///query.cel`);\n const [height, setHeight] = useState(minHeight);\n const [message, setMessage] = useState<string>();\n const [instance, setInstance] = useState<{\n editor: Monaco.editor.IStandaloneCodeEditor;\n monaco: typeof Monaco;\n } | null>(null);\n const bridgeRef = useRef<CelEditorBridge | null>(null);\n const blocked = disabled || Boolean(availability && availability.status !== 'ready');\n\n // FastRefresh can replay this effect while CodeEditor retains its editor/model.\n // Own installation and cleanup together rather than relying on onMount to repeat.\n useEffect(() => {\n const model = instance?.editor.getModel();\n if (!instance || !model || model.isDisposed()) return;\n const { editor, monaco } = instance;\n const bridge = attachCelBridge(editor, monaco, () => latest.current, setMessage);\n bridgeRef.current = bridge;\n const updateHeight = () => setHeight(Math.max(latest.current.minHeight ?? 52,\n Math.min(latest.current.maxHeight ?? 180, editor.getContentHeight())));\n updateHeight();\n const sizeSubscription = editor.onDidContentSizeChange(updateHeight);\n return () => {\n sizeSubscription.dispose();\n bridge.dispose();\n if (bridgeRef.current === bridge) bridgeRef.current = null;\n };\n }, [instance]);\n\n useEffect(() => {\n bridgeRef.current?.refresh();\n }, [document.text, document.version, contextKey, request, check, hover, signature,\n disabled, availability?.status, availability?.message, maxSuggestions, debounceMs, instance]);\n\n useEffect(() => {\n const editor = instance?.editor;\n if (!editor?.getModel()) return;\n editor.updateOptions({ ariaLabel: label });\n setHeight(Math.max(minHeight, Math.min(maxHeight, editor.getContentHeight())));\n }, [label, minHeight, maxHeight, instance]);\n\n function mount(editor: Monaco.editor.IStandaloneCodeEditor, monaco: typeof Monaco) {\n setInstance({ editor, monaco });\n latest.current.onMount?.(editor, monaco);\n }\n\n return (\n <div className={`${styles.Root} ${className ?? ''}`} data-testid=\"cel-query-editor\"\n data-context-key={contextKey} data-availability={availability?.status ?? 'ready'}>\n <div className={styles.Label}>{label}</div>\n <div className={styles.Surface}\n style={{ '--_cel-editor-min-height': `${minHeight}px` } as CSSProperties}>\n <Suspense fallback={<div role=\"status\" className={styles.Loading}>Loading CEL editor…</div>}>\n <LazyCodeEditor\n value={document.text}\n onChange={text => {\n const current = latest.current;\n // Keep an immediate snapshot for manual requests before the controlled render commits.\n latest.current = { ...current, document: { text, version: current.document.version + 1 } };\n current.onChange(text);\n }}\n filename={filename}\n language={CEL_LANGUAGE_ID}\n readOnly={blocked}\n lineNumbers={false}\n minimap={false}\n wordWrap\n quickSuggestions={false}\n diagnostics\n bordered={false}\n height={height}\n onMount={mount}\n />\n </Suspense>\n {!document.text && !blocked ? <div className={styles.Placeholder} aria-hidden=\"true\">{placeholder}</div> : null}\n </div>\n {message || availability?.message ? (\n <div role={availability?.status === 'denied' || availability?.status === 'error' ? 'alert' : 'status'}\n className={styles.Message}>{message ?? availability?.message}</div>\n ) : null}\n <div className={styles.Hint}>Ctrl+Space suggestions · ⌘/Ctrl+Enter run · Enter accepts a suggestion</div>\n </div>\n );\n}\n","var LIB;(()=>{\"use strict\";var t={975:t=>{function e(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var r,n=\"\",i=0,o=-1,s=0,h=0;h<=t.length;++h){if(h<t.length)r=t.charCodeAt(h);else{if(47===r)break;r=47}if(47===r){if(o===h-1||1===s);else if(o!==h-1&&2===s){if(n.length<2||2!==i||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){var a=n.lastIndexOf(\"/\");if(a!==n.length-1){-1===a?(n=\"\",i=0):i=(n=n.slice(0,a)).length-1-n.lastIndexOf(\"/\"),o=h,s=0;continue}}else if(2===n.length||1===n.length){n=\"\",i=0,o=h,s=0;continue}e&&(n.length>0?n+=\"/..\":n=\"..\",i=2)}else n.length>0?n+=\"/\"+t.slice(o+1,h):n=t.slice(o+1,h),i=h-o-1;o=h,s=0}else 46===r&&-1!==s?++s:s=-1}return n}var n={resolve:function(){for(var t,n=\"\",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var s;o>=0?s=arguments[o]:(void 0===t&&(t=process.cwd()),s=t),e(s),0!==s.length&&(n=s+\"/\"+n,i=47===s.charCodeAt(0))}return n=r(n,!i),i?n.length>0?\"/\"+n:\"/\":n.length>0?n:\".\"},normalize:function(t){if(e(t),0===t.length)return\".\";var n=47===t.charCodeAt(0),i=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t=\".\"),t.length>0&&i&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,r=0;r<arguments.length;++r){var i=arguments[r];e(i),i.length>0&&(void 0===t?t=i:t+=\"/\"+i)}return void 0===t?\".\":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return\"\";if((t=n.resolve(t))===(r=n.resolve(r)))return\"\";for(var i=1;i<t.length&&47===t.charCodeAt(i);++i);for(var o=t.length,s=o-i,h=1;h<r.length&&47===r.charCodeAt(h);++h);for(var a=r.length-h,c=s<a?s:a,f=-1,u=0;u<=c;++u){if(u===c){if(a>c){if(47===r.charCodeAt(h+u))return r.slice(h+u+1);if(0===u)return r.slice(h+u)}else s>c&&(47===t.charCodeAt(i+u)?f=u:0===u&&(f=0));break}var l=t.charCodeAt(i+u);if(l!==r.charCodeAt(h+u))break;47===l&&(f=u)}var g=\"\";for(u=i+f+1;u<=o;++u)u!==o&&47!==t.charCodeAt(u)||(0===g.length?g+=\"..\":g+=\"/..\");return g.length>0?g+r.slice(h+f):(h+=f,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return\".\";for(var r=t.charCodeAt(0),n=47===r,i=-1,o=!0,s=t.length-1;s>=1;--s)if(47===(r=t.charCodeAt(s))){if(!o){i=s;break}}else o=!1;return-1===i?n?\"/\":\".\":n&&1===i?\"//\":t.slice(0,i)},basename:function(t,r){if(void 0!==r&&\"string\"!=typeof r)throw new TypeError('\"ext\" argument must be a string');e(t);var n,i=0,o=-1,s=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return\"\";var h=r.length-1,a=-1;for(n=t.length-1;n>=0;--n){var c=t.charCodeAt(n);if(47===c){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),h>=0&&(c===r.charCodeAt(h)?-1==--h&&(o=n):(h=-1,o=a))}return i===o?o=a:-1===o&&(o=t.length),t.slice(i,o)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!s){i=n+1;break}}else-1===o&&(s=!1,o=n+1);return-1===o?\"\":t.slice(i,o)},extname:function(t){e(t);for(var r=-1,n=0,i=-1,o=!0,s=0,h=t.length-1;h>=0;--h){var a=t.charCodeAt(h);if(47!==a)-1===i&&(o=!1,i=h+1),46===a?-1===r?r=h:1!==s&&(s=1):-1!==r&&(s=-1);else if(!o){n=h+1;break}}return-1===r||-1===i||0===s||1===s&&r===i-1&&r===n+1?\"\":t.slice(r,i)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||\"\")+(e.ext||\"\");return r?r===e.root?r+n:r+\"/\"+n:n}(0,t)},parse:function(t){e(t);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return r;var n,i=t.charCodeAt(0),o=47===i;o?(r.root=\"/\",n=1):n=0;for(var s=-1,h=0,a=-1,c=!0,f=t.length-1,u=0;f>=n;--f)if(47!==(i=t.charCodeAt(f)))-1===a&&(c=!1,a=f+1),46===i?-1===s?s=f:1!==u&&(u=1):-1!==s&&(u=-1);else if(!c){h=f+1;break}return-1===s||-1===a||0===u||1===u&&s===a-1&&s===h+1?-1!==a&&(r.base=r.name=0===h&&o?t.slice(1,a):t.slice(h,a)):(0===h&&o?(r.name=t.slice(1,s),r.base=t.slice(1,a)):(r.name=t.slice(h,s),r.base=t.slice(h,a)),r.ext=t.slice(s,a)),h>0?r.dir=t.slice(0,h-1):o&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};n.posix=n,t.exports=n}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})};var n={};let i;if(r.r(n),r.d(n,{URI:()=>l,Utils:()=>I}),\"object\"==typeof process)i=\"win32\"===process.platform;else if(\"object\"==typeof navigator){let t=navigator.userAgent;i=t.indexOf(\"Windows\")>=0}const o=/^\\w[\\w\\d+.-]*$/,s=/^\\//,h=/^\\/\\//;function a(t,e){if(!t.scheme&&e)throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${t.authority}\", path: \"${t.path}\", query: \"${t.query}\", fragment: \"${t.fragment}\"}`);if(t.scheme&&!o.test(t.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(t.path)if(t.authority){if(!s.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(h.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}const c=\"\",f=\"/\",u=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;class l{static isUri(t){return t instanceof l||!!t&&\"string\"==typeof t.authority&&\"string\"==typeof t.fragment&&\"string\"==typeof t.path&&\"string\"==typeof t.query&&\"string\"==typeof t.scheme&&\"string\"==typeof t.fsPath&&\"function\"==typeof t.with&&\"function\"==typeof t.toString}scheme;authority;path;query;fragment;constructor(t,e,r,n,i,o=!1){\"object\"==typeof t?(this.scheme=t.scheme||c,this.authority=t.authority||c,this.path=t.path||c,this.query=t.query||c,this.fragment=t.fragment||c):(this.scheme=function(t,e){return t||e?t:\"file\"}(t,o),this.authority=e||c,this.path=function(t,e){switch(t){case\"https\":case\"http\":case\"file\":e?e[0]!==f&&(e=f+e):e=f}return e}(this.scheme,r||c),this.query=n||c,this.fragment=i||c,a(this,o))}get fsPath(){return v(this,!1)}with(t){if(!t)return this;let{scheme:e,authority:r,path:n,query:i,fragment:o}=t;return void 0===e?e=this.scheme:null===e&&(e=c),void 0===r?r=this.authority:null===r&&(r=c),void 0===n?n=this.path:null===n&&(n=c),void 0===i?i=this.query:null===i&&(i=c),void 0===o?o=this.fragment:null===o&&(o=c),e===this.scheme&&r===this.authority&&n===this.path&&i===this.query&&o===this.fragment?this:new d(e,r,n,i,o)}static parse(t,e=!1){const r=u.exec(t);return r?new d(r[2]||c,w(r[4]||c),w(r[5]||c),w(r[7]||c),w(r[9]||c),e):new d(c,c,c,c,c)}static file(t){let e=c;if(i&&(t=t.replace(/\\\\/g,f)),t[0]===f&&t[1]===f){const r=t.indexOf(f,2);-1===r?(e=t.substring(2),t=f):(e=t.substring(2,r),t=t.substring(r)||f)}return new d(\"file\",e,t,c,c)}static from(t){const e=new d(t.scheme,t.authority,t.path,t.query,t.fragment);return a(e,!0),e}toString(t=!1){return b(this,t)}toJSON(){return this}static revive(t){if(t){if(t instanceof l)return t;{const e=new d(t);return e._formatted=t.external,e._fsPath=t._sep===g?t.fsPath:null,e}}return t}}const g=i?1:void 0;class d extends l{_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=v(this,!1)),this._fsPath}toString(t=!1){return t?b(this,!0):(this._formatted||(this._formatted=b(this,!1)),this._formatted)}toJSON(){const t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=g),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t}}const p={58:\"%3A\",47:\"%2F\",63:\"%3F\",35:\"%23\",91:\"%5B\",93:\"%5D\",64:\"%40\",33:\"%21\",36:\"%24\",38:\"%26\",39:\"%27\",40:\"%28\",41:\"%29\",42:\"%2A\",43:\"%2B\",44:\"%2C\",59:\"%3B\",61:\"%3D\",32:\"%20\"};function m(t,e,r){let n,i=-1;for(let o=0;o<t.length;o++){const s=t.charCodeAt(o);if(s>=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||e&&47===s||r&&91===s||r&&93===s||r&&58===s)-1!==i&&(n+=encodeURIComponent(t.substring(i,o)),i=-1),void 0!==n&&(n+=t.charAt(o));else{void 0===n&&(n=t.substr(0,o));const e=p[s];void 0!==e?(-1!==i&&(n+=encodeURIComponent(t.substring(i,o)),i=-1),n+=e):-1===i&&(i=o)}}return-1!==i&&(n+=encodeURIComponent(t.substring(i))),void 0!==n?n:t}function y(t){let e;for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);35===n||63===n?(void 0===e&&(e=t.substr(0,r)),e+=p[n]):void 0!==e&&(e+=t[r])}return void 0!==e?e:t}function v(t,e){let r;return r=t.authority&&t.path.length>1&&\"file\"===t.scheme?`//${t.authority}${t.path}`:47===t.path.charCodeAt(0)&&(t.path.charCodeAt(1)>=65&&t.path.charCodeAt(1)<=90||t.path.charCodeAt(1)>=97&&t.path.charCodeAt(1)<=122)&&58===t.path.charCodeAt(2)?e?t.path.substr(1):t.path[1].toLowerCase()+t.path.substr(2):t.path,i&&(r=r.replace(/\\//g,\"\\\\\")),r}function b(t,e){const r=e?y:m;let n=\"\",{scheme:i,authority:o,path:s,query:h,fragment:a}=t;if(i&&(n+=i,n+=\":\"),(o||\"file\"===i)&&(n+=f,n+=f),o){let t=o.indexOf(\"@\");if(-1!==t){const e=o.substr(0,t);o=o.substr(t+1),t=e.lastIndexOf(\":\"),-1===t?n+=r(e,!1,!1):(n+=r(e.substr(0,t),!1,!1),n+=\":\",n+=r(e.substr(t+1),!1,!0)),n+=\"@\"}o=o.toLowerCase(),t=o.lastIndexOf(\":\"),-1===t?n+=r(o,!1,!0):(n+=r(o.substr(0,t),!1,!0),n+=o.substr(t))}if(s){if(s.length>=3&&47===s.charCodeAt(0)&&58===s.charCodeAt(2)){const t=s.charCodeAt(1);t>=65&&t<=90&&(s=`/${String.fromCharCode(t+32)}:${s.substr(3)}`)}else if(s.length>=2&&58===s.charCodeAt(1)){const t=s.charCodeAt(0);t>=65&&t<=90&&(s=`${String.fromCharCode(t+32)}:${s.substr(2)}`)}n+=r(s,!0,!1)}return h&&(n+=\"?\",n+=r(h,!1,!1)),a&&(n+=\"#\",n+=e?a:m(a,!1,!1)),n}function C(t){try{return decodeURIComponent(t)}catch{return t.length>3?t.substr(0,3)+C(t.substr(3)):t}}const A=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function w(t){return t.match(A)?t.replace(A,(t=>C(t))):t}var x=r(975);const P=x.posix||x,_=\"/\";var I;!function(t){t.joinPath=function(t,...e){return t.with({path:P.join(t.path,...e)})},t.resolvePath=function(t,...e){let r=t.path,n=!1;r[0]!==_&&(r=_+r,n=!0);let i=P.resolve(r,...e);return n&&i[0]===_&&!t.authority&&(i=i.substring(1)),t.with({path:i})},t.dirname=function(t){if(0===t.path.length||t.path===_)return t;let e=P.dirname(t.path);return 1===e.length&&46===e.charCodeAt(0)&&(e=\"\"),t.with({path:e})},t.basename=function(t){return P.basename(t.path)},t.extname=function(t){return P.extname(t.path)}}(I||(I={})),LIB=n})();export const{URI,Utils}=LIB;\n//# sourceMappingURL=index.mjs.map","/**\n * Convert a Monaco editor marker severity to an LSP diagnostic severity.\n *\n * @param severity\n * The Monaco marker severity to convert.\n * @returns\n * The marker severity as an LSP diagnostic severity.\n */\nexport function fromMarkerSeverity(severity) {\n if (severity === 1) {\n return 4;\n }\n if (severity === 2) {\n return 3;\n }\n if (severity === 4) {\n return 2;\n }\n return 1;\n}\n/**\n * Convert an LSP diagnostic severity to a Monaco editor marker severity.\n *\n * @param severity\n * The LSP diagnostic severity to convert.\n * @returns\n * The diagnostic severity as Monaco editor marker severity.\n */\nexport function toMarkerSeverity(severity) {\n if (severity === 4) {\n return 1;\n }\n if (severity === 3) {\n return 2;\n }\n if (severity === 2) {\n return 4;\n }\n return 8;\n}\n//# sourceMappingURL=markerSeverity.js.map","/**\n * Convert a Monaco editor marker tag to an LSP diagnostic tag.\n *\n * @param tag\n * The Monaco marker tag to convert.\n * @returns\n * The marker tag as an LSP diagnostic tag.\n */\nexport function fromMarkerTag(tag) {\n return tag;\n}\n/**\n * Convert an LSP diagnostic tag to a Monaco editor marker tag.\n *\n * @param tag\n * The LSP diagnostic tag to convert.\n * @returns\n * The diagnostic tag as Monaco editor marker tag.\n */\nexport function toMarkerTag(tag) {\n return tag;\n}\n//# sourceMappingURL=markerTag.js.map","/**\n * Convert a Monaco editor range to an LSP range.\n *\n * @param range\n * The Monaco range to convert.\n * @returns\n * The range as an LSP range.\n */\nexport function fromRange(range) {\n return {\n start: { line: range.startLineNumber - 1, character: range.startColumn - 1 },\n end: { line: range.endLineNumber - 1, character: range.endColumn - 1 }\n };\n}\n/**\n * Convert an LSP range to a Monaco editor range.\n *\n * @param range\n * The LSP range to convert.\n * @returns\n * The range as Monaco editor range.\n */\nexport function toRange(range) {\n return {\n startLineNumber: range.start.line + 1,\n startColumn: range.start.character + 1,\n endLineNumber: range.end.line + 1,\n endColumn: range.end.character + 1\n };\n}\n//# sourceMappingURL=range.js.map","import { URI } from 'vscode-uri';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor related information to an LSP diagnostic related information.\n *\n * @param relatedInformation\n * The Monaco related information to convert.\n * @returns\n * The related information as an LSP diagnostic related information.\n */\nexport function fromRelatedInformation(relatedInformation) {\n return {\n location: {\n range: fromRange(relatedInformation),\n uri: String(relatedInformation.resource)\n },\n message: relatedInformation.message\n };\n}\n/**\n * Convert an LSP diagnostic related information to a Monaco editor related information.\n *\n * @param relatedInformation\n * The LSP diagnostic related information to convert.\n * @returns\n * The diagnostic related information as Monaco editor related information.\n */\nexport function toRelatedInformation(relatedInformation) {\n return {\n ...toRange(relatedInformation.location.range),\n message: relatedInformation.message,\n resource: URI.parse(relatedInformation.location.uri)\n };\n}\n//# sourceMappingURL=relatedInformation.js.map","import { URI } from 'vscode-uri';\nimport { fromMarkerSeverity, toMarkerSeverity } from './markerSeverity.js';\nimport { fromMarkerTag, toMarkerTag } from './markerTag.js';\nimport { fromRange, toRange } from './range.js';\nimport { fromRelatedInformation, toRelatedInformation } from './relatedInformation.js';\n/**\n * Convert a Monaco editor marker data to an LSP diagnostic.\n *\n * @param markerData\n * The Monaco marker data to convert.\n * @returns\n * The marker data as an LSP diagnostic.\n */\nexport function fromMarkerData(markerData) {\n const diagnostic = {\n message: markerData.message,\n range: fromRange(markerData),\n severity: fromMarkerSeverity(markerData.severity)\n };\n if (typeof markerData.code === 'string') {\n diagnostic.code = markerData.code;\n }\n else if (markerData.code != null) {\n diagnostic.code = markerData.code.value;\n diagnostic.codeDescription = { href: String(markerData.code.target) };\n }\n if (markerData.relatedInformation) {\n diagnostic.relatedInformation = markerData.relatedInformation.map(fromRelatedInformation);\n }\n if (markerData.tags) {\n diagnostic.tags = markerData.tags.map(fromMarkerTag);\n }\n if (markerData.source != null) {\n diagnostic.source = markerData.source;\n }\n return diagnostic;\n}\n/**\n * Convert an LSP diagnostic to a Monaco editor marker data.\n *\n * @param diagnostic\n * The LSP diagnostic to convert.\n * @returns\n * The diagnostic as Monaco editor marker data.\n */\nexport function toMarkerData(diagnostic) {\n const markerData = {\n ...toRange(diagnostic.range),\n message: diagnostic.message,\n severity: diagnostic.severity\n ? toMarkerSeverity(diagnostic.severity)\n : 8\n };\n if (diagnostic.code != null) {\n markerData.code =\n diagnostic.codeDescription == null\n ? String(diagnostic.code)\n : { value: String(diagnostic.code), target: URI.parse(diagnostic.codeDescription.href) };\n }\n if (diagnostic.relatedInformation) {\n markerData.relatedInformation = diagnostic.relatedInformation.map(toRelatedInformation);\n }\n if (diagnostic.tags) {\n markerData.tags = diagnostic.tags.map(toMarkerTag);\n }\n if (diagnostic.source != null) {\n markerData.source = diagnostic.source;\n }\n return markerData;\n}\n//# sourceMappingURL=markerData.js.map","import { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor text edit to an LSP text edit.\n *\n * @param textEdit\n * The Monaco text edit to convert.\n * @returns\n * The text edit as an LSP text edit.\n */\nexport function fromTextEdit(textEdit) {\n return {\n range: fromRange(textEdit.range),\n newText: textEdit.text\n };\n}\n/**\n * Convert an LSP text edit to a Monaco editor text edit.\n *\n * @param textEdit\n * The LSP text edit to convert.\n * @returns\n * The text edit as Monaco editor text edit.\n */\nexport function toTextEdit(textEdit) {\n return {\n range: toRange(textEdit.range),\n text: textEdit.newText\n };\n}\n//# sourceMappingURL=textEdit.js.map","/**\n * Convert Monaco editor workspace file edit options to LSP workspace file edit options.\n *\n * @param options\n * The Monaco workspace file edit options to convert.\n * @returns\n * The range as LSP workspace file edit options.\n */\nexport function fromWorkspaceFileEditOptions(options) {\n const result = {};\n if (options.ignoreIfExists != null) {\n result.ignoreIfExists = options.ignoreIfExists;\n }\n if (options.ignoreIfNotExists != null) {\n result.ignoreIfNotExists = options.ignoreIfNotExists;\n }\n if (options.overwrite != null) {\n result.overwrite = options.overwrite;\n }\n if (options.recursive != null) {\n result.recursive = options.recursive;\n }\n return result;\n}\n/**\n * Convert LSP workspace file edit options to Monaco editor workspace file edit options.\n *\n * @param options\n * The LSP workspace file edit options to convert.\n * @returns\n * The workspace file edit options Monaco editor workspace file edit options.\n */\nexport function toWorkspaceFileEditOptions(options) {\n const result = {};\n if (options.ignoreIfExists != null) {\n result.ignoreIfExists = options.ignoreIfExists;\n }\n if (options.ignoreIfNotExists != null) {\n result.ignoreIfNotExists = options.ignoreIfNotExists;\n }\n if (options.overwrite != null) {\n result.overwrite = options.overwrite;\n }\n if (options.recursive != null) {\n result.recursive = options.recursive;\n }\n return result;\n}\n//# sourceMappingURL=workspaceFileEditOptions.js.map","import { URI } from 'vscode-uri';\nimport { fromWorkspaceFileEditOptions, toWorkspaceFileEditOptions } from './workspaceFileEditOptions.js';\n/**\n * Convert Monaco editor workspace file edit options to LSP workspace file edit options.\n *\n * @param workspaceFileEdit\n * The Monaco workspace file edit options to convert.\n * @returns\n * The range as LSP workspace file edit options.\n */\nexport function fromWorkspaceFileEdit(workspaceFileEdit) {\n let result;\n if (workspaceFileEdit.oldResource) {\n result = workspaceFileEdit.newResource\n ? {\n kind: 'rename',\n oldUri: String(workspaceFileEdit.oldResource),\n newUri: String(workspaceFileEdit.newResource)\n }\n : {\n kind: 'delete',\n uri: String(workspaceFileEdit.oldResource)\n };\n }\n else if (workspaceFileEdit.newResource) {\n result = {\n kind: 'create',\n uri: String(workspaceFileEdit.newResource)\n };\n }\n else {\n throw new Error('Could not convert workspace file edit to language server type', {\n cause: workspaceFileEdit\n });\n }\n if (workspaceFileEdit.options) {\n result.options = fromWorkspaceFileEditOptions(workspaceFileEdit.options);\n }\n return result;\n}\n/**\n * Convert an LSP workspace file edit to a Monaco editor workspace file edit.\n *\n * @param workspaceFileEdit\n * The LSP workspace file edit to convert.\n * @returns\n * The workspace file edit options Monaco editor workspace file edit options.\n */\nexport function toWorkspaceFileEdit(workspaceFileEdit) {\n const result = workspaceFileEdit.kind === 'create'\n ? { newResource: URI.parse(workspaceFileEdit.uri) }\n : workspaceFileEdit.kind === 'delete'\n ? { oldResource: URI.parse(workspaceFileEdit.uri) }\n : {\n oldResource: URI.parse(workspaceFileEdit.oldUri),\n newResource: URI.parse(workspaceFileEdit.newUri)\n };\n if (workspaceFileEdit.options) {\n result.options = toWorkspaceFileEditOptions(workspaceFileEdit.options);\n }\n return result;\n}\n//# sourceMappingURL=workspaceFileEdit.js.map","import { URI } from 'vscode-uri';\nimport { fromTextEdit, toTextEdit } from './textEdit.js';\nimport { fromWorkspaceFileEdit, toWorkspaceFileEdit } from './workspaceFileEdit.js';\n/**\n * Convert a Monaco editor workspace edit to an LSP workspace edit.\n *\n * @param workspaceEdit\n * The Monaco workspace edit to convert.\n * @returns\n * The workspace edit as an LSP workspace edit.\n */\nexport function fromWorkspaceEdit(workspaceEdit) {\n const changes = {};\n const documentChanges = [];\n const textDocumentMap = new Map();\n for (const edit of workspaceEdit.edits) {\n if ('resource' in edit) {\n const uri = String(edit.resource);\n if (edit.versionId == null) {\n changes[uri] = [];\n changes[uri].push(fromTextEdit(edit.textEdit));\n }\n else {\n let versionMap = textDocumentMap.get(uri);\n if (!versionMap) {\n versionMap = new Map();\n textDocumentMap.set(uri, versionMap);\n }\n let textDocumentEdits = versionMap.get(edit.versionId);\n if (!textDocumentEdits) {\n textDocumentEdits = [];\n versionMap.set(edit.versionId, textDocumentEdits);\n documentChanges.push({\n textDocument: { uri, version: edit.versionId },\n edits: textDocumentEdits\n });\n }\n textDocumentEdits.push(fromTextEdit(edit.textEdit));\n }\n }\n else {\n documentChanges.push(fromWorkspaceFileEdit(edit));\n }\n }\n return {\n changes,\n documentChanges\n };\n}\n/**\n * Convert an LSP text edit and uri to a Monaco editor workspace text edit.\n *\n * @param textEdit\n * The LSP text edit to convert.\n * @param uri\n * The uri of the workspace text edit.\n * @param versionId\n * The version ID of the workspace text edit.\n * @returns\n * The text edit and uri as Monaco editor workspace text edit.\n */\nfunction toWorkspaceTextEdit(textEdit, uri, versionId) {\n return {\n resource: URI.parse(uri),\n versionId,\n textEdit: toTextEdit(textEdit)\n };\n}\n/**\n * Convert an LSP workspace edit to a Monaco editor workspace edit.\n *\n * @param workspaceEdit\n * The LSP workspace edit to convert.\n * @returns\n * The workspace edit as Monaco editor workspace edit.\n */\nexport function toWorkspaceEdit(workspaceEdit) {\n var _a;\n const edits = [];\n if (workspaceEdit.changes) {\n for (const [uri, textEdits] of Object.entries(workspaceEdit.changes)) {\n for (const textEdit of textEdits) {\n edits.push(toWorkspaceTextEdit(textEdit, uri));\n }\n }\n }\n if (workspaceEdit.documentChanges) {\n for (const documentChange of workspaceEdit.documentChanges) {\n if ('textDocument' in documentChange) {\n for (const textEdit of documentChange.edits) {\n edits.push(toWorkspaceTextEdit(textEdit, documentChange.textDocument.uri, (_a = documentChange.textDocument.version) !== null && _a !== void 0 ? _a : undefined));\n }\n }\n else {\n edits.push(toWorkspaceFileEdit(documentChange));\n }\n }\n }\n return {\n edits\n };\n}\n//# sourceMappingURL=workspaceEdit.js.map","import { fromMarkerData, toMarkerData } from './markerData.js';\nimport { fromWorkspaceEdit, toWorkspaceEdit } from './workspaceEdit.js';\n/**\n * Convert a Monaco editor code action to an LSP code action.\n *\n * @param codeAction\n * The Monaco code action to convert.\n * @returns\n * The code action as an LSP code action.\n */\nexport function fromCodeAction(codeAction) {\n const result = {\n title: codeAction.title\n };\n if (codeAction.diagnostics) {\n result.diagnostics = codeAction.diagnostics.map(fromMarkerData);\n }\n if (codeAction.disabled != null) {\n result.disabled = { reason: codeAction.disabled };\n }\n if (codeAction.edit) {\n result.edit = fromWorkspaceEdit(codeAction.edit);\n }\n if (codeAction.isPreferred != null) {\n result.isPreferred = codeAction.isPreferred;\n }\n if (codeAction.kind) {\n result.kind = codeAction.kind;\n }\n return result;\n}\n/**\n * Convert an LSP code action to a Monaco editor code action.\n *\n * @param codeAction\n * The LSP code action to convert.\n * @returns\n * The code action as Monaco editor code action.\n */\nexport function toCodeAction(codeAction) {\n const result = {\n title: codeAction.title,\n isPreferred: codeAction.isPreferred\n };\n if (codeAction.diagnostics) {\n result.diagnostics = codeAction.diagnostics.map(toMarkerData);\n }\n if (codeAction.disabled) {\n result.disabled = codeAction.disabled.reason;\n }\n if (codeAction.edit) {\n result.edit = toWorkspaceEdit(codeAction.edit);\n }\n if (codeAction.isPreferred != null) {\n result.isPreferred = codeAction.isPreferred;\n }\n if (codeAction.kind) {\n result.kind = codeAction.kind;\n }\n return result;\n}\n//# sourceMappingURL=codeAction.js.map","/**\n * Convert a Monaco editor command to an LSP command.\n *\n * @param command\n * The Monaco command to convert.\n * @returns\n * The command as an LSP command.\n */\nexport function fromCommand(command) {\n const result = {\n title: command.title,\n command: command.id\n };\n if (command.arguments) {\n result.arguments = command.arguments;\n }\n return result;\n}\n/**\n * Convert an LSP command to a Monaco editor command.\n *\n * @param command\n * The LSP command to convert.\n * @returns\n * The command as Monaco editor command.\n */\nexport function toCommand(command) {\n const result = {\n title: command.title,\n id: command.command\n };\n if (command.arguments) {\n result.arguments = command.arguments;\n }\n return result;\n}\n//# sourceMappingURL=command.js.map","/**\n * Convert a Monaco editor completion item kind to an LSP completion item kind.\n *\n * @param kind\n * The Monaco completion item kind to convert.\n * @returns\n * The completion item kind as an LSP completion item kind.\n */\nexport function fromCompletionItemKind(kind) {\n if (kind === 18) {\n return 1;\n }\n if (kind === 0) {\n return 2;\n }\n if (kind === 1) {\n return 3;\n }\n if (kind === 2) {\n return 4;\n }\n if (kind === 3) {\n return 5;\n }\n if (kind === 4) {\n return 6;\n }\n if (kind === 5) {\n return 7;\n }\n if (kind === 7) {\n return 8;\n }\n if (kind === 8) {\n return 9;\n }\n if (kind === 9) {\n return 10;\n }\n if (kind === 12) {\n return 11;\n }\n if (kind === 13) {\n return 12;\n }\n if (kind === 15) {\n return 13;\n }\n if (kind === 17) {\n return 14;\n }\n if (kind === 27) {\n return 15;\n }\n if (kind === 19) {\n return 16;\n }\n if (kind === 20) {\n return 17;\n }\n if (kind === 21) {\n return 18;\n }\n if (kind === 23) {\n return 19;\n }\n if (kind === 16) {\n return 20;\n }\n if (kind === 14) {\n return 21;\n }\n if (kind === 6) {\n return 22;\n }\n if (kind === 10) {\n return 23;\n }\n if (kind === 11) {\n return 24;\n }\n if (kind === 24) {\n return 25;\n }\n}\n/**\n * Convert an LSP completion item kind to a Monaco editor completion item kind.\n *\n * @param kind\n * The LSP completion item kind to convert.\n * @returns\n * The completion item kind as Monaco editor completion item kind.\n */\nexport function toCompletionItemKind(kind) {\n if (kind === 1) {\n return 18;\n }\n if (kind === 2) {\n return 0;\n }\n if (kind === 3) {\n return 1;\n }\n if (kind === 4) {\n return 2;\n }\n if (kind === 5) {\n return 3;\n }\n if (kind === 6) {\n return 4;\n }\n if (kind === 7) {\n return 5;\n }\n if (kind === 8) {\n return 7;\n }\n if (kind === 9) {\n return 8;\n }\n if (kind === 10) {\n return 9;\n }\n if (kind === 11) {\n return 12;\n }\n if (kind === 12) {\n return 13;\n }\n if (kind === 13) {\n return 15;\n }\n if (kind === 14) {\n return 17;\n }\n if (kind === 15) {\n return 27;\n }\n if (kind === 16) {\n return 19;\n }\n if (kind === 17) {\n return 20;\n }\n if (kind === 18) {\n return 21;\n }\n if (kind === 19) {\n return 23;\n }\n if (kind === 20) {\n return 16;\n }\n if (kind === 21) {\n return 14;\n }\n if (kind === 22) {\n return 6;\n }\n if (kind === 23) {\n return 10;\n }\n if (kind === 24) {\n return 11;\n }\n // Kind === 25\n return 24;\n}\n//# sourceMappingURL=completionItemKind.js.map","/**\n * Convert a Monaco editor completion item tag to an LSP completion item tag.\n *\n * @param tag\n * The Monaco completion item tag to convert.\n * @returns\n * The completion item tag as an LSP completion item tag.\n */\nexport function fromCompletionItemTag(tag) {\n return tag;\n}\n/**\n * Convert an LSP completion item tag to a Monaco editor completion item tag.\n *\n * @param tag\n * The LSP completion item tag to convert.\n * @returns\n * The completion item tag as Monaco editor completion item tag.\n */\nexport function toCompletionItemTag(tag) {\n return tag;\n}\n//# sourceMappingURL=completionItemTag.js.map","/**\n * Convert a Monaco editor markdown string to an LSP markup content.\n *\n * @param markdownString\n * The Monaco markdown string to convert.\n * @returns\n * The markdown string as an LSP markup content.\n */\nexport function fromMarkdownString(markdownString) {\n return {\n kind: 'markdown',\n value: markdownString.value\n };\n}\n/**\n * Convert an LSP markup content to a Monaco editor markdown string.\n *\n * @param markupContent\n * The LSP markup content to convert.\n * @returns\n * The markup content as a Monaco editor markdown string.\n */\nexport function toMarkdownString(markupContent) {\n return {\n value: markupContent.value\n };\n}\n//# sourceMappingURL=markdownString.js.map","import { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor single edit operation to an LSP text edit.\n *\n * @param singleEditOperation\n * The Monaco single edit operation to convert.\n * @returns\n * The single edit operation as an LSP text edit.\n */\nexport function fromSingleEditOperation(singleEditOperation) {\n var _a;\n return {\n newText: (_a = singleEditOperation.text) !== null && _a !== void 0 ? _a : '',\n range: fromRange(singleEditOperation.range)\n };\n}\n/**\n * Convert an LSP text edit to a Monaco editor single edit operation.\n *\n * @param textEdit\n * The LSP text edit to convert.\n * @returns\n * The text edit as Monaco editor single edit operation.\n */\nexport function toSingleEditOperation(textEdit) {\n return {\n range: toRange(textEdit.range),\n text: textEdit.newText\n };\n}\n//# sourceMappingURL=singleEditOperation.js.map","import { fromCommand, toCommand } from './command.js';\nimport { fromCompletionItemKind, toCompletionItemKind } from './completionItemKind.js';\nimport { fromCompletionItemTag, toCompletionItemTag } from './completionItemTag.js';\nimport { fromMarkdownString, toMarkdownString } from './markdownString.js';\nimport { fromRange, toRange } from './range.js';\nimport { fromSingleEditOperation, toSingleEditOperation } from './singleEditOperation.js';\n/**\n * Convert a Monaco editor completion item range to an LSP completion item text edit.\n *\n * @param edit\n * The Monaco completion item range to convert.\n * @param newText\n * The text of the text edit.\n * @returns\n * The completion item range as an LSP completion item text edit.\n */\nfunction fromCompletionItemRange(edit, newText) {\n if ('insert' in edit) {\n return {\n newText,\n insert: fromRange(edit.insert),\n replace: fromRange(edit.replace)\n };\n }\n return {\n newText,\n range: fromRange(edit)\n };\n}\n/**\n * Convert a Monaco editor completion item to an LSP completion item.\n *\n * @param completionItem\n * The Monaco completion item to convert.\n * @returns\n * The completion item as an LSP completion item.\n */\nexport function fromCompletionItem(completionItem) {\n const result = {\n kind: fromCompletionItemKind(completionItem.kind),\n label: typeof completionItem.label === 'string' ? completionItem.label : completionItem.label.label,\n textEdit: fromCompletionItemRange(completionItem.range, completionItem.insertText)\n };\n if (completionItem.additionalTextEdits) {\n result.additionalTextEdits = completionItem.additionalTextEdits.map(fromSingleEditOperation);\n }\n if (completionItem.command) {\n result.command = fromCommand(completionItem.command);\n }\n if (completionItem.commitCharacters) {\n result.commitCharacters = completionItem.commitCharacters;\n }\n if (completionItem.detail != null) {\n result.detail = completionItem.detail;\n }\n if (typeof completionItem.documentation === 'string') {\n result.documentation = completionItem.documentation;\n }\n else if (completionItem.documentation) {\n result.documentation = fromMarkdownString(completionItem.documentation);\n }\n if (completionItem.filterText != null) {\n result.filterText = completionItem.filterText;\n }\n if (completionItem.insertTextRules ===\n 4) {\n result.insertTextFormat = 2;\n }\n else if (completionItem.insertTextRules ===\n 1) {\n result.insertTextMode = 2;\n }\n if (completionItem.preselect != null) {\n result.preselect = completionItem.preselect;\n }\n if (completionItem.sortText != null) {\n result.sortText = completionItem.sortText;\n }\n if (completionItem.tags) {\n result.tags = completionItem.tags.map(fromCompletionItemTag);\n }\n return result;\n}\n/**\n * Convert an LSP completion item text edit to a Monaco editor range.\n *\n * @param edit\n * The LSP completion item text edit to convert.\n * @returns\n * The completion item text edit as Monaco editor range.\n */\nfunction toCompletionItemRange(edit) {\n if ('range' in edit) {\n return toRange(edit.range);\n }\n if ('insert' in edit && 'replace' in edit) {\n return {\n insert: toRange(edit.insert),\n replace: toRange(edit.replace)\n };\n }\n return toRange(edit);\n}\n/**\n * Convert an LSP completion item to a Monaco editor completion item.\n *\n * @param completionItem\n * The LSP completion item to convert.\n * @param options\n * Additional options needed to construct the Monaco completion item.\n * @returns\n * The completion item as Monaco editor completion item.\n */\nexport function toCompletionItem(completionItem, options) {\n var _a, _b, _c, _d, _e;\n const itemDefaults = (_a = options.itemDefaults) !== null && _a !== void 0 ? _a : {};\n const textEdit = (_b = completionItem.textEdit) !== null && _b !== void 0 ? _b : itemDefaults.editRange;\n const commitCharacters = (_c = completionItem.commitCharacters) !== null && _c !== void 0 ? _c : itemDefaults.commitCharacters;\n const insertTextFormat = (_d = completionItem.insertTextFormat) !== null && _d !== void 0 ? _d : itemDefaults.insertTextFormat;\n const insertTextMode = (_e = completionItem.insertTextMode) !== null && _e !== void 0 ? _e : itemDefaults.insertTextMode;\n let text = completionItem.insertText;\n let range;\n if (textEdit) {\n range = toCompletionItemRange(textEdit);\n if ('newText' in textEdit) {\n text = textEdit.newText;\n }\n }\n else {\n range = { ...options.range };\n }\n const result = {\n insertText: text !== null && text !== void 0 ? text : completionItem.label,\n kind: completionItem.kind == null\n ? 18\n : toCompletionItemKind(completionItem.kind),\n label: completionItem.label,\n range\n };\n if (completionItem.additionalTextEdits) {\n result.additionalTextEdits = completionItem.additionalTextEdits.map(toSingleEditOperation);\n }\n if (completionItem.command) {\n result.command = toCommand(completionItem.command);\n }\n if (commitCharacters) {\n result.commitCharacters = commitCharacters;\n }\n if (completionItem.detail != null) {\n result.detail = completionItem.detail;\n }\n if (typeof completionItem.documentation === 'string') {\n result.documentation = completionItem.documentation;\n }\n else if (completionItem.documentation) {\n result.documentation = toMarkdownString(completionItem.documentation);\n }\n if (completionItem.filterText != null) {\n result.filterText = completionItem.filterText;\n }\n if (insertTextFormat === 2) {\n result.insertTextRules =\n 4;\n }\n else if (insertTextMode === 2) {\n result.insertTextRules =\n 1;\n }\n if (completionItem.preselect != null) {\n result.preselect = completionItem.preselect;\n }\n if (completionItem.sortText != null) {\n result.sortText = completionItem.sortText;\n }\n if (completionItem.tags) {\n result.tags = completionItem.tags.map(toCompletionItemTag);\n }\n return result;\n}\n//# sourceMappingURL=completionItem.js.map","import { fromCompletionItem, toCompletionItem } from './completionItem.js';\n/**\n * Convert a Monaco editor completion list to an LSP completion list.\n *\n * @param completionList\n * The Monaco completion list to convert.\n * @returns\n * The completion list as an LSP completion list.\n */\nexport function fromCompletionList(completionList) {\n return {\n isIncomplete: Boolean(completionList.incomplete),\n items: completionList.suggestions.map(fromCompletionItem)\n };\n}\n/**\n * Convert an LSP completion list to a Monaco editor completion list.\n *\n * @param completionList\n * The LSP completion list to convert.\n * @param options\n * Additional options needed to construct the Monaco completion list.\n * @returns\n * The completion list as Monaco editor completion list.\n */\nexport function toCompletionList(completionList, options) {\n return {\n incomplete: Boolean(completionList.isIncomplete),\n suggestions: completionList.items.map((item) => toCompletionItem(item, { range: options.range, itemDefaults: completionList.itemDefaults }))\n };\n}\n//# sourceMappingURL=completionList.js.map","/**\n * Convert a Monaco editor symbol kind to an LSP symbol kind.\n *\n * @param symbolKind\n * The Monaco symbol kind to convert.\n * @returns\n * The symbol kind as an LSP symbol kind.\n */\nexport function fromSymbolKind(symbolKind) {\n if (symbolKind === 0) {\n return 1;\n }\n if (symbolKind === 1) {\n return 2;\n }\n if (symbolKind === 2) {\n return 3;\n }\n if (symbolKind === 3) {\n return 4;\n }\n if (symbolKind === 4) {\n return 5;\n }\n if (symbolKind === 5) {\n return 6;\n }\n if (symbolKind === 6) {\n return 7;\n }\n if (symbolKind === 7) {\n return 8;\n }\n if (symbolKind === 8) {\n return 9;\n }\n if (symbolKind === 9) {\n return 10;\n }\n if (symbolKind === 10) {\n return 11;\n }\n if (symbolKind === 11) {\n return 12;\n }\n if (symbolKind === 12) {\n return 13;\n }\n if (symbolKind === 13) {\n return 14;\n }\n if (symbolKind === 14) {\n return 15;\n }\n if (symbolKind === 15) {\n return 16;\n }\n if (symbolKind === 16) {\n return 17;\n }\n if (symbolKind === 17) {\n return 18;\n }\n if (symbolKind === 18) {\n return 19;\n }\n if (symbolKind === 19) {\n return 20;\n }\n if (symbolKind === 20) {\n return 21;\n }\n if (symbolKind === 21) {\n return 22;\n }\n if (symbolKind === 22) {\n return 23;\n }\n if (symbolKind === 23) {\n return 24;\n }\n if (symbolKind === 24) {\n return 25;\n }\n // SymbolKind === SymbolKind.TypeParameter\n return 26;\n}\n/**\n * Convert an LSP symbol kind to a Monaco editor symbol kind.\n *\n * @param symbolKind\n * The LSP symbol kind to convert.\n * @returns\n * The symbol kind as Monaco editor symbol kind.\n */\nexport function toSymbolKind(symbolKind) {\n if (symbolKind === 1) {\n return 0;\n }\n if (symbolKind === 2) {\n return 1;\n }\n if (symbolKind === 3) {\n return 2;\n }\n if (symbolKind === 4) {\n return 3;\n }\n if (symbolKind === 5) {\n return 4;\n }\n if (symbolKind === 6) {\n return 5;\n }\n if (symbolKind === 7) {\n return 6;\n }\n if (symbolKind === 8) {\n return 7;\n }\n if (symbolKind === 9) {\n return 8;\n }\n if (symbolKind === 10) {\n return 9;\n }\n if (symbolKind === 11) {\n return 10;\n }\n if (symbolKind === 12) {\n return 11;\n }\n if (symbolKind === 13) {\n return 12;\n }\n if (symbolKind === 14) {\n return 13;\n }\n if (symbolKind === 15) {\n return 14;\n }\n if (symbolKind === 16) {\n return 15;\n }\n if (symbolKind === 17) {\n return 16;\n }\n if (symbolKind === 18) {\n return 17;\n }\n if (symbolKind === 19) {\n return 18;\n }\n if (symbolKind === 20) {\n return 19;\n }\n if (symbolKind === 21) {\n return 20;\n }\n if (symbolKind === 22) {\n return 21;\n }\n if (symbolKind === 23) {\n return 22;\n }\n if (symbolKind === 24) {\n return 23;\n }\n if (symbolKind === 25) {\n return 24;\n }\n // SymbolKind === 26\n return 25;\n}\n//# sourceMappingURL=symbolKind.js.map","/**\n * Convert a Monaco editor symbol tag to an LSP symbol tag.\n *\n * @param symbolTag\n * The Monaco symbol tag to convert.\n * @returns\n * The symbol tag as an LSP symbol tag.\n */\nexport function fromSymbolTag(symbolTag) {\n return symbolTag;\n}\n/**\n * Convert an LSP symbol tag to a Monaco editor symbol tag.\n *\n * @param symbolTag\n * The LSP symbol tag to convert.\n * @returns\n * The symbol tag as Monaco editor symbol tag.\n */\nexport function toSymbolTag(symbolTag) {\n return symbolTag;\n}\n//# sourceMappingURL=symbolTag.js.map","import { fromRange, toRange } from './range.js';\nimport { fromSymbolKind, toSymbolKind } from './symbolKind.js';\nimport { fromSymbolTag, toSymbolTag } from './symbolTag.js';\n/**\n * Convert a Monaco editor document symbol to an LSP document symbol.\n *\n * @param documentSymbol\n * The Monaco document symbol to convert.\n * @returns\n * The document symbol as an LSP document symbol.\n */\nexport function fromDocumentSymbol(documentSymbol) {\n const result = {\n detail: documentSymbol.detail,\n kind: fromSymbolKind(documentSymbol.kind),\n name: documentSymbol.name,\n range: fromRange(documentSymbol.range),\n selectionRange: fromRange(documentSymbol.selectionRange),\n tags: documentSymbol.tags.map(fromSymbolTag)\n };\n if (documentSymbol.children) {\n result.children = documentSymbol.children.map(fromDocumentSymbol);\n }\n return result;\n}\n/**\n * Convert an LSP document symbol to a Monaco editor document symbol.\n *\n * @param documentSymbol\n * The LSP document symbol to convert.\n * @returns\n * The document symbol as Monaco editor document symbol.\n */\nexport function toDocumentSymbol(documentSymbol) {\n var _a, _b, _c;\n const result = {\n detail: (_a = documentSymbol.detail) !== null && _a !== void 0 ? _a : '',\n kind: toSymbolKind(documentSymbol.kind),\n name: documentSymbol.name,\n range: toRange(documentSymbol.range),\n selectionRange: toRange(documentSymbol.selectionRange),\n tags: (_c = (_b = documentSymbol.tags) === null || _b === void 0 ? void 0 : _b.map(toSymbolTag)) !== null && _c !== void 0 ? _c : []\n };\n if (documentSymbol.children) {\n result.children = documentSymbol.children.map(toDocumentSymbol);\n }\n return result;\n}\n//# sourceMappingURL=documentSymbol.js.map","/**\n * Convert a Monaco editor folding range to an LSP folding range.\n *\n * @param foldingRange\n * The Monaco folding range to convert.\n * @returns\n * The folding range as an LSP folding range.\n */\nexport function fromFoldingRange(foldingRange) {\n const result = {\n startLine: foldingRange.start - 1,\n endLine: foldingRange.end - 1\n };\n if (foldingRange.kind != null) {\n result.kind = foldingRange.kind.value;\n }\n return result;\n}\n/**\n * Convert an LSP folding range to a Monaco editor folding range.\n *\n * @param foldingRange\n * The LSP folding range to convert.\n * @returns\n * The folding range as Monaco editor folding range.\n */\nexport function toFoldingRange(foldingRange) {\n const result = {\n start: foldingRange.startLine + 1,\n end: foldingRange.endLine + 1\n };\n if (foldingRange.kind != null) {\n result.kind = { value: foldingRange.kind };\n }\n return result;\n}\n//# sourceMappingURL=foldingRange.js.map","/**\n * Convert a Monaco editor formatting options to an LSP formatting options.\n *\n * @param formattingOptions\n * The Monaco formatting options to convert.\n * @returns\n * The formatting options as an LSP formatting options.\n */\nexport function fromFormattingOptions(formattingOptions) {\n return {\n insertSpaces: formattingOptions.insertSpaces,\n tabSize: formattingOptions.tabSize\n };\n}\n/**\n * Convert an LSP formatting options to a Monaco editor formatting options.\n *\n * @param formattingOptions\n * The LSP formatting options to convert.\n * @returns\n * The formatting options as Monaco editor formatting options.\n */\nexport function toFormattingOptions(formattingOptions) {\n return {\n insertSpaces: formattingOptions.insertSpaces,\n tabSize: formattingOptions.tabSize\n };\n}\n//# sourceMappingURL=formattingOptions.js.map","import { fromMarkdownString, toMarkdownString } from './markdownString.js';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor hover to an LSP hover.\n *\n * @param hover\n * The Monaco hover to convert.\n * @returns\n * The hover as an LSP hover.\n */\nexport function fromHover(hover) {\n const result = {\n contents: fromMarkdownString(hover.contents[0])\n };\n if (hover.range) {\n result.range = fromRange(hover.range);\n }\n return result;\n}\n/**\n * Get value of a marked string.\n *\n * @param value\n * The marked string to get the value from.\n * @returns\n * The value of the marked string.\n */\nfunction getDeprecatedMarkupValue(value) {\n if (typeof value === 'string') {\n return { value };\n }\n return { value: `\\`\\`\\`${value.language}\\n${value.value}\\n\\`\\`\\`` };\n}\n/**\n * Convert LSP hover item contents to a Monaco markdown string.\n *\n * @param contents\n * The LSP hover contents to convert.\n * @returns\n * The hover contents as a Monaco markdown string.\n */\nfunction toHoverContents(contents) {\n if (typeof contents === 'string' || 'language' in contents) {\n return [getDeprecatedMarkupValue(contents)];\n }\n if (Array.isArray(contents)) {\n return contents.map(getDeprecatedMarkupValue);\n }\n return [toMarkdownString(contents)];\n}\n/**\n * Convert an LSP hover to a Monaco editor hover.\n *\n * @param hover\n * The LSP hover to convert.\n * @returns\n * The hover as Monaco editor hover.\n */\nexport function toHover(hover) {\n const result = {\n contents: toHoverContents(hover.contents)\n };\n if (hover.range) {\n result.range = toRange(hover.range);\n }\n return result;\n}\n//# sourceMappingURL=hover.js.map","/**\n * Convert a Monaco editor position to an LSP range.\n *\n * @param position\n * The Monaco position to convert.\n * @returns\n * The position as an LSP position.\n */\nexport function fromPosition(position) {\n return { character: position.column - 1, line: position.lineNumber - 1 };\n}\n/**\n * Convert an LSP position to a Monaco editor position.\n *\n * @param position\n * The LSP position to convert.\n * @returns\n * The position as Monaco editor position.\n */\nexport function toPosition(position) {\n return { lineNumber: position.line + 1, column: position.character + 1 };\n}\n//# sourceMappingURL=position.js.map","import { URI } from 'vscode-uri';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor link to an LSP document link.\n *\n * @param link\n * The Monaco link to convert.\n * @returns\n * The link as an LSP document link.\n */\nexport function fromLink(link) {\n const result = {\n range: fromRange(link.range)\n };\n if (link.tooltip != null) {\n result.tooltip = link.tooltip;\n }\n if (link.url != null) {\n result.target = String(link.url);\n }\n return result;\n}\n/**\n * Convert an LSP document link to a Monaco editor link.\n *\n * @param documentLink\n * The LSP document link to convert.\n * @returns\n * The document link as Monaco editor link.\n */\nexport function toLink(documentLink) {\n const result = {\n range: toRange(documentLink.range)\n };\n if (documentLink.tooltip != null) {\n result.tooltip = documentLink.tooltip;\n }\n if (documentLink.target != null) {\n result.url = URI.parse(documentLink.target);\n }\n return result;\n}\n//# sourceMappingURL=link.js.map","import { URI } from 'vscode-uri';\nimport { fromRange, toRange } from './range.js';\n/**\n * Convert a Monaco editor location link to an LSP location link.\n *\n * @param locationLink\n * The Monaco location link to convert.\n * @returns\n * The location link as an LSP location link.\n */\nexport function fromLocationLink(locationLink) {\n const result = {\n targetRange: fromRange(locationLink.range),\n targetSelectionRange: locationLink.targetSelectionRange\n ? fromRange(locationLink.targetSelectionRange)\n : fromRange(locationLink.range),\n targetUri: String(locationLink.uri)\n };\n if (locationLink.originSelectionRange) {\n result.originSelectionRange = fromRange(locationLink.originSelectionRange);\n }\n return result;\n}\n/**\n * Convert an LSP location link to a Monaco editor location link.\n *\n * @param locationLink\n * The LSP location link to convert.\n * @returns\n * The location link as Monaco editor location link.\n */\nexport function toLocationLink(locationLink) {\n const result = {\n range: toRange(locationLink.targetRange),\n targetSelectionRange: toRange(locationLink.targetSelectionRange),\n uri: URI.parse(locationLink.targetUri)\n };\n if (locationLink.originSelectionRange) {\n result.originSelectionRange = toRange(locationLink.originSelectionRange);\n }\n return result;\n}\n//# sourceMappingURL=locationLink.js.map","import { fromRange, toRange } from './range.js';\n/**\n * Convert Monaco editor selection ranges to an LSP selection ranges.\n *\n * @param selectionRanges\n * The Monaco selections range to convert.\n * @returns\n * The selection ranges as LSP selection range.\n */\nexport function fromSelectionRanges(selectionRanges) {\n let result;\n for (let index = selectionRanges.length - 1; index >= 0; index -= 1) {\n const parent = result;\n result = {\n range: fromRange(selectionRanges[index].range)\n };\n if (parent) {\n result.parent = parent;\n }\n }\n return result;\n}\n/**\n * Convert an LSP selection range to Monaco editor selection ranges.\n *\n * @param selectionRange\n * The LSP selection range to convert.\n * @returns\n * The selection range as Monaco editor selection ranges.\n */\nexport function toSelectionRanges(selectionRange) {\n const result = [];\n let current = selectionRange;\n while (current) {\n result.push({\n range: toRange(current.range)\n });\n current = current.parent;\n }\n return result;\n}\n//# sourceMappingURL=selectionRanges.js.map","/**\n * Register a marker data provider that can provide marker data for a model.\n *\n * @param monaco\n * The Monaco editor module.\n * @param languageSelector\n * The language id to register the provider for.\n * @param provider\n * The provider that can provide marker data.\n * @returns\n * A disposable.\n */\nexport function registerMarkerDataProvider(monaco, languageSelector, provider) {\n const listeners = new Map();\n const matchesLanguage = (languageId) => {\n if (languageSelector === '*') {\n return true;\n }\n return Array.isArray(languageSelector)\n ? languageSelector.includes(languageId)\n : languageSelector === languageId;\n };\n const doValidate = async (model) => {\n const versionId = model.getVersionId();\n const markers = await provider.provideMarkerData(model);\n // The model may have been updated disposed by the time marker data has been fetched.\n if (!model.isDisposed() &&\n versionId === model.getVersionId() &&\n matchesLanguage(model.getLanguageId())) {\n monaco.editor.setModelMarkers(model, provider.owner, markers ?? []);\n }\n };\n const onModelAdd = (model) => {\n if (!matchesLanguage(model.getLanguageId())) {\n return;\n }\n let handle;\n const onDidChangeContent = model.onDidChangeContent(() => {\n clearTimeout(handle);\n handle = setTimeout(() => {\n doValidate(model);\n }, 500);\n });\n listeners.set(model, {\n dispose() {\n clearTimeout(handle);\n onDidChangeContent.dispose();\n }\n });\n doValidate(model);\n };\n const onModelRemoved = (model) => {\n monaco.editor.setModelMarkers(model, provider.owner, []);\n const listener = listeners.get(model);\n if (listener) {\n listener.dispose();\n listeners.delete(model);\n }\n };\n /**\n * Call `doReset` on the provider if the model language matches.\n *\n * @param model\n * The model to reset\n * @param languageId\n * The language ID to check.\n */\n function doReset(model, languageId = model.getLanguageId()) {\n if (provider.doReset && matchesLanguage(languageId)) {\n provider.doReset(model);\n }\n }\n const onDidCreateModel = monaco.editor.onDidCreateModel(onModelAdd);\n const onWillDisposeModel = monaco.editor.onWillDisposeModel((model) => {\n onModelRemoved(model);\n doReset(model);\n });\n const onDidChangeModelLanguage = monaco.editor.onDidChangeModelLanguage(({ model, oldLanguage }) => {\n onModelRemoved(model);\n onModelAdd(model);\n doReset(model, oldLanguage);\n });\n for (const model of monaco.editor.getModels()) {\n onModelAdd(model);\n }\n return {\n dispose() {\n for (const model of listeners.keys()) {\n onModelRemoved(model);\n }\n onDidCreateModel.dispose();\n onWillDisposeModel.dispose();\n onDidChangeModelLanguage.dispose();\n },\n async revalidate() {\n await Promise.all(monaco.editor.getModels().map(doValidate));\n }\n };\n}\n//# sourceMappingURL=monaco-marker-data-provider.js.map","/**\n * Create a worker manager.\n *\n * A worker manager is an object which deals with Monaco based web workers, such as cleanups and\n * idle timeouts.\n *\n * @param monaco - The Monaco editor module.\n * @param options - The options of the worker manager.\n * @returns The worker manager.\n */\nexport function createWorkerManager(monaco, options) {\n let { createData, interval = 30_000, label, moduleId, stopWhenIdleFor = 120_000 } = options;\n let worker;\n let lastUsedTime = 0;\n let disposed = false;\n const stopWorker = () => {\n if (worker) {\n worker.dispose();\n worker = undefined;\n }\n };\n const intervalId = setInterval(() => {\n if (!worker) {\n return;\n }\n const timePassedSinceLastUsed = Date.now() - lastUsedTime;\n if (timePassedSinceLastUsed > stopWhenIdleFor) {\n stopWorker();\n }\n }, interval);\n return {\n dispose() {\n disposed = true;\n clearInterval(intervalId);\n stopWorker();\n },\n getWorker(...resources) {\n if (disposed) {\n throw new Error('Worker manager has been disposed');\n }\n lastUsedTime = Date.now();\n if (!worker) {\n worker = monaco.editor.createWebWorker({\n createData,\n label,\n moduleId,\n });\n }\n return worker.withSyncedResources(resources);\n },\n updateCreateData(newCreateData) {\n createData = newCreateData;\n stopWorker();\n },\n };\n}\n","// src/index.ts\nimport {\n fromCodeActionTriggerType,\n fromFormattingOptions,\n fromPosition,\n fromRange,\n toCodeAction,\n toCompletionList,\n toDocumentSymbol,\n toFoldingRange,\n toHover,\n toLink,\n toLocationLink,\n toMarkerData,\n toRange,\n toSelectionRanges,\n toTextEdit\n} from \"monaco-languageserver-types\";\nimport { registerMarkerDataProvider } from \"monaco-marker-data-provider\";\nimport { createWorkerManager } from \"monaco-worker-manager\";\nfunction configureMonacoYaml(monaco, options) {\n const createData = {\n completion: true,\n customTags: [],\n enableSchemaRequest: false,\n format: true,\n isKubernetes: false,\n hover: true,\n schemas: [],\n validate: true,\n yamlVersion: \"1.2\",\n ...options\n };\n monaco.languages.register({\n id: \"yaml\",\n extensions: [\".yaml\", \".yml\"],\n aliases: [\"YAML\", \"yaml\", \"YML\", \"yml\"],\n mimetypes: [\"application/x-yaml\"]\n });\n const workerManager = createWorkerManager(monaco, {\n label: \"yaml\",\n moduleId: \"monaco-yaml/yaml.worker\",\n createData\n });\n const diagnosticMap = /* @__PURE__ */ new WeakMap();\n const markerDataProvider = registerMarkerDataProvider(monaco, \"yaml\", {\n owner: \"yaml\",\n async provideMarkerData(model) {\n const worker = await workerManager.getWorker(model.uri);\n const diagnostics = await worker.doValidation(String(model.uri));\n diagnosticMap.set(model, diagnostics);\n return diagnostics == null ? void 0 : diagnostics.map(toMarkerData);\n },\n async doReset(model) {\n const worker = await workerManager.getWorker(model.uri);\n await worker.resetSchema(String(model.uri));\n }\n });\n const disposables = [\n workerManager,\n markerDataProvider,\n monaco.languages.registerCompletionItemProvider(\"yaml\", {\n triggerCharacters: [\" \", \":\"],\n async provideCompletionItems(model, position) {\n const wordInfo = model.getWordUntilPosition(position);\n const worker = await workerManager.getWorker(model.uri);\n const info = await worker.doComplete(String(model.uri), fromPosition(position));\n if (info) {\n return toCompletionList(info, {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: wordInfo.startColumn,\n endLineNumber: position.lineNumber,\n endColumn: wordInfo.endColumn\n }\n });\n }\n }\n }),\n monaco.languages.registerHoverProvider(\"yaml\", {\n async provideHover(model, position) {\n const worker = await workerManager.getWorker(model.uri);\n const info = await worker.doHover(String(model.uri), fromPosition(position));\n if (info) {\n return toHover(info);\n }\n }\n }),\n monaco.languages.registerDefinitionProvider(\"yaml\", {\n async provideDefinition(model, position) {\n const worker = await workerManager.getWorker(model.uri);\n const locationLinks = await worker.doDefinition(String(model.uri), fromPosition(position));\n return locationLinks == null ? void 0 : locationLinks.map(toLocationLink);\n }\n }),\n monaco.languages.registerDocumentSymbolProvider(\"yaml\", {\n displayName: \"yaml\",\n async provideDocumentSymbols(model) {\n const worker = await workerManager.getWorker(model.uri);\n const items = await worker.findDocumentSymbols(String(model.uri));\n return items == null ? void 0 : items.map(toDocumentSymbol);\n }\n }),\n monaco.languages.registerDocumentFormattingEditProvider(\"yaml\", {\n displayName: \"yaml\",\n async provideDocumentFormattingEdits(model) {\n const worker = await workerManager.getWorker(model.uri);\n const edits = await worker.format(String(model.uri));\n return edits == null ? void 0 : edits.map(toTextEdit);\n }\n }),\n monaco.languages.registerLinkProvider(\"yaml\", {\n async provideLinks(model) {\n const worker = await workerManager.getWorker(model.uri);\n const links = await worker.findLinks(String(model.uri));\n if (links) {\n return {\n links: links.map(toLink)\n };\n }\n }\n }),\n monaco.languages.registerCodeActionProvider(\"yaml\", {\n async provideCodeActions(model, range, context) {\n var _a;\n const worker = await workerManager.getWorker(model.uri);\n const codeActions = await worker.getCodeAction(String(model.uri), fromRange(range), {\n diagnostics: ((_a = diagnosticMap.get(model)) == null ? void 0 : _a.filter((diagnostic) => range.intersectRanges(toRange(diagnostic.range)))) || [],\n only: context.only ? [context.only] : void 0,\n triggerKind: fromCodeActionTriggerType(context.trigger)\n });\n if (codeActions) {\n return {\n actions: codeActions.map(toCodeAction),\n dispose() {\n }\n };\n }\n }\n }),\n monaco.languages.registerFoldingRangeProvider(\"yaml\", {\n async provideFoldingRanges(model) {\n const worker = await workerManager.getWorker(model.uri);\n const foldingRanges = await worker.getFoldingRanges(String(model.uri));\n return foldingRanges == null ? void 0 : foldingRanges.map(toFoldingRange);\n }\n }),\n monaco.languages.setLanguageConfiguration(\"yaml\", {\n comments: {\n lineComment: \"#\"\n },\n brackets: [\n [\"{\", \"}\"],\n [\"[\", \"]\"],\n [\"(\", \")\"]\n ],\n autoClosingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ],\n surroundingPairs: [\n { open: \"{\", close: \"}\" },\n { open: \"[\", close: \"]\" },\n { open: \"(\", close: \")\" },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" }\n ]\n }),\n monaco.languages.registerOnTypeFormattingEditProvider(\"yaml\", {\n autoFormatTriggerCharacters: [\"\\n\"],\n async provideOnTypeFormattingEdits(model, position, ch, formattingOptions) {\n const worker = await workerManager.getWorker(model.uri);\n const edits = await worker.doDocumentOnTypeFormatting(\n String(model.uri),\n fromPosition(position),\n ch,\n fromFormattingOptions(formattingOptions)\n );\n return edits == null ? void 0 : edits.map(toTextEdit);\n }\n }),\n monaco.languages.registerSelectionRangeProvider(\"yaml\", {\n async provideSelectionRanges(model, positions) {\n const worker = await workerManager.getWorker(model.uri);\n const selectionRanges = await worker.getSelectionRanges(\n String(model.uri),\n positions.map(fromPosition)\n );\n return selectionRanges == null ? void 0 : selectionRanges.map(toSelectionRanges);\n }\n })\n ];\n return {\n dispose() {\n for (const disposable of disposables) {\n disposable.dispose();\n }\n },\n async update(newOptions) {\n workerManager.updateCreateData(Object.assign(createData, newOptions));\n await markerDataProvider.revalidate();\n },\n getOptions() {\n return createData;\n }\n };\n}\nexport {\n configureMonacoYaml\n};\n//# sourceMappingURL=index.js.map\n","/**\n * Configure Monaco web workers for Vite-based environments.\n *\n * Import this module as a **side-effect** before any Monaco editor mounts.\n * It sets up web workers for all language services including\n * YAML (via `monaco-yaml`).\n *\n * @example\n * ```ts\n * // In your app's entry point or Storybook preview:\n * import '@omniviewdev/editors/setup';\n * ```\n */\nimport * as monaco from 'monaco-editor';\nimport { configureMonacoYaml } from 'monaco-yaml';\nimport { editorSchemas } from '../schemas';\n\n// Vite `?worker` imports — Vite bundles each worker with its dependencies,\n// transforming CJS→ESM so they work correctly in the browser Worker context.\nimport EditorWorker from './editor.worker?worker';\nimport JsonWorker from './json.worker?worker';\nimport TsWorker from './ts.worker?worker';\nimport CssWorker from './css.worker?worker';\nimport HtmlWorker from './html.worker?worker';\nimport YamlWorker from './yaml.worker?worker';\n\nconst DEBUG = false;\nfunction log(...args: unknown[]) {\n if (DEBUG) console.log('[monaco-setup]', ...args);\n}\nfunction warn(...args: unknown[]) {\n if (DEBUG) console.warn('[monaco-setup]', ...args);\n}\n\nlog('Module loaded — configuring MonacoEnvironment');\n\n// Idempotency guard — prevent double-initialization when the module is\n// imported more than once (e.g. HMR or duplicate bundles).\nconst SETUP_KEY = '__omniview_monaco_setup__';\nif ((globalThis as Record<string, unknown>)[SETUP_KEY]) {\n log('Already initialized — skipping duplicate setup');\n} else {\n(globalThis as Record<string, unknown>)[SETUP_KEY] = true;\n\n// ---------------------------------------------------------------------------\n// 1. MonacoEnvironment.getWorker — maps language labels to bundled workers\n// ---------------------------------------------------------------------------\n\nconst existingEnv = self.MonacoEnvironment ?? {};\nself.MonacoEnvironment = {\n ...existingEnv,\n getWorker(_workerId: string, label: string) {\n log(`getWorker called — label=\"${label}\", workerId=\"${_workerId}\"`);\n\n let worker: Worker;\n try {\n switch (label) {\n case 'yaml':\n worker = new YamlWorker();\n break;\n case 'json':\n worker = new JsonWorker();\n break;\n case 'typescript':\n case 'javascript':\n worker = new TsWorker();\n break;\n case 'css':\n case 'scss':\n case 'less':\n worker = new CssWorker();\n break;\n case 'html':\n case 'handlebars':\n case 'razor':\n worker = new HtmlWorker();\n break;\n default:\n worker = new EditorWorker();\n break;\n }\n log(`Worker created for \"${label}\" — instanceof Worker: ${worker instanceof Worker}`);\n } catch (err) {\n warn(`Failed to create worker for \"${label}\":`, err);\n throw err;\n }\n\n worker.onerror = (e) => {\n warn(`Worker \"${label}\" error:`, e.message, '| filename:', e.filename);\n };\n\n worker.addEventListener('message', (e) => {\n log(`Worker \"${label}\" first message:`, JSON.stringify(e.data).slice(0, 200));\n }, { once: true });\n\n return worker;\n },\n};\n\nlog('MonacoEnvironment set');\n\n// ---------------------------------------------------------------------------\n// 3. Configure monaco-yaml ONCE at startup with empty schemas\n// ---------------------------------------------------------------------------\n\ntry {\n const yamlHandle = configureMonacoYaml(monaco, {\n enableSchemaRequest: false,\n schemas: [],\n });\n log('configureMonacoYaml succeeded — handle keys:', Object.keys(yamlHandle));\n editorSchemas._setYamlHandle(yamlHandle as unknown as Parameters<typeof editorSchemas._setYamlHandle>[0]);\n log('YAML handle injected into EditorSchemaRegistry');\n} catch (err) {\n // Surface YAML config errors so they are visible in the console even\n // when DEBUG is off — a silent failure here breaks all YAML completions.\n console.error('[monaco-setup] configureMonacoYaml FAILED:', err);\n}\n\n} // end idempotency guard\n\n// Re-export for consumers that need the function form\nexport function setupMonacoWorkers(): void {\n // No-op — importing this module is sufficient. The side effects above\n // have already configured everything. This export exists so consumers\n // can call it explicitly if they prefer that pattern.\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","reactCompilerRuntime_production","size","reactCompilerRuntime_development","compilerRuntimeModule","getEditorThemeRoot","element","document","closest","documentElement","getComputedThemeStyle","root","getComputedStyle","getComputedToken","token","getPropertyValue","trim","useEditorTheme","$","_c","activeTheme","useTheme","t0","id","base","registration","HEX_COLOR","SERIALIZED_RGB","byteToHex","Math","max","min","round","toString","padStart","serializedColorToHex","color","trimmed","test","match","alpha","undefined","Number","rgb","createMonacoColorNormalizer","normalize","dispose","surface","ownerDocument","createElement","width","height","setAttribute","style","cssText","append","context","direct","computed","serialized","getContext","willReadFrequently","clearRect","fillStyle","fillRect","pixel","getImageData","data","remove","getBaseTheme","mode","tokenRule","fgVar","styles","normalizer","styleVar","styleDefault","foreground","entry","slice","fontStyle","filterColors","colors","result","Object","entries","buildMonacoTheme","rule","rules","filter","inherit","OV_MONACO_THEME","EXTENSION_MAP","js","jsx","ts","tsx","py","rb","rs","go","java","kt","kts","cs","fs","swift","c","cpp","cc","cxx","h","hpp","css","scss","less","html","htm","xml","json","yaml","yml","md","mdx","sql","sh","bash","zsh","ps1","dockerfile","tf","hcl","toml","ini","lua","r","dart","php","pl","ex","exs","erl","hs","scala","clj","graphql","gql","proto","vue","svelte","detectLanguage","filename","lower","toLowerCase","split","pop","ext","log","args","globMatch","pattern","str","pi","si","starPi","starSi","length","EditorSchemaRegistryImpl","_schemas","Map","_listeners","Set","_yamlHandle","schemas","Array","from","values","_setYamlHandle","handle","register","schema","uri","fileMatch","set","_notify","registerAll","map","s","unregister","deleted","delete","clear","getSchemasForUri","modelUri","some","isYamlReady","onChange","listener","add","applyYamlSchemas","mapped","description","update","enableSchemaRequest","applyJsonSchemas","monacoInstance","m","diagnosticsOptions","validate","jsonDefaults","languages","setDiagnosticsOptions","debugState","JSON","stringify","fn","err","console","error","editorSchemas","cn","parts","Boolean","join","getOrCreateModel","language","path","monaco","Uri","parse","existing","editor","getModel","createModel","severityToString","severity","MarkerSeverity","Error","Warning","Info","markersTodiagnostics","model","getModelMarkers","resource","message","startLineNumber","startColumn","endLineNumber","endColumn","source","code","CodeEditor","forwardRef","onMount","onMountProp","onDiagnostics","onCursorChange","readOnly","lineNumbers","minimap","wordWrap","tabSize","diagnostics","quickSuggestions","syntaxHighlighting","bordered","className","ref","theme","editorRef","useRef","containerRef","isReady","setIsReady","useState","preventTriggerChangeEvent","subscriptionRef","markerSubscriptionRef","cursorSubscriptionRef","resolvedLanguage","displayValue","useMemo","useEffect","current","defineTheme","setTheme","typescript","typescriptDefaults","setCompilerOptions","jsxFactory","allowNonTsExtensions","allowJs","target","create","enabled","other","strings","comments","scrollBeyondLastLine","automaticLayout","fontSize","fontFamily","renderValidationDecorations","setModel","getOption","EditorOption","setValue","getValue","executeEdits","range","getFullModelRange","text","forceMoveMarkers","pushUndoStop","updateOptions","lang","setModelLanguage","prevFilenameRef","currentModel","currentValue","newModel","onDidChangeModelContent","onDidChangeMarkers","uris","u","onDidChangeCursorPosition","e","lineNumber","position","column","useImperativeHandle","getEditor","getMonaco","focus","getDiagnostics","getDebugState","markers","diagnosticsBySeverity","warning","info","hint","diagnosticsBySource","sev","src","matchingSchemas","pos","getPosition","sels","getSelections","modelLanguage","getLanguageId","modelLineCount","getLineCount","modelContentLength","getValueLength","modelVersionId","getVersionId","modelEOL","getEOL","cursorPosition","selections","diagnosticsTotal","registeredSchemaCount","isReadOnly","isFocused","hasWidgetFocus","totalModelCount","getModels","registeredLanguageCount","getLanguages","yamlHandleSet","toDim","v","Root","Inner","DiffViewer","original","modified","createDiffEditor","renderSideBySide","originalModel","modifiedModel","origModel","modifiedEditor","getModifiedEditor","models","buildXtermTheme","fallback","background","cursor","selectionBackground","selectionForeground","black","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","debounce","ms","timer","run","clearTimeout","setTimeout","cancel","Terminal","onData","onBinaryData","onResize","onSignal","onError","onClose","onReady","onBell","onTitleChange","onKey","onSelectionChange","onLineFeed","onScroll","onWriteParsed","fontWeight","fontWeightBold","scrollback","cursorBlink","cursorStyle","cursorWidth","lineHeight","letterSpacing","drawBoldTextInBrightColors","convertEol","allowTransparency","macOptionIsMeta","macOptionClickForcesSelection","linkHandling","disableStdin","customKeyEventHandler","autoFocus","renderer","rows","initialRows","cols","initialCols","screenReaderMode","minimumContrastRatio","termRef","fitAddonRef","searchAddonRef","serializeAddonRef","addonsRef","observerRef","debouncedFitRef","windowResizeCleanupRef","callbacksRef","fit","useCallback","addon","write","t","writeln","blur","getDimensions","reset","scrollToBottom","findNext","term","options","findPrevious","clearSearch","clearDecorations","getSelection","hasSelection","selectAll","clearSelection","scrollToLine","line","scrollUp","lines","scrollLines","scrollDown","paste","getBufferContent","serialize","container","disposed","init","fonts","ready","XTerminal","FitAddon","SearchAddon","SerializeAddon","Unicode11Addon","Promise","all","xtermTheme","termOptions","allowProposedApi","attachCustomKeyEventHandler","loadedAddons","fitAddon","searchAddon","serializeAddon","unicode11Addon","loadAddon","push","unicode","activeVersion","WebLinksAddon","webLinksAddon","open","WebglAddon","webglAddon","onContextLoss","onBinary","title","event","debouncedFit","resizeObserver","ResizeObserver","observe","handleWindowResize","window","addEventListener","removeEventListener","catch","String","disconnect","REMARK_PLUGINS","remarkGfm","ReactMarkdown","lazy","hastText","isArray","DetailsAccordion","summaryText","itemId","useId","t1","Accordion","markdownComponents","pre","exec","replace","includes","CodeBlock","Code","table","Table","thead","tbody","tr","th","td","a","href","rest","Link","blockquote","Blockquote","hr","Separator","details","summaryNode","find","tagName","body","Children","forEach","child","summary","input","checked","disabled","Checkbox","MarkdownPreview","content","allowHtml","t2","t3","Symbol","for","Loading","t4","Suspense","MarkdownContent","t5","sanitizeSchema","defaultSchema","attributes","rehypeRaw","rehypeSanitize","rehypePlugins","getCommandKey","cmd","fuzzyMatch","query","q","qi","i","matchesCommand","label","group","NO_COMMANDS","PaletteInput","inputRef","listId","useCommandListConfig","store","useCommandListStoreContext","activeKey","useSyncExternalStore","subscribe","getSnapshot","activeId","getElementById","scrollIntoView","block","useLayoutEffect","CommandList","CommandPalette","commands","onSelect","placeholder","loading","dialogRef","composingRef","failed","enabledCommands","visibleCommands","groups","labels","previous","command","grouped","groupBy","get","groupLabel","dialog","doc","opener","activeElement","preventScroll","HTMLElement","isConnected","contains","Overlay","stopPropagation","button","Element","preventDefault","nativeEvent","isComposing","keyCode","HTMLButtonElement","controls","querySelectorAll","first","last","active","shiftKey","jsxs","meta","icon","shortcut","Results","Message","Fragment","getType","formatValue","shouldExpand","defaultExpanded","depth","matchesSearch","isObjectRef","subtreeMatches","ancestors","cache","has","childAncestors","TreeNode","nodeKey","searchQuery","isLast","searchCache","isExpandable","isCircular","expanded","setExpanded","searchExpandedRef","preSearchExpandedRef","hasDescendantMatch","t6","t7","bb0","t8","bb1","t9","_temp","toggle","t10","isHighlighted","preview","t11","RowHighlight","t12","Row","t13","t14","t15","t16","t17","t18","t19","Chevron","ChevronExpanded","ChevronSpacer","t20","Key","t21","Colon","t22","Preview","Value","t23","Comma","t24","t25","t26","v_0","Node","prev","EMPTY_ANCESTORS","WeakSet","ObjectInspector","format","searchable","copyable","setSearchQuery","handleCopy","toYaml","safeJsonStringify","navigator","clipboard","writeText","rootAncestors","WeakMap","Toolbar","SearchInput","CopyButton","Tree","stack","_key","val","needsYamlQuoting","quoteYaml","yamlScalar","indent","prefix","repeat","childStack","item","trimStart","safeKey","CEL_LANGUAGE_ID","initialized","registerCelLanguage","extensions","aliases","setLanguageConfiguration","lineComment","brackets","autoClosingPairs","close","notIn","surroundingPairs","wordPattern","setMonarchTokensProvider","keywords","tokenizer","cases","single","double","tripleSingle","tripleDouble","sourcePosition","byteOffset","offset","utf8ToUtf16","lineStart","RangeError","sourceOffset","isSafeInteger","start","end","utf16ToUtf8","completionMatches","candidate","index","needle","toLocaleLowerCase","character","latestRequestGate","begin","abort","AbortController","operation","signal","aborted","automaticCompletion","callback","delay","schedule","delayMs","immediate","attachCelBridge","getState","onStatus","debounceMs","completionGate","checkGate","hoverGate","signatureGate","composing","generation","completionPermit","completionDismissed","localEdit","markerOwner","selector","scheme","blocked","state","isDisposed","availability","status","dismissSemanticWidgets","trigger","getContribution","_hideWidgets","unit","execute","service","gate","isCancellationRequested","modelVersion","requestGeneration","subscription","onCancellationRequested","response","contextKey","version","documentVersion","setModelMarkers","severities","Hint","diagnostic","completion","disabledReason","editRange","edit","getValueInRange","filterText","kinds","field","CompletionItemKind","Field","operator","Operator","parameter","Variable","function","Function","detail","kind","documentation","condition","isTrusted","sortText","insertText","insertTextRules","insertTextFormat","CompletionItemInsertTextRule","InsertAsSnippet","scheduler","check","then","request","hasTextFocus","subscriptions","registerCompletionItemProvider","provideCompletionItems","suggestions","triggerKind","completions","maxSuggestions","suggestion","incomplete","registerHoverProvider","provideHover","hover","contents","registerSignatureHelpProvider","signatureHelpTriggerCharacters","signatureHelpRetriggerCharacters","provideSignatureHelp","signature","activeSignature","activeParameter","parameters","signatures","onDidCompositionStart","onDidCompositionEnd","onKeyDown","KeyCode","Escape","addAction","precondition","keybindings","KeyMod","CtrlCmd","Space","WinCtrl","Enter","onSubmit","refresh","sameContext","onDocumentClose","acknowledgedEdit","sameDocument","suggestOnTriggerCharacters","wordBasedSuggestions","parameterHints","suggest","showWords","showStatusBar","selectionMode","acceptSuggestionOnEnter","tabCompletion","fixedOverflowWidgets","padding","top","bottom","LazyCodeEditor","CodeEditor$1","module","default","nextEditorId","CelQueryEditor","minHeight","maxHeight","latest","setHeight","setMessage","instance","setInstance","bridgeRef","bridge","updateHeight","getContentHeight","sizeSubscription","onDidContentSizeChange","ariaLabel","mount","Label","Surface","Placeholder","LIB","n","o","f","l","g","I","d","w","b","p","y","C","A","x","_","URI","Utils","toMarkerSeverity","toMarkerTag","tag","fromRange","toRange","toRelatedInformation","relatedInformation","toMarkerData","markerData","toTextEdit","textEdit","toWorkspaceFileEditOptions","toWorkspaceFileEdit","workspaceFileEdit","toWorkspaceTextEdit","versionId","toWorkspaceEdit","workspaceEdit","_a","edits","textEdits","documentChange","toCodeAction","codeAction","toCommand","toCompletionItemKind","toCompletionItemTag","toMarkdownString","markupContent","toSingleEditOperation","toCompletionItemRange","toCompletionItem","completionItem","_b","_d","_e","itemDefaults","commitCharacters","insertTextMode","toCompletionList","completionList","toSymbolKind","symbolKind","toSymbolTag","symbolTag","toDocumentSymbol","documentSymbol","toFoldingRange","foldingRange","fromFormattingOptions","formattingOptions","getDeprecatedMarkupValue","toHoverContents","toHover","fromPosition","toLink","documentLink","toLocationLink","locationLink","toSelectionRanges","selectionRange","registerMarkerDataProvider","languageSelector","provider","listeners","matchesLanguage","languageId","doValidate","onModelAdd","onDidChangeContent","onModelRemoved","doReset","onDidCreateModel","onWillDisposeModel","onDidChangeModelLanguage","oldLanguage","createWorkerManager","createData","interval","moduleId","stopWhenIdleFor","worker","lastUsedTime","stopWorker","intervalId","resources","newCreateData","configureMonacoYaml","workerManager","diagnosticMap","markerDataProvider","disposables","wordInfo","locationLinks","items","links","codeActions","foldingRanges","ch","positions","selectionRanges","disposable","newOptions","warn","SETUP_KEY","globalThis","existingEnv","self","MonacoEnvironment","getWorker","_workerId","YamlWorker","JsonWorker","TsWorker","CssWorker","HtmlWorker","EditorWorker","Worker","onerror","once","yamlHandle","setupMonacoWorkers"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51]}