@qodalis/vue-cli 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -3
- package/dist/index.mjs.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -188,6 +188,7 @@ var CliPanel = (0, import_vue3.defineComponent)({
|
|
|
188
188
|
setup(props, { expose, emit }) {
|
|
189
189
|
const config = (0, import_vue3.inject)(CliConfigKey, null);
|
|
190
190
|
const mergedOptions = (0, import_vue3.computed)(() => (0, import_cli2.mergeCliOptions)(props.options, config?.options));
|
|
191
|
+
const branding = (0, import_vue3.computed)(() => (0, import_cli2.panelBranding)(mergedOptions.value));
|
|
191
192
|
const hostConfig = (0, import_vue3.computed)(() => (0, import_cli2.resolveCliHostConfig)(props, config));
|
|
192
193
|
const controlled = () => ({
|
|
193
194
|
collapsed: props.collapsed,
|
|
@@ -259,7 +260,12 @@ var CliPanel = (0, import_vue3.defineComponent)({
|
|
|
259
260
|
[(0, import_vue3.h)("div", { class: "cli-panel-resize-grip" })]
|
|
260
261
|
),
|
|
261
262
|
(0, import_vue3.h)("div", { class: "cli-panel-header-content" }, [
|
|
262
|
-
(0, import_vue3.h)("p", { class: "cli-panel-title" }, [
|
|
263
|
+
(0, import_vue3.h)("p", { class: "cli-panel-title" }, [
|
|
264
|
+
(0, import_vue3.h)("span", { class: "cli-panel-title-icon" }, [
|
|
265
|
+
branding.value.iconUrl ? (0, import_vue3.h)("img", { src: branding.value.iconUrl, alt: "", class: "cli-panel-brand-icon" }) : icon(import_cli2.TERMINAL_ICON)
|
|
266
|
+
]),
|
|
267
|
+
branding.value.title
|
|
268
|
+
]),
|
|
263
269
|
s.showStatusIndicators ? (0, import_vue3.h)(
|
|
264
270
|
"div",
|
|
265
271
|
{ class: "cli-panel-status-indicators" },
|
|
@@ -516,8 +522,8 @@ var CliPanel = (0, import_vue3.defineComponent)({
|
|
|
516
522
|
onClick: () => controller.unhide()
|
|
517
523
|
},
|
|
518
524
|
[
|
|
519
|
-
icon(import_cli2.HIDE_TAB_TERMINAL_ICON, "cli-panel-hide-tab-icon"),
|
|
520
|
-
(0, import_vue3.h)("span", { class: "cli-panel-hide-tab-label" },
|
|
525
|
+
branding.value.iconUrl ? (0, import_vue3.h)("img", { src: branding.value.iconUrl, alt: "", class: "cli-panel-hide-tab-icon cli-panel-brand-icon" }) : icon(import_cli2.HIDE_TAB_TERMINAL_ICON, "cli-panel-hide-tab-icon"),
|
|
526
|
+
(0, import_vue3.h)("span", { class: "cli-panel-hide-tab-label" }, branding.value.title),
|
|
521
527
|
icon((0, import_cli2.hideTabChevronIcon)(s.position), "cli-panel-hide-tab-arrow")
|
|
522
528
|
]
|
|
523
529
|
) : null,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/Cli.ts","../src/cliInjection.ts","../src/CliConfigProvider.ts","../src/CliPanel.ts","../src/CliProvider.ts","../src/useCliEngine.ts","../src/useCli.ts"],"sourcesContent":["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","import {\n defineComponent,\n ref,\n onMounted,\n onBeforeUnmount,\n PropType,\n h,\n inject,\n} from 'vue';\nimport { ICliModule, CliEngineSnapshot } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions, createCliEngine, resolveCliHostConfig } 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 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 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 // Local props override the config context.\n const hostConfig = resolveCliHostConfig(props, config);\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n engine = createCliEngine(containerRef.value, { ...hostConfig, snapshot: props.snapshot, framework: 'Vue' });\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 { ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\n\nexport interface CliConfigValue {\n modules?: ICliModule[];\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 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 options: props.options,\n services: props.services,\n });\n\n return () => slots.default?.();\n },\n});\n","import { defineComponent, computed, inject, watch, PropType, h, onBeforeUnmount, onMounted, shallowRef, VNode, Fragment } from 'vue';\nimport { ICliModule, CliPanelConfig, CliPanelPosition, ICliPanelRef } from '@qodalis/cli-core';\nimport {\n CliEngine,\n CliEngineOptions,\n CliPanelController,\n CliPanelSnapshot,\n CLOSE_GLYPH,\n CLOSE_ICON,\n HIDE_ICON,\n HIDE_TAB_TERMINAL_ICON,\n MAXIMIZE_ICON,\n PANEL_LABELS,\n RESTORE_ICON,\n SvgIcon,\n TERMINAL_ICON,\n collapseChevronIcon,\n contextMenuItems,\n contextMenuStyle,\n glowLineClass,\n handleRenameKey,\n hideTabChevronIcon,\n joinClasses,\n mergeCliOptions,\n openStatusDropdown,\n paneClass,\n paneStyle,\n panelTabClass,\n panelTabDotClass,\n panelWrapperClass,\n panelWrapperStyle,\n panesContainerClass,\n panesContainerWidth,\n positionIcon,\n positionOptions,\n resolveCliHostConfig,\n runContextMenuAction,\n statusIndicators,\n svgAttrs,\n} from '@qodalis/cli';\nimport { Cli } from './Cli';\nimport { CliConfigKey } from './CliConfigProvider';\n\nexport interface CliPanelOptions extends CliEngineOptions, CliPanelConfig {}\n\n/** The methods exposed through a template ref. */\nconst PANEL_REF_METHODS: Array<keyof ICliPanelRef<CliEngine>> = [\n 'open', 'collapse', 'toggleCollapse', 'hide', 'unhide', 'toggleHide', 'close',\n 'maximize', 'restore', 'toggleMaximize', 'resize', 'setPosition',\n 'addTab', 'closeTab', 'selectTab', 'renameTab', 'splitPane', 'closePane', 'getEngine', 'getState',\n];\n\nfunction icon(svg: SvgIcon, className?: string): VNode {\n return h('svg', { class: className, ...svgAttrs(svg) }, svg.shapes.map((shape) => h(shape.tag, shape.attrs)));\n}\n\nconst stop = (e: Event) => e.stopPropagation();\n\nexport const CliPanel = defineComponent({\n name: 'CliPanel',\n props: {\n options: { type: Object as PropType<CliPanelOptions>, default: undefined },\n modules: { type: Array as PropType<ICliModule[]>, default: undefined },\n services: { type: Object as PropType<Record<string, any>>, default: undefined },\n onClose: { type: Function as PropType<() => void>, default: undefined },\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: { type: Object as PropType<Record<string, string>>, default: undefined },\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(() => mergeCliOptions<CliPanelOptions>(props.options, config?.options));\n const hostConfig = computed(() => resolveCliHostConfig(props, config));\n\n const controlled = () => ({\n collapsed: props.collapsed,\n hidden: props.hidden,\n maximized: props.maximized,\n activeTabId: props.activeTabId,\n position: props.position,\n height: props.height,\n width: props.width,\n });\n\n const controller = new CliPanelController({\n config: mergedOptions.value,\n controlled: controlled(),\n callbacks: {\n onCollapsedChange: (v) => emit('update:collapsed', v),\n onHiddenChange: (v) => emit('update:hidden', v),\n onMaximizedChange: (v) => emit('update:maximized', v),\n onActiveTabIdChange: (v) => emit('update:activeTabId', v),\n onPositionChange: (v) => emit('update:position', v),\n onHeightChange: (v) => emit('update:height', v),\n onWidthChange: (v) => emit('update:width', v),\n onClose: () => {\n emit('close');\n props.onClose?.();\n },\n onTabAdded: (e) => emit('tab-added', e),\n onTabClosed: (e) => emit('tab-closed', e),\n onPaneSplit: (e) => emit('pane-split', e),\n onPaneClosed: (e) => emit('pane-closed', e),\n },\n });\n\n const state = shallowRef<CliPanelSnapshot>(controller.getSnapshot());\n const unsubscribe = controller.subscribe(() => {\n state.value = controller.getSnapshot();\n });\n\n watch(controlled, (values) => controller.setControlled(values));\n watch(mergedOptions, (options) => controller.setOptions(options));\n\n const root = shallowRef<HTMLElement | null>(null);\n onMounted(() => controller.setRootElement(root.value));\n onBeforeUnmount(() => {\n unsubscribe();\n controller.destroy();\n });\n\n const exposed: Record<string, unknown> = {};\n for (const method of PANEL_REF_METHODS) {\n exposed[method] = (controller[method] as (...args: unknown[]) => unknown).bind(controller);\n }\n expose(exposed);\n\n /* ─── Render helpers ─────────────────────────────── */\n\n const openDropdown = (e: MouseEvent, dropdown?: 'services' | 'servers') => {\n if (!dropdown) return;\n e.stopPropagation();\n const anchor = e.currentTarget as Element;\n if (dropdown === 'services') controller.toggleServicesDropdown(anchor);\n else controller.toggleServersDropdown(anchor);\n };\n\n const renderHeader = (s: CliPanelSnapshot) => {\n const indicators = statusIndicators(s);\n return h('div', { class: 'cli-panel-header' }, [\n h(\n 'div',\n {\n class: 'cli-panel-resize-bar',\n onMousedown: (e: MouseEvent) => {\n if (!s.resizable) return;\n e.preventDefault();\n controller.startPanelResize(e.clientX, e.clientY);\n },\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' }, [h('span', { class: 'cli-panel-title-icon' }, [icon(TERMINAL_ICON)]), PANEL_LABELS.title]),\n s.showStatusIndicators\n ? h(\n 'div',\n { class: 'cli-panel-status-indicators' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-item', item.itemClass),\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n h('span', { class: 'cli-panel-status-label' }, item.label),\n ],\n ),\n ),\n )\n : null,\n // Compact indicators for left/right positions (CSS controls visibility).\n h(\n 'div',\n { class: 'cli-panel-status-indicators-compact' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-compact-item', item.compactClass),\n title: item.title,\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.compactDotClass ? h('span', { class: item.compactDotClass }) : null,\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n ],\n ),\n ),\n ),\n h('div', { class: 'cli-panel-action-buttons' }, [\n h('div', { class: 'cli-panel-btn-position-wrapper', onClick: stop }, [\n h(\n 'button',\n {\n class: 'cli-panel-btn cli-panel-btn-position',\n title: PANEL_LABELS.movePanel,\n onClick: () => controller.togglePositionDropdown(),\n },\n [icon(positionIcon(s.position))],\n ),\n s.positionDropdownOpen\n ? h(\n 'div',\n { class: 'cli-panel-position-dropdown' },\n positionOptions(s).map((opt) =>\n h(\n 'button',\n { key: opt.position, class: opt.className, onClick: () => controller.setPosition(opt.position) },\n [icon(positionIcon(opt.position, 16)), opt.label],\n ),\n ),\n )\n : null,\n ]),\n s.hideable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-hide', title: PANEL_LABELS.hide, onClick: () => controller.hide() }, [icon(HIDE_ICON)])\n : null,\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.maximized ? PANEL_LABELS.restore : PANEL_LABELS.maximize,\n disabled: s.collapsed,\n onClick: () => controller.toggleMaximize(),\n },\n [icon(s.maximized ? RESTORE_ICON : MAXIMIZE_ICON)],\n ),\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.collapsed ? PANEL_LABELS.expand : PANEL_LABELS.collapse,\n onClick: () => controller.toggle(),\n },\n [icon(collapseChevronIcon(s.position, s.collapsed))],\n ),\n s.closable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-close', title: PANEL_LABELS.close, onClick: () => controller.close() }, [icon(CLOSE_ICON)])\n : null,\n ]),\n ]),\n h('div', { class: glowLineClass(s) }),\n ]);\n };\n\n const renderTabs = (s: CliPanelSnapshot) =>\n h('div', { class: 'cli-panel-tabs' }, [\n h(\n 'ul',\n { class: 'cli-panel-tab-list' },\n s.tabs.map((tab) =>\n h(\n 'li',\n {\n key: tab.id,\n class: panelTabClass(s, tab),\n onClick: () => controller.selectTab(tab.id),\n onDblclick: () => controller.startRename(tab.id),\n onContextmenu: (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n controller.openContextMenu(tab.id, e.clientX, e.clientY);\n },\n },\n tab.isEditing\n ? [\n h('input', {\n class: 'cli-panel-tab-rename-input',\n type: 'text',\n value: tab.title,\n onVnodeMounted: (vnode: VNode) => {\n const input = vnode.el as HTMLInputElement;\n input.focus();\n input.select();\n },\n onKeydown: (e: KeyboardEvent) =>\n handleRenameKey(controller, tab.id, e.key, (e.target as HTMLInputElement).value),\n onBlur: (e: FocusEvent) => controller.commitRename(tab.id, (e.target as HTMLInputElement).value),\n onClick: stop,\n onDblclick: stop,\n }),\n ]\n : [\n h('span', { class: panelTabDotClass(s, tab) }),\n h('span', { class: 'cli-panel-tab-title' }, tab.title),\n h(\n 'button',\n {\n class: 'cli-panel-tab-close-btn',\n title: PANEL_LABELS.closeTab,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closeTab(tab.id);\n },\n },\n CLOSE_GLYPH,\n ),\n ],\n ),\n ),\n ),\n h('button', { class: 'cli-panel-add-tab', title: PANEL_LABELS.newTerminal, onClick: () => controller.addTab() }, '+'),\n ]);\n\n const renderInstances = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-instances' },\n s.tabs.map((tab) =>\n h('div', { key: tab.id, class: 'cli-panel-instance', style: { display: tab.id === s.activeTabId ? undefined : 'none' } }, [\n h(\n 'div',\n { class: panesContainerClass(s) },\n tab.panes.flatMap((pane, i) => [\n i > 0\n ? h(\n 'div',\n {\n key: `divider-${pane.id}`,\n class: 'cli-panel-pane-divider',\n onMousedown: (e: MouseEvent) => {\n e.preventDefault();\n controller.startPaneResize(tab.id, i - 1, e.clientX, panesContainerWidth(e.target));\n },\n },\n [h('div', { class: 'cli-panel-pane-divider-grip' })],\n )\n : null,\n h(\n 'div',\n {\n key: pane.id,\n class: paneClass(s, tab.id, pane.id),\n style: paneStyle(pane.widthPercent),\n onClick: () => controller.activatePane(tab.id, pane.id),\n },\n [\n tab.panes.length > 1\n ? h(\n 'button',\n {\n class: 'cli-panel-pane-close-btn',\n title: PANEL_LABELS.closePane,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closePane(pane.id);\n },\n },\n CLOSE_GLYPH,\n )\n : null,\n h(Cli, {\n options: mergedOptions.value,\n modules: hostConfig.value.modules,\n services: hostConfig.value.services,\n snapshot: pane.snapshot,\n style: { height: '100%' },\n onReady: (engine: CliEngine) => controller.registerEngine(tab.id, pane.id, engine),\n }),\n ],\n ),\n ]),\n ),\n ]),\n ),\n );\n\n const renderContextMenu = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-context-menu', style: contextMenuStyle(s), onClick: stop },\n contextMenuItems(s).flatMap((item) => [\n item.separatorBefore ? h('div', { class: 'cli-panel-context-menu-separator' }) : null,\n h(\n 'button',\n {\n class: joinClasses('cli-panel-context-menu-item', item.destructive && 'destructive'),\n disabled: item.disabled,\n onClick: () => runContextMenuAction(controller, item.action),\n },\n item.label,\n ),\n ]),\n );\n\n const renderStatusDropdown = (s: CliPanelSnapshot) => {\n const dropdown = openStatusDropdown(s);\n if (!dropdown) return null;\n return h('div', { class: 'cli-panel-services-dropdown', style: dropdown.style, onClick: stop }, [\n h('div', { class: 'cli-panel-services-dropdown-header' }, dropdown.header),\n h(\n 'div',\n { class: 'cli-panel-services-dropdown-list' },\n dropdown.rows.map((row) =>\n h('div', { key: row.key, class: 'cli-panel-services-dropdown-item' }, [\n h('span', { class: row.dotClass }),\n h('div', { class: 'cli-panel-svc-info' }, [\n h('span', { class: 'cli-panel-svc-name' }, row.name),\n row.description ? h('span', { class: 'cli-panel-svc-desc' }, row.description) : null,\n ]),\n dropdown.kind === 'servers'\n ? h('div', { class: 'cli-panel-srv-meta' }, [\n h('span', { class: 'cli-panel-svc-status' }, row.status),\n ...row.meta.map((m) => h('span', { key: m, class: 'cli-panel-svc-desc' }, m)),\n ])\n : h('span', { class: 'cli-panel-svc-status' }, row.status),\n ]),\n ),\n ),\n dropdown.rows.length === 0 ? h('div', { class: 'cli-panel-services-dropdown-empty' }, dropdown.emptyText) : null,\n ]);\n };\n\n /* ─── Render ─────────────────────────────────────── */\n\n return () => {\n const s = state.value;\n if (!s.visible) return null;\n\n return h(Fragment, [\n s.hidden\n ? h(\n 'button',\n {\n class: 'cli-panel-hide-tab',\n 'data-position': s.position,\n 'data-hide-align': s.hideAlignment,\n style: s.themeStyles,\n title: PANEL_LABELS.showCli,\n onClick: () => controller.unhide(),\n },\n [\n icon(HIDE_TAB_TERMINAL_ICON, 'cli-panel-hide-tab-icon'),\n h('span', { class: 'cli-panel-hide-tab-label' }, PANEL_LABELS.title),\n icon(hideTabChevronIcon(s.position), 'cli-panel-hide-tab-arrow'),\n ],\n )\n : null,\n h(\n 'div',\n {\n ref: root,\n class: panelWrapperClass(s, props.class),\n style: { ...panelWrapperStyle(s), ...props.style },\n 'data-position': s.position,\n 'data-resizable': String(s.resizable),\n 'data-closable': String(s.closable),\n 'data-hideable': String(s.hideable),\n },\n [\n renderHeader(s),\n s.initialized\n ? h('div', { class: 'cli-panel-content', style: s.collapsed ? { display: 'none' } : undefined }, [\n renderTabs(s),\n renderInstances(s),\n ])\n : null,\n ],\n ),\n s.contextMenu.visible ? renderContextMenu(s) : null,\n renderStatusDropdown(s),\n ]);\n };\n },\n});\n","import { defineComponent, ref, PropType, h, provide } from 'vue';\nimport { 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 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 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 { onMounted, onBeforeUnmount, Ref, shallowRef } from 'vue';\nimport { CliEngine, CreateCliEngineConfig, createCliEngine } from '@qodalis/cli';\n\nexport type UseCliEngineConfig = Omit<CreateCliEngineConfig, 'framework'>;\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 = createCliEngine(containerRef.value, { ...config, framework: 'Vue' });\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"],"mappings":"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","names":["import_vue","import_vue","import_cli","import_vue","import_vue","import_cli","import_vue","import_cli"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Cli.ts","../src/cliInjection.ts","../src/CliConfigProvider.ts","../src/CliPanel.ts","../src/CliProvider.ts","../src/useCliEngine.ts","../src/useCli.ts"],"sourcesContent":["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","import {\n defineComponent,\n ref,\n onMounted,\n onBeforeUnmount,\n PropType,\n h,\n inject,\n} from 'vue';\nimport { ICliModule, CliEngineSnapshot } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions, createCliEngine, resolveCliHostConfig } 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 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 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 // Local props override the config context.\n const hostConfig = resolveCliHostConfig(props, config);\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n engine = createCliEngine(containerRef.value, { ...hostConfig, snapshot: props.snapshot, framework: 'Vue' });\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 { ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\n\nexport interface CliConfigValue {\n modules?: ICliModule[];\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 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 options: props.options,\n services: props.services,\n });\n\n return () => slots.default?.();\n },\n});\n","import { defineComponent, computed, inject, watch, PropType, h, onBeforeUnmount, onMounted, shallowRef, VNode, Fragment } from 'vue';\nimport { ICliModule, CliPanelConfig, CliPanelPosition, ICliPanelRef } from '@qodalis/cli-core';\nimport {\n CliEngine,\n CliEngineOptions,\n CliPanelController,\n CliPanelSnapshot,\n CLOSE_GLYPH,\n CLOSE_ICON,\n HIDE_ICON,\n HIDE_TAB_TERMINAL_ICON,\n MAXIMIZE_ICON,\n PANEL_LABELS,\n panelBranding,\n RESTORE_ICON,\n SvgIcon,\n TERMINAL_ICON,\n collapseChevronIcon,\n contextMenuItems,\n contextMenuStyle,\n glowLineClass,\n handleRenameKey,\n hideTabChevronIcon,\n joinClasses,\n mergeCliOptions,\n openStatusDropdown,\n paneClass,\n paneStyle,\n panelTabClass,\n panelTabDotClass,\n panelWrapperClass,\n panelWrapperStyle,\n panesContainerClass,\n panesContainerWidth,\n positionIcon,\n positionOptions,\n resolveCliHostConfig,\n runContextMenuAction,\n statusIndicators,\n svgAttrs,\n} from '@qodalis/cli';\nimport { Cli } from './Cli';\nimport { CliConfigKey } from './CliConfigProvider';\n\nexport interface CliPanelOptions extends CliEngineOptions, CliPanelConfig {}\n\n/** The methods exposed through a template ref. */\nconst PANEL_REF_METHODS: Array<keyof ICliPanelRef<CliEngine>> = [\n 'open', 'collapse', 'toggleCollapse', 'hide', 'unhide', 'toggleHide', 'close',\n 'maximize', 'restore', 'toggleMaximize', 'resize', 'setPosition',\n 'addTab', 'closeTab', 'selectTab', 'renameTab', 'splitPane', 'closePane', 'getEngine', 'getState',\n];\n\nfunction icon(svg: SvgIcon, className?: string): VNode {\n return h('svg', { class: className, ...svgAttrs(svg) }, svg.shapes.map((shape) => h(shape.tag, shape.attrs)));\n}\n\nconst stop = (e: Event) => e.stopPropagation();\n\nexport const CliPanel = defineComponent({\n name: 'CliPanel',\n props: {\n options: { type: Object as PropType<CliPanelOptions>, default: undefined },\n modules: { type: Array as PropType<ICliModule[]>, default: undefined },\n services: { type: Object as PropType<Record<string, any>>, default: undefined },\n onClose: { type: Function as PropType<() => void>, default: undefined },\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: { type: Object as PropType<Record<string, string>>, default: undefined },\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(() => mergeCliOptions<CliPanelOptions>(props.options, config?.options));\n // The panel's title and icon: the host's branding, or \"CLI\" with the terminal glyph\n const branding = computed(() => panelBranding(mergedOptions.value));\n const hostConfig = computed(() => resolveCliHostConfig(props, config));\n\n const controlled = () => ({\n collapsed: props.collapsed,\n hidden: props.hidden,\n maximized: props.maximized,\n activeTabId: props.activeTabId,\n position: props.position,\n height: props.height,\n width: props.width,\n });\n\n const controller = new CliPanelController({\n config: mergedOptions.value,\n controlled: controlled(),\n callbacks: {\n onCollapsedChange: (v) => emit('update:collapsed', v),\n onHiddenChange: (v) => emit('update:hidden', v),\n onMaximizedChange: (v) => emit('update:maximized', v),\n onActiveTabIdChange: (v) => emit('update:activeTabId', v),\n onPositionChange: (v) => emit('update:position', v),\n onHeightChange: (v) => emit('update:height', v),\n onWidthChange: (v) => emit('update:width', v),\n onClose: () => {\n emit('close');\n props.onClose?.();\n },\n onTabAdded: (e) => emit('tab-added', e),\n onTabClosed: (e) => emit('tab-closed', e),\n onPaneSplit: (e) => emit('pane-split', e),\n onPaneClosed: (e) => emit('pane-closed', e),\n },\n });\n\n const state = shallowRef<CliPanelSnapshot>(controller.getSnapshot());\n const unsubscribe = controller.subscribe(() => {\n state.value = controller.getSnapshot();\n });\n\n watch(controlled, (values) => controller.setControlled(values));\n watch(mergedOptions, (options) => controller.setOptions(options));\n\n const root = shallowRef<HTMLElement | null>(null);\n onMounted(() => controller.setRootElement(root.value));\n onBeforeUnmount(() => {\n unsubscribe();\n controller.destroy();\n });\n\n const exposed: Record<string, unknown> = {};\n for (const method of PANEL_REF_METHODS) {\n exposed[method] = (controller[method] as (...args: unknown[]) => unknown).bind(controller);\n }\n expose(exposed);\n\n /* ─── Render helpers ─────────────────────────────── */\n\n const openDropdown = (e: MouseEvent, dropdown?: 'services' | 'servers') => {\n if (!dropdown) return;\n e.stopPropagation();\n const anchor = e.currentTarget as Element;\n if (dropdown === 'services') controller.toggleServicesDropdown(anchor);\n else controller.toggleServersDropdown(anchor);\n };\n\n const renderHeader = (s: CliPanelSnapshot) => {\n const indicators = statusIndicators(s);\n return h('div', { class: 'cli-panel-header' }, [\n h(\n 'div',\n {\n class: 'cli-panel-resize-bar',\n onMousedown: (e: MouseEvent) => {\n if (!s.resizable) return;\n e.preventDefault();\n controller.startPanelResize(e.clientX, e.clientY);\n },\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 branding.value.iconUrl ? h('img', { src: branding.value.iconUrl, alt: '', class: 'cli-panel-brand-icon' }) : icon(TERMINAL_ICON),\n ]),\n branding.value.title,\n ]),\n s.showStatusIndicators\n ? h(\n 'div',\n { class: 'cli-panel-status-indicators' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-item', item.itemClass),\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n h('span', { class: 'cli-panel-status-label' }, item.label),\n ],\n ),\n ),\n )\n : null,\n // Compact indicators for left/right positions (CSS controls visibility).\n h(\n 'div',\n { class: 'cli-panel-status-indicators-compact' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-compact-item', item.compactClass),\n title: item.title,\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.compactDotClass ? h('span', { class: item.compactDotClass }) : null,\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n ],\n ),\n ),\n ),\n h('div', { class: 'cli-panel-action-buttons' }, [\n h('div', { class: 'cli-panel-btn-position-wrapper', onClick: stop }, [\n h(\n 'button',\n {\n class: 'cli-panel-btn cli-panel-btn-position',\n title: PANEL_LABELS.movePanel,\n onClick: () => controller.togglePositionDropdown(),\n },\n [icon(positionIcon(s.position))],\n ),\n s.positionDropdownOpen\n ? h(\n 'div',\n { class: 'cli-panel-position-dropdown' },\n positionOptions(s).map((opt) =>\n h(\n 'button',\n { key: opt.position, class: opt.className, onClick: () => controller.setPosition(opt.position) },\n [icon(positionIcon(opt.position, 16)), opt.label],\n ),\n ),\n )\n : null,\n ]),\n s.hideable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-hide', title: PANEL_LABELS.hide, onClick: () => controller.hide() }, [icon(HIDE_ICON)])\n : null,\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.maximized ? PANEL_LABELS.restore : PANEL_LABELS.maximize,\n disabled: s.collapsed,\n onClick: () => controller.toggleMaximize(),\n },\n [icon(s.maximized ? RESTORE_ICON : MAXIMIZE_ICON)],\n ),\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.collapsed ? PANEL_LABELS.expand : PANEL_LABELS.collapse,\n onClick: () => controller.toggle(),\n },\n [icon(collapseChevronIcon(s.position, s.collapsed))],\n ),\n s.closable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-close', title: PANEL_LABELS.close, onClick: () => controller.close() }, [icon(CLOSE_ICON)])\n : null,\n ]),\n ]),\n h('div', { class: glowLineClass(s) }),\n ]);\n };\n\n const renderTabs = (s: CliPanelSnapshot) =>\n h('div', { class: 'cli-panel-tabs' }, [\n h(\n 'ul',\n { class: 'cli-panel-tab-list' },\n s.tabs.map((tab) =>\n h(\n 'li',\n {\n key: tab.id,\n class: panelTabClass(s, tab),\n onClick: () => controller.selectTab(tab.id),\n onDblclick: () => controller.startRename(tab.id),\n onContextmenu: (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n controller.openContextMenu(tab.id, e.clientX, e.clientY);\n },\n },\n tab.isEditing\n ? [\n h('input', {\n class: 'cli-panel-tab-rename-input',\n type: 'text',\n value: tab.title,\n onVnodeMounted: (vnode: VNode) => {\n const input = vnode.el as HTMLInputElement;\n input.focus();\n input.select();\n },\n onKeydown: (e: KeyboardEvent) =>\n handleRenameKey(controller, tab.id, e.key, (e.target as HTMLInputElement).value),\n onBlur: (e: FocusEvent) => controller.commitRename(tab.id, (e.target as HTMLInputElement).value),\n onClick: stop,\n onDblclick: stop,\n }),\n ]\n : [\n h('span', { class: panelTabDotClass(s, tab) }),\n h('span', { class: 'cli-panel-tab-title' }, tab.title),\n h(\n 'button',\n {\n class: 'cli-panel-tab-close-btn',\n title: PANEL_LABELS.closeTab,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closeTab(tab.id);\n },\n },\n CLOSE_GLYPH,\n ),\n ],\n ),\n ),\n ),\n h('button', { class: 'cli-panel-add-tab', title: PANEL_LABELS.newTerminal, onClick: () => controller.addTab() }, '+'),\n ]);\n\n const renderInstances = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-instances' },\n s.tabs.map((tab) =>\n h('div', { key: tab.id, class: 'cli-panel-instance', style: { display: tab.id === s.activeTabId ? undefined : 'none' } }, [\n h(\n 'div',\n { class: panesContainerClass(s) },\n tab.panes.flatMap((pane, i) => [\n i > 0\n ? h(\n 'div',\n {\n key: `divider-${pane.id}`,\n class: 'cli-panel-pane-divider',\n onMousedown: (e: MouseEvent) => {\n e.preventDefault();\n controller.startPaneResize(tab.id, i - 1, e.clientX, panesContainerWidth(e.target));\n },\n },\n [h('div', { class: 'cli-panel-pane-divider-grip' })],\n )\n : null,\n h(\n 'div',\n {\n key: pane.id,\n class: paneClass(s, tab.id, pane.id),\n style: paneStyle(pane.widthPercent),\n onClick: () => controller.activatePane(tab.id, pane.id),\n },\n [\n tab.panes.length > 1\n ? h(\n 'button',\n {\n class: 'cli-panel-pane-close-btn',\n title: PANEL_LABELS.closePane,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closePane(pane.id);\n },\n },\n CLOSE_GLYPH,\n )\n : null,\n h(Cli, {\n options: mergedOptions.value,\n modules: hostConfig.value.modules,\n services: hostConfig.value.services,\n snapshot: pane.snapshot,\n style: { height: '100%' },\n onReady: (engine: CliEngine) => controller.registerEngine(tab.id, pane.id, engine),\n }),\n ],\n ),\n ]),\n ),\n ]),\n ),\n );\n\n const renderContextMenu = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-context-menu', style: contextMenuStyle(s), onClick: stop },\n contextMenuItems(s).flatMap((item) => [\n item.separatorBefore ? h('div', { class: 'cli-panel-context-menu-separator' }) : null,\n h(\n 'button',\n {\n class: joinClasses('cli-panel-context-menu-item', item.destructive && 'destructive'),\n disabled: item.disabled,\n onClick: () => runContextMenuAction(controller, item.action),\n },\n item.label,\n ),\n ]),\n );\n\n const renderStatusDropdown = (s: CliPanelSnapshot) => {\n const dropdown = openStatusDropdown(s);\n if (!dropdown) return null;\n return h('div', { class: 'cli-panel-services-dropdown', style: dropdown.style, onClick: stop }, [\n h('div', { class: 'cli-panel-services-dropdown-header' }, dropdown.header),\n h(\n 'div',\n { class: 'cli-panel-services-dropdown-list' },\n dropdown.rows.map((row) =>\n h('div', { key: row.key, class: 'cli-panel-services-dropdown-item' }, [\n h('span', { class: row.dotClass }),\n h('div', { class: 'cli-panel-svc-info' }, [\n h('span', { class: 'cli-panel-svc-name' }, row.name),\n row.description ? h('span', { class: 'cli-panel-svc-desc' }, row.description) : null,\n ]),\n dropdown.kind === 'servers'\n ? h('div', { class: 'cli-panel-srv-meta' }, [\n h('span', { class: 'cli-panel-svc-status' }, row.status),\n ...row.meta.map((m) => h('span', { key: m, class: 'cli-panel-svc-desc' }, m)),\n ])\n : h('span', { class: 'cli-panel-svc-status' }, row.status),\n ]),\n ),\n ),\n dropdown.rows.length === 0 ? h('div', { class: 'cli-panel-services-dropdown-empty' }, dropdown.emptyText) : null,\n ]);\n };\n\n /* ─── Render ─────────────────────────────────────── */\n\n return () => {\n const s = state.value;\n if (!s.visible) return null;\n\n return h(Fragment, [\n s.hidden\n ? h(\n 'button',\n {\n class: 'cli-panel-hide-tab',\n 'data-position': s.position,\n 'data-hide-align': s.hideAlignment,\n style: s.themeStyles,\n title: PANEL_LABELS.showCli,\n onClick: () => controller.unhide(),\n },\n [\n branding.value.iconUrl\n ? h('img', { src: branding.value.iconUrl, alt: '', class: 'cli-panel-hide-tab-icon cli-panel-brand-icon' })\n : icon(HIDE_TAB_TERMINAL_ICON, 'cli-panel-hide-tab-icon'),\n h('span', { class: 'cli-panel-hide-tab-label' }, branding.value.title),\n icon(hideTabChevronIcon(s.position), 'cli-panel-hide-tab-arrow'),\n ],\n )\n : null,\n h(\n 'div',\n {\n ref: root,\n class: panelWrapperClass(s, props.class),\n style: { ...panelWrapperStyle(s), ...props.style },\n 'data-position': s.position,\n 'data-resizable': String(s.resizable),\n 'data-closable': String(s.closable),\n 'data-hideable': String(s.hideable),\n },\n [\n renderHeader(s),\n s.initialized\n ? h('div', { class: 'cli-panel-content', style: s.collapsed ? { display: 'none' } : undefined }, [\n renderTabs(s),\n renderInstances(s),\n ])\n : null,\n ],\n ),\n s.contextMenu.visible ? renderContextMenu(s) : null,\n renderStatusDropdown(s),\n ]);\n };\n },\n});\n","import { defineComponent, ref, PropType, h, provide } from 'vue';\nimport { 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 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 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 { onMounted, onBeforeUnmount, Ref, shallowRef } from 'vue';\nimport { CliEngine, CreateCliEngineConfig, createCliEngine } from '@qodalis/cli';\n\nexport type UseCliEngineConfig = Omit<CreateCliEngineConfig, 'framework'>;\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 = createCliEngine(containerRef.value, { ...config, framework: 'Vue' });\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"],"mappings":"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","names":["import_vue","import_vue","import_cli","import_vue","import_vue","import_cli","import_vue","import_cli"]}
|
package/dist/index.mjs
CHANGED
|
@@ -108,6 +108,7 @@ import {
|
|
|
108
108
|
HIDE_TAB_TERMINAL_ICON,
|
|
109
109
|
MAXIMIZE_ICON,
|
|
110
110
|
PANEL_LABELS,
|
|
111
|
+
panelBranding,
|
|
111
112
|
RESTORE_ICON,
|
|
112
113
|
TERMINAL_ICON,
|
|
113
114
|
collapseChevronIcon,
|
|
@@ -194,6 +195,7 @@ var CliPanel = defineComponent3({
|
|
|
194
195
|
setup(props, { expose, emit }) {
|
|
195
196
|
const config = inject2(CliConfigKey, null);
|
|
196
197
|
const mergedOptions = computed(() => mergeCliOptions(props.options, config?.options));
|
|
198
|
+
const branding = computed(() => panelBranding(mergedOptions.value));
|
|
197
199
|
const hostConfig = computed(() => resolveCliHostConfig2(props, config));
|
|
198
200
|
const controlled = () => ({
|
|
199
201
|
collapsed: props.collapsed,
|
|
@@ -265,7 +267,12 @@ var CliPanel = defineComponent3({
|
|
|
265
267
|
[h2("div", { class: "cli-panel-resize-grip" })]
|
|
266
268
|
),
|
|
267
269
|
h2("div", { class: "cli-panel-header-content" }, [
|
|
268
|
-
h2("p", { class: "cli-panel-title" }, [
|
|
270
|
+
h2("p", { class: "cli-panel-title" }, [
|
|
271
|
+
h2("span", { class: "cli-panel-title-icon" }, [
|
|
272
|
+
branding.value.iconUrl ? h2("img", { src: branding.value.iconUrl, alt: "", class: "cli-panel-brand-icon" }) : icon(TERMINAL_ICON)
|
|
273
|
+
]),
|
|
274
|
+
branding.value.title
|
|
275
|
+
]),
|
|
269
276
|
s.showStatusIndicators ? h2(
|
|
270
277
|
"div",
|
|
271
278
|
{ class: "cli-panel-status-indicators" },
|
|
@@ -522,8 +529,8 @@ var CliPanel = defineComponent3({
|
|
|
522
529
|
onClick: () => controller.unhide()
|
|
523
530
|
},
|
|
524
531
|
[
|
|
525
|
-
icon(HIDE_TAB_TERMINAL_ICON, "cli-panel-hide-tab-icon"),
|
|
526
|
-
h2("span", { class: "cli-panel-hide-tab-label" },
|
|
532
|
+
branding.value.iconUrl ? h2("img", { src: branding.value.iconUrl, alt: "", class: "cli-panel-hide-tab-icon cli-panel-brand-icon" }) : icon(HIDE_TAB_TERMINAL_ICON, "cli-panel-hide-tab-icon"),
|
|
533
|
+
h2("span", { class: "cli-panel-hide-tab-label" }, branding.value.title),
|
|
527
534
|
icon(hideTabChevronIcon(s.position), "cli-panel-hide-tab-arrow")
|
|
528
535
|
]
|
|
529
536
|
) : null,
|
package/dist/index.mjs.map
CHANGED
|
@@ -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 { ICliModule, CliEngineSnapshot } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions, createCliEngine, resolveCliHostConfig } 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 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 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 // Local props override the config context.\n const hostConfig = resolveCliHostConfig(props, config);\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n engine = createCliEngine(containerRef.value, { ...hostConfig, snapshot: props.snapshot, framework: 'Vue' });\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 { ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\n\nexport interface CliConfigValue {\n modules?: ICliModule[];\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 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 options: props.options,\n services: props.services,\n });\n\n return () => slots.default?.();\n },\n});\n","import { defineComponent, computed, inject, watch, PropType, h, onBeforeUnmount, onMounted, shallowRef, VNode, Fragment } from 'vue';\nimport { ICliModule, CliPanelConfig, CliPanelPosition, ICliPanelRef } from '@qodalis/cli-core';\nimport {\n CliEngine,\n CliEngineOptions,\n CliPanelController,\n CliPanelSnapshot,\n CLOSE_GLYPH,\n CLOSE_ICON,\n HIDE_ICON,\n HIDE_TAB_TERMINAL_ICON,\n MAXIMIZE_ICON,\n PANEL_LABELS,\n RESTORE_ICON,\n SvgIcon,\n TERMINAL_ICON,\n collapseChevronIcon,\n contextMenuItems,\n contextMenuStyle,\n glowLineClass,\n handleRenameKey,\n hideTabChevronIcon,\n joinClasses,\n mergeCliOptions,\n openStatusDropdown,\n paneClass,\n paneStyle,\n panelTabClass,\n panelTabDotClass,\n panelWrapperClass,\n panelWrapperStyle,\n panesContainerClass,\n panesContainerWidth,\n positionIcon,\n positionOptions,\n resolveCliHostConfig,\n runContextMenuAction,\n statusIndicators,\n svgAttrs,\n} from '@qodalis/cli';\nimport { Cli } from './Cli';\nimport { CliConfigKey } from './CliConfigProvider';\n\nexport interface CliPanelOptions extends CliEngineOptions, CliPanelConfig {}\n\n/** The methods exposed through a template ref. */\nconst PANEL_REF_METHODS: Array<keyof ICliPanelRef<CliEngine>> = [\n 'open', 'collapse', 'toggleCollapse', 'hide', 'unhide', 'toggleHide', 'close',\n 'maximize', 'restore', 'toggleMaximize', 'resize', 'setPosition',\n 'addTab', 'closeTab', 'selectTab', 'renameTab', 'splitPane', 'closePane', 'getEngine', 'getState',\n];\n\nfunction icon(svg: SvgIcon, className?: string): VNode {\n return h('svg', { class: className, ...svgAttrs(svg) }, svg.shapes.map((shape) => h(shape.tag, shape.attrs)));\n}\n\nconst stop = (e: Event) => e.stopPropagation();\n\nexport const CliPanel = defineComponent({\n name: 'CliPanel',\n props: {\n options: { type: Object as PropType<CliPanelOptions>, default: undefined },\n modules: { type: Array as PropType<ICliModule[]>, default: undefined },\n services: { type: Object as PropType<Record<string, any>>, default: undefined },\n onClose: { type: Function as PropType<() => void>, default: undefined },\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: { type: Object as PropType<Record<string, string>>, default: undefined },\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(() => mergeCliOptions<CliPanelOptions>(props.options, config?.options));\n const hostConfig = computed(() => resolveCliHostConfig(props, config));\n\n const controlled = () => ({\n collapsed: props.collapsed,\n hidden: props.hidden,\n maximized: props.maximized,\n activeTabId: props.activeTabId,\n position: props.position,\n height: props.height,\n width: props.width,\n });\n\n const controller = new CliPanelController({\n config: mergedOptions.value,\n controlled: controlled(),\n callbacks: {\n onCollapsedChange: (v) => emit('update:collapsed', v),\n onHiddenChange: (v) => emit('update:hidden', v),\n onMaximizedChange: (v) => emit('update:maximized', v),\n onActiveTabIdChange: (v) => emit('update:activeTabId', v),\n onPositionChange: (v) => emit('update:position', v),\n onHeightChange: (v) => emit('update:height', v),\n onWidthChange: (v) => emit('update:width', v),\n onClose: () => {\n emit('close');\n props.onClose?.();\n },\n onTabAdded: (e) => emit('tab-added', e),\n onTabClosed: (e) => emit('tab-closed', e),\n onPaneSplit: (e) => emit('pane-split', e),\n onPaneClosed: (e) => emit('pane-closed', e),\n },\n });\n\n const state = shallowRef<CliPanelSnapshot>(controller.getSnapshot());\n const unsubscribe = controller.subscribe(() => {\n state.value = controller.getSnapshot();\n });\n\n watch(controlled, (values) => controller.setControlled(values));\n watch(mergedOptions, (options) => controller.setOptions(options));\n\n const root = shallowRef<HTMLElement | null>(null);\n onMounted(() => controller.setRootElement(root.value));\n onBeforeUnmount(() => {\n unsubscribe();\n controller.destroy();\n });\n\n const exposed: Record<string, unknown> = {};\n for (const method of PANEL_REF_METHODS) {\n exposed[method] = (controller[method] as (...args: unknown[]) => unknown).bind(controller);\n }\n expose(exposed);\n\n /* ─── Render helpers ─────────────────────────────── */\n\n const openDropdown = (e: MouseEvent, dropdown?: 'services' | 'servers') => {\n if (!dropdown) return;\n e.stopPropagation();\n const anchor = e.currentTarget as Element;\n if (dropdown === 'services') controller.toggleServicesDropdown(anchor);\n else controller.toggleServersDropdown(anchor);\n };\n\n const renderHeader = (s: CliPanelSnapshot) => {\n const indicators = statusIndicators(s);\n return h('div', { class: 'cli-panel-header' }, [\n h(\n 'div',\n {\n class: 'cli-panel-resize-bar',\n onMousedown: (e: MouseEvent) => {\n if (!s.resizable) return;\n e.preventDefault();\n controller.startPanelResize(e.clientX, e.clientY);\n },\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' }, [h('span', { class: 'cli-panel-title-icon' }, [icon(TERMINAL_ICON)]), PANEL_LABELS.title]),\n s.showStatusIndicators\n ? h(\n 'div',\n { class: 'cli-panel-status-indicators' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-item', item.itemClass),\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n h('span', { class: 'cli-panel-status-label' }, item.label),\n ],\n ),\n ),\n )\n : null,\n // Compact indicators for left/right positions (CSS controls visibility).\n h(\n 'div',\n { class: 'cli-panel-status-indicators-compact' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-compact-item', item.compactClass),\n title: item.title,\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.compactDotClass ? h('span', { class: item.compactDotClass }) : null,\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n ],\n ),\n ),\n ),\n h('div', { class: 'cli-panel-action-buttons' }, [\n h('div', { class: 'cli-panel-btn-position-wrapper', onClick: stop }, [\n h(\n 'button',\n {\n class: 'cli-panel-btn cli-panel-btn-position',\n title: PANEL_LABELS.movePanel,\n onClick: () => controller.togglePositionDropdown(),\n },\n [icon(positionIcon(s.position))],\n ),\n s.positionDropdownOpen\n ? h(\n 'div',\n { class: 'cli-panel-position-dropdown' },\n positionOptions(s).map((opt) =>\n h(\n 'button',\n { key: opt.position, class: opt.className, onClick: () => controller.setPosition(opt.position) },\n [icon(positionIcon(opt.position, 16)), opt.label],\n ),\n ),\n )\n : null,\n ]),\n s.hideable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-hide', title: PANEL_LABELS.hide, onClick: () => controller.hide() }, [icon(HIDE_ICON)])\n : null,\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.maximized ? PANEL_LABELS.restore : PANEL_LABELS.maximize,\n disabled: s.collapsed,\n onClick: () => controller.toggleMaximize(),\n },\n [icon(s.maximized ? RESTORE_ICON : MAXIMIZE_ICON)],\n ),\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.collapsed ? PANEL_LABELS.expand : PANEL_LABELS.collapse,\n onClick: () => controller.toggle(),\n },\n [icon(collapseChevronIcon(s.position, s.collapsed))],\n ),\n s.closable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-close', title: PANEL_LABELS.close, onClick: () => controller.close() }, [icon(CLOSE_ICON)])\n : null,\n ]),\n ]),\n h('div', { class: glowLineClass(s) }),\n ]);\n };\n\n const renderTabs = (s: CliPanelSnapshot) =>\n h('div', { class: 'cli-panel-tabs' }, [\n h(\n 'ul',\n { class: 'cli-panel-tab-list' },\n s.tabs.map((tab) =>\n h(\n 'li',\n {\n key: tab.id,\n class: panelTabClass(s, tab),\n onClick: () => controller.selectTab(tab.id),\n onDblclick: () => controller.startRename(tab.id),\n onContextmenu: (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n controller.openContextMenu(tab.id, e.clientX, e.clientY);\n },\n },\n tab.isEditing\n ? [\n h('input', {\n class: 'cli-panel-tab-rename-input',\n type: 'text',\n value: tab.title,\n onVnodeMounted: (vnode: VNode) => {\n const input = vnode.el as HTMLInputElement;\n input.focus();\n input.select();\n },\n onKeydown: (e: KeyboardEvent) =>\n handleRenameKey(controller, tab.id, e.key, (e.target as HTMLInputElement).value),\n onBlur: (e: FocusEvent) => controller.commitRename(tab.id, (e.target as HTMLInputElement).value),\n onClick: stop,\n onDblclick: stop,\n }),\n ]\n : [\n h('span', { class: panelTabDotClass(s, tab) }),\n h('span', { class: 'cli-panel-tab-title' }, tab.title),\n h(\n 'button',\n {\n class: 'cli-panel-tab-close-btn',\n title: PANEL_LABELS.closeTab,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closeTab(tab.id);\n },\n },\n CLOSE_GLYPH,\n ),\n ],\n ),\n ),\n ),\n h('button', { class: 'cli-panel-add-tab', title: PANEL_LABELS.newTerminal, onClick: () => controller.addTab() }, '+'),\n ]);\n\n const renderInstances = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-instances' },\n s.tabs.map((tab) =>\n h('div', { key: tab.id, class: 'cli-panel-instance', style: { display: tab.id === s.activeTabId ? undefined : 'none' } }, [\n h(\n 'div',\n { class: panesContainerClass(s) },\n tab.panes.flatMap((pane, i) => [\n i > 0\n ? h(\n 'div',\n {\n key: `divider-${pane.id}`,\n class: 'cli-panel-pane-divider',\n onMousedown: (e: MouseEvent) => {\n e.preventDefault();\n controller.startPaneResize(tab.id, i - 1, e.clientX, panesContainerWidth(e.target));\n },\n },\n [h('div', { class: 'cli-panel-pane-divider-grip' })],\n )\n : null,\n h(\n 'div',\n {\n key: pane.id,\n class: paneClass(s, tab.id, pane.id),\n style: paneStyle(pane.widthPercent),\n onClick: () => controller.activatePane(tab.id, pane.id),\n },\n [\n tab.panes.length > 1\n ? h(\n 'button',\n {\n class: 'cli-panel-pane-close-btn',\n title: PANEL_LABELS.closePane,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closePane(pane.id);\n },\n },\n CLOSE_GLYPH,\n )\n : null,\n h(Cli, {\n options: mergedOptions.value,\n modules: hostConfig.value.modules,\n services: hostConfig.value.services,\n snapshot: pane.snapshot,\n style: { height: '100%' },\n onReady: (engine: CliEngine) => controller.registerEngine(tab.id, pane.id, engine),\n }),\n ],\n ),\n ]),\n ),\n ]),\n ),\n );\n\n const renderContextMenu = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-context-menu', style: contextMenuStyle(s), onClick: stop },\n contextMenuItems(s).flatMap((item) => [\n item.separatorBefore ? h('div', { class: 'cli-panel-context-menu-separator' }) : null,\n h(\n 'button',\n {\n class: joinClasses('cli-panel-context-menu-item', item.destructive && 'destructive'),\n disabled: item.disabled,\n onClick: () => runContextMenuAction(controller, item.action),\n },\n item.label,\n ),\n ]),\n );\n\n const renderStatusDropdown = (s: CliPanelSnapshot) => {\n const dropdown = openStatusDropdown(s);\n if (!dropdown) return null;\n return h('div', { class: 'cli-panel-services-dropdown', style: dropdown.style, onClick: stop }, [\n h('div', { class: 'cli-panel-services-dropdown-header' }, dropdown.header),\n h(\n 'div',\n { class: 'cli-panel-services-dropdown-list' },\n dropdown.rows.map((row) =>\n h('div', { key: row.key, class: 'cli-panel-services-dropdown-item' }, [\n h('span', { class: row.dotClass }),\n h('div', { class: 'cli-panel-svc-info' }, [\n h('span', { class: 'cli-panel-svc-name' }, row.name),\n row.description ? h('span', { class: 'cli-panel-svc-desc' }, row.description) : null,\n ]),\n dropdown.kind === 'servers'\n ? h('div', { class: 'cli-panel-srv-meta' }, [\n h('span', { class: 'cli-panel-svc-status' }, row.status),\n ...row.meta.map((m) => h('span', { key: m, class: 'cli-panel-svc-desc' }, m)),\n ])\n : h('span', { class: 'cli-panel-svc-status' }, row.status),\n ]),\n ),\n ),\n dropdown.rows.length === 0 ? h('div', { class: 'cli-panel-services-dropdown-empty' }, dropdown.emptyText) : null,\n ]);\n };\n\n /* ─── Render ─────────────────────────────────────── */\n\n return () => {\n const s = state.value;\n if (!s.visible) return null;\n\n return h(Fragment, [\n s.hidden\n ? h(\n 'button',\n {\n class: 'cli-panel-hide-tab',\n 'data-position': s.position,\n 'data-hide-align': s.hideAlignment,\n style: s.themeStyles,\n title: PANEL_LABELS.showCli,\n onClick: () => controller.unhide(),\n },\n [\n icon(HIDE_TAB_TERMINAL_ICON, 'cli-panel-hide-tab-icon'),\n h('span', { class: 'cli-panel-hide-tab-label' }, PANEL_LABELS.title),\n icon(hideTabChevronIcon(s.position), 'cli-panel-hide-tab-arrow'),\n ],\n )\n : null,\n h(\n 'div',\n {\n ref: root,\n class: panelWrapperClass(s, props.class),\n style: { ...panelWrapperStyle(s), ...props.style },\n 'data-position': s.position,\n 'data-resizable': String(s.resizable),\n 'data-closable': String(s.closable),\n 'data-hideable': String(s.hideable),\n },\n [\n renderHeader(s),\n s.initialized\n ? h('div', { class: 'cli-panel-content', style: s.collapsed ? { display: 'none' } : undefined }, [\n renderTabs(s),\n renderInstances(s),\n ])\n : null,\n ],\n ),\n s.contextMenu.visible ? renderContextMenu(s) : null,\n renderStatusDropdown(s),\n ]);\n };\n },\n});\n","import { defineComponent, ref, PropType, h, provide } from 'vue';\nimport { 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 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 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 { onMounted, onBeforeUnmount, Ref, shallowRef } from 'vue';\nimport { CliEngine, CreateCliEngineConfig, createCliEngine } from '@qodalis/cli';\n\nexport type UseCliEngineConfig = Omit<CreateCliEngineConfig, 'framework'>;\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 = createCliEngine(containerRef.value, { ...config, framework: 'Vue' });\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","inject","h","onBeforeUnmount","onMounted","resolveCliHostConfig","h","defineComponent","inject","resolveCliHostConfig","onMounted","onBeforeUnmount","defineComponent","ref","h","provide","onMounted","onBeforeUnmount","shallowRef","createCliEngine","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 { ICliModule, CliEngineSnapshot } from '@qodalis/cli-core';\nimport { CliEngine, CliEngineOptions, createCliEngine, resolveCliHostConfig } 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 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 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 // Local props override the config context.\n const hostConfig = resolveCliHostConfig(props, config);\n\n onMounted(async () => {\n if (!containerRef.value) return;\n\n engine = createCliEngine(containerRef.value, { ...hostConfig, snapshot: props.snapshot, framework: 'Vue' });\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 { ICliModule } from '@qodalis/cli-core';\nimport { CliEngineOptions } from '@qodalis/cli';\n\nexport interface CliConfigValue {\n modules?: ICliModule[];\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 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 options: props.options,\n services: props.services,\n });\n\n return () => slots.default?.();\n },\n});\n","import { defineComponent, computed, inject, watch, PropType, h, onBeforeUnmount, onMounted, shallowRef, VNode, Fragment } from 'vue';\nimport { ICliModule, CliPanelConfig, CliPanelPosition, ICliPanelRef } from '@qodalis/cli-core';\nimport {\n CliEngine,\n CliEngineOptions,\n CliPanelController,\n CliPanelSnapshot,\n CLOSE_GLYPH,\n CLOSE_ICON,\n HIDE_ICON,\n HIDE_TAB_TERMINAL_ICON,\n MAXIMIZE_ICON,\n PANEL_LABELS,\n panelBranding,\n RESTORE_ICON,\n SvgIcon,\n TERMINAL_ICON,\n collapseChevronIcon,\n contextMenuItems,\n contextMenuStyle,\n glowLineClass,\n handleRenameKey,\n hideTabChevronIcon,\n joinClasses,\n mergeCliOptions,\n openStatusDropdown,\n paneClass,\n paneStyle,\n panelTabClass,\n panelTabDotClass,\n panelWrapperClass,\n panelWrapperStyle,\n panesContainerClass,\n panesContainerWidth,\n positionIcon,\n positionOptions,\n resolveCliHostConfig,\n runContextMenuAction,\n statusIndicators,\n svgAttrs,\n} from '@qodalis/cli';\nimport { Cli } from './Cli';\nimport { CliConfigKey } from './CliConfigProvider';\n\nexport interface CliPanelOptions extends CliEngineOptions, CliPanelConfig {}\n\n/** The methods exposed through a template ref. */\nconst PANEL_REF_METHODS: Array<keyof ICliPanelRef<CliEngine>> = [\n 'open', 'collapse', 'toggleCollapse', 'hide', 'unhide', 'toggleHide', 'close',\n 'maximize', 'restore', 'toggleMaximize', 'resize', 'setPosition',\n 'addTab', 'closeTab', 'selectTab', 'renameTab', 'splitPane', 'closePane', 'getEngine', 'getState',\n];\n\nfunction icon(svg: SvgIcon, className?: string): VNode {\n return h('svg', { class: className, ...svgAttrs(svg) }, svg.shapes.map((shape) => h(shape.tag, shape.attrs)));\n}\n\nconst stop = (e: Event) => e.stopPropagation();\n\nexport const CliPanel = defineComponent({\n name: 'CliPanel',\n props: {\n options: { type: Object as PropType<CliPanelOptions>, default: undefined },\n modules: { type: Array as PropType<ICliModule[]>, default: undefined },\n services: { type: Object as PropType<Record<string, any>>, default: undefined },\n onClose: { type: Function as PropType<() => void>, default: undefined },\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: { type: Object as PropType<Record<string, string>>, default: undefined },\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(() => mergeCliOptions<CliPanelOptions>(props.options, config?.options));\n // The panel's title and icon: the host's branding, or \"CLI\" with the terminal glyph\n const branding = computed(() => panelBranding(mergedOptions.value));\n const hostConfig = computed(() => resolveCliHostConfig(props, config));\n\n const controlled = () => ({\n collapsed: props.collapsed,\n hidden: props.hidden,\n maximized: props.maximized,\n activeTabId: props.activeTabId,\n position: props.position,\n height: props.height,\n width: props.width,\n });\n\n const controller = new CliPanelController({\n config: mergedOptions.value,\n controlled: controlled(),\n callbacks: {\n onCollapsedChange: (v) => emit('update:collapsed', v),\n onHiddenChange: (v) => emit('update:hidden', v),\n onMaximizedChange: (v) => emit('update:maximized', v),\n onActiveTabIdChange: (v) => emit('update:activeTabId', v),\n onPositionChange: (v) => emit('update:position', v),\n onHeightChange: (v) => emit('update:height', v),\n onWidthChange: (v) => emit('update:width', v),\n onClose: () => {\n emit('close');\n props.onClose?.();\n },\n onTabAdded: (e) => emit('tab-added', e),\n onTabClosed: (e) => emit('tab-closed', e),\n onPaneSplit: (e) => emit('pane-split', e),\n onPaneClosed: (e) => emit('pane-closed', e),\n },\n });\n\n const state = shallowRef<CliPanelSnapshot>(controller.getSnapshot());\n const unsubscribe = controller.subscribe(() => {\n state.value = controller.getSnapshot();\n });\n\n watch(controlled, (values) => controller.setControlled(values));\n watch(mergedOptions, (options) => controller.setOptions(options));\n\n const root = shallowRef<HTMLElement | null>(null);\n onMounted(() => controller.setRootElement(root.value));\n onBeforeUnmount(() => {\n unsubscribe();\n controller.destroy();\n });\n\n const exposed: Record<string, unknown> = {};\n for (const method of PANEL_REF_METHODS) {\n exposed[method] = (controller[method] as (...args: unknown[]) => unknown).bind(controller);\n }\n expose(exposed);\n\n /* ─── Render helpers ─────────────────────────────── */\n\n const openDropdown = (e: MouseEvent, dropdown?: 'services' | 'servers') => {\n if (!dropdown) return;\n e.stopPropagation();\n const anchor = e.currentTarget as Element;\n if (dropdown === 'services') controller.toggleServicesDropdown(anchor);\n else controller.toggleServersDropdown(anchor);\n };\n\n const renderHeader = (s: CliPanelSnapshot) => {\n const indicators = statusIndicators(s);\n return h('div', { class: 'cli-panel-header' }, [\n h(\n 'div',\n {\n class: 'cli-panel-resize-bar',\n onMousedown: (e: MouseEvent) => {\n if (!s.resizable) return;\n e.preventDefault();\n controller.startPanelResize(e.clientX, e.clientY);\n },\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 branding.value.iconUrl ? h('img', { src: branding.value.iconUrl, alt: '', class: 'cli-panel-brand-icon' }) : icon(TERMINAL_ICON),\n ]),\n branding.value.title,\n ]),\n s.showStatusIndicators\n ? h(\n 'div',\n { class: 'cli-panel-status-indicators' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-item', item.itemClass),\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n h('span', { class: 'cli-panel-status-label' }, item.label),\n ],\n ),\n ),\n )\n : null,\n // Compact indicators for left/right positions (CSS controls visibility).\n h(\n 'div',\n { class: 'cli-panel-status-indicators-compact' },\n indicators.map((item) =>\n h(\n 'span',\n {\n key: item.key,\n class: joinClasses('cli-panel-status-compact-item', item.compactClass),\n title: item.title,\n onClick: item.dropdown ? (e: MouseEvent) => openDropdown(e, item.dropdown) : undefined,\n },\n [\n item.compactDotClass ? h('span', { class: item.compactDotClass }) : null,\n item.dotClass ? h('span', { class: `cli-panel-status-dot ${item.dotClass}` }) : null,\n item.icon ? h('span', { class: joinClasses('cli-panel-status-icon', item.iconClass) }, item.icon) : null,\n ],\n ),\n ),\n ),\n h('div', { class: 'cli-panel-action-buttons' }, [\n h('div', { class: 'cli-panel-btn-position-wrapper', onClick: stop }, [\n h(\n 'button',\n {\n class: 'cli-panel-btn cli-panel-btn-position',\n title: PANEL_LABELS.movePanel,\n onClick: () => controller.togglePositionDropdown(),\n },\n [icon(positionIcon(s.position))],\n ),\n s.positionDropdownOpen\n ? h(\n 'div',\n { class: 'cli-panel-position-dropdown' },\n positionOptions(s).map((opt) =>\n h(\n 'button',\n { key: opt.position, class: opt.className, onClick: () => controller.setPosition(opt.position) },\n [icon(positionIcon(opt.position, 16)), opt.label],\n ),\n ),\n )\n : null,\n ]),\n s.hideable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-hide', title: PANEL_LABELS.hide, onClick: () => controller.hide() }, [icon(HIDE_ICON)])\n : null,\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.maximized ? PANEL_LABELS.restore : PANEL_LABELS.maximize,\n disabled: s.collapsed,\n onClick: () => controller.toggleMaximize(),\n },\n [icon(s.maximized ? RESTORE_ICON : MAXIMIZE_ICON)],\n ),\n h(\n 'button',\n {\n class: 'cli-panel-btn',\n title: s.collapsed ? PANEL_LABELS.expand : PANEL_LABELS.collapse,\n onClick: () => controller.toggle(),\n },\n [icon(collapseChevronIcon(s.position, s.collapsed))],\n ),\n s.closable\n ? h('button', { class: 'cli-panel-btn cli-panel-btn-close', title: PANEL_LABELS.close, onClick: () => controller.close() }, [icon(CLOSE_ICON)])\n : null,\n ]),\n ]),\n h('div', { class: glowLineClass(s) }),\n ]);\n };\n\n const renderTabs = (s: CliPanelSnapshot) =>\n h('div', { class: 'cli-panel-tabs' }, [\n h(\n 'ul',\n { class: 'cli-panel-tab-list' },\n s.tabs.map((tab) =>\n h(\n 'li',\n {\n key: tab.id,\n class: panelTabClass(s, tab),\n onClick: () => controller.selectTab(tab.id),\n onDblclick: () => controller.startRename(tab.id),\n onContextmenu: (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n controller.openContextMenu(tab.id, e.clientX, e.clientY);\n },\n },\n tab.isEditing\n ? [\n h('input', {\n class: 'cli-panel-tab-rename-input',\n type: 'text',\n value: tab.title,\n onVnodeMounted: (vnode: VNode) => {\n const input = vnode.el as HTMLInputElement;\n input.focus();\n input.select();\n },\n onKeydown: (e: KeyboardEvent) =>\n handleRenameKey(controller, tab.id, e.key, (e.target as HTMLInputElement).value),\n onBlur: (e: FocusEvent) => controller.commitRename(tab.id, (e.target as HTMLInputElement).value),\n onClick: stop,\n onDblclick: stop,\n }),\n ]\n : [\n h('span', { class: panelTabDotClass(s, tab) }),\n h('span', { class: 'cli-panel-tab-title' }, tab.title),\n h(\n 'button',\n {\n class: 'cli-panel-tab-close-btn',\n title: PANEL_LABELS.closeTab,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closeTab(tab.id);\n },\n },\n CLOSE_GLYPH,\n ),\n ],\n ),\n ),\n ),\n h('button', { class: 'cli-panel-add-tab', title: PANEL_LABELS.newTerminal, onClick: () => controller.addTab() }, '+'),\n ]);\n\n const renderInstances = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-instances' },\n s.tabs.map((tab) =>\n h('div', { key: tab.id, class: 'cli-panel-instance', style: { display: tab.id === s.activeTabId ? undefined : 'none' } }, [\n h(\n 'div',\n { class: panesContainerClass(s) },\n tab.panes.flatMap((pane, i) => [\n i > 0\n ? h(\n 'div',\n {\n key: `divider-${pane.id}`,\n class: 'cli-panel-pane-divider',\n onMousedown: (e: MouseEvent) => {\n e.preventDefault();\n controller.startPaneResize(tab.id, i - 1, e.clientX, panesContainerWidth(e.target));\n },\n },\n [h('div', { class: 'cli-panel-pane-divider-grip' })],\n )\n : null,\n h(\n 'div',\n {\n key: pane.id,\n class: paneClass(s, tab.id, pane.id),\n style: paneStyle(pane.widthPercent),\n onClick: () => controller.activatePane(tab.id, pane.id),\n },\n [\n tab.panes.length > 1\n ? h(\n 'button',\n {\n class: 'cli-panel-pane-close-btn',\n title: PANEL_LABELS.closePane,\n onClick: (e: MouseEvent) => {\n e.stopPropagation();\n controller.closePane(pane.id);\n },\n },\n CLOSE_GLYPH,\n )\n : null,\n h(Cli, {\n options: mergedOptions.value,\n modules: hostConfig.value.modules,\n services: hostConfig.value.services,\n snapshot: pane.snapshot,\n style: { height: '100%' },\n onReady: (engine: CliEngine) => controller.registerEngine(tab.id, pane.id, engine),\n }),\n ],\n ),\n ]),\n ),\n ]),\n ),\n );\n\n const renderContextMenu = (s: CliPanelSnapshot) =>\n h(\n 'div',\n { class: 'cli-panel-context-menu', style: contextMenuStyle(s), onClick: stop },\n contextMenuItems(s).flatMap((item) => [\n item.separatorBefore ? h('div', { class: 'cli-panel-context-menu-separator' }) : null,\n h(\n 'button',\n {\n class: joinClasses('cli-panel-context-menu-item', item.destructive && 'destructive'),\n disabled: item.disabled,\n onClick: () => runContextMenuAction(controller, item.action),\n },\n item.label,\n ),\n ]),\n );\n\n const renderStatusDropdown = (s: CliPanelSnapshot) => {\n const dropdown = openStatusDropdown(s);\n if (!dropdown) return null;\n return h('div', { class: 'cli-panel-services-dropdown', style: dropdown.style, onClick: stop }, [\n h('div', { class: 'cli-panel-services-dropdown-header' }, dropdown.header),\n h(\n 'div',\n { class: 'cli-panel-services-dropdown-list' },\n dropdown.rows.map((row) =>\n h('div', { key: row.key, class: 'cli-panel-services-dropdown-item' }, [\n h('span', { class: row.dotClass }),\n h('div', { class: 'cli-panel-svc-info' }, [\n h('span', { class: 'cli-panel-svc-name' }, row.name),\n row.description ? h('span', { class: 'cli-panel-svc-desc' }, row.description) : null,\n ]),\n dropdown.kind === 'servers'\n ? h('div', { class: 'cli-panel-srv-meta' }, [\n h('span', { class: 'cli-panel-svc-status' }, row.status),\n ...row.meta.map((m) => h('span', { key: m, class: 'cli-panel-svc-desc' }, m)),\n ])\n : h('span', { class: 'cli-panel-svc-status' }, row.status),\n ]),\n ),\n ),\n dropdown.rows.length === 0 ? h('div', { class: 'cli-panel-services-dropdown-empty' }, dropdown.emptyText) : null,\n ]);\n };\n\n /* ─── Render ─────────────────────────────────────── */\n\n return () => {\n const s = state.value;\n if (!s.visible) return null;\n\n return h(Fragment, [\n s.hidden\n ? h(\n 'button',\n {\n class: 'cli-panel-hide-tab',\n 'data-position': s.position,\n 'data-hide-align': s.hideAlignment,\n style: s.themeStyles,\n title: PANEL_LABELS.showCli,\n onClick: () => controller.unhide(),\n },\n [\n branding.value.iconUrl\n ? h('img', { src: branding.value.iconUrl, alt: '', class: 'cli-panel-hide-tab-icon cli-panel-brand-icon' })\n : icon(HIDE_TAB_TERMINAL_ICON, 'cli-panel-hide-tab-icon'),\n h('span', { class: 'cli-panel-hide-tab-label' }, branding.value.title),\n icon(hideTabChevronIcon(s.position), 'cli-panel-hide-tab-arrow'),\n ],\n )\n : null,\n h(\n 'div',\n {\n ref: root,\n class: panelWrapperClass(s, props.class),\n style: { ...panelWrapperStyle(s), ...props.style },\n 'data-position': s.position,\n 'data-resizable': String(s.resizable),\n 'data-closable': String(s.closable),\n 'data-hideable': String(s.hideable),\n },\n [\n renderHeader(s),\n s.initialized\n ? h('div', { class: 'cli-panel-content', style: s.collapsed ? { display: 'none' } : undefined }, [\n renderTabs(s),\n renderInstances(s),\n ])\n : null,\n ],\n ),\n s.contextMenu.visible ? renderContextMenu(s) : null,\n renderStatusDropdown(s),\n ]);\n };\n },\n});\n","import { defineComponent, ref, PropType, h, provide } from 'vue';\nimport { 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 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 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 { onMounted, onBeforeUnmount, Ref, shallowRef } from 'vue';\nimport { CliEngine, CreateCliEngineConfig, createCliEngine } from '@qodalis/cli';\n\nexport type UseCliEngineConfig = Omit<CreateCliEngineConfig, 'framework'>;\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 = createCliEngine(containerRef.value, { ...config, framework: 'Vue' });\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","inject","h","onBeforeUnmount","onMounted","resolveCliHostConfig","h","defineComponent","inject","resolveCliHostConfig","onMounted","onBeforeUnmount","defineComponent","ref","h","provide","onMounted","onBeforeUnmount","shallowRef","createCliEngine","defineComponent","ref","provide","h","inject","inject","CliEngine"]}
|
package/dist/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qodalis/vue-cli",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
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
|
|
40
|
-
"@qodalis/cli-core": "2.0
|
|
39
|
+
"@qodalis/cli": "2.1.0",
|
|
40
|
+
"@qodalis/cli-core": "2.1.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"tsup": "^9.0.0",
|