Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c486d57fc | ||
|
|
41acf28be9 | ||
|
|
21e5f4fc56 | ||
|
|
2d54cbba9c | ||
|
|
88844c895c | ||
|
|
7aa7f42c52 | ||
|
|
59f4b0da4f | ||
|
|
e99e6ebd49 |
10
Dockerfile
10
Dockerfile
@@ -10,15 +10,17 @@ WORKDIR /build
|
||||
COPY pnpm-lock.yaml ./
|
||||
RUN pnpm fetch --prod
|
||||
|
||||
# Copy files
|
||||
COPY package.json .* vite.config.ts index.html ./
|
||||
# Copy package.json and install dependencies
|
||||
COPY package.json ./
|
||||
RUN pnpm install -r --offline --prod --ignore-scripts
|
||||
|
||||
# Copy assets and translations to build
|
||||
COPY .* vite.config.ts index.html ./
|
||||
COPY assets ./assets
|
||||
COPY locales ./locales
|
||||
|
||||
# Install dependencies
|
||||
RUN pnpm install -r --offline --prod --ignore-scripts && pnpm build
|
||||
# Build assets
|
||||
RUN pnpm build
|
||||
|
||||
FROM --platform=$BUILDPLATFORM golang:1.19.1-alpine AS builder
|
||||
|
||||
|
||||
@@ -3,26 +3,29 @@
|
||||
<o-autocomplete
|
||||
ref="autocomplete"
|
||||
v-model="query"
|
||||
placeholder="Search containers using ⌘ + k or ctrl + k"
|
||||
field="name"
|
||||
:placeholder="$t('placeholder.search-containers')"
|
||||
open-on-focus
|
||||
keep-first
|
||||
expanded
|
||||
:data="results"
|
||||
:data="data"
|
||||
@select="selected"
|
||||
>
|
||||
<template #default="props">
|
||||
<template #default="{ option: item }">
|
||||
<div class="media">
|
||||
<div class="media-left">
|
||||
<span class="icon is-small" :class="props.option.state">
|
||||
<span class="icon is-small" :class="item.state">
|
||||
<octicon-container-24 />
|
||||
</span>
|
||||
</div>
|
||||
<div class="media-content">
|
||||
{{ props.option.name }}
|
||||
{{ item.name }}
|
||||
</div>
|
||||
<div class="media-right">
|
||||
<span class="icon is-small column-icon" @click.stop.prevent="addColumn(props.option)" title="Pin as column">
|
||||
<span
|
||||
class="icon is-small column-icon"
|
||||
@click.stop.prevent="addColumn(item)"
|
||||
:title="$t('tooltip.pin-column')"
|
||||
>
|
||||
<cil-columns />
|
||||
</span>
|
||||
</div>
|
||||
@@ -33,55 +36,61 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import fuzzysort from "fuzzysort";
|
||||
import { type Container } from "@/types/Container";
|
||||
import { useFuse } from "@vueuse/integrations/useFuse";
|
||||
|
||||
const { maxResults = 20 } = defineProps<{
|
||||
const { maxResults: resultLimit = 20 } = defineProps<{
|
||||
maxResults?: number;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits(["close"]);
|
||||
const emit = defineEmits<{
|
||||
(e: "close"): void;
|
||||
}>();
|
||||
|
||||
const query = ref("");
|
||||
const autocomplete = ref<HTMLElement>();
|
||||
const router = useRouter();
|
||||
const store = useContainerStore();
|
||||
const { containers } = storeToRefs(store);
|
||||
const preparedContainers = computed(() =>
|
||||
containers.value.map(({ name, id, created, state }) =>
|
||||
reactive({
|
||||
name,
|
||||
|
||||
const list = computed(() => {
|
||||
return containers.value.map(({ id, created, name, state }) => {
|
||||
return {
|
||||
id,
|
||||
created,
|
||||
name,
|
||||
state,
|
||||
preparedName: fuzzysort.prepare(name),
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
const results = computed(() => {
|
||||
const options = {
|
||||
limit: maxResults,
|
||||
key: "preparedName",
|
||||
};
|
||||
if (query.value) {
|
||||
const results = fuzzysort.go(query.value, preparedContainers.value, options);
|
||||
results.forEach((result) => {
|
||||
if (result.obj.state === "running") {
|
||||
// @ts-ignore
|
||||
result.score += 1;
|
||||
}
|
||||
});
|
||||
return [...results].sort((a, b) => b.score - a.score).map((i) => i.obj);
|
||||
} else {
|
||||
return [...preparedContainers.value].sort((a, b) => b.created - a.created);
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
onMounted(() => nextTick(() => autocomplete.value?.focus()));
|
||||
const { results } = useFuse(query, list, {
|
||||
fuseOptions: { keys: ["name"], includeScore: true },
|
||||
resultLimit,
|
||||
matchAllWhenSearchEmpty: true,
|
||||
});
|
||||
|
||||
function selected(item: { id: string; name: string }) {
|
||||
router.push({ name: "container-id", params: { id: item.id } });
|
||||
const data = computed(() => {
|
||||
return results.value
|
||||
.sort((a, b) => {
|
||||
if (a.score === b.score) {
|
||||
if (a.item.state === "running" && b.item.state !== "running") {
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
} else if (a.score && b.score) {
|
||||
return a.score - b.score;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
.map(({ item }) => item);
|
||||
});
|
||||
watchOnce(autocomplete, () => autocomplete.value?.focus());
|
||||
|
||||
function selected({ id }: { id: string }) {
|
||||
router.push({ name: "container-id", params: { id } });
|
||||
emit("close");
|
||||
}
|
||||
function addColumn(container: Container) {
|
||||
|
||||
@@ -22,23 +22,17 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
const { Meta_F, Ctrl_F, esc } = useMagicKeys({
|
||||
passive: false,
|
||||
onEventFired(e) {
|
||||
if ((e.ctrlKey || e.metaKey) && e.key === "f" && e.type === "keydown") e.preventDefault();
|
||||
},
|
||||
});
|
||||
const input = ref<HTMLInputElement>();
|
||||
const { searchFilter, showSearch, resetSearch } = useSearchFilter();
|
||||
|
||||
whenever(
|
||||
() => Meta_F.value || Ctrl_F.value,
|
||||
() => {
|
||||
onKeyStroke("f", (e) => {
|
||||
if (e.ctrlKey || e.metaKey) {
|
||||
showSearch.value = true;
|
||||
nextTick(() => input.value?.focus() || input.value?.select());
|
||||
e.preventDefault();
|
||||
}
|
||||
);
|
||||
whenever(esc, () => resetSearch());
|
||||
});
|
||||
|
||||
onUnmounted(() => resetSearch());
|
||||
</script>
|
||||
|
||||
|
||||
@@ -50,19 +50,21 @@ import FuzzySearchModal from "@/components/FuzzySearchModal.vue";
|
||||
const collapseNav = ref(false);
|
||||
const { oruga } = useProgrammatic();
|
||||
const { authorizationNeeded } = config;
|
||||
const { Meta_K, Ctrl_K } = useMagicKeys();
|
||||
|
||||
const containerStore = useContainerStore();
|
||||
const { activeContainers, visibleContainers } = storeToRefs(containerStore);
|
||||
|
||||
whenever(
|
||||
() => Meta_K.value || Ctrl_K.value,
|
||||
() => showFuzzySearch()
|
||||
);
|
||||
|
||||
watchEffect(() => {
|
||||
setTitle(`${visibleContainers.value.length} containers`);
|
||||
});
|
||||
|
||||
onKeyStroke("k", (e) => {
|
||||
if (e.ctrlKey || e.metaKey) {
|
||||
showFuzzySearch();
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
function showFuzzySearch() {
|
||||
oruga.modal.open({
|
||||
// parent: this,
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
class="input"
|
||||
type="text"
|
||||
:placeholder="$t('placeholder.search-containers')"
|
||||
v-model="search"
|
||||
@keyup.esc="search.value = null"
|
||||
v-model="query"
|
||||
@keyup.esc="query = ''"
|
||||
@keyup.enter="onEnter()"
|
||||
/>
|
||||
<span class="icon is-left">
|
||||
@@ -63,13 +63,13 @@
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<p class="panel-tabs" v-if="!search">
|
||||
<p class="panel-tabs" v-if="query === ''">
|
||||
<a :class="{ 'is-active': sort === 'running' }" @click="sort = 'running'">{{ $t("label.running") }}</a>
|
||||
<a :class="{ 'is-active': sort === 'all' }" @click="sort = 'all'">{{ $t("label.all") }}</a>
|
||||
</p>
|
||||
<router-link
|
||||
:to="{ name: 'container-id', params: { id: item.id } }"
|
||||
v-for="item in results.slice(0, 10)"
|
||||
v-for="item in data.slice(0, 10)"
|
||||
:key="item.id"
|
||||
class="panel-block"
|
||||
>
|
||||
@@ -86,54 +86,59 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import fuzzysort from "fuzzysort";
|
||||
import SearchIcon from "~icons/mdi-light/magnify";
|
||||
import { useFuse } from "@vueuse/integrations/useFuse";
|
||||
|
||||
const { base, version, secured } = config;
|
||||
const containerStore = useContainerStore();
|
||||
const { containers } = storeToRefs(containerStore);
|
||||
const router = useRouter();
|
||||
|
||||
const sort = ref("running");
|
||||
const search = ref();
|
||||
const sort = $ref("running");
|
||||
const query = ref("");
|
||||
|
||||
const results = computed(() => {
|
||||
if (search.value) {
|
||||
return fuzzysort.go(search.value, containers.value, { key: "name" }).map((i) => i.obj);
|
||||
const mostRecentContainers = $computed(() => [...containers.value].sort((a, b) => b.created - a.created));
|
||||
const runningContainers = $computed(() => mostRecentContainers.filter((c) => c.state === "running"));
|
||||
|
||||
const { results } = useFuse(query, containers, {
|
||||
fuseOptions: { keys: ["name"] },
|
||||
matchAllWhenSearchEmpty: false,
|
||||
});
|
||||
const data = computed(() => {
|
||||
if (results.value.length) {
|
||||
return results.value.map(({ item }) => item);
|
||||
}
|
||||
switch (sort.value) {
|
||||
switch (sort) {
|
||||
case "all":
|
||||
return mostRecentContainers.value;
|
||||
return mostRecentContainers;
|
||||
case "running":
|
||||
return runningContainers.value;
|
||||
return runningContainers;
|
||||
default:
|
||||
throw `Invalid sort order: ${sort.value}`;
|
||||
throw `Invalid sort order: ${sort}`;
|
||||
}
|
||||
});
|
||||
|
||||
const mostRecentContainers = computed(() => [...containers.value].sort((a, b) => b.created - a.created));
|
||||
const runningContainers = computed(() => mostRecentContainers.value.filter((c) => c.state === "running"));
|
||||
const totalCpu = ref(0);
|
||||
let totalCpu = $ref(0);
|
||||
useIntervalFn(
|
||||
() => {
|
||||
totalCpu.value = runningContainers.value.reduce((acc, c) => acc + (c.stat?.cpu ?? 0), 0);
|
||||
totalCpu = runningContainers.reduce((acc, c) => acc + (c.stat?.cpu ?? 0), 0);
|
||||
},
|
||||
1000,
|
||||
{ immediate: true }
|
||||
);
|
||||
const totalMem = ref(0);
|
||||
|
||||
let totalMem = $ref(0);
|
||||
useIntervalFn(
|
||||
() => {
|
||||
totalMem.value = runningContainers.value.reduce((acc, c) => acc + (c.stat?.memoryUsage ?? 0), 0);
|
||||
totalMem = runningContainers.reduce((acc, c) => acc + (c.stat?.memoryUsage ?? 0), 0);
|
||||
},
|
||||
1000,
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
function onEnter() {
|
||||
if (results.value.length == 1) {
|
||||
const [item] = results.value;
|
||||
if (data.value.length > 0) {
|
||||
const item = data.value[0];
|
||||
router.push({ name: "container-id", params: { id: item.id } });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,8 +54,8 @@
|
||||
class="input"
|
||||
type="text"
|
||||
:placeholder="$t('placeholder.search-containers')"
|
||||
v-model="search"
|
||||
@keyup.esc="search.value = null"
|
||||
v-model="query"
|
||||
@keyup.esc="query = ''"
|
||||
@keyup.enter="onEnter()"
|
||||
/>
|
||||
<span class="icon is-left">
|
||||
@@ -63,13 +63,13 @@
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<p class="panel-tabs" v-if="!search">
|
||||
<p class="panel-tabs" v-if="query === ''">
|
||||
<a :class="{ 'is-active': sort === 'running' }" @click="sort = 'running'">{{ $t("label.running") }}</a>
|
||||
<a :class="{ 'is-active': sort === 'all' }" @click="sort = 'all'">{{ $t("label.all") }}</a>
|
||||
</p>
|
||||
<router-link
|
||||
:to="{ name: 'container-id', params: { id: item.id } }"
|
||||
v-for="item in results.slice(0, 10)"
|
||||
v-for="item in data.slice(0, 10)"
|
||||
:key="item.id"
|
||||
class="panel-block"
|
||||
>
|
||||
@@ -86,54 +86,59 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import fuzzysort from "fuzzysort";
|
||||
import SearchIcon from "~icons/mdi-light/magnify";
|
||||
import { useFuse } from "@vueuse/integrations/useFuse";
|
||||
|
||||
const { base, version, secured } = config;
|
||||
const containerStore = useContainerStore();
|
||||
const { containers } = storeToRefs(containerStore);
|
||||
const router = useRouter();
|
||||
|
||||
const sort = ref("running");
|
||||
const search = ref();
|
||||
const sort = $ref("running");
|
||||
const query = ref("");
|
||||
|
||||
const results = computed(() => {
|
||||
if (search.value) {
|
||||
return fuzzysort.go(search.value, containers.value, { key: "name" }).map((i) => i.obj);
|
||||
const mostRecentContainers = $computed(() => [...containers.value].sort((a, b) => b.created - a.created));
|
||||
const runningContainers = $computed(() => mostRecentContainers.filter((c) => c.state === "running"));
|
||||
|
||||
const { results } = useFuse(query, containers, {
|
||||
fuseOptions: { keys: ["name"] },
|
||||
matchAllWhenSearchEmpty: false,
|
||||
});
|
||||
const data = computed(() => {
|
||||
if (results.value.length) {
|
||||
return results.value.map(({ item }) => item);
|
||||
}
|
||||
switch (sort.value) {
|
||||
switch (sort) {
|
||||
case "all":
|
||||
return mostRecentContainers.value;
|
||||
return mostRecentContainers;
|
||||
case "running":
|
||||
return runningContainers.value;
|
||||
return runningContainers;
|
||||
default:
|
||||
throw `Invalid sort order: ${sort.value}`;
|
||||
throw `Invalid sort order: ${sort}`;
|
||||
}
|
||||
});
|
||||
|
||||
const mostRecentContainers = computed(() => [...containers.value].sort((a, b) => b.created - a.created));
|
||||
const runningContainers = computed(() => mostRecentContainers.value.filter((c) => c.state === "running"));
|
||||
const totalCpu = ref(0);
|
||||
let totalCpu = $ref(0);
|
||||
useIntervalFn(
|
||||
() => {
|
||||
totalCpu.value = runningContainers.value.reduce((acc, c) => acc + (c.stat?.cpu ?? 0), 0);
|
||||
totalCpu = runningContainers.reduce((acc, c) => acc + (c.stat?.cpu ?? 0), 0);
|
||||
},
|
||||
1000,
|
||||
{ immediate: true }
|
||||
);
|
||||
const totalMem = ref(0);
|
||||
|
||||
let totalMem = $ref(0);
|
||||
useIntervalFn(
|
||||
() => {
|
||||
totalMem.value = runningContainers.value.reduce((acc, c) => acc + (c.stat?.memoryUsage ?? 0), 0);
|
||||
totalMem = runningContainers.reduce((acc, c) => acc + (c.stat?.memoryUsage ?? 0), 0);
|
||||
},
|
||||
1000,
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
function onEnter() {
|
||||
if (results.value.length == 1) {
|
||||
const [item] = results.value;
|
||||
if (data.value.length > 0) {
|
||||
const item = data.value[0];
|
||||
router.push({ name: "container-id", params: { id: item.id } });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ context("Dozzle default mode", { baseUrl: Cypress.env("DOZZLE_DEFAULT") }, () =>
|
||||
cy.get("li.running", { timeout: 10000 }).removeDates().replaceSkippedElements().matchImage();
|
||||
});
|
||||
|
||||
it("correct title", () => {
|
||||
it("correct title is shown", () => {
|
||||
cy.title().should("eq", "1 containers - Dozzle");
|
||||
|
||||
cy.get("li.running:first a").click();
|
||||
@@ -17,9 +17,15 @@ context("Dozzle default mode", { baseUrl: Cypress.env("DOZZLE_DEFAULT") }, () =>
|
||||
cy.title().should("include", "- Dozzle");
|
||||
});
|
||||
|
||||
it("settings page", () => {
|
||||
it("navigating to setting page works ", () => {
|
||||
cy.get("a[href='/settings']").click();
|
||||
|
||||
cy.contains("About");
|
||||
});
|
||||
|
||||
it("shortcut for fuzzy search works", () => {
|
||||
cy.get("body").type("{ctrl}k");
|
||||
|
||||
cy.get("input[placeholder='Search containers (⌘ + k, ⌃k)']").should("be.visible");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ button:
|
||||
logout: Logout
|
||||
login: Login
|
||||
placeholder:
|
||||
search-containers: Search Containers
|
||||
search-containers: Search containers (⌘ + k, ⌃k)
|
||||
settings:
|
||||
display: Display
|
||||
small-scrollbars: Use smaller scrollbars
|
||||
|
||||
@@ -27,7 +27,7 @@ button:
|
||||
logout: Cerrar la sesión
|
||||
login: Iniciar sesión
|
||||
placeholder:
|
||||
search-containers: Buscar Contenedores
|
||||
search-containers: Buscar contenedores (⌘ + K, CTRL + K)
|
||||
settings:
|
||||
display: Vista
|
||||
small-scrollbars: Utilizar barras de desplazamiento más pequeñas
|
||||
|
||||
@@ -27,7 +27,7 @@ button:
|
||||
logout: Terminar sessão
|
||||
login: Iniciar sessão
|
||||
placeholder:
|
||||
search-containers: Pesquisar Contentores
|
||||
search-containers: Pesquisar contentores (⌘ + K, CTRL + K)
|
||||
settings:
|
||||
display: Visão
|
||||
small-scrollbars: Usar barras de rolagem mais pequenas
|
||||
|
||||
17
package.json
17
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "dozzle",
|
||||
"version": "4.1.6",
|
||||
"version": "4.1.8",
|
||||
"description": "Realtime log viewer for docker containers. ",
|
||||
"homepage": "https://github.com/amir20/dozzle#readme",
|
||||
"bugs": {
|
||||
@@ -26,21 +26,22 @@
|
||||
"@iconify-json/cil": "^1.1.2",
|
||||
"@iconify-json/mdi": "^1.1.33",
|
||||
"@iconify-json/mdi-light": "^1.1.2",
|
||||
"@iconify-json/octicon": "^1.1.17",
|
||||
"@intlify/vite-plugin-vue-i18n": "^6.0.1",
|
||||
"@iconify-json/octicon": "^1.1.19",
|
||||
"@intlify/vite-plugin-vue-i18n": "^6.0.2",
|
||||
"@oruga-ui/oruga-next": "^0.5.6",
|
||||
"@oruga-ui/theme-bulma": "^0.2.7",
|
||||
"@vitejs/plugin-vue": "3.1.0",
|
||||
"@vue/compiler-sfc": "^3.2.39",
|
||||
"@vueuse/core": "^9.2.0",
|
||||
"@vueuse/router": "^9.2.0",
|
||||
"@vueuse/core": "^9.3.0",
|
||||
"@vueuse/integrations": "^9.3.0",
|
||||
"@vueuse/router": "^9.3.0",
|
||||
"ansi-to-html": "^0.7.2",
|
||||
"bulma": "^0.9.4",
|
||||
"date-fns": "^2.29.3",
|
||||
"fuzzysort": "^2.0.1",
|
||||
"fuse.js": "^6.6.2",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"pinia": "^2.0.22",
|
||||
"sass": "^1.54.9",
|
||||
"sass": "^1.55.0",
|
||||
"semver": "^7.3.7",
|
||||
"splitpanes": "^3.1.1",
|
||||
"typescript": "^4.8.3",
|
||||
@@ -57,7 +58,7 @@
|
||||
"devDependencies": {
|
||||
"@pinia/testing": "^0.0.14",
|
||||
"@types/lodash.debounce": "^4.0.7",
|
||||
"@types/node": "^18.7.18",
|
||||
"@types/node": "^18.7.22",
|
||||
"@types/semver": "^7.3.12",
|
||||
"@vue/test-utils": "^2.0.2",
|
||||
"c8": "^7.12.0",
|
||||
|
||||
167
pnpm-lock.yaml
generated
167
pnpm-lock.yaml
generated
@@ -5,25 +5,26 @@ specifiers:
|
||||
'@iconify-json/cil': ^1.1.2
|
||||
'@iconify-json/mdi': ^1.1.33
|
||||
'@iconify-json/mdi-light': ^1.1.2
|
||||
'@iconify-json/octicon': ^1.1.17
|
||||
'@intlify/vite-plugin-vue-i18n': ^6.0.1
|
||||
'@iconify-json/octicon': ^1.1.19
|
||||
'@intlify/vite-plugin-vue-i18n': ^6.0.2
|
||||
'@oruga-ui/oruga-next': ^0.5.6
|
||||
'@oruga-ui/theme-bulma': ^0.2.7
|
||||
'@pinia/testing': ^0.0.14
|
||||
'@types/lodash.debounce': ^4.0.7
|
||||
'@types/node': ^18.7.18
|
||||
'@types/node': ^18.7.22
|
||||
'@types/semver': ^7.3.12
|
||||
'@vitejs/plugin-vue': 3.1.0
|
||||
'@vue/compiler-sfc': ^3.2.39
|
||||
'@vue/test-utils': ^2.0.2
|
||||
'@vueuse/core': ^9.2.0
|
||||
'@vueuse/router': ^9.2.0
|
||||
'@vueuse/core': ^9.3.0
|
||||
'@vueuse/integrations': ^9.3.0
|
||||
'@vueuse/router': ^9.3.0
|
||||
ansi-to-html: ^0.7.2
|
||||
bulma: ^0.9.4
|
||||
c8: ^7.12.0
|
||||
date-fns: ^2.29.3
|
||||
eventsourcemock: ^2.0.0
|
||||
fuzzysort: ^2.0.1
|
||||
fuse.js: ^6.6.2
|
||||
husky: ^8.0.1
|
||||
jest-serializer-vue: ^2.0.2
|
||||
jsdom: ^20.0.0
|
||||
@@ -33,7 +34,7 @@ specifiers:
|
||||
pinia: ^2.0.22
|
||||
prettier: ^2.7.1
|
||||
release-it: ^15.4.2
|
||||
sass: ^1.54.9
|
||||
sass: ^1.55.0
|
||||
semver: ^7.3.7
|
||||
splitpanes: ^3.1.1
|
||||
ts-node: ^10.9.1
|
||||
@@ -55,28 +56,29 @@ dependencies:
|
||||
'@iconify-json/cil': 1.1.2
|
||||
'@iconify-json/mdi': 1.1.33
|
||||
'@iconify-json/mdi-light': 1.1.2
|
||||
'@iconify-json/octicon': 1.1.17
|
||||
'@intlify/vite-plugin-vue-i18n': 6.0.1_vite@3.1.3+vue-i18n@9.2.2
|
||||
'@iconify-json/octicon': 1.1.19
|
||||
'@intlify/vite-plugin-vue-i18n': 6.0.2_vite@3.1.3+vue-i18n@9.2.2
|
||||
'@oruga-ui/oruga-next': 0.5.6_vue@3.2.39
|
||||
'@oruga-ui/theme-bulma': 0.2.7
|
||||
'@vitejs/plugin-vue': 3.1.0_vite@3.1.3+vue@3.2.39
|
||||
'@vue/compiler-sfc': 3.2.39
|
||||
'@vueuse/core': 9.2.0_vue@3.2.39
|
||||
'@vueuse/router': 9.2.0_u55wpvgoaskkfdnhr4v2vlugdi
|
||||
'@vueuse/core': 9.3.0_vue@3.2.39
|
||||
'@vueuse/integrations': 9.3.0_fuse.js@6.6.2+vue@3.2.39
|
||||
'@vueuse/router': 9.3.0_u55wpvgoaskkfdnhr4v2vlugdi
|
||||
ansi-to-html: 0.7.2
|
||||
bulma: 0.9.4
|
||||
date-fns: 2.29.3
|
||||
fuzzysort: 2.0.1
|
||||
fuse.js: 6.6.2
|
||||
lodash.debounce: 4.0.8
|
||||
pinia: 2.0.22_arz4dztosvwy2ghjrlh2wdhejm
|
||||
sass: 1.54.9
|
||||
sass: 1.55.0
|
||||
semver: 7.3.7
|
||||
splitpanes: 3.1.1
|
||||
typescript: 4.8.3
|
||||
unplugin-auto-import: 0.11.2_ddncce744ormlo74xpe4fre3qq
|
||||
unplugin-auto-import: 0.11.2_2omhfktzjy2g6eniar2t4fuh44
|
||||
unplugin-icons: 0.14.10_4s7vbzbcgwpqv5yc35umdpgf4a
|
||||
unplugin-vue-components: 0.22.7_vite@3.1.3+vue@3.2.39
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
vite-plugin-pages: 0.26.0_4s7vbzbcgwpqv5yc35umdpgf4a
|
||||
vite-plugin-vue-layouts: 0.7.0_xkhgfkrxwsspbw2hhglk5wewfa
|
||||
vue: 3.2.39
|
||||
@@ -86,7 +88,7 @@ dependencies:
|
||||
devDependencies:
|
||||
'@pinia/testing': 0.0.14_pinia@2.0.22+vue@3.2.39
|
||||
'@types/lodash.debounce': 4.0.7
|
||||
'@types/node': 18.7.18
|
||||
'@types/node': 18.7.22
|
||||
'@types/semver': 7.3.12
|
||||
'@vue/test-utils': 2.0.2_vue@3.2.39
|
||||
c8: 7.12.0
|
||||
@@ -98,8 +100,8 @@ devDependencies:
|
||||
npm-run-all: 4.1.5
|
||||
prettier: 2.7.1
|
||||
release-it: 15.4.2
|
||||
ts-node: 10.9.1_bidgzm5cq2du6gnjtweqqjrrn4
|
||||
vitest: 0.23.4_jsdom@20.0.0+sass@1.54.9
|
||||
ts-node: 10.9.1_6zqjvw2hgekulz3zqkevhtb2gy
|
||||
vitest: 0.23.4_jsdom@20.0.0+sass@1.55.0
|
||||
vue-tsc: 0.40.13_typescript@4.8.3
|
||||
|
||||
packages:
|
||||
@@ -216,10 +218,10 @@ packages:
|
||||
'@iconify/types': 2.0.0
|
||||
dev: false
|
||||
|
||||
/@iconify-json/octicon/1.1.17:
|
||||
resolution: {integrity: sha512-W4NqIozJ/PXJAC96u3BQag/Eh5ykqSHbzzxt6f78l+sYYc23jymp1pH1ZXDV8QnKXMbHwS/oFV2zKeHZfS1tcQ==}
|
||||
/@iconify-json/octicon/1.1.19:
|
||||
resolution: {integrity: sha512-4sgrZ2D6h70UF6GDhgsF5XE6+GOmULlGgGvi0gXRFvPHW/hXcRGzxuCspx0/hXoLUNfja2kNLLVAt8GCnDDu8Q==}
|
||||
dependencies:
|
||||
'@iconify/types': 1.1.0
|
||||
'@iconify/types': 2.0.0
|
||||
dev: false
|
||||
|
||||
/@iconify/types/1.1.0:
|
||||
@@ -306,8 +308,8 @@ packages:
|
||||
engines: {node: '>= 14'}
|
||||
dev: false
|
||||
|
||||
/@intlify/vite-plugin-vue-i18n/6.0.1_vite@3.1.3+vue-i18n@9.2.2:
|
||||
resolution: {integrity: sha512-FFVcxVU4bR9vdDLNbltM5mrhndnXMErO01i0RrpdyMegEt3Nu/YLoH0sFdjRun7/RY4vaEnhTnFvVf9uO0dQvg==}
|
||||
/@intlify/vite-plugin-vue-i18n/6.0.2_vite@3.1.3+vue-i18n@9.2.2:
|
||||
resolution: {integrity: sha512-Z0fpq5NYxnvcofw94Ok54vXz+iRSSlF/Tx1/DmnW+FqPS2Uq7W1bah+fmjIWAUcV91ImTGm1egA7XujjzeB0ZA==}
|
||||
engines: {node: '>= 14.6'}
|
||||
peerDependencies:
|
||||
petite-vue-i18n: '*'
|
||||
@@ -325,9 +327,9 @@ packages:
|
||||
'@intlify/shared': 9.3.0-beta.3
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
debug: 4.3.4
|
||||
fast-glob: 3.2.11
|
||||
fast-glob: 3.2.12
|
||||
source-map: 0.6.1
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
vue-i18n: 9.2.2_vue@3.2.39
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -595,7 +597,7 @@ packages:
|
||||
dependencies:
|
||||
'@types/http-cache-semantics': 4.0.1
|
||||
'@types/keyv': 3.1.4
|
||||
'@types/node': 18.7.18
|
||||
'@types/node': 18.7.22
|
||||
'@types/responselike': 1.0.0
|
||||
dev: true
|
||||
|
||||
@@ -626,7 +628,7 @@ packages:
|
||||
/@types/keyv/3.1.4:
|
||||
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
|
||||
dependencies:
|
||||
'@types/node': 18.7.18
|
||||
'@types/node': 18.7.22
|
||||
dev: true
|
||||
|
||||
/@types/lodash.debounce/4.0.7:
|
||||
@@ -643,8 +645,8 @@ packages:
|
||||
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
|
||||
dev: false
|
||||
|
||||
/@types/node/18.7.18:
|
||||
resolution: {integrity: sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==}
|
||||
/@types/node/18.7.22:
|
||||
resolution: {integrity: sha512-TsmoXYd4zrkkKjJB0URF/mTIKPl+kVcbqClB2F/ykU7vil1BfWZVndOnpEIozPv4fURD28gyPFeIkW2G+KXOvw==}
|
||||
dev: true
|
||||
|
||||
/@types/parse-json/4.0.0:
|
||||
@@ -654,7 +656,7 @@ packages:
|
||||
/@types/responselike/1.0.0:
|
||||
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
|
||||
dependencies:
|
||||
'@types/node': 18.7.18
|
||||
'@types/node': 18.7.22
|
||||
dev: true
|
||||
|
||||
/@types/semver/7.3.12:
|
||||
@@ -672,7 +674,7 @@ packages:
|
||||
vite: ^3.0.0
|
||||
vue: ^3.2.25
|
||||
dependencies:
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
vue: 3.2.39
|
||||
dev: false
|
||||
|
||||
@@ -808,28 +810,72 @@ packages:
|
||||
vue: 3.2.39
|
||||
dev: true
|
||||
|
||||
/@vueuse/core/9.2.0_vue@3.2.39:
|
||||
resolution: {integrity: sha512-/MZ6qpz6uSyaXrtoeBWQzAKRG3N7CvfVWvQxiM3ei3Xe5ydOjjtVbo7lGl9p8dECV93j7W8s63A8H0kFLpLyxg==}
|
||||
/@vueuse/core/9.3.0_vue@3.2.39:
|
||||
resolution: {integrity: sha512-64Rna8IQDWpdrJxgitDg7yv1yTp41ZmvV8zlLEylK4QQLWAhz1OFGZDPZ8bU4lwcGgbEJ2sGi2jrdNh4LttUSQ==}
|
||||
dependencies:
|
||||
'@types/web-bluetooth': 0.0.15
|
||||
'@vueuse/metadata': 9.2.0
|
||||
'@vueuse/shared': 9.2.0_vue@3.2.39
|
||||
'@vueuse/metadata': 9.3.0
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.39
|
||||
vue-demi: 0.13.11_vue@3.2.39
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
dev: false
|
||||
|
||||
/@vueuse/metadata/9.2.0:
|
||||
resolution: {integrity: sha512-exN4KE6iquxDCdt72BgEhb3tlOpECtD61AUdXnUqBTIUCl70x1Ar/QXo3bYcvxmdMS2/peQyfeTzBjRTpvL5xw==}
|
||||
/@vueuse/integrations/9.3.0_fuse.js@6.6.2+vue@3.2.39:
|
||||
resolution: {integrity: sha512-KkJpC97VioZUpSw7rvgnqoLgTztLlLLGdYp6WQKn69cJiItsJVSRZrmI+X9YVxPBzuLvRymYZfp0RMyISVFHTw==}
|
||||
peerDependencies:
|
||||
async-validator: '*'
|
||||
axios: '*'
|
||||
change-case: '*'
|
||||
drauu: '*'
|
||||
focus-trap: '*'
|
||||
fuse.js: '*'
|
||||
jwt-decode: '*'
|
||||
nprogress: '*'
|
||||
qrcode: '*'
|
||||
universal-cookie: '*'
|
||||
peerDependenciesMeta:
|
||||
async-validator:
|
||||
optional: true
|
||||
axios:
|
||||
optional: true
|
||||
change-case:
|
||||
optional: true
|
||||
drauu:
|
||||
optional: true
|
||||
focus-trap:
|
||||
optional: true
|
||||
fuse.js:
|
||||
optional: true
|
||||
jwt-decode:
|
||||
optional: true
|
||||
nprogress:
|
||||
optional: true
|
||||
qrcode:
|
||||
optional: true
|
||||
universal-cookie:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@vueuse/core': 9.3.0_vue@3.2.39
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.39
|
||||
fuse.js: 6.6.2
|
||||
vue-demi: 0.13.11_vue@3.2.39
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
dev: false
|
||||
|
||||
/@vueuse/router/9.2.0_u55wpvgoaskkfdnhr4v2vlugdi:
|
||||
resolution: {integrity: sha512-N80vwh6EGFJiUIyCbfGhEDHzolNvTEPzJBLTuwy7pJU91VjNotMsSvUhwEI8l/cBpdBaIL9dUxRqXDBVrQBahA==}
|
||||
/@vueuse/metadata/9.3.0:
|
||||
resolution: {integrity: sha512-GnnfjbzIPJIh9ngL9s9oGU1+Hx/h5/KFqTfJykzh/1xjaHkedV9g0MASpdmPZIP+ynNhKAcEfA6g5i8KXwtoMA==}
|
||||
dev: false
|
||||
|
||||
/@vueuse/router/9.3.0_u55wpvgoaskkfdnhr4v2vlugdi:
|
||||
resolution: {integrity: sha512-UFN2MFciprH21oYsAgNHeDJ4Bd86HpRm9gximSN8j6h4fc2aa62fvfhprfHqdTxYAcgcGkMwcc9TO75jOvr8gg==}
|
||||
peerDependencies:
|
||||
vue-router: '>=4.0.0-rc.1'
|
||||
dependencies:
|
||||
'@vueuse/shared': 9.2.0_vue@3.2.39
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.39
|
||||
vue-demi: 0.13.11_vue@3.2.39
|
||||
vue-router: 4.1.5_vue@3.2.39
|
||||
transitivePeerDependencies:
|
||||
@@ -837,8 +883,8 @@ packages:
|
||||
- vue
|
||||
dev: false
|
||||
|
||||
/@vueuse/shared/9.2.0_vue@3.2.39:
|
||||
resolution: {integrity: sha512-NnRp/noSWuXW0dKhZK5D0YLrDi0nmZ18UeEgwXQq7Ul5TTP93lcNnKjrHtd68j2xFB/l59yPGFlCryL692bnrA==}
|
||||
/@vueuse/shared/9.3.0_vue@3.2.39:
|
||||
resolution: {integrity: sha512-caGUWLY0DpPC6l31KxeUy6vPVNA0yKxx81jFYLoMpyP6cF84FG5Dkf69DfSUqL57wX8JcUkJDMnQaQIZPWFEQQ==}
|
||||
dependencies:
|
||||
vue-demi: 0.13.11_vue@3.2.39
|
||||
transitivePeerDependencies:
|
||||
@@ -2195,8 +2241,9 @@ packages:
|
||||
/functions-have-names/1.2.3:
|
||||
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
|
||||
|
||||
/fuzzysort/2.0.1:
|
||||
resolution: {integrity: sha512-SlgbPAq0eQ6JQ1h3l4MNeGH/t9DHKH8GGM0RD/6RhmJrNnSoWt3oIVaiQm9g9BPB+wAhRMeMqlUTbhbd7+Ufcg==}
|
||||
/fuse.js/6.6.2:
|
||||
resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/get-caller-file/2.0.5:
|
||||
@@ -3969,8 +4016,8 @@ packages:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
dev: true
|
||||
|
||||
/sass/1.54.9:
|
||||
resolution: {integrity: sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==}
|
||||
/sass/1.55.0:
|
||||
resolution: {integrity: sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
@@ -4355,7 +4402,7 @@ packages:
|
||||
punycode: 2.1.1
|
||||
dev: true
|
||||
|
||||
/ts-node/10.9.1_bidgzm5cq2du6gnjtweqqjrrn4:
|
||||
/ts-node/10.9.1_6zqjvw2hgekulz3zqkevhtb2gy:
|
||||
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -4374,7 +4421,7 @@ packages:
|
||||
'@tsconfig/node12': 1.0.11
|
||||
'@tsconfig/node14': 1.0.3
|
||||
'@tsconfig/node16': 1.0.3
|
||||
'@types/node': 18.7.18
|
||||
'@types/node': 18.7.22
|
||||
acorn: 8.7.1
|
||||
acorn-walk: 8.2.0
|
||||
arg: 4.1.3
|
||||
@@ -4445,7 +4492,7 @@ packages:
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
escape-string-regexp: 5.0.0
|
||||
fast-glob: 3.2.11
|
||||
fast-glob: 3.2.12
|
||||
local-pkg: 0.4.2
|
||||
magic-string: 0.26.2
|
||||
mlly: 0.5.13
|
||||
@@ -4481,7 +4528,7 @@ packages:
|
||||
engines: {node: '>= 0.8'}
|
||||
dev: true
|
||||
|
||||
/unplugin-auto-import/0.11.2_ddncce744ormlo74xpe4fre3qq:
|
||||
/unplugin-auto-import/0.11.2_2omhfktzjy2g6eniar2t4fuh44:
|
||||
resolution: {integrity: sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==}
|
||||
engines: {node: '>=14'}
|
||||
peerDependencies:
|
||||
@@ -4492,7 +4539,7 @@ packages:
|
||||
dependencies:
|
||||
'@antfu/utils': 0.5.2
|
||||
'@rollup/pluginutils': 4.2.1
|
||||
'@vueuse/core': 9.2.0_vue@3.2.39
|
||||
'@vueuse/core': 9.3.0_vue@3.2.39
|
||||
local-pkg: 0.4.2
|
||||
magic-string: 0.26.2
|
||||
unimport: 0.6.7_vite@3.1.3
|
||||
@@ -4585,7 +4632,7 @@ packages:
|
||||
dependencies:
|
||||
acorn: 8.8.0
|
||||
chokidar: 3.5.3
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
webpack-sources: 3.2.3
|
||||
webpack-virtual-modules: 0.4.4
|
||||
dev: false
|
||||
@@ -4609,7 +4656,7 @@ packages:
|
||||
dependencies:
|
||||
acorn: 8.8.0
|
||||
chokidar: 3.5.3
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
webpack-sources: 3.2.3
|
||||
webpack-virtual-modules: 0.4.5
|
||||
dev: false
|
||||
@@ -4681,7 +4728,7 @@ packages:
|
||||
json5: 2.2.1
|
||||
local-pkg: 0.4.2
|
||||
picocolors: 1.0.0
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
yaml: 2.1.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -4697,14 +4744,14 @@ packages:
|
||||
'@vue/compiler-sfc': 3.2.39
|
||||
debug: 4.3.4
|
||||
fast-glob: 3.2.11
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
vue: 3.2.39
|
||||
vue-router: 4.1.5_vue@3.2.39
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/vite/3.1.3_sass@1.54.9:
|
||||
/vite/3.1.3_sass@1.55.0:
|
||||
resolution: {integrity: sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
@@ -4727,11 +4774,11 @@ packages:
|
||||
postcss: 8.4.16
|
||||
resolve: 1.22.1
|
||||
rollup: 2.78.1
|
||||
sass: 1.54.9
|
||||
sass: 1.55.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
|
||||
/vitest/0.23.4_jsdom@20.0.0+sass@1.54.9:
|
||||
/vitest/0.23.4_jsdom@20.0.0+sass@1.55.0:
|
||||
resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==}
|
||||
engines: {node: '>=v14.16.0'}
|
||||
hasBin: true
|
||||
@@ -4755,7 +4802,7 @@ packages:
|
||||
dependencies:
|
||||
'@types/chai': 4.3.3
|
||||
'@types/chai-subset': 1.3.3
|
||||
'@types/node': 18.7.18
|
||||
'@types/node': 18.7.22
|
||||
chai: 4.3.6
|
||||
debug: 4.3.4
|
||||
jsdom: 20.0.0
|
||||
@@ -4764,7 +4811,7 @@ packages:
|
||||
tinybench: 2.1.5
|
||||
tinypool: 0.3.0
|
||||
tinyspy: 1.0.2
|
||||
vite: 3.1.3_sass@1.54.9
|
||||
vite: 3.1.3_sass@1.55.0
|
||||
transitivePeerDependencies:
|
||||
- less
|
||||
- sass
|
||||
|
||||
Reference in New Issue
Block a user