Compare commits

...

19 Commits

Author SHA1 Message Date
Amir Raminfar 895345693c chore: release v7.0.4 2024-06-03 11:52:06 -07:00
Amir Raminfar a0d60357b8 fix: implements logfmt with more strict rules. fixes #3006 (#3007)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-03 15:52:40 +00:00
renovate[bot] f2e29dadf1 chore(deps): update dependency @types/node to ^20.14.0 (#3009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-03 00:05:49 +00:00
Amir Raminfar 05d6e47d28 chore: fixes missing files 2024-06-02 16:55:42 -07:00
Amir Raminfar 882c5a1186 docs: updates video for dozzle.dev (#3008) 2024-06-02 16:52:39 -07:00
Amir Raminfar 496a894d86 feat: adds severe (#3005) 2024-06-01 21:28:28 +00:00
renovate[bot] e7911dbce6 chore(deps): update dependency prettier to ^3.3.0 (#3004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 20:45:44 +00:00
renovate[bot] 1484318279 chore(deps): update all non-major dependencies (#3002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 15:49:46 +00:00
Amir Raminfar 8dce75509c feat: changes the host when a new container is chosen (#3001) 2024-05-31 16:19:40 -07:00
Amir Raminfar 689c399ace chore: release v7.0.3 2024-05-30 16:51:52 -07:00
Amir Raminfar da62adadc5 fix: fixes a bug when searching for multiple words in fuzzy popup (#3000) 2024-05-30 16:51:20 -07:00
Amir Raminfar 3a30c27c9a feat!: adds services and stacks to fuzzy search. Note labels will no longer be searchable due to a bug on sorting. (#2999) 2024-05-30 09:47:20 -07:00
renovate[bot] 4edac1174c chore(deps): update all non-major dependencies (#2998)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 15:03:43 +00:00
Amir Raminfar aeffdcb27f chore: updates node (#2997) 2024-05-30 14:56:12 +00:00
Amir Raminfar 3cb3b395a9 chore: fixes a race condition when fetch is done but not yet processed (#2996) 2024-05-30 14:50:53 +00:00
Amir Raminfar 4829a5e8c4 fix: aborts fetchings more request when container is changed. fixes #2993 (#2995) 2024-05-29 13:29:31 -07:00
Amir Raminfar c2c7041cf7 feat: disables user select for dates on simple and complex logs. fixes #2967 (#2994) 2024-05-29 08:45:02 -07:00
Amir Raminfar 487a4ad0d4 chore: vscode settings 2024-05-29 08:14:25 -07:00
Amir Raminfar e00af4321f chore: extracts more locales text (#2992) 2024-05-28 19:37:41 -07:00
44 changed files with 802 additions and 533 deletions
+3 -2
View File
@@ -1,6 +1,7 @@
{
"i18n-ally.localesPaths": ["locales"],
"i18n-ally.keystyle": "nested",
"cSpell.words": ["healthcheck"],
"editor.formatOnSave": true
"cSpell.words": ["healthcheck", "orderedmap"],
"editor.formatOnSave": true,
"i18n-ally.extract.autoDetect": true
}
+1 -1
View File
@@ -1,5 +1,5 @@
# Build assets
FROM --platform=$BUILDPLATFORM node:21.7.3-alpine as node
FROM --platform=$BUILDPLATFORM node:22.2-alpine as node
RUN corepack enable
+3 -2
View File
@@ -33,7 +33,7 @@ function createFuzzySearchModal() {
containers: [
new Container("123", new Date(), "image", "test", "command", "host", {}, "status", "running", []),
new Container("345", new Date(), "image", "foo bar", "command", "host", {}, "status", "running", []),
new Container("567", new Date(), "image", "baz", "command", "host", {}, "status", "exited", []),
new Container("567", new Date(), "image", "baz", "command", "host", {}, "status", "running", []),
],
},
},
@@ -56,7 +56,8 @@ describe("<FuzzySearchModal />", () => {
beforeEach(() => {
vi.mocked(useRouter().push).mockReset();
});
test("shows all", async () => {
test("shows running all", async () => {
const wrapper = createFuzzySearchModal();
expect(wrapper.findAll("li").length).toBe(3);
});
+75 -22
View File
@@ -24,14 +24,23 @@
:class="index === selectedIndex ? 'focus' : ''"
>
<div :class="{ 'text-primary': result.item.state === 'running' }">
<octicon:container-24 />
<template v-if="result.item.type === 'container'">
<octicon:container-24 />
</template>
<template v-else-if="result.item.type === 'service'">
<ph:stack-simple />
</template>
<template v-else-if="result.item.type === 'stack'">
<ph:stack />
</template>
</div>
<div class="truncate">
<template v-if="config.hosts.length > 1">
<template v-if="config.hosts.length > 1 && result.item.host">
<span class="font-light">{{ result.item.host }}</span> /
</template>
<span data-name v-html="matchedName(result)"></span>
</div>
<DistanceTime :date="result.item.created" class="text-xs font-light" />
<a
@click.stop.prevent="addColumn(result.item)"
@@ -48,8 +57,9 @@
</template>
<script lang="ts" setup>
import { ContainerState } from "@/types/Container";
import { useFuse } from "@vueuse/integrations/useFuse";
import { type FuseResultMatch } from "fuse.js";
import { type FuseResult } from "fuse.js";
const { maxResults = 5 } = defineProps<{
maxResults?: number;
@@ -64,24 +74,60 @@ const selectedIndex = ref(0);
const router = useRouter();
const containerStore = useContainerStore();
const pinnedStore = usePinnedLogsStore();
const { containers } = storeToRefs(containerStore);
const { visibleContainers } = storeToRefs(containerStore);
const swarmStore = useSwarmStore();
const { stacks, services } = storeToRefs(swarmStore);
type Item = {
id: string;
created: Date;
name: string;
state?: ContainerState;
host?: string;
type: "container" | "service" | "stack";
};
const list = computed(() => {
return containers.value.map(({ id, created, name, state, labels, hostLabel: host }) => {
return {
id,
created,
name,
state,
host,
labels: Object.entries(labels).map(([_, value]) => value),
};
});
const items: Item[] = [];
for (const container of visibleContainers.value) {
items.push({
id: container.id,
created: container.created,
name: container.name,
state: container.state,
host: container.hostLabel,
type: "container",
});
}
for (const service of services.value) {
items.push({
id: service.name,
created: service.updatedAt,
name: service.name,
state: "running",
type: "service",
});
}
for (const stack of stacks.value) {
items.push({
id: stack.name,
created: stack.updatedAt,
name: stack.name,
state: "running",
type: "stack",
});
}
return items;
});
const { results } = useFuse(query, list, {
fuseOptions: {
keys: ["name", "host", "labels"],
keys: ["name", "host"],
includeScore: true,
useExtendedSearch: true,
threshold: 0.3,
@@ -93,17 +139,17 @@ const { results } = useFuse(query, list, {
const data = computed(() => {
return [...results.value]
.sort((a, b) => {
.sort((a: FuseResult<Item>, b: FuseResult<Item>) => {
if (a.score === b.score) {
if (a.item.state === b.item.state) {
return b.item.created - a.item.created;
return b.item.created.getTime() - a.item.created.getTime();
} else if (a.item.state === "running" && b.item.state !== "running") {
return -1;
} else {
return 1;
}
} else {
return a.score - b.score;
return (a.score ?? 0) - (b.score ?? 0);
}
})
.slice(0, maxResults);
@@ -115,10 +161,16 @@ watch(query, (data) => {
}
});
onMounted(() => input.value?.focus());
useFocus(input, { initialValue: true });
function selected({ id }: { id: string }) {
router.push({ name: "container-id", params: { id } });
function selected(item: Item) {
if (item.type === "container") {
router.push({ name: "container-id", params: { id: item.id } });
} else if (item.type === "service") {
router.push({ name: "service-name", params: { name: item.id } });
} else if (item.type === "stack") {
router.push({ name: "stack-name", params: { name: item.id } });
}
close();
}
function addColumn(container: { id: string }) {
@@ -126,13 +178,14 @@ function addColumn(container: { id: string }) {
close();
}
function matchedName({ item, matches = [] }: { item: { name: string }; matches?: FuseResultMatch[] }) {
function matchedName({ item, matches = [] }: FuseResult<Item>) {
const matched = matches.find((match) => match.key === "name");
if (matched) {
const { indices } = matched;
const result = [];
let lastIndex = 0;
for (const [start, end] of indices) {
if (lastIndex > start) continue;
result.push(item.name.slice(lastIndex, start));
result.push(`<mark>${item.name.slice(start, end + 1)}</mark>`);
lastIndex = end + 1;
+20 -2
View File
@@ -1,7 +1,9 @@
<template>
<div class="breadcrumbs">
<ul>
<li><a @click.prevent="setHost(null)" class="link-primary">Hosts</a></li>
<li>
<a @click.prevent="setHost(null)" class="link-primary">{{ $t("label.hosts") }}</a>
</li>
<li v-if="sessionHost && hosts[sessionHost]" class="cursor-default">
{{ hosts[sessionHost].name }}
</li>
@@ -37,7 +39,7 @@
}"
class="btn btn-square btn-outline btn-primary btn-xs"
active-class="btn-active"
title="Merge all containers into one view"
:title="$t('tooltip.merge-containers')"
>
<ph:arrows-merge />
</router-link>
@@ -88,6 +90,7 @@ import Pin from "~icons/ph/map-pin-simple";
import Stack from "~icons/ph/stack";
// @ts-ignore
import Containers from "~icons/octicon/container-24";
import { RouteLocationNormalizedLoaded } from "vue-router";
const containerStore = useContainerStore();
const { visibleContainers } = storeToRefs(containerStore);
@@ -164,6 +167,21 @@ const menuItems = computed(() => {
return items;
});
const route = useRoute();
const updateHostForContainerRoute = (to: RouteLocationNormalizedLoaded) => {
if (to.name === "container-id") {
const container = containerStore.findContainerById(to.params.id as string);
if (container) {
setHost(container.host);
}
}
};
updateHostForContainerRoute(route);
onBeforeRouteUpdate((to) => updateHostForContainerRoute(to));
</script>
<style scoped lang="postcss">
.menu {
@@ -12,7 +12,7 @@
<LogStd :std="logEntry.std" />
</div>
<div v-if="showTimestamp">
<LogDate :date="logEntry.date" />
<LogDate :date="logEntry.date" class="select-none" />
</div>
<div class="flex">
<LogLevel :level="logEntry.level" />
@@ -13,13 +13,15 @@
{{ $t("alert.similar-container-found.message", { containerId: nextContainer.id }) }}
</div>
<div>
<TimedButton v-if="automaticRedirect" class="btn-primary btn-sm" @finished="redirectNow()">Cancel</TimedButton>
<TimedButton v-if="automaticRedirect" class="btn-primary btn-sm" @finished="redirectNow()">{{
$t("button.cancel")
}}</TimedButton>
<router-link
:to="{ name: 'container-id', params: { id: nextContainer.id } }"
class="btn btn-primary btn-sm"
v-else
>
Redirect
{{ $t("button.redirect") }}
</router-link>
</div>
</div>
+7 -5
View File
@@ -8,14 +8,12 @@ import { LogStreamSource } from "@/composable/eventStreams";
const loadingMore = defineEmit<[value: boolean]>();
const props = defineProps<{
const { entity, streamSource } = $defineProps<{
streamSource: (t: Ref<T>) => LogStreamSource;
entity: T;
}>();
const { entity, streamSource } = toRefs(props);
const { messages, loadOlderLogs } = streamSource.value(entity);
const { messages, loadOlderLogs } = streamSource($$(entity));
const beforeLoading = () => loadingMore(true);
const afterLoading = () => loadingMore(false);
@@ -24,5 +22,9 @@ defineExpose({
clear: () => (messages.value = []),
});
const fetchMore = () => loadOlderLogs({ beforeLoading, afterLoading });
const fetchMore = async () => {
beforeLoading();
await loadOlderLogs();
afterLoading();
};
</script>
+2 -1
View File
@@ -43,7 +43,8 @@ defineProps<{
}
[data-level="error"],
[data-level="fatal"] {
[data-level="fatal"],
[data-level="severe"] {
@apply bg-red;
}
@@ -2,7 +2,7 @@
<div class="relative flex w-full items-start gap-x-2">
<LogStd :std="logEntry.std" v-if="showStd" />
<ContainerName class="flex-none" :id="logEntry.containerID" v-if="showContainerName" />
<LogDate :date="logEntry.date" v-if="showTimestamp" />
<LogDate :date="logEntry.date" v-if="showTimestamp" class="select-none" />
<LogLevel class="flex" :level="logEntry.level" :position="logEntry.position" />
<div
class="whitespace-pre-wrap [word-break:break-word] group-[.disable-wrap]:whitespace-nowrap"
@@ -4,7 +4,7 @@
#default="{ messages }"
@loading-more="loadingMore($event)"
:stream-source="streamSource"
:entity="props.entity"
:entity="entity"
>
<LogViewer :messages="messages" :visible-keys="visibleKeys" :show-container-name="showContainerName" />
</EventSource>
@@ -14,7 +14,7 @@
import LogEventSource from "@/components/ContainerViewer/LogEventSource.vue";
import { LogStreamSource } from "@/composable/eventStreams";
const props = defineProps<{
const { streamSource, visibleKeys, showContainerName, entity } = defineProps<{
streamSource: (t: Ref<T>) => LogStreamSource;
visibleKeys: string[][];
showContainerName: boolean;
@@ -6,7 +6,7 @@ exports[`<ContainerEventSource /> > render html correctly > should render dates
<div data-v-cf9ff940="" class="relative flex w-full items-start gap-x-2" visible-keys="">
<!--v-if-->
<!--v-if-->
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em]" size="small">
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em] select-none" size="small">
<div class="inline-flex gap-2 whitespace-nowrap text-blue"><time datetime="2019-06-12T10:55:42.459Z" class="mobile-hidden">06/12/2019</time><time datetime="2019-06-12T10:55:42.459Z">10:55:42 AM</time></div>
</div>
<div data-v-e625cddd="" class="mt-1.5 size-2.5 flex-none rounded-lg flex"></div>
@@ -26,7 +26,7 @@ exports[`<ContainerEventSource /> > render html correctly > should render dates
<div data-v-cf9ff940="" class="relative flex w-full items-start gap-x-2" visible-keys="">
<!--v-if-->
<!--v-if-->
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em]" size="small">
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em] select-none" size="small">
<div class="inline-flex gap-2 whitespace-nowrap text-blue"><time datetime="2019-06-12T10:55:42.459Z" class="mobile-hidden">06/12/2019</time><time datetime="2019-06-12T10:55:42.459Z">10:55:42</time></div>
</div>
<div data-v-e625cddd="" class="mt-1.5 size-2.5 flex-none rounded-lg flex"></div>
@@ -46,7 +46,7 @@ exports[`<ContainerEventSource /> > render html correctly > should render messag
<div data-v-cf9ff940="" class="relative flex w-full items-start gap-x-2" visible-keys="">
<!--v-if-->
<!--v-if-->
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em]" size="small">
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em] select-none" size="small">
<div class="inline-flex gap-2 whitespace-nowrap text-blue"><time datetime="2019-06-12T10:55:42.459Z" class="mobile-hidden">06/12/2019</time><time datetime="2019-06-12T10:55:42.459Z">10:55:42 AM</time></div>
</div>
<div data-v-e625cddd="" class="mt-1.5 size-2.5 flex-none rounded-lg flex"></div>
@@ -66,7 +66,7 @@ exports[`<ContainerEventSource /> > render html correctly > should render messag
<div data-v-cf9ff940="" class="relative flex w-full items-start gap-x-2" visible-keys="">
<!--v-if-->
<!--v-if-->
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em]" size="small">
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em] select-none" size="small">
<div class="inline-flex gap-2 whitespace-nowrap text-blue"><time datetime="2019-06-12T10:55:42.459Z" class="mobile-hidden">06/12/2019</time><time datetime="2019-06-12T10:55:42.459Z">10:55:42 AM</time></div>
</div>
<div data-v-e625cddd="" class="mt-1.5 size-2.5 flex-none rounded-lg flex"></div>
@@ -88,7 +88,7 @@ exports[`<ContainerEventSource /> > render html correctly > should render messag
<div data-v-cf9ff940="" class="relative flex w-full items-start gap-x-2" visible-keys="">
<!--v-if-->
<!--v-if-->
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em]" size="small">
<div data-v-961504e7="" class="inline-flex items-center justify-center rounded bg-base-lighter px-2 py-[0.2em] select-none" size="small">
<div class="inline-flex gap-2 whitespace-nowrap text-blue"><time datetime="2019-06-12T10:55:42.459Z" class="mobile-hidden">06/12/2019</time><time datetime="2019-06-12T10:55:42.459Z">10:55:42 AM</time></div>
</div>
<div data-v-e625cddd="" class="mt-1.5 size-2.5 flex-none rounded-lg flex"></div>
+9
View File
@@ -20,6 +20,7 @@
</template>
<script lang="ts" setup>
import { onBeforeRouteLeave } from "vue-router";
const containerStore = useContainerStore();
const { ready } = storeToRefs(containerStore);
@@ -27,5 +28,13 @@ const swarmStore = useSwarmStore();
const { services, customGroups } = storeToRefs(swarmStore);
const showSwarm = useSessionStorage<boolean>("DOZZLE_SWARM_MODE", false);
onBeforeRouteLeave((to) => {
if (to.meta.swarmMode) {
showSwarm.value = true;
} else {
showSwarm.value = false;
}
});
</script>
<style scoped lang="postcss"></style>
+1 -1
View File
@@ -10,7 +10,7 @@
:to="{ name: 'stack-name', params: { name } }"
class="btn btn-square btn-outline btn-primary btn-xs"
active-class="btn-active"
title="Merge all services into one view"
:title="$t('tooltip.merge-services')"
>
<ph:arrows-merge />
</router-link>
+24 -15
View File
@@ -180,28 +180,37 @@ function useLogStream(url: Ref<string>, loadMoreUrl?: Ref<string>) {
watch(url, () => connect(), { immediate: true });
async function loadOlderLogs({ beforeLoading, afterLoading } = { beforeLoading: () => {}, afterLoading: () => {} }) {
async function loadOlderLogs() {
if (!loadMoreUrl) return;
beforeLoading();
const to = messages[0].date;
const last = messages[messages.length - 1].date;
const last = messages[Math.min(messages.length - 1, 300)].date;
const delta = to.getTime() - last.getTime();
const from = new Date(to.getTime() + delta);
const logs = await (
await fetch(
`${loadMoreUrl.value}&${new URLSearchParams({ from: from.toISOString(), to: to.toISOString() }).toString()}`,
)
).text();
if (logs) {
const newMessages = logs
.trim()
.split("\n")
.map((line) => parseMessage(line));
messages.unshift(...newMessages);
const abortController = new AbortController();
const signal = abortController.signal;
try {
const stopWatcher = watchOnce(url, () => abortController.abort("stream changed"));
const logs = await (
await fetch(
`${loadMoreUrl.value}&${new URLSearchParams({ from: from.toISOString(), to: to.toISOString() }).toString()}`,
{ signal },
)
).text();
stopWatcher();
if (logs && signal.aborted === false) {
const newMessages = logs
.trim()
.split("\n")
.map((line) => parseMessage(line));
messages.unshift(...newMessages);
}
} catch (e) {
console.error("Error loading older logs", e);
}
afterLoading();
}
// TODO this is a hack to connect the event source when the container is started
+8
View File
@@ -10,6 +10,10 @@ export class Stack {
service.stack = this;
}
}
get updatedAt() {
return this.containers.map((c) => c.created).reduce((acc, date) => (date > acc ? date : acc), new Date(0));
}
}
export class Service {
@@ -19,4 +23,8 @@ export class Service {
) {}
stack?: Stack;
get updatedAt() {
return this.containers.map((c) => c.created).reduce((acc, date) => (date > acc ? date : acc), new Date(0));
}
}
+4
View File
@@ -20,3 +20,7 @@ watchEffect(() => {
}
});
</script>
<route lang="yaml">
meta:
swarmMode: true
</route>
+4
View File
@@ -26,3 +26,7 @@ watchEffect(() => {
}
});
</script>
<route lang="yaml">
meta:
swarmMode: true
</route>
+4
View File
@@ -26,3 +26,7 @@ watchEffect(() => {
}
});
</script>
<route lang="yaml">
meta:
swarmMode: true
</route>
+3
View File
@@ -152,11 +152,14 @@ export const useContainerStore = defineStore("container", () => {
),
);
const findContainerById = (id: string) => allContainersById.value[id];
return {
containers,
allContainersById,
visibleContainers,
currentContainer,
findContainerById,
containerNames,
ready,
};
@@ -1,14 +0,0 @@
<script setup></script>
<template>
<div border="~ solid rounded light-100 dark:dark-50" bg="[#eee] dark:[#222]">
<div flex gap="2" p-2>
<div circle-red />
<div circle-yellow />
<div circle-green />
</div>
<div class="content">
<slot />
</div>
</div>
</template>
@@ -27,18 +27,18 @@ onUnmounted(() => {
</script>
<template>
<browser-window drop-shadow-md>
<video muted loop autoplay playsinline poster="../media/poster.png" v-if="isDark">
<source src="../media/dozzle-dark.webm" type="video/webm" />
<div
class="border-rounded-md border-light-100 dark:border-dark-50 overflow-hidden border border-solid bg-[#eee] drop-shadow-md dark:bg-[#222]"
>
<video muted loop autoplay playsinline poster="../media/poster-dark.png" v-if="isDark">
<source src="../media/dozzle-dark.mp4" type="video/mp4" />
<img src="../media/poster.png" alt="" />
<img src="../media/poster-dark.png" alt="" />
</video>
<video muted loop autoplay playsinline poster="../media/poster.png" v-else>
<source src="../media/dozzle-light.webm" type="video/webm" />
<video muted loop autoplay playsinline poster="../media/poster-light.png" v-else>
<source src="../media/dozzle-light.mp4" type="video/mp4" />
<img src="../media/poster.png" alt="" />
<img src="../media/poster-light.png" alt="" />
</video>
</browser-window>
</div>
</template>
<style scoped></style>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 742 KiB

+4 -4
View File
@@ -3,10 +3,10 @@
"type": "module",
"name": "docs",
"devDependencies": {
"@unocss/preset-typography": "^0.60.3",
"@unocss/reset": "^0.60.3",
"@unocss/transformer-directives": "^0.60.3",
"@unocss/preset-typography": "^0.60.4",
"@unocss/reset": "^0.60.4",
"@unocss/transformer-directives": "^0.60.4",
"dozzle": "workspace:*",
"unocss": "^0.60.3"
"unocss": "^0.60.4"
}
}
+329 -332
View File
@@ -9,20 +9,20 @@ importers:
.:
devDependencies:
'@unocss/preset-typography':
specifier: ^0.60.3
version: 0.60.3
specifier: ^0.60.4
version: 0.60.4
'@unocss/reset':
specifier: ^0.60.3
version: 0.60.3
specifier: ^0.60.4
version: 0.60.4
'@unocss/transformer-directives':
specifier: ^0.60.3
version: 0.60.3
specifier: ^0.60.4
version: 0.60.4
dozzle:
specifier: workspace:*
version: link:..
unocss:
specifier: ^0.60.3
version: 0.60.3(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11)
specifier: ^0.60.4
version: 0.60.4(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11)
packages:
@@ -36,153 +36,153 @@ packages:
'@antfu/utils@0.7.8':
resolution: {integrity: sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==}
'@babel/code-frame@7.24.2':
resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
'@babel/code-frame@7.24.6':
resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==}
engines: {node: '>=6.9.0'}
'@babel/compat-data@7.24.4':
resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==}
'@babel/compat-data@7.24.6':
resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==}
engines: {node: '>=6.9.0'}
'@babel/core@7.24.5':
resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==}
'@babel/core@7.24.6':
resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.24.5':
resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==}
'@babel/generator@7.24.6':
resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.22.5':
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
'@babel/helper-annotate-as-pure@7.24.6':
resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==}
engines: {node: '>=6.9.0'}
'@babel/helper-compilation-targets@7.23.6':
resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
'@babel/helper-compilation-targets@7.24.6':
resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==}
engines: {node: '>=6.9.0'}
'@babel/helper-create-class-features-plugin@7.24.5':
resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==}
'@babel/helper-create-class-features-plugin@7.24.6':
resolution: {integrity: sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-environment-visitor@7.22.20':
resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
'@babel/helper-environment-visitor@7.24.6':
resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==}
engines: {node: '>=6.9.0'}
'@babel/helper-function-name@7.23.0':
resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
'@babel/helper-function-name@7.24.6':
resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==}
engines: {node: '>=6.9.0'}
'@babel/helper-hoist-variables@7.22.5':
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
'@babel/helper-hoist-variables@7.24.6':
resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==}
engines: {node: '>=6.9.0'}
'@babel/helper-member-expression-to-functions@7.24.5':
resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==}
'@babel/helper-member-expression-to-functions@7.24.6':
resolution: {integrity: sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.24.3':
resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
'@babel/helper-module-imports@7.24.6':
resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-transforms@7.24.5':
resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==}
'@babel/helper-module-transforms@7.24.6':
resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-optimise-call-expression@7.22.5':
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
'@babel/helper-optimise-call-expression@7.24.6':
resolution: {integrity: sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==}
engines: {node: '>=6.9.0'}
'@babel/helper-plugin-utils@7.24.5':
resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==}
'@babel/helper-plugin-utils@7.24.6':
resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==}
engines: {node: '>=6.9.0'}
'@babel/helper-replace-supers@7.24.1':
resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==}
'@babel/helper-replace-supers@7.24.6':
resolution: {integrity: sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
'@babel/helper-simple-access@7.24.5':
resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==}
'@babel/helper-simple-access@7.24.6':
resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==}
engines: {node: '>=6.9.0'}
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
'@babel/helper-skip-transparent-expression-wrappers@7.24.6':
resolution: {integrity: sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==}
engines: {node: '>=6.9.0'}
'@babel/helper-split-export-declaration@7.24.5':
resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==}
'@babel/helper-split-export-declaration@7.24.6':
resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==}
engines: {node: '>=6.9.0'}
'@babel/helper-string-parser@7.24.1':
resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
'@babel/helper-string-parser@7.24.6':
resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.24.5':
resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==}
'@babel/helper-validator-identifier@7.24.6':
resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.23.5':
resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
'@babel/helper-validator-option@7.24.6':
resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==}
engines: {node: '>=6.9.0'}
'@babel/helpers@7.24.5':
resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==}
'@babel/helpers@7.24.6':
resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==}
engines: {node: '>=6.9.0'}
'@babel/highlight@7.24.5':
resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==}
'@babel/highlight@7.24.6':
resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.24.5':
resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==}
'@babel/parser@7.24.6':
resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/plugin-syntax-jsx@7.24.1':
resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==}
'@babel/plugin-syntax-jsx@7.24.6':
resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-syntax-typescript@7.24.1':
resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==}
'@babel/plugin-syntax-typescript@7.24.6':
resolution: {integrity: sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-transform-modules-commonjs@7.24.1':
resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==}
'@babel/plugin-transform-modules-commonjs@7.24.6':
resolution: {integrity: sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/plugin-transform-typescript@7.24.5':
resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==}
'@babel/plugin-transform-typescript@7.24.6':
resolution: {integrity: sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/preset-typescript@7.24.1':
resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==}
'@babel/preset-typescript@7.24.6':
resolution: {integrity: sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/template@7.24.0':
resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
'@babel/template@7.24.6':
resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==}
engines: {node: '>=6.9.0'}
'@babel/traverse@7.24.5':
resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==}
'@babel/traverse@7.24.6':
resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==}
engines: {node: '>=6.9.0'}
'@babel/types@7.24.5':
resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==}
'@babel/types@7.24.6':
resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==}
engines: {node: '>=6.9.0'}
'@esbuild/aix-ppc64@0.20.2':
@@ -326,8 +326,8 @@ packages:
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
'@iconify/utils@2.1.23':
resolution: {integrity: sha512-YGNbHKM5tyDvdWZ92y2mIkrfvm5Fvhe6WJSkWu7vvOFhMtYDP0casZpoRz0XEHZCrYsR4stdGT3cZ52yp5qZdQ==}
'@iconify/utils@2.1.24':
resolution: {integrity: sha512-H8r2KpL5uKyrkb3z9/3HD/22JcxqW3BJyjEWZhX2T7DehnYVZthEap1cNsEl/UtCDC3TlpNmwiPX8wg3y8E4dg==}
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
@@ -454,89 +454,89 @@ packages:
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
'@unocss/astro@0.60.3':
resolution: {integrity: sha512-duFuyVhqYqQ15JZqx41UNgIxndqYRbOwDkJ7Y+R5N+u59a27vImz8B9eOFkHaZCFBWyH5jywkT8LVK1sfddFaw==}
'@unocss/astro@0.60.4':
resolution: {integrity: sha512-mfWiEVCUP00gxrMewwPfnTuw+ur5b6uIBRH2tIGkvfI21rLyZw8TIF08w7USz9C/47rvzsixBtCqq7v0g3Tw9w==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
peerDependenciesMeta:
vite:
optional: true
'@unocss/cli@0.60.3':
resolution: {integrity: sha512-bN829zn6k4hrvDTLnUcI2uAJnSevHwlkOCaYxN/C+v11uGxIewk5Xum6Vm5kZ8JTpCR1jEu/i7wIBNde3XKN5g==}
'@unocss/cli@0.60.4':
resolution: {integrity: sha512-RFt3BOgtp5ZI+cS6grKKo1DqvUJ/e8iRPwn843u6qSw18guIc4CEVTe5jcDAGuLcL4va9hg2wd4NReUEnMCZ/g==}
engines: {node: '>=14'}
hasBin: true
'@unocss/config@0.60.3':
resolution: {integrity: sha512-3RGD7h3bS4qZA/Khcqhn1EgLgyPc85FSz5rubdywHRdHlpY9sdmuGEJahvqSLMN4MmdYQDmqEIEAJjENrdgZeQ==}
'@unocss/config@0.60.4':
resolution: {integrity: sha512-ri9P2+YztD5JdPYSLiNjcLf6NgoBbwJDVutP/tQnfYYrE72DQ+j+4vepyxEBa1YaH/X4qsmLJCj+2tI/ufIiog==}
engines: {node: '>=14'}
'@unocss/core@0.60.3':
resolution: {integrity: sha512-4bBX1pavDl2DSCozEII7bxYGT0IkyO7kKlUuCtooTePWyLjf2F7essdzHkJ00EpNR64kkebR9V0lqBMBo07VPw==}
'@unocss/core@0.60.4':
resolution: {integrity: sha512-6tz8KTzC30oB0YikwRQoIpJ6Y6Dg+ZiK3NfCIsH+UX11bh2J2M53as2EL/5VQCqtiUn3YP0ZEzR2d1AWX78RCA==}
'@unocss/extractor-arbitrary-variants@0.60.3':
resolution: {integrity: sha512-PnwNwkeAHmbJbrf5XN0xQG1KT1VQEye8neYn5yz1MHnT8Cj2nqjrqoCRGLCLhpOUg3/MNj+bpiA7hGnFbXWaCQ==}
'@unocss/extractor-arbitrary-variants@0.60.4':
resolution: {integrity: sha512-USuFGs5CLft9q7IGNdAEp1oliuUns+W7OO0Tx5qtx/oBh6pU/L93lcNNsuuGNrMU8BCmF3atx1/PEmGymgJ7VA==}
'@unocss/inspector@0.60.3':
resolution: {integrity: sha512-2cXAPA1yddB79mmpMXxPpSpizn4TskAsB7aSocbprOTYIU2Ff53gfkkijnLixrBvbG8xw91d9oPuI5Hm9GCyMQ==}
'@unocss/inspector@0.60.4':
resolution: {integrity: sha512-PcnrEQ2H7osZho4Nh0+84O4IXzlkF7pvTUe/7FTJYF1HQGWHB/PfOSoyKn7/sF5sED8hMK9RlSJ9YGUH9ioY+g==}
'@unocss/postcss@0.60.3':
resolution: {integrity: sha512-7jRsKgMz4wr3Rvnr/RpK/7g6o8bMrqjTb01imgHeaw7cmQsa9sH1HPCp+4lvHh2/QKKLwwRAC+fdnNmsf8JKjA==}
'@unocss/postcss@0.60.4':
resolution: {integrity: sha512-mHha4BoOpCWRRL5EFJqsj+BiYxOBPXUZDFbSWmA8oAMBwcA/yqtnaRF2tqI9CK+CDfhmtbYF64KdTLh9pf6BvQ==}
engines: {node: '>=14'}
peerDependencies:
postcss: ^8.4.21
'@unocss/preset-attributify@0.60.3':
resolution: {integrity: sha512-G/Lx9xq/tVKvjp/CcACyLU+p3mcrpgkMvy+Z3NSHfBAZAmbieBMFhwROxt5R8Bny66q3fYDtxxx+likpokpOAQ==}
'@unocss/preset-attributify@0.60.4':
resolution: {integrity: sha512-J2GWUC0bcmZSXlBGLYUXwWQos/dNzKbq2CKweWVBAmAH9XyfM0mA5CTNBRv05PN1g6C/0z5st7ntUjV6KHJuTg==}
'@unocss/preset-icons@0.60.3':
resolution: {integrity: sha512-L3Ecr36xC+Y8v5WMQcNsGoOzu0HpgNLh5RlC2abs8OyBDGn1k3UqdEFdrhRt3bXpln9b8JkstHO7ZwYPgr2/Cg==}
'@unocss/preset-icons@0.60.4':
resolution: {integrity: sha512-UN/dj+nhI3+S06YxCZQPLw3GZy780iaE71dysyhDMdh+Qq2KFVs3d94mr1427fjz/3Y8ZyXkgqyhCFr7UT0bMQ==}
'@unocss/preset-mini@0.60.3':
resolution: {integrity: sha512-7en8KBX3lN1Y6eCprbzA1QVfyXZD03B+oAxFXH8QPv5jRIL8Lm8sbXqE+VTsSME/OVp4DnS6LdGtDAm9mvIOSw==}
'@unocss/preset-mini@0.60.4':
resolution: {integrity: sha512-ZiHbP69vkyz0xmhqzC4B4PegwV+LPlZOBT7cRhsh0P8oPOQKYOyDRy4rAl+sJBJeIrggn1r1LgN+Z0Xvd8Ytcw==}
'@unocss/preset-tagify@0.60.3':
resolution: {integrity: sha512-pzD6bgtGuIk7M1n/JQiR6EpwnVvafSTHoM70Jhf+T8MSuatDb+KFJCn3VELV2v38aikcUY5cTf95jqHQdzOAhQ==}
'@unocss/preset-tagify@0.60.4':
resolution: {integrity: sha512-GxL/W3qkdWWDqXi43qyLbp/BpEj7gMw99KqkO7bmbVi3BVlFggreTFwmQu89pB6iatxGjxnAsc+TsQZqxKftZA==}
'@unocss/preset-typography@0.60.3':
resolution: {integrity: sha512-cOXOnxkgH0ZiYg/oHBbabzXi1q6oTZWgQ4fqrVxGI2CD4oiWYaPU/wzKsx930D6uBSIlBVDX/cov2j0dPWjgJg==}
'@unocss/preset-typography@0.60.4':
resolution: {integrity: sha512-6j8ySZYEAwMBy9a3Lw3EEfRlcAClti4zvaV0kBtkP4BDZCwlgX2eE1pmw2mTUy+E1yVlXm3NnRzKfDudQUzraA==}
'@unocss/preset-uno@0.60.3':
resolution: {integrity: sha512-PJSR78uaIRTsD9RFSQLwsrGAsjQoW5nWenU4n4GyZeskDsyQVgOcaKtvh+0aYjYdWBa1UvxeUL8Y+m29K4HnAA==}
'@unocss/preset-uno@0.60.4':
resolution: {integrity: sha512-AN8ZTtiKSaZNGKZZIqt/JAhMzSY2hHLwhGEOFDrXgjWFr85UlwZzODMDoT58PrU04VlbhN8+0N4lHfLmZCKpiQ==}
'@unocss/preset-web-fonts@0.60.3':
resolution: {integrity: sha512-uYHvnqgLDawG3o9oBbasPWbSZ93kzk2JQBcH6xmHh7xqYtRdHqVbUjVU1zIqSjXm19SxFriSrNTl4ct2+/pJIg==}
'@unocss/preset-web-fonts@0.60.4':
resolution: {integrity: sha512-COfxOQcREFgpsm6nw234pxrr1EV1zWUVYXBZjlH+vk7x8EhaS5BPAXqN6SneIVTTDvEE9U4opAaoEYz5A3XWaQ==}
'@unocss/preset-wind@0.60.3':
resolution: {integrity: sha512-q7yDJ/SyEkPmPBJvIeHd9Bt50LAu65q7WwKxJYfJkjfJvJUMj6DO8FgPnpeiwBeJh9897m2Ap6zoQ3JqBjPLHQ==}
'@unocss/preset-wind@0.60.4':
resolution: {integrity: sha512-dT/U+RkbL21lDTOP7/mlFZxlBbUAefUzQZINC0BX7vTKvO57G4HxRq62u9xvMGFv38lQ+qXXzKhABVsEPDNpUA==}
'@unocss/reset@0.60.3':
resolution: {integrity: sha512-EuC8gkh8L8WvPOcjS/KqprEJXIKcpBPm+ou5G9D6WgDmJ+TgQrri5oR+QUmOmEnueQkVL7bnkFkIKeg71SJLFA==}
'@unocss/reset@0.60.4':
resolution: {integrity: sha512-MEngG4byIHnfb0osvxqU2gBdBkXPPE4z+G9HeEt3JUadWAp2gggm8ojC1/1PoJF5M31loxGEVVrB0FLSKACw3g==}
'@unocss/rule-utils@0.60.3':
resolution: {integrity: sha512-I47/DcKQ2z12W80+Ffth0K6LzNvqcQPYRWk7KwVemVoEiGYamMV8/s+SbB26Fk9KUFjh+Ns/pGAo4iJZo0ueUQ==}
'@unocss/rule-utils@0.60.4':
resolution: {integrity: sha512-7qUN33NM4T/IwWavm9VIOCZ2+4hLBc0YUGxcMNTDZSFQRQLkWe3N5dOlgwKXtMyMKatZfbIRUKVDUgvEefoCTA==}
engines: {node: '>=14'}
'@unocss/scope@0.60.3':
resolution: {integrity: sha512-uDUcBkFe8nRwNiU4YQyrOCjY7/+qFJI/Qr0eouMPOSEsQ6uIXQEWjykqUBJg2fvm0S2vbfBGO9tO/wCDIk5O3w==}
'@unocss/scope@0.60.4':
resolution: {integrity: sha512-AOu/qvi4agy0XfGF3QEBbuxVHkVZHpmU0NMBYuxa0B869YZENT87sTM6DVwtvr75CZvACWxv/hcL3lR68uKBjw==}
'@unocss/transformer-attributify-jsx-babel@0.60.3':
resolution: {integrity: sha512-6WcEFPSaxscGR22dRUcNqY0ippC3/Q/LBVFVSCJh++hoIPVCZbxF505cPq/bOdF2bpNzj9yXW0OJt03nB505Hg==}
'@unocss/transformer-attributify-jsx-babel@0.60.4':
resolution: {integrity: sha512-BL4g2gyLpbseu+fOhkAHKNxYcHcn7brQAjXj5k5Yyy6wpwm43lzHYPZtRPrbLVLniqqAN21FzEbtJXCPIHKlHA==}
'@unocss/transformer-attributify-jsx@0.60.3':
resolution: {integrity: sha512-zcPu4tUm/1EnqcFpf6+XzUzfb2BzJBcfNMkFzl/5BSTMECEDgdj4QGBWxnTuSlSZs4digRABGtuAHUO7k1qfgA==}
'@unocss/transformer-attributify-jsx@0.60.4':
resolution: {integrity: sha512-tQwD1T8Juz5F4JHYxTgekCv5olEegAPRZwAgx75pP+X2+PkV670pdXv8zbK0t5q6bvyF53vEVBrgQ9q1xSH9yQ==}
'@unocss/transformer-compile-class@0.60.3':
resolution: {integrity: sha512-j6wiYgtNqMlrctaZUuN4S+vANW0DMb9wW3KbJ2XvB7lXftfY1bbZ3IKenAyFp0ZLdKs69B6irJbCbIS5OAKKXQ==}
'@unocss/transformer-compile-class@0.60.4':
resolution: {integrity: sha512-zIqKQ7javiCb9Q3fbMvx1QVln8OqvAzWwgCVHsPINzDrDi73KXa3eeCU6GNlsd46tzy0Y9ryRIvW73YS+9Oj1w==}
'@unocss/transformer-directives@0.60.3':
resolution: {integrity: sha512-JuFpxyB1yvS2YoiguO5+8Ou6k9yyojZCnnDYXXZqMGLp1KdLiDcAPZQyShoD5HLzPGHtAbQELUz9TcX3VMLEoQ==}
'@unocss/transformer-directives@0.60.4':
resolution: {integrity: sha512-u3fQI8RszMhUevhJICtQ/bNpAfbh8MEXQf7YNnzUvLvbXGkkoieyU5mj0ray6fbToqxfxVceQtXYcFYIuf4aNg==}
'@unocss/transformer-variant-group@0.60.3':
resolution: {integrity: sha512-jQg0+W49jA7Z+4mRQbZWZKV6aXJXQfAHRC3oo4C9vEyTXL2jb952K12XVcJhXnbLYpnUKwytR+vbshXMIHWZwA==}
'@unocss/transformer-variant-group@0.60.4':
resolution: {integrity: sha512-R4d16G7s3fDXj9prUNFnJi8cZvH8/XZsqiKDzCBjXNKrbf9zp7YnWD2VaMFjUISgW5kSQjQNSWK84soVNWq3UQ==}
'@unocss/vite@0.60.3':
resolution: {integrity: sha512-I3EOR3g245IGDp3DS17AQAMwNQrh6L6kIlXG3+wt5IZ1zu1ahZmKA8/xxh6oo2TNdu4rI6nQbcLIRn+8eSyfQw==}
'@unocss/vite@0.60.4':
resolution: {integrity: sha512-af9hhtW11geF56cotKUE16Fr+FirTdV/Al/usjKJ6P5hnCEQnqSHXQDFXL5Y6vXwcvLDmOhHYNrVR8duKgC8Mw==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
@@ -912,11 +912,11 @@ packages:
unconfig@0.3.13:
resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==}
unocss@0.60.3:
resolution: {integrity: sha512-pUBbpgGRKCa6oB/LrGEFBWP2/2E1ZOY8XO7aVJKo2x10rqLS8tGykn1VoBUgbGJsv/8W8tskTVz+RFbCyKP+kA==}
unocss@0.60.4:
resolution: {integrity: sha512-KtYVzm1sV1J7hpXFvILPZiJVTni+XzC2vJzKYFTEe80fEGsrL+572YjS3QjZB52TMSppLYJk6WIVTb4mE4RmvQ==}
engines: {node: '>=14'}
peerDependencies:
'@unocss/webpack': 0.60.3
'@unocss/webpack': 0.60.4
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
peerDependenciesMeta:
'@unocss/webpack':
@@ -984,25 +984,25 @@ snapshots:
'@antfu/utils@0.7.8': {}
'@babel/code-frame@7.24.2':
'@babel/code-frame@7.24.6':
dependencies:
'@babel/highlight': 7.24.5
'@babel/highlight': 7.24.6
picocolors: 1.0.0
'@babel/compat-data@7.24.4': {}
'@babel/compat-data@7.24.6': {}
'@babel/core@7.24.5':
'@babel/core@7.24.6':
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.24.2
'@babel/generator': 7.24.5
'@babel/helper-compilation-targets': 7.23.6
'@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5)
'@babel/helpers': 7.24.5
'@babel/parser': 7.24.5
'@babel/template': 7.24.0
'@babel/traverse': 7.24.5
'@babel/types': 7.24.5
'@babel/code-frame': 7.24.6
'@babel/generator': 7.24.6
'@babel/helper-compilation-targets': 7.24.6
'@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6)
'@babel/helpers': 7.24.6
'@babel/parser': 7.24.6
'@babel/template': 7.24.6
'@babel/traverse': 7.24.6
'@babel/types': 7.24.6
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@@ -1011,175 +1011,172 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@babel/generator@7.24.5':
'@babel/generator@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
'@babel/helper-annotate-as-pure@7.22.5':
'@babel/helper-annotate-as-pure@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-compilation-targets@7.23.6':
'@babel/helper-compilation-targets@7.24.6':
dependencies:
'@babel/compat-data': 7.24.4
'@babel/helper-validator-option': 7.23.5
'@babel/compat-data': 7.24.6
'@babel/helper-validator-option': 7.24.6
browserslist: 4.23.0
lru-cache: 5.1.1
semver: 6.3.1
'@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5)':
'@babel/helper-create-class-features-plugin@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-member-expression-to-functions': 7.24.5
'@babel/helper-optimise-call-expression': 7.22.5
'@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5)
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
'@babel/helper-split-export-declaration': 7.24.5
'@babel/core': 7.24.6
'@babel/helper-annotate-as-pure': 7.24.6
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-function-name': 7.24.6
'@babel/helper-member-expression-to-functions': 7.24.6
'@babel/helper-optimise-call-expression': 7.24.6
'@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6)
'@babel/helper-skip-transparent-expression-wrappers': 7.24.6
'@babel/helper-split-export-declaration': 7.24.6
semver: 6.3.1
'@babel/helper-environment-visitor@7.22.20': {}
'@babel/helper-environment-visitor@7.24.6': {}
'@babel/helper-function-name@7.23.0':
'@babel/helper-function-name@7.24.6':
dependencies:
'@babel/template': 7.24.0
'@babel/types': 7.24.5
'@babel/template': 7.24.6
'@babel/types': 7.24.6
'@babel/helper-hoist-variables@7.22.5':
'@babel/helper-hoist-variables@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-member-expression-to-functions@7.24.5':
'@babel/helper-member-expression-to-functions@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-module-imports@7.24.3':
'@babel/helper-module-imports@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)':
'@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.24.5
'@babel/helper-split-export-declaration': 7.24.5
'@babel/helper-validator-identifier': 7.24.5
'@babel/core': 7.24.6
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-module-imports': 7.24.6
'@babel/helper-simple-access': 7.24.6
'@babel/helper-split-export-declaration': 7.24.6
'@babel/helper-validator-identifier': 7.24.6
'@babel/helper-optimise-call-expression@7.22.5':
'@babel/helper-optimise-call-expression@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-plugin-utils@7.24.5': {}
'@babel/helper-plugin-utils@7.24.6': {}
'@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5)':
'@babel/helper-replace-supers@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-member-expression-to-functions': 7.24.5
'@babel/helper-optimise-call-expression': 7.22.5
'@babel/core': 7.24.6
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-member-expression-to-functions': 7.24.6
'@babel/helper-optimise-call-expression': 7.24.6
'@babel/helper-simple-access@7.24.5':
'@babel/helper-simple-access@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
'@babel/helper-skip-transparent-expression-wrappers@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-split-export-declaration@7.24.5':
'@babel/helper-split-export-declaration@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/helper-string-parser@7.24.1': {}
'@babel/helper-string-parser@7.24.6': {}
'@babel/helper-validator-identifier@7.24.5': {}
'@babel/helper-validator-identifier@7.24.6': {}
'@babel/helper-validator-option@7.23.5': {}
'@babel/helper-validator-option@7.24.6': {}
'@babel/helpers@7.24.5':
'@babel/helpers@7.24.6':
dependencies:
'@babel/template': 7.24.0
'@babel/traverse': 7.24.5
'@babel/types': 7.24.5
transitivePeerDependencies:
- supports-color
'@babel/template': 7.24.6
'@babel/types': 7.24.6
'@babel/highlight@7.24.5':
'@babel/highlight@7.24.6':
dependencies:
'@babel/helper-validator-identifier': 7.24.5
'@babel/helper-validator-identifier': 7.24.6
chalk: 2.4.2
js-tokens: 4.0.0
picocolors: 1.0.0
'@babel/parser@7.24.5':
'@babel/parser@7.24.6':
dependencies:
'@babel/types': 7.24.5
'@babel/types': 7.24.6
'@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5)':
'@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-plugin-utils': 7.24.5
'@babel/core': 7.24.6
'@babel/helper-plugin-utils': 7.24.6
'@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5)':
'@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-plugin-utils': 7.24.5
'@babel/core': 7.24.6
'@babel/helper-plugin-utils': 7.24.6
'@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5)':
'@babel/plugin-transform-modules-commonjs@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5)
'@babel/helper-plugin-utils': 7.24.5
'@babel/helper-simple-access': 7.24.5
'@babel/core': 7.24.6
'@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6)
'@babel/helper-plugin-utils': 7.24.6
'@babel/helper-simple-access': 7.24.6
'@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.5)':
'@babel/plugin-transform-typescript@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5)
'@babel/helper-plugin-utils': 7.24.5
'@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5)
'@babel/core': 7.24.6
'@babel/helper-annotate-as-pure': 7.24.6
'@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6)
'@babel/helper-plugin-utils': 7.24.6
'@babel/plugin-syntax-typescript': 7.24.6(@babel/core@7.24.6)
'@babel/preset-typescript@7.24.1(@babel/core@7.24.5)':
'@babel/preset-typescript@7.24.6(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-plugin-utils': 7.24.5
'@babel/helper-validator-option': 7.23.5
'@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5)
'@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5)
'@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5)
'@babel/core': 7.24.6
'@babel/helper-plugin-utils': 7.24.6
'@babel/helper-validator-option': 7.24.6
'@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6)
'@babel/plugin-transform-modules-commonjs': 7.24.6(@babel/core@7.24.6)
'@babel/plugin-transform-typescript': 7.24.6(@babel/core@7.24.6)
'@babel/template@7.24.0':
'@babel/template@7.24.6':
dependencies:
'@babel/code-frame': 7.24.2
'@babel/parser': 7.24.5
'@babel/types': 7.24.5
'@babel/code-frame': 7.24.6
'@babel/parser': 7.24.6
'@babel/types': 7.24.6
'@babel/traverse@7.24.5':
'@babel/traverse@7.24.6':
dependencies:
'@babel/code-frame': 7.24.2
'@babel/generator': 7.24.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.24.5
'@babel/parser': 7.24.5
'@babel/types': 7.24.5
'@babel/code-frame': 7.24.6
'@babel/generator': 7.24.6
'@babel/helper-environment-visitor': 7.24.6
'@babel/helper-function-name': 7.24.6
'@babel/helper-hoist-variables': 7.24.6
'@babel/helper-split-export-declaration': 7.24.6
'@babel/parser': 7.24.6
'@babel/types': 7.24.6
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
'@babel/types@7.24.5':
'@babel/types@7.24.6':
dependencies:
'@babel/helper-string-parser': 7.24.1
'@babel/helper-validator-identifier': 7.24.5
'@babel/helper-string-parser': 7.24.6
'@babel/helper-validator-identifier': 7.24.6
to-fast-properties: 2.0.0
'@esbuild/aix-ppc64@0.20.2':
@@ -1253,7 +1250,7 @@ snapshots:
'@iconify/types@2.0.0': {}
'@iconify/utils@2.1.23':
'@iconify/utils@2.1.24':
dependencies:
'@antfu/install-pkg': 0.1.1
'@antfu/utils': 0.7.8
@@ -1354,23 +1351,23 @@ snapshots:
'@types/estree@1.0.5': {}
'@unocss/astro@0.60.3(rollup@4.17.2)(vite@5.2.11)':
'@unocss/astro@0.60.4(rollup@4.17.2)(vite@5.2.11)':
dependencies:
'@unocss/core': 0.60.3
'@unocss/reset': 0.60.3
'@unocss/vite': 0.60.3(rollup@4.17.2)(vite@5.2.11)
'@unocss/core': 0.60.4
'@unocss/reset': 0.60.4
'@unocss/vite': 0.60.4(rollup@4.17.2)(vite@5.2.11)
optionalDependencies:
vite: 5.2.11
transitivePeerDependencies:
- rollup
'@unocss/cli@0.60.3(rollup@4.17.2)':
'@unocss/cli@0.60.4(rollup@4.17.2)':
dependencies:
'@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0(rollup@4.17.2)
'@unocss/config': 0.60.3
'@unocss/core': 0.60.3
'@unocss/preset-uno': 0.60.3
'@unocss/config': 0.60.4
'@unocss/core': 0.60.4
'@unocss/preset-uno': 0.60.4
cac: 6.7.14
chokidar: 3.6.0
colorette: 2.0.20
@@ -1382,124 +1379,124 @@ snapshots:
transitivePeerDependencies:
- rollup
'@unocss/config@0.60.3':
'@unocss/config@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
unconfig: 0.3.13
'@unocss/core@0.60.3': {}
'@unocss/core@0.60.4': {}
'@unocss/extractor-arbitrary-variants@0.60.3':
'@unocss/extractor-arbitrary-variants@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
'@unocss/inspector@0.60.3':
'@unocss/inspector@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/rule-utils': 0.60.3
'@unocss/core': 0.60.4
'@unocss/rule-utils': 0.60.4
gzip-size: 6.0.0
sirv: 2.0.4
'@unocss/postcss@0.60.3(postcss@8.4.38)':
'@unocss/postcss@0.60.4(postcss@8.4.38)':
dependencies:
'@unocss/config': 0.60.3
'@unocss/core': 0.60.3
'@unocss/rule-utils': 0.60.3
'@unocss/config': 0.60.4
'@unocss/core': 0.60.4
'@unocss/rule-utils': 0.60.4
css-tree: 2.3.1
fast-glob: 3.3.2
magic-string: 0.30.10
postcss: 8.4.38
'@unocss/preset-attributify@0.60.3':
'@unocss/preset-attributify@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
'@unocss/preset-icons@0.60.3':
'@unocss/preset-icons@0.60.4':
dependencies:
'@iconify/utils': 2.1.23
'@unocss/core': 0.60.3
'@iconify/utils': 2.1.24
'@unocss/core': 0.60.4
ofetch: 1.3.4
transitivePeerDependencies:
- supports-color
'@unocss/preset-mini@0.60.3':
'@unocss/preset-mini@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/extractor-arbitrary-variants': 0.60.3
'@unocss/rule-utils': 0.60.3
'@unocss/core': 0.60.4
'@unocss/extractor-arbitrary-variants': 0.60.4
'@unocss/rule-utils': 0.60.4
'@unocss/preset-tagify@0.60.3':
'@unocss/preset-tagify@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
'@unocss/preset-typography@0.60.3':
'@unocss/preset-typography@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/preset-mini': 0.60.3
'@unocss/core': 0.60.4
'@unocss/preset-mini': 0.60.4
'@unocss/preset-uno@0.60.3':
'@unocss/preset-uno@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/preset-mini': 0.60.3
'@unocss/preset-wind': 0.60.3
'@unocss/rule-utils': 0.60.3
'@unocss/core': 0.60.4
'@unocss/preset-mini': 0.60.4
'@unocss/preset-wind': 0.60.4
'@unocss/rule-utils': 0.60.4
'@unocss/preset-web-fonts@0.60.3':
'@unocss/preset-web-fonts@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
ofetch: 1.3.4
'@unocss/preset-wind@0.60.3':
'@unocss/preset-wind@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/preset-mini': 0.60.3
'@unocss/rule-utils': 0.60.3
'@unocss/core': 0.60.4
'@unocss/preset-mini': 0.60.4
'@unocss/rule-utils': 0.60.4
'@unocss/reset@0.60.3': {}
'@unocss/reset@0.60.4': {}
'@unocss/rule-utils@0.60.3':
'@unocss/rule-utils@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
magic-string: 0.30.10
'@unocss/scope@0.60.3': {}
'@unocss/scope@0.60.4': {}
'@unocss/transformer-attributify-jsx-babel@0.60.3':
'@unocss/transformer-attributify-jsx-babel@0.60.4':
dependencies:
'@babel/core': 7.24.5
'@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5)
'@babel/preset-typescript': 7.24.1(@babel/core@7.24.5)
'@unocss/core': 0.60.3
'@babel/core': 7.24.6
'@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6)
'@babel/preset-typescript': 7.24.6(@babel/core@7.24.6)
'@unocss/core': 0.60.4
transitivePeerDependencies:
- supports-color
'@unocss/transformer-attributify-jsx@0.60.3':
'@unocss/transformer-attributify-jsx@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
'@unocss/transformer-compile-class@0.60.3':
'@unocss/transformer-compile-class@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
'@unocss/transformer-directives@0.60.3':
'@unocss/transformer-directives@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/rule-utils': 0.60.3
'@unocss/core': 0.60.4
'@unocss/rule-utils': 0.60.4
css-tree: 2.3.1
'@unocss/transformer-variant-group@0.60.3':
'@unocss/transformer-variant-group@0.60.4':
dependencies:
'@unocss/core': 0.60.3
'@unocss/core': 0.60.4
'@unocss/vite@0.60.3(rollup@4.17.2)(vite@5.2.11)':
'@unocss/vite@0.60.4(rollup@4.17.2)(vite@5.2.11)':
dependencies:
'@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0(rollup@4.17.2)
'@unocss/config': 0.60.3
'@unocss/core': 0.60.3
'@unocss/inspector': 0.60.3
'@unocss/scope': 0.60.3
'@unocss/transformer-directives': 0.60.3
'@unocss/config': 0.60.4
'@unocss/core': 0.60.4
'@unocss/inspector': 0.60.4
'@unocss/scope': 0.60.4
'@unocss/transformer-directives': 0.60.4
chokidar: 3.6.0
fast-glob: 3.3.2
magic-string: 0.30.10
@@ -1871,28 +1868,28 @@ snapshots:
defu: 6.1.4
jiti: 1.21.0
unocss@0.60.3(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11):
unocss@0.60.4(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11):
dependencies:
'@unocss/astro': 0.60.3(rollup@4.17.2)(vite@5.2.11)
'@unocss/cli': 0.60.3(rollup@4.17.2)
'@unocss/core': 0.60.3
'@unocss/extractor-arbitrary-variants': 0.60.3
'@unocss/postcss': 0.60.3(postcss@8.4.38)
'@unocss/preset-attributify': 0.60.3
'@unocss/preset-icons': 0.60.3
'@unocss/preset-mini': 0.60.3
'@unocss/preset-tagify': 0.60.3
'@unocss/preset-typography': 0.60.3
'@unocss/preset-uno': 0.60.3
'@unocss/preset-web-fonts': 0.60.3
'@unocss/preset-wind': 0.60.3
'@unocss/reset': 0.60.3
'@unocss/transformer-attributify-jsx': 0.60.3
'@unocss/transformer-attributify-jsx-babel': 0.60.3
'@unocss/transformer-compile-class': 0.60.3
'@unocss/transformer-directives': 0.60.3
'@unocss/transformer-variant-group': 0.60.3
'@unocss/vite': 0.60.3(rollup@4.17.2)(vite@5.2.11)
'@unocss/astro': 0.60.4(rollup@4.17.2)(vite@5.2.11)
'@unocss/cli': 0.60.4(rollup@4.17.2)
'@unocss/core': 0.60.4
'@unocss/extractor-arbitrary-variants': 0.60.4
'@unocss/postcss': 0.60.4(postcss@8.4.38)
'@unocss/preset-attributify': 0.60.4
'@unocss/preset-icons': 0.60.4
'@unocss/preset-mini': 0.60.4
'@unocss/preset-tagify': 0.60.4
'@unocss/preset-typography': 0.60.4
'@unocss/preset-uno': 0.60.4
'@unocss/preset-web-fonts': 0.60.4
'@unocss/preset-wind': 0.60.4
'@unocss/reset': 0.60.4
'@unocss/transformer-attributify-jsx': 0.60.4
'@unocss/transformer-attributify-jsx-babel': 0.60.4
'@unocss/transformer-compile-class': 0.60.4
'@unocss/transformer-directives': 0.60.4
'@unocss/transformer-variant-group': 0.60.4
'@unocss/vite': 0.60.4(rollup@4.17.2)(vite@5.2.11)
optionalDependencies:
vite: 5.2.11
transitivePeerDependencies:
+1 -2
View File
@@ -1,4 +1,4 @@
import { defineConfig, presetAttributify, presetIcons, presetUno, presetWebFonts } from "unocss";
import { defineConfig, presetIcons, presetUno, presetWebFonts } from "unocss";
import { presetTypography } from "@unocss/preset-typography";
import transformerDirectives from "@unocss/transformer-directives";
@@ -8,7 +8,6 @@ export default defineConfig({
transformers: [transformerDirectives()],
presets: [
presetUno(),
presetAttributify(),
presetTypography(),
presetIcons({
scale: 1.2,
-1
View File
@@ -28,7 +28,6 @@ require (
github.com/PuerkitoBio/goquery v1.9.2
github.com/go-chi/chi/v5 v5.0.12
github.com/go-chi/jwtauth/v5 v5.3.1
github.com/go-logfmt/logfmt v0.6.0
github.com/goccy/go-json v0.10.3
github.com/puzpuzpuz/xsync/v3 v3.1.0
github.com/wk8/go-ordered-map/v2 v2.1.8
-2
View File
@@ -42,8 +42,6 @@ github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/go-chi/jwtauth/v5 v5.3.1 h1:1ePWrjVctvp1tyBq5b/2ER8Th/+RbYc7x4qNsc5rh5A=
github.com/go-chi/jwtauth/v5 v5.3.1/go.mod h1:6Fl2RRmWXs3tJYE1IQGX81FsPoGqDwq9c15j52R5q80=
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+2 -26
View File
@@ -8,7 +8,6 @@ import (
"fmt"
"hash/fnv"
"io"
"regexp"
"strings"
"sync"
"time"
@@ -17,7 +16,6 @@ import (
orderedmap "github.com/wk8/go-ordered-map/v2"
"github.com/go-logfmt/logfmt"
log "github.com/sirupsen/logrus"
)
@@ -160,9 +158,6 @@ func readEvent(reader *bufio.Reader, tty bool) (string, StdType, error) {
}
}
var validLogFmtMessage = regexp.MustCompile(`([a-zA-Z0-9_.-]+)=(?:(?:"(.*)")|(?:(?:([^\s]+)[\s])))`)
var validLogFmtKey = regexp.MustCompile(`^[a-zA-Z0-9_.-]+$`)
func createEvent(message string, streamType StdType) *LogEvent {
h := fnv.New32a()
h.Write([]byte(message))
@@ -185,27 +180,8 @@ func createEvent(message string, streamType StdType) *LogEvent {
} else {
logEvent.Message = data
}
} else if validLogFmtMessage.MatchString(message) {
buffer := bufPool.Get().(*bytes.Buffer)
buffer.Reset()
defer bufPool.Put(buffer)
buffer.WriteString(message)
decoder := logfmt.NewDecoder(buffer)
data := make(map[string]string)
decoder.ScanRecord()
allValid := true
for decoder.ScanKeyval() {
key := decoder.Key()
value := decoder.Value()
if !validLogFmtKey.Match(key) {
allValid = false
break
}
data[string(key)] = string(value)
}
if allValid && len(data) > 1 {
logEvent.Message = data
}
} else if data, err := ParseLogFmt(message); err == nil {
logEvent.Message = data
}
}
}
+10
View File
@@ -127,7 +127,17 @@ func Test_createEvent(t *testing.T) {
Message: "123",
},
},
{
name: "invalid logfmt message",
args: args{
message: "2020-05-13T18:55:37.772853839Z sample text with=equal sign",
},
want: &LogEvent{
Message: "sample text with=equal sign",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := createEvent(tt.args.message, STDOUT); !reflect.DeepEqual(got.Message, tt.want.Message) {
+6 -1
View File
@@ -9,7 +9,7 @@ import (
)
var keyValueRegex = regexp.MustCompile(`level=(\w+)`)
var logLevels = []string{"error", "warn", "warning", "info", "debug", "trace", "fatal"}
var logLevels = []string{"error", "warn", "warning", "info", "debug", "trace", "fatal", "severe"}
var plainLevels = map[string]*regexp.Regexp{}
var bracketLevels = map[string]*regexp.Regexp{}
@@ -52,6 +52,11 @@ func guessLogLevel(logEvent *LogEvent) string {
}
}
case *orderedmap.OrderedMap[string, string]:
if level, ok := value.Get("level"); ok {
return strings.ToLower(level)
}
case map[string]interface{}:
if level, ok := value["level"].(string); ok {
return strings.ToLower(level)
+12 -5
View File
@@ -7,10 +7,6 @@ import (
)
func TestGuessLogLevel(t *testing.T) {
ordereddata := orderedmap.New[string, any]()
ordereddata.Set("key", "value")
ordereddata.Set("level", "info")
tests := []struct {
input any
expected string
@@ -35,7 +31,18 @@ func TestGuessLogLevel(t *testing.T) {
{map[string]interface{}{"level": "INFO"}, "info"},
{map[string]string{"level": "info"}, "info"},
{map[string]string{"level": "INFO"}, "info"},
{ordereddata, "info"},
{orderedmap.New[string, string](
orderedmap.WithInitialData(
orderedmap.Pair[string, string]{Key: "key", Value: "value"},
orderedmap.Pair[string, string]{Key: "level", Value: "info"},
),
), "info"},
{orderedmap.New[string, any](
orderedmap.WithInitialData(
orderedmap.Pair[string, any]{Key: "key", Value: "value"},
orderedmap.Pair[string, any]{Key: "level", Value: "info"},
),
), "info"},
}
for _, test := range tests {
+86
View File
@@ -0,0 +1,86 @@
package docker
import (
"errors"
orderedmap "github.com/wk8/go-ordered-map/v2"
)
// ParseLogFmt parses a log entry in logfmt format and returns a map of key-value pairs.
func ParseLogFmt(log string) (*orderedmap.OrderedMap[string, string], error) {
result := orderedmap.New[string, string]()
var key, value string
inQuotes, escaping, isKey := false, false, true
start := 0
for i := 0; i < len(log); i++ {
char := log[i]
if isKey {
if char == '=' {
if i == start {
return nil, errors.New("invalid format: key is empty")
}
key = log[start:i]
isKey = false
start = i + 1
} else if char == ' ' {
if i > start {
return nil, errors.New("invalid format: unexpected space in key")
}
}
} else {
if inQuotes {
if escaping {
escaping = false
} else if char == '\\' {
escaping = true
} else if char == '"' {
value = log[start:i]
result.Set(key, value)
inQuotes = false
isKey = true
start = i + 2
}
} else {
if char == '"' {
inQuotes = true
start = i + 1
} else if char == ' ' {
if i == start {
return nil, errors.New("invalid format: value is empty")
}
value = log[start:i]
result.Set(key, value)
isKey = true
start = i + 1
}
}
}
}
// Handle the last key-value pair if there is no trailing space
if !isKey && start < len(log) {
if inQuotes {
return nil, errors.New("invalid format: unclosed quotes")
}
value = log[start:]
result.Set(key, value)
} else if isKey && start < len(log) {
return nil, errors.New("invalid format: unexpected key without value")
}
if !isKey {
if inQuotes {
return nil, errors.New("invalid format: unclosed quotes")
}
if start >= len(log) {
return nil, errors.New("invalid format: value is empty")
}
value = log[start:]
result.Set(key, value)
}
return result, nil
}
+82
View File
@@ -0,0 +1,82 @@
package docker
import (
"encoding/json"
"reflect"
"testing"
orderedmap "github.com/wk8/go-ordered-map/v2"
)
func TestParseLog(t *testing.T) {
tests := []struct {
name string
log string
want *orderedmap.OrderedMap[string, string]
wantErr bool
}{
{
name: "Valid logfmt log",
log: `time="2024-06-02T14:30:42Z" level=debug msg="container e23e04da2cb9 started"`,
want: orderedmap.New[string, string](
orderedmap.WithInitialData(
orderedmap.Pair[string, string]{Key: "time", Value: "2024-06-02T14:30:42Z"},
orderedmap.Pair[string, string]{Key: "level", Value: "debug"},
orderedmap.Pair[string, string]{Key: "msg", Value: "container e23e04da2cb9 started"},
),
),
wantErr: false,
},
{
name: "Random test with equal sign",
log: "foo bar=baz",
want: nil,
wantErr: true,
},
{
name: "Invalid log with key without value",
log: "key1=value1 key2=",
want: nil,
wantErr: true,
},
{
name: "Valid log",
log: "key1=value1 key2=value2",
want: orderedmap.New[string, string](
orderedmap.WithInitialData(
orderedmap.Pair[string, string]{Key: "key1", Value: "value1"},
orderedmap.Pair[string, string]{Key: "key2", Value: "value2"},
),
),
wantErr: false,
},
{
name: "Invalid log with unclosed quotes",
log: "key1=\"value1 key2=value2",
want: nil,
wantErr: true,
},
{
name: "Plain text log",
log: "foo bar baz",
want: nil,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ParseLogFmt(tt.log)
if (err != nil) != tt.wantErr {
t.Errorf("ParseLogFmt() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
jsonGot, _ := json.MarshalIndent(got, "", " ")
jsonWant, _ := json.MarshalIndent(tt.want, "", " ")
t.Errorf("ParseLogFmt() = %v, want %v", string(jsonGot), string(jsonWant))
}
})
}
}
+5
View File
@@ -14,6 +14,7 @@ label:
running-containers: Running Containers
all-containers: All Containers
host: Host
hosts: Hosts
password: Password
username: Username
container-name: Container Name
@@ -29,6 +30,8 @@ label:
tooltip:
search: Search containers (⌘ + k, ⌃k)
pin-column: Pin as column
merge-services: Merge all services into one view
merge-containers: Merge all containers into one view
error:
page-not-found: This page does not exist
invalid-auth: Username or password are not valid
@@ -63,6 +66,8 @@ button:
logout: Logout
login: Login
settings: Settings
cancel: Cancel
redirect: Redirect
placeholder:
search-containers: Search containers (⌘ + k, ⌃k)
search: Search
+7 -7
View File
@@ -1,12 +1,12 @@
{
"name": "dozzle",
"version": "7.0.2",
"version": "7.0.4",
"description": "Realtime log viewer for docker containers.",
"homepage": "https://github.com/amir20/dozzle#readme",
"bugs": {
"url": "https://github.com/amir20/dozzle/issues"
},
"packageManager": "pnpm@9.1.3",
"packageManager": "pnpm@9.1.4",
"type": "module",
"repository": {
"type": "git",
@@ -73,7 +73,7 @@
"vue-router": "^4.3.2"
},
"devDependencies": {
"@iconify-json/material-symbols": "^1.1.80",
"@iconify-json/material-symbols": "^1.1.81",
"@pinia/testing": "^0.1.3",
"@playwright/test": "^1.44.1",
"@types/d3-array": "^3.2.1",
@@ -83,8 +83,8 @@
"@types/d3-shape": "^3.1.6",
"@types/d3-transition": "^3.0.8",
"@types/lodash.debounce": "^4.0.9",
"@types/node": "^20.12.12",
"@vitejs/plugin-vue": "5.0.4",
"@types/node": "^20.14.0",
"@vitejs/plugin-vue": "5.0.5",
"@vue/compiler-sfc": "^3.4.27",
"@vue/test-utils": "^2.4.6",
"bumpp": "^9.4.1",
@@ -93,8 +93,8 @@
"eventsourcemock": "^2.0.0",
"jsdom": "^24.1.0",
"lint-staged": "^15.2.5",
"prettier": "^3.2.5",
"prettier-plugin-tailwindcss": "^0.5.14",
"prettier": "^3.3.0",
"prettier-plugin-tailwindcss": "^0.6.1",
"simple-git-hooks": "^2.11.1",
"ts-node": "^10.9.2",
"typescript": "^5.4.5",
+69 -69
View File
@@ -34,10 +34,10 @@ importers:
version: 4.0.0(rollup@4.17.2)(vue-i18n@9.13.1(vue@3.4.27(typescript@5.4.5)))
'@tailwindcss/container-queries':
specifier: ^0.1.1
version: 0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))
version: 0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)))
'@tailwindcss/typography':
specifier: ^0.5.13
version: 0.5.13(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))
version: 0.5.13(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)))
'@vueuse/components':
specifier: ^10.10.0
version: 10.10.0(vue@3.4.27(typescript@5.4.5))
@@ -103,7 +103,7 @@ importers:
version: 7.1.0
tailwindcss:
specifier: ^3.4.3
version: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
version: 3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5))
unplugin-auto-import:
specifier: ^0.17.6
version: 0.17.6(@vueuse/core@10.10.0(vue@3.4.27(typescript@5.4.5)))(rollup@4.17.2)
@@ -115,19 +115,19 @@ importers:
version: 0.27.0(@babel/parser@7.24.5)(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
unplugin-vue-macros:
specifier: ^2.9.3
version: 2.9.3(@vueuse/core@10.10.0(vue@3.4.27(typescript@5.4.5)))(esbuild@0.21.2)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12))(vue@3.4.27(typescript@5.4.5))
version: 2.9.3(@vueuse/core@10.10.0(vue@3.4.27(typescript@5.4.5)))(esbuild@0.21.2)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.0))(vue@3.4.27(typescript@5.4.5))
vite:
specifier: 5.2.12
version: 5.2.12(@types/node@20.12.12)
version: 5.2.12(@types/node@20.14.0)
vite-plugin-compression2:
specifier: ^1.1.1
version: 1.1.1(rollup@4.17.2)
vite-plugin-pages:
specifier: ^0.32.2
version: 0.32.2(@vue/compiler-sfc@3.4.27)(vite@5.2.12(@types/node@20.12.12))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))
version: 0.32.2(@vue/compiler-sfc@3.4.27)(vite@5.2.12(@types/node@20.14.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))
vite-plugin-vue-layouts:
specifier: ^0.11.0
version: 0.11.0(vite@5.2.12(@types/node@20.12.12))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
version: 0.11.0(vite@5.2.12(@types/node@20.14.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
vue:
specifier: ^3.4.27
version: 3.4.27(typescript@5.4.5)
@@ -139,8 +139,8 @@ importers:
version: 4.3.2(vue@3.4.27(typescript@5.4.5))
devDependencies:
'@iconify-json/material-symbols':
specifier: ^1.1.80
version: 1.1.80
specifier: ^1.1.81
version: 1.1.81
'@pinia/testing':
specifier: ^0.1.3
version: 0.1.3(pinia@2.1.7(typescript@5.4.5)(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
@@ -169,11 +169,11 @@ importers:
specifier: ^4.0.9
version: 4.0.9
'@types/node':
specifier: ^20.12.12
version: 20.12.12
specifier: ^20.14.0
version: 20.14.0
'@vitejs/plugin-vue':
specifier: 5.0.4
version: 5.0.4(vite@5.2.12(@types/node@20.12.12))(vue@3.4.27(typescript@5.4.5))
specifier: 5.0.5
version: 5.0.5(vite@5.2.12(@types/node@20.14.0))(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-sfc':
specifier: ^3.4.27
version: 3.4.27
@@ -199,26 +199,26 @@ importers:
specifier: ^15.2.5
version: 15.2.5
prettier:
specifier: ^3.2.5
version: 3.2.5
specifier: ^3.3.0
version: 3.3.0
prettier-plugin-tailwindcss:
specifier: ^0.5.14
version: 0.5.14(prettier@3.2.5)
specifier: ^0.6.1
version: 0.6.1(prettier@3.3.0)
simple-git-hooks:
specifier: ^2.11.1
version: 2.11.1
ts-node:
specifier: ^10.9.2
version: 10.9.2(@types/node@20.12.12)(typescript@5.4.5)
version: 10.9.2(@types/node@20.14.0)(typescript@5.4.5)
typescript:
specifier: ^5.4.5
version: 5.4.5
vitepress:
specifier: 1.2.2
version: 1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(fuse.js@7.0.0)(postcss@8.4.38)(search-insights@2.13.0)(typescript@5.4.5)
version: 1.2.2(@algolia/client-search@4.23.3)(@types/node@20.14.0)(fuse.js@7.0.0)(postcss@8.4.38)(search-insights@2.13.0)(typescript@5.4.5)
vitest:
specifier: ^1.6.0
version: 1.6.0(@types/node@20.12.12)(jsdom@24.1.0)
version: 1.6.0(@types/node@20.14.0)(jsdom@24.1.0)
vue-component-type-helpers:
specifier: ^2.0.19
version: 2.0.19
@@ -676,8 +676,8 @@ packages:
'@iconify-json/ic@1.1.17':
resolution: {integrity: sha512-EvAjZzVESmN36zlyefylePUNaU2BQ3eRKVZ6KQSQ2bG01ppoZaiFZRri74VTyvp5Mlv2yn68ux1fgCoT+etGmA==}
'@iconify-json/material-symbols@1.1.80':
resolution: {integrity: sha512-JrDMmWeHxFFMp3BBSsjvDvSiYzJ0qdYmHAQYWY/L5fxVZcIoeoQvtQR0wM1iJN4UDIsnHwbpJQ/sqZ/cvph6sw==}
'@iconify-json/material-symbols@1.1.81':
resolution: {integrity: sha512-DJhgiZQ935K2pG/ZhChLOA0tcQFZn8jCc1SVhiPY1cdjPslyamD569zaBm4Op5cAf6ouK8m6W85YVV8hXBLMgg==}
'@iconify-json/mdi-light@1.1.10':
resolution: {integrity: sha512-zs1/O6JV/IK0sTMgrc8EgeVvm9QzY4WgsIWc2c4IMgj3k9q79TXNDI6E6oDLVN3xU4B5THiM3Us3L7+dMUZqtg==}
@@ -988,14 +988,14 @@ packages:
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
'@types/node@20.12.12':
resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
'@types/node@20.14.0':
resolution: {integrity: sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==}
'@types/web-bluetooth@0.0.20':
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
'@vitejs/plugin-vue@5.0.4':
resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
'@vitejs/plugin-vue@5.0.5':
resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
@@ -2590,8 +2590,8 @@ packages:
preact@10.20.2:
resolution: {integrity: sha512-S1d1ernz3KQ+Y2awUxKakpfOg2CEmJmwOP+6igPx6dgr6pgDvenqYviyokWso2rhHvGtTlWWnJDa7RaPbQerTg==}
prettier-plugin-tailwindcss@0.5.14:
resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==}
prettier-plugin-tailwindcss@0.6.1:
resolution: {integrity: sha512-AnbeYZu0WGj+QgKciUgdMnRxrqcxltleZPgdwfA5104BHM3siBLONN/HLW1yS2HvzSNkzpQ/JAj+LN0jcJO+0w==}
engines: {node: '>=14.21.3'}
peerDependencies:
'@ianvs/prettier-plugin-sort-imports': '*'
@@ -2642,8 +2642,8 @@ packages:
prettier-plugin-svelte:
optional: true
prettier@3.2.5:
resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
prettier@3.3.0:
resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==}
engines: {node: '>=14'}
hasBin: true
@@ -3738,7 +3738,7 @@ snapshots:
dependencies:
'@iconify/types': 2.0.0
'@iconify-json/material-symbols@1.1.80':
'@iconify-json/material-symbols@1.1.81':
dependencies:
'@iconify/types': 2.0.0
@@ -3966,17 +3966,17 @@ snapshots:
'@sinclair/typebox@0.27.8': {}
'@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))':
'@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)))':
dependencies:
tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5))
'@tailwindcss/typography@0.5.13(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)))':
'@tailwindcss/typography@0.5.13(tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)))':
dependencies:
lodash.castarray: 4.4.0
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
tailwindcss: 3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5))
'@tsconfig/node10@1.0.11': {}
@@ -4033,15 +4033,15 @@ snapshots:
'@types/ms@0.7.34': {}
'@types/node@20.12.12':
'@types/node@20.14.0':
dependencies:
undici-types: 5.26.5
'@types/web-bluetooth@0.0.20': {}
'@vitejs/plugin-vue@5.0.4(vite@5.2.12(@types/node@20.12.12))(vue@3.4.27(typescript@5.4.5))':
'@vitejs/plugin-vue@5.0.5(vite@5.2.12(@types/node@20.14.0))(vue@3.4.27(typescript@5.4.5))':
dependencies:
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
vue: 3.4.27(typescript@5.4.5)
'@vitest/expect@1.6.0':
@@ -4195,12 +4195,12 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/devtools@0.2.0(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12))':
'@vue-macros/devtools@0.2.0(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.0))':
dependencies:
sirv: 2.0.4
vue: 3.4.27(typescript@5.4.5)
optionalDependencies:
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
transitivePeerDependencies:
- typescript
@@ -5780,13 +5780,13 @@ snapshots:
camelcase-css: 2.0.1
postcss: 8.4.38
postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)):
dependencies:
lilconfig: 3.1.1
yaml: 2.4.2
optionalDependencies:
postcss: 8.4.38
ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.4.5)
ts-node: 10.9.2(@types/node@20.14.0)(typescript@5.4.5)
postcss-nested@6.0.1(postcss@8.4.38):
dependencies:
@@ -5813,11 +5813,11 @@ snapshots:
preact@10.20.2: {}
prettier-plugin-tailwindcss@0.5.14(prettier@3.2.5):
prettier-plugin-tailwindcss@0.6.1(prettier@3.3.0):
dependencies:
prettier: 3.2.5
prettier: 3.3.0
prettier@3.2.5: {}
prettier@3.3.0: {}
pretty-format@29.7.0:
dependencies:
@@ -6118,7 +6118,7 @@ snapshots:
tabbable@6.2.0: {}
tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5)):
tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -6137,7 +6137,7 @@ snapshots:
postcss: 8.4.38
postcss-import: 15.1.0(postcss@8.4.38)
postcss-js: 4.0.1(postcss@8.4.38)
postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5))
postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5))
postcss-nested: 6.0.1(postcss@8.4.38)
postcss-selector-parser: 6.0.16
resolve: 1.22.8
@@ -6208,14 +6208,14 @@ snapshots:
ts-interface-checker@0.1.13: {}
ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5):
ts-node@10.9.2(@types/node@20.14.0)(typescript@5.4.5):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.12.12
'@types/node': 20.14.0
acorn: 8.11.3
acorn-walk: 8.3.2
arg: 4.1.3
@@ -6271,14 +6271,14 @@ snapshots:
transitivePeerDependencies:
- rollup
unplugin-combine@1.0.0(esbuild@0.21.2)(rollup@4.17.2)(vite@5.2.12(@types/node@20.12.12)):
unplugin-combine@1.0.0(esbuild@0.21.2)(rollup@4.17.2)(vite@5.2.12(@types/node@20.14.0)):
dependencies:
'@antfu/utils': 0.7.8
unplugin: 1.10.1
optionalDependencies:
esbuild: 0.21.2
rollup: 4.17.2
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
unplugin-icons@0.19.0(@vue/compiler-sfc@3.4.27)(vue-template-compiler@2.7.16):
dependencies:
@@ -6323,7 +6323,7 @@ snapshots:
- rollup
- vue
unplugin-vue-macros@2.9.3(@vueuse/core@10.10.0(vue@3.4.27(typescript@5.4.5)))(esbuild@0.21.2)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12))(vue@3.4.27(typescript@5.4.5)):
unplugin-vue-macros@2.9.3(@vueuse/core@10.10.0(vue@3.4.27(typescript@5.4.5)))(esbuild@0.21.2)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.0))(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue-macros/better-define': 1.7.7(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/boolean-prop': 0.3.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
@@ -6336,7 +6336,7 @@ snapshots:
'@vue-macros/define-props-refs': 1.2.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-render': 1.5.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-slots': 1.1.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/devtools': 0.2.0(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12))
'@vue-macros/devtools': 0.2.0(typescript@5.4.5)(vite@5.2.12(@types/node@20.14.0))
'@vue-macros/export-expose': 0.1.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/export-props': 0.4.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/export-render': 0.2.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
@@ -6351,7 +6351,7 @@ snapshots:
'@vue-macros/short-emits': 1.5.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/short-vmodel': 1.4.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
unplugin-combine: 1.0.0(esbuild@0.21.2)(rollup@4.17.2)(vite@5.2.12(@types/node@20.12.12))
unplugin-combine: 1.0.0(esbuild@0.21.2)(rollup@4.17.2)(vite@5.2.12(@types/node@20.14.0))
unplugin-vue-define-options: 1.4.5(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
@@ -6390,13 +6390,13 @@ snapshots:
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
vite-node@1.6.0(@types/node@20.12.12):
vite-node@1.6.0(@types/node@20.14.0):
dependencies:
cac: 6.7.14
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -6415,7 +6415,7 @@ snapshots:
transitivePeerDependencies:
- rollup
vite-plugin-pages@0.32.2(@vue/compiler-sfc@3.4.27)(vite@5.2.12(@types/node@20.12.12))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5))):
vite-plugin-pages@0.32.2(@vue/compiler-sfc@3.4.27)(vite@5.2.12(@types/node@20.14.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5))):
dependencies:
'@types/debug': 4.1.12
debug: 4.3.4
@@ -6425,7 +6425,7 @@ snapshots:
json5: 2.2.3
local-pkg: 0.5.0
picocolors: 1.0.1
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
yaml: 2.4.2
optionalDependencies:
'@vue/compiler-sfc': 3.4.27
@@ -6433,33 +6433,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
vite-plugin-vue-layouts@0.11.0(vite@5.2.12(@types/node@20.12.12))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)):
vite-plugin-vue-layouts@0.11.0(vite@5.2.12(@types/node@20.14.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)):
dependencies:
debug: 4.3.4
fast-glob: 3.3.2
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
vue: 3.4.27(typescript@5.4.5)
vue-router: 4.3.2(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- supports-color
vite@5.2.12(@types/node@20.12.12):
vite@5.2.12(@types/node@20.14.0):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.17.2
optionalDependencies:
'@types/node': 20.12.12
'@types/node': 20.14.0
fsevents: 2.3.3
vitepress@1.2.2(@algolia/client-search@4.23.3)(@types/node@20.12.12)(fuse.js@7.0.0)(postcss@8.4.38)(search-insights@2.13.0)(typescript@5.4.5):
vitepress@1.2.2(@algolia/client-search@4.23.3)(@types/node@20.14.0)(fuse.js@7.0.0)(postcss@8.4.38)(search-insights@2.13.0)(typescript@5.4.5):
dependencies:
'@docsearch/css': 3.6.0
'@docsearch/js': 3.6.0(@algolia/client-search@4.23.3)(search-insights@2.13.0)
'@shikijs/core': 1.6.0
'@shikijs/transformers': 1.6.0
'@types/markdown-it': 14.1.1
'@vitejs/plugin-vue': 5.0.4(vite@5.2.12(@types/node@20.12.12))(vue@3.4.27(typescript@5.4.5))
'@vitejs/plugin-vue': 5.0.5(vite@5.2.12(@types/node@20.14.0))(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-api': 7.2.1(vue@3.4.27(typescript@5.4.5))
'@vue/shared': 3.4.27
'@vueuse/core': 10.10.0(vue@3.4.27(typescript@5.4.5))
@@ -6468,7 +6468,7 @@ snapshots:
mark.js: 8.11.1
minisearch: 6.3.0
shiki: 1.6.0
vite: 5.2.12(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
vue: 3.4.27(typescript@5.4.5)
optionalDependencies:
postcss: 8.4.38
@@ -6499,7 +6499,7 @@ snapshots:
- typescript
- universal-cookie
vitest@1.6.0(@types/node@20.12.12)(jsdom@24.1.0):
vitest@1.6.0(@types/node@20.14.0)(jsdom@24.1.0):
dependencies:
'@vitest/expect': 1.6.0
'@vitest/runner': 1.6.0
@@ -6518,11 +6518,11 @@ snapshots:
strip-literal: 2.1.0
tinybench: 2.6.0
tinypool: 0.8.3
vite: 5.2.12(@types/node@20.12.12)
vite-node: 1.6.0(@types/node@20.12.12)
vite: 5.2.12(@types/node@20.14.0)
vite-node: 1.6.0(@types/node@20.14.0)
why-is-node-running: 2.2.2
optionalDependencies:
'@types/node': 20.12.12
'@types/node': 20.14.0
jsdom: 24.1.0
transitivePeerDependencies:
- less