@knime/kds-code-editor 2.6.3

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../styles/dist/tokens/ts/font.js","../src/CodeEditor/enums.ts","../src/CodeEditor/monacoEnvironment.ts","../src/CodeEditor/KdsCodeEditor.vue","../src/CodeEditor/KdsCodeEditor.vue"],"sourcesContent":["/**\n * Do not edit directly, this file was auto-generated\n * from the design token sources in src/tokens.\n */\nexport const font = {\n base: {\n display: {\n xsmall: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 18, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 18px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-display-xsmall)\",\n },\n },\n small: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 20, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 20px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-display-small)\",\n },\n },\n medium: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 24, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 24px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-display-medium)\",\n },\n },\n large: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 32, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 32px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-display-large)\",\n },\n },\n xlarge: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 40, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 40px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-display-xlarge)\",\n },\n },\n },\n title: {\n xsmall: {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 10, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 10px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-xsmall)\",\n },\n },\n small: {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 12px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-small)\",\n },\n },\n \"small-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 12px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-small-strong)\",\n },\n },\n medium: {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 14, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 14px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-medium)\",\n },\n },\n \"medium-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 14, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 14px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-medium-strong)\",\n },\n },\n large: {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 16px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-large)\",\n },\n },\n \"large-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 16px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-title-large-strong)\",\n },\n },\n },\n body: {\n small: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-small)\",\n },\n },\n \"small-italic\": {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n fontStyle: \"italic\",\n css: {\n value: \"italic 400 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-small-italic)\",\n },\n },\n \"small-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-small-strong)\",\n },\n },\n \"small-strong-italic\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n fontStyle: \"italic\",\n css: {\n value: \"italic 700 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-small-strong-italic)\",\n },\n },\n medium: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 14, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 14px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-medium)\",\n },\n },\n \"medium-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 14, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 14px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-medium-strong)\",\n },\n },\n large: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 16px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-large)\",\n },\n },\n \"large-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 16px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-large-strong)\",\n },\n },\n xlarge: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 20, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 20px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-base-body-xlarge)\",\n },\n },\n },\n subtext: {\n xsmall: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 9, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 9px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-subtext-xsmall)\",\n },\n },\n small: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 10, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 10px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-subtext-small)\",\n },\n },\n medium: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 12px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-subtext-medium)\",\n },\n },\n },\n interactive: {\n \"xsmall-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 11, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 11px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-xsmall-strong)\",\n },\n },\n small: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 12px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-small)\",\n },\n },\n \"small-italic\": {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: \"normal\",\n fontStyle: \"italic\",\n css: {\n value: \"italic 400 12px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-small-italic)\",\n },\n },\n \"small-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 12px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-small-strong)\",\n },\n },\n medium: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 14, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 14px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-medium)\",\n },\n },\n \"medium-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 14, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 14px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-medium-strong)\",\n },\n },\n large: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 16px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-large)\",\n },\n },\n \"large-strong\": {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 16px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-base-interactive-large-strong)\",\n },\n },\n },\n code: {\n xsmall: {\n fontFamily: \"Roboto Mono\",\n fontWeight: 400,\n fontSize: { value: 10, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 10px/normal 'Roboto Mono', monospace\",\n variable: \"var(--kds-font-base-code-xsmall)\",\n },\n },\n small: {\n fontFamily: \"Roboto Mono\",\n fontWeight: 400,\n fontSize: { value: 11, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 11px/normal 'Roboto Mono', monospace\",\n variable: \"var(--kds-font-base-code-small)\",\n },\n },\n },\n },\n workflow: {\n annotation: {\n headline: {\n H1: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 36, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 36px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h1)\",\n },\n },\n H2: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 30, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 30px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h2)\",\n },\n },\n H3: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 26, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 26px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h3)\",\n },\n },\n H4: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 22, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 22px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h4)\",\n },\n },\n H5: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 16px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h5)\",\n },\n },\n \"H1-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 36, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 36px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h1-italic)\",\n },\n },\n \"H2-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 30, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 30px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h2-italic)\",\n },\n },\n \"H3-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 26, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 26px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h3-italic)\",\n },\n },\n \"H4-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 22, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 22px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h4-italic)\",\n },\n },\n \"H5-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 16px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h5-italic)\",\n },\n },\n H6: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 13px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h6)\",\n },\n },\n \"H6-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 13px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-headline-h6-italic)\",\n },\n },\n },\n body: {\n small: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 400,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 13px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-body-small)\",\n },\n },\n \"small-italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 400,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n fontStyle: \"italic\",\n css: {\n value: \"italic 400 13px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-body-small-italic)\",\n },\n },\n \"small-strong\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 13px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-body-small-strong)\",\n },\n },\n \"small-strong-Italic\": {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n fontStyle: \"italic\",\n css: {\n value: \"italic 700 13px/1.5 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-annotation-body-small-strong-italic)\",\n },\n },\n },\n },\n node: {\n name: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n css: {\n value: \"700 13px 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-node-name)\",\n },\n },\n label: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n css: {\n value: \"400 12px 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-node-label)\",\n },\n },\n status: {\n fontFamily: \"Roboto Condensed\",\n fontWeight: 400,\n fontSize: { value: 8, unit: \"px\" },\n css: {\n value: \"400 8px 'Roboto Condensed', sans-serif\",\n variable: \"var(--kds-font-workflow-node-status)\",\n },\n },\n },\n },\n dataapp: {\n H1: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 36, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 36px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-h1)\",\n },\n },\n H2: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 30, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 30px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-h2)\",\n },\n },\n H3: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 26, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 26px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-h3)\",\n },\n },\n H4: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 22, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 22px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-h4)\",\n },\n },\n H5: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 16, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 16px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-h5)\",\n },\n },\n H6: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 13px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-h6)\",\n },\n },\n body: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 13, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 13px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-body)\",\n },\n },\n \"body-small\": {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 10, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"700 10px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-dataapp-body-small)\",\n },\n },\n },\n chart: {\n title: {\n fontFamily: \"Roboto\",\n fontWeight: 700,\n fontSize: { value: 18, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"700 18px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-title)\",\n },\n },\n subtitle: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-subtitle)\",\n },\n },\n \"axis-name\": {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-axis-name)\",\n },\n },\n \"axis-label\": {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 11, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 11px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-axis-label)\",\n },\n },\n legend: {\n fontFamily: \"Roboto\",\n fontWeight: 500,\n fontSize: { value: 11, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"500 11px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-legend)\",\n },\n },\n tooltip: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 12, unit: \"px\" },\n lineHeight: 1.5,\n css: {\n value: \"400 12px/1.5 Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-tooltip)\",\n },\n },\n label: {\n fontFamily: \"Roboto\",\n fontWeight: 400,\n fontSize: { value: 10, unit: \"px\" },\n lineHeight: \"normal\",\n css: {\n value: \"400 10px/normal Roboto, sans-serif\",\n variable: \"var(--kds-font-chart-label)\",\n },\n },\n },\n};\n","export const kdsCodeEditorState = {\n DEFAULT: \"default\",\n ERROR: \"error\",\n WARNING: \"warning\",\n} as const;\n\nexport const kdsCodeEditorStates = Object.values(kdsCodeEditorState);\n","// Register custom Monarch language definitions for languages not built into\n// Monaco. Registered at import time (not inside `setupMonacoEnvironment`) so\n// they are also available when the host app defines its own MonacoEnvironment.\nimport \"./tomlLanguage\";\n\nimport { editor } from \"monaco-editor\";\n\n// Monaco measures character widths when an editor is created. If the web font\n// (\"Roboto Mono\") finishes loading afterwards, the stale metrics of the\n// fallback font break cursor placement and selection rendering — so force a\n// re-measure once all fonts are loaded.\ndocument.fonts?.ready.then(() => {\n editor.remeasureFonts();\n});\n\n// Setup Monaco Environment to load web workers for different languages.\n// Monaco's getWorker supports returning a Promise<Worker>, so language-specific\n// workers are bundled as separate chunks and loaded on demand.\nexport const setupMonacoEnvironment = () => {\n if (self.MonacoEnvironment) {\n return;\n }\n self.MonacoEnvironment = {\n getWorker: async (_workerId: string, label: string) => {\n if (label === \"json\") {\n const { default: JSONWorker } =\n await import(\"monaco-editor/esm/vs/language/json/json.worker?worker&inline\");\n return new JSONWorker();\n }\n const { default: EditorWorker } =\n await import(\"monaco-editor/esm/vs/editor/editor.worker?worker&inline\");\n return new EditorWorker();\n },\n };\n};\n","<script setup lang=\"ts\">\nimport {\n computed,\n onMounted,\n onUnmounted,\n ref,\n useId,\n useTemplateRef,\n watch,\n} from \"vue\";\nimport { useClipboard } from \"@vueuse/core\";\nimport { KeyCode, editor } from \"monaco-editor\";\n\nimport {\n KdsButton,\n KdsMenuButton,\n KdsProgressButton,\n KdsSubText,\n KdsToggleButton,\n useKdsDarkMode,\n} from \"@knime/kds-components\";\nimport { font } from \"@knime/kds-styles/tokens\";\n\nimport { kdsCodeEditorState } from \"./enums\";\nimport { setupMonacoEnvironment } from \"./monacoEnvironment\";\nimport type { KdsCodeEditorProps } from \"./types\";\n\nsetupMonacoEnvironment();\n\nconst {\n language = \"plaintext\",\n languageLabel = undefined,\n hideHeader = false,\n state = kdsCodeEditorState.DEFAULT,\n overviewRuler = false,\n readOnly = false,\n subText = undefined,\n copyable = true,\n editorActions = undefined,\n minRows = undefined,\n maxRows = undefined,\n} = defineProps<KdsCodeEditorProps>();\n\nconst modelValue = defineModel<string>({ default: \"\" });\n\n// Links the sub-text to the editor's text input via `aria-describedby`.\nconst subTextId = useId();\n\nconst container = useTemplateRef(\"editor-container\");\nlet editorInstance: editor.IStandaloneCodeEditor | undefined;\n\n// Whether the Monaco code area (not a header button) currently has focus.\nconst isEditorFocused = ref(false);\n\nconst headerLabel = computed(() => languageLabel ?? language.toUpperCase());\n\n// Accessible name for Monaco's focusable element (`<label for>` cannot be\n// used: Monaco overrides it with its own `aria-label`, and in EditContext\n// mode the focusable element is a non-labelable `<div>`). Also announces the\n// read-only state and the non-standard keyboard exit (WCAG 2.1.2).\nconst editorAriaLabel = computed(\n () =>\n `${headerLabel.value} code editor${readOnly ? \", read-only\" : \"\"}. ` +\n \"Press Escape followed by Tab to move focus out of the editor.\",\n);\n\n// Sizing modes:\n// - neither `minRows` nor `maxRows` set → fill the container's height.\n// - otherwise the editor grows with its content (floored at `minRows`):\n// - `maxRows` unset → grows with all content, avoiding nested scrollbars.\n// - `maxRows` set → caps there and scrolls past it.\nconst fillContainer = computed(\n () => minRows === undefined && maxRows === undefined,\n);\n\nconst INITIAL_LINE_HEIGHT = 18; // Default line height in Monaco Editor\nconst EXTRA_PADDING = 3; // Additional padding to prevent scrollbar\nconst DEFAULT_OVERVIEW_RULER_LANES = 3; // Monaco default\nconst lineHeight = ref(INITIAL_LINE_HEIGHT);\nconst contentLineCount = ref(1);\nconst editorHeight = computed(() => {\n if (fillContainer.value) {\n return undefined;\n }\n const floor = Math.max(minRows ?? 1, 1);\n const cap = maxRows ?? Infinity;\n const rows = Math.min(cap, Math.max(floor, contentLineCount.value));\n return `${lineHeight.value * rows + EXTRA_PADDING}px`;\n});\n\n// Monaco is styled via JS options, not CSS, so the KDS code typography is\n// passed to `editor.create` from the design-token constants.\nconst codeFont = font.base.code.small;\n\n// Update the editor theme based on the current dark mode setting\nconst MONACO_THEME_LIGHT = \"vs-light\";\nconst MONACO_THEME_DARK = \"vs-dark\";\nconst getMonacoTheme = (isDark: boolean) =>\n isDark ? MONACO_THEME_DARK : MONACO_THEME_LIGHT;\n\nconst { isDarkMode } = useKdsDarkMode();\n\n// Monaco's focusable element carries `role=\"textbox\"`: a `<div>` in\n// EditContext mode (Chromium), the fallback `<textarea>` elsewhere. The\n// additional `<textarea>` present in EditContext mode is only a hidden IME\n// helper that assistive technology never sees.\nconst getEditorInputElement = () =>\n container.value?.querySelector('[role=\"textbox\"]');\n\n// Monaco manages `aria-label` (via the `ariaLabel` option) but not\n// `aria-describedby` / `aria-invalid`, so those are maintained here.\nconst syncEditorInputAria = () => {\n const input = getEditorInputElement();\n if (!input) {\n return;\n }\n if (subText) {\n input.setAttribute(\"aria-describedby\", subTextId);\n } else {\n input.removeAttribute(\"aria-describedby\");\n }\n if (state === kdsCodeEditorState.ERROR) {\n input.setAttribute(\"aria-invalid\", \"true\");\n } else {\n input.removeAttribute(\"aria-invalid\");\n }\n};\n\nwatch([() => subText, () => state], syncEditorInputAria);\n\n// Copy-to-clipboard handling\nconst { copy, copied } = useClipboard({ copiedDuring: 2000 });\nconst copyButtonAriaLabel = computed(() =>\n copied.value\n ? `Copied ${headerLabel.value} to clipboard`\n : `Copy ${headerLabel.value} to clipboard`,\n);\nconst copyToClipboard = () => {\n // Copy unconditionally — even an empty editor gives \"Copied\" feedback\n // instead of a dead button.\n copy(editorInstance?.getModel()?.getValue() ?? \"\");\n};\n\nonMounted(() => {\n if (!container.value) {\n return;\n }\n editorInstance = editor.create(container.value, {\n value: modelValue.value,\n language,\n automaticLayout: true,\n minimap: { enabled: false },\n overviewRulerLanes: overviewRuler ? DEFAULT_OVERVIEW_RULER_LANES : 0,\n scrollBeyondLastLine: false,\n lineNumbersMinChars: 3,\n fontFamily: `\"${codeFont.fontFamily}\", monospace`,\n fontWeight: `${codeFont.fontWeight}`,\n fontSize: codeFont.fontSize.value,\n // Keep suggest / hover widgets visible when the editor sits in a clipping\n // container (the editor wrapper itself uses `overflow: hidden`).\n fixedOverflowWidgets: true,\n // Don't swallow wheel events once the editor cannot scroll any further,\n // so the surrounding dialog / page continues to scroll.\n scrollbar: { alwaysConsumeMouseWheel: false },\n readOnly,\n theme: getMonacoTheme(isDarkMode.value),\n ariaLabel: editorAriaLabel.value,\n // Standalone Monaco cannot detect screen readers in the browser; with the\n // default \"auto\" it would replace `ariaLabel` with a \"The editor is not\n // accessible at this time\" message and skip the screen-reader content\n // mirror. Force it on so assistive technology always works.\n accessibilitySupport: \"on\",\n });\n\n syncEditorInputAria();\n\n lineHeight.value = editorInstance.getOption(editor.EditorOption.lineHeight);\n contentLineCount.value = editorInstance.getModel()?.getLineCount() ?? 1;\n\n editorInstance.onDidChangeModelContent(() => {\n const value = editorInstance?.getModel()?.getValue() ?? \"\";\n contentLineCount.value = editorInstance?.getModel()?.getLineCount() ?? 1;\n if (value !== modelValue.value) {\n modelValue.value = value;\n }\n });\n\n // Accessibility\n let tabFocusArmed = false;\n const setTabFocus = (armed: boolean) => {\n if (tabFocusArmed !== armed) {\n tabFocusArmed = armed;\n editorInstance?.updateOptions({ tabFocusMode: armed });\n }\n };\n // Keys that must not disarm tab-focus mode: Tab itself (so the armed Tab\n // can leave the editor) and lone modifiers (so Escape → Shift+Tab works).\n const tabFocusNeutralKeys = [\n KeyCode.Tab,\n KeyCode.Shift,\n KeyCode.Ctrl,\n KeyCode.Alt,\n KeyCode.Meta,\n ];\n editorInstance.onKeyDown((event) => {\n if (event.keyCode === KeyCode.Escape) {\n setTabFocus(true);\n } else if (!tabFocusNeutralKeys.includes(event.keyCode)) {\n setTabFocus(false);\n }\n });\n editorInstance.onDidFocusEditorText(() => {\n setTabFocus(false);\n isEditorFocused.value = true;\n });\n editorInstance.onDidBlurEditorText(() => {\n isEditorFocused.value = false;\n });\n});\n\nwatch(isDarkMode, (isDark) => {\n if (editorInstance) {\n editorInstance.updateOptions({ theme: getMonacoTheme(isDark) });\n }\n});\n\nwatch(\n () => readOnly,\n (isReadOnly) => {\n editorInstance?.updateOptions({ readOnly: isReadOnly });\n },\n);\n\nwatch(editorAriaLabel, (ariaLabel) => {\n editorInstance?.updateOptions({ ariaLabel });\n});\n\nwatch(\n () => overviewRuler,\n (enabled) => {\n editorInstance?.updateOptions({\n overviewRulerLanes: enabled ? DEFAULT_OVERVIEW_RULER_LANES : 0,\n });\n },\n);\n\nwatch(\n () => language,\n (newLanguage) => {\n const model = editorInstance?.getModel();\n if (model) {\n editor.setModelLanguage(model, newLanguage);\n }\n },\n);\n\n// External `modelValue` updates are applied as regular, undoable edits —\n// `setValue` would clear the undo stack, so a form reset or flow-variable\n// overwrite would destroy the user's typing history.\nwatch(modelValue, (newValue) => {\n const model = editorInstance?.getModel();\n if (model && newValue !== model.getValue()) {\n model.pushStackElement();\n model.pushEditOperations(\n [],\n [{ range: model.getFullModelRange(), text: newValue ?? \"\" }],\n () => null,\n );\n }\n});\n\nonUnmounted(() => {\n editorInstance?.dispose();\n});\n\ndefineExpose({\n /** The underlying Monaco editor instance, available after mount. */\n getEditor: () => editorInstance,\n});\n</script>\n\n<template>\n <div :class=\"['kds-code-editor', { fill: fillContainer }]\">\n <div :class=\"['editor', state, { focused: isEditorFocused }]\">\n <div v-if=\"!hideHeader\" class=\"header\">\n <div class=\"left-block\">\n <!-- Visual only — the editor's accessible name comes from Monaco's\n `ariaLabel` option (see `editorAriaLabel`). -->\n <span class=\"title\">{{ headerLabel }}</span>\n <span v-if=\"readOnly === true\" class=\"title\">(Read-only)</span>\n </div>\n <div class=\"action-buttons\">\n <template\n v-for=\"(action, index) in editorActions\"\n :key=\"`editor-action-${index}`\"\n >\n <KdsButton\n v-if=\"action.type === 'button'\"\n v-bind=\"action.props\"\n size=\"small\"\n @click=\"action.onClick\"\n />\n <KdsToggleButton\n v-else-if=\"action.type === 'toggleButton'\"\n v-bind=\"action.props\"\n size=\"small\"\n @update:model-value=\"action.onUpdateModelValue\"\n />\n <KdsMenuButton\n v-else-if=\"action.type === 'menuButton'\"\n v-bind=\"action.props\"\n size=\"small\"\n @item-click=\"action.onItemClick\"\n />\n </template>\n <KdsProgressButton\n v-if=\"copyable\"\n v-bind=\"{ ariaLabel: copyButtonAriaLabel }\"\n :leading-icon=\"copied ? 'checkmark' : 'copy'\"\n :state=\"copied ? 'success' : 'default'\"\n size=\"small\"\n variant=\"transparent\"\n @click=\"copyToClipboard\"\n />\n </div>\n </div>\n <div\n ref=\"editor-container\"\n class=\"code\"\n :style=\"editorHeight ? { height: editorHeight } : undefined\"\n />\n </div>\n <KdsSubText\n v-if=\"subText\"\n :id=\"subTextId\"\n :sub-text=\"subText\"\n :error=\"state === kdsCodeEditorState.ERROR\"\n :warning=\"state === kdsCodeEditorState.WARNING\"\n />\n </div>\n</template>\n\n<style scoped>\n.kds-code-editor {\n display: flex;\n flex-direction: column;\n\n .editor {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--kds-color-surface-default);\n border: var(--kds-border-base-subtle);\n border-radius: var(--kds-border-radius-container-0-50x);\n\n /* Only outline the whole editor when the code area (Monaco) is focused —\n header buttons keep their own focus ring. */\n &.focused {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-offset-focus);\n }\n\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--kds-spacing-container-0-25x)\n var(--kds-spacing-container-0-5x) var(--kds-spacing-container-0-25x)\n var(--kds-spacing-container-0-75x);\n\n .left-block {\n display: flex;\n flex: 1;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n min-width: 0;\n\n /* Keep the header height constant whether or not the copy / action\n buttons are present (matches the small button height). */\n min-height: var(--kds-dimension-component-height-1-5x);\n }\n\n .action-buttons {\n display: flex;\n flex-shrink: 0;\n gap: var(--kds-spacing-container-0-12x);\n align-items: center;\n }\n\n .title {\n overflow: hidden;\n text-overflow: ellipsis;\n font: var(--kds-font-base-interactive-small);\n color: var(--kds-color-text-and-icon-neutral);\n white-space: nowrap;\n }\n }\n\n &.error .header {\n background-color: var(--kds-color-background-static-danger-muted);\n }\n\n &.warning .header {\n background-color: var(--kds-color-background-static-warning-muted);\n }\n\n .code {\n width: 100%;\n }\n }\n\n /* No row bounds set: fill the width and height of the container. */\n &.fill {\n width: 100%;\n height: 100%;\n\n .editor,\n .code {\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport {\n computed,\n onMounted,\n onUnmounted,\n ref,\n useId,\n useTemplateRef,\n watch,\n} from \"vue\";\nimport { useClipboard } from \"@vueuse/core\";\nimport { KeyCode, editor } from \"monaco-editor\";\n\nimport {\n KdsButton,\n KdsMenuButton,\n KdsProgressButton,\n KdsSubText,\n KdsToggleButton,\n useKdsDarkMode,\n} from \"@knime/kds-components\";\nimport { font } from \"@knime/kds-styles/tokens\";\n\nimport { kdsCodeEditorState } from \"./enums\";\nimport { setupMonacoEnvironment } from \"./monacoEnvironment\";\nimport type { KdsCodeEditorProps } from \"./types\";\n\nsetupMonacoEnvironment();\n\nconst {\n language = \"plaintext\",\n languageLabel = undefined,\n hideHeader = false,\n state = kdsCodeEditorState.DEFAULT,\n overviewRuler = false,\n readOnly = false,\n subText = undefined,\n copyable = true,\n editorActions = undefined,\n minRows = undefined,\n maxRows = undefined,\n} = defineProps<KdsCodeEditorProps>();\n\nconst modelValue = defineModel<string>({ default: \"\" });\n\n// Links the sub-text to the editor's text input via `aria-describedby`.\nconst subTextId = useId();\n\nconst container = useTemplateRef(\"editor-container\");\nlet editorInstance: editor.IStandaloneCodeEditor | undefined;\n\n// Whether the Monaco code area (not a header button) currently has focus.\nconst isEditorFocused = ref(false);\n\nconst headerLabel = computed(() => languageLabel ?? language.toUpperCase());\n\n// Accessible name for Monaco's focusable element (`<label for>` cannot be\n// used: Monaco overrides it with its own `aria-label`, and in EditContext\n// mode the focusable element is a non-labelable `<div>`). Also announces the\n// read-only state and the non-standard keyboard exit (WCAG 2.1.2).\nconst editorAriaLabel = computed(\n () =>\n `${headerLabel.value} code editor${readOnly ? \", read-only\" : \"\"}. ` +\n \"Press Escape followed by Tab to move focus out of the editor.\",\n);\n\n// Sizing modes:\n// - neither `minRows` nor `maxRows` set → fill the container's height.\n// - otherwise the editor grows with its content (floored at `minRows`):\n// - `maxRows` unset → grows with all content, avoiding nested scrollbars.\n// - `maxRows` set → caps there and scrolls past it.\nconst fillContainer = computed(\n () => minRows === undefined && maxRows === undefined,\n);\n\nconst INITIAL_LINE_HEIGHT = 18; // Default line height in Monaco Editor\nconst EXTRA_PADDING = 3; // Additional padding to prevent scrollbar\nconst DEFAULT_OVERVIEW_RULER_LANES = 3; // Monaco default\nconst lineHeight = ref(INITIAL_LINE_HEIGHT);\nconst contentLineCount = ref(1);\nconst editorHeight = computed(() => {\n if (fillContainer.value) {\n return undefined;\n }\n const floor = Math.max(minRows ?? 1, 1);\n const cap = maxRows ?? Infinity;\n const rows = Math.min(cap, Math.max(floor, contentLineCount.value));\n return `${lineHeight.value * rows + EXTRA_PADDING}px`;\n});\n\n// Monaco is styled via JS options, not CSS, so the KDS code typography is\n// passed to `editor.create` from the design-token constants.\nconst codeFont = font.base.code.small;\n\n// Update the editor theme based on the current dark mode setting\nconst MONACO_THEME_LIGHT = \"vs-light\";\nconst MONACO_THEME_DARK = \"vs-dark\";\nconst getMonacoTheme = (isDark: boolean) =>\n isDark ? MONACO_THEME_DARK : MONACO_THEME_LIGHT;\n\nconst { isDarkMode } = useKdsDarkMode();\n\n// Monaco's focusable element carries `role=\"textbox\"`: a `<div>` in\n// EditContext mode (Chromium), the fallback `<textarea>` elsewhere. The\n// additional `<textarea>` present in EditContext mode is only a hidden IME\n// helper that assistive technology never sees.\nconst getEditorInputElement = () =>\n container.value?.querySelector('[role=\"textbox\"]');\n\n// Monaco manages `aria-label` (via the `ariaLabel` option) but not\n// `aria-describedby` / `aria-invalid`, so those are maintained here.\nconst syncEditorInputAria = () => {\n const input = getEditorInputElement();\n if (!input) {\n return;\n }\n if (subText) {\n input.setAttribute(\"aria-describedby\", subTextId);\n } else {\n input.removeAttribute(\"aria-describedby\");\n }\n if (state === kdsCodeEditorState.ERROR) {\n input.setAttribute(\"aria-invalid\", \"true\");\n } else {\n input.removeAttribute(\"aria-invalid\");\n }\n};\n\nwatch([() => subText, () => state], syncEditorInputAria);\n\n// Copy-to-clipboard handling\nconst { copy, copied } = useClipboard({ copiedDuring: 2000 });\nconst copyButtonAriaLabel = computed(() =>\n copied.value\n ? `Copied ${headerLabel.value} to clipboard`\n : `Copy ${headerLabel.value} to clipboard`,\n);\nconst copyToClipboard = () => {\n // Copy unconditionally — even an empty editor gives \"Copied\" feedback\n // instead of a dead button.\n copy(editorInstance?.getModel()?.getValue() ?? \"\");\n};\n\nonMounted(() => {\n if (!container.value) {\n return;\n }\n editorInstance = editor.create(container.value, {\n value: modelValue.value,\n language,\n automaticLayout: true,\n minimap: { enabled: false },\n overviewRulerLanes: overviewRuler ? DEFAULT_OVERVIEW_RULER_LANES : 0,\n scrollBeyondLastLine: false,\n lineNumbersMinChars: 3,\n fontFamily: `\"${codeFont.fontFamily}\", monospace`,\n fontWeight: `${codeFont.fontWeight}`,\n fontSize: codeFont.fontSize.value,\n // Keep suggest / hover widgets visible when the editor sits in a clipping\n // container (the editor wrapper itself uses `overflow: hidden`).\n fixedOverflowWidgets: true,\n // Don't swallow wheel events once the editor cannot scroll any further,\n // so the surrounding dialog / page continues to scroll.\n scrollbar: { alwaysConsumeMouseWheel: false },\n readOnly,\n theme: getMonacoTheme(isDarkMode.value),\n ariaLabel: editorAriaLabel.value,\n // Standalone Monaco cannot detect screen readers in the browser; with the\n // default \"auto\" it would replace `ariaLabel` with a \"The editor is not\n // accessible at this time\" message and skip the screen-reader content\n // mirror. Force it on so assistive technology always works.\n accessibilitySupport: \"on\",\n });\n\n syncEditorInputAria();\n\n lineHeight.value = editorInstance.getOption(editor.EditorOption.lineHeight);\n contentLineCount.value = editorInstance.getModel()?.getLineCount() ?? 1;\n\n editorInstance.onDidChangeModelContent(() => {\n const value = editorInstance?.getModel()?.getValue() ?? \"\";\n contentLineCount.value = editorInstance?.getModel()?.getLineCount() ?? 1;\n if (value !== modelValue.value) {\n modelValue.value = value;\n }\n });\n\n // Accessibility\n let tabFocusArmed = false;\n const setTabFocus = (armed: boolean) => {\n if (tabFocusArmed !== armed) {\n tabFocusArmed = armed;\n editorInstance?.updateOptions({ tabFocusMode: armed });\n }\n };\n // Keys that must not disarm tab-focus mode: Tab itself (so the armed Tab\n // can leave the editor) and lone modifiers (so Escape → Shift+Tab works).\n const tabFocusNeutralKeys = [\n KeyCode.Tab,\n KeyCode.Shift,\n KeyCode.Ctrl,\n KeyCode.Alt,\n KeyCode.Meta,\n ];\n editorInstance.onKeyDown((event) => {\n if (event.keyCode === KeyCode.Escape) {\n setTabFocus(true);\n } else if (!tabFocusNeutralKeys.includes(event.keyCode)) {\n setTabFocus(false);\n }\n });\n editorInstance.onDidFocusEditorText(() => {\n setTabFocus(false);\n isEditorFocused.value = true;\n });\n editorInstance.onDidBlurEditorText(() => {\n isEditorFocused.value = false;\n });\n});\n\nwatch(isDarkMode, (isDark) => {\n if (editorInstance) {\n editorInstance.updateOptions({ theme: getMonacoTheme(isDark) });\n }\n});\n\nwatch(\n () => readOnly,\n (isReadOnly) => {\n editorInstance?.updateOptions({ readOnly: isReadOnly });\n },\n);\n\nwatch(editorAriaLabel, (ariaLabel) => {\n editorInstance?.updateOptions({ ariaLabel });\n});\n\nwatch(\n () => overviewRuler,\n (enabled) => {\n editorInstance?.updateOptions({\n overviewRulerLanes: enabled ? DEFAULT_OVERVIEW_RULER_LANES : 0,\n });\n },\n);\n\nwatch(\n () => language,\n (newLanguage) => {\n const model = editorInstance?.getModel();\n if (model) {\n editor.setModelLanguage(model, newLanguage);\n }\n },\n);\n\n// External `modelValue` updates are applied as regular, undoable edits —\n// `setValue` would clear the undo stack, so a form reset or flow-variable\n// overwrite would destroy the user's typing history.\nwatch(modelValue, (newValue) => {\n const model = editorInstance?.getModel();\n if (model && newValue !== model.getValue()) {\n model.pushStackElement();\n model.pushEditOperations(\n [],\n [{ range: model.getFullModelRange(), text: newValue ?? \"\" }],\n () => null,\n );\n }\n});\n\nonUnmounted(() => {\n editorInstance?.dispose();\n});\n\ndefineExpose({\n /** The underlying Monaco editor instance, available after mount. */\n getEditor: () => editorInstance,\n});\n</script>\n\n<template>\n <div :class=\"['kds-code-editor', { fill: fillContainer }]\">\n <div :class=\"['editor', state, { focused: isEditorFocused }]\">\n <div v-if=\"!hideHeader\" class=\"header\">\n <div class=\"left-block\">\n <!-- Visual only — the editor's accessible name comes from Monaco's\n `ariaLabel` option (see `editorAriaLabel`). -->\n <span class=\"title\">{{ headerLabel }}</span>\n <span v-if=\"readOnly === true\" class=\"title\">(Read-only)</span>\n </div>\n <div class=\"action-buttons\">\n <template\n v-for=\"(action, index) in editorActions\"\n :key=\"`editor-action-${index}`\"\n >\n <KdsButton\n v-if=\"action.type === 'button'\"\n v-bind=\"action.props\"\n size=\"small\"\n @click=\"action.onClick\"\n />\n <KdsToggleButton\n v-else-if=\"action.type === 'toggleButton'\"\n v-bind=\"action.props\"\n size=\"small\"\n @update:model-value=\"action.onUpdateModelValue\"\n />\n <KdsMenuButton\n v-else-if=\"action.type === 'menuButton'\"\n v-bind=\"action.props\"\n size=\"small\"\n @item-click=\"action.onItemClick\"\n />\n </template>\n <KdsProgressButton\n v-if=\"copyable\"\n v-bind=\"{ ariaLabel: copyButtonAriaLabel }\"\n :leading-icon=\"copied ? 'checkmark' : 'copy'\"\n :state=\"copied ? 'success' : 'default'\"\n size=\"small\"\n variant=\"transparent\"\n @click=\"copyToClipboard\"\n />\n </div>\n </div>\n <div\n ref=\"editor-container\"\n class=\"code\"\n :style=\"editorHeight ? { height: editorHeight } : undefined\"\n />\n </div>\n <KdsSubText\n v-if=\"subText\"\n :id=\"subTextId\"\n :sub-text=\"subText\"\n :error=\"state === kdsCodeEditorState.ERROR\"\n :warning=\"state === kdsCodeEditorState.WARNING\"\n />\n </div>\n</template>\n\n<style scoped>\n.kds-code-editor {\n display: flex;\n flex-direction: column;\n\n .editor {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--kds-color-surface-default);\n border: var(--kds-border-base-subtle);\n border-radius: var(--kds-border-radius-container-0-50x);\n\n /* Only outline the whole editor when the code area (Monaco) is focused —\n header buttons keep their own focus ring. */\n &.focused {\n outline: var(--kds-border-action-focused);\n outline-offset: var(--kds-spacing-offset-focus);\n }\n\n .header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--kds-spacing-container-0-25x)\n var(--kds-spacing-container-0-5x) var(--kds-spacing-container-0-25x)\n var(--kds-spacing-container-0-75x);\n\n .left-block {\n display: flex;\n flex: 1;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n min-width: 0;\n\n /* Keep the header height constant whether or not the copy / action\n buttons are present (matches the small button height). */\n min-height: var(--kds-dimension-component-height-1-5x);\n }\n\n .action-buttons {\n display: flex;\n flex-shrink: 0;\n gap: var(--kds-spacing-container-0-12x);\n align-items: center;\n }\n\n .title {\n overflow: hidden;\n text-overflow: ellipsis;\n font: var(--kds-font-base-interactive-small);\n color: var(--kds-color-text-and-icon-neutral);\n white-space: nowrap;\n }\n }\n\n &.error .header {\n background-color: var(--kds-color-background-static-danger-muted);\n }\n\n &.warning .header {\n background-color: var(--kds-color-background-static-warning-muted);\n }\n\n .code {\n width: 100%;\n }\n }\n\n /* No row bounds set: fill the width and height of the container. */\n &.fill {\n width: 100%;\n height: 100%;\n\n .editor,\n .code {\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;AAIA,IAAa,OAAO;CAChB,MAAM;EACF,SAAS;GACL,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;EACA,OAAO;GACH,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,iBAAiB;IACb,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;EACA,MAAM;GACF,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,WAAW;IACX,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,uBAAuB;IACnB,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,WAAW;IACX,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,iBAAiB;IACb,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;EACA,SAAS;GACL,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAG,MAAM;IAAK;IACjC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;EACA,aAAa;GACT,iBAAiB;IACb,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,WAAW;IACX,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,iBAAiB;IACb,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,gBAAgB;IACZ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;EACA,MAAM;GACF,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,YAAY;IACZ,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;CACJ;CACA,UAAU;EACN,YAAY;GACR,UAAU;IACN,IAAI;KACA,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,IAAI;KACA,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,IAAI;KACA,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,IAAI;KACA,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,IAAI;KACA,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,aAAa;KACT,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,aAAa;KACT,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,aAAa;KACT,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,aAAa;KACT,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,aAAa;KACT,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,IAAI;KACA,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,aAAa;KACT,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;GACJ;GACA,MAAM;IACF,OAAO;KACH,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,gBAAgB;KACZ,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,WAAW;KACX,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,gBAAgB;KACZ,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;IACA,uBAAuB;KACnB,YAAY;KACZ,YAAY;KACZ,UAAU;MAAE,OAAO;MAAI,MAAM;KAAK;KAClC,YAAY;KACZ,WAAW;KACX,KAAK;MACD,OAAO;MACP,UAAU;KACd;IACJ;GACJ;EACJ;EACA,MAAM;GACF,MAAM;IACF,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,OAAO;IACH,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAI,MAAM;IAAK;IAClC,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;GACA,QAAQ;IACJ,YAAY;IACZ,YAAY;IACZ,UAAU;KAAE,OAAO;KAAG,MAAM;IAAK;IACjC,KAAK;KACD,OAAO;KACP,UAAU;IACd;GACJ;EACJ;CACJ;CACA,SAAS;EACL,IAAI;GACA,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,IAAI;GACA,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,IAAI;GACA,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,IAAI;GACA,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,IAAI;GACA,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,IAAI;GACA,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,MAAM;GACF,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,cAAc;GACV,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;CACJ;CACA,OAAO;EACH,OAAO;GACH,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,UAAU;GACN,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,aAAa;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,cAAc;GACV,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,QAAQ;GACJ,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,SAAS;GACL,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;EACA,OAAO;GACH,YAAY;GACZ,YAAY;GACZ,UAAU;IAAE,OAAO;IAAI,MAAM;GAAK;GAClC,YAAY;GACZ,KAAK;IACD,OAAO;IACP,UAAU;GACd;EACJ;CACJ;AACJ;;;AC3sBA,IAAa,qBAAqB;CAChC,SAAS;CACT,OAAO;CACP,SAAS;AACX;AAEA,IAAa,sBAAsB,OAAO,OAAO,kBAAkB;;;ACKnE,SAAS,OAAO,MAAM,WAAW;CAC/B,OAAO,eAAe;AACxB,CAAC;AAKD,IAAa,+BAA+B;CAC1C,IAAI,KAAK,mBACP;CAEF,KAAK,oBAAoB,EACvB,WAAW,OAAO,WAAmB,UAAkB;EACrD,IAAI,UAAU,QAAQ;GACpB,MAAM,EAAE,SAAS,eACf,MAAM,OAAO;GACf,OAAO,IAAI,WAAW;EACxB;EACA,MAAM,EAAE,SAAS,iBACf,MAAM,OAAO;EACf,OAAO,IAAI,aAAa;CAC1B,EACF;AACF;;;;;;;;;;;;;;ACyCA,IAAM,sBAAsB;AAC5B,IAAM,gBAAgB;AACtB,IAAM,+BAA+B;AAkBrC,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EArE1B,uBAAuB;EAgBvB,MAAM,aAAa,SAAmB,SAAA,YAAgB;EAGtD,MAAM,YAAY,MAAM;EAExB,MAAM,YAAY,eAAe,kBAAkB;EACnD,IAAI;EAGJ,MAAM,kBAAkB,IAAI,KAAK;EAEjC,MAAM,cAAc,eAAe,QAAA,iBAAiB,QAAA,SAAS,YAAY,CAAC;EAM1E,MAAM,kBAAkB,eAEpB,GAAG,YAAY,MAAM,cAAc,QAAA,WAAW,gBAAgB,GAAG,gEAErE;EAOA,MAAM,gBAAgB,eACd,QAAA,YAAY,KAAA,KAAa,QAAA,YAAY,KAAA,CAC7C;EAKA,MAAM,aAAa,IAAI,mBAAmB;EAC1C,MAAM,mBAAmB,IAAI,CAAC;EAC9B,MAAM,eAAe,eAAe;GAClC,IAAI,cAAc,OAChB;GAEF,MAAM,QAAQ,KAAK,IAAI,QAAA,WAAW,GAAG,CAAC;GACtC,MAAM,MAAM,QAAA,WAAW;GACvB,MAAM,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO,iBAAiB,KAAK,CAAC;GAClE,OAAO,GAAG,WAAW,QAAQ,OAAO,cAAc;EACpD,CAAC;EAID,MAAM,WAAW,KAAK,KAAK,KAAK;EAKhC,MAAM,kBAAkB,WACtB,SAAS,oBAAoB;EAE/B,MAAM,EAAE,eAAe,eAAe;EAMtC,MAAM,8BACJ,UAAU,OAAO,cAAc,oBAAkB;EAInD,MAAM,4BAA4B;GAChC,MAAM,QAAQ,sBAAsB;GACpC,IAAI,CAAC,OACH;GAEF,IAAI,QAAA,SACF,MAAM,aAAa,oBAAoB,SAAS;QAEhD,MAAM,gBAAgB,kBAAkB;GAE1C,IAAI,QAAA,UAAU,mBAAmB,OAC/B,MAAM,aAAa,gBAAgB,MAAM;QAEzC,MAAM,gBAAgB,cAAc;EAExC;EAEA,MAAM,OAAO,QAAA,eAAe,QAAA,KAAK,GAAG,mBAAmB;EAGvD,MAAM,EAAE,MAAM,WAAW,aAAa,EAAE,cAAc,IAAK,CAAC;EAC5D,MAAM,sBAAsB,eAC1B,OAAO,QACH,UAAU,YAAY,MAAM,iBAC5B,QAAQ,YAAY,MAAM,cAChC;EACA,MAAM,wBAAwB;GAG5B,KAAK,gBAAgB,SAAS,CAAC,EAAE,SAAS,KAAK,EAAE;EACnD;EAEA,gBAAgB;GACd,IAAI,CAAC,UAAU,OACb;GAEF,iBAAiB,OAAO,OAAO,UAAU,OAAO;IAC9C,OAAO,WAAW;IAClB,UAAO,QAAA;IACP,iBAAiB;IACjB,SAAS,EAAE,SAAS,MAAM;IAC1B,oBAAoB,QAAA,gBAAgB,+BAA+B;IACnE,sBAAsB;IACtB,qBAAqB;IACrB,YAAY,IAAI,SAAS,WAAW;IACpC,YAAY,GAAG,SAAS;IACxB,UAAU,SAAS,SAAS;IAG5B,sBAAsB;IAGtB,WAAW,EAAE,yBAAyB,MAAM;IAC5C,UAAO,QAAA;IACP,OAAO,eAAe,WAAW,KAAK;IACtC,WAAW,gBAAgB;IAK3B,sBAAsB;GACxB,CAAC;GAED,oBAAoB;GAEpB,WAAW,QAAQ,eAAe,UAAU,OAAO,aAAa,UAAU;GAC1E,iBAAiB,QAAQ,eAAe,SAAS,CAAC,EAAE,aAAa,KAAK;GAEtE,eAAe,8BAA8B;IAC3C,MAAM,QAAQ,gBAAgB,SAAS,CAAC,EAAE,SAAS,KAAK;IACxD,iBAAiB,QAAQ,gBAAgB,SAAS,CAAC,EAAE,aAAa,KAAK;IACvE,IAAI,UAAU,WAAW,OACvB,WAAW,QAAQ;GAEvB,CAAC;GAGD,IAAI,gBAAgB;GACpB,MAAM,eAAe,UAAmB;IACtC,IAAI,kBAAkB,OAAO;KAC3B,gBAAgB;KAChB,gBAAgB,cAAc,EAAE,cAAc,MAAM,CAAC;IACvD;GACF;GAGA,MAAM,sBAAsB;IAC1B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;GACV;GACA,eAAe,WAAW,UAAU;IAClC,IAAI,MAAM,YAAY,QAAQ,QAC5B,YAAY,IAAI;SACX,IAAI,CAAC,oBAAoB,SAAS,MAAM,OAAO,GACpD,YAAY,KAAK;GAErB,CAAC;GACD,eAAe,2BAA2B;IACxC,YAAY,KAAK;IACjB,gBAAgB,QAAQ;GAC1B,CAAC;GACD,eAAe,0BAA0B;IACvC,gBAAgB,QAAQ;GAC1B,CAAC;EACH,CAAC;EAED,MAAM,aAAa,WAAW;GAC5B,IAAI,gBACF,eAAe,cAAc,EAAE,OAAO,eAAe,MAAM,EAAE,CAAC;EAElE,CAAC;EAED,YACQ,QAAA,WACL,eAAe;GACd,gBAAgB,cAAc,EAAE,UAAU,WAAW,CAAC;EACxD,CACF;EAEA,MAAM,kBAAkB,cAAc;GACpC,gBAAgB,cAAc,EAAE,UAAU,CAAC;EAC7C,CAAC;EAED,YACQ,QAAA,gBACL,YAAY;GACX,gBAAgB,cAAc,EAC5B,oBAAoB,UAAU,+BAA+B,EAC/D,CAAC;EACH,CACF;EAEA,YACQ,QAAA,WACL,gBAAgB;GACf,MAAM,QAAQ,gBAAgB,SAAS;GACvC,IAAI,OACF,OAAO,iBAAiB,OAAO,WAAW;EAE9C,CACF;EAKA,MAAM,aAAa,aAAa;GAC9B,MAAM,QAAQ,gBAAgB,SAAS;GACvC,IAAI,SAAS,aAAa,MAAM,SAAS,GAAG;IAC1C,MAAM,iBAAiB;IACvB,MAAM,mBACJ,CAAC,GACD,CAAC;KAAE,OAAO,MAAM,kBAAkB;KAAG,MAAM,YAAY;IAAG,CAAC,SACrD,IACR;GACF;EACF,CAAC;EAED,kBAAkB;GAChB,gBAAgB,QAAQ;EAC1B,CAAC;EAED,SAAa;;AAEX,iBAAiB,eACnB,CAAC;;uBAIC,mBAyDM,OAAA,EAzDA,OAAK,eAAA,CAAA,mBAAA,EAAA,MAA8B,cAAA,MAAa,CAAA,CAAA,EAAA,GAAA,CACpD,mBAgDM,OAAA,EAhDA,OAAK,eAAA;IAAA;IAAa,QAAA;IAAK,EAAA,SAAa,gBAAA,MAAe;GAAA,CAAA,EAAA,GAAA,CAAA,CAC3C,QAAA,cAAA,UAAA,GAAZ,mBAyCM,OAzCN,YAyCM,CAxCJ,mBAKM,OALN,YAKM,CAFJ,mBAA4C,QAA5C,YAA4C,gBAArB,YAAA,KAAW,GAAA,CAAA,GACtB,QAAA,aAAQ,QAAA,UAAA,GAApB,mBAA+D,QAA/D,YAA6C,aAAW,KAAA,mBAAA,IAAA,IAAA,CAAA,CAAA,GAE1D,mBAiCM,OAjCN,YAiCM,EAAA,UAAA,IAAA,GAhCJ,mBAsBW,UAAA,MAAA,WArBiB,QAAA,gBAAlB,QAAQ,UAAK;6EACE,QAAA,GAAA,CAGf,OAAO,SAAI,YAAA,UAAA,GADnB,YAKE,MAAA,SAAA,GALF,WAKE;;;OAHQ,OAAO,OAAK;KACpB,MAAK;KACJ,SAAO,OAAO;kCAGJ,OAAO,SAAI,kBAAA,UAAA,GADxB,YAKE,MAAA,eAAA,GALF,WAKE;;;OAHQ,OAAO,OAAK;KACpB,MAAK;KACJ,uBAAoB,OAAO;8CAGjB,OAAO,SAAI,gBAAA,UAAA,GADxB,YAKE,MAAA,aAAA,GALF,WAKE;;;OAHQ,OAAO,OAAK;KACpB,MAAK;KACJ,aAAY,OAAO;;cAIhB,QAAA,YAAA,UAAA,GADR,YAQE,MAAA,iBAAA,GARF,WAQE,EAAA,KAAA,EAAA,GAAA,EAAA,WANqB,oBAAA,MAAmB,GAAA;IACvC,gBAAc,MAAA,MAAA,IAAM,cAAA;IACpB,OAAO,MAAA,MAAA,IAAM,YAAA;IACd,MAAK;IACL,SAAQ;IACP,SAAO;iHAId,mBAIE,OAAA;IAHA,KAAI;IACJ,OAAM;IACL,OAAK,eAAE,aAAA,QAAY,EAAA,QAAa,aAAA,MAAY,IAAK,KAAA,CAAS;qBAIvD,QAAA,WAAA,UAAA,GADR,YAME,MAAA,UAAA,GAAA;;IAJC,IAAI,MAAA,SAAA;IACJ,YAAU,QAAA;IACV,OAAO,QAAA,UAAU,MAAA,kBAAA,CAAkB,CAAC;IACpC,SAAS,QAAA,UAAU,MAAA,kBAAA,CAAkB,CAAC"}