Skip to content

Commit 01ba983

Browse files
authored
feat: basic terminals support (#136)
1 parent d4b7f4d commit 01ba983

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1091
-851
lines changed

eslint.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ export default antfu({
1212
'no-console': 'off',
1313
},
1414
})
15+
.removeRules(
16+
'vue/no-template-shadow',
17+
)

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"@types/ws": "catalog:types",
4545
"@typescript-eslint/utils": "catalog:devtools",
4646
"@unocss/eslint-config": "catalog:devtools",
47+
"@vueuse/core": "catalog:frontend",
4748
"ansis": "catalog:deps",
4849
"bumpp": "catalog:devtools",
4950
"esbuild": "catalog:build",

packages/core/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,19 @@
6262
"debug": "catalog:deps",
6363
"launch-editor": "catalog:deps",
6464
"mlly": "catalog:deps",
65-
"nanoevents": "catalog:deps",
6665
"open": "catalog:deps",
6766
"pathe": "catalog:deps",
6867
"perfect-debounce": "catalog:deps",
6968
"sirv": "catalog:deps",
69+
"tinyexec": "catalog:deps",
7070
"ws": "catalog:deps"
7171
},
7272
"devDependencies": {
7373
"@vitejs/devtools": "workspace:*",
7474
"@vitejs/devtools-vite": "workspace:*",
7575
"@vitejs/plugin-vue": "catalog:build",
76+
"@xterm/addon-fit": "catalog:frontend",
77+
"@xterm/xterm": "catalog:frontend",
7678
"tsdown": "catalog:build",
7779
"typescript": "catalog:devtools",
7880
"unplugin-vue": "catalog:build",

packages/core/playground/vite.config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ export default defineConfig({
102102
launcher: {
103103
title: 'Launcher My Cool App',
104104
onLaunch: async () => {
105+
await ctx.terminals.startChildProcess({
106+
command: 'vite',
107+
args: ['dev'],
108+
cwd: process.cwd(),
109+
}, {
110+
id: 'vite-run',
111+
title: 'Vite Run',
112+
})
105113
await new Promise(resolve => setTimeout(resolve, 1000))
106114

107115
ctx.docks.update({

packages/core/src/client/inject/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import type { DockPanelStorage } from '@vitejs/devtools-kit/client'
55
import { getDevToolsRpcClient } from '@vitejs/devtools-kit/client'
66
import { useLocalStorage } from '@vueuse/core'
7-
import { createDocksContext } from '../webcomponents'
7+
import { createDocksContext } from '../webcomponents/state/context'
88

99
export async function init(): Promise<void> {
1010
// eslint-disable-next-line no-console
@@ -16,7 +16,7 @@ export async function init(): Promise<void> {
1616
// eslint-disable-next-line no-console
1717
console.log('[VITE DEVTOOLS] RPC', rpc)
1818

19-
const rpcFunctions = await rpc.$call('vite:core:list-rpc-functions')
19+
const rpcFunctions = await rpc.$call('vite:internal:rpc:server:list')
2020
// eslint-disable-next-line no-console
2121
console.log('[VITE DEVTOOLS] RPC Functions', rpcFunctions)
2222

packages/core/src/client/standalone/App.vue

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import { markRaw, useTemplateRef } from 'vue'
55
import DockEntries from '../webcomponents/components/DockEntries.vue'
66
import VitePlus from '../webcomponents/components/icons/VitePlus.vue'
77
import ViewEntry from '../webcomponents/components/ViewEntry.vue'
8-
import { createDocksContext } from '../webcomponents/state/dock'
9-
import { useStateHandlers } from '../webcomponents/state/state'
8+
import { createDocksContext } from '../webcomponents/state/context'
109
import { PersistedDomViewsManager } from '../webcomponents/utils/PersistedDomViewsManager'
1110
1211
const rpcReturn = await getDevToolsRpcClient()
@@ -24,8 +23,6 @@ const context: DocksContext = await createDocksContext(
2423
)
2524
2625
context.docks.selectedId ||= context.docks.entries[0]?.id ?? null
27-
28-
const { selectDockEntry } = useStateHandlers(context)
2926
</script>
3027

3128
<template>
@@ -39,7 +36,7 @@ const { selectDockEntry } = useStateHandlers(context)
3936
class="transition duration-200 p2"
4037
:is-vertical="false"
4138
:selected="context.docks.selected"
42-
@select="selectDockEntry"
39+
@select="(e) => context.docks.switchEntry(e?.id)"
4340
/>
4441
</div>
4542
<div>

packages/core/src/client/webcomponents/.generated/css.ts

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/core/src/client/webcomponents/components/Dock.vue

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import type { DocksContext } from '@vitejs/devtools-kit/client'
33
import { useEventListener, useScreenSafeArea } from '@vueuse/core'
44
import { computed, onMounted, reactive, ref, useTemplateRef, watchEffect } from 'vue'
5-
import { useStateHandlers } from '../state/state'
65
import DockEntries from './DockEntries.vue'
76
import BracketLeft from './icons/BracketLeft.vue'
87
import BracketRight from './icons/BracketRight.vue'
@@ -17,7 +16,7 @@ const context = props.context
1716
1817
const isSafari = navigator.userAgent.includes('Safari') && !navigator.userAgent.includes('Chrome')
1918
20-
const PANEL_MARGIN = 5
19+
const PANEL_MARGIN = 2
2120
const panelMargins = reactive({
2221
left: PANEL_MARGIN,
2322
top: PANEL_MARGIN,
@@ -220,8 +219,6 @@ const panelStyle = computed(() => {
220219
return style
221220
})
222221
223-
const { selectDockEntry } = useStateHandlers(context)
224-
225222
onMounted(() => {
226223
bringUp()
227224
recalculateCounter.value++
@@ -277,7 +274,7 @@ onMounted(() => {
277274
:class="isMinimized ? 'opacity-0 pointer-events-none' : 'opacity-100'"
278275
:is-vertical="context.panel.isVertical"
279276
:selected="context.docks.selected"
280-
@select="selectDockEntry"
277+
@select="(e) => context.docks.switchEntry(e?.id)"
281278
/>
282279
</div>
283280
</div>

packages/core/src/client/webcomponents/components/DockEntries.vue

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,15 @@ function toggleDockEntry(dock: DevToolsDockEntry) {
2525

2626
<template>
2727
<div>
28-
<DockEntry
29-
v-for="dock of entries"
30-
:key="dock.id"
31-
:dock
32-
:is-selected="selected?.id === dock.id"
33-
:is-dimmed="selected ? (selected.id !== dock.id) : false"
34-
:is-vertical="isVertical"
35-
@click="toggleDockEntry(dock)"
36-
/>
28+
<template v-for="dock of entries" :key="dock.id">
29+
<DockEntry
30+
v-if="!dock.isHidden"
31+
:dock
32+
:is-selected="selected?.id === dock.id"
33+
:is-dimmed="selected ? (selected.id !== dock.id) : false"
34+
:is-vertical="isVertical"
35+
@click="toggleDockEntry(dock)"
36+
/>
37+
</template>
3738
</div>
3839
</template>

packages/core/src/client/webcomponents/components/DockEntry.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<script setup lang="ts">
2-
import type { DevToolsDockEntry } from '@vitejs/devtools-kit'
2+
import type { DevToolsDockEntryBase } from '@vitejs/devtools-kit'
33
import { useEventListener } from '@vueuse/core'
44
import { useTemplateRef } from 'vue'
55
import { setFloatingTooltip } from '../state/floating-tooltip'
66
import DockIcon from './DockIcon.vue'
77
88
const props = defineProps<{
9-
dock: DevToolsDockEntry
9+
dock: DevToolsDockEntryBase
1010
isSelected?: boolean
1111
isDimmed?: boolean
1212
isVertical?: boolean

0 commit comments

Comments
 (0)