Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions alias.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export const alias = {
'@vitejs/devtools-ui/unocss': r('ui/src/unocss/index.ts'),
'@vitejs/devtools-ui/components': r('ui/src/components'),
'@vitejs/devtools-ui/composables': r('ui/src/composables'),
'@vitejs/devtools-ui/utils': r('ui/src/utils'),
}

// update tsconfig.base.json
Expand Down
7 changes: 6 additions & 1 deletion packages/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,18 @@
"./composables/*": {
"types": "./src/composables/*.ts",
"import": "./src/composables/*.ts"
},
"./utils/*": {
"types": "./src/utils/*.ts",
"import": "./src/utils/*.ts"
}
},
"main": "./src/index.ts",
"module": "./src/index.ts",
"peerDependencies": {
"@vueuse/core": "*",
"unocss": "*",
"vue": "*"
"vue": "*",
"vue-virtual-scroller": ">=2.0.0-beta.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { computed } from 'vue'
import {
getHashColorFromString,
getHsla,
} from '~/utils/color'
} from '../utils/color'
const props = withDefaults(
defineProps<{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup lang="ts">
import { computed } from 'vue'
import { formatDuration } from '~/utils/format'
import { formatDuration } from '../utils/format'
import DisplayNumberWithUnit from './DisplayNumberWithUnit.vue'
const props = withDefaults(
defineProps<{
Expand Down
36 changes: 36 additions & 0 deletions packages/ui/src/utils/__tests__/color.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { isDark } from '@vitejs/devtools-ui/composables/dark'
import { beforeEach, describe, expect, it } from 'vitest'
import { getHashColorFromString, getHsla } from '../color'

describe('getHashColorFromString', () => {
it('should get the same color with the same string', () => {
expect(getHashColorFromString('Vite')).toBe(getHashColorFromString('Vite'))
})
it('should get different colors with different strings', () => {
expect(getHashColorFromString('Vite')).not.toBe(getHashColorFromString('DevTools'))
})
})

describe('getHsla', () => {
beforeEach(() => {
isDark.value = false
})

it('light mode with default opacity', () => {
expect(getHsla(180)).toBe('hsla(180, 65%, 40%, 1)')
})

it('light mode with custom opacity', () => {
expect(getHsla(180, 0.5)).toBe('hsla(180, 65%, 40%, 0.5)')
})

it('dark mode with default opacity', () => {
isDark.value = true
expect(getHsla(180)).toBe('hsla(180, 50%, 60%, 1)')
})

it('dark mode with custom opacity', () => {
isDark.value = true
expect(getHsla(180, 0.8)).toBe('hsla(180, 50%, 60%, 0.8)')
})
})
21 changes: 21 additions & 0 deletions packages/ui/src/utils/color.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { isDark } from '../composables/dark'

export function getHashColorFromString(
name: string,
opacity: number | string = 1,
) {
let hash = 0
for (let i = 0; i < name.length; i++)
hash = name.charCodeAt(i) + ((hash << 5) - hash)
const h = hash % 360
return getHsla(h, opacity)
}

export function getHsla(
hue: number,
opacity: number | string = 1,
) {
const saturation = isDark.value ? 50 : 65
const lightness = isDark.value ? 60 : 40
return `hsla(${hue}, ${saturation}%, ${lightness}%, ${opacity})`
}
19 changes: 19 additions & 0 deletions packages/ui/src/utils/format.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
export function formatDuration(ms: number | null | undefined): string[]
export function formatDuration(ms: number | null | undefined, stringify: true): string
export function formatDuration(ms: number | null | undefined, stringify: false): string[]
export function formatDuration(ms: number | null | undefined, stringify?: boolean): string | string[] {
let duration = []

if (ms == null)
duration = ['', '-']
else if (ms < 1)
duration = ['<1', 'ms']
else if (ms < 1000)
duration = [ms.toFixed(0), 'ms']
else if (ms < 1000 * 60)
duration = [(ms / 1000).toFixed(1), 's']
else
duration = [(ms / 1000 / 60).toFixed(1), 'min']

return stringify ? duration.join(' ') : duration
}
1 change: 1 addition & 0 deletions packages/vite/src/app/components/assets/BaseInfo.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { RolldownAssetInfo } from '~~/shared/types'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
defineProps<{
asset: RolldownAssetInfo
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/assets/List.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { RolldownAssetInfo } from '~~/shared/types'
import DataVirtualList from '@vitejs/devtools-ui/components/DataVirtualList.vue'
defineProps<{
assets: RolldownAssetInfo[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import type {
RolldownResolveInfo,
SessionContext,
} from '~~/shared/types'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import { Flamegraph, normalizeTreeNode } from 'nanovis'
import { computed, nextTick, onMounted, onUnmounted, ref, shallowRef, useTemplateRef, watch } from 'vue'
import { normalizeTimestamp } from '~/utils/format'
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/chunks/BaseInfo.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import type { RolldownChunkImport, RolldownChunkInfo } from '~~/shared/types/data'
import { useRoute } from '#app/composables/router'
import { NuxtLink } from '#components'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import { computed } from 'vue'

const props = withDefaults(defineProps<{
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/app/components/chunks/FlatList.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<script setup lang="ts">
import type { RolldownChunkInfo, SessionContext } from '~~/shared/types'
import DataVirtualList from '@vitejs/devtools-ui/components/DataVirtualList.vue'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
withDefaults(defineProps<{
chunks: Array<RolldownChunkInfo & { id: string }>
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/chunks/Graph.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { ChunkImport } from '@rolldown/debug'
import type { RolldownChunkInfo, SessionContext } from '~~/shared/types/data'
import type { ModuleGraphLink, ModuleGraphNode } from '~/composables/module-graph'
import { useRoute } from '#app/composables/router'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import { computed, nextTick, unref } from 'vue'
import { createModuleGraph } from '~/composables/module-graph'

Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/chunks/Imports.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script lang="ts" setup>
import type { RolldownChunkImport } from '~~/shared/types/data'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
defineProps<{
imports: RolldownChunkImport[]
Expand Down
3 changes: 3 additions & 0 deletions packages/vite/src/app/components/data/AssetDetails.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
import type { RolldownAssetInfo, RolldownChunkInfo, SessionContext } from '~~/shared/types'
import { useRoute } from '#app/composables/router'
import { useRpc } from '#imports'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import DisplayIconButton from '@vitejs/devtools-ui/components/DisplayIconButton.vue'
import { useAsyncState } from '@vueuse/core'
import { computed, ref } from 'vue'
import { settings } from '~~/app/state/settings'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup lang="ts">
import type { RolldownAssetInfo, RolldownChunkInfo, SessionContext } from '~~/shared/types'
import { useRpc } from '#imports'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import { useAsyncState } from '@vueuse/core'

const props = defineProps<{
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/data/ChunkDetails.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import type { RolldownChunkImport, RolldownChunkInfo, SessionContext } from '~~/shared/types'
import { useRoute } from '#app/composables/router'
import { useRpc } from '#imports'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import VisualLoading from '@vitejs/devtools-ui/components/VisualLoading.vue'
import { useAsyncState } from '@vueuse/core'
import { computed } from 'vue'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup lang="ts">
import type { SessionContext } from '~~/shared/types/data'
import { useRpc } from '#imports'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import VisualLoading from '@vitejs/devtools-ui/components/VisualLoading.vue'
import { useAsyncState } from '@vueuse/core'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup lang="ts">
import type { ModuleInfo, RolldownModuleTransformInfo, SessionContext } from '~~/shared/types'
import { useRpc } from '#imports'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import VisualLoading from '@vitejs/devtools-ui/components/VisualLoading.vue'
import { computedAsync } from '@vueuse/core'
import { nextTick, ref, watchEffect } from 'vue'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<script setup lang="ts">
import type { SessionContext } from '~~/shared/types/data'
import { useRpc } from '#imports'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import VisualLoading from '@vitejs/devtools-ui/components/VisualLoading.vue'
import { useAsyncState } from '@vueuse/core'
import { computed } from 'vue'
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/data/PathSelector.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup lang="ts" generic="T extends { id:string, imports: Record<string, unknown>[] }">
import type { SessionContext } from '~~/shared/types'
import type { GraphPathSelector } from '~/composables/graph-path-selector'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import { computed, watch } from 'vue'
import { useGraphPathSelector } from '~/composables/graph-path-selector'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ import type { PluginBuildInfo, SessionContext } from '~~/shared/types'
import type { PluginChartInfo, PluginChartNode } from '~/types/chart'
import { useRoute } from '#app/composables/router'
import { useRpc } from '#imports'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import DisplayNumberBadge from '@vitejs/devtools-ui/components/DisplayNumberBadge.vue'
import VisualLoading from '@vitejs/devtools-ui/components/VisualLoading.vue'
import { formatDuration } from '@vitejs/devtools-ui/utils/format'
import { useAsyncState, useMouse } from '@vueuse/core'
import { normalizeTreeNode, Sunburst } from 'nanovis'
import { computed, reactive, watch } from 'vue'
import { settings } from '~~/app/state/settings'
import { useChartGraph } from '~/composables/chart'
import { parseReadablePath } from '~/utils/filepath'
import { formatDuration, normalizeTimestamp } from '~/utils/format'
import { normalizeTimestamp } from '~/utils/format'
import { getFileTypeFromModuleId, ModuleTypeRules } from '~/utils/icon'

const props = defineProps<{
Expand Down
3 changes: 3 additions & 0 deletions packages/vite/src/app/components/data/PluginDetailsTable.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<script setup lang="ts">
import type { RolldownPluginBuildMetrics, SessionContext } from '~~/shared/types/data'
import type { FilterMatchRule } from '~/utils/icon'
import DataVirtualList from '@vitejs/devtools-ui/components/DataVirtualList.vue'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import { useCycleList } from '@vueuse/core'
import { Menu as VMenu } from 'floating-vue'
import { computed, ref } from 'vue'
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/app/components/data/RawEventsTable.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<script setup lang="ts">
import type { RolldownEvent } from '~~/node/rolldown/events-manager'
import type { SessionContext } from '~~/shared/types'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import DisplayTimestamp from '@vitejs/devtools-ui/components/DisplayTimestamp.vue'
import { Dropdown as VDropdown } from 'floating-vue'

type FIELDS = 'module_id' | 'action' | 'content' | 'timestamp' | 'event_id' | 'plugin_name' | '*'
Expand Down
2 changes: 1 addition & 1 deletion packages/vite/src/app/components/display/ClusterBadge.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script setup lang="ts">
import { getHashColorFromString } from '@vitejs/devtools-ui/utils/color'
import { Tooltip } from 'floating-vue'
import { computed } from 'vue'
import { getHashColorFromString } from '~/utils/color'
const props = defineProps<{
cluster: string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<script setup lang="ts" generic="T">
import DisplayNumberBadge from '@vitejs/devtools-ui/components/DisplayNumberBadge.vue'
import { computed } from 'vue'
const props = defineProps<{
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/display/ModuleId.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type { ModuleImport } from '@rolldown/debug'
import type { SessionContext } from '~~/shared/types'
import { useRoute } from '#app/composables/router'
import { NuxtLink } from '#components'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import { Tooltip } from 'floating-vue'
import { relative } from 'pathe'
import { computed } from 'vue'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<script setup lang="ts">
import type { RolldownChunkInfo, RolldownModuleFlowNode, SessionContext } from '~~/shared/types'
import DisplayCloseButton from '@vitejs/devtools-ui/components/DisplayCloseButton.vue'
import DisplayIconButton from '@vitejs/devtools-ui/components/DisplayIconButton.vue'
import { computed } from 'vue'
import { settings } from '~~/app/state/settings'
import PluginName from '../display/PluginName.vue'
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/flowmap/NodeAssetInfo.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { RolldownAssetInfo, SessionContext } from '~~/shared/types'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
defineProps<{
item: RolldownAssetInfo
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/flowmap/NodeChunkInfo.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { RolldownChunkInfo, SessionContext } from '~~/shared/types'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
defineProps<{
item: RolldownChunkInfo
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { RolldownModuleFlowNode, SessionContext } from '~~/shared/types'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import { computed } from 'vue'
import { isFlowmapSwapping } from '~/state/flowmap'
Expand Down
4 changes: 3 additions & 1 deletion packages/vite/src/app/components/flowmap/NodePluginInfo.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<script setup lang="ts">
import { formatDuration } from '~/utils/format'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import DisplayNumberBadge from '@vitejs/devtools-ui/components/DisplayNumberBadge.vue'
import { formatDuration } from '@vitejs/devtools-ui/utils/format'
defineProps<{
modules: number
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/app/components/flowmap/PluginFlow.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<script setup lang="ts">
import type { ClientSettings } from '~~/app/state/settings'
import type { RolldownPluginBuildMetrics, SessionContext } from '~~/shared/types/data'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import DisplayNumberBadge from '@vitejs/devtools-ui/components/DisplayNumberBadge.vue'
import { useCycleList, useToggle } from '@vueuse/core'
import { computed, ref, watch } from 'vue'
import { settings } from '~~/app/state/settings'
Expand Down
3 changes: 2 additions & 1 deletion packages/vite/src/app/components/modules/BuildMetrics.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<script setup lang="ts">
import type { ModuleBuildMetrics } from '~~/shared/types'
import DisplayDuration from '@vitejs/devtools-ui/components/DisplayDuration.vue'
import { formatDuration } from '@vitejs/devtools-ui/utils/format'
import { computed } from 'vue'
import { formatDuration } from '~/utils/format'

const props = defineProps<{
metrics: ModuleBuildMetrics
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/modules/DetailedList.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { ModuleListItem, SessionContext } from '~~/shared/types'
import DataVirtualList from '@vitejs/devtools-ui/components/DataVirtualList.vue'
import { computed } from 'vue'
const props = defineProps<{
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/modules/FlatList.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { ModuleListItem, SessionContext } from '~~/shared/types'
import DataVirtualList from '@vitejs/devtools-ui/components/DataVirtualList.vue'
withDefaults(defineProps<{
session: SessionContext
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/packages/Importers.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { PackageInfo, SessionContext } from '~~/shared/types/data'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import { computed } from 'vue'
const props = defineProps<{
Expand Down
1 change: 1 addition & 0 deletions packages/vite/src/app/components/packages/Table.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<script setup lang="ts">
import type { PackageInfo, SessionContext } from '~~/shared/types'
import { useRoute } from '#app/composables/router'
import DataVirtualList from '@vitejs/devtools-ui/components/DataVirtualList.vue'
import { useCycleList } from '@vueuse/core'
import { Tooltip, Menu as VMenu } from 'floating-vue'
import { settings } from '~~/app/state/settings'
Expand Down
2 changes: 2 additions & 0 deletions packages/vite/src/app/components/panel/SessionSelector.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<script setup lang="ts">
import type { BuildInfo } from '~~/node/rolldown/logs-manager'
import { NuxtLink } from '#components'
import DisplayBadge from '@vitejs/devtools-ui/components/DisplayBadge.vue'
import DisplayTimestamp from '@vitejs/devtools-ui/components/DisplayTimestamp.vue'
import { computed } from 'vue'
import { parseReadablePath } from '~/utils/filepath'
Expand Down
Loading
Loading