@qodalis/vue-cli 2.0.0-beta.11 → 2.0.0-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Cli.ts","../src/cliInjection.ts","../src/CliConfigProvider.ts","../src/CliPanel.ts","../src/CliProvider.ts","../src/useCliEngine.ts","../src/useCli.ts","../src/index.ts"],"sourcesContent":["import {\n defineComponent,\n ref,\n onMounted,\n onBeforeUnmount,\n PropType,\n h,\n inject,\n} from 'vue';\nimport { ICliCommandProcessor, ICliModule, CliEngineSnapshot } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions } from '@qodalis/cli';\nimport { CliInjectionKey } from './cliInjection';\nimport { CliConfigKey } from './CliConfigProvider';\n\n/**\n * Props accepted by the Vue `Cli` component.\n */\nexport interface CliProps {\n modules?: ICliModule[];\n processors?: ICliCommandProcessor[];\n options?: CliEngineOptions;\n services?: Record<string, any>;\n snapshot?: CliEngineSnapshot;\n style?: Record<string, string>;\n class?: string;\n}\n\nexport const Cli = defineComponent({\n name: 'Cli',\n props: {\n modules: {\n type: Array as PropType<ICliModule[]>,\n default: undefined,\n },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n options: {\n type: Object as PropType<CliEngineOptions>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n snapshot: {\n type: Object as PropType<CliEngineSnapshot>,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string>>,\n default: undefined,\n },\n class: {\n type: String,\n default: undefined,\n },\n },\n emits: ['ready'],\n setup(props, { emit }) {\n const containerRef = ref<HTMLElement | null>(null);\n const ctx = inject(CliInjectionKey, null);\n const config = inject(CliConfigKey, null);\n let engine: CliEngine | null = null;\n\n // If inside a CliProvider, don't create our own engine\n if (ctx) {\n return () => null;\n }\n\n // Merge: local props override config context\n const modules = props.modules ?? config?.modules;\n const processors = props.processors ?? config?.processors;\n const options = props.options ?? config?.options;\n const services = props.services ?? config?.services;\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n const engineOptions = props.snapshot\n ? { ...options, snapshot: props.snapshot }\n : options;\n engine = new CliEngine(containerRef.value, engineOptions);\n\n engine.registerService('cli-framework', 'Vue');\n\n if (services) {\n for (const [token, value] of Object.entries(services)) {\n engine.registerService(token, value);\n }\n }\n\n if (modules) {\n engine.registerModules(modules);\n }\n\n if (processors) {\n engine.registerProcessors(processors);\n }\n\n await engine.start();\n emit('ready', engine);\n });\n\n onBeforeUnmount(() => {\n engine?.destroy();\n engine = null;\n });\n\n return () =>\n h('div', {\n ref: containerRef,\n style: { height: '100%', ...props.style },\n class: props.class,\n });\n },\n});\n","import { InjectionKey, Ref } from 'vue';\nimport { CliEngine } from '@qodalis/cli';\n\nexport interface CliContextValue {\n engine: Ref<CliEngine | null>;\n}\n\nexport const CliInjectionKey: InjectionKey<CliContextValue> =\n Symbol('qodalis-cli');\n","import { defineComponent, provide, PropType, InjectionKey } from 'vue';\nimport { ICliCommandProcessor, ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\n\nexport interface CliConfigValue {\n modules?: ICliModule[];\n processors?: ICliCommandProcessor[];\n options?: CliEngineOptions;\n services?: Record<string, any>;\n}\n\nexport const CliConfigKey: InjectionKey<CliConfigValue> =\n Symbol('qodalis-cli-config');\n\nexport const CliConfigProvider = defineComponent({\n name: 'CliConfigProvider',\n props: {\n modules: {\n type: Array as PropType<ICliModule[]>,\n default: undefined,\n },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n options: {\n type: Object as PropType<CliEngineOptions>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n provide(CliConfigKey, {\n modules: props.modules,\n processors: props.processors,\n options: props.options,\n services: props.services,\n });\n\n return () => slots.default?.();\n },\n});\n","import {\n defineComponent,\n ref,\n computed,\n inject,\n PropType,\n h,\n onMounted,\n onBeforeUnmount,\n} from 'vue';\nimport { ICliCommandProcessor, ICliModule, CliPanelConfig, CliPanelPosition, CliPanelHideAlignment, CliEngineSnapshot, CliPanelState, derivePanelThemeStyles, loadPanelPosition, savePanelPosition } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions } from '@qodalis/cli';\nimport { Cli } from './Cli';\nimport { CliConfigKey } from './CliConfigProvider';\n\nexport interface CliPanelOptions extends CliEngineOptions, CliPanelConfig {}\n\ninterface TerminalPane {\n id: number;\n widthPercent: number;\n snapshot?: CliEngineSnapshot;\n}\n\ninterface TerminalTab {\n id: number;\n title: string;\n isEditing: boolean;\n panes: TerminalPane[];\n}\n\ninterface TabContextMenu {\n visible: boolean;\n x: number;\n y: number;\n tabId: number;\n}\n\nconst MIN_PANE_WIDTH_PERCENT = 10;\n\nfunction normalizePanes(panes: TerminalPane[]) {\n const total = panes.reduce((s, p) => s + p.widthPercent, 0);\n if (total === 0) return;\n const scale = 100 / total;\n panes.forEach((p) => {\n p.widthPercent *= scale;\n });\n}\n\n/* ─── SVG helpers ────────────────────────────────────────── */\n\nconst svgAttrs = {\n width: '20',\n height: '20',\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.8',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n};\n\nconst terminalIcon = () =>\n h('svg', { ...svgAttrs, width: '22', height: '22', 'stroke-width': '2' }, [\n h('polyline', { points: '4 17 10 11 4 5' }),\n h('line', { x1: '12', y1: '19', x2: '20', y2: '19' }),\n ]);\nconst maximizeIcon = () =>\n h('svg', svgAttrs, [\n h('polyline', { points: '15 3 21 3 21 9' }),\n h('polyline', { points: '9 21 3 21 3 15' }),\n h('line', { x1: '21', y1: '3', x2: '14', y2: '10' }),\n h('line', { x1: '3', y1: '21', x2: '10', y2: '14' }),\n ]);\nconst restoreIcon = () =>\n h('svg', svgAttrs, [\n h('polyline', { points: '4 14 10 14 10 20' }),\n h('polyline', { points: '20 10 14 10 14 4' }),\n h('line', { x1: '14', y1: '10', x2: '21', y2: '3' }),\n h('line', { x1: '3', y1: '21', x2: '10', y2: '14' }),\n ]);\nconst closeIcon = () =>\n h('svg', svgAttrs, [\n h('line', { x1: '18', y1: '6', x2: '6', y2: '18' }),\n h('line', { x1: '6', y1: '6', x2: '18', y2: '18' }),\n ]);\nconst hideIcon = () =>\n h('svg', svgAttrs, [\n h('line', { x1: '5', y1: '18', x2: '19', y2: '18' }),\n h('polyline', { points: '9 14 12 17 15 14' }),\n ]);\n\nfunction collapseChevron(position: CliPanelPosition, isCollapsed: boolean) {\n let points: string;\n switch (position) {\n case 'top':\n points = isCollapsed ? '6 9 12 15 18 9' : '18 15 12 9 6 15';\n break;\n case 'left':\n points = isCollapsed ? '9 18 15 12 9 6' : '15 6 9 12 15 18';\n break;\n case 'right':\n points = isCollapsed ? '15 6 9 12 15 18' : '9 18 15 12 9 6';\n break;\n default: // bottom\n points = isCollapsed ? '18 15 12 9 6 15' : '6 9 12 15 18 9';\n break;\n }\n return h('svg', svgAttrs, [h('polyline', { points })]);\n}\n\nfunction hideTabChevron(position: CliPanelPosition) {\n let points: string;\n switch (position) {\n case 'top': points = '6 9 12 15 18 9'; break;\n case 'left': points = '9 18 15 12 9 6'; break;\n case 'right': points = '15 6 9 12 15 18'; break;\n default: points = '18 15 12 9 6 15'; break;\n }\n return h('svg', { class: 'cli-panel-hide-tab-arrow', ...svgAttrs, width: '14', height: '14', 'stroke-width': '2.5' }, [\n h('polyline', { points }),\n ]);\n}\n\nfunction positionIcon(pos: string, size = 20) {\n let fillRect: any;\n switch (pos) {\n case 'top':\n fillRect = h('rect', { x: '4', y: '4', width: '16', height: '5', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n case 'left':\n fillRect = h('rect', { x: '4', y: '4', width: '5', height: '16', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n case 'right':\n fillRect = h('rect', { x: '15', y: '4', width: '5', height: '16', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n default: // bottom\n fillRect = h('rect', { x: '4', y: '15', width: '16', height: '5', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n }\n return h('svg', { ...svgAttrs, width: String(size), height: String(size) }, [\n h('rect', { x: '3', y: '3', width: '18', height: '18', rx: '2' }),\n fillRect,\n ]);\n}\n\n/* ─── Component ──────────────────────────────────────────── */\n\nexport const CliPanel = defineComponent({\n name: 'CliPanel',\n props: {\n options: {\n type: Object as PropType<CliPanelOptions>,\n default: undefined,\n },\n modules: { type: Array as PropType<ICliModule[]>, default: undefined },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n onClose: {\n type: Function as PropType<() => void>,\n default: undefined,\n },\n collapsed: { type: Boolean, default: undefined },\n hidden: { type: Boolean, default: undefined },\n maximized: { type: Boolean, default: undefined },\n activeTabId: { type: Number, default: undefined },\n position: { type: String as PropType<CliPanelPosition>, default: undefined },\n height: { type: Number, default: undefined },\n width: { type: Number, default: undefined },\n style: {\n type: Object as PropType<Record<string, string>>,\n default: undefined,\n },\n class: { type: String, default: undefined },\n },\n emits: [\n 'update:collapsed', 'update:hidden', 'update:maximized',\n 'update:activeTabId', 'update:position', 'update:height', 'update:width',\n 'close', 'tab-added', 'tab-closed', 'pane-split', 'pane-closed',\n ],\n setup(props, { expose, emit }) {\n const config = inject(CliConfigKey, null);\n\n // Merge: local props override config context\n const mergedOptions = computed(() => props.options ?? config?.options as CliPanelOptions | undefined);\n const mergedModules = computed(() => props.modules ?? config?.modules);\n const mergedProcessors = computed(() => props.processors ?? config?.processors);\n const mergedServices = computed(() => props.services ?? config?.services);\n\n const visible = ref(true);\n const internalCollapsed = ref(mergedOptions.value?.isCollapsed ?? true);\n const internalMaximized = ref(false);\n const internalHeight = ref(600);\n const internalWidth = ref(400);\n const prevHeight = ref(600);\n const prevWidth = ref(400);\n const initialized = ref(false);\n const internalHidden = ref(props.options?.isHidden ?? false);\n let preHideCollapsed = true;\n const internalActiveTabId = ref(0);\n\n const internalPosition = ref<CliPanelPosition>(\n loadPanelPosition() ?? mergedOptions.value?.position ?? 'bottom',\n );\n\n /* ─── Resolved (controlled/uncontrolled) ────────── */\n\n const resolvedCollapsed = computed(() =>\n props.collapsed !== undefined ? props.collapsed : internalCollapsed.value);\n const resolvedHidden = computed(() =>\n props.hidden !== undefined ? props.hidden : internalHidden.value);\n const resolvedMaximized = computed(() =>\n props.maximized !== undefined ? props.maximized : internalMaximized.value);\n const resolvedActiveTabId = computed(() =>\n props.activeTabId !== undefined ? props.activeTabId : internalActiveTabId.value);\n const resolvedHeight = computed(() =>\n props.height !== undefined ? props.height : internalHeight.value);\n const resolvedWidth = computed(() =>\n props.width !== undefined ? props.width : internalWidth.value);\n const resolvedPosition = computed(() =>\n props.position !== undefined ? props.position as CliPanelPosition : internalPosition.value);\n\n /* ─── Update helpers ────────────────────────────── */\n\n function updateCollapsed(value: boolean) {\n internalCollapsed.value = value;\n emit('update:collapsed', value);\n }\n function updateHidden(value: boolean) {\n internalHidden.value = value;\n emit('update:hidden', value);\n }\n function updateMaximized(value: boolean) {\n internalMaximized.value = value;\n emit('update:maximized', value);\n }\n function updateActiveTabId(value: number) {\n internalActiveTabId.value = value;\n emit('update:activeTabId', value);\n }\n function updateHeight(value: number) {\n internalHeight.value = value;\n emit('update:height', value);\n }\n function updateWidth(value: number) {\n internalWidth.value = value;\n emit('update:width', value);\n }\n function updatePosition(value: CliPanelPosition) {\n internalPosition.value = value;\n savePanelPosition(value);\n emit('update:position', value);\n }\n const closable = computed(() => mergedOptions.value?.closable ?? true);\n const resizable = computed(() => mergedOptions.value?.resizable ?? true);\n const isHorizontal = computed(() => resolvedPosition.value === 'left' || resolvedPosition.value === 'right');\n const hideable = computed(() => mergedOptions.value?.hideable ?? true);\n const hideAlignment = computed<CliPanelHideAlignment>(() => mergedOptions.value?.hideAlignment ?? 'center');\n const syncTheme = computed(() => mergedOptions.value?.syncTheme ?? false);\n const themeStyles = ref<Record<string, string>>({});\n\n const tabs = ref<TerminalTab[]>([]);\n const activePaneId = ref(0);\n let nextTabId = 1;\n let nextPaneId = 1;\n\n const contextMenu = ref<TabContextMenu>({\n visible: false,\n x: 0,\n y: 0,\n tabId: 0,\n });\n\n const engineMap = new Map<number, CliEngine>();\n\n const paneResizing = ref(false);\n let paneResizeState = {\n tabId: 0,\n dividerIndex: 0,\n startX: 0,\n startWidths: [] as number[],\n containerWidth: 0,\n };\n\n const panelResizing = ref(false);\n let panelResizeState = { startY: 0, startHeight: 0, startX: 0, startWidth: 0 };\n\n // Terminal height is handled via CSS flex layout (height: 100% default in Cli)\n\n /* ─── Tab management ─────────────────────────────── */\n\n function addTab(title?: string): number {\n const tabId = nextTabId++;\n const paneId = nextPaneId++;\n tabs.value = [...tabs.value, {\n id: tabId,\n title: title ?? `Terminal ${tabId}`,\n isEditing: false,\n panes: [{ id: paneId, widthPercent: 100 }],\n }];\n updateActiveTabId(tabId);\n activePaneId.value = paneId;\n emit('tab-added', { tabId });\n return tabId;\n }\n\n let themeObserver: MutationObserver | undefined;\n\n function syncThemeFromEngine() {\n const engine = engineMap.values().next().value;\n if (!engine) return;\n const theme = (engine as CliEngine).getTerminal().options.theme;\n if (theme) themeStyles.value = derivePanelThemeStyles(theme);\n }\n\n function setupThemeSync() {\n if (!syncTheme.value) return;\n setTimeout(() => {\n syncThemeFromEngine();\n const container = document.querySelector('.cli-panel-wrapper .terminal-container');\n if (!container) return;\n themeObserver?.disconnect();\n themeObserver = new MutationObserver(syncThemeFromEngine);\n themeObserver.observe(container, { attributes: true, attributeFilter: ['style'] });\n }, 200);\n }\n\n onMounted(() => {\n document.addEventListener('click', closePositionDropdown);\n });\n\n onBeforeUnmount(() => {\n themeObserver?.disconnect();\n document.removeEventListener('click', closePositionDropdown);\n });\n\n function toggle() {\n const newVal = !resolvedCollapsed.value;\n updateCollapsed(newVal);\n if (!newVal && !initialized.value) {\n initialized.value = true;\n addTab();\n setupThemeSync();\n }\n }\n\n function closeTab(id: number) {\n const idx = tabs.value.findIndex((t) => t.id === id);\n if (idx === -1) return;\n tabs.value.splice(idx, 1);\n emit('tab-closed', { tabId: id });\n if (tabs.value.length === 0) {\n initialized.value = false;\n updateCollapsed(true);\n return;\n }\n if (resolvedActiveTabId.value === id) {\n const newIdx = Math.min(idx, tabs.value.length - 1);\n selectTab(tabs.value[newIdx].id);\n }\n }\n\n function selectTab(id: number) {\n updateActiveTabId(id);\n const tab = tabs.value.find((t) => t.id === id);\n if (tab && tab.panes.length > 0) {\n activePaneId.value = tab.panes[0].id;\n }\n }\n\n /* ─── Split / close pane ─────────────────────────── */\n\n function splitPane(tabId?: number): number {\n const targetTabId = tabId ?? resolvedActiveTabId.value;\n const paneId = nextPaneId++;\n tabs.value = tabs.value.map(t => {\n if (t.id !== targetTabId) return t;\n const newPanes = [...t.panes, { id: paneId, widthPercent: 0 }];\n normalizePanes(newPanes);\n return { ...t, panes: newPanes };\n });\n activePaneId.value = paneId;\n emit('pane-split', { paneId, tabId: targetTabId });\n return paneId;\n }\n\n function closePane(paneId: number): void {\n for (const tab of tabs.value) {\n const idx = tab.panes.findIndex(p => p.id === paneId);\n if (idx === -1) continue;\n if (tab.panes.length <= 1) { closeTab(tab.id); return; }\n engineMap.get(paneId)?.destroy();\n engineMap.delete(paneId);\n const newPanes = tab.panes.filter(p => p.id !== paneId);\n normalizePanes(newPanes);\n if (activePaneId.value === paneId) {\n activePaneId.value = newPanes[Math.min(idx, newPanes.length - 1)].id;\n }\n emit('pane-closed', { paneId });\n tabs.value = tabs.value.map(t =>\n t.id === tab.id ? { ...t, panes: newPanes } : t,\n );\n return;\n }\n }\n\n /** Add renameTab for programmatic use */\n function renameTab(tabId: number, title: string): void {\n tabs.value = tabs.value.map(t => t.id === tabId ? { ...t, title } : t);\n }\n\n /* ─── Rename ─────────────────────────────────────── */\n\n function startRename(tabId: number) {\n tabs.value.forEach((t) => {\n t.isEditing = t.id === tabId;\n });\n }\n\n function commitRename(tabId: number, value: string) {\n const trimmed = value.trim();\n const tab = tabs.value.find((t) => t.id === tabId);\n if (tab) {\n if (trimmed) tab.title = trimmed;\n tab.isEditing = false;\n }\n }\n\n /* ─── Context menu ───────────────────────────────── */\n\n function closeContextMenu() {\n contextMenu.value = { ...contextMenu.value, visible: false };\n }\n\n function onDocClick() {\n if (contextMenu.value.visible) closeContextMenu();\n }\n onMounted(() => document.addEventListener('click', onDocClick));\n onBeforeUnmount(() =>\n document.removeEventListener('click', onDocClick),\n );\n\n /* ─── Panel resize ───────────────────────────────── */\n\n function onPanelResizeStart(e: MouseEvent) {\n if (!resizable.value) return;\n e.preventDefault();\n if (resolvedCollapsed.value) toggle();\n panelResizing.value = true;\n panelResizeState = {\n startY: e.clientY,\n startHeight: resolvedHeight.value,\n startX: e.clientX,\n startWidth: resolvedWidth.value,\n };\n }\n\n function onPanelResizeMove(e: MouseEvent) {\n if (!panelResizing.value) return;\n if (isHorizontal.value) {\n const deltaX = resolvedPosition.value === 'left'\n ? e.clientX - panelResizeState.startX\n : panelResizeState.startX - e.clientX;\n let next = Math.max(100, panelResizeState.startWidth + deltaX);\n if (next > window.innerWidth) next = window.innerWidth;\n updateWidth(next);\n } else {\n const deltaY = resolvedPosition.value === 'top'\n ? e.clientY - panelResizeState.startY\n : panelResizeState.startY - e.clientY;\n let next = Math.max(100, panelResizeState.startHeight + deltaY);\n if (next > window.innerHeight) next = window.innerHeight;\n updateHeight(next);\n }\n }\n\n function onPanelResizeEnd() {\n panelResizing.value = false;\n }\n\n onMounted(() => {\n document.addEventListener('mousemove', onPanelResizeMove);\n document.addEventListener('mouseup', onPanelResizeEnd);\n });\n onBeforeUnmount(() => {\n document.removeEventListener('mousemove', onPanelResizeMove);\n document.removeEventListener('mouseup', onPanelResizeEnd);\n });\n\n /* ─── Pane resize ────────────────────────────────── */\n\n function onPaneResizeStart(\n e: MouseEvent,\n tabId: number,\n dividerIndex: number,\n ) {\n e.preventDefault();\n const tab = tabs.value.find((t) => t.id === tabId);\n if (!tab) return;\n paneResizing.value = true;\n const container = (e.target as HTMLElement).closest(\n '.cli-panel-panes-container',\n );\n paneResizeState = {\n tabId,\n dividerIndex,\n startX: e.clientX,\n startWidths: tab.panes.map((p) => p.widthPercent),\n containerWidth: container ? container.clientWidth : 1,\n };\n document.body.classList.add('cli-pane-resizing');\n }\n\n function onPaneResizeMove(e: MouseEvent) {\n if (!paneResizing.value) return;\n const s = paneResizeState;\n const deltaPct = ((e.clientX - s.startX) / s.containerWidth) * 100;\n const i = s.dividerIndex;\n let leftW = s.startWidths[i] + deltaPct;\n let rightW = s.startWidths[i + 1] - deltaPct;\n if (leftW < MIN_PANE_WIDTH_PERCENT) {\n leftW = MIN_PANE_WIDTH_PERCENT;\n rightW =\n s.startWidths[i] +\n s.startWidths[i + 1] -\n MIN_PANE_WIDTH_PERCENT;\n }\n if (rightW < MIN_PANE_WIDTH_PERCENT) {\n rightW = MIN_PANE_WIDTH_PERCENT;\n leftW =\n s.startWidths[i] +\n s.startWidths[i + 1] -\n MIN_PANE_WIDTH_PERCENT;\n }\n const tab = tabs.value.find((t) => t.id === s.tabId);\n if (tab) {\n tab.panes[i].widthPercent = leftW;\n tab.panes[i + 1].widthPercent = rightW;\n }\n }\n\n function onPaneResizeEnd() {\n if (!paneResizing.value) return;\n paneResizing.value = false;\n document.body.classList.remove('cli-pane-resizing');\n }\n\n onMounted(() => {\n document.addEventListener('mousemove', onPaneResizeMove);\n document.addEventListener('mouseup', onPaneResizeEnd);\n });\n onBeforeUnmount(() => {\n document.removeEventListener('mousemove', onPaneResizeMove);\n document.removeEventListener('mouseup', onPaneResizeEnd);\n });\n\n /* ─── Maximize ───────────────────────────────────── */\n\n function toggleMaximize() {\n if (!resolvedMaximized.value) {\n if (isHorizontal.value) {\n prevWidth.value = resolvedWidth.value;\n updateWidth(window.innerWidth);\n } else {\n prevHeight.value = resolvedHeight.value;\n updateHeight(window.innerHeight);\n }\n } else {\n if (isHorizontal.value) {\n updateWidth(prevWidth.value);\n } else {\n updateHeight(prevHeight.value);\n }\n }\n updateMaximized(!resolvedMaximized.value);\n }\n\n /* ─── Close handler ──────────────────────────────── */\n\n function handleClose() {\n visible.value = false;\n emit('close');\n props.onClose?.();\n }\n\n function handleHide() {\n preHideCollapsed = resolvedCollapsed.value;\n updateHidden(true);\n }\n\n function handleUnhide() {\n updateHidden(false);\n updateCollapsed(preHideCollapsed);\n }\n\n const positionDropdownOpen = ref(false);\n\n function closePositionDropdown() {\n positionDropdownOpen.value = false;\n }\n\n function togglePositionDropdown(e: MouseEvent) {\n e.stopPropagation();\n positionDropdownOpen.value = !positionDropdownOpen.value;\n }\n\n function selectPosition(pos: CliPanelPosition) {\n positionDropdownOpen.value = false;\n updatePosition(pos);\n }\n\n /* ─── Engine access & state ──────────────────────── */\n\n function getEngine(paneId?: number): CliEngine | undefined {\n const targetId = paneId ?? activePaneId.value;\n return engineMap.get(targetId);\n }\n\n function getState(): CliPanelState {\n return {\n collapsed: resolvedCollapsed.value,\n hidden: resolvedHidden.value,\n maximized: resolvedMaximized.value,\n position: resolvedPosition.value,\n height: resolvedHeight.value,\n width: resolvedWidth.value,\n activeTabId: resolvedActiveTabId.value,\n activePaneId: activePaneId.value,\n tabs: tabs.value.map(t => ({\n id: t.id, title: t.title,\n panes: t.panes.map(p => ({ id: p.id, widthPercent: p.widthPercent })),\n })),\n };\n }\n\n /* ─── Expose programmatic API (ICliPanelRef) ──── */\n\n expose({\n open: () => {\n if (!visible.value) { visible.value = true; }\n if (resolvedHidden.value) { updateHidden(false); }\n if (resolvedCollapsed.value) {\n updateCollapsed(false);\n if (!initialized.value) {\n initialized.value = true;\n addTab();\n setupThemeSync();\n }\n }\n },\n collapse: () => { if (!resolvedCollapsed.value) updateCollapsed(true); },\n toggleCollapse: () => {\n if (resolvedCollapsed.value) {\n updateCollapsed(false);\n if (!initialized.value) { initialized.value = true; addTab(); setupThemeSync(); }\n } else { updateCollapsed(true); }\n },\n hide: () => { if (!resolvedHidden.value) updateHidden(true); },\n unhide: () => { if (resolvedHidden.value) updateHidden(false); },\n toggleHide: () => { updateHidden(!resolvedHidden.value); },\n close: handleClose,\n maximize: () => { if (!resolvedMaximized.value) updateMaximized(true); },\n restore: () => { if (resolvedMaximized.value) updateMaximized(false); },\n toggleMaximize: () => { updateMaximized(!resolvedMaximized.value); },\n resize: (dims: { height?: number; width?: number }) => {\n if (dims.height !== undefined) updateHeight(dims.height);\n if (dims.width !== undefined) updateWidth(dims.width);\n },\n setPosition: updatePosition,\n addTab, closeTab, selectTab, renameTab, splitPane, closePane, getEngine, getState,\n });\n\n /* ─── Render ─────────────────────────────────────── */\n\n return () => {\n if (!visible.value) return null;\n\n const wrapperClass = [\n 'cli-panel-wrapper',\n resolvedCollapsed.value && 'collapsed',\n resolvedMaximized.value && 'maximized',\n panelResizing.value && 'resizing',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperStyle = {\n ...(isHorizontal.value ? { width: `${resolvedWidth.value}px` } : { height: `${resolvedHeight.value}px` }),\n ...(resolvedHidden.value ? { display: 'none' } : {}),\n ...themeStyles.value,\n ...props.style,\n };\n\n const headerEl = h('div', { class: 'cli-panel-header' }, [\n h(\n 'div',\n {\n class: 'cli-panel-resize-bar',\n onMousedown: onPanelResizeStart,\n },\n [h('div', { class: 'cli-panel-resize-grip' })],\n ),\n h('div', { class: 'cli-panel-header-content' }, [\n h('p', { class: 'cli-panel-title' }, [\n h('span', { class: 'cli-panel-title-icon' }, [\n terminalIcon(),\n ]),\n 'CLI',\n ]),\n h('div', { class: 'cli-panel-action-buttons' }, [\n h('div', {\n class: 'cli-panel-btn-position-wrapper',\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }, [\n h('button', {\n class: 'cli-panel-btn cli-panel-btn-position',\n title: 'Move panel',\n onClick: togglePositionDropdown,\n }, [positionIcon(resolvedPosition.value)]),\n positionDropdownOpen.value\n ? h('div', { class: 'cli-panel-position-dropdown' },\n (['bottom', 'top', 'left', 'right'] as CliPanelPosition[]).map(pos =>\n h('button', {\n class: ['cli-panel-position-dropdown-item', resolvedPosition.value === pos ? 'active' : ''].filter(Boolean).join(' '),\n onClick: () => selectPosition(pos),\n }, [\n positionIcon(pos, 16),\n pos.charAt(0).toUpperCase() + pos.slice(1),\n ]),\n ),\n )\n : null,\n ]),\n hideable.value\n ? h('button', {\n class: 'cli-panel-btn cli-panel-btn-hide',\n title: 'Hide',\n onClick: handleHide,\n }, [hideIcon()])\n : null,\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: resolvedMaximized.value ? 'Restore' : 'Maximize',\n disabled: resolvedCollapsed.value,\n onClick: toggleMaximize,\n },\n [resolvedMaximized.value ? restoreIcon() : maximizeIcon()],\n ),\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: resolvedCollapsed.value ? 'Expand' : 'Collapse',\n onClick: toggle,\n },\n [collapseChevron(resolvedPosition.value, resolvedCollapsed.value)],\n ),\n closable.value\n ? h(\n 'button',\n {\n class: 'cli-panel-btn cli-panel-btn-close',\n title: 'Close',\n onClick: handleClose,\n },\n [closeIcon()],\n )\n : null,\n ]),\n ]),\n ]);\n\n const contentEl =\n initialized.value\n ? h('div', { class: 'cli-panel-content', style: resolvedCollapsed.value ? { display: 'none' } : undefined }, [\n // Tab bar\n h('div', { class: 'cli-panel-tabs' }, [\n h(\n 'ul',\n { class: 'cli-panel-tab-list' },\n tabs.value.map((tab) =>\n h(\n 'li',\n {\n key: tab.id,\n class: [\n 'cli-panel-tab',\n tab.id ===\n resolvedActiveTabId.value &&\n 'active',\n ]\n .filter(Boolean)\n .join(' '),\n onClick: () => selectTab(tab.id),\n onDblclick: () =>\n startRename(tab.id),\n onContextmenu: (\n e: MouseEvent,\n ) => {\n e.preventDefault();\n e.stopPropagation();\n contextMenu.value = {\n visible: true,\n x: e.clientX,\n y: e.clientY,\n tabId: tab.id,\n };\n },\n },\n tab.isEditing\n ? [\n h('input', {\n class: 'cli-panel-tab-rename-input',\n type: 'text',\n value: tab.title,\n onKeydown: (\n e: KeyboardEvent,\n ) => {\n if (\n e.key ===\n 'Enter'\n )\n commitRename(\n tab.id,\n (\n e.target as HTMLInputElement\n ).value,\n );\n else if (\n e.key ===\n 'Escape'\n ) {\n tab.isEditing = false;\n }\n },\n onBlur: (\n e: FocusEvent,\n ) =>\n commitRename(\n tab.id,\n (\n e.target as HTMLInputElement\n ).value,\n ),\n onClick: (\n e: MouseEvent,\n ) =>\n e.stopPropagation(),\n onDblclick: (\n e: MouseEvent,\n ) =>\n e.stopPropagation(),\n }),\n ]\n : [\n h(\n 'span',\n {\n class: 'cli-panel-tab-title',\n },\n tab.title,\n ),\n h(\n 'button',\n {\n class: 'cli-panel-tab-close-btn',\n title: 'Close tab',\n onClick: (\n e: MouseEvent,\n ) => {\n e.stopPropagation();\n closeTab(\n tab.id,\n );\n },\n },\n '\\u00d7',\n ),\n ],\n ),\n ),\n ),\n h(\n 'button',\n {\n class: 'cli-panel-add-tab',\n title: 'New terminal',\n onClick: addTab,\n },\n '+',\n ),\n ]),\n // Terminal instances\n h(\n 'div',\n { class: 'cli-panel-instances' },\n tabs.value.map((tab) =>\n h(\n 'div',\n {\n key: tab.id,\n class: 'cli-panel-instance',\n style: {\n display:\n tab.id === resolvedActiveTabId.value\n ? undefined\n : 'none',\n },\n },\n [\n h(\n 'div',\n {\n class: [\n 'cli-panel-panes-container',\n paneResizing.value &&\n 'resizing',\n ]\n .filter(Boolean)\n .join(' '),\n },\n tab.panes.flatMap((pane, i) => {\n const nodes: any[] = [];\n if (i > 0) {\n nodes.push(\n h(\n 'div',\n {\n class: 'cli-panel-pane-divider',\n onMousedown: (\n e: MouseEvent,\n ) =>\n onPaneResizeStart(\n e,\n tab.id,\n i - 1,\n ),\n },\n [\n h('div', {\n class: 'cli-panel-pane-divider-grip',\n }),\n ],\n ),\n );\n }\n nodes.push(\n h(\n 'div',\n {\n class: [\n 'cli-panel-pane',\n pane.id ===\n activePaneId.value &&\n tab.id ===\n resolvedActiveTabId.value &&\n 'active-pane',\n ]\n .filter(\n Boolean,\n )\n .join(' '),\n style: {\n flex: `${pane.widthPercent} 1 0`,\n },\n onClick: () => {\n activePaneId.value =\n pane.id;\n updateActiveTabId(tab.id);\n },\n },\n [\n tab.panes.length >\n 1\n ? h(\n 'button',\n {\n class: 'cli-panel-pane-close-btn',\n title: 'Close pane',\n onClick:\n (\n e: MouseEvent,\n ) => {\n e.stopPropagation();\n closePane(\n pane.id,\n );\n },\n },\n '\\u00d7',\n )\n : null,\n h(Cli, {\n options:\n mergedOptions.value,\n modules:\n mergedModules.value,\n processors:\n mergedProcessors.value,\n services:\n mergedServices.value,\n snapshot: pane.snapshot,\n style: {\n height: '100%',\n },\n onReady: (engine: CliEngine) => {\n engineMap.set(pane.id, engine);\n },\n }),\n ],\n ),\n );\n return nodes;\n }),\n ),\n ],\n ),\n ),\n ),\n ])\n : null;\n\n const contextMenuEl = contextMenu.value.visible\n ? h(\n 'div',\n {\n class: 'cli-panel-context-menu',\n style: {\n left: `${contextMenu.value.x}px`,\n top: `${contextMenu.value.y}px`,\n },\n onClick: (e: MouseEvent) => e.stopPropagation(),\n },\n [\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n closeContextMenu();\n startRename(contextMenu.value.tabId);\n },\n },\n 'Rename',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n const tab = tabs.value.find(\n (t) =>\n t.id === contextMenu.value.tabId,\n );\n closeContextMenu();\n if (!tab) return;\n\n const sourceEngine = engineMap.get(tab.panes[0]?.id);\n const snapshot = sourceEngine?.snapshot();\n\n const paneId = nextPaneId++;\n const tabId = nextTabId++;\n const idx = tabs.value.indexOf(tab);\n tabs.value.splice(idx + 1, 0, {\n id: tabId,\n title: `${tab.title} (copy)`,\n isEditing: false,\n panes: [\n { id: paneId, widthPercent: 100, snapshot },\n ],\n });\n updateActiveTabId(tabId);\n activePaneId.value = paneId;\n },\n },\n 'Duplicate',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n closeContextMenu();\n splitPane(contextMenu.value.tabId);\n },\n },\n 'Split Right',\n ),\n h('div', {\n class: 'cli-panel-context-menu-separator',\n }),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n closeContextMenu();\n closeTab(contextMenu.value.tabId);\n },\n },\n 'Close',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n disabled: tabs.value.length <= 1,\n onClick: () => {\n const id = contextMenu.value.tabId;\n closeContextMenu();\n tabs.value = tabs.value.filter(\n (t) => t.id === id,\n );\n updateActiveTabId(id);\n },\n },\n 'Close Others',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n const id = contextMenu.value.tabId;\n closeContextMenu();\n const idx = tabs.value.findIndex(\n (t) => t.id === id,\n );\n if (idx !== -1)\n tabs.value = tabs.value.slice(\n 0,\n idx + 1,\n );\n },\n },\n 'Close to the Right',\n ),\n h('div', {\n class: 'cli-panel-context-menu-separator',\n }),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item destructive',\n onClick: () => {\n closeContextMenu();\n tabs.value = [];\n initialized.value = false;\n updateCollapsed(true);\n },\n },\n 'Close All',\n ),\n ],\n )\n : null;\n\n const hideTabEl = resolvedHidden.value\n ? h('button', {\n class: 'cli-panel-hide-tab',\n 'data-position': resolvedPosition.value,\n 'data-hide-align': hideAlignment.value,\n style: themeStyles.value,\n title: 'Show CLI',\n onClick: handleUnhide,\n }, [\n h('svg', { class: 'cli-panel-hide-tab-icon', ...svgAttrs, width: '16', height: '16', 'stroke-width': '2' }, [\n h('polyline', { points: '4 17 10 11 4 5' }),\n h('line', { x1: '12', y1: '19', x2: '20', y2: '19' }),\n ]),\n h('span', { class: 'cli-panel-hide-tab-label' }, 'CLI'),\n hideTabChevron(resolvedPosition.value),\n ])\n : null;\n\n return h('div', {}, [\n hideTabEl,\n h(\n 'div',\n {\n class: wrapperClass,\n style: wrapperStyle,\n 'data-position': resolvedPosition.value,\n 'data-resizable': String(resizable.value),\n 'data-closable': String(closable.value),\n 'data-hideable': String(hideable.value),\n },\n [headerEl, contentEl],\n ),\n contextMenuEl,\n ]);\n };\n },\n});\n","import { defineComponent, ref, PropType, h, provide } from 'vue';\nimport { ICliCommandProcessor, ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\nimport { CliInjectionKey } from './cliInjection';\nimport { useCliEngine } from './useCliEngine';\n\nexport const CliProvider = defineComponent({\n name: 'CliProvider',\n props: {\n modules: {\n type: Array as PropType<ICliModule[]>,\n default: undefined,\n },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n options: {\n type: Object as PropType<CliEngineOptions>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string>>,\n default: undefined,\n },\n },\n emits: ['ready'],\n setup(props, { slots, emit }) {\n const containerRef = ref<HTMLElement | null>(null);\n const engine = useCliEngine(containerRef, {\n modules: props.modules,\n processors: props.processors,\n options: props.options,\n services: props.services,\n });\n\n provide(CliInjectionKey, { engine });\n\n return () =>\n h('div', { style: { height: '100%' } }, [\n h('div', {\n ref: containerRef,\n style: { height: '100%', ...props.style },\n }),\n slots.default?.(),\n ]);\n },\n});\n","import { ref, onMounted, onBeforeUnmount, Ref, shallowRef } from 'vue';\nimport { CliEngine, CliEngineOptions } from '@qodalis/cli';\nimport { ICliCommandProcessor, ICliModule } from '@qodalis/cli-core';\n\nexport interface UseCliEngineConfig {\n modules?: ICliModule[];\n processors?: ICliCommandProcessor[];\n options?: CliEngineOptions;\n services?: Record<string, any>;\n}\n\nexport function useCliEngine(\n containerRef: Ref<HTMLElement | null>,\n config?: UseCliEngineConfig,\n): Ref<CliEngine | null> {\n const engine = shallowRef<CliEngine | null>(null);\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n const e = new CliEngine(containerRef.value, config?.options);\n\n e.registerService('cli-framework', 'Vue');\n\n if (config?.services) {\n for (const [token, value] of Object.entries(config.services)) {\n e.registerService(token, value);\n }\n }\n\n if (config?.modules) {\n e.registerModules(config.modules);\n }\n\n if (config?.processors) {\n e.registerProcessors(config.processors);\n }\n\n await e.start();\n engine.value = e;\n });\n\n onBeforeUnmount(() => {\n engine.value?.destroy();\n engine.value = null;\n });\n\n return engine;\n}\n","import { inject } from 'vue';\nimport { CliInjectionKey, CliContextValue } from './cliInjection';\n\nexport function useCli(): CliContextValue {\n const ctx = inject(CliInjectionKey);\n if (!ctx) {\n throw new Error(\n 'useCli() must be used inside a <CliProvider> component',\n );\n }\n return ctx;\n}\n","export { Cli } from './Cli';\nexport type { CliProps } from './Cli';\nexport { CliPanel } from './CliPanel';\nexport type { CliPanelOptions } from './CliPanel';\nexport { CliProvider } from './CliProvider';\nexport { CliConfigProvider, CliConfigKey } from './CliConfigProvider';\nexport type { CliConfigValue } from './CliConfigProvider';\nexport { useCli } from './useCli';\nexport { useCliEngine } from './useCliEngine';\nexport { CliInjectionKey } from './cliInjection';\nexport type { CliContextValue } from './cliInjection';\nexport type { UseCliEngineConfig } from './useCliEngine';\n\n// Re-export commonly used types from @qodalis/cli for convenience\nexport type { CliEngineOptions } from '@qodalis/cli';\nexport { CliEngine } from '@qodalis/cli';\n"],"mappings":"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","names":["defineComponent","defineComponent","defineComponent","ref","inject","h","onMounted","onBeforeUnmount","h","defineComponent","inject","ref","onMounted","onBeforeUnmount","defineComponent","ref","h","provide","onMounted","onBeforeUnmount","CliEngine","defineComponent","ref","provide","h","inject","inject","CliEngine"]}
1
+ {"version":3,"sources":["../src/Cli.ts","../src/cliInjection.ts","../src/CliConfigProvider.ts","../src/CliPanel.ts","../src/CliProvider.ts","../src/useCliEngine.ts","../src/useCli.ts","../src/index.ts"],"sourcesContent":["import {\n defineComponent,\n ref,\n onMounted,\n onBeforeUnmount,\n PropType,\n h,\n inject,\n} from 'vue';\nimport { ICliCommandProcessor, ICliModule, CliEngineSnapshot } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions } from '@qodalis/cli';\nimport { CliInjectionKey } from './cliInjection';\nimport { CliConfigKey } from './CliConfigProvider';\n\n/**\n * Props accepted by the Vue `Cli` component.\n */\nexport interface CliProps {\n modules?: ICliModule[];\n processors?: ICliCommandProcessor[];\n options?: CliEngineOptions;\n services?: Record<string, any>;\n snapshot?: CliEngineSnapshot;\n style?: Record<string, string>;\n class?: string;\n}\n\nexport const Cli = defineComponent({\n name: 'Cli',\n props: {\n modules: {\n type: Array as PropType<ICliModule[]>,\n default: undefined,\n },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n options: {\n type: Object as PropType<CliEngineOptions>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n snapshot: {\n type: Object as PropType<CliEngineSnapshot>,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string>>,\n default: undefined,\n },\n class: {\n type: String,\n default: undefined,\n },\n },\n emits: ['ready'],\n setup(props, { emit }) {\n const containerRef = ref<HTMLElement | null>(null);\n const ctx = inject(CliInjectionKey, null);\n const config = inject(CliConfigKey, null);\n let engine: CliEngine | null = null;\n\n // If inside a CliProvider, don't create our own engine\n if (ctx) {\n return () => null;\n }\n\n // Merge: local props override config context\n const modules = props.modules ?? config?.modules;\n const processors = props.processors ?? config?.processors;\n const options = props.options ?? config?.options;\n const services = props.services ?? config?.services;\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n const engineOptions = props.snapshot\n ? { ...options, snapshot: props.snapshot }\n : options;\n engine = new CliEngine(containerRef.value, engineOptions);\n\n engine.registerService('cli-framework', 'Vue');\n\n if (services) {\n for (const [token, value] of Object.entries(services)) {\n engine.registerService(token, value);\n }\n }\n\n if (modules) {\n engine.registerModules(modules);\n }\n\n if (processors) {\n engine.registerProcessors(processors);\n }\n\n await engine.start();\n emit('ready', engine);\n });\n\n onBeforeUnmount(() => {\n engine?.destroy();\n engine = null;\n });\n\n return () =>\n h('div', {\n ref: containerRef,\n style: { height: '100%', ...props.style },\n class: props.class,\n });\n },\n});\n","import { InjectionKey, Ref } from 'vue';\nimport { CliEngine } from '@qodalis/cli';\n\nexport interface CliContextValue {\n engine: Ref<CliEngine | null>;\n}\n\nexport const CliInjectionKey: InjectionKey<CliContextValue> =\n Symbol('qodalis-cli');\n","import { defineComponent, provide, PropType, InjectionKey } from 'vue';\nimport { ICliCommandProcessor, ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\n\nexport interface CliConfigValue {\n modules?: ICliModule[];\n processors?: ICliCommandProcessor[];\n options?: CliEngineOptions;\n services?: Record<string, any>;\n}\n\nexport const CliConfigKey: InjectionKey<CliConfigValue> =\n Symbol('qodalis-cli-config');\n\nexport const CliConfigProvider = defineComponent({\n name: 'CliConfigProvider',\n props: {\n modules: {\n type: Array as PropType<ICliModule[]>,\n default: undefined,\n },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n options: {\n type: Object as PropType<CliEngineOptions>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n provide(CliConfigKey, {\n modules: props.modules,\n processors: props.processors,\n options: props.options,\n services: props.services,\n });\n\n return () => slots.default?.();\n },\n});\n","import {\n defineComponent,\n ref,\n computed,\n inject,\n watch,\n PropType,\n h,\n onMounted,\n onBeforeUnmount,\n} from 'vue';\nimport { ICliCommandProcessor, ICliModule, CliPanelConfig, CliPanelPosition, CliPanelHideAlignment, CliEngineSnapshot, CliPanelState, derivePanelThemeStyles, loadPanelPosition, savePanelPosition, CliNotification } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions } from '@qodalis/cli';\nimport { Cli } from './Cli';\nimport { CliConfigKey } from './CliConfigProvider';\n\nexport interface CliPanelOptions extends CliEngineOptions, CliPanelConfig {}\n\ninterface TerminalPane {\n id: number;\n widthPercent: number;\n snapshot?: CliEngineSnapshot;\n}\n\ninterface TerminalTab {\n id: number;\n title: string;\n isEditing: boolean;\n panes: TerminalPane[];\n}\n\ninterface TabContextMenu {\n visible: boolean;\n x: number;\n y: number;\n tabId: number;\n}\n\nconst MIN_PANE_WIDTH_PERCENT = 10;\n\nfunction normalizePanes(panes: TerminalPane[]) {\n const total = panes.reduce((s, p) => s + p.widthPercent, 0);\n if (total === 0) return;\n const scale = 100 / total;\n panes.forEach((p) => {\n p.widthPercent *= scale;\n });\n}\n\n/* ─── SVG helpers ────────────────────────────────────────── */\n\nconst svgAttrs = {\n width: '20',\n height: '20',\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '1.8',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n};\n\nconst terminalIcon = () =>\n h('svg', { ...svgAttrs, width: '22', height: '22', 'stroke-width': '2' }, [\n h('polyline', { points: '4 17 10 11 4 5' }),\n h('line', { x1: '12', y1: '19', x2: '20', y2: '19' }),\n ]);\nconst maximizeIcon = () =>\n h('svg', svgAttrs, [\n h('polyline', { points: '15 3 21 3 21 9' }),\n h('polyline', { points: '9 21 3 21 3 15' }),\n h('line', { x1: '21', y1: '3', x2: '14', y2: '10' }),\n h('line', { x1: '3', y1: '21', x2: '10', y2: '14' }),\n ]);\nconst restoreIcon = () =>\n h('svg', svgAttrs, [\n h('polyline', { points: '4 14 10 14 10 20' }),\n h('polyline', { points: '20 10 14 10 14 4' }),\n h('line', { x1: '14', y1: '10', x2: '21', y2: '3' }),\n h('line', { x1: '3', y1: '21', x2: '10', y2: '14' }),\n ]);\nconst closeIcon = () =>\n h('svg', svgAttrs, [\n h('line', { x1: '18', y1: '6', x2: '6', y2: '18' }),\n h('line', { x1: '6', y1: '6', x2: '18', y2: '18' }),\n ]);\nconst hideIcon = () =>\n h('svg', svgAttrs, [\n h('line', { x1: '5', y1: '18', x2: '19', y2: '18' }),\n h('polyline', { points: '9 14 12 17 15 14' }),\n ]);\n\nfunction collapseChevron(position: CliPanelPosition, isCollapsed: boolean) {\n let points: string;\n switch (position) {\n case 'top':\n points = isCollapsed ? '6 9 12 15 18 9' : '18 15 12 9 6 15';\n break;\n case 'left':\n points = isCollapsed ? '9 18 15 12 9 6' : '15 6 9 12 15 18';\n break;\n case 'right':\n points = isCollapsed ? '15 6 9 12 15 18' : '9 18 15 12 9 6';\n break;\n default: // bottom\n points = isCollapsed ? '18 15 12 9 6 15' : '6 9 12 15 18 9';\n break;\n }\n return h('svg', svgAttrs, [h('polyline', { points })]);\n}\n\nfunction hideTabChevron(position: CliPanelPosition) {\n let points: string;\n switch (position) {\n case 'top': points = '6 9 12 15 18 9'; break;\n case 'left': points = '9 18 15 12 9 6'; break;\n case 'right': points = '15 6 9 12 15 18'; break;\n default: points = '18 15 12 9 6 15'; break;\n }\n return h('svg', { class: 'cli-panel-hide-tab-arrow', ...svgAttrs, width: '14', height: '14', 'stroke-width': '2.5' }, [\n h('polyline', { points }),\n ]);\n}\n\nfunction positionIcon(pos: string, size = 20) {\n let fillRect: any;\n switch (pos) {\n case 'top':\n fillRect = h('rect', { x: '4', y: '4', width: '16', height: '5', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n case 'left':\n fillRect = h('rect', { x: '4', y: '4', width: '5', height: '16', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n case 'right':\n fillRect = h('rect', { x: '15', y: '4', width: '5', height: '16', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n default: // bottom\n fillRect = h('rect', { x: '4', y: '15', width: '16', height: '5', rx: '1', fill: 'currentColor', stroke: 'none', opacity: '0.5' });\n break;\n }\n return h('svg', { ...svgAttrs, width: String(size), height: String(size) }, [\n h('rect', { x: '3', y: '3', width: '18', height: '18', rx: '2' }),\n fillRect,\n ]);\n}\n\n/* ─── Component ──────────────────────────────────────────── */\n\nexport const CliPanel = defineComponent({\n name: 'CliPanel',\n props: {\n options: {\n type: Object as PropType<CliPanelOptions>,\n default: undefined,\n },\n modules: { type: Array as PropType<ICliModule[]>, default: undefined },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n onClose: {\n type: Function as PropType<() => void>,\n default: undefined,\n },\n collapsed: { type: Boolean, default: undefined },\n hidden: { type: Boolean, default: undefined },\n maximized: { type: Boolean, default: undefined },\n activeTabId: { type: Number, default: undefined },\n position: { type: String as PropType<CliPanelPosition>, default: undefined },\n height: { type: Number, default: undefined },\n width: { type: Number, default: undefined },\n style: {\n type: Object as PropType<Record<string, string>>,\n default: undefined,\n },\n class: { type: String, default: undefined },\n },\n emits: [\n 'update:collapsed', 'update:hidden', 'update:maximized',\n 'update:activeTabId', 'update:position', 'update:height', 'update:width',\n 'close', 'tab-added', 'tab-closed', 'pane-split', 'pane-closed',\n ],\n setup(props, { expose, emit }) {\n const config = inject(CliConfigKey, null);\n\n // Merge: local props override config context\n const mergedOptions = computed(() => props.options\n ? { ...(config?.options as CliPanelOptions | undefined), ...props.options }\n : config?.options as CliPanelOptions | undefined);\n const mergedModules = computed(() => props.modules ?? config?.modules);\n const mergedProcessors = computed(() => props.processors ?? config?.processors);\n const mergedServices = computed(() => props.services ?? config?.services);\n\n const visible = ref(true);\n const internalCollapsed = ref(mergedOptions.value?.isCollapsed ?? true);\n const internalMaximized = ref(false);\n const internalHeight = ref(600);\n const internalWidth = ref(400);\n const prevHeight = ref(600);\n const prevWidth = ref(400);\n const initialized = ref(false);\n const internalHidden = ref(props.options?.isHidden ?? false);\n let preHideCollapsed = true;\n const internalActiveTabId = ref(0);\n\n const internalPosition = ref<CliPanelPosition>(\n loadPanelPosition() ?? mergedOptions.value?.position ?? 'bottom',\n );\n\n /* ─── Resolved (controlled/uncontrolled) ────────── */\n\n const resolvedCollapsed = computed(() =>\n props.collapsed !== undefined ? props.collapsed : internalCollapsed.value);\n const resolvedHidden = computed(() =>\n props.hidden !== undefined ? props.hidden : internalHidden.value);\n const resolvedMaximized = computed(() =>\n props.maximized !== undefined ? props.maximized : internalMaximized.value);\n const resolvedActiveTabId = computed(() =>\n props.activeTabId !== undefined ? props.activeTabId : internalActiveTabId.value);\n const resolvedHeight = computed(() =>\n props.height !== undefined ? props.height : internalHeight.value);\n const resolvedWidth = computed(() =>\n props.width !== undefined ? props.width : internalWidth.value);\n const resolvedPosition = computed(() =>\n props.position !== undefined ? props.position as CliPanelPosition : internalPosition.value);\n\n /* ─── Update helpers ────────────────────────────── */\n\n function updateCollapsed(value: boolean) {\n internalCollapsed.value = value;\n emit('update:collapsed', value);\n }\n function updateHidden(value: boolean) {\n internalHidden.value = value;\n emit('update:hidden', value);\n }\n function updateMaximized(value: boolean) {\n internalMaximized.value = value;\n emit('update:maximized', value);\n }\n function updateActiveTabId(value: number) {\n internalActiveTabId.value = value;\n emit('update:activeTabId', value);\n }\n function updateHeight(value: number) {\n internalHeight.value = value;\n emit('update:height', value);\n }\n function updateWidth(value: number) {\n internalWidth.value = value;\n emit('update:width', value);\n }\n function updatePosition(value: CliPanelPosition) {\n internalPosition.value = value;\n savePanelPosition(value);\n emit('update:position', value);\n }\n const closable = computed(() => mergedOptions.value?.closable ?? true);\n const resizable = computed(() => mergedOptions.value?.resizable ?? true);\n const isHorizontal = computed(() => resolvedPosition.value === 'left' || resolvedPosition.value === 'right');\n const hideable = computed(() => mergedOptions.value?.hideable ?? true);\n const hideAlignment = computed<CliPanelHideAlignment>(() => mergedOptions.value?.hideAlignment ?? 'center');\n const syncTheme = computed(() => mergedOptions.value?.syncTheme ?? false);\n const themeStyles = ref<Record<string, string>>({});\n\n const tabs = ref<TerminalTab[]>([]);\n const activePaneId = ref(0);\n let nextTabId = 1;\n let nextPaneId = 1;\n\n const contextMenu = ref<TabContextMenu>({\n visible: false,\n x: 0,\n y: 0,\n tabId: 0,\n });\n\n const engineMap = new Map<number, CliEngine>();\n\n const paneResizing = ref(false);\n let paneResizeState = {\n tabId: 0,\n dividerIndex: 0,\n startX: 0,\n startWidths: [] as number[],\n containerWidth: 0,\n };\n\n const panelResizing = ref(false);\n let panelResizeState = { startY: 0, startHeight: 0, startX: 0, startWidth: 0 };\n\n /* ─── Status bar state ──────────────────────────── */\n\n const statusExecutionState = ref<'idle' | 'running'>('idle');\n const statusLastCommand = ref<{ name: string; success: boolean } | null>(null);\n const statusServiceCount = ref({ running: 0, total: 0 });\n const statusServiceDetails = ref<Array<{ name: string; status: string; description?: string }>>([]);\n const statusServerState = ref<'connected' | 'disconnected' | 'none'>('none');\n const statusServerDetails = ref<Array<{ name: string; url: string; connected: boolean; apiVersion?: string; commandCount?: number }>>([]);\n const statusUptime = ref(0);\n const notification = ref<CliNotification | null>(null);\n const servicesDropdownOpen = ref(false);\n const serversDropdownOpen = ref(false);\n const servicesDropdownTriggerRect = ref<DOMRect | null>(null);\n const serversDropdownTriggerRect = ref<DOMRect | null>(null);\n\n const formattedUptime = computed(() => {\n const mins = Math.floor(statusUptime.value / 60000);\n if (mins < 60) return `${mins}m`;\n const hrs = Math.floor(mins / 60);\n return `${hrs}h${mins % 60}m`;\n });\n\n let execPollTimer: ReturnType<typeof setInterval> | undefined;\n let globalPollTimer: ReturnType<typeof setInterval> | undefined;\n\n function startStatusPolling() {\n stopStatusPolling();\n execPollTimer = setInterval(() => {\n const tab = tabs.value.find(t => t.id === resolvedActiveTabId.value);\n if (!tab) return;\n const engine = engineMap.get(tab.panes[0]?.id);\n if (!engine) return;\n const context = engine.getContext();\n if (!context) return;\n\n const running = !!(context as any).isExecuting || !!(context as any).contextProcessor;\n statusExecutionState.value = running ? 'running' : 'idle';\n\n const result = (context as any).lastCommandResult;\n statusLastCommand.value = result ? { name: result.command, success: result.success } : null;\n\n const notif = context.notifier?.current;\n notification.value = notif || null;\n }, 300);\n\n globalPollTimer = setInterval(() => {\n const tab = tabs.value.find(t => t.id === resolvedActiveTabId.value);\n if (!tab) return;\n const engine = engineMap.get(tab.panes[0]?.id);\n if (!engine) return;\n const context = engine.getContext();\n if (!context) return;\n\n try {\n const services = context.backgroundServices?.list() ?? [];\n statusServiceCount.value = { running: services.filter((s: any) => s.status === 'running').length, total: services.length };\n statusServiceDetails.value = services.map((s: any) => ({ name: s.name, status: s.status, description: s.description }));\n } catch { /* not available */ }\n\n try {\n const serverManager = (context as any).services?.get?.('cli-server-manager');\n const details: Array<{ name: string; url: string; connected: boolean; apiVersion?: string; commandCount?: number }> = [];\n if (serverManager?.connections?.size > 0) {\n let anyConnected = false;\n for (const [name, conn] of serverManager.connections) {\n if ((conn as any).connected) anyConnected = true;\n details.push({\n name,\n url: (conn as any).config?.url ?? '',\n connected: !!(conn as any).connected,\n apiVersion: (conn as any).connected ? (conn as any).apiVersion : undefined,\n commandCount: (conn as any).connected ? (conn as any).commands?.length : undefined,\n });\n }\n statusServerState.value = anyConnected ? 'connected' : 'disconnected';\n } else {\n // Fall back to configured servers from engine options\n const configuredServers = (engine as any).options?.servers;\n if (Array.isArray(configuredServers) && configuredServers.length > 0) {\n for (const srv of configuredServers) {\n if (srv.enabled === false) continue;\n details.push({\n name: srv.name,\n url: srv.url ?? '',\n connected: false,\n });\n }\n statusServerState.value = 'disconnected';\n } else {\n statusServerState.value = 'none';\n }\n }\n statusServerDetails.value = details;\n } catch { /* not available */ }\n\n statusUptime.value = engine.startedAt ? Date.now() - engine.startedAt : 0;\n }, 2000);\n }\n\n function stopStatusPolling() {\n if (execPollTimer) { clearInterval(execPollTimer); execPollTimer = undefined; }\n if (globalPollTimer) { clearInterval(globalPollTimer); globalPollTimer = undefined; }\n }\n\n watch(initialized, (val) => {\n if (val) startStatusPolling();\n else stopStatusPolling();\n });\n\n // Terminal height is handled via CSS flex layout (height: 100% default in Cli)\n\n /* ─── Tab management ─────────────────────────────── */\n\n function addTab(title?: string): number {\n const tabId = nextTabId++;\n const paneId = nextPaneId++;\n tabs.value = [...tabs.value, {\n id: tabId,\n title: title ?? `Terminal ${tabId}`,\n isEditing: false,\n panes: [{ id: paneId, widthPercent: 100 }],\n }];\n updateActiveTabId(tabId);\n activePaneId.value = paneId;\n emit('tab-added', { tabId });\n return tabId;\n }\n\n let themeObserver: MutationObserver | undefined;\n\n function syncThemeFromEngine() {\n const engine = engineMap.values().next().value;\n if (!engine) return;\n const theme = (engine as CliEngine).getTerminal().options.theme;\n if (theme) themeStyles.value = derivePanelThemeStyles(theme);\n }\n\n function setupThemeSync() {\n if (!syncTheme.value) return;\n setTimeout(() => {\n syncThemeFromEngine();\n const container = document.querySelector('.cli-panel-wrapper .terminal-container');\n if (!container) return;\n themeObserver?.disconnect();\n themeObserver = new MutationObserver(syncThemeFromEngine);\n themeObserver.observe(container, { attributes: true, attributeFilter: ['style'] });\n }, 200);\n }\n\n onMounted(() => {\n document.addEventListener('click', closePositionDropdown);\n });\n\n onBeforeUnmount(() => {\n themeObserver?.disconnect();\n document.removeEventListener('click', closePositionDropdown);\n });\n\n function toggle() {\n const newVal = !resolvedCollapsed.value;\n updateCollapsed(newVal);\n if (!newVal && !initialized.value) {\n initialized.value = true;\n addTab();\n setupThemeSync();\n }\n }\n\n function closeTab(id: number) {\n const idx = tabs.value.findIndex((t) => t.id === id);\n if (idx === -1) return;\n tabs.value.splice(idx, 1);\n emit('tab-closed', { tabId: id });\n if (tabs.value.length === 0) {\n initialized.value = false;\n updateCollapsed(true);\n return;\n }\n if (resolvedActiveTabId.value === id) {\n const newIdx = Math.min(idx, tabs.value.length - 1);\n selectTab(tabs.value[newIdx].id);\n }\n }\n\n function selectTab(id: number) {\n updateActiveTabId(id);\n const tab = tabs.value.find((t) => t.id === id);\n if (tab && tab.panes.length > 0) {\n activePaneId.value = tab.panes[0].id;\n }\n }\n\n /* ─── Split / close pane ─────────────────────────── */\n\n function splitPane(tabId?: number): number {\n const targetTabId = tabId ?? resolvedActiveTabId.value;\n const paneId = nextPaneId++;\n tabs.value = tabs.value.map(t => {\n if (t.id !== targetTabId) return t;\n const newPanes = [...t.panes, { id: paneId, widthPercent: 0 }];\n const evenWidth = 100 / newPanes.length;\n newPanes.forEach(p => { p.widthPercent = evenWidth; });\n normalizePanes(newPanes);\n return { ...t, panes: newPanes };\n });\n activePaneId.value = paneId;\n emit('pane-split', { paneId, tabId: targetTabId });\n return paneId;\n }\n\n function closePane(paneId: number): void {\n for (const tab of tabs.value) {\n const idx = tab.panes.findIndex(p => p.id === paneId);\n if (idx === -1) continue;\n if (tab.panes.length <= 1) { closeTab(tab.id); return; }\n engineMap.get(paneId)?.destroy();\n engineMap.delete(paneId);\n const newPanes = tab.panes.filter(p => p.id !== paneId);\n normalizePanes(newPanes);\n if (activePaneId.value === paneId) {\n activePaneId.value = newPanes[Math.min(idx, newPanes.length - 1)].id;\n }\n emit('pane-closed', { paneId });\n tabs.value = tabs.value.map(t =>\n t.id === tab.id ? { ...t, panes: newPanes } : t,\n );\n return;\n }\n }\n\n /** Add renameTab for programmatic use */\n function renameTab(tabId: number, title: string): void {\n tabs.value = tabs.value.map(t => t.id === tabId ? { ...t, title } : t);\n }\n\n /* ─── Rename ─────────────────────────────────────── */\n\n function startRename(tabId: number) {\n tabs.value.forEach((t) => {\n t.isEditing = t.id === tabId;\n });\n }\n\n function commitRename(tabId: number, value: string) {\n const trimmed = value.trim();\n const tab = tabs.value.find((t) => t.id === tabId);\n if (tab) {\n if (trimmed) tab.title = trimmed;\n tab.isEditing = false;\n }\n }\n\n /* ─── Context menu ───────────────────────────────── */\n\n function closeContextMenu() {\n contextMenu.value = { ...contextMenu.value, visible: false };\n }\n\n function onDocClick() {\n if (contextMenu.value.visible) closeContextMenu();\n }\n onMounted(() => document.addEventListener('click', onDocClick));\n onBeforeUnmount(() =>\n document.removeEventListener('click', onDocClick),\n );\n\n /* ─── Panel resize ───────────────────────────────── */\n\n function onPanelResizeStart(e: MouseEvent) {\n if (!resizable.value) return;\n e.preventDefault();\n if (resolvedCollapsed.value) toggle();\n panelResizing.value = true;\n panelResizeState = {\n startY: e.clientY,\n startHeight: resolvedHeight.value,\n startX: e.clientX,\n startWidth: resolvedWidth.value,\n };\n }\n\n function onPanelResizeMove(e: MouseEvent) {\n if (!panelResizing.value) return;\n if (isHorizontal.value) {\n const deltaX = resolvedPosition.value === 'left'\n ? e.clientX - panelResizeState.startX\n : panelResizeState.startX - e.clientX;\n let next = Math.max(100, panelResizeState.startWidth + deltaX);\n if (next > window.innerWidth) next = window.innerWidth;\n updateWidth(next);\n } else {\n const deltaY = resolvedPosition.value === 'top'\n ? e.clientY - panelResizeState.startY\n : panelResizeState.startY - e.clientY;\n let next = Math.max(100, panelResizeState.startHeight + deltaY);\n if (next > window.innerHeight) next = window.innerHeight;\n updateHeight(next);\n }\n }\n\n function onPanelResizeEnd() {\n panelResizing.value = false;\n }\n\n onMounted(() => {\n document.addEventListener('mousemove', onPanelResizeMove);\n document.addEventListener('mouseup', onPanelResizeEnd);\n });\n onBeforeUnmount(() => {\n document.removeEventListener('mousemove', onPanelResizeMove);\n document.removeEventListener('mouseup', onPanelResizeEnd);\n });\n\n /* ─── Pane resize ────────────────────────────────── */\n\n function onPaneResizeStart(\n e: MouseEvent,\n tabId: number,\n dividerIndex: number,\n ) {\n e.preventDefault();\n const tab = tabs.value.find((t) => t.id === tabId);\n if (!tab) return;\n paneResizing.value = true;\n const container = (e.target as HTMLElement).closest(\n '.cli-panel-panes-container',\n );\n paneResizeState = {\n tabId,\n dividerIndex,\n startX: e.clientX,\n startWidths: tab.panes.map((p) => p.widthPercent),\n containerWidth: container ? container.clientWidth : 1,\n };\n document.body.classList.add('cli-pane-resizing');\n }\n\n function onPaneResizeMove(e: MouseEvent) {\n if (!paneResizing.value) return;\n const s = paneResizeState;\n const deltaPct = ((e.clientX - s.startX) / s.containerWidth) * 100;\n const i = s.dividerIndex;\n let leftW = s.startWidths[i] + deltaPct;\n let rightW = s.startWidths[i + 1] - deltaPct;\n if (leftW < MIN_PANE_WIDTH_PERCENT) {\n leftW = MIN_PANE_WIDTH_PERCENT;\n rightW =\n s.startWidths[i] +\n s.startWidths[i + 1] -\n MIN_PANE_WIDTH_PERCENT;\n }\n if (rightW < MIN_PANE_WIDTH_PERCENT) {\n rightW = MIN_PANE_WIDTH_PERCENT;\n leftW =\n s.startWidths[i] +\n s.startWidths[i + 1] -\n MIN_PANE_WIDTH_PERCENT;\n }\n const tab = tabs.value.find((t) => t.id === s.tabId);\n if (tab) {\n tab.panes[i].widthPercent = leftW;\n tab.panes[i + 1].widthPercent = rightW;\n }\n }\n\n function onPaneResizeEnd() {\n if (!paneResizing.value) return;\n paneResizing.value = false;\n document.body.classList.remove('cli-pane-resizing');\n }\n\n onMounted(() => {\n document.addEventListener('mousemove', onPaneResizeMove);\n document.addEventListener('mouseup', onPaneResizeEnd);\n });\n onBeforeUnmount(() => {\n document.removeEventListener('mousemove', onPaneResizeMove);\n document.removeEventListener('mouseup', onPaneResizeEnd);\n stopStatusPolling();\n });\n\n /* ─── Maximize ───────────────────────────────────── */\n\n function toggleMaximize() {\n if (!resolvedMaximized.value) {\n if (isHorizontal.value) {\n prevWidth.value = resolvedWidth.value;\n updateWidth(window.innerWidth);\n } else {\n prevHeight.value = resolvedHeight.value;\n updateHeight(window.innerHeight);\n }\n } else {\n if (isHorizontal.value) {\n updateWidth(prevWidth.value);\n } else {\n updateHeight(prevHeight.value);\n }\n }\n updateMaximized(!resolvedMaximized.value);\n }\n\n /* ─── Close handler ──────────────────────────────── */\n\n function handleClose() {\n visible.value = false;\n emit('close');\n props.onClose?.();\n }\n\n function handleHide() {\n preHideCollapsed = resolvedCollapsed.value;\n updateHidden(true);\n }\n\n function handleUnhide() {\n updateHidden(false);\n updateCollapsed(preHideCollapsed);\n }\n\n const positionDropdownOpen = ref(false);\n\n function closePositionDropdown() {\n positionDropdownOpen.value = false;\n servicesDropdownOpen.value = false;\n serversDropdownOpen.value = false;\n }\n\n function togglePositionDropdown(e: MouseEvent) {\n e.stopPropagation();\n positionDropdownOpen.value = !positionDropdownOpen.value;\n }\n\n function selectPosition(pos: CliPanelPosition) {\n positionDropdownOpen.value = false;\n updatePosition(pos);\n }\n\n /* ─── Engine access & state ──────────────────────── */\n\n function getEngine(paneId?: number): CliEngine | undefined {\n const targetId = paneId ?? activePaneId.value;\n return engineMap.get(targetId);\n }\n\n function getState(): CliPanelState {\n return {\n collapsed: resolvedCollapsed.value,\n hidden: resolvedHidden.value,\n maximized: resolvedMaximized.value,\n position: resolvedPosition.value,\n height: resolvedHeight.value,\n width: resolvedWidth.value,\n activeTabId: resolvedActiveTabId.value,\n activePaneId: activePaneId.value,\n tabs: tabs.value.map(t => ({\n id: t.id, title: t.title,\n panes: t.panes.map(p => ({ id: p.id, widthPercent: p.widthPercent })),\n })),\n };\n }\n\n /* ─── Expose programmatic API (ICliPanelRef) ──── */\n\n expose({\n open: () => {\n if (!visible.value) { visible.value = true; }\n if (resolvedHidden.value) { updateHidden(false); }\n if (resolvedCollapsed.value) {\n updateCollapsed(false);\n if (!initialized.value) {\n initialized.value = true;\n addTab();\n setupThemeSync();\n }\n }\n },\n collapse: () => { if (!resolvedCollapsed.value) updateCollapsed(true); },\n toggleCollapse: () => {\n if (resolvedCollapsed.value) {\n updateCollapsed(false);\n if (!initialized.value) { initialized.value = true; addTab(); setupThemeSync(); }\n } else { updateCollapsed(true); }\n },\n hide: () => { if (!resolvedHidden.value) updateHidden(true); },\n unhide: () => { if (resolvedHidden.value) updateHidden(false); },\n toggleHide: () => { updateHidden(!resolvedHidden.value); },\n close: handleClose,\n maximize: () => { if (!resolvedMaximized.value) updateMaximized(true); },\n restore: () => { if (resolvedMaximized.value) updateMaximized(false); },\n toggleMaximize: () => { updateMaximized(!resolvedMaximized.value); },\n resize: (dims: { height?: number; width?: number }) => {\n if (dims.height !== undefined) updateHeight(dims.height);\n if (dims.width !== undefined) updateWidth(dims.width);\n },\n setPosition: updatePosition,\n addTab, closeTab, selectTab, renameTab, splitPane, closePane, getEngine, getState,\n });\n\n /* ─── Render ─────────────────────────────────────── */\n\n return () => {\n if (!visible.value) return null;\n\n const wrapperClass = [\n 'cli-panel-wrapper',\n resolvedCollapsed.value && 'collapsed',\n resolvedMaximized.value && 'maximized',\n panelResizing.value && 'resizing',\n props.class,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperStyle = {\n ...(isHorizontal.value ? { width: `${resolvedWidth.value}px` } : { height: `${resolvedHeight.value}px` }),\n ...(resolvedHidden.value ? { display: 'none' } : {}),\n ...themeStyles.value,\n ...props.style,\n };\n\n const headerEl = h('div', { class: 'cli-panel-header' }, [\n h(\n 'div',\n {\n class: 'cli-panel-resize-bar',\n onMousedown: onPanelResizeStart,\n },\n [h('div', { class: 'cli-panel-resize-grip' })],\n ),\n h('div', { class: 'cli-panel-header-content' }, [\n h('p', { class: 'cli-panel-title' }, [\n h('span', { class: 'cli-panel-title-icon' }, [\n terminalIcon(),\n ]),\n 'CLI',\n ]),\n // Status indicators (bottom/top only)\n\n (resolvedPosition.value === 'bottom' || resolvedPosition.value === 'top')\n ? h('div', { class: 'cli-panel-status-indicators' }, [\n // Execution state\n h('span', { class: ['cli-panel-status-item', statusExecutionState.value === 'running' ? 'status-running' : ''].filter(Boolean).join(' ') }, [\n h('span', { class: ['cli-panel-status-dot', statusExecutionState.value === 'running' ? 'dot-running' : 'dot-idle'].join(' ') }),\n h('span', { class: 'cli-panel-status-label' }, statusExecutionState.value),\n ]),\n // Background services\n statusServiceCount.value.total > 0\n ? h('span', {\n class: 'cli-panel-status-item status-clickable',\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n servicesDropdownTriggerRect.value = (e.currentTarget as HTMLElement).getBoundingClientRect();\n servicesDropdownOpen.value = !servicesDropdownOpen.value;\n serversDropdownOpen.value = false;\n },\n }, [\n h('span', { class: 'cli-panel-status-icon', innerHTML: '&#9881;' }),\n h('span', { class: 'cli-panel-status-label' }, `${statusServiceCount.value.running}/${statusServiceCount.value.total} services`),\n ])\n : null,\n // Last command\n statusLastCommand.value\n ? h('span', { class: 'cli-panel-status-item' }, [\n h('span', { class: ['cli-panel-status-icon', statusLastCommand.value.success ? 'status-success' : 'status-error'].join(' '), innerHTML: statusLastCommand.value.success ? '&#10003;' : '&#10005;' }),\n h('span', { class: 'cli-panel-status-label' }, statusLastCommand.value.name),\n ])\n : null,\n // Server connection\n statusServerState.value !== 'none'\n ? h('span', {\n class: 'cli-panel-status-item status-clickable',\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n serversDropdownTriggerRect.value = (e.currentTarget as HTMLElement).getBoundingClientRect();\n serversDropdownOpen.value = !serversDropdownOpen.value;\n servicesDropdownOpen.value = false;\n },\n }, [\n h('span', { class: ['cli-panel-status-dot', statusServerState.value === 'connected' ? 'dot-idle' : 'dot-error'].join(' ') }),\n h('span', { class: 'cli-panel-status-label' }, `${statusServerDetails.value.filter(s => s.connected).length}/${statusServerDetails.value.length} servers`),\n ])\n : null,\n // Uptime\n statusUptime.value > 0\n ? h('span', { class: 'cli-panel-status-item status-muted' }, [\n h('span', { class: 'cli-panel-status-icon', innerHTML: '&uarr;' }),\n h('span', { class: 'cli-panel-status-label' }, formattedUptime.value),\n ])\n : null,\n // Custom notification\n notification.value\n ? h('span', { class: `cli-panel-status-item status-text level-${notification.value.level}` }, [\n h('span', { class: 'cli-panel-status-label' }, notification.value.message),\n ])\n : null,\n ].filter(Boolean))\n : null,\n // Compact status indicators (left/right positions — CSS controls visibility)\n h('div', { class: 'cli-panel-status-indicators-compact' }, [\n // Execution state\n h('span', { class: 'cli-panel-status-compact-item', title: statusExecutionState.value }, [\n h('span', { class: ['cli-panel-status-dot', statusExecutionState.value === 'running' ? 'dot-running' : 'dot-idle'].join(' ') }),\n ]),\n // Background services\n statusServiceCount.value.total > 0\n ? h('span', {\n class: 'cli-panel-status-compact-item status-clickable',\n title: `${statusServiceCount.value.running}/${statusServiceCount.value.total} services`,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n servicesDropdownTriggerRect.value = (e.currentTarget as HTMLElement).getBoundingClientRect();\n servicesDropdownOpen.value = !servicesDropdownOpen.value;\n serversDropdownOpen.value = false;\n },\n }, [\n h('span', { class: 'cli-panel-status-icon', innerHTML: '&#9881;' }),\n ])\n : null,\n // Last command\n statusLastCommand.value\n ? h('span', {\n class: 'cli-panel-status-compact-item',\n title: `${statusLastCommand.value.success ? '✓' : '✗'} ${statusLastCommand.value.name}`,\n }, [\n h('span', {\n class: ['cli-panel-status-icon', statusLastCommand.value.success ? 'status-success' : 'status-error'].join(' '),\n innerHTML: statusLastCommand.value.success ? '&#10003;' : '&#10005;',\n }),\n ])\n : null,\n // Server connection\n statusServerState.value !== 'none'\n ? h('span', {\n class: 'cli-panel-status-compact-item status-clickable',\n title: `${statusServerDetails.value.filter(s => s.connected).length}/${statusServerDetails.value.length} servers`,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n serversDropdownTriggerRect.value = (e.currentTarget as HTMLElement).getBoundingClientRect();\n serversDropdownOpen.value = !serversDropdownOpen.value;\n servicesDropdownOpen.value = false;\n },\n }, [\n h('span', { class: ['cli-panel-status-dot', statusServerState.value === 'connected' ? 'dot-idle' : 'dot-error'].join(' ') }),\n ])\n : null,\n // Uptime\n statusUptime.value > 0\n ? h('span', { class: 'cli-panel-status-compact-item status-muted', title: formattedUptime.value }, [\n h('span', { class: 'cli-panel-status-icon', innerHTML: '&uarr;' }),\n ])\n : null,\n // Notification\n notification.value\n ? h('span', { class: 'cli-panel-status-compact-item', title: notification.value.message }, [\n h('span', { class: `cli-panel-status-compact-dot level-${notification.value.level}` }),\n ])\n : null,\n ].filter(Boolean)),\n h('div', { class: 'cli-panel-action-buttons' }, [\n h('div', {\n class: 'cli-panel-btn-position-wrapper',\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }, [\n h('button', {\n class: 'cli-panel-btn cli-panel-btn-position',\n title: 'Move panel',\n onClick: togglePositionDropdown,\n }, [positionIcon(resolvedPosition.value)]),\n positionDropdownOpen.value\n ? h('div', { class: 'cli-panel-position-dropdown' },\n (['bottom', 'top', 'left', 'right'] as CliPanelPosition[]).map(pos =>\n h('button', {\n class: ['cli-panel-position-dropdown-item', resolvedPosition.value === pos ? 'active' : ''].filter(Boolean).join(' '),\n onClick: () => selectPosition(pos),\n }, [\n positionIcon(pos, 16),\n pos.charAt(0).toUpperCase() + pos.slice(1),\n ]),\n ),\n )\n : null,\n ]),\n hideable.value\n ? h('button', {\n class: 'cli-panel-btn cli-panel-btn-hide',\n title: 'Hide',\n onClick: handleHide,\n }, [hideIcon()])\n : null,\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: resolvedMaximized.value ? 'Restore' : 'Maximize',\n disabled: resolvedCollapsed.value,\n onClick: toggleMaximize,\n },\n [resolvedMaximized.value ? restoreIcon() : maximizeIcon()],\n ),\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: resolvedCollapsed.value ? 'Expand' : 'Collapse',\n onClick: toggle,\n },\n [collapseChevron(resolvedPosition.value, resolvedCollapsed.value)],\n ),\n closable.value\n ? h(\n 'button',\n {\n class: 'cli-panel-btn cli-panel-btn-close',\n title: 'Close',\n onClick: handleClose,\n },\n [closeIcon()],\n )\n : null,\n ]),\n ]),\n h('div', { class: ['cli-panel-glow-line', statusExecutionState.value === 'running' ? 'glow-active' : ''].filter(Boolean).join(' ') }),\n ]);\n\n const contentEl =\n initialized.value\n ? h('div', { class: 'cli-panel-content', style: resolvedCollapsed.value ? { display: 'none' } : undefined }, [\n // Tab bar\n h('div', { class: 'cli-panel-tabs' }, [\n h(\n 'ul',\n { class: 'cli-panel-tab-list' },\n tabs.value.map((tab) =>\n h(\n 'li',\n {\n key: tab.id,\n class: [\n 'cli-panel-tab',\n tab.id ===\n resolvedActiveTabId.value &&\n 'active',\n ]\n .filter(Boolean)\n .join(' '),\n onClick: () => selectTab(tab.id),\n onDblclick: () =>\n startRename(tab.id),\n onContextmenu: (\n e: MouseEvent,\n ) => {\n e.preventDefault();\n e.stopPropagation();\n contextMenu.value = {\n visible: true,\n x: e.clientX,\n y: e.clientY,\n tabId: tab.id,\n };\n },\n },\n tab.isEditing\n ? [\n h('input', {\n class: 'cli-panel-tab-rename-input',\n type: 'text',\n value: tab.title,\n onKeydown: (\n e: KeyboardEvent,\n ) => {\n if (\n e.key ===\n 'Enter'\n )\n commitRename(\n tab.id,\n (\n e.target as HTMLInputElement\n ).value,\n );\n else if (\n e.key ===\n 'Escape'\n ) {\n tab.isEditing = false;\n }\n },\n onBlur: (\n e: FocusEvent,\n ) =>\n commitRename(\n tab.id,\n (\n e.target as HTMLInputElement\n ).value,\n ),\n onClick: (\n e: MouseEvent,\n ) =>\n e.stopPropagation(),\n onDblclick: (\n e: MouseEvent,\n ) =>\n e.stopPropagation(),\n }),\n ]\n : [\n h('span', { class: ['cli-panel-tab-dot', (() => {\n if (tab.id !== resolvedActiveTabId.value) return 'dot-idle';\n if (statusExecutionState.value === 'running') return 'dot-running';\n if (statusLastCommand.value && !statusLastCommand.value.success) return 'dot-error';\n return 'dot-idle';\n })()].join(' ') }),\n h(\n 'span',\n {\n class: 'cli-panel-tab-title',\n },\n tab.title,\n ),\n h(\n 'button',\n {\n class: 'cli-panel-tab-close-btn',\n title: 'Close tab',\n onClick: (\n e: MouseEvent,\n ) => {\n e.stopPropagation();\n closeTab(\n tab.id,\n );\n },\n },\n '\\u00d7',\n ),\n ],\n ),\n ),\n ),\n h(\n 'button',\n {\n class: 'cli-panel-add-tab',\n title: 'New terminal',\n onClick: () => addTab(),\n },\n '+',\n ),\n ]),\n // Terminal instances\n h(\n 'div',\n { class: 'cli-panel-instances' },\n tabs.value.map((tab) =>\n h(\n 'div',\n {\n key: tab.id,\n class: 'cli-panel-instance',\n style: {\n display:\n tab.id === resolvedActiveTabId.value\n ? undefined\n : 'none',\n },\n },\n [\n h(\n 'div',\n {\n class: [\n 'cli-panel-panes-container',\n paneResizing.value &&\n 'resizing',\n ]\n .filter(Boolean)\n .join(' '),\n },\n tab.panes.flatMap((pane, i) => {\n const nodes: any[] = [];\n if (i > 0) {\n nodes.push(\n h(\n 'div',\n {\n class: 'cli-panel-pane-divider',\n onMousedown: (\n e: MouseEvent,\n ) =>\n onPaneResizeStart(\n e,\n tab.id,\n i - 1,\n ),\n },\n [\n h('div', {\n class: 'cli-panel-pane-divider-grip',\n }),\n ],\n ),\n );\n }\n nodes.push(\n h(\n 'div',\n {\n class: [\n 'cli-panel-pane',\n pane.id ===\n activePaneId.value &&\n tab.id ===\n resolvedActiveTabId.value &&\n 'active-pane',\n ]\n .filter(\n Boolean,\n )\n .join(' '),\n style: {\n flex: `${pane.widthPercent} 1 0`,\n },\n onClick: () => {\n activePaneId.value =\n pane.id;\n updateActiveTabId(tab.id);\n },\n },\n [\n tab.panes.length >\n 1\n ? h(\n 'button',\n {\n class: 'cli-panel-pane-close-btn',\n title: 'Close pane',\n onClick:\n (\n e: MouseEvent,\n ) => {\n e.stopPropagation();\n closePane(\n pane.id,\n );\n },\n },\n '\\u00d7',\n )\n : null,\n h(Cli, {\n options:\n mergedOptions.value,\n modules:\n mergedModules.value,\n processors:\n mergedProcessors.value,\n services:\n mergedServices.value,\n snapshot: pane.snapshot,\n style: {\n height: '100%',\n },\n onReady: (engine: CliEngine) => {\n engineMap.set(pane.id, engine);\n },\n }),\n ],\n ),\n );\n return nodes;\n }),\n ),\n ],\n ),\n ),\n ),\n ])\n : null;\n\n const contextMenuEl = contextMenu.value.visible\n ? h(\n 'div',\n {\n class: 'cli-panel-context-menu',\n style: {\n left: `${contextMenu.value.x}px`,\n top: `${contextMenu.value.y}px`,\n },\n onClick: (e: MouseEvent) => e.stopPropagation(),\n },\n [\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n closeContextMenu();\n startRename(contextMenu.value.tabId);\n },\n },\n 'Rename',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n const tab = tabs.value.find(\n (t) =>\n t.id === contextMenu.value.tabId,\n );\n closeContextMenu();\n if (!tab) return;\n\n const sourceEngine = engineMap.get(tab.panes[0]?.id);\n const snapshot = sourceEngine?.snapshot();\n\n const paneId = nextPaneId++;\n const tabId = nextTabId++;\n const idx = tabs.value.indexOf(tab);\n tabs.value.splice(idx + 1, 0, {\n id: tabId,\n title: `${tab.title} (copy)`,\n isEditing: false,\n panes: [\n { id: paneId, widthPercent: 100, snapshot },\n ],\n });\n updateActiveTabId(tabId);\n activePaneId.value = paneId;\n },\n },\n 'Duplicate',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n closeContextMenu();\n splitPane(contextMenu.value.tabId);\n },\n },\n 'Split Right',\n ),\n h('div', {\n class: 'cli-panel-context-menu-separator',\n }),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n closeContextMenu();\n closeTab(contextMenu.value.tabId);\n },\n },\n 'Close',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n disabled: tabs.value.length <= 1,\n onClick: () => {\n const id = contextMenu.value.tabId;\n closeContextMenu();\n tabs.value = tabs.value.filter(\n (t) => t.id === id,\n );\n updateActiveTabId(id);\n },\n },\n 'Close Others',\n ),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item',\n onClick: () => {\n const id = contextMenu.value.tabId;\n closeContextMenu();\n const idx = tabs.value.findIndex(\n (t) => t.id === id,\n );\n if (idx !== -1)\n tabs.value = tabs.value.slice(\n 0,\n idx + 1,\n );\n },\n },\n 'Close to the Right',\n ),\n h('div', {\n class: 'cli-panel-context-menu-separator',\n }),\n h(\n 'button',\n {\n class: 'cli-panel-context-menu-item destructive',\n onClick: () => {\n closeContextMenu();\n tabs.value = [];\n initialized.value = false;\n updateCollapsed(true);\n },\n },\n 'Close All',\n ),\n ],\n )\n : null;\n\n const hideTabEl = resolvedHidden.value\n ? h('button', {\n class: 'cli-panel-hide-tab',\n 'data-position': resolvedPosition.value,\n 'data-hide-align': hideAlignment.value,\n style: themeStyles.value,\n title: 'Show CLI',\n onClick: handleUnhide,\n }, [\n h('svg', { class: 'cli-panel-hide-tab-icon', ...svgAttrs, width: '16', height: '16', 'stroke-width': '2' }, [\n h('polyline', { points: '4 17 10 11 4 5' }),\n h('line', { x1: '12', y1: '19', x2: '20', y2: '19' }),\n ]),\n h('span', { class: 'cli-panel-hide-tab-label' }, 'CLI'),\n hideTabChevron(resolvedPosition.value),\n ])\n : null;\n\n // Services dropdown\n const servicesDropdownEl = servicesDropdownOpen.value && statusServiceCount.value.total > 0\n ? h('div', {\n class: 'cli-panel-services-dropdown',\n style: (() => {\n const rect = servicesDropdownTriggerRect.value;\n if (!rect) return {};\n const base = { position: 'fixed', zIndex: 1100 };\n switch (resolvedPosition.value) {\n case 'top':\n return { ...base, top: `${rect.bottom + 4}px`, left: `${rect.left}px` };\n case 'left':\n return { ...base, top: `${rect.top}px`, left: `${rect.right + 4}px` };\n case 'right':\n return { ...base, top: `${rect.top}px`, right: `${window.innerWidth - rect.left + 4}px` };\n default:\n return { ...base, bottom: `${window.innerHeight - rect.top + 4}px`, left: `${rect.left}px` };\n }\n })(),\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }, [\n h('div', { class: 'cli-panel-services-dropdown-header' }, 'Background Services'),\n h('div', { class: 'cli-panel-services-dropdown-list' },\n statusServiceDetails.value.map((svc, i) =>\n h('div', { key: i, class: 'cli-panel-services-dropdown-item' }, [\n h('span', { class: ['cli-panel-svc-dot', svc.status === 'running' ? 'svc-running' : 'svc-stopped'].join(' ') }),\n h('div', { class: 'cli-panel-svc-info' }, [\n h('span', { class: 'cli-panel-svc-name' }, svc.name),\n svc.description ? h('span', { class: 'cli-panel-svc-desc' }, svc.description) : null,\n ].filter(Boolean)),\n h('span', { class: 'cli-panel-svc-status' }, svc.status),\n ]),\n ),\n ),\n statusServiceDetails.value.length === 0\n ? h('div', { class: 'cli-panel-services-dropdown-empty' }, 'No services registered')\n : null,\n ].filter(Boolean))\n : null;\n\n // Servers dropdown\n const serversDropdownEl = serversDropdownOpen.value && statusServerState.value !== 'none'\n ? h('div', {\n class: 'cli-panel-services-dropdown',\n style: (() => {\n const rect = serversDropdownTriggerRect.value;\n if (!rect) return {};\n const base = { position: 'fixed', zIndex: 1100 };\n switch (resolvedPosition.value) {\n case 'top':\n return { ...base, top: `${rect.bottom + 4}px`, left: `${rect.left}px` };\n case 'left':\n return { ...base, top: `${rect.top}px`, left: `${rect.right + 4}px` };\n case 'right':\n return { ...base, top: `${rect.top}px`, right: `${window.innerWidth - rect.left + 4}px` };\n default:\n return { ...base, bottom: `${window.innerHeight - rect.top + 4}px`, left: `${rect.left}px` };\n }\n })(),\n onClick: (e: MouseEvent) => e.stopPropagation(),\n }, [\n h('div', { class: 'cli-panel-services-dropdown-header' }, 'Server Connections'),\n h('div', { class: 'cli-panel-services-dropdown-list' },\n statusServerDetails.value.map((srv, i) =>\n h('div', { key: i, class: 'cli-panel-services-dropdown-item' }, [\n h('span', { class: ['cli-panel-svc-dot', srv.connected ? 'svc-running' : 'svc-stopped'].join(' ') }),\n h('div', { class: 'cli-panel-svc-info' }, [\n h('span', { class: 'cli-panel-svc-name' }, srv.name),\n srv.url ? h('span', { class: 'cli-panel-svc-desc' }, srv.url) : null,\n ].filter(Boolean)),\n h('div', { class: 'cli-panel-srv-meta' }, [\n h('span', { class: 'cli-panel-svc-status' }, srv.connected ? 'connected' : 'disconnected'),\n srv.apiVersion ? h('span', { class: 'cli-panel-svc-desc' }, `v${srv.apiVersion}`) : null,\n srv.commandCount ? h('span', { class: 'cli-panel-svc-desc' }, `${srv.commandCount} cmds`) : null,\n ].filter(Boolean)),\n ]),\n ),\n ),\n statusServerDetails.value.length === 0\n ? h('div', { class: 'cli-panel-services-dropdown-empty' }, 'No servers configured')\n : null,\n ].filter(Boolean))\n : null;\n\n return h('div', {}, [\n hideTabEl,\n h(\n 'div',\n {\n class: wrapperClass,\n style: wrapperStyle,\n 'data-position': resolvedPosition.value,\n 'data-resizable': String(resizable.value),\n 'data-closable': String(closable.value),\n 'data-hideable': String(hideable.value),\n },\n [headerEl, contentEl],\n ),\n contextMenuEl,\n servicesDropdownEl,\n serversDropdownEl,\n ]);\n };\n },\n});\n","import { defineComponent, ref, PropType, h, provide } from 'vue';\nimport { ICliCommandProcessor, ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\nimport { CliInjectionKey } from './cliInjection';\nimport { useCliEngine } from './useCliEngine';\n\nexport const CliProvider = defineComponent({\n name: 'CliProvider',\n props: {\n modules: {\n type: Array as PropType<ICliModule[]>,\n default: undefined,\n },\n processors: {\n type: Array as PropType<ICliCommandProcessor[]>,\n default: undefined,\n },\n options: {\n type: Object as PropType<CliEngineOptions>,\n default: undefined,\n },\n services: {\n type: Object as PropType<Record<string, any>>,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string>>,\n default: undefined,\n },\n },\n emits: ['ready'],\n setup(props, { slots, emit }) {\n const containerRef = ref<HTMLElement | null>(null);\n const engine = useCliEngine(containerRef, {\n modules: props.modules,\n processors: props.processors,\n options: props.options,\n services: props.services,\n });\n\n provide(CliInjectionKey, { engine });\n\n return () =>\n h('div', { style: { height: '100%' } }, [\n h('div', {\n ref: containerRef,\n style: { height: '100%', ...props.style },\n }),\n slots.default?.(),\n ]);\n },\n});\n","import { ref, onMounted, onBeforeUnmount, Ref, shallowRef } from 'vue';\nimport { CliEngine, CliEngineOptions } from '@qodalis/cli';\nimport { ICliCommandProcessor, ICliModule } from '@qodalis/cli-core';\n\nexport interface UseCliEngineConfig {\n modules?: ICliModule[];\n processors?: ICliCommandProcessor[];\n options?: CliEngineOptions;\n services?: Record<string, any>;\n}\n\nexport function useCliEngine(\n containerRef: Ref<HTMLElement | null>,\n config?: UseCliEngineConfig,\n): Ref<CliEngine | null> {\n const engine = shallowRef<CliEngine | null>(null);\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n const e = new CliEngine(containerRef.value, config?.options);\n\n e.registerService('cli-framework', 'Vue');\n\n if (config?.services) {\n for (const [token, value] of Object.entries(config.services)) {\n e.registerService(token, value);\n }\n }\n\n if (config?.modules) {\n e.registerModules(config.modules);\n }\n\n if (config?.processors) {\n e.registerProcessors(config.processors);\n }\n\n await e.start();\n engine.value = e;\n });\n\n onBeforeUnmount(() => {\n engine.value?.destroy();\n engine.value = null;\n });\n\n return engine;\n}\n","import { inject } from 'vue';\nimport { CliInjectionKey, CliContextValue } from './cliInjection';\n\nexport function useCli(): CliContextValue {\n const ctx = inject(CliInjectionKey);\n if (!ctx) {\n throw new Error(\n 'useCli() must be used inside a <CliProvider> component',\n );\n }\n return ctx;\n}\n","export { Cli } from './Cli';\nexport type { CliProps } from './Cli';\nexport { CliPanel } from './CliPanel';\nexport type { CliPanelOptions } from './CliPanel';\nexport { CliProvider } from './CliProvider';\nexport { CliConfigProvider, CliConfigKey } from './CliConfigProvider';\nexport type { CliConfigValue } from './CliConfigProvider';\nexport { useCli } from './useCli';\nexport { useCliEngine } from './useCliEngine';\nexport { CliInjectionKey } from './cliInjection';\nexport type { CliContextValue } from './cliInjection';\nexport type { UseCliEngineConfig } from './useCliEngine';\n\n// Re-export commonly used types from @qodalis/cli for convenience\nexport type { CliEngineOptions } from '@qodalis/cli';\nexport { CliEngine } from '@qodalis/cli';\n"],"mappings":"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","names":["defineComponent","defineComponent","defineComponent","ref","inject","h","onMounted","onBeforeUnmount","h","defineComponent","inject","ref","onMounted","onBeforeUnmount","defineComponent","ref","h","provide","onMounted","onBeforeUnmount","CliEngine","defineComponent","ref","provide","h","inject","inject","CliEngine"]}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qodalis/vue-cli",
3
- "version": "2.0.0-beta.11",
3
+ "version": "2.0.0-beta.13",
4
4
  "description": "Vue 3 wrapper for the @qodalis CLI terminal engine.",
5
5
  "author": "Nicolae Lupei, Qodalis Solutions",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qodalis/vue-cli",
3
- "version": "2.0.0-beta.11",
3
+ "version": "2.0.0-beta.13",
4
4
  "description": "Vue 3 wrapper for the @qodalis CLI terminal engine.",
5
5
  "author": "Nicolae Lupei, Qodalis Solutions",
6
6
  "license": "MIT",
@@ -36,8 +36,8 @@
36
36
  "vue": "^3.3.0"
37
37
  },
38
38
  "dependencies": {
39
- "@qodalis/cli": "2.0.0-beta.11",
40
- "@qodalis/cli-core": "2.0.0-beta.11"
39
+ "@qodalis/cli": "2.0.0-beta.13",
40
+ "@qodalis/cli-core": "2.0.0-beta.13"
41
41
  },
42
42
  "devDependencies": {
43
43
  "tsup": "^8.0.0",