@eclipse-docks/extension-terminal 0.7.122 → 0.7.124

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 CHANGED
@@ -9,7 +9,7 @@ extensionRegistry.registerExtension({
9
9
  id: pkg.name,
10
10
  name: t.EXT_TERMINAL_NAME,
11
11
  description: t.EXT_TERMINAL_DESC,
12
- loader: () => import("./terminal-extension-U1ZIJJzf.js"),
12
+ loader: () => import("./terminal-extension-BUc6e5ce.js"),
13
13
  icon: "terminal"
14
14
  });
15
15
  //#endregion
@@ -387,7 +387,7 @@ var DocksTerminalPanel = class DocksTerminalPanel extends DocksPart {
387
387
  <docks-tabs
388
388
  id="${TERMINAL_INSTANCES_TABS_ID}"
389
389
  placement="start"
390
- item-size="small"
390
+ item-size="s"
391
391
  ></docks-tabs>
392
392
  `;
393
393
  }
@@ -436,4 +436,4 @@ async function activate() {
436
436
  //#endregion
437
437
  export { activate as default };
438
438
 
439
- //# sourceMappingURL=terminal-extension-U1ZIJJzf.js.map
439
+ //# sourceMappingURL=terminal-extension-BUc6e5ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-extension-U1ZIJJzf.js","names":[],"sources":["../src/terminal-theme.ts","../src/terminal-view.ts","../src/terminal-panel.ts","../src/terminal-extension.ts"],"sourcesContent":["import type { ITheme } from '@xterm/xterm';\n\nfunction cssVar(name: string, fallback: string): string {\n const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n return value || fallback;\n}\n\nexport function isDarkTheme(): boolean {\n const root = document.documentElement;\n if (root.classList.contains('wa-dark')) return true;\n if (root.classList.contains('wa-light')) return false;\n return true;\n}\n\nexport function getTerminalTheme(): ITheme {\n const dark = isDarkTheme();\n return {\n background: cssVar('--wa-color-surface-lowered', dark ? '#1e1e1e' : '#f3f3f3'),\n foreground: cssVar('--wa-color-text-normal', dark ? '#d4d4d4' : '#1e1e1e'),\n cursor: cssVar('--wa-color-text-normal', dark ? '#d4d4d4' : '#1e1e1e'),\n cursorAccent: cssVar('--wa-color-surface-lowered', dark ? '#1e1e1e' : '#f3f3f3'),\n selectionBackground: cssVar('--wa-color-brand-fill-quiet', dark ? '#264f7840' : '#add6ff80'),\n selectionForeground: cssVar('--wa-color-text-normal', dark ? '#d4d4d4' : '#1e1e1e'),\n black: cssVar('--wa-color-neutral-10', dark ? '#000000' : '#1e1e1e'),\n red: cssVar('--wa-color-danger-fill-loud', '#cd3131'),\n green: cssVar('--wa-color-success-fill-loud', '#0dbc79'),\n yellow: cssVar('--wa-color-warning-fill-loud', '#e5e510'),\n blue: cssVar('--wa-color-brand-fill-loud', '#2472c8'),\n magenta: cssVar('--wa-color-purple-50', '#bc3fbc'),\n cyan: cssVar('--wa-color-cyan-50', '#11a8cd'),\n white: cssVar('--wa-color-neutral-90', dark ? '#e5e5e5' : '#ffffff'),\n brightBlack: cssVar('--wa-color-neutral-50', '#666666'),\n brightRed: cssVar('--wa-color-danger-50', '#f14c4c'),\n brightGreen: cssVar('--wa-color-success-50', '#23d18b'),\n brightYellow: cssVar('--wa-color-warning-50', '#f5f543'),\n brightBlue: cssVar('--wa-color-brand-50', '#3b8eea'),\n brightMagenta: cssVar('--wa-color-purple-40', '#d670d6'),\n brightCyan: cssVar('--wa-color-cyan-40', '#29b8db'),\n brightWhite: cssVar('--wa-color-neutral-95', '#ffffff'),\n };\n}\n\n/** Watches `wa-dark` / `wa-light` on `<html>`, same pattern as docks-monaco-widget. */\nexport function observeTerminalTheme(onChange: () => void): () => void {\n const root = document.documentElement;\n let dark = isDarkTheme();\n\n const observer = new MutationObserver(() => {\n const next = isDarkTheme();\n if (next === dark) return;\n dark = next;\n onChange();\n });\n\n observer.observe(root, { attributes: true, attributeFilter: ['class'] });\n return () => observer.disconnect();\n}\n","import { css, createRef, customElement, html, property, ref, unsafeCSS, type Ref } from '@eclipse-docks/core/externals/lit';\nimport { Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { DocksPart } from '@eclipse-docks/core';\nimport { terminalService } from './terminal-service';\nimport type { TerminalRuntime } from './terminal-api';\nimport { getTerminalTheme, observeTerminalTheme } from './terminal-theme';\nimport xtermStyles from '@xterm/xterm/css/xterm.css?raw';\n\n@customElement('docks-terminal-view')\nexport class DocksTerminalView extends DocksPart {\n protected scrollMode: 'scroller' | 'native' | 'none' = 'none';\n\n @property({ attribute: false })\n terminal?: TerminalRuntime;\n\n private xtermRef: Ref<HTMLDivElement> = createRef();\n private xterm: Terminal | null = null;\n private fitAddon: FitAddon | null = null;\n private unsubscribeWrite: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private tabsHost: Element | null = null;\n private tabPanelName: string | null = null;\n private onTabShow: ((event: Event) => void) | null = null;\n private backendOpened = false;\n private unobserveTheme: (() => void) | null = null;\n\n connectedCallback(): void {\n super.connectedCallback();\n void this.initTerminal();\n }\n\n disconnectedCallback(): void {\n this.teardownTerminal();\n super.disconnectedCallback();\n }\n\n close(): void {\n if (this.terminal) {\n terminalService.handleTabClosed(this.terminal.id);\n }\n this.teardownTerminal();\n }\n\n private findTabContext(): { panelName: string; tabPanel: HTMLElement; tabsHost: Element } | null {\n let panelName: string | null = null;\n let tabPanel: HTMLElement | null = null;\n let tabsHost: Element | null = null;\n let el: Element | null = this;\n\n while (el) {\n const tag = el.tagName?.toLowerCase();\n if (tag === 'wa-tab-panel' && !tabPanel) {\n tabPanel = el as HTMLElement;\n panelName = el.getAttribute('name');\n }\n if (tag === 'docks-tabs') {\n tabsHost = el;\n break;\n }\n const parent: Element | null = el.parentElement;\n if (parent) {\n el = parent;\n } else {\n const root = el.getRootNode();\n el = root instanceof ShadowRoot ? (root.host as Element) : null;\n }\n }\n\n if (!tabsHost || !tabPanel || !panelName) return null;\n return { panelName, tabPanel, tabsHost };\n }\n\n private isTabPanelActive(tabPanel: HTMLElement): boolean {\n return tabPanel.hasAttribute('active');\n }\n\n private attachTabVisibilityHandling(context: {\n panelName: string;\n tabsHost: Element;\n }): void {\n this.tabsHost = context.tabsHost;\n this.tabPanelName = context.panelName;\n this.onTabShow = (event: Event) => {\n const name = (event as CustomEvent<{ name?: string }>).detail?.name;\n if (name !== context.panelName) return;\n this.onTabShown();\n };\n context.tabsHost.addEventListener('wa-tab-show', this.onTabShow);\n }\n\n private detachTabVisibilityHandling(): void {\n if (this.tabsHost && this.onTabShow) {\n this.tabsHost.removeEventListener('wa-tab-show', this.onTabShow);\n }\n this.tabsHost = null;\n this.tabPanelName = null;\n this.onTabShow = null;\n }\n\n private scheduleFit(focus = false): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.applyFit();\n if (focus) this.xterm?.focus();\n });\n });\n }\n\n private async openBackendIfNeeded(): Promise<void> {\n if (this.backendOpened || !this.terminal?.backend) return;\n this.backendOpened = true;\n await this.terminal.backend.open?.(this.getDimensions());\n }\n\n private onTabShown(): void {\n this.scheduleFit(true);\n void this.openBackendIfNeeded();\n }\n\n private async initTerminal(): Promise<void> {\n if (!this.terminal?.backend) return;\n await this.updateComplete;\n\n const container = this.xtermRef.value;\n if (!container) return;\n\n this.xterm = new Terminal({\n cursorBlink: true,\n fontFamily: 'var(--wa-font-mono, monospace)',\n fontSize: 13,\n theme: getTerminalTheme(),\n });\n this.fitAddon = new FitAddon();\n this.xterm.loadAddon(this.fitAddon);\n this.xterm.open(container);\n\n const backend = this.terminal.backend;\n this.unsubscribeWrite = backend.onDidWrite((data) => {\n this.xterm?.write(data);\n });\n\n this.xterm.onData((data) => {\n backend.handleInput(data);\n });\n\n this.terminal.clearScreen = () => {\n this.xterm?.clear();\n };\n\n this.unobserveTheme = observeTerminalTheme(() => {\n if (!this.xterm) return;\n this.xterm.options.theme = getTerminalTheme();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.isVisible()) return;\n this.scheduleFit();\n });\n this.resizeObserver.observe(container);\n this.resizeObserver.observe(this);\n this.observeAncestorResizableGrids(container);\n\n const tabContext = this.findTabContext();\n if (tabContext) {\n this.attachTabVisibilityHandling(tabContext);\n }\n\n if (!tabContext || this.isTabPanelActive(tabContext.tabPanel)) {\n this.scheduleFit(true);\n void this.openBackendIfNeeded();\n }\n }\n\n private observeAncestorResizableGrids(from: Element): void {\n if (!this.resizeObserver) return;\n let el: Element | null = from;\n while (el) {\n if (el.tagName?.toLowerCase() === 'docks-resizable-grid') {\n this.resizeObserver.observe(el);\n }\n const parent: Element | null = el.parentElement;\n if (parent) {\n el = parent;\n } else {\n const root = el.getRootNode();\n el = root instanceof ShadowRoot ? (root.host as Element) : null;\n }\n }\n }\n\n private isVisible(): boolean {\n if (!this.tabPanelName) return true;\n return this.offsetParent !== null;\n }\n\n private applyFit(): void {\n if (!this.fitAddon || !this.xterm || !this.isVisible()) return;\n try {\n this.fitAddon.fit();\n } catch {\n return;\n }\n const dims = this.getDimensions();\n this.terminal?.backend?.setDimensions?.(dims);\n }\n\n private getDimensions(): { cols: number; rows: number } {\n return {\n cols: this.xterm?.cols ?? 80,\n rows: this.xterm?.rows ?? 24,\n };\n }\n\n private teardownTerminal(): void {\n this.detachTabVisibilityHandling();\n this.unobserveTheme?.();\n this.unobserveTheme = null;\n this.backendOpened = false;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.unsubscribeWrite?.();\n this.unsubscribeWrite = null;\n this.xterm?.dispose();\n this.xterm = null;\n this.fitAddon = null;\n }\n\n protected renderContent() {\n return html`<div class=\"terminal-host\" ${ref(this.xtermRef)}></div>`;\n }\n\n static styles = [\n unsafeCSS(xtermStyles),\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n min-height: 0;\n }\n\n .part-shell {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n height: 100%;\n }\n\n .part-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .part-content-inner {\n flex: 1;\n min-height: 0;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .terminal-host {\n flex: 1;\n min-height: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n background: var(--wa-color-surface-lowered);\n padding-left: var(--wa-space-s);\n box-sizing: border-box;\n }\n\n .terminal-host .xterm {\n height: 100%;\n }\n `,\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'docks-terminal-view': DocksTerminalView;\n }\n}\n","import { css, customElement, html } from '@eclipse-docks/core/externals/lit';\nimport {\n DocksPart,\n appSettings,\n promptDialog,\n subscribe,\n unsubscribe,\n} from '@eclipse-docks/core';\nimport {\n TERMINAL_INSTANCES_TABS_ID,\n TERMINAL_NEW_DROPDOWN,\n TERMINAL_PANEL_SETTINGS_KEY,\n TOPIC_TERMINAL_ACTIVE_CHANGED,\n TOPIC_TERMINAL_CLOSED,\n TOPIC_TERMINAL_OPENED,\n type PersistedTerminalState,\n} from './terminal-api';\nimport { emptyTerminalState, parseTerminalState } from './terminal-persistence';\nimport { terminalService, type TerminalTabsHost } from './terminal-service';\nimport './terminal-view';\n\n@customElement('docks-terminal-panel')\nexport class DocksTerminalPanel extends DocksPart {\n protected scrollMode: 'scroller' | 'native' | 'none' = 'none';\n\n private unsubscribeTerminalEvents: (() => void)[] = [];\n\n connectedCallback(): void {\n super.connectedCallback();\n terminalService.setPersistenceHandlers(\n () => this.loadPersistedState(),\n (state) => this.savePersistedState(state)\n );\n for (const topic of [TOPIC_TERMINAL_ACTIVE_CHANGED, TOPIC_TERMINAL_OPENED, TOPIC_TERMINAL_CLOSED]) {\n const token = subscribe(topic, () => this.requestUpdate());\n this.unsubscribeTerminalEvents.push(() => unsubscribe(token));\n }\n this.updateComplete.then(() => {\n this.bindInstanceTabsHost();\n this.attachTabActivationListener();\n void terminalService.restorePersistedTerminals();\n });\n }\n\n private bindInstanceTabsHost(): void {\n const tabs = this.renderRoot.querySelector(\n `docks-tabs#${TERMINAL_INSTANCES_TABS_ID}`\n ) as TerminalTabsHost | null;\n terminalService.setInstanceTabsHost(tabs);\n }\n\n private attachTabActivationListener(): void {\n const tabs = this.renderRoot.querySelector('docks-tabs');\n if (!tabs) return;\n tabs.addEventListener('wa-tab-show', (event: Event) => {\n const name = (event as CustomEvent<{ name?: string }>).detail?.name;\n if (name) terminalService.handleTabActivated(name);\n });\n }\n\n disconnectedCallback(): void {\n for (const off of this.unsubscribeTerminalEvents) off();\n this.unsubscribeTerminalEvents = [];\n terminalService.setInstanceTabsHost(null);\n super.disconnectedCallback();\n }\n\n private async loadPersistedState(): Promise<PersistedTerminalState | null> {\n const raw = await appSettings.getDialogSetting(TERMINAL_PANEL_SETTINGS_KEY);\n return parseTerminalState(raw) ?? emptyTerminalState();\n }\n\n private async savePersistedState(state: PersistedTerminalState): Promise<void> {\n await appSettings.setDialogSetting(TERMINAL_PANEL_SETTINGS_KEY, state);\n }\n\n protected renderToolbar() {\n const hasActive = !!terminalService.activeTerminal;\n return html`\n <docks-command\n icon=\"plus\"\n title=\"New Terminal\"\n dropdown=\"${TERMINAL_NEW_DROPDOWN}\"\n .action=${() => void terminalService.createTerminal()}\n >\n </docks-command>\n <docks-command\n icon=\"xmark\"\n title=\"Kill Terminal\"\n ?disabled=${!hasActive}\n .action=${async () => {\n await terminalService.activeTerminal?.dispose();\n }}\n ></docks-command>\n <docks-command\n icon=\"eraser\"\n title=\"Clear\"\n ?disabled=${!hasActive}\n .action=${() => {\n terminalService.activeTerminal?.clear?.();\n }}\n ></docks-command>\n <docks-command\n icon=\"pen\"\n title=\"Rename\"\n ?disabled=${!hasActive}\n .action=${async () => {\n const active = terminalService.activeTerminal;\n if (!active) return;\n const name = await promptDialog('Terminal name', active.name);\n if (name?.trim()) terminalService.renameActiveTerminal(name.trim());\n }}\n ></docks-command>\n `;\n }\n\n protected renderContent() {\n return html`\n <docks-tabs\n id=\"${TERMINAL_INSTANCES_TABS_ID}\"\n placement=\"start\"\n item-size=\"small\"\n ></docks-tabs>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n min-height: 0;\n }\n\n docks-tabs {\n flex: 1;\n min-height: 0;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'docks-terminal-panel': DocksTerminalPanel;\n }\n}\n","import { html } from '@eclipse-docks/core/externals/lit';\nimport { contributionRegistry, PANEL_BOTTOM, registerAll } from '@eclipse-docks/core';\nimport { VIEW_TERMINAL } from './terminal-api';\nimport { CommandsBackend } from './commands-backend';\nimport { JsReplBackend, JS_REPL_PROFILE_ID } from './js-terminal-backend';\nimport { registerTerminalProfile, terminalService } from './terminal-service';\nimport './terminal-panel';\n\nconst COMMANDS_PROFILE_ID = 'terminal.javascript-shell';\n\nexport default async function activate() {\n registerTerminalProfile({\n id: COMMANDS_PROFILE_ID,\n label: 'Commands',\n icon: 'terminal',\n isDefault: true,\n create: async () => new CommandsBackend(),\n });\n\n registerTerminalProfile({\n id: JS_REPL_PROFILE_ID,\n label: 'JavaScript',\n icon: 'code',\n create: async () => new JsReplBackend(),\n });\n\n contributionRegistry.registerContribution(PANEL_BOTTOM, {\n name: VIEW_TERMINAL,\n label: 'Terminal',\n icon: 'terminal',\n component: (id: string) => html`<docks-terminal-panel id=\"${id}\"></docks-terminal-panel>`,\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"terminal-extension-BUc6e5ce.js","names":[],"sources":["../src/terminal-theme.ts","../src/terminal-view.ts","../src/terminal-panel.ts","../src/terminal-extension.ts"],"sourcesContent":["import type { ITheme } from '@xterm/xterm';\n\nfunction cssVar(name: string, fallback: string): string {\n const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n return value || fallback;\n}\n\nexport function isDarkTheme(): boolean {\n const root = document.documentElement;\n if (root.classList.contains('wa-dark')) return true;\n if (root.classList.contains('wa-light')) return false;\n return true;\n}\n\nexport function getTerminalTheme(): ITheme {\n const dark = isDarkTheme();\n return {\n background: cssVar('--wa-color-surface-lowered', dark ? '#1e1e1e' : '#f3f3f3'),\n foreground: cssVar('--wa-color-text-normal', dark ? '#d4d4d4' : '#1e1e1e'),\n cursor: cssVar('--wa-color-text-normal', dark ? '#d4d4d4' : '#1e1e1e'),\n cursorAccent: cssVar('--wa-color-surface-lowered', dark ? '#1e1e1e' : '#f3f3f3'),\n selectionBackground: cssVar('--wa-color-brand-fill-quiet', dark ? '#264f7840' : '#add6ff80'),\n selectionForeground: cssVar('--wa-color-text-normal', dark ? '#d4d4d4' : '#1e1e1e'),\n black: cssVar('--wa-color-neutral-10', dark ? '#000000' : '#1e1e1e'),\n red: cssVar('--wa-color-danger-fill-loud', '#cd3131'),\n green: cssVar('--wa-color-success-fill-loud', '#0dbc79'),\n yellow: cssVar('--wa-color-warning-fill-loud', '#e5e510'),\n blue: cssVar('--wa-color-brand-fill-loud', '#2472c8'),\n magenta: cssVar('--wa-color-purple-50', '#bc3fbc'),\n cyan: cssVar('--wa-color-cyan-50', '#11a8cd'),\n white: cssVar('--wa-color-neutral-90', dark ? '#e5e5e5' : '#ffffff'),\n brightBlack: cssVar('--wa-color-neutral-50', '#666666'),\n brightRed: cssVar('--wa-color-danger-50', '#f14c4c'),\n brightGreen: cssVar('--wa-color-success-50', '#23d18b'),\n brightYellow: cssVar('--wa-color-warning-50', '#f5f543'),\n brightBlue: cssVar('--wa-color-brand-50', '#3b8eea'),\n brightMagenta: cssVar('--wa-color-purple-40', '#d670d6'),\n brightCyan: cssVar('--wa-color-cyan-40', '#29b8db'),\n brightWhite: cssVar('--wa-color-neutral-95', '#ffffff'),\n };\n}\n\n/** Watches `wa-dark` / `wa-light` on `<html>`, same pattern as docks-monaco-widget. */\nexport function observeTerminalTheme(onChange: () => void): () => void {\n const root = document.documentElement;\n let dark = isDarkTheme();\n\n const observer = new MutationObserver(() => {\n const next = isDarkTheme();\n if (next === dark) return;\n dark = next;\n onChange();\n });\n\n observer.observe(root, { attributes: true, attributeFilter: ['class'] });\n return () => observer.disconnect();\n}\n","import { css, createRef, customElement, html, property, ref, unsafeCSS, type Ref } from '@eclipse-docks/core/externals/lit';\nimport { Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { DocksPart } from '@eclipse-docks/core';\nimport { terminalService } from './terminal-service';\nimport type { TerminalRuntime } from './terminal-api';\nimport { getTerminalTheme, observeTerminalTheme } from './terminal-theme';\nimport xtermStyles from '@xterm/xterm/css/xterm.css?raw';\n\n@customElement('docks-terminal-view')\nexport class DocksTerminalView extends DocksPart {\n protected scrollMode: 'scroller' | 'native' | 'none' = 'none';\n\n @property({ attribute: false })\n terminal?: TerminalRuntime;\n\n private xtermRef: Ref<HTMLDivElement> = createRef();\n private xterm: Terminal | null = null;\n private fitAddon: FitAddon | null = null;\n private unsubscribeWrite: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private tabsHost: Element | null = null;\n private tabPanelName: string | null = null;\n private onTabShow: ((event: Event) => void) | null = null;\n private backendOpened = false;\n private unobserveTheme: (() => void) | null = null;\n\n connectedCallback(): void {\n super.connectedCallback();\n void this.initTerminal();\n }\n\n disconnectedCallback(): void {\n this.teardownTerminal();\n super.disconnectedCallback();\n }\n\n close(): void {\n if (this.terminal) {\n terminalService.handleTabClosed(this.terminal.id);\n }\n this.teardownTerminal();\n }\n\n private findTabContext(): { panelName: string; tabPanel: HTMLElement; tabsHost: Element } | null {\n let panelName: string | null = null;\n let tabPanel: HTMLElement | null = null;\n let tabsHost: Element | null = null;\n let el: Element | null = this;\n\n while (el) {\n const tag = el.tagName?.toLowerCase();\n if (tag === 'wa-tab-panel' && !tabPanel) {\n tabPanel = el as HTMLElement;\n panelName = el.getAttribute('name');\n }\n if (tag === 'docks-tabs') {\n tabsHost = el;\n break;\n }\n const parent: Element | null = el.parentElement;\n if (parent) {\n el = parent;\n } else {\n const root = el.getRootNode();\n el = root instanceof ShadowRoot ? (root.host as Element) : null;\n }\n }\n\n if (!tabsHost || !tabPanel || !panelName) return null;\n return { panelName, tabPanel, tabsHost };\n }\n\n private isTabPanelActive(tabPanel: HTMLElement): boolean {\n return tabPanel.hasAttribute('active');\n }\n\n private attachTabVisibilityHandling(context: {\n panelName: string;\n tabsHost: Element;\n }): void {\n this.tabsHost = context.tabsHost;\n this.tabPanelName = context.panelName;\n this.onTabShow = (event: Event) => {\n const name = (event as CustomEvent<{ name?: string }>).detail?.name;\n if (name !== context.panelName) return;\n this.onTabShown();\n };\n context.tabsHost.addEventListener('wa-tab-show', this.onTabShow);\n }\n\n private detachTabVisibilityHandling(): void {\n if (this.tabsHost && this.onTabShow) {\n this.tabsHost.removeEventListener('wa-tab-show', this.onTabShow);\n }\n this.tabsHost = null;\n this.tabPanelName = null;\n this.onTabShow = null;\n }\n\n private scheduleFit(focus = false): void {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.applyFit();\n if (focus) this.xterm?.focus();\n });\n });\n }\n\n private async openBackendIfNeeded(): Promise<void> {\n if (this.backendOpened || !this.terminal?.backend) return;\n this.backendOpened = true;\n await this.terminal.backend.open?.(this.getDimensions());\n }\n\n private onTabShown(): void {\n this.scheduleFit(true);\n void this.openBackendIfNeeded();\n }\n\n private async initTerminal(): Promise<void> {\n if (!this.terminal?.backend) return;\n await this.updateComplete;\n\n const container = this.xtermRef.value;\n if (!container) return;\n\n this.xterm = new Terminal({\n cursorBlink: true,\n fontFamily: 'var(--wa-font-mono, monospace)',\n fontSize: 13,\n theme: getTerminalTheme(),\n });\n this.fitAddon = new FitAddon();\n this.xterm.loadAddon(this.fitAddon);\n this.xterm.open(container);\n\n const backend = this.terminal.backend;\n this.unsubscribeWrite = backend.onDidWrite((data) => {\n this.xterm?.write(data);\n });\n\n this.xterm.onData((data) => {\n backend.handleInput(data);\n });\n\n this.terminal.clearScreen = () => {\n this.xterm?.clear();\n };\n\n this.unobserveTheme = observeTerminalTheme(() => {\n if (!this.xterm) return;\n this.xterm.options.theme = getTerminalTheme();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n if (!this.isVisible()) return;\n this.scheduleFit();\n });\n this.resizeObserver.observe(container);\n this.resizeObserver.observe(this);\n this.observeAncestorResizableGrids(container);\n\n const tabContext = this.findTabContext();\n if (tabContext) {\n this.attachTabVisibilityHandling(tabContext);\n }\n\n if (!tabContext || this.isTabPanelActive(tabContext.tabPanel)) {\n this.scheduleFit(true);\n void this.openBackendIfNeeded();\n }\n }\n\n private observeAncestorResizableGrids(from: Element): void {\n if (!this.resizeObserver) return;\n let el: Element | null = from;\n while (el) {\n if (el.tagName?.toLowerCase() === 'docks-resizable-grid') {\n this.resizeObserver.observe(el);\n }\n const parent: Element | null = el.parentElement;\n if (parent) {\n el = parent;\n } else {\n const root = el.getRootNode();\n el = root instanceof ShadowRoot ? (root.host as Element) : null;\n }\n }\n }\n\n private isVisible(): boolean {\n if (!this.tabPanelName) return true;\n return this.offsetParent !== null;\n }\n\n private applyFit(): void {\n if (!this.fitAddon || !this.xterm || !this.isVisible()) return;\n try {\n this.fitAddon.fit();\n } catch {\n return;\n }\n const dims = this.getDimensions();\n this.terminal?.backend?.setDimensions?.(dims);\n }\n\n private getDimensions(): { cols: number; rows: number } {\n return {\n cols: this.xterm?.cols ?? 80,\n rows: this.xterm?.rows ?? 24,\n };\n }\n\n private teardownTerminal(): void {\n this.detachTabVisibilityHandling();\n this.unobserveTheme?.();\n this.unobserveTheme = null;\n this.backendOpened = false;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.unsubscribeWrite?.();\n this.unsubscribeWrite = null;\n this.xterm?.dispose();\n this.xterm = null;\n this.fitAddon = null;\n }\n\n protected renderContent() {\n return html`<div class=\"terminal-host\" ${ref(this.xtermRef)}></div>`;\n }\n\n static styles = [\n unsafeCSS(xtermStyles),\n css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n min-height: 0;\n }\n\n .part-shell {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n height: 100%;\n }\n\n .part-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n\n .part-content-inner {\n flex: 1;\n min-height: 0;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .terminal-host {\n flex: 1;\n min-height: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n background: var(--wa-color-surface-lowered);\n padding-left: var(--wa-space-s);\n box-sizing: border-box;\n }\n\n .terminal-host .xterm {\n height: 100%;\n }\n `,\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'docks-terminal-view': DocksTerminalView;\n }\n}\n","import { css, customElement, html } from '@eclipse-docks/core/externals/lit';\nimport {\n DocksPart,\n appSettings,\n promptDialog,\n subscribe,\n unsubscribe,\n} from '@eclipse-docks/core';\nimport {\n TERMINAL_INSTANCES_TABS_ID,\n TERMINAL_NEW_DROPDOWN,\n TERMINAL_PANEL_SETTINGS_KEY,\n TOPIC_TERMINAL_ACTIVE_CHANGED,\n TOPIC_TERMINAL_CLOSED,\n TOPIC_TERMINAL_OPENED,\n type PersistedTerminalState,\n} from './terminal-api';\nimport { emptyTerminalState, parseTerminalState } from './terminal-persistence';\nimport { terminalService, type TerminalTabsHost } from './terminal-service';\nimport './terminal-view';\n\n@customElement('docks-terminal-panel')\nexport class DocksTerminalPanel extends DocksPart {\n protected scrollMode: 'scroller' | 'native' | 'none' = 'none';\n\n private unsubscribeTerminalEvents: (() => void)[] = [];\n\n connectedCallback(): void {\n super.connectedCallback();\n terminalService.setPersistenceHandlers(\n () => this.loadPersistedState(),\n (state) => this.savePersistedState(state)\n );\n for (const topic of [TOPIC_TERMINAL_ACTIVE_CHANGED, TOPIC_TERMINAL_OPENED, TOPIC_TERMINAL_CLOSED]) {\n const token = subscribe(topic, () => this.requestUpdate());\n this.unsubscribeTerminalEvents.push(() => unsubscribe(token));\n }\n this.updateComplete.then(() => {\n this.bindInstanceTabsHost();\n this.attachTabActivationListener();\n void terminalService.restorePersistedTerminals();\n });\n }\n\n private bindInstanceTabsHost(): void {\n const tabs = this.renderRoot.querySelector(\n `docks-tabs#${TERMINAL_INSTANCES_TABS_ID}`\n ) as TerminalTabsHost | null;\n terminalService.setInstanceTabsHost(tabs);\n }\n\n private attachTabActivationListener(): void {\n const tabs = this.renderRoot.querySelector('docks-tabs');\n if (!tabs) return;\n tabs.addEventListener('wa-tab-show', (event: Event) => {\n const name = (event as CustomEvent<{ name?: string }>).detail?.name;\n if (name) terminalService.handleTabActivated(name);\n });\n }\n\n disconnectedCallback(): void {\n for (const off of this.unsubscribeTerminalEvents) off();\n this.unsubscribeTerminalEvents = [];\n terminalService.setInstanceTabsHost(null);\n super.disconnectedCallback();\n }\n\n private async loadPersistedState(): Promise<PersistedTerminalState | null> {\n const raw = await appSettings.getDialogSetting(TERMINAL_PANEL_SETTINGS_KEY);\n return parseTerminalState(raw) ?? emptyTerminalState();\n }\n\n private async savePersistedState(state: PersistedTerminalState): Promise<void> {\n await appSettings.setDialogSetting(TERMINAL_PANEL_SETTINGS_KEY, state);\n }\n\n protected renderToolbar() {\n const hasActive = !!terminalService.activeTerminal;\n return html`\n <docks-command\n icon=\"plus\"\n title=\"New Terminal\"\n dropdown=\"${TERMINAL_NEW_DROPDOWN}\"\n .action=${() => void terminalService.createTerminal()}\n >\n </docks-command>\n <docks-command\n icon=\"xmark\"\n title=\"Kill Terminal\"\n ?disabled=${!hasActive}\n .action=${async () => {\n await terminalService.activeTerminal?.dispose();\n }}\n ></docks-command>\n <docks-command\n icon=\"eraser\"\n title=\"Clear\"\n ?disabled=${!hasActive}\n .action=${() => {\n terminalService.activeTerminal?.clear?.();\n }}\n ></docks-command>\n <docks-command\n icon=\"pen\"\n title=\"Rename\"\n ?disabled=${!hasActive}\n .action=${async () => {\n const active = terminalService.activeTerminal;\n if (!active) return;\n const name = await promptDialog('Terminal name', active.name);\n if (name?.trim()) terminalService.renameActiveTerminal(name.trim());\n }}\n ></docks-command>\n `;\n }\n\n protected renderContent() {\n return html`\n <docks-tabs\n id=\"${TERMINAL_INSTANCES_TABS_ID}\"\n placement=\"start\"\n item-size=\"s\"\n ></docks-tabs>\n `;\n }\n\n static styles = css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n min-height: 0;\n }\n\n docks-tabs {\n flex: 1;\n min-height: 0;\n }\n `;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'docks-terminal-panel': DocksTerminalPanel;\n }\n}\n","import { html } from '@eclipse-docks/core/externals/lit';\nimport { contributionRegistry, PANEL_BOTTOM, registerAll } from '@eclipse-docks/core';\nimport { VIEW_TERMINAL } from './terminal-api';\nimport { CommandsBackend } from './commands-backend';\nimport { JsReplBackend, JS_REPL_PROFILE_ID } from './js-terminal-backend';\nimport { registerTerminalProfile, terminalService } from './terminal-service';\nimport './terminal-panel';\n\nconst COMMANDS_PROFILE_ID = 'terminal.javascript-shell';\n\nexport default async function activate() {\n registerTerminalProfile({\n id: COMMANDS_PROFILE_ID,\n label: 'Commands',\n icon: 'terminal',\n isDefault: true,\n create: async () => new CommandsBackend(),\n });\n\n registerTerminalProfile({\n id: JS_REPL_PROFILE_ID,\n label: 'JavaScript',\n icon: 'code',\n create: async () => new JsReplBackend(),\n });\n\n contributionRegistry.registerContribution(PANEL_BOTTOM, {\n name: VIEW_TERMINAL,\n label: 'Terminal',\n icon: 'terminal',\n component: (id: string) => html`<docks-terminal-panel id=\"${id}\"></docks-terminal-panel>`,\n });\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-docks/extension-terminal",
3
- "version": "0.7.122",
3
+ "version": "0.7.124",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",