Adds on mouse over effect for stats (#1914)

This commit is contained in:
Amir Raminfar
2022-10-18 15:29:19 -07:00
committed by GitHub
parent 20425bf6b1
commit 21fc2ce2fd
9 changed files with 212 additions and 175 deletions

View File

@@ -250,6 +250,7 @@ declare global {
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
const useShare: typeof import('@vueuse/core')['useShare']
const useSlots: typeof import('vue')['useSlots']
const useSorted: typeof import('@vueuse/core')['useSorted']
const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition']
const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis']
const useStepper: typeof import('@vueuse/core')['useStepper']
@@ -558,6 +559,7 @@ declare module '@vue/runtime-core' {
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']>
readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']>
readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']>

View File

@@ -13,6 +13,7 @@ declare module '@vue/runtime-core' {
ComplexLogItem: typeof import('./components/LogViewer/ComplexLogItem.vue')['default']
ContainerStat: typeof import('./components/LogViewer/ContainerStat.vue')['default']
ContainerTitle: typeof import('./components/LogViewer/ContainerTitle.vue')['default']
copy: typeof import('./components/LogViewer/ContainerStat copy.vue')['default']
CpuSparkline: typeof import('./components/StatSparkline.vue')['default']
DockerEventLogItem: typeof import('./components/LogViewer/DockerEventLogItem.vue')['default']
DropdownMenu: typeof import('./components/DropdownMenu.vue')['default']
@@ -45,6 +46,7 @@ declare module '@vue/runtime-core' {
SideMenu: typeof import('./components/SideMenu.vue')['default']
SimpleLogItem: typeof import('./components/LogViewer/SimpleLogItem.vue')['default']
SkippedEntriesLogItem: typeof import('./components/LogViewer/SkippedEntriesLogItem.vue')['default']
StatMonitor: typeof import('./components/LogViewer/StatMonitor.vue')['default']
StatSparkline: typeof import('./components/LogViewer/StatSparkline.vue')['default']
ZigZag: typeof import('./components/LogViewer/ZigZag.vue')['default']
}

View File

@@ -1,30 +1,17 @@
<template>
<div class="is-size-7 is-uppercase columns is-marginless is-mobile is-vcentered" v-if="container.stat">
<div class="column is-narrow has-text-weight-bold">
{{ container.state }}
</div>
<div class="column is-narrow has-text-centered is-relative">
<div class="has-border">
<stat-sparkline :data="memoryData"></stat-sparkline>
</div>
<div class="has-background-body-color is-top-left">
<span class="has-text-weight-light has-spacer">mem</span>
<span class="has-text-weight-bold">
{{ formatBytes(container.stat.memoryUsage) }}
</span>
</div>
</div>
<div class="column is-narrow has-text-centered is-relative">
<div class="has-border">
<stat-sparkline :data="cpuData"></stat-sparkline>
</div>
<div class="has-background-body-color is-top-left">
<span class="has-text-weight-light has-spacer">load</span>
<span class="has-text-weight-bold"> {{ container.stat.cpu }}% </span>
</div>
</div>
<stat-monitor
class="column is-narrow"
:data="memoryData"
label="mem"
:stat-value="formatBytes(container.stat.memoryUsage)"
></stat-monitor>
<stat-monitor
class="column is-narrow"
:data="cpuData"
label="load"
:stat-value="container.stat.cpu + '%'"
></stat-monitor>
</div>
</template>
@@ -38,7 +25,12 @@ const cpuData = computedWithControl(
() => container.value.getLastStat(),
() => {
const history = container.value.getStatHistory();
return history.map((stat, i) => ({ x: history.length - i, y: stat.snapshot.cpu }));
const points: Point<unknown>[] = history.map((stat, i) => ({
x: i,
y: stat.snapshot.cpu,
value: stat.snapshot.cpu + "%",
}));
return points;
}
);
@@ -46,7 +38,12 @@ const memoryData = computedWithControl(
() => container.value.getLastStat(),
() => {
const history = container.value.getStatHistory();
return history.map((stat, i) => ({ x: history.length - i, y: stat.snapshot.memory }));
const points: Point<string>[] = history.map((stat, i) => ({
x: i,
y: stat.snapshot.memory,
value: formatBytes(stat.snapshot.memoryUsage),
}));
return points;
}
);
</script>

View File

@@ -0,0 +1,56 @@
<template>
<div class="has-text-centered is-relative host" @mouseenter="mouseOver = true" @mouseleave="mouseOver = false">
<div class="has-border">
<stat-sparkline :data="data" @selected-point="onSelectedPoint"></stat-sparkline>
</div>
<div class="has-background-body-color is-top-left">
<span class="has-text-weight-light has-spacer">{{ label }}</span>
<span class="has-text-weight-bold">
{{ mouseOver ? selectedPoint?.value ?? selectedPoint?.y ?? statValue : statValue }}
</span>
</div>
</div>
</template>
<script lang="ts" setup>
const { data, label, statValue } = defineProps<{ data: Point<unknown>[]; label: string; statValue: string | number }>();
let selectedPoint: Point<unknown> = $ref();
function onSelectedPoint(point: Point<unknown>) {
selectedPoint = point;
}
let mouseOver = $ref(false);
</script>
<style lang="scss" scoped>
.has-spacer {
&::after {
content: " ";
}
}
.has-border {
border: 1px solid var(--primary-color);
border-radius: 3px;
padding: 1px 1px 0 1px;
display: flex;
overflow: hidden;
padding-top: 0.25em;
}
.has-background-body-color {
background-color: var(--body-background-color);
}
.host:hover span {
color: var(--secondary-color);
}
.is-top-left {
position: absolute;
top: 0;
left: 0.75em;
}
</style>

View File

@@ -1,6 +1,7 @@
<template>
<svg :width="width" :height="height">
<svg :width="width" :height="height" @mousemove="onMove">
<path :d="path" class="area" />
<line :x1="lineX" y1="0" :x2="lineX" :y2="height" class="line" />
</svg>
</template>
@@ -10,12 +11,16 @@ import { scaleLinear } from "d3-scale";
import { area, curveStep } from "d3-shape";
const d3 = { extent, scaleLinear, area, curveStep };
const { data, width = 150, height = 30 } = defineProps<{ data: Point[]; width?: number; height?: number }>();
const x = d3.scaleLinear().range([0, width]);
const { data, width = 150, height = 30 } = defineProps<{ data: Point<unknown>[]; width?: number; height?: number }>();
const x = d3.scaleLinear().range([width, 0]);
const y = d3.scaleLinear().range([height, 0]);
const emit = defineEmits<{
(event: "selected-point", value: Point<unknown>): void;
}>();
const shape = d3
.area<Point>()
.area<Point<unknown>>()
.curve(d3.curveStep)
.x((d) => x(d.x))
.y0(height)
@@ -24,12 +29,34 @@ const shape = d3
const path = computed(() => {
x.domain(d3.extent(data, (d) => d.x) as [number, number]);
y.domain(d3.extent(data, (d) => d.y) as [number, number]);
return shape(data) ?? "";
});
let lineX = $ref(0);
function onMove(e: MouseEvent) {
const { offsetX } = e;
const xValue = x.invert(offsetX);
const index = Math.round(xValue);
lineX = x(index);
const point = data[index];
emit("selected-point", point);
}
</script>
<style scoped>
:deep(.area) {
fill: var(--primary-color);
}
:deep(.line) {
stroke: var(--secondary-color);
stroke-width: 2;
display: none;
}
svg:hover :deep(.line) {
display: unset;
}
</style>

View File

@@ -37,7 +37,7 @@ export function useLogStream(container: ComputedRef<Container>) {
} else {
messages.push(...buffer);
buffer = [];
messages.splice(0, messages.length - config.maxLogs);
messages = messages.slice(-config.maxLogs);
}
} else {
messages.push(...buffer);

View File

@@ -1 +1 @@
type Point = { x: number; y: number };
type Point<T> = { x: number; y: number; value?: T };

View File

@@ -22,16 +22,16 @@
"postinstall": "husky install"
},
"dependencies": {
"@iconify-json/carbon": "^1.1.8",
"@iconify-json/carbon": "^1.1.9",
"@iconify-json/cil": "^1.1.2",
"@iconify-json/mdi": "^1.1.34",
"@iconify-json/mdi-light": "^1.1.2",
"@iconify-json/octicon": "^1.1.20",
"@oruga-ui/oruga-next": "^0.5.6",
"@oruga-ui/theme-bulma": "^0.2.7",
"@vueuse/core": "^9.3.0",
"@vueuse/integrations": "^9.3.0",
"@vueuse/router": "^9.3.0",
"@vueuse/core": "^9.3.1",
"@vueuse/integrations": "^9.3.1",
"@vueuse/router": "^9.3.1",
"ansi-to-html": "^0.7.2",
"bulma": "^0.9.4",
"d3-array": "^3.2.0",
@@ -78,13 +78,13 @@
"ts-node": "^10.9.1",
"typescript": "^4.8.4",
"unplugin-auto-import": "^0.11.2",
"unplugin-icons": "^0.14.11",
"unplugin-icons": "^0.14.12",
"unplugin-vue-components": "^0.22.8",
"vite": "3.1.8",
"vite-plugin-pages": "^0.26.0",
"vite-plugin-pages": "^0.27.0",
"vite-plugin-vue-layouts": "^0.7.0",
"vitest": "^0.24.3",
"vue-tsc": "^1.0.7"
"vue-tsc": "^1.0.8"
},
"lint-staged": {
"*.{js,vue,css}": [

223
pnpm-lock.yaml generated
View File

@@ -1,7 +1,7 @@
lockfileVersion: 5.4
specifiers:
'@iconify-json/carbon': ^1.1.8
'@iconify-json/carbon': ^1.1.9
'@iconify-json/cil': ^1.1.2
'@iconify-json/mdi': ^1.1.34
'@iconify-json/mdi-light': ^1.1.2
@@ -22,9 +22,9 @@ specifiers:
'@vitejs/plugin-vue': 3.1.2
'@vue/compiler-sfc': ^3.2.41
'@vue/test-utils': ^2.1.0
'@vueuse/core': ^9.3.0
'@vueuse/integrations': ^9.3.0
'@vueuse/router': ^9.3.0
'@vueuse/core': ^9.3.1
'@vueuse/integrations': ^9.3.1
'@vueuse/router': ^9.3.1
ansi-to-html: ^0.7.2
bulma: ^0.9.4
c8: ^7.12.0
@@ -52,28 +52,28 @@ specifiers:
ts-node: ^10.9.1
typescript: ^4.8.4
unplugin-auto-import: ^0.11.2
unplugin-icons: ^0.14.11
unplugin-icons: ^0.14.12
unplugin-vue-components: ^0.22.8
vite: 3.1.8
vite-plugin-pages: ^0.26.0
vite-plugin-pages: ^0.27.0
vite-plugin-vue-layouts: ^0.7.0
vitest: ^0.24.3
vue: ^3.2.41
vue-i18n: ^9.2.2
vue-router: ^4.1.5
vue-tsc: ^1.0.7
vue-tsc: ^1.0.8
dependencies:
'@iconify-json/carbon': 1.1.8
'@iconify-json/carbon': 1.1.9
'@iconify-json/cil': 1.1.2
'@iconify-json/mdi': 1.1.34
'@iconify-json/mdi-light': 1.1.2
'@iconify-json/octicon': 1.1.20
'@oruga-ui/oruga-next': 0.5.6_vue@3.2.41
'@oruga-ui/theme-bulma': 0.2.7
'@vueuse/core': 9.3.0_vue@3.2.41
'@vueuse/integrations': 9.3.0_fuse.js@6.6.2+vue@3.2.41
'@vueuse/router': 9.3.0_4g567gsol3fv3jos66rjdswwp4
'@vueuse/core': 9.3.1_vue@3.2.41
'@vueuse/integrations': 9.3.1_fuse.js@6.6.2+vue@3.2.41
'@vueuse/router': 9.3.1_4g567gsol3fv3jos66rjdswwp4
ansi-to-html: 0.7.2
bulma: 0.9.4
d3-array: 3.2.0
@@ -119,14 +119,14 @@ devDependencies:
sass: 1.55.0
ts-node: 10.9.1_o6ib7qqltxpe7qrskddglns2ga
typescript: 4.8.4
unplugin-auto-import: 0.11.2_xprgaq42dappzfhggpxgvdf43y
unplugin-icons: 0.14.11_@vue+compiler-sfc@3.2.41
unplugin-auto-import: 0.11.2_zqi2xhr3ahaiw6pxzygjgkwf7q
unplugin-icons: 0.14.12_@vue+compiler-sfc@3.2.41
unplugin-vue-components: 0.22.8_vue@3.2.41
vite: 3.1.8_sass@1.55.0
vite-plugin-pages: 0.26.0_y7chuddh2i4swuczuywc2tye34
vite-plugin-pages: 0.27.0_y7chuddh2i4swuczuywc2tye34
vite-plugin-vue-layouts: 0.7.0_nknaiyoma7qglenj4mb2pj2auq
vitest: 0.24.3_jsdom@20.0.1+sass@1.55.0
vue-tsc: 1.0.7_typescript@4.8.4
vue-tsc: 1.0.8_typescript@4.8.4
packages:
@@ -213,8 +213,8 @@ packages:
resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
dev: true
/@iconify-json/carbon/1.1.8:
resolution: {integrity: sha512-aSoMgvZyvIXadLbMXcfS+qy8CVxSExvvp8Vd/nCrupLFc0KLKSukRInnVNc63zaHqoe1NBf5xUrgfyRYYfaKWQ==}
/@iconify-json/carbon/1.1.9:
resolution: {integrity: sha512-O3geRhhnE9dDDC4oT6qwBs7sdc37R9UqftiG7BP8YVDw8OcXv8i95J0ZEkIfdOXFj1Wb6kC/Uu/6VTlAqotVXg==}
dependencies:
'@iconify/types': 2.0.0
dev: false
@@ -696,8 +696,8 @@ packages:
resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==}
dev: true
/@types/web-bluetooth/0.0.15:
resolution: {integrity: sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==}
/@types/web-bluetooth/0.0.16:
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
/@vitejs/plugin-vue/3.1.2_vite@3.1.8+vue@3.2.41:
resolution: {integrity: sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==}
@@ -710,44 +710,44 @@ packages:
vue: 3.2.41
dev: true
/@volar/language-core/1.0.7:
resolution: {integrity: sha512-T3iJ7Ej5Ywrsn1nEfvOQ98LdFZu3TtoXD8UELHto/u5QyQk4U2GfPl+0ZjuS39ZPocU9l/5CMhrxHsgv/hFWVA==}
/@volar/language-core/1.0.8:
resolution: {integrity: sha512-uxYSOqBk8ZFSzGjUIPOBEFPOg8F3CE6cLO5meK95DODGIlUlPytGiy9sy8QZ9w7RpUH4XMOX3MH/G48SLgP07A==}
dependencies:
'@volar/source-map': 1.0.7
'@vue/reactivity': 3.2.40
'@volar/source-map': 1.0.8
'@vue/reactivity': 3.2.41
muggle-string: 0.1.0
dev: true
/@volar/source-map/1.0.7:
resolution: {integrity: sha512-58xtTXbriaBoGHl5epE5kYI0Pk81yGmM3Mb/5TEUEzA16dGovXiwtEGce2xCgo0ps42OInFvFuaRv3SvM0k6mg==}
/@volar/source-map/1.0.8:
resolution: {integrity: sha512-uKMe+alyfl1Abs5SviKejFoe7x9g6jDPVpVt63Tet4qn1Ziy7tFsvtCpM2Y1Ko5qw2nLIeloLslPqm9/gmbBLQ==}
dependencies:
muggle-string: 0.1.0
dev: true
/@volar/typescript/1.0.7:
resolution: {integrity: sha512-VH3dMxTqkdUqjmdVwIytBjppH5iy18qK9peb3E9CNbvzf/+b3TpdX0zoyglaKmC5IeHG68KHXK2yps734yZ4nQ==}
/@volar/typescript/1.0.8:
resolution: {integrity: sha512-2oY1Apvzcs/5tAn7p1tRlDxNgal5ezaK0h9cutcWALeimsaQBAEE2NAirCrLMHl8DneuDce0tzJqHaQeHw9RmQ==}
dependencies:
'@volar/language-core': 1.0.7
'@volar/language-core': 1.0.8
dev: true
/@volar/vue-language-core/1.0.7:
resolution: {integrity: sha512-5InGpRLu5FGeUkVNr1LvQfvThdSsyzIwvsYqYSGLj6VNmS7rzLacoKjZlTwz68/976aU3zjdgx94PoNl5n/SqA==}
/@volar/vue-language-core/1.0.8:
resolution: {integrity: sha512-cXb7oTybxcm1vpz003agdYQHyxij7UAaSub60d7W1aMWpqb2iaCbVaq9izgQFlrpC4/JnVs+cJPb/Q6fAUVxBg==}
dependencies:
'@volar/language-core': 1.0.7
'@volar/source-map': 1.0.7
'@volar/language-core': 1.0.8
'@volar/source-map': 1.0.8
'@vue/compiler-dom': 3.2.41
'@vue/compiler-sfc': 3.2.41
'@vue/reactivity': 3.2.40
'@vue/reactivity': 3.2.41
'@vue/shared': 3.2.41
minimatch: 5.1.0
vue-template-compiler: 2.7.12
vue-template-compiler: 2.7.13
dev: true
/@volar/vue-typescript/1.0.7:
resolution: {integrity: sha512-SZlUJfMh/9NOIfpYtSVcIAbJVEzEiH2qWBIYHPooMXC02qey56Tg6J2eMhIoKWIuZH0VRRbX8IgFHevSQzzGOw==}
/@volar/vue-typescript/1.0.8:
resolution: {integrity: sha512-6jBvA7iwBkRqS2VQx2gLJgfLcF3hcODyJ6Lmiw2tN8D/LVfFCovvzJgPvIQb9Y4i+rha1Y0cpsYOUt9XW2Z7ZA==}
dependencies:
'@volar/typescript': 1.0.7
'@volar/vue-language-core': 1.0.7
'@volar/typescript': 1.0.8
'@volar/vue-language-core': 1.0.8
dev: true
/@vue/compiler-core/3.2.41:
@@ -799,12 +799,6 @@ packages:
estree-walker: 2.0.2
magic-string: 0.25.9
/@vue/reactivity/3.2.40:
resolution: {integrity: sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==}
dependencies:
'@vue/shared': 3.2.40
dev: true
/@vue/reactivity/3.2.41:
resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==}
dependencies:
@@ -832,10 +826,6 @@ packages:
'@vue/shared': 3.2.41
vue: 3.2.41
/@vue/shared/3.2.40:
resolution: {integrity: sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==}
dev: true
/@vue/shared/3.2.41:
resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==}
@@ -847,19 +837,19 @@ packages:
vue: 3.2.41
dev: true
/@vueuse/core/9.3.0_vue@3.2.41:
resolution: {integrity: sha512-64Rna8IQDWpdrJxgitDg7yv1yTp41ZmvV8zlLEylK4QQLWAhz1OFGZDPZ8bU4lwcGgbEJ2sGi2jrdNh4LttUSQ==}
/@vueuse/core/9.3.1_vue@3.2.41:
resolution: {integrity: sha512-xriyD+v3D2ObH/UtnkEl+1sbcLBVHNaZaLi/rqoNEe/B92hggDEFQIGXoQUjdRzYOjASHSezf9uCDtmd7LeWyA==}
dependencies:
'@types/web-bluetooth': 0.0.15
'@vueuse/metadata': 9.3.0
'@vueuse/shared': 9.3.0_vue@3.2.41
'@types/web-bluetooth': 0.0.16
'@vueuse/metadata': 9.3.1
'@vueuse/shared': 9.3.1_vue@3.2.41
vue-demi: 0.13.11_vue@3.2.41
transitivePeerDependencies:
- '@vue/composition-api'
- vue
/@vueuse/integrations/9.3.0_fuse.js@6.6.2+vue@3.2.41:
resolution: {integrity: sha512-KkJpC97VioZUpSw7rvgnqoLgTztLlLLGdYp6WQKn69cJiItsJVSRZrmI+X9YVxPBzuLvRymYZfp0RMyISVFHTw==}
/@vueuse/integrations/9.3.1_fuse.js@6.6.2+vue@3.2.41:
resolution: {integrity: sha512-ydVHxJpLZrO9WbRXs1mNBbgEby8ERkiQumR2LebYVtY/1AFEn+mQ8MkL9pvcXwd9mrQSms+wzssu760n7DaDAw==}
peerDependencies:
async-validator: '*'
axios: '*'
@@ -893,8 +883,8 @@ packages:
universal-cookie:
optional: true
dependencies:
'@vueuse/core': 9.3.0_vue@3.2.41
'@vueuse/shared': 9.3.0_vue@3.2.41
'@vueuse/core': 9.3.1_vue@3.2.41
'@vueuse/shared': 9.3.1_vue@3.2.41
fuse.js: 6.6.2
vue-demi: 0.13.11_vue@3.2.41
transitivePeerDependencies:
@@ -902,15 +892,15 @@ packages:
- vue
dev: false
/@vueuse/metadata/9.3.0:
resolution: {integrity: sha512-GnnfjbzIPJIh9ngL9s9oGU1+Hx/h5/KFqTfJykzh/1xjaHkedV9g0MASpdmPZIP+ynNhKAcEfA6g5i8KXwtoMA==}
/@vueuse/metadata/9.3.1:
resolution: {integrity: sha512-G1BPhtx3OHaL/y4OZBofh6Xt02G1VA9PuOO8nac9sTKMkMqfyez5VfkF3D9GUjSRNO7cVWyH4rceeGXfr2wdMg==}
/@vueuse/router/9.3.0_4g567gsol3fv3jos66rjdswwp4:
resolution: {integrity: sha512-UFN2MFciprH21oYsAgNHeDJ4Bd86HpRm9gximSN8j6h4fc2aa62fvfhprfHqdTxYAcgcGkMwcc9TO75jOvr8gg==}
/@vueuse/router/9.3.1_4g567gsol3fv3jos66rjdswwp4:
resolution: {integrity: sha512-iyxyGNAeK8y4xaKjidnTI2H6eFiCiHypjoKPDEE8kdfESoxjegigp/DYfrbFt3IIeAHXPvBMq11m9IFuZ+LyLw==}
peerDependencies:
vue-router: '>=4.0.0-rc.1'
dependencies:
'@vueuse/shared': 9.3.0_vue@3.2.41
'@vueuse/shared': 9.3.1_vue@3.2.41
vue-demi: 0.13.11_vue@3.2.41
vue-router: 4.1.5_vue@3.2.41
transitivePeerDependencies:
@@ -918,8 +908,8 @@ packages:
- vue
dev: false
/@vueuse/shared/9.3.0_vue@3.2.41:
resolution: {integrity: sha512-caGUWLY0DpPC6l31KxeUy6vPVNA0yKxx81jFYLoMpyP6cF84FG5Dkf69DfSUqL57wX8JcUkJDMnQaQIZPWFEQQ==}
/@vueuse/shared/9.3.1_vue@3.2.41:
resolution: {integrity: sha512-YFu3qcnVeu0S2L4XdQJtBpDcjz6xwqHZtTv/XRhu66/yge1XVhxskUcc7VZbX52xF9A34V6KCfwncP9YDqYFiw==}
dependencies:
vue-demi: 0.13.11_vue@3.2.41
transitivePeerDependencies:
@@ -1221,7 +1211,7 @@ packages:
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
dependencies:
function-bind: 1.1.1
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
dev: true
/callsites/3.1.0:
@@ -1651,7 +1641,7 @@ packages:
dependencies:
call-bind: 1.0.2
es-get-iterator: 1.1.2
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
is-arguments: 1.1.1
is-date-object: 1.0.5
is-regex: 1.1.4
@@ -1800,7 +1790,7 @@ packages:
call-bind: 1.0.2
es-to-primitive: 1.2.1
function-bind: 1.1.1
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
get-symbol-description: 1.0.0
has: 1.0.3
has-symbols: 1.0.3
@@ -1819,35 +1809,6 @@ packages:
unbox-primitive: 1.0.2
dev: true
/es-abstract/1.20.2:
resolution: {integrity: sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
es-to-primitive: 1.2.1
function-bind: 1.1.1
function.prototype.name: 1.1.5
get-intrinsic: 1.1.3
get-symbol-description: 1.0.0
has: 1.0.3
has-property-descriptors: 1.0.0
has-symbols: 1.0.3
internal-slot: 1.0.3
is-callable: 1.2.6
is-negative-zero: 2.0.2
is-regex: 1.1.4
is-shared-array-buffer: 1.0.2
is-string: 1.0.7
is-weakref: 1.0.2
object-inspect: 1.12.2
object-keys: 1.1.1
object.assign: 4.1.4
regexp.prototype.flags: 1.4.3
string.prototype.trimend: 1.0.5
string.prototype.trimstart: 1.0.5
unbox-primitive: 1.0.2
dev: true
/es-abstract/1.20.4:
resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==}
engines: {node: '>= 0.4'}
@@ -1886,7 +1847,7 @@ packages:
resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
has-symbols: 1.0.3
is-arguments: 1.1.1
is-map: 2.0.2
@@ -2341,7 +2302,7 @@ packages:
/for-each/0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
is-callable: 1.2.4
is-callable: 1.2.7
dev: true
/foreground-child/2.0.0:
@@ -2412,7 +2373,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
es-abstract: 1.20.2
es-abstract: 1.20.4
functions-have-names: 1.2.3
dev: true
@@ -2434,14 +2395,6 @@ packages:
resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
dev: true
/get-intrinsic/1.1.2:
resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==}
dependencies:
function-bind: 1.1.1
has: 1.0.3
has-symbols: 1.0.3
dev: true
/get-intrinsic/1.1.3:
resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
dependencies:
@@ -2460,7 +2413,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
dev: true
/get-uri/3.0.2:
@@ -2781,7 +2734,7 @@ packages:
resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
has: 1.0.3
side-channel: 1.0.4
dev: true
@@ -2846,11 +2799,6 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/is-callable/1.2.6:
resolution: {integrity: sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==}
engines: {node: '>= 0.4'}
dev: true
/is-callable/1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
@@ -3021,7 +2969,7 @@ packages:
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.2
es-abstract: 1.20.2
es-abstract: 1.20.4
for-each: 0.3.3
has-tostringtag: 1.0.0
dev: true
@@ -3049,7 +2997,7 @@ packages:
resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
dev: true
/is-whitespace/0.3.0:
@@ -3070,7 +3018,7 @@ packages:
dev: true
/isarray/0.0.1:
resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=}
resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
dev: true
/isarray/2.0.5:
@@ -4365,7 +4313,7 @@ packages:
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
dependencies:
call-bind: 1.0.2
get-intrinsic: 1.1.2
get-intrinsic: 1.1.3
object-inspect: 1.12.2
dev: true
@@ -4511,7 +4459,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
es-abstract: 1.20.2
es-abstract: 1.20.4
dev: true
/string.prototype.trimstart/1.0.5:
@@ -4519,7 +4467,7 @@ packages:
dependencies:
call-bind: 1.0.2
define-properties: 1.1.4
es-abstract: 1.20.2
es-abstract: 1.20.4
dev: true
/string_decoder/0.10.31:
@@ -4798,7 +4746,7 @@ packages:
engines: {node: '>= 0.8'}
dev: true
/unplugin-auto-import/0.11.2_xprgaq42dappzfhggpxgvdf43y:
/unplugin-auto-import/0.11.2_zqi2xhr3ahaiw6pxzygjgkwf7q:
resolution: {integrity: sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==}
engines: {node: '>=14'}
peerDependencies:
@@ -4809,7 +4757,7 @@ packages:
dependencies:
'@antfu/utils': 0.5.2
'@rollup/pluginutils': 4.2.1
'@vueuse/core': 9.3.0_vue@3.2.41
'@vueuse/core': 9.3.1_vue@3.2.41
local-pkg: 0.4.2
magic-string: 0.26.2
unimport: 0.6.7_vite@3.1.8
@@ -4821,8 +4769,8 @@ packages:
- webpack
dev: true
/unplugin-icons/0.14.11_@vue+compiler-sfc@3.2.41:
resolution: {integrity: sha512-szr6QA1ILT4RrJCmtvW41m2KPwUCCIx8QNgwEmTehvzEkSLDrdEaBhKGMWb/qTe5/zwnfwrDGcFT/6pGOSHJcA==}
/unplugin-icons/0.14.12_@vue+compiler-sfc@3.2.41:
resolution: {integrity: sha512-FdkjDnUnc8/75OT8Ywwm8iDyG6kO8w1uHfFbnO2Jh7JhpE0odKhCqaAOmEE/UlvYDYSm5D4X1DKdWMwpAxj07Q==}
peerDependencies:
'@svgr/core': '>=5.5.0'
'@vue/compiler-sfc': ^3.0.2
@@ -4964,8 +4912,8 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
/vite-plugin-pages/0.26.0_y7chuddh2i4swuczuywc2tye34:
resolution: {integrity: sha512-yJZvwHEt7puYIf19S89IvkDsWPjWleSied4H8hmdW6i8buCA93z1UAU1ipW1d8fNKrC4FzXsUHHbPm6+kl1p9w==}
/vite-plugin-pages/0.27.0_y7chuddh2i4swuczuywc2tye34:
resolution: {integrity: sha512-fLuBd8U9jcfB+MXj9yEsq6AHa0AHCP4Fhi7LCcCWJeL28Lx3o5B0uoBUhCZ+xwsnNs4GZwPOfgBG3yHKMsMNnA==}
peerDependencies:
'@vue/compiler-sfc': ^2.7.0 || ^3.0.0
vite: ^2.0.0 || ^3.0.0-0
@@ -4978,12 +4926,12 @@ packages:
debug: 4.3.4
deep-equal: 2.0.5
extract-comments: 1.1.0
fast-glob: 3.2.11
fast-glob: 3.2.12
json5: 2.2.1
local-pkg: 0.4.2
picocolors: 1.0.0
vite: 3.1.8_sass@1.55.0
yaml: 2.1.1
yaml: 2.1.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -5133,21 +5081,21 @@ packages:
'@vue/devtools-api': 6.2.1
vue: 3.2.41
/vue-template-compiler/2.7.12:
resolution: {integrity: sha512-6rhJAuo2vRzJMs8X/pd9yqtsJmnPEnv4E0cb9KCu0sfGhoDt8roCCa/6qbrvpc1b38zYgdmY/xrk4qfNWZIjwA==}
/vue-template-compiler/2.7.13:
resolution: {integrity: sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==}
dependencies:
de-indent: 1.0.2
he: 1.2.0
dev: true
/vue-tsc/1.0.7_typescript@4.8.4:
resolution: {integrity: sha512-PaeWgISdXsPnV3a1NKfiAZb0iyvgLroxKzjPj1itoR5ZH0UOeVZBbDxpH7VPxAt6tCxiAoAIIisDs1QQrsSu3w==}
/vue-tsc/1.0.8_typescript@4.8.4:
resolution: {integrity: sha512-+0sJ+QVH7SHLt8mV/uIw4xlHDk1mWigZkMFugfZTv8rlHpM3S2tCVZ0BWEGclT/0rKdO8j+St+mljpvhWPN/eQ==}
hasBin: true
peerDependencies:
typescript: '*'
dependencies:
'@volar/vue-language-core': 1.0.7
'@volar/vue-typescript': 1.0.7
'@volar/vue-language-core': 1.0.8
'@volar/vue-typescript': 1.0.8
typescript: 4.8.4
dev: true
@@ -5252,7 +5200,7 @@ packages:
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.2
es-abstract: 1.20.2
es-abstract: 1.20.4
for-each: 0.3.3
has-tostringtag: 1.0.0
is-typed-array: 1.1.9
@@ -5401,6 +5349,11 @@ packages:
engines: {node: '>= 14'}
dev: true
/yaml/2.1.3:
resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==}
engines: {node: '>= 14'}
dev: true
/yargs-parser/20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
engines: {node: '>=10'}