Skip to content

Commit 1a4fff3

Browse files
authored
feat: basic settings page (#164)
1 parent cb63883 commit 1a4fff3

File tree

26 files changed

+516
-108
lines changed

26 files changed

+516
-108
lines changed

alias.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const alias = {
1111
'@vitejs/devtools-rpc/presets': r('rpc/src/presets/index.ts'),
1212
'@vitejs/devtools-rpc': r('rpc/src'),
1313
'@vitejs/devtools-kit/client': r('kit/src/client/index.ts'),
14+
'@vitejs/devtools-kit/constants': r('kit/src/constants.ts'),
1415
'@vitejs/devtools-kit/utils/events': r('kit/src/utils/events.ts'),
1516
'@vitejs/devtools-kit/utils/nanoid': r('kit/src/utils/nanoid.ts'),
1617
'@vitejs/devtools-kit/utils/shared-state': r('kit/src/utils/shared-state.ts'),

packages/core/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"birpc": "catalog:deps",
5959
"birpc-x": "catalog:deps",
6060
"cac": "catalog:deps",
61+
"h3": "catalog:deps",
6162
"immer": "catalog:deps",
6263
"launch-editor": "catalog:deps",
6364
"mlly": "catalog:deps",

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,6 @@ watch(
3535
},
3636
{ immediate: true },
3737
)
38-
39-
function switchEntry(id: string) {
40-
if (id) {
41-
context.docks.switchEntry(id)
42-
}
43-
}
4438
</script>
4539

4640
<template>
@@ -55,10 +49,10 @@ function switchEntry(id: string) {
5549
<div class="transition duration-200 p2">
5650
<DockEntriesWithCategories
5751
:context="context"
58-
:entries="context.docks.entries"
52+
:groups="context.docks.groupedEntries"
5953
:is-vertical="false"
6054
:selected="context.docks.selected"
61-
@select="(e) => switchEntry(e?.id)"
55+
@select="(e) => context.docks.switchEntry(e?.id)"
6256
>
6357
<template #separator>
6458
<div class="border-base border-b w-full my-2" />

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: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ 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'
55
import { BUILTIN_ENTRY_CLIENT_AUTH_NOTICE } from '../constants'
6+
import { docksSplitGroupsWithCapacity } from '../state/dock-settings'
67
import DockEntriesWithCategories from './DockEntriesWithCategories.vue'
78
import DockOverflowButton from './DockOverflowButton.vue'
89
import BracketLeft from './icons/BracketLeft.vue'
@@ -73,7 +74,11 @@ context.rpc.events.on('rpc:is-trusted:updated', (isTrusted) => {
7374
context.docks.switchEntry(null)
7475
})
7576
76-
onMounted(() => {
77+
const splitedEntries = computed(() => {
78+
return docksSplitGroupsWithCapacity(context.docks.groupedEntries, 5)
79+
})
80+
81+
onMounted(async () => {
7782
windowSize.width = window.innerWidth
7883
windowSize.height = window.innerHeight
7984
@@ -312,23 +317,22 @@ onMounted(() => {
312317
>
313318
<DockEntriesWithCategories
314319
:context="context"
315-
:capacity="5"
316-
:entries="context.docks.entries"
320+
:groups="splitedEntries.visible"
317321
:is-vertical="context.panel.isVertical"
318322
:selected="context.docks.selected"
319323
@select="(e) => context.docks.switchEntry(e?.id)"
320-
>
321-
<template #overflow="{ entries }">
322-
<div class="border-base m1 h-20px w-px border-r-1.5" />
323-
<DockOverflowButton
324-
:context="context"
325-
:is-vertical="context.panel.isVertical"
326-
:entries="entries.flatMap(([_, entries]) => entries)"
327-
:selected="context.docks.selected"
328-
@select="(e) => context.docks.switchEntry(e?.id)"
329-
/>
330-
</template>
331-
</DockEntriesWithCategories>
324+
/>
325+
326+
<template v-if="splitedEntries.overflow.length > 0">
327+
<div class="border-base m1 h-20px w-px border-r-1.5" />
328+
<DockOverflowButton
329+
:context="context"
330+
:is-vertical="context.panel.isVertical"
331+
:groups="splitedEntries.overflow"
332+
:selected="context.docks.selected"
333+
@select="(e) => context.docks.switchEntry(e?.id)"
334+
/>
335+
</template>
332336
</div>
333337
</div>
334338
</div>
Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,23 @@
11
<script setup lang="ts">
22
import type { DevToolsDockEntry } from '@vitejs/devtools-kit'
33
import type { DocksContext } from '@vitejs/devtools-kit/client'
4-
import { computed, toRefs } from 'vue'
5-
import { DEFAULT_CATEGORIES_ORDER } from '../constants'
4+
import type { DevToolsDockEntriesGrouped } from '../state/dock-settings'
65
import DockEntries from './DockEntries.vue'
76
8-
const props = defineProps<{
7+
defineProps<{
98
context: DocksContext
10-
entries: DevToolsDockEntry[]
9+
groups: DevToolsDockEntriesGrouped
1110
selected: DevToolsDockEntry | null
12-
capacity?: number
1311
isVertical: boolean
1412
}>()
1513
1614
const emit = defineEmits<{
1715
(e: 'select', entry: DevToolsDockEntry): void
1816
}>()
19-
20-
const { capacity } = toRefs(props)
21-
22-
const groups = computed(() => {
23-
const map = new Map<string, DevToolsDockEntry[]>()
24-
for (const entry of props.entries) {
25-
if (entry.isHidden)
26-
continue
27-
const category = entry.category ?? 'default'
28-
if (!map.has(category))
29-
map.set(category, [])
30-
map.get(category)!.push(entry)
31-
}
32-
33-
const entries = Array
34-
.from(map.entries())
35-
.sort(([a], [b]) => {
36-
const ia = DEFAULT_CATEGORIES_ORDER[a] || 0
37-
const ib = DEFAULT_CATEGORIES_ORDER[b] || 0
38-
return ib === ia ? b.localeCompare(a) : ia - ib
39-
})
40-
41-
entries.forEach(([_, entries]) => {
42-
entries.sort((a, b) => {
43-
const ia = a.defaultOrder ?? 0
44-
const ib = b.defaultOrder ?? 0
45-
return ib === ia ? b.title.localeCompare(a.title) : ia - ib
46-
})
47-
})
48-
49-
let visible = entries
50-
const overflow: typeof entries = []
51-
52-
if (capacity.value != null) {
53-
visible = []
54-
let left = capacity.value
55-
for (const [category, items] of entries) {
56-
if (left <= 0) {
57-
overflow.push([category, items])
58-
}
59-
else if (items.length > left) {
60-
visible.push([category, items.slice(0, left)])
61-
overflow.push([category, items.slice(left)])
62-
left = 0
63-
}
64-
else {
65-
left -= items.length
66-
visible.push([category, items])
67-
}
68-
}
69-
}
70-
71-
return {
72-
entries,
73-
visible,
74-
overflow,
75-
}
76-
})
7717
</script>
7818

7919
<template>
80-
<template v-for="[category, entries], idx of groups.visible" :key="category">
20+
<template v-for="[category, entries], idx of groups" :key="category">
8121
<slot v-if="idx > 0" name="separator" :category="category" :index="idx" :is-vertical="isVertical">
8222
<div class="border-base m1 h-20px w-px border-r-1.5" />
8323
</slot>
@@ -89,5 +29,4 @@ const groups = computed(() => {
8929
@select="(e) => emit('select', e)"
9030
/>
9131
</template>
92-
<slot v-if="groups.overflow.length > 0" name="overflow" :entries="groups.overflow" />
9332
</template>

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
22
import type { DevToolsDockEntry } from '@vitejs/devtools-kit'
33
import type { DocksContext } from '@vitejs/devtools-kit/client'
4+
import type { DevToolsDockEntriesGrouped } from '../state/dock-settings'
45
import { watchDebounced } from '@vueuse/core'
56
import { computed, h, ref, useTemplateRef } from 'vue'
67
import { setDocksOverflowPanel, useDocksOverflowPanel } from '../state/floating-tooltip'
@@ -10,7 +11,7 @@ import DockEntry from './DockEntry.vue'
1011
const props = defineProps<{
1112
context: DocksContext
1213
isVertical: boolean
13-
entries: DevToolsDockEntry[]
14+
groups: DevToolsDockEntriesGrouped
1415
selected: DevToolsDockEntry | null
1516
}>()
1617
@@ -20,7 +21,7 @@ const emit = defineEmits<{
2021
2122
const overflowButton = useTemplateRef<HTMLButtonElement>('overflowButton')
2223
const overflowBadge = computed(() => {
23-
const count = props.entries.length
24+
const count = props.groups.reduce((acc, [_, items]) => acc + items.length, 0)
2425
if (count > 9)
2526
return '9+'
2627
return count.toString()
@@ -39,7 +40,7 @@ function showOverflowPanel() {
3940
}, [
4041
h(DockEntriesWithCategories, {
4142
context: props.context,
42-
entries: props.entries,
43+
groups: props.groups,
4344
isVertical: false,
4445
selected: props.selected,
4546
onSelect: e => emit('select', e),

0 commit comments

Comments
 (0)