Skip to content

Commit fe353ef

Browse files
committed
feat(ui): add sideNav component and composable
1 parent 0bf04d4 commit fe353ef

File tree

6 files changed

+84
-634
lines changed

6 files changed

+84
-634
lines changed

packages/rolldown/src/app/pages/session/[session].vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
import type { ModuleListItem, SessionContext } from '~~/shared/types'
33
import { useRoute, useRouter } from '#app/composables/router'
44
import { useRpc } from '#imports'
5+
import PanelSideNav from '@vitejs/devtools-ui/components/PanelSideNav.vue'
6+
import { useSideNav } from '@vitejs/devtools-ui/composables/nav'
57
import { onKeyDown } from '@vueuse/core'
68
import { computed, onMounted, reactive, ref, shallowRef } from 'vue'
7-
import { useSideNav } from '~/state/nav'
89
import { getFileTypeFromName } from '~/utils/icon'
910
1011
const params = useRoute().params as {

packages/rolldown/src/app/pages/session/[session]/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import type { SessionContext } from '~~/shared/types'
33
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
44
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
55
import DisplayNumberBadge from '@vitejs/devtools-ui/components/DisplayNumberBadge.vue'
6+
import { sideNavItems } from '@vitejs/devtools-ui/composables/nav'
67
import { computed } from 'vue'
7-
import { sideNavItems } from '~~/app/state/nav'
88
99
const props = defineProps<{
1010
session: SessionContext

packages/ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"module": "./src/index.ts",
4646
"peerDependencies": {
4747
"@vueuse/core": "*",
48+
"nuxt": "*",
4849
"unocss": "*",
4950
"vue": "*",
5051
"vue-virtual-scroller": ">=2.0.0-beta.0"

packages/rolldown/src/app/components/panel/SideNav.vue renamed to packages/ui/src/components/PanelSideNav.vue

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,31 @@
11
<script setup lang="ts">
2-
import type { SideNavItem } from '~/state/nav'
2+
import type { SideNavItem } from '../composables/nav'
33
import { NuxtLink } from '#components'
4-
import { toggleDark } from '@vitejs/devtools-ui/composables/dark'
54
import { computed } from 'vue'
6-
import { sideNavItems } from '~/state/nav'
5+
import { toggleDark } from '../composables/dark'
6+
import { sideNavItems } from '../composables/nav'
77
8-
const items = computed<SideNavItem[]>(() => [
9-
...sideNavItems.value,
10-
{
11-
title: 'Toggle dark mode',
12-
icon: 'i-ph-sun-duotone dark:i-ph-moon-duotone',
13-
action: toggleDark,
14-
},
15-
])
8+
const props = withDefaults(defineProps<{
9+
items?: SideNavItem[]
10+
showDarkModeToggle?: boolean
11+
}>(), {
12+
showDarkModeToggle: true,
13+
})
14+
15+
const items = computed<SideNavItem[]>(() => {
16+
const navItems = props.items ?? sideNavItems.value
17+
if (!props.showDarkModeToggle) {
18+
return navItems
19+
}
20+
return [
21+
...navItems,
22+
{
23+
title: 'Toggle dark mode',
24+
icon: 'i-ph-sun-duotone dark:i-ph-moon-duotone',
25+
action: toggleDark,
26+
},
27+
]
28+
})
1629
</script>
1730

1831
<template>
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,28 @@ export interface SideNavItem {
99
action?: () => void
1010
}
1111

12-
let __id = 0
12+
let id = 0
1313
const sideNavItemsMap = reactive(new Map<number, SideNavItem[]>())
1414

1515
export const sideNavItems = computed(() => Array.from(sideNavItemsMap.values()).flat())
1616

1717
export function useSideNav(items: MaybeRefOrGetter<SideNavItem[]>) {
18-
const r = toRef(items)
18+
const itemsRef = toRef(items)
1919

2020
let clear = () => {}
21-
function add(items: SideNavItem[]) {
21+
function add(nextItems: SideNavItem[]) {
2222
clear()
23-
const id = __id++
24-
sideNavItemsMap.set(id, items)
23+
const currentId = id++
24+
sideNavItemsMap.set(currentId, nextItems)
2525
clear = () => {
26-
sideNavItemsMap.delete(id)
26+
sideNavItemsMap.delete(currentId)
2727
}
28-
return id
2928
}
3029

3130
watch(
32-
r,
33-
(items) => {
34-
add(items)
31+
itemsRef,
32+
(nextItems) => {
33+
add(nextItems)
3534
},
3635
{ immediate: true },
3736
)

0 commit comments

Comments
 (0)