From a9ba56040c5e399c7de0a63c0bd27952474b45a6 Mon Sep 17 00:00:00 2001 From: PadBro Date: Wed, 3 Dec 2025 15:18:03 +0100 Subject: [PATCH 01/14] feat: switch to nuxt santucm auth --- components/Layout/Navigation.vue | 5 +- composables/auth.ts | 41 ------- composables/current-user.ts | 5 + middleware/auth.global.ts | 20 ---- nuxt.config.ts | 18 ++- package.json | 4 +- pages/application/submission/view/[id].vue | 3 +- pages/discord/callback.vue | 5 + pages/index.vue | 6 +- pages/logout.vue | 8 +- pages/profile.vue | 3 +- pages/ticket/index.vue | 3 +- utils/Helper.ts | 2 +- yarn.lock | 127 ++++++++++++++++++++- 14 files changed, 174 insertions(+), 76 deletions(-) delete mode 100644 composables/auth.ts create mode 100644 composables/current-user.ts delete mode 100644 middleware/auth.global.ts diff --git a/components/Layout/Navigation.vue b/components/Layout/Navigation.vue index 4140467..0591ac4 100644 --- a/components/Layout/Navigation.vue +++ b/components/Layout/Navigation.vue @@ -3,6 +3,7 @@ import { Disclosure, DisclosureButton, DisclosurePanel } from "@headlessui/vue"; import { ChevronRightIcon } from "@heroicons/vue/20/solid"; import type { Navigation, NavigationChild } from "@/types/navigation"; +const user = useCurrentUser(); const route = useRoute(); const navigations = [ { name: "FAQ", href: "/faq", permission: "faq.read" }, @@ -155,11 +156,11 @@ const isCurrent = (item: Navigation | NavigationChild) => { > Your profile - + diff --git a/composables/auth.ts b/composables/auth.ts deleted file mode 100644 index 1620003..0000000 --- a/composables/auth.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { User } from "@/types/user"; - -export const useAuth = () => { - const user = () => useState("user", () => undefined); - - const check = user().value !== undefined; - - const guest = user().value === undefined; - - const logout = () => { - user().value = undefined; - }; - - const bootstrap = async () => { - await useApi("/csrf-cookie", { - method: "get", - }); - - const { data, error } = await useApi("/me", { - method: "get", - }); - - if (error.value) { - user().value = undefined; - return; - } - if (Object.keys(data.value ?? {}).length === 0) { - user().value = undefined; - } else { - user().value = data.value ?? undefined; - } - }; - - return { - user, - check, - guest, - logout, - bootstrap, - }; -}; diff --git a/composables/current-user.ts b/composables/current-user.ts new file mode 100644 index 0000000..5c1e3e2 --- /dev/null +++ b/composables/current-user.ts @@ -0,0 +1,5 @@ +import type { User } from "@/types/ticket/user"; + +export const useCurrentUser = () => { + return useSanctumUser() +} diff --git a/middleware/auth.global.ts b/middleware/auth.global.ts deleted file mode 100644 index 234a1cb..0000000 --- a/middleware/auth.global.ts +++ /dev/null @@ -1,20 +0,0 @@ -export default defineNuxtRouteMiddleware(async (to) => { - await useAuth().bootstrap(); - - const isGuestPath = (path: string) => { - return ( - ["/login", "/discord/callback"].find((guestPath: string) => - path.includes(guestPath), - ) !== undefined - ); - }; - - if (isGuestPath(to.path) && useAuth().check) { - return navigateTo("/"); - } - - if (!isGuestPath(to.path) && useAuth().guest) { - localStorage.setItem("return", to.path); - return navigateTo("/login"); - } -}); diff --git a/nuxt.config.ts b/nuxt.config.ts index 53b8850..3f33798 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -3,7 +3,7 @@ export default defineNuxtConfig({ compatibilityDate: "2024-11-01", devtools: { enabled: true }, ssr: false, - modules: ["@nuxtjs/tailwindcss", "@nuxt/eslint"], + modules: ["@nuxtjs/tailwindcss", "@nuxt/eslint", "nuxt-auth-sanctum"], runtimeConfig: { public: { apiBase: "/api/v1", @@ -11,6 +11,22 @@ export default defineNuxtConfig({ discordCallbackUrl: "http://localhost:3000/discord/callback", }, }, + sanctum: { + baseUrl: "http://localhost:8000", // Laravel API + endpoints: { + login: "/api/v1/login", + logout: "/api/v1/logout", + user: "/api/v1/me", + csrf: "/api/v1/csrf-cookie", + }, + globalMiddleware: { + enabled: true, + }, + redirect: { + onAuthOnly: "/login", + onGuestOnly: "/", + }, + }, nitro: { devProxy: { "/api": { diff --git a/package.json b/package.json index d558aee..6bfaab7 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dayjs": "^1.11.13", "esbuild": "^0.25.8", "nuxt": "^3.12.2", + "nuxt-auth-sanctum": "1.4.3", "vee-validate": "^4.12.4", "vue": "^3.4.29", "vue-router": "^4.3.3", @@ -37,5 +38,6 @@ "prettier": "^3.3.2", "typescript": "5.6.2", "vue-tsc": "2.0.29" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/pages/application/submission/view/[id].vue b/pages/application/submission/view/[id].vue index 7cf036a..1488314 100644 --- a/pages/application/submission/view/[id].vue +++ b/pages/application/submission/view/[id].vue @@ -11,6 +11,7 @@ if (!hasPermissionTo("applicationSubmission.read")) { await navigateTo("/"); } +const user = useCurrentUser(); const route = useRoute(); const applicationSubmissionId = ref(); const applicationSubmission = ref(); @@ -51,7 +52,7 @@ const updateSubmission = async ( body: { state, custom_response: reason, - handled_by: useAuth().user().value?.discord_id, + handled_by: user.value?.discord_id, }, }, ); diff --git a/pages/discord/callback.vue b/pages/discord/callback.vue index 7435352..c146dc3 100644 --- a/pages/discord/callback.vue +++ b/pages/discord/callback.vue @@ -2,6 +2,7 @@ import { onMounted } from "vue"; const route = useRoute(); +const { refreshIdentity } = useSanctumAuth(); onMounted(async () => { const { error } = await useApi("/discord/callback", { @@ -12,6 +13,7 @@ onMounted(async () => { if (!error.value) { const returnUrl = localStorage.getItem("return"); localStorage.removeItem("return"); + await refreshIdentity(); return navigateTo(returnUrl ?? "/"); } else { return navigateTo("/login?noPermission"); @@ -20,6 +22,9 @@ onMounted(async () => { definePageMeta({ layout: "guest", + sanctum: { + guestOnly: true, + } }); diff --git a/pages/index.vue b/pages/index.vue index dedfdca..308844d 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,6 +1,8 @@ diff --git a/pages/profile.vue b/pages/profile.vue index 800a5a8..76cdfa5 100644 --- a/pages/profile.vue +++ b/pages/profile.vue @@ -5,6 +5,7 @@ import * as zod from "zod"; import { useForm } from "vee-validate"; import { EyeIcon, EyeSlashIcon } from "@heroicons/vue/24/solid"; +const user = useCurrentUser(); const errorMessage = ref(""); const showPassword = ref(true); const showPasswordConfirm = ref(true); @@ -37,7 +38,7 @@ const { handleSubmit, setErrors, isSubmitting } = useForm({ const save = handleSubmit(async (values) => { errorMessage.value = ""; - const { error } = await useApi(`/user/${useAuth().user().value?.id}`, { + const { error } = await useApi(`/user/${user.value?.id}`, { method: "patch", body: { password: values.password, diff --git a/pages/ticket/index.vue b/pages/ticket/index.vue index f6748c8..c041ef7 100644 --- a/pages/ticket/index.vue +++ b/pages/ticket/index.vue @@ -15,6 +15,7 @@ if (!hasPermissionTo("ticket.read")) { await navigateTo("/"); } +const user = useCurrentUser(); const loading = ref(true); const tickets = ref([]); const pagination = ref(); @@ -137,7 +138,7 @@ const closeTicket = async (ticketId: number) => { const { error } = await useApi(`/ticket/${ticketId}/close`, { method: "post", body: { - closed_by_discord_user_id: useAuth().user().value?.discord_id, + closed_by_discord_user_id: user.value?.discord_id, }, }); if (error.value) { diff --git a/utils/Helper.ts b/utils/Helper.ts index 6c3260d..2a7c8b4 100644 --- a/utils/Helper.ts +++ b/utils/Helper.ts @@ -22,7 +22,7 @@ export const parseRouteParameterString = ( }; export const hasPermissionTo = (permission: string): boolean => { - const user = useAuth().user().value; + const user = useCurrentUser().value; if (!user) { return false; } diff --git a/yarn.lock b/yarn.lock index fed4d3a..9bbbed7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1211,6 +1211,32 @@ unimport "^5.1.0" untyped "^2.0.0" +"@nuxt/kit@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-4.2.1.tgz#a53fdff6c99454414db6a2b037b895a50723fdcc" + integrity sha512-lLt8KLHyl7IClc3RqRpRikz15eCfTRlAWL9leVzPyg5N87FfKE/7EWgWvpiL/z4Tf3dQCIqQb88TmHE0JTIDvA== + dependencies: + c12 "^3.3.1" + consola "^3.4.2" + defu "^6.1.4" + destr "^2.0.5" + errx "^0.1.0" + exsolve "^1.0.7" + ignore "^7.0.5" + jiti "^2.6.1" + klona "^2.0.6" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + pkg-types "^2.3.0" + rc9 "^2.1.2" + scule "^1.3.0" + semver "^7.7.3" + tinyglobby "^0.2.15" + ufo "^1.6.1" + unctx "^2.4.1" + untyped "^2.0.0" + "@nuxt/schema@3.17.7": version "3.17.7" resolved "https://registry.yarnpkg.com/@nuxt/schema/-/schema-3.17.7.tgz#20a8d17423c411c5d369341595d8d6455532cbe7" @@ -2630,6 +2656,24 @@ c12@^3.0.2, c12@^3.0.4, c12@^3.1.0: pkg-types "^2.2.0" rc9 "^2.1.2" +c12@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/c12/-/c12-3.3.2.tgz#8bfb9d57147319e6bf7e8530979c5c4fa68ba602" + integrity sha512-QkikB2X5voO1okL3QsES0N690Sn/K9WokXqUsDQsWy5SnYb+psYQFGA10iy1bZHj3fjISKsI67Q90gruvWWM3A== + dependencies: + chokidar "^4.0.3" + confbox "^0.2.2" + defu "^6.1.4" + dotenv "^17.2.3" + exsolve "^1.0.8" + giget "^2.0.0" + jiti "^2.6.1" + ohash "^2.0.11" + pathe "^2.0.3" + perfect-debounce "^2.0.0" + pkg-types "^2.3.0" + rc9 "^2.1.2" + cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" @@ -3388,6 +3432,11 @@ dotenv@^16.3.1, dotenv@^16.4.7, dotenv@^16.6.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== +dotenv@^17.2.3: + version "17.2.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" + integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== + dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -3883,6 +3932,11 @@ exsolve@^1.0.5, exsolve@^1.0.7: resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.7.tgz#3b74e4c7ca5c5f9a19c3626ca857309fa99f9e9e" integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw== +exsolve@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.8.tgz#7f5e34da61cd1116deda5136e62292c096f50613" + integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== + externality@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/externality/-/externality-1.0.2.tgz#a027f8cfd995c42fd35a8d794cfc224d4a5840c0" @@ -3964,6 +4018,11 @@ fdir@^6.2.0, fdir@^6.4.4, fdir@^6.4.6: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + fecha@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" @@ -4725,6 +4784,11 @@ jiti@^2.1.2, jiti@^2.4.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.5.1.tgz#bd099c1c2be1c59bbea4e5adcd127363446759d0" integrity sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w== +jiti@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5252,6 +5316,16 @@ mlly@^1.3.0, mlly@^1.6.1, mlly@^1.7.1, mlly@^1.7.4: pkg-types "^1.3.0" ufo "^1.5.4" +mlly@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.0.tgz#e074612b938af8eba1eaf43299cbc89cb72d824e" + integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== + dependencies: + acorn "^8.15.0" + pathe "^2.0.3" + pkg-types "^1.3.1" + ufo "^1.6.1" + mocked-exports@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/mocked-exports/-/mocked-exports-0.1.1.tgz#6916efea9a9dd0f4abd6a0a72526f56a76c966ea" @@ -5428,6 +5502,11 @@ node-fetch-native@^1.6.4, node-fetch-native@^1.6.6: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz#ae1d0e537af35c2c0b0de81cbff37eedd410aa37" integrity sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ== +node-fetch-native@^1.6.7: + version "1.6.7" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz#9d09ca63066cc48423211ed4caf5d70075d76a71" + integrity sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== + node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -5526,6 +5605,16 @@ nth-check@^2.0.1, nth-check@^2.1.1: dependencies: boolbase "^1.0.0" +nuxt-auth-sanctum@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/nuxt-auth-sanctum/-/nuxt-auth-sanctum-1.4.3.tgz#edfd1def806280093f698a87e4a0d392009424a1" + integrity sha512-HA2gxuagp8pgn/wmAXmzMufkjHi0rq6wIWZ+ZqoPDzms7dJriX4ypMP2tYz7cypPDQ/5s0AiNM3cLjxn2c21FA== + dependencies: + "@nuxt/kit" "^4.2.1" + defu "^6.1.4" + ofetch "^1.5.1" + pathe "^2.0.3" + nuxt@^3.12.2: version "3.17.7" resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-3.17.7.tgz#1b5f43dbbe86052b4ca45be376ebb392ed4401d8" @@ -5628,6 +5717,15 @@ ofetch@^1.4.1: node-fetch-native "^1.6.4" ufo "^1.5.4" +ofetch@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.5.1.tgz#5c43cc56e03398b273014957060344254505c5c7" + integrity sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA== + dependencies: + destr "^2.0.5" + node-fetch-native "^1.6.7" + ufo "^1.6.1" + ohash@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" @@ -5921,6 +6019,11 @@ perfect-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== +perfect-debounce@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-2.0.0.tgz#0ff94f1ecbe0a6bca4b1703a2ed08bbe43739aa7" + integrity sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow== + picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -5946,7 +6049,7 @@ pirates@^4.0.1: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== -pkg-types@^1.0.3, pkg-types@^1.3.0: +pkg-types@^1.0.3, pkg-types@^1.3.0, pkg-types@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== @@ -5964,6 +6067,15 @@ pkg-types@^2.0.0, pkg-types@^2.0.1, pkg-types@^2.1.0, pkg-types@^2.2.0: exsolve "^1.0.7" pathe "^2.0.3" +pkg-types@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" + integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" @@ -6678,6 +6790,11 @@ semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +semver@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + send@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" @@ -7226,6 +7343,14 @@ tinyglobby@0.2.14, tinyglobby@^0.2.13, tinyglobby@^0.2.14: fdir "^6.4.4" picomatch "^4.0.2" +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + tmp-promise@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" From 42600dbec1cb9b093a7da2d6432ddd4741e77a78 Mon Sep 17 00:00:00 2001 From: PadBro Date: Wed, 3 Dec 2025 15:49:49 +0100 Subject: [PATCH 02/14] feat: add permission middleware --- middleware/permission.global.ts | 15 +++++++++++++++ .../[applicationId]/question/create.vue | 10 +++++++--- .../[applicationId]/question/edit/[id].vue | 10 +++++++--- .../[applicationId]/question/index.vue | 10 ++++++---- .../[applicationId]/response/create.vue | 10 +++++++--- .../[applicationId]/response/edit/[id].vue | 10 +++++++--- .../[applicationId]/response/index.vue | 10 ++++++---- pages/application/create.vue | 11 +++++++---- pages/application/edit/[id].vue | 11 +++++++---- pages/application/index.vue | 10 ++++++---- pages/application/submission/index.vue | 10 ++++++---- pages/application/submission/view/[id].vue | 14 ++++++++------ pages/faq/create.vue | 11 +++++++---- pages/faq/edit/[id].vue | 11 +++++++---- pages/faq/index.vue | 10 ++++++---- pages/reaction-role/create.vue | 10 ++++++---- pages/reaction-role/edit/[id].vue | 10 ++++++---- pages/reaction-role/index.vue | 10 ++++++---- pages/rule/create.vue | 11 +++++++---- pages/rule/edit/[id].vue | 11 +++++++---- pages/rule/index.vue | 10 ++++++---- pages/server-content/create.vue | 11 +++++++---- pages/server-content/edit/[id].vue | 11 +++++++---- pages/server-content/index.vue | 10 ++++++---- pages/server-content/message/index.vue | 11 +++++++---- pages/ticket/button/create.vue | 11 +++++++---- pages/ticket/button/edit/[id].vue | 11 +++++++---- pages/ticket/button/index.vue | 10 ++++++---- pages/ticket/config/index.vue | 11 +++++++---- pages/ticket/index.vue | 10 ++++++---- pages/ticket/panel/create.vue | 11 +++++++---- pages/ticket/panel/edit/[id].vue | 11 +++++++---- pages/ticket/panel/index.vue | 10 ++++++---- pages/ticket/team/create.vue | 11 +++++++---- pages/ticket/team/edit/[id].vue | 11 +++++++---- pages/ticket/team/index.vue | 10 ++++++---- pages/ticket/transcript/[ticket_id].vue | 10 ++++++---- 37 files changed, 253 insertions(+), 142 deletions(-) create mode 100644 middleware/permission.global.ts diff --git a/middleware/permission.global.ts b/middleware/permission.global.ts new file mode 100644 index 0000000..ce16a68 --- /dev/null +++ b/middleware/permission.global.ts @@ -0,0 +1,15 @@ +type PermissionMeta = { + permission: string, + fallback?: string, +} + +export default defineNuxtRouteMiddleware(async (to) => { + const permission = to.meta.permission as PermissionMeta | undefined + if (!permission) { + return + } + + if (!hasPermissionTo(permission.permission)) { + return navigateTo(permission.fallback ?? "/"); + } +}) diff --git a/pages/application/[applicationId]/question/create.vue b/pages/application/[applicationId]/question/create.vue index 72619d6..f075135 100644 --- a/pages/application/[applicationId]/question/create.vue +++ b/pages/application/[applicationId]/question/create.vue @@ -6,9 +6,6 @@ import { useForm } from "vee-validate"; import type { Application } from "@/types/application"; const applicationId = ref(); -if (!hasPermissionTo("applicationQuestion.create")) { - await navigateTo(`/application/${applicationId.value}/question`); -} const route = useRoute(); const errorMessage = ref(""); @@ -51,6 +48,13 @@ useHead({ title: "Create Application Question", }); +definePageMeta({ + permission: { + permission: "applicationQuestion.create", + fallback: `/application/${applicationId.value}/question`, + }, +}); + onMounted(() => { applicationId.value = parseRouteParameter(route.params.applicationId); }); diff --git a/pages/application/[applicationId]/question/edit/[id].vue b/pages/application/[applicationId]/question/edit/[id].vue index e4b9e5a..54bf5c2 100644 --- a/pages/application/[applicationId]/question/edit/[id].vue +++ b/pages/application/[applicationId]/question/edit/[id].vue @@ -8,9 +8,6 @@ import type { Application } from "@/types/application"; import type { PaginatedResponse } from "@/types/response"; const applicationId = ref(); -if (!hasPermissionTo("applicationQuestion.update")) { - await navigateTo(`/application/${applicationId.value}/question`); -} const route = useRoute(); const applicationQuestionId = ref(); @@ -80,6 +77,13 @@ onMounted(async () => { loading.value = false; }); +definePageMeta({ + permission: { + permission: "applicationQuestion.update", + fallback: `/application/${applicationId.value}/question`, + }, +}); + useHead({ title: "Edit Application Question", }); diff --git a/pages/application/[applicationId]/question/index.vue b/pages/application/[applicationId]/question/index.vue index 514f763..d795471 100644 --- a/pages/application/[applicationId]/question/index.vue +++ b/pages/application/[applicationId]/question/index.vue @@ -11,10 +11,6 @@ import { import type { Pagination } from "@/types/table"; import type { PaginatedResponse } from "@/types/response"; -if (!hasPermissionTo("applicationQuestion.read")) { - await navigateTo("/"); -} - const loading = ref(true); const route = useRoute(); const applicationQuestions = ref([]); @@ -95,6 +91,12 @@ const pageChange = (page: number) => { loadApplicationQuestion(page); }; +definePageMeta({ + permission: { + permission: "applicationQuestion.read", + }, +}); + useHead({ title: "Application Questions", }); diff --git a/pages/application/[applicationId]/response/create.vue b/pages/application/[applicationId]/response/create.vue index c7645b0..5103d91 100644 --- a/pages/application/[applicationId]/response/create.vue +++ b/pages/application/[applicationId]/response/create.vue @@ -7,9 +7,6 @@ import type { Application } from "@/types/application"; import { ApplicationResponseType } from "@/types/application/response"; const applicationId = ref(); -if (!hasPermissionTo("applicationResponse.create")) { - await navigateTo(`/application/${applicationId.value}/response`); -} const route = useRoute(); const errorMessage = ref(""); @@ -54,6 +51,13 @@ const types = computed(() => })), ); +definePageMeta({ + permission: { + permission: "applicationResponse.create", + fallback: `/application/${applicationId.value}/response`, + }, +}); + useHead({ title: "Create Application Response", }); diff --git a/pages/application/[applicationId]/response/edit/[id].vue b/pages/application/[applicationId]/response/edit/[id].vue index 2acc7e0..a960ba0 100644 --- a/pages/application/[applicationId]/response/edit/[id].vue +++ b/pages/application/[applicationId]/response/edit/[id].vue @@ -9,9 +9,6 @@ import type { PaginatedResponse } from "@/types/response"; import { ApplicationResponseType } from "@/types/application/response"; const applicationId = ref(); -if (!hasPermissionTo("applicationResponse.update")) { - await navigateTo(`/application/${applicationId.value}/response`); -} const route = useRoute(); const applicationResponseId = ref(); @@ -90,6 +87,13 @@ const types = computed(() => })), ); +definePageMeta({ + permission: { + permission: "applicationResponse.update", + fallback: `/application/${applicationId.value}/response`, + }, +}); + useHead({ title: "Edit Application Response", }); diff --git a/pages/application/[applicationId]/response/index.vue b/pages/application/[applicationId]/response/index.vue index bf4b22f..b2db7e6 100644 --- a/pages/application/[applicationId]/response/index.vue +++ b/pages/application/[applicationId]/response/index.vue @@ -7,10 +7,6 @@ import { PencilIcon, PlusIcon } from "@heroicons/vue/24/solid"; import type { Pagination } from "@/types/table"; import type { PaginatedResponse } from "@/types/response"; -if (!hasPermissionTo("applicationResponse.read")) { - await navigateTo("/"); -} - const loading = ref(true); const route = useRoute(); const applicationResponses = ref([]); @@ -91,6 +87,12 @@ const pageChange = (page: number) => { loadApplicationResponse(page); }; +definePageMeta({ + permission: { + permission: "applicationResponse.read", + }, +}); + useHead({ title: "Application Responses", }); diff --git a/pages/application/create.vue b/pages/application/create.vue index 996c453..9b460e7 100644 --- a/pages/application/create.vue +++ b/pages/application/create.vue @@ -4,10 +4,6 @@ import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; -if (!hasPermissionTo("application.create")) { - await navigateTo("/application"); -} - const errorMessage = ref(""); const textChannels = ref(await loadTextChannels()); const roles = ref(await loadRoles()); @@ -76,6 +72,13 @@ onMounted(() => { setFieldValue("embed_button_text", "Apply now"); }); +definePageMeta({ + permission: { + permission: "application.create", + fallback: "/application", + }, +}); + useHead({ title: "Create Application", }); diff --git a/pages/application/edit/[id].vue b/pages/application/edit/[id].vue index 7c21373..2895a9b 100644 --- a/pages/application/edit/[id].vue +++ b/pages/application/edit/[id].vue @@ -6,10 +6,6 @@ import { useForm } from "vee-validate"; import type { Application } from "@/types/application"; import type { PaginatedResponse } from "@/types/response"; -if (!hasPermissionTo("application.update")) { - await navigateTo("/application"); -} - const route = useRoute(); const applicationId = ref(); const application = ref(); @@ -147,6 +143,13 @@ onMounted(async () => { loading.value = false; }); +definePageMeta({ + permission: { + permission: "application.update", + fallback: "/application", + }, +}); + useHead({ title: "Edit Application", }); diff --git a/pages/application/index.vue b/pages/application/index.vue index e4a301a..0506a12 100644 --- a/pages/application/index.vue +++ b/pages/application/index.vue @@ -12,10 +12,6 @@ import { QuestionMarkCircleIcon } from "@heroicons/vue/24/outline"; import type { Pagination } from "@/types/table"; import type { PaginatedResponse } from "@/types/response"; -if (!hasPermissionTo("application.read")) { - await navigateTo("/"); -} - const loading = ref(true); const applications = ref([]); const toDeleteApplication = ref(); @@ -106,6 +102,12 @@ const sendButton = async (application: Application) => { } }; +definePageMeta({ + permission: { + permission: "application.read", + }, +}); + useHead({ title: "Applications", }); diff --git a/pages/application/submission/index.vue b/pages/application/submission/index.vue index 7fc444b..5979ee4 100644 --- a/pages/application/submission/index.vue +++ b/pages/application/submission/index.vue @@ -13,10 +13,6 @@ import type { import type { Pagination, Sorting } from "@/types/table"; import type { PaginatedResponse } from "@/types/response"; -if (!hasPermissionTo("applicationSubmission.read")) { - await navigateTo("/"); -} - const loading = ref(true); const applicationSubmissions = ref([]); const pagination = ref(); @@ -181,6 +177,12 @@ const filters = computed(() => { return newFilters; }); +definePageMeta({ + permission: { + permission: "applicationSubmission.read", + }, +}); + useHead({ title: "Application Submissions", }); diff --git a/pages/application/submission/view/[id].vue b/pages/application/submission/view/[id].vue index 1488314..def582b 100644 --- a/pages/application/submission/view/[id].vue +++ b/pages/application/submission/view/[id].vue @@ -7,10 +7,6 @@ import type { ApplicationSubmission } from "@/types/application/submission"; import { ApplicationSubmissionState } from "@/types/application/submission"; import type { PaginatedResponse } from "@/types/response"; -if (!hasPermissionTo("applicationSubmission.read")) { - await navigateTo("/"); -} - const user = useCurrentUser(); const route = useRoute(); const applicationSubmissionId = ref(); @@ -113,13 +109,19 @@ const userName = computed(() => { ); }); -onMounted(() => { - loadApplicationSubmission(); +definePageMeta({ + permission: { + permission: "applicationSubmission.read", + }, }); useHead({ title: "Edit Application", }); + +onMounted(() => { + loadApplicationSubmission(); +}); + diff --git a/app/pages/application/[applicationId]/response/create.vue b/app/pages/application/[applicationId]/response/create.vue index a4760af..e630c91 100644 --- a/app/pages/application/[applicationId]/response/create.vue +++ b/app/pages/application/[applicationId]/response/create.vue @@ -3,7 +3,10 @@ import { ref } from "vue"; import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; -import { ApplicationResponseType, type ApplicationData } from "@ordinary/api-types"; +import { + ApplicationResponseType, + type ApplicationData, +} from "@ordinary/api-types"; const applicationId = ref(); @@ -67,31 +70,38 @@ onMounted(() => { diff --git a/app/pages/application/[applicationId]/response/edit/[id].vue b/app/pages/application/[applicationId]/response/edit/[id].vue index 3d6b90b..f55de48 100644 --- a/app/pages/application/[applicationId]/response/edit/[id].vue +++ b/app/pages/application/[applicationId]/response/edit/[id].vue @@ -4,7 +4,11 @@ import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; import type { PaginatedResponse } from "@/types/response"; -import { ApplicationResponseType, type ApplicationData, type ApplicationResponseData } from "@ordinary/api-types"; +import { + ApplicationResponseType, + type ApplicationData, + type ApplicationResponseData, +} from "@ordinary/api-types"; const applicationId = ref(); @@ -98,34 +102,41 @@ useHead({ diff --git a/app/pages/application/[applicationId]/response/index.vue b/app/pages/application/[applicationId]/response/index.vue index c98d728..3690cb5 100644 --- a/app/pages/application/[applicationId]/response/index.vue +++ b/app/pages/application/[applicationId]/response/index.vue @@ -1,6 +1,10 @@ - - + + + + + + + diff --git a/app/pages/application/create.vue b/app/pages/application/create.vue index 9b460e7..748e808 100644 --- a/app/pages/application/create.vue +++ b/app/pages/application/create.vue @@ -85,131 +85,138 @@ useHead({ diff --git a/app/pages/application/edit/[id].vue b/app/pages/application/edit/[id].vue index 1c69003..b2ac96b 100644 --- a/app/pages/application/edit/[id].vue +++ b/app/pages/application/edit/[id].vue @@ -156,134 +156,141 @@ useHead({ diff --git a/app/pages/application/index.vue b/app/pages/application/index.vue index 7b75ef2..d554587 100644 --- a/app/pages/application/index.vue +++ b/app/pages/application/index.vue @@ -118,142 +118,150 @@ onMounted(() => { diff --git a/app/pages/application/submission/index.vue b/app/pages/application/submission/index.vue index 9c72b2c..4664f6c 100644 --- a/app/pages/application/submission/index.vue +++ b/app/pages/application/submission/index.vue @@ -5,10 +5,11 @@ import * as zod from "zod"; import { useForm } from "vee-validate"; import dayjs from "dayjs"; import { EyeIcon } from "@heroicons/vue/24/solid"; -import { ApplicationSubmissionState, type ApplicationSubmissionData } from "@ordinary/api-types"; -import type { - ApplicationSubmissionFilter, -} from "@/types/application/submission"; +import { + ApplicationSubmissionState, + type ApplicationSubmissionData, +} from "@ordinary/api-types"; +import type { ApplicationSubmissionFilter } from "@/types/application/submission"; import type { Pagination, Sorting } from "@/types/table"; import type { PaginatedResponse } from "@/types/response"; @@ -192,144 +193,156 @@ onMounted(() => { diff --git a/app/pages/application/submission/view/[id].vue b/app/pages/application/submission/view/[id].vue index f22a832..a302b33 100644 --- a/app/pages/application/submission/view/[id].vue +++ b/app/pages/application/submission/view/[id].vue @@ -3,7 +3,10 @@ import { ref, onMounted, computed } from "vue"; import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; -import { ApplicationSubmissionState, type ApplicationSubmissionData } from "@ordinary/api-types"; +import { + ApplicationSubmissionState, + type ApplicationSubmissionData, +} from "@ordinary/api-types"; import type { PaginatedResponse } from "@/types/response"; const user = useCurrentUser(); @@ -115,7 +118,7 @@ definePageMeta({ }); useHead({ - title: "Edit Application", + title: "View Application", }); onMounted(() => { @@ -124,134 +127,143 @@ onMounted(() => { diff --git a/app/pages/discord/callback.vue b/app/pages/discord/callback.vue index c146dc3..442c4a5 100644 --- a/app/pages/discord/callback.vue +++ b/app/pages/discord/callback.vue @@ -24,7 +24,7 @@ definePageMeta({ layout: "guest", sanctum: { guestOnly: true, - } + }, }); diff --git a/app/pages/faq/create.vue b/app/pages/faq/create.vue index e549111..240f19c 100644 --- a/app/pages/faq/create.vue +++ b/app/pages/faq/create.vue @@ -46,29 +46,36 @@ useHead({ diff --git a/app/pages/faq/edit/[id].vue b/app/pages/faq/edit/[id].vue index f1e0fa0..c591f2e 100644 --- a/app/pages/faq/edit/[id].vue +++ b/app/pages/faq/edit/[id].vue @@ -75,32 +75,39 @@ useHead({ diff --git a/app/pages/faq/index.vue b/app/pages/faq/index.vue index d377e54..108d20e 100644 --- a/app/pages/faq/index.vue +++ b/app/pages/faq/index.vue @@ -84,98 +84,106 @@ onMounted(() => { - - + + + + + + + diff --git a/app/pages/index.vue b/app/pages/index.vue index 308844d..b8a75a3 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -29,44 +29,50 @@ useHead({ diff --git a/app/pages/logout.vue b/app/pages/logout.vue index 58571a1..21622c1 100644 --- a/app/pages/logout.vue +++ b/app/pages/logout.vue @@ -1,14 +1,14 @@ diff --git a/app/pages/permission/index.vue b/app/pages/permission/index.vue index 1001f6e..af006c0 100644 --- a/app/pages/permission/index.vue +++ b/app/pages/permission/index.vue @@ -104,6 +104,16 @@ const save = async () => { } }; +definePageMeta({ + permission: { + permission: "owner", + }, +}); + +useHead({ + title: "Permissions", +}); + onMounted(async () => { loading.value = true; await Promise.all([loadPermission(), loadPermissionTemplate()]); @@ -112,53 +122,68 @@ onMounted(async () => { diff --git a/app/pages/reaction-role/create.vue b/app/pages/reaction-role/create.vue index d6058b1..d9220e6 100644 --- a/app/pages/reaction-role/create.vue +++ b/app/pages/reaction-role/create.vue @@ -47,31 +47,38 @@ useHead({ diff --git a/app/pages/reaction-role/edit/[id].vue b/app/pages/reaction-role/edit/[id].vue index 5eb80cf..df713fa 100644 --- a/app/pages/reaction-role/edit/[id].vue +++ b/app/pages/reaction-role/edit/[id].vue @@ -84,34 +84,41 @@ useHead({ diff --git a/app/pages/reaction-role/index.vue b/app/pages/reaction-role/index.vue index 56cdf07..fd8508b 100644 --- a/app/pages/reaction-role/index.vue +++ b/app/pages/reaction-role/index.vue @@ -83,6 +83,9 @@ const pageChange = (page: number) => { }; definePageMeta({ + navbar: { + buttons: resolveComponent("ReactionRoleNavbarButtons"), + }, permission: { permission: "reactionRole.read", }, @@ -98,102 +101,110 @@ onMounted(() => { - - + + + + + + + diff --git a/app/pages/rule/create.vue b/app/pages/rule/create.vue index 82c7083..c783474 100644 --- a/app/pages/rule/create.vue +++ b/app/pages/rule/create.vue @@ -47,31 +47,38 @@ useHead({ diff --git a/app/pages/rule/edit/[id].vue b/app/pages/rule/edit/[id].vue index edcec23..42cbcf8 100644 --- a/app/pages/rule/edit/[id].vue +++ b/app/pages/rule/edit/[id].vue @@ -65,6 +65,7 @@ onMounted(async () => { }); definePageMeta({ + title: "Edit Rule", permission: { permission: "rule.update", fallback: "/rule", @@ -77,34 +78,41 @@ useHead({ diff --git a/app/pages/rule/index.vue b/app/pages/rule/index.vue index d60ce07..c498ba3 100644 --- a/app/pages/rule/index.vue +++ b/app/pages/rule/index.vue @@ -88,98 +88,106 @@ onMounted(() => { - - + + + + + + + diff --git a/app/pages/server-content/create.vue b/app/pages/server-content/create.vue index d151315..017edde 100644 --- a/app/pages/server-content/create.vue +++ b/app/pages/server-content/create.vue @@ -56,35 +56,42 @@ useHead({ diff --git a/app/pages/server-content/edit/[id].vue b/app/pages/server-content/edit/[id].vue index 058fc6a..55ff1aa 100644 --- a/app/pages/server-content/edit/[id].vue +++ b/app/pages/server-content/edit/[id].vue @@ -84,35 +84,42 @@ useHead({ diff --git a/app/pages/server-content/index.vue b/app/pages/server-content/index.vue index 05518c1..9b9a41f 100644 --- a/app/pages/server-content/index.vue +++ b/app/pages/server-content/index.vue @@ -194,7 +194,7 @@ definePageMeta({ }); useHead({ - title: "Mods and Datapacks", + title: "Mods + Datapacks", }); onMounted(() => { @@ -203,154 +203,160 @@ onMounted(() => { - - + + + + + + + diff --git a/app/pages/server-content/message/index.vue b/app/pages/server-content/message/index.vue index 08863aa..fdf0fd3 100644 --- a/app/pages/server-content/message/index.vue +++ b/app/pages/server-content/message/index.vue @@ -67,45 +67,56 @@ definePageMeta({ }); useHead({ - title: "Mod/Datapack Messages", + title: "Mods + Datapacks Messages", }); diff --git a/app/pages/ticket/button/create.vue b/app/pages/ticket/button/create.vue index 01aa866..ed466b7 100644 --- a/app/pages/ticket/button/create.vue +++ b/app/pages/ticket/button/create.vue @@ -3,7 +3,7 @@ import { ref } from "vue"; import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; -import type { TicketPanelData, TicketTeamData } from "@ordinary/api-types" +import type { TicketPanelData, TicketTeamData } from "@ordinary/api-types"; import type { FullResponse } from "@/types/response"; import { FaceSmileIcon } from "@heroicons/vue/24/outline"; import EmojiPicker from "vue3-emoji-picker"; @@ -55,12 +55,15 @@ const save = handleSubmit(async (values) => { }); const loadTeam = async () => { - const { data } = await useApi>("/ticket/team", { - method: "get", - query: { - full: true, + const { data } = await useApi>( + "/ticket/team", + { + method: "get", + query: { + full: true, + }, }, - }); + ); teams.value = data.value?.data?.map((team) => ({ label: team.name, @@ -69,12 +72,15 @@ const loadTeam = async () => { }; const loadPanel = async () => { - const { data } = await useApi>("/ticket/panel", { - method: "get", - query: { - full: true, + const { data } = await useApi>( + "/ticket/panel", + { + method: "get", + query: { + full: true, + }, }, - }); + ); panels.value = data.value?.data?.map((panel) => ({ label: panel.title, @@ -94,70 +100,76 @@ definePageMeta({ }, }); +useHead({ + title: "Create Ticket Button", +}); + onMounted(async () => { loading.value = true; await loadTeam(); await loadPanel(); loading.value = false; }); - -useHead({ - title: "Create Ticket Button", -}); diff --git a/app/pages/ticket/button/edit/[id].vue b/app/pages/ticket/button/edit/[id].vue index d257a28..f37a0d6 100644 --- a/app/pages/ticket/button/edit/[id].vue +++ b/app/pages/ticket/button/edit/[id].vue @@ -3,7 +3,11 @@ import { ref, onMounted } from "vue"; import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; -import type { TicketPanelData, TicketTeamData, TicketButtonData } from "@ordinary/api-types" +import type { + TicketPanelData, + TicketTeamData, + TicketButtonData, +} from "@ordinary/api-types"; import type { PaginatedResponse, FullResponse } from "@/types/response"; import { FaceSmileIcon } from "@heroicons/vue/24/outline"; import EmojiPicker from "vue3-emoji-picker"; @@ -54,12 +58,15 @@ const save = handleSubmit(async (values) => { }); const loadTeam = async () => { - const { data } = await useApi>("/ticket/team", { - method: "get", - query: { - full: true, + const { data } = await useApi>( + "/ticket/team", + { + method: "get", + query: { + full: true, + }, }, - }); + ); teams.value = data.value?.data?.map((team) => ({ label: team.name, @@ -68,12 +75,15 @@ const loadTeam = async () => { }; const loadPanel = async () => { - const { data } = await useApi>("/ticket/panel", { - method: "get", - query: { - full: true, + const { data } = await useApi>( + "/ticket/panel", + { + method: "get", + query: { + full: true, + }, }, - }); + ); panels.value = data.value?.data?.map((panel) => ({ label: panel.title, @@ -93,17 +103,24 @@ definePageMeta({ }, }); +useHead({ + title: "Edit Ticket Button", +}); + onMounted(async () => { loading.value = true; ticketButtonId.value = parseRouteParameter(route.params.id); - const { data } = await useApi>("/ticket/button", { - method: "get", - params: { - include: "ticketButtonPingRoles", - "filter[id]": ticketButtonId.value, + const { data } = await useApi>( + "/ticket/button", + { + method: "get", + params: { + include: "ticketButtonPingRoles", + "filter[id]": ticketButtonId.value, + }, }, - }); + ); if (!data.value || !data.value?.data[0]) { navigateTo("/ticket/button"); return; @@ -131,66 +148,69 @@ onMounted(async () => { loading.value = false; }); - -useHead({ - title: "Edit Ticket Button", -}); diff --git a/app/pages/ticket/button/index.vue b/app/pages/ticket/button/index.vue index f9654a4..ff2dd43 100644 --- a/app/pages/ticket/button/index.vue +++ b/app/pages/ticket/button/index.vue @@ -7,7 +7,11 @@ import type { ButtonFilter } from "@/types/ticket/button"; import { PencilIcon, PlusIcon } from "@heroicons/vue/24/solid"; import type { Pagination } from "@/types/table"; import type { PaginatedResponse, FullResponse } from "@/types/response"; -import type { TicketPanelData, TicketTeamData, TicketButtonData } from "@ordinary/api-types"; +import type { + TicketPanelData, + TicketTeamData, + TicketButtonData, +} from "@ordinary/api-types"; const loading = ref(true); const ticketButtons = ref([]); @@ -67,14 +71,17 @@ const changeFilter = handleSubmit((values) => { const loadTicketButton = async (page = 1) => { loading.value = true; - const { data } = await useApi>("/ticket/button", { - method: "get", - query: { - page_size: 10, - page, - ...filters.value, + const { data } = await useApi>( + "/ticket/button", + { + method: "get", + query: { + page_size: 10, + page, + ...filters.value, + }, }, - }); + ); if (data.value) { ticketButtons.value = data.value.data ?? []; @@ -93,12 +100,15 @@ const loadTicketButton = async (page = 1) => { }; const loadTeam = async () => { - const { data } = await useApi>("/ticket/team", { - method: "get", - query: { - full: true, + const { data } = await useApi>( + "/ticket/team", + { + method: "get", + query: { + full: true, + }, }, - }); + ); teams.value = data.value?.data?.map((team) => ({ label: team.name, @@ -107,12 +117,15 @@ const loadTeam = async () => { }; const loadPanel = async () => { - const { data } = await useApi>("/ticket/panel", { - method: "get", - query: { - full: true, + const { data } = await useApi>( + "/ticket/panel", + { + method: "get", + query: { + full: true, + }, }, - }); + ); panels.value = data.value?.data?.map((panel) => ({ label: panel.title, @@ -171,117 +184,125 @@ onMounted(() => { - - + + + + + + + diff --git a/app/pages/ticket/config/index.vue b/app/pages/ticket/config/index.vue index 28d03e5..23034e7 100644 --- a/app/pages/ticket/config/index.vue +++ b/app/pages/ticket/config/index.vue @@ -81,54 +81,66 @@ onMounted(async () => { const canCreate = computed(() => hasPermissionTo("ticketConfig.create")); definePageMeta({ + title: "Ticket Config", permission: { permission: "ticketConfig.read", fallback: "/ticket", }, }); +useHead({ + title: "Ticket Config", +}); + onMounted(async () => { loading.value = true; await loadCategories(); loading.value = false; }); - -useHead({ - title: "Mod/Datapack Messages", -}); diff --git a/app/pages/ticket/index.vue b/app/pages/ticket/index.vue index 92f8352..111eda0 100644 --- a/app/pages/ticket/index.vue +++ b/app/pages/ticket/index.vue @@ -4,7 +4,11 @@ import { toTypedSchema } from "@vee-validate/zod"; import * as zod from "zod"; import { useForm } from "vee-validate"; import type { TicketFilter } from "@/types/ticket"; -import { TicketState, type TicketData, type DiscordUserData } from "@ordinary/api-types"; +import { + TicketState, + type TicketData, + type DiscordUserData, +} from "@ordinary/api-types"; import { DocumentTextIcon } from "@heroicons/vue/24/solid"; import type { Pagination } from "@/types/table"; import type { PaginatedResponse } from "@/types/response"; @@ -163,93 +167,81 @@ onMounted(() => { diff --git a/app/pages/ticket/panel/create.vue b/app/pages/ticket/panel/create.vue index 61fa24c..d409617 100644 --- a/app/pages/ticket/panel/create.vue +++ b/app/pages/ticket/panel/create.vue @@ -37,6 +37,7 @@ const save = handleSubmit(async (values) => { }); definePageMeta({ + title: "Create Ticket Panel", permission: { permission: "ticketPanel.create", fallback: "/ticket/panel", @@ -49,30 +50,41 @@ useHead({ diff --git a/app/pages/ticket/panel/edit/[id].vue b/app/pages/ticket/panel/edit/[id].vue index b701276..748175a 100644 --- a/app/pages/ticket/panel/edit/[id].vue +++ b/app/pages/ticket/panel/edit/[id].vue @@ -67,16 +67,23 @@ definePageMeta({ }, }); +useHead({ + title: "Edit Ticket Panel", +}); + onMounted(async () => { loading.value = true; ticketPanelId.value = parseRouteParameter(route.params.id); - const { data } = await useApi>("/ticket/panel", { - method: "get", - params: { - "filter[id]": ticketPanelId.value, + const { data } = await useApi>( + "/ticket/panel", + { + method: "get", + params: { + "filter[id]": ticketPanelId.value, + }, }, - }); + ); if (!data.value || !data.value?.data[0]) { navigateTo("/ticket/panel"); return; @@ -91,49 +98,53 @@ onMounted(async () => { loading.value = false; }); - -useHead({ - title: "Edit Ticket Panel", -}); diff --git a/app/pages/ticket/panel/index.vue b/app/pages/ticket/panel/index.vue index 8079edc..f2534fb 100644 --- a/app/pages/ticket/panel/index.vue +++ b/app/pages/ticket/panel/index.vue @@ -40,13 +40,16 @@ const headers = ref([ const loadTicketPanel = async (page = 1) => { loading.value = true; - const { data } = await useApi>("/ticket/panel", { - method: "get", - query: { - page_size: 10, - page, + const { data } = await useApi>( + "/ticket/panel", + { + method: "get", + query: { + page_size: 10, + page, + }, }, - }); + ); if (data.value) { ticketPanels.value = data.value.data ?? []; @@ -84,6 +87,10 @@ const pageChange = (page: number) => { }; definePageMeta({ + title: "Ticket Panel", + navbar: { + buttons: resolveComponent("TicketPanelNavbarButtons"), + }, permission: { permission: "ticket.read", }, @@ -99,104 +106,112 @@ onMounted(() => { - - + + + + + + + diff --git a/app/pages/ticket/team/create.vue b/app/pages/ticket/team/create.vue index 6d907c7..15035c7 100644 --- a/app/pages/ticket/team/create.vue +++ b/app/pages/ticket/team/create.vue @@ -47,33 +47,40 @@ useHead({ diff --git a/app/pages/ticket/team/edit/[id].vue b/app/pages/ticket/team/edit/[id].vue index 74784f2..c23a742 100644 --- a/app/pages/ticket/team/edit/[id].vue +++ b/app/pages/ticket/team/edit/[id].vue @@ -47,17 +47,24 @@ definePageMeta({ }, }); +useHead({ + title: "Edit Ticket Team", +}); + onMounted(async () => { loading.value = true; ticketTeamId.value = parseRouteParameter(route.params.id); - const { data } = await useApi>("/ticket/team", { - method: "get", - params: { - "filter[id]": ticketTeamId.value, - include: "ticketTeamRoles", + const { data } = await useApi>( + "/ticket/team", + { + method: "get", + params: { + "filter[id]": ticketTeamId.value, + include: "ticketTeamRoles", + }, }, - }); + ); if (!data.value || !data.value?.data[0]) { navigateTo("/ticket/team"); return; @@ -75,43 +82,46 @@ onMounted(async () => { loading.value = false; }); - -useHead({ - title: "Edit Ticket Team", -}); diff --git a/app/pages/ticket/team/index.vue b/app/pages/ticket/team/index.vue index 8a35cf9..2eb56c4 100644 --- a/app/pages/ticket/team/index.vue +++ b/app/pages/ticket/team/index.vue @@ -32,14 +32,17 @@ const headers = ref([ const loadTicketTeam = async (page = 1) => { loading.value = true; - const { data } = await useApi>("/ticket/team", { - method: "get", - query: { - page_size: 10, - page, - include: "ticketTeamRoles", + const { data } = await useApi>( + "/ticket/team", + { + method: "get", + query: { + page_size: 10, + page, + include: "ticketTeamRoles", + }, }, - }); + ); if (data.value) { ticketTeams.value = data.value.data ?? []; @@ -92,108 +95,116 @@ onMounted(() => { - - + + + + + + + diff --git a/app/types/application/submission.ts b/app/types/application/submission.ts index d7cf772..0dd89e0 100644 --- a/app/types/application/submission.ts +++ b/app/types/application/submission.ts @@ -1,4 +1,4 @@ -import { ApplicationSubmissionState } from "@ordinary/api-types"; +import type { ApplicationSubmissionState } from "@ordinary/api-types"; export type ApplicationSubmissionFilter = { state: ApplicationSubmissionState | null; diff --git a/app/utils/Helper.ts b/app/utils/Helper.ts index 2a7c8b4..13239d2 100644 --- a/app/utils/Helper.ts +++ b/app/utils/Helper.ts @@ -1,14 +1,14 @@ import type { LocationQueryValue } from "vue-router"; export const parseRouteParameter = ( - param: string | string[] | LocationQueryValue[], + param: string | string[] | undefined, ): number => { if (typeof param === "object") { const value = parseInt(param[0] ?? ""); return Number.isNaN(value) ? 0 : value; } - const value = parseInt(param); + const value = parseInt(param ?? ""); return Number.isNaN(value) ? 0 : value; }; diff --git a/nuxt.config.ts b/nuxt.config.ts index 3f33798..7ff4715 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -3,7 +3,8 @@ export default defineNuxtConfig({ compatibilityDate: "2024-11-01", devtools: { enabled: true }, ssr: false, - modules: ["@nuxtjs/tailwindcss", "@nuxt/eslint", "nuxt-auth-sanctum"], + modules: ["@nuxt/ui", "@nuxt/eslint", "nuxt-auth-sanctum"], + css: ["~/assets/css/main.css"], runtimeConfig: { public: { apiBase: "/api/v1", diff --git a/package.json b/package.json index 7d54d6d..4304cef 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "dependencies": { "@headlessui/vue": "^1.7.22", "@heroicons/vue": "^2.1.4", - "@nuxtjs/tailwindcss": "^6.12.0", + "@nuxt/ui": "^4.2.1", "@vee-validate/zod": "^4.12.4", "@vueuse/core": "^12.3.0", "dayjs": "^1.11.13", diff --git a/yarn.lock b/yarn.lock index a561e05..27bfd61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -243,6 +243,13 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" +"@capsizecss/unpack@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@capsizecss/unpack/-/unpack-3.0.1.tgz#d40cd7fded06110a3d6198dd1e7a9bbcded52880" + integrity sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg== + dependencies: + fontkit "^2.0.2" + "@clack/core@0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@clack/core/-/core-0.5.0.tgz#970df024a927d6af90111667a0384e233b5ffa1a" @@ -267,16 +274,6 @@ dependencies: mime "^3.0.0" -"@csstools/selector-resolve-nested@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" - integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== - -"@csstools/selector-specificity@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" - integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== - "@dxup/nuxt@^0.2.1": version "0.2.2" resolved "https://registry.yarnpkg.com/@dxup/nuxt/-/nuxt-0.2.2.tgz#2d1749ec1171780c043fff1b52e2d92bc5db041d" @@ -293,7 +290,7 @@ resolved "https://registry.yarnpkg.com/@dxup/unimport/-/unimport-0.1.2.tgz#a08e4039efe41c50d9c36fbb39d9976b88eefa68" integrity sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ== -"@emnapi/core@^1.4.3", "@emnapi/core@^1.7.1": +"@emnapi/core@^1.4.3", "@emnapi/core@^1.6.0", "@emnapi/core@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.7.1.tgz#3a79a02dbc84f45884a1806ebb98e5746bdfaac4" integrity sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg== @@ -301,14 +298,14 @@ "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" -"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.7.1": +"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.6.0", "@emnapi/runtime@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.1.tgz#a73784e23f5d57287369c808197288b52276b791" integrity sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA== dependencies: tslib "^2.4.0" -"@emnapi/wasi-threads@1.1.0": +"@emnapi/wasi-threads@1.1.0", "@emnapi/wasi-threads@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf" integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== @@ -680,6 +677,35 @@ "@eslint/core" "^0.17.0" levn "^0.4.1" +"@floating-ui/core@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" + integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w== + dependencies: + "@floating-ui/utils" "^0.2.10" + +"@floating-ui/dom@^1.6.13", "@floating-ui/dom@^1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77" + integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA== + dependencies: + "@floating-ui/core" "^1.7.3" + "@floating-ui/utils" "^0.2.10" + +"@floating-ui/utils@^0.2.10": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c" + integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== + +"@floating-ui/vue@^1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@floating-ui/vue/-/vue-1.1.9.tgz#508c386bd3d595247f1dda8dbca00b76fe8fcaf9" + integrity sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ== + dependencies: + "@floating-ui/dom" "^1.7.4" + "@floating-ui/utils" "^0.2.10" + vue-demi ">=0.13.0" + "@headlessui/vue@^1.7.22": version "1.7.23" resolved "https://registry.yarnpkg.com/@headlessui/vue/-/vue-1.7.23.tgz#7fe19dbeca35de9e6270c82c78c4864e6a6f7391" @@ -715,6 +741,48 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@iconify/collections@^1.0.608": + version "1.0.625" + resolved "https://registry.yarnpkg.com/@iconify/collections/-/collections-1.0.625.tgz#8c01b38a4462a1aa35a24b86800ef84d253e684e" + integrity sha512-2PTyA9TSMGDjwZ59KeGP616xqosTxa9QVp7rnkZTQgrOHcBpcwcQClYIX/npIlve4vCsf5T3pYUYa6oPHJOK+g== + dependencies: + "@iconify/types" "*" + +"@iconify/types@*", "@iconify/types@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@iconify/utils@^3.0.2": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-3.1.0.tgz#fb41882915f97fee6f91a2fbb8263e8772ca0438" + integrity sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw== + dependencies: + "@antfu/install-pkg" "^1.1.0" + "@iconify/types" "^2.0.0" + mlly "^1.8.0" + +"@iconify/vue@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@iconify/vue/-/vue-5.0.0.tgz#c47e4b3a225a64bbf28dce924934f23e54b061a4" + integrity sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg== + dependencies: + "@iconify/types" "^2.0.0" + +"@internationalized/date@^3.10.0", "@internationalized/date@^3.5.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.10.0.tgz#056db64a4facdf48c6937ad498a882a8151d640a" + integrity sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/number@^3.5.0", "@internationalized/number@^3.6.5": + version "3.6.5" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.6.5.tgz#1103f2832ca8d9dd3e4eecf95733d497791dbbbe" + integrity sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g== + dependencies: + "@swc/helpers" "^0.5.0" + "@ioredis/commands@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.4.0.tgz#9f657d51cdd5d2fdb8889592aa4a355546151f25" @@ -751,7 +819,7 @@ dependencies: minipass "^7.0.4" -"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== @@ -759,7 +827,7 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/remapping@^2.3.5": +"@jridgewell/remapping@^2.3.4", "@jridgewell/remapping@^2.3.5": version "2.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== @@ -793,17 +861,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@koa/router@^12.0.1": - version "12.0.2" - resolved "https://registry.yarnpkg.com/@koa/router/-/router-12.0.2.tgz#286d51959ed611255faa944818a112e35567835a" - integrity sha512-sYcHglGKTxGF+hQ6x67xDfkE9o+NhVlRHBqq6gLywaMc6CojK/5vFZByphdonKinYlMLkEkacm+HEse9HzwgTA== - dependencies: - debug "^4.3.4" - http-errors "^2.0.0" - koa-compose "^4.1.0" - methods "^1.1.2" - path-to-regexp "^6.3.0" - "@kwsites/file-exists@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" @@ -903,7 +960,7 @@ resolved "https://registry.yarnpkg.com/@nuxt/devalue/-/devalue-2.0.2.tgz#5749f04df13bda4c863338d8dabaf370f45ef7c7" integrity sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA== -"@nuxt/devtools-kit@3.1.1", "@nuxt/devtools-kit@^3.1.1": +"@nuxt/devtools-kit@3.1.1", "@nuxt/devtools-kit@^3.0.1", "@nuxt/devtools-kit@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-3.1.1.tgz#963ffdc64aff163506d17c68192fb2ec631d9289" integrity sha512-sjiKFeDCOy1SyqezSgyV4rYNfQewC64k/GhOsuJgRF+wR2qr6KTVhO6u2B+csKs74KrMrnJprQBgud7ejvOXAQ== @@ -911,6 +968,14 @@ "@nuxt/kit" "^4.2.1" execa "^8.0.1" +"@nuxt/devtools-kit@^2.6.5": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@nuxt/devtools-kit/-/devtools-kit-2.7.0.tgz#981dc6d27022dad38b9ec0644da4230b8556ff35" + integrity sha512-MIJdah6CF6YOW2GhfKnb8Sivu6HpcQheqdjOlZqShBr+1DyjtKQbAKSCAyKPaoIzZP4QOo2SmTFV6aN8jBeEIQ== + dependencies: + "@nuxt/kit" "^3.19.3" + execa "^8.0.1" + "@nuxt/devtools-wizard@3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@nuxt/devtools-wizard/-/devtools-wizard-3.1.1.tgz#f2858bff0fe725d74d87b3de9ef6f3933b5038f1" @@ -1017,7 +1082,54 @@ pathe "^2.0.3" unimport "^5.5.0" -"@nuxt/kit@4.2.1", "@nuxt/kit@^4.2.1": +"@nuxt/fonts@^0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@nuxt/fonts/-/fonts-0.12.1.tgz#0d05a73abbde5447e53bcdcfbe041308c34bb1b3" + integrity sha512-ALajI/HE+uqqL/PWkWwaSUm1IdpyGPbP3mYGy2U1l26/o4lUZBxjFaduMxaZ85jS5yQeJfCu2eEHANYFjAoujQ== + dependencies: + "@nuxt/devtools-kit" "^3.0.1" + "@nuxt/kit" "^4.2.1" + consola "^3.4.2" + css-tree "^3.1.0" + defu "^6.1.4" + esbuild "^0.25.12" + fontaine "^0.7.0" + fontless "^0.1.0" + h3 "^1.15.4" + jiti "^2.6.1" + magic-regexp "^0.10.0" + magic-string "^0.30.21" + node-fetch-native "^1.6.7" + ohash "^2.0.11" + pathe "^2.0.3" + sirv "^3.0.2" + tinyglobby "^0.2.15" + ufo "^1.6.1" + unifont "^0.6.0" + unplugin "^2.3.10" + unstorage "^1.17.2" + +"@nuxt/icon@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@nuxt/icon/-/icon-2.1.0.tgz#067ad1fc7847189c4983f987a4637dbdab45816d" + integrity sha512-m+XQrgzeK5gQ1HkB7G7u1os6egoD07fiHKijG7NPxqT5yZUGOjKJ7X/Le10l3QWRKyCB+IiU0t+eUqSvh+SULg== + dependencies: + "@iconify/collections" "^1.0.608" + "@iconify/types" "^2.0.0" + "@iconify/utils" "^3.0.2" + "@iconify/vue" "^5.0.0" + "@nuxt/devtools-kit" "^2.6.5" + "@nuxt/kit" "^4.1.3" + consola "^3.4.2" + local-pkg "^1.1.2" + mlly "^1.8.0" + ohash "^2.0.11" + pathe "^2.0.3" + picomatch "^4.0.3" + std-env "^3.10.0" + tinyglobby "^0.2.15" + +"@nuxt/kit@4.2.1", "@nuxt/kit@^4.1.3", "@nuxt/kit@^4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-4.2.1.tgz#a53fdff6c99454414db6a2b037b895a50723fdcc" integrity sha512-lLt8KLHyl7IClc3RqRpRikz15eCfTRlAWL9leVzPyg5N87FfKE/7EWgWvpiL/z4Tf3dQCIqQb88TmHE0JTIDvA== @@ -1043,7 +1155,7 @@ unctx "^2.4.1" untyped "^2.0.0" -"@nuxt/kit@^3.15.4", "@nuxt/kit@^3.16.0": +"@nuxt/kit@^3.13.2", "@nuxt/kit@^3.15.4", "@nuxt/kit@^3.19.3": version "3.20.1" resolved "https://registry.yarnpkg.com/@nuxt/kit/-/kit-3.20.1.tgz#0cf6d00b1fda03408d9e2ab3048b8cad73abb2e9" integrity sha512-TIslaylfI5kd3AxX5qts0qyrIQ9Uq3HAA1bgIIJ+c+zpDfK338YS+YrCWxBBzDMECRCbAS58mqAd2MtJfG1ENA== @@ -1102,7 +1214,7 @@ vue-bundle-renderer "^2.2.0" vue-devtools-stub "^0.1.0" -"@nuxt/schema@4.2.1": +"@nuxt/schema@4.2.1", "@nuxt/schema@^4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@nuxt/schema/-/schema-4.2.1.tgz#679914bda55523b0cb8e1375e88a4bed309875d9" integrity sha512-kSuma7UztDVyw8eAmN3rKFoaWjNRkJE9+kqwEurpuxG7nCwFPS7sUPSGzovzaofP+xV30tl6wveBEcDRWyQvgA== @@ -1131,6 +1243,57 @@ rc9 "^2.1.2" std-env "^3.8.1" +"@nuxt/ui@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@nuxt/ui/-/ui-4.2.1.tgz#bf78fa69eaa10aecf300bfa69f6ca6a1285f10c8" + integrity sha512-H5/0w1ktRDGk4ORKmGegqhNsR8DZEc+3Bb9a8aHsQVzDkGKqEJLh2iUJtalKs4QdUGkocDXaQy/xRudajOD4kg== + dependencies: + "@iconify/vue" "^5.0.0" + "@internationalized/date" "^3.10.0" + "@internationalized/number" "^3.6.5" + "@nuxt/fonts" "^0.12.1" + "@nuxt/icon" "^2.1.0" + "@nuxt/kit" "^4.2.1" + "@nuxt/schema" "^4.2.1" + "@nuxtjs/color-mode" "^3.5.2" + "@standard-schema/spec" "^1.0.0" + "@tailwindcss/postcss" "^4.1.17" + "@tailwindcss/vite" "^4.1.17" + "@tanstack/vue-table" "^8.21.3" + "@tanstack/vue-virtual" "^3.13.12" + "@unhead/vue" "^2.0.19" + "@vueuse/core" "^13.9.0" + "@vueuse/integrations" "^13.9.0" + colortranslator "^5.0.0" + consola "^3.4.2" + defu "^6.1.4" + embla-carousel-auto-height "^8.6.0" + embla-carousel-auto-scroll "^8.6.0" + embla-carousel-autoplay "^8.6.0" + embla-carousel-class-names "^8.6.0" + embla-carousel-fade "^8.6.0" + embla-carousel-vue "^8.6.0" + embla-carousel-wheel-gestures "^8.1.0" + fuse.js "^7.1.0" + hookable "^5.5.3" + knitwork "^1.3.0" + magic-string "^0.30.21" + mlly "^1.8.0" + motion-v "^1.7.3" + ohash "^2.0.11" + pathe "^2.0.3" + reka-ui "2.6.0" + scule "^1.3.0" + tailwind-merge "^3.4.0" + tailwind-variants "^3.1.1" + tailwindcss "^4.1.17" + tinyglobby "^0.2.15" + unplugin "^2.3.10" + unplugin-auto-import "^20.2.0" + unplugin-vue-components "^30.0.0" + vaul-vue "0.4.1" + vue-component-type-helpers "^3.1.4" + "@nuxt/vite-builder@4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@nuxt/vite-builder/-/vite-builder-4.2.1.tgz#fe5e292dd16426db070e4f44a95f0828d0b9d7e0" @@ -1167,27 +1330,15 @@ vite-plugin-checker "^0.11.0" vue-bundle-renderer "^2.2.0" -"@nuxtjs/tailwindcss@^6.12.0": - version "6.14.0" - resolved "https://registry.yarnpkg.com/@nuxtjs/tailwindcss/-/tailwindcss-6.14.0.tgz#c2feffc4ea4f5c4bd8d60218841d8bae84f70271" - integrity sha512-30RyDK++LrUVRgc2A85MktGWIZoRQgeQKjE4CjjD64OXNozyl+4ScHnnYgqVToMM6Ch2ZG2W4wV2J0EN6F0zkQ== +"@nuxtjs/color-mode@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@nuxtjs/color-mode/-/color-mode-3.5.2.tgz#4f2cbdd44009068b746e3bb0964b761b90969b73" + integrity sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA== dependencies: - "@nuxt/kit" "^3.16.0" - autoprefixer "^10.4.20" - c12 "^3.0.2" - consola "^3.4.0" - defu "^6.1.4" - h3 "^1.15.1" - klona "^2.0.6" - ohash "^2.0.11" - pathe "^2.0.3" - pkg-types "^2.1.0" - postcss "^8.5.3" - postcss-nesting "^13.0.1" - tailwind-config-viewer "^2.0.4" - tailwindcss "~3.4.17" - ufo "^1.5.4" - unctx "^2.4.1" + "@nuxt/kit" "^3.13.2" + pathe "^1.1.2" + pkg-types "^1.2.1" + semver "^7.6.3" "@oxc-minify/binding-android-arm64@0.96.0": version "0.96.0" @@ -1775,6 +1926,11 @@ resolved "https://registry.yarnpkg.com/@speed-highlight/core/-/core-1.2.12.tgz#5578ad2b92b0f7edc9ad46d9a7f921ff799d8a42" integrity sha512-uilwrK0Ygyri5dToHYdZSjcvpS2ZwX0w5aSt3GCEN9hrjxWCoeV4Z2DTXuxjwbntaLQIEEAlCeNQss5SoHvAEA== +"@standard-schema/spec@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" + integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== + "@stylistic/eslint-plugin@^5.6.1": version "5.6.1" resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-5.6.1.tgz#98e1371757881eecce69b1ec497ef6fc7d6470c9" @@ -1787,12 +1943,149 @@ estraverse "^5.3.0" picomatch "^4.0.3" +"@swc/helpers@^0.5.0", "@swc/helpers@^0.5.12": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + dependencies: + tslib "^2.8.0" + +"@tailwindcss/node@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.17.tgz#ec40a37293246f4eeab2dac00e4425af9272f600" + integrity sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg== + dependencies: + "@jridgewell/remapping" "^2.3.4" + enhanced-resolve "^5.18.3" + jiti "^2.6.1" + lightningcss "1.30.2" + magic-string "^0.30.21" + source-map-js "^1.2.1" + tailwindcss "4.1.17" + +"@tailwindcss/oxide-android-arm64@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.17.tgz#17f0dc901f88a979c5bff618181bce596dff596d" + integrity sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ== + +"@tailwindcss/oxide-darwin-arm64@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.17.tgz#63e12e62b83f6949dbb10b5a7f6e441606835efc" + integrity sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg== + +"@tailwindcss/oxide-darwin-x64@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.17.tgz#6dad270d2777508f55e2b73eca0eaef625bc45a7" + integrity sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog== + +"@tailwindcss/oxide-freebsd-x64@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.17.tgz#e7628b4602ac7d73c11a9922ecb83c24337eff55" + integrity sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g== + +"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.17.tgz#4d96a6fe4c7ed20e7a013101ee46f46caca2233e" + integrity sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ== + +"@tailwindcss/oxide-linux-arm64-gnu@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.17.tgz#adc3c01cd73610870bfc21db5713571e08fb2210" + integrity sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ== + +"@tailwindcss/oxide-linux-arm64-musl@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.17.tgz#39ceda30407af56a1ee125b2c5ce856c6d29250f" + integrity sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg== + +"@tailwindcss/oxide-linux-x64-gnu@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.17.tgz#a3d4bd876c04d09856af0c394f5095fbc8a2b14c" + integrity sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ== + +"@tailwindcss/oxide-linux-x64-musl@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.17.tgz#bdc20aa4fb2d28cc928f2cfffff7a9cd03a51d5b" + integrity sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ== + +"@tailwindcss/oxide-wasm32-wasi@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.17.tgz#7c0804748935928751838f86ff4f879c38f8a6d7" + integrity sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg== + dependencies: + "@emnapi/core" "^1.6.0" + "@emnapi/runtime" "^1.6.0" + "@emnapi/wasi-threads" "^1.1.0" + "@napi-rs/wasm-runtime" "^1.0.7" + "@tybys/wasm-util" "^0.10.1" + tslib "^2.4.0" + +"@tailwindcss/oxide-win32-arm64-msvc@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.17.tgz#7222fc2ceee9d45ebe5aebf38707ee9833a20475" + integrity sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A== + +"@tailwindcss/oxide-win32-x64-msvc@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.17.tgz#ac79087f451dfcd5c3099589027a5732b045a3bf" + integrity sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw== + +"@tailwindcss/oxide@4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.17.tgz#6c063b40a022f4fbdac557c0586cfb9ae08a3dfe" + integrity sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA== + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.1.17" + "@tailwindcss/oxide-darwin-arm64" "4.1.17" + "@tailwindcss/oxide-darwin-x64" "4.1.17" + "@tailwindcss/oxide-freebsd-x64" "4.1.17" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.17" + "@tailwindcss/oxide-linux-arm64-gnu" "4.1.17" + "@tailwindcss/oxide-linux-arm64-musl" "4.1.17" + "@tailwindcss/oxide-linux-x64-gnu" "4.1.17" + "@tailwindcss/oxide-linux-x64-musl" "4.1.17" + "@tailwindcss/oxide-wasm32-wasi" "4.1.17" + "@tailwindcss/oxide-win32-arm64-msvc" "4.1.17" + "@tailwindcss/oxide-win32-x64-msvc" "4.1.17" + +"@tailwindcss/postcss@^4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.17.tgz#983b4233920a9d7083cd0d488d5cdc254f304f6b" + integrity sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw== + dependencies: + "@alloc/quick-lru" "^5.2.0" + "@tailwindcss/node" "4.1.17" + "@tailwindcss/oxide" "4.1.17" + postcss "^8.4.41" + tailwindcss "4.1.17" + +"@tailwindcss/vite@^4.1.17": + version "4.1.17" + resolved "https://registry.yarnpkg.com/@tailwindcss/vite/-/vite-4.1.17.tgz#c316b3817b21e175c37261249550790b1b909f93" + integrity sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA== + dependencies: + "@tailwindcss/node" "4.1.17" + "@tailwindcss/oxide" "4.1.17" + tailwindcss "4.1.17" + +"@tanstack/table-core@8.21.3": + version "8.21.3" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.3.tgz#2977727d8fc8dfa079112d9f4d4c019110f1732c" + integrity sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg== + "@tanstack/virtual-core@3.13.12": version "3.13.12" resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz#1dff176df9cc8f93c78c5e46bcea11079b397578" integrity sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA== -"@tanstack/vue-virtual@^3.0.0-beta.60": +"@tanstack/vue-table@^8.21.3": + version "8.21.3" + resolved "https://registry.yarnpkg.com/@tanstack/vue-table/-/vue-table-8.21.3.tgz#09498ba5bbe5eca5aa665f9b76876da22715bb28" + integrity sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw== + dependencies: + "@tanstack/table-core" "8.21.3" + +"@tanstack/vue-virtual@^3.0.0-beta.60", "@tanstack/vue-virtual@^3.12.0", "@tanstack/vue-virtual@^3.13.12": version "3.13.12" resolved "https://registry.yarnpkg.com/@tanstack/vue-virtual/-/vue-virtual-3.13.12.tgz#a66daac9e6822ce4bcba76a3954937440697c264" integrity sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww== @@ -1828,6 +2121,11 @@ resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== +"@types/web-bluetooth@^0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" + integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== + "@types/web-bluetooth@^0.0.21": version "0.0.21" resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63" @@ -2333,7 +2631,26 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.25.tgz#21edcff133a5a04f72c4e4c6142260963fe5afbe" integrity sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg== -"@vueuse/core@^12.3.0": +"@vueuse/core@13.9.0", "@vueuse/core@^13.9.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-13.9.0.tgz#051aeff47a259e9e4d7d0cc3e54879817b0cbcad" + integrity sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA== + dependencies: + "@types/web-bluetooth" "^0.0.21" + "@vueuse/metadata" "13.9.0" + "@vueuse/shared" "13.9.0" + +"@vueuse/core@^10.8.0": + version "10.11.1" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.11.1.tgz#15d2c0b6448d2212235b23a7ba29c27173e0c2c6" + integrity sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww== + dependencies: + "@types/web-bluetooth" "^0.0.20" + "@vueuse/metadata" "10.11.1" + "@vueuse/shared" "10.11.1" + vue-demi ">=0.14.8" + +"@vueuse/core@^12.3.0", "@vueuse/core@^12.5.0": version "12.8.2" resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-12.8.2.tgz#007c6dd29a7d1f6933e916e7a2f8ef3c3f968eaa" integrity sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ== @@ -2343,18 +2660,48 @@ "@vueuse/shared" "12.8.2" vue "^3.5.13" +"@vueuse/integrations@^13.9.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-13.9.0.tgz#1bd1d77093a327321cca00e2bbf5da7b18aa6b43" + integrity sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ== + dependencies: + "@vueuse/core" "13.9.0" + "@vueuse/shared" "13.9.0" + +"@vueuse/metadata@10.11.1": + version "10.11.1" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.11.1.tgz#209db7bb5915aa172a87510b6de2ca01cadbd2a7" + integrity sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw== + "@vueuse/metadata@12.8.2": version "12.8.2" resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-12.8.2.tgz#6cb3a4e97cdcf528329eebc1bda73cd7f64318d3" integrity sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A== -"@vueuse/shared@12.8.2": +"@vueuse/metadata@13.9.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-13.9.0.tgz#57c738d99661c33347080c0bc4cd11160e0d0881" + integrity sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg== + +"@vueuse/shared@10.11.1": + version "10.11.1" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.11.1.tgz#62b84e3118ae6e1f3ff38f4fbe71b0c5d0f10938" + integrity sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA== + dependencies: + vue-demi ">=0.14.8" + +"@vueuse/shared@12.8.2", "@vueuse/shared@^12.5.0": version "12.8.2" resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-12.8.2.tgz#b9e4611d0603629c8e151f982459da394e22f930" integrity sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w== dependencies: vue "^3.5.13" +"@vueuse/shared@13.9.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.9.0.tgz#7168b4ed647e625b05eb4e7e80fe8aabd00e3923" + integrity sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g== + abbrev@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" @@ -2367,14 +2714,6 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - acorn-import-attributes@^1.9.5: version "1.9.5" resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" @@ -2437,12 +2776,7 @@ ansis@^4.1.0, ansis@^4.2.0: resolved "https://registry.yarnpkg.com/ansis/-/ansis-4.2.0.tgz#2e6e61c46b11726ac67f78785385618b9e658780" integrity sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@^3.1.3, anymatch@~3.1.2: +anymatch@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2481,16 +2815,18 @@ are-docs-informative@^0.0.2: resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-hidden@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== + dependencies: + tslib "^2.0.0" + ast-kit@^2.1.2, ast-kit@^2.1.3: version "2.2.0" resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-2.2.0.tgz#6d9a298acefef5bdfc5a0fa51d94d1334ef2e671" @@ -2512,17 +2848,12 @@ async-sema@^3.1.1: resolved "https://registry.yarnpkg.com/async-sema/-/async-sema-3.1.1.tgz#e527c08758a0f8f6f9f15f799a173ff3c40ea808" integrity sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg== -async@^3.2.4, async@^3.2.6: +async@^3.2.4: version "3.2.6" resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.4.20, autoprefixer@^10.4.21: +autoprefixer@^10.4.21: version "10.4.22" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.22.tgz#90b27ab55ec0cf0684210d1f056f7d65dac55f16" integrity sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg== @@ -2549,7 +2880,7 @@ bare-events@^2.7.0: resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.8.2.tgz#7b3e10bd8e1fc80daf38bb516921678f566ab89f" integrity sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ== -base64-js@^1.3.1: +base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2559,11 +2890,6 @@ baseline-browser-mapping@^2.9.0: resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz#0ae89ec3e10e07c368b77def89db8044409461d1" integrity sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw== -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - bindings@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2596,13 +2922,20 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.3, braces@~3.0.2: +braces@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" +brotli@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== + dependencies: + base64-js "^1.1.2" + browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.27.0, browserslist@^4.28.0: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" @@ -2651,7 +2984,7 @@ bundle-require@^5.1.0: dependencies: load-tsconfig "^0.2.3" -c12@^3.0.2, c12@^3.3.1: +c12@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/c12/-/c12-3.3.2.tgz#8bfb9d57147319e6bf7e8530979c5c4fa68ba602" integrity sha512-QkikB2X5voO1okL3QsES0N690Sn/K9WokXqUsDQsWy5SnYb+psYQFGA10iy1bZHj3fjISKsI67Q90gruvWWM3A== @@ -2674,40 +3007,11 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cache-content-type@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" - integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== - dependencies: - mime-types "^2.1.18" - ylru "^1.2.0" - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bound@^1.0.2, call-bound@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2723,7 +3027,7 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001754, caniuse-lite@^1.0.30001759: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz#d569e7b010372c6b0ca3946e30dada0a2e9d5006" integrity sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw== -chalk@^4.0.0, chalk@^4.1.2: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2736,21 +3040,6 @@ change-case@^5.4.4: resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chokidar@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" @@ -2807,16 +3096,16 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + cluster-key-slot@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -2834,6 +3123,11 @@ colord@^2.9.3: resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== +colortranslator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/colortranslator/-/colortranslator-5.0.0.tgz#a7590fa56702c2be75e4fec755127cb658385583" + integrity sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w== + commander@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" @@ -2844,16 +3138,6 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - comment-parser@1.4.1, comment-parser@^1.4.0, comment-parser@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" @@ -2905,18 +3189,6 @@ consola@^3.2.3, consola@^3.4.0, consola@^3.4.2: resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== -content-disposition@~0.5.2: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -2932,14 +3204,6 @@ cookie-es@^2.0.0: resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-2.0.0.tgz#ca6163d7ef8686ea6bbdd551f1de575569c1ed69" integrity sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg== -cookies@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.9.1.tgz#3ffed6f60bb4fb5f146feeedba50acc418af67e3" - integrity sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw== - dependencies: - depd "~2.0.0" - keygrip "~1.1.0" - copy-anything@^4: version "4.0.5" resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-4.0.5.tgz#16cabafd1ea4bb327a540b750f2b4df522825aea" @@ -3016,7 +3280,7 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-tree@^3.0.1: +css-tree@^3.0.0, css-tree@^3.0.1, css-tree@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-3.1.0.tgz#7aabc035f4e66b5c86f54570d55e05b1346eb0fd" integrity sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w== @@ -3118,25 +3382,13 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -deep-equal@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw== - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -3175,42 +3427,27 @@ defu@^6.1.4: resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - denque@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -depd@^2.0.0, depd@~2.0.0: +depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - destr@^2.0.3, destr@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.5.tgz#7d112ff1b925fb8d2079fac5bdb4a90973b51fdb" integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== -destroy@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== -detect-libc@^2.0.0: +detect-libc@^2.0.0, detect-libc@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== @@ -3220,21 +3457,16 @@ devalue@^5.4.2: resolved "https://registry.yarnpkg.com/devalue/-/devalue-5.5.0.tgz#2b7d3959496773dfc6d83dbc909af3ddb65ba6bb" integrity sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w== -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== +dfa@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" + integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== diff@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.2.tgz#712156a6dd288e66ebb986864e190c2fc9eddfae" integrity sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg== -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" @@ -3282,15 +3514,6 @@ dotenv@^17.2.3: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.3.tgz#ad995d6997f639b11065f419a22fabf567cdb9a2" integrity sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -3311,6 +3534,56 @@ electron-to-chromium@^1.5.263: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.264.tgz#38d2262e290bf5b424ba1488e072c7b0163400be" integrity sha512-1tEf0nLgltC3iy9wtlYDlQDc5Rg9lEKVjEmIHJ21rI9OcqkvD45K1oyNIRA4rR1z3LgJ7KeGzEBojVcV6m4qjA== +embla-carousel-auto-height@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-auto-height/-/embla-carousel-auto-height-8.6.0.tgz#89ea31e2119531b2a83884497a6307178e66b00c" + integrity sha512-/HrJQOEM6aol/oF33gd2QlINcXy3e19fJWvHDuHWp2bpyTa+2dm9tVVJak30m2Qy6QyQ6Fc8DkImtv7pxWOJUQ== + +embla-carousel-auto-scroll@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-auto-scroll/-/embla-carousel-auto-scroll-8.6.0.tgz#02f648acd8b184a0f3ae0f2b38a983afc16a2648" + integrity sha512-WT9fWhNXFpbQ6kP+aS07oF5IHYLZ1Dx4DkwgCY8Hv2ZyYd2KMCPfMV1q/cA3wFGuLO7GMgKiySLX90/pQkcOdQ== + +embla-carousel-autoplay@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-autoplay/-/embla-carousel-autoplay-8.6.0.tgz#bc86c97de00d52ec34b05058736ef50af6e0d0e4" + integrity sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA== + +embla-carousel-class-names@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-class-names/-/embla-carousel-class-names-8.6.0.tgz#2bdd057427c60d6281f5e2d11fca02ca60529939" + integrity sha512-l1hm1+7GxQ+zwdU2sea/LhD946on7XO2qk3Xq2XWSwBaWfdgchXdK567yzLtYSHn4sWYdiX+x4nnaj+saKnJkw== + +embla-carousel-fade@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-fade/-/embla-carousel-fade-8.6.0.tgz#92d19ecd54441eb6f37910bf9e16fd3f547e3374" + integrity sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg== + +embla-carousel-reactive-utils@8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz#607f1d8ab9921c906a555c206251b2c6db687223" + integrity sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A== + +embla-carousel-vue@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel-vue/-/embla-carousel-vue-8.6.0.tgz#ef70e8f49c8a04e502a9b3de45ab6ecc8247f50b" + integrity sha512-v8UO5UsyLocZnu/LbfQA7Dn2QHuZKurJY93VUmZYP//QRWoCWOsionmvLLAlibkET3pGPs7++03VhJKbWD7vhQ== + dependencies: + embla-carousel "8.6.0" + embla-carousel-reactive-utils "8.6.0" + +embla-carousel-wheel-gestures@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/embla-carousel-wheel-gestures/-/embla-carousel-wheel-gestures-8.1.0.tgz#dfdb865f634058723c46539bdde45248673a43a5" + integrity sha512-J68jkYrxbWDmXOm2n2YHl+uMEXzkGSKjWmjaEgL9xVvPb3HqVmg6rJSKfI3sqIDVvm7mkeTy87wtG/5263XqHQ== + dependencies: + wheel-gestures "^2.2.5" + +embla-carousel@8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/embla-carousel/-/embla-carousel-8.6.0.tgz#abcedff2bff36992ea8ac27cd30080ca5b6a3f58" + integrity sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -3321,16 +3594,19 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encodeurl@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - encodeurl@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== +enhanced-resolve@^5.18.3: + version "5.18.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" + integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + entities@^4.2.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -3346,28 +3622,11 @@ errx@^0.1.0: resolved "https://registry.yarnpkg.com/errx/-/errx-0.1.0.tgz#4881e411d90a3b1e1620a07604f50081dd59f3aa" integrity sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q== -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - es-module-lexer@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - esbuild@^0.25.0, esbuild@^0.25.11, esbuild@^0.25.12, esbuild@^0.25.8: version "0.25.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" @@ -3762,7 +4021,7 @@ fast-fifo@^1.2.0, fast-fifo@^1.3.2: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.3.2, fast-glob@^3.3.3: +fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -3853,6 +4112,53 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== +fontaine@0.7.0, fontaine@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/fontaine/-/fontaine-0.7.0.tgz#3b2ea6cefff86a202dc7cabd73abc3adb8b7a376" + integrity sha512-vlaWLyoJrOnCBqycmFo/CA8ZmPzuyJHYmgu261KYKByZ4YLz9sTyHZ4qoHgWSYiDsZXhiLo2XndVMz0WOAyZ8Q== + dependencies: + "@capsizecss/unpack" "^3.0.0" + css-tree "^3.1.0" + magic-regexp "^0.10.0" + magic-string "^0.30.21" + pathe "^2.0.3" + ufo "^1.6.1" + unplugin "^2.3.10" + +fontkit@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" + integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g== + dependencies: + "@swc/helpers" "^0.5.12" + brotli "^1.3.2" + clone "^2.1.2" + dfa "^1.2.0" + fast-deep-equal "^3.1.3" + restructure "^3.0.0" + tiny-inflate "^1.0.3" + unicode-properties "^1.4.0" + unicode-trie "^2.0.0" + +fontless@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fontless/-/fontless-0.1.0.tgz#306f498f5000db5393a973e17137a7e0d026f018" + integrity sha512-KyvRd732HuVd/XP9iEFTb1w8Q01TPSA5GaCJV9HYmPiEs/ZZg/on2YdrQmlKfi9gDGpmN5Bn27Ze/CHqk0vE+w== + dependencies: + consola "^3.4.2" + css-tree "^3.1.0" + defu "^6.1.4" + esbuild "^0.25.12" + fontaine "0.7.0" + jiti "^2.6.1" + lightningcss "^1.30.2" + magic-string "^0.30.21" + ohash "^2.0.11" + pathe "^2.0.3" + ufo "^1.6.1" + unifont "^0.6.0" + unstorage "^1.17.1" + foreground-child@^3.1.0: version "3.3.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" @@ -3866,31 +4172,20 @@ fraction.js@^5.3.4: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== +framer-motion@12.23.12: + version "12.23.12" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.23.12.tgz#80cf6fd7c111073a0c558e336c85ca36cca80d3d" + integrity sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg== + dependencies: + motion-dom "^12.23.12" + motion-utils "^12.23.6" + tslib "^2.4.0" + fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -3906,11 +4201,6 @@ fuse.js@^7.1.0: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-7.1.0.tgz#306228b4befeee11e05b027087c2744158527d09" integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== -generator-function@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" - integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3921,35 +4211,11 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - get-port-please@^3.1.2, get-port-please@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.2.0.tgz#0ce3cee194c448ac640ec39dc357a500f5d7d2bb" integrity sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A== -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - get-stream@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" @@ -3989,7 +4255,7 @@ git-url-parse@^16.0.1: dependencies: git-up "^8.1.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4015,18 +4281,6 @@ glob@^10.0.0, glob@^10.5.0: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-directory@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" @@ -4056,12 +4310,7 @@ globby@^15.0.0: slash "^5.1.0" unicorn-magic "^0.3.0" -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: +graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -4078,7 +4327,7 @@ gzip-size@^7.0.0: dependencies: duplexer "^0.1.2" -h3@^1.12.0, h3@^1.15.1, h3@^1.15.4: +h3@^1.12.0, h3@^1.15.4: version "1.15.4" resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.4.tgz#022ab3563bbaf2108c25375c40460f3e54a5fe02" integrity sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ== @@ -4098,18 +4347,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -4122,6 +4359,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== + hookable@^5.5.3: version "5.5.3" resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" @@ -4132,25 +4374,6 @@ html-entities@^2.6.0: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== -http-assert@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.5.0.tgz#c389ccd87ac16ed2dfa6246fd73b926aa00e6b8f" - integrity sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w== - dependencies: - deep-equal "~1.0.1" - http-errors "~1.8.0" - -http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - http-errors@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" @@ -4162,16 +4385,6 @@ http-errors@^2.0.0: statuses "~2.0.2" toidentifier "~1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-shutdown@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" @@ -4256,24 +4469,11 @@ indent-string@^5.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@~2.0.3, inherits@~2.0.4: +inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - ini@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" @@ -4299,13 +4499,6 @@ iron-webcrypto@^1.2.1: resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-builtin-module@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-5.0.0.tgz#19df4b9c7451149b68176b0e06d18646db6308dd" @@ -4340,18 +4533,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" - integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== - dependencies: - call-bound "^1.0.4" - generator-function "^2.0.0" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -4395,16 +4577,6 @@ is-reference@1.2.1: dependencies: "@types/estree" "*" -is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - is-ssh@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.1.tgz#76de1cdbe8f92a8b905d1a172b6bc09704c20396" @@ -4427,7 +4599,7 @@ is-what@^5.2.0: resolved "https://registry.yarnpkg.com/is-what/-/is-what-5.5.0.tgz#a3031815757cfe1f03fed990bf6355a2d3f628c4" integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw== -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -4472,11 +4644,6 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jiti@^1.21.7: - version "1.21.7" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" - integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== - jiti@^2.1.2, jiti@^2.4.2, jiti@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" @@ -4542,22 +4709,6 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" - integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keygrip@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" - integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== - dependencies: - tsscmp "1.0.6" - keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -4580,70 +4731,11 @@ klona@^2.0.6: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== -knitwork@^1.2.0: +knitwork@^1.2.0, knitwork@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/knitwork/-/knitwork-1.3.0.tgz#4a0d0b0d45378cac909ee1117481392522bd08a4" integrity sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw== -koa-compose@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" - integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== - -koa-convert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-2.0.0.tgz#86a0c44d81d40551bae22fee6709904573eea4f5" - integrity sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA== - dependencies: - co "^4.6.0" - koa-compose "^4.1.0" - -koa-send@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" - integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== - dependencies: - debug "^4.1.1" - http-errors "^1.7.3" - resolve-path "^1.4.0" - -koa-static@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" - integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== - dependencies: - debug "^3.1.0" - koa-send "^5.0.0" - -koa@^2.14.2: - version "2.16.3" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.16.3.tgz#dd3a250472862cf7a3ef6e25bf325cc9db620ab5" - integrity sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.9.0" - debug "^4.3.2" - delegates "^1.0.0" - depd "^2.0.0" - destroy "^1.0.4" - encodeurl "^1.0.2" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^2.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - launch-editor@^2.12.0: version "2.12.0" resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817" @@ -4667,16 +4759,85 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^3.1.1, lilconfig@^3.1.3: +lightningcss-android-arm64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz#6966b7024d39c94994008b548b71ab360eb3a307" + integrity sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A== + +lightningcss-darwin-arm64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz#a5fa946d27c029e48c7ff929e6e724a7de46eb2c" + integrity sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA== + +lightningcss-darwin-x64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz#5ce87e9cd7c4f2dcc1b713f5e8ee185c88d9b7cd" + integrity sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ== + +lightningcss-freebsd-x64@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz#6ae1d5e773c97961df5cff57b851807ef33692a5" + integrity sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA== + +lightningcss-linux-arm-gnueabihf@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz#62c489610c0424151a6121fa99d77731536cdaeb" + integrity sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA== + +lightningcss-linux-arm64-gnu@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz#2a3661b56fe95a0cafae90be026fe0590d089298" + integrity sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A== + +lightningcss-linux-arm64-musl@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz#d7ddd6b26959245e026bc1ad9eb6aa983aa90e6b" + integrity sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA== + +lightningcss-linux-x64-gnu@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz#5a89814c8e63213a5965c3d166dff83c36152b1a" + integrity sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w== + +lightningcss-linux-x64-musl@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz#808c2e91ce0bf5d0af0e867c6152e5378c049728" + integrity sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA== + +lightningcss-win32-arm64-msvc@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz#ab4a8a8a2e6a82a4531e8bbb6bf0ff161ee6625a" + integrity sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ== + +lightningcss-win32-x64-msvc@1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz#f01f382c8e0a27e1c018b0bee316d210eac43b6e" + integrity sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw== + +lightningcss@1.30.2, lightningcss@^1.30.2: + version "1.30.2" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.2.tgz#4ade295f25d140f487d37256f4cd40dc607696d0" + integrity sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.30.2" + lightningcss-darwin-arm64 "1.30.2" + lightningcss-darwin-x64 "1.30.2" + lightningcss-freebsd-x64 "1.30.2" + lightningcss-linux-arm-gnueabihf "1.30.2" + lightningcss-linux-arm64-gnu "1.30.2" + lightningcss-linux-arm64-musl "1.30.2" + lightningcss-linux-x64-gnu "1.30.2" + lightningcss-linux-x64-musl "1.30.2" + lightningcss-win32-arm64-msvc "1.30.2" + lightningcss-win32-x64-msvc "1.30.2" + +lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - listhen@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.9.0.tgz#59355f7e4fc1eefda6bc494ae7e9ed13aa7658ef" @@ -4807,11 +4968,6 @@ magicast@^0.5.0, magicast@^0.5.1: "@babel/types" "^7.28.5" source-map-js "^1.2.1" -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - mdn-data@2.0.28: version "2.0.28" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" @@ -4822,11 +4978,6 @@ mdn-data@2.12.2: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.2.tgz#9ae6c41a9e65adf61318b32bff7b64fbfb13f8cf" integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -4837,11 +4988,6 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" @@ -4850,23 +4996,11 @@ micromatch@^4.0.5, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - mime-db@^1.54.0: version "1.54.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mime-types@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" @@ -4889,7 +5023,7 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -4949,12 +5083,40 @@ mocked-exports@^0.1.1: resolved "https://registry.yarnpkg.com/mocked-exports/-/mocked-exports-0.1.1.tgz#6916efea9a9dd0f4abd6a0a72526f56a76c966ea" integrity sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA== +motion-dom@12.23.12: + version "12.23.12" + resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.23.12.tgz#87974046e7e61bc4932f36d35e8eab6bb6f3e434" + integrity sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw== + dependencies: + motion-utils "^12.23.6" + +motion-dom@^12.23.12: + version "12.23.23" + resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.23.23.tgz#8f874333ea1a04ee3a89eb928f518b463d589e0e" + integrity sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA== + dependencies: + motion-utils "^12.23.6" + +motion-utils@^12.23.6: + version "12.23.6" + resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-12.23.6.tgz#fafef80b4ea85122dd0d6c599a0c63d72881f312" + integrity sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ== + +motion-v@^1.7.3: + version "1.7.4" + resolved "https://registry.yarnpkg.com/motion-v/-/motion-v-1.7.4.tgz#d0ef91da780733f297c91304feb92e232f922f27" + integrity sha512-YNDUAsany04wfI7YtHxQK3kxzNvh+OdFUk9GpA3+hMt7j6P+5WrVAAgr8kmPPoVza9EsJiAVhqoN3YYFN0Twrw== + dependencies: + framer-motion "12.23.12" + hey-listen "^1.0.8" + motion-dom "12.23.12" + mrmime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== -ms@^2.1.1, ms@^2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -4964,15 +5126,6 @@ muggle-string@^0.4.1: resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nanoid@^3.3.11: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" @@ -5003,11 +5156,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - nitropack@^2.12.9: version "2.12.9" resolved "https://registry.yarnpkg.com/nitropack/-/nitropack-2.12.9.tgz#2c92765440f980d27a8c3b378f3a850e66157ce4" @@ -5128,7 +5276,7 @@ nopt@^8.0.0: dependencies: abbrev "^3.0.0" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -5244,21 +5392,11 @@ nypm@^0.6.0, nypm@^0.6.2: pkg-types "^2.3.0" tinyexec "^1.0.1" -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - object-deep-merge@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/object-deep-merge/-/object-deep-merge-2.0.0.tgz#94d24cf713d4a7a143653500ff4488a2d494681f" integrity sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg== -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - obug@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be" @@ -5273,7 +5411,7 @@ ofetch@^1.4.1, ofetch@^1.5.0, ofetch@^1.5.1: node-fetch-native "^1.6.7" ufo "^1.6.1" -ohash@^2.0.11: +ohash@^2.0.0, ohash@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/ohash/-/ohash-2.0.11.tgz#60b11e8cff62ca9dee88d13747a5baa145f5900b" integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== @@ -5283,20 +5421,13 @@ on-change@^6.0.1: resolved "https://registry.yarnpkg.com/on-change/-/on-change-6.0.1.tgz#5fbaf16a78a139a10e63b07c5baf3e8d1fffa66b" integrity sha512-P7o0hkMahOhjb1niG28vLNAXsJrRcfpJvYWcTmPt/Tf4xedcF2PA1E9++N1tufY8/vIsaiJgHhjQp53hJCe+zw== -on-finished@^2.3.0, on-finished@^2.4.1: +on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - onetime@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" @@ -5304,11 +5435,6 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -only@~0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" - integrity sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ== - open@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" @@ -5319,14 +5445,6 @@ open@^10.2.0: is-inside-container "^1.0.0" wsl-utils "^0.1.0" -open@^7.0.4: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - open@^8.0.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -5458,6 +5576,11 @@ package-manager-detector@^1.1.0, package-manager-detector@^1.3.0: resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-1.6.0.tgz#70d0cf0aa02c877eeaf66c4d984ede0be9130734" integrity sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA== +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5492,7 +5615,7 @@ parse-url@^9.2.0: "@types/parse-path" "^7.0.0" parse-path "^7.0.0" -parseurl@^1.3.2, parseurl@^1.3.3: +parseurl@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -5507,11 +5630,6 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@1.0.1, path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -5535,11 +5653,6 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" - integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== - path-type@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-6.0.0.tgz#2f1bb6791a91ce99194caede5d6c5920ed81eb51" @@ -5570,7 +5683,7 @@ picocolors@^1.0.0, picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -5580,17 +5693,7 @@ picomatch@^4.0.2, picomatch@^4.0.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" - integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== - -pkg-types@^1.3.1: +pkg-types@^1.2.1, pkg-types@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== @@ -5599,7 +5702,7 @@ pkg-types@^1.3.1: mlly "^1.7.4" pathe "^2.0.1" -pkg-types@^2.1.0, pkg-types@^2.2.0, pkg-types@^2.3.0: +pkg-types@^2.2.0, pkg-types@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.0.tgz#037f2c19bd5402966ff6810e32706558cb5b5726" integrity sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig== @@ -5613,14 +5716,6 @@ pluralize@^8.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -portfinder@^1.0.26: - version "1.0.38" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.38.tgz#e4fb3a2d888b20d2977da050e48ab5e1f57a185e" - integrity sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg== - dependencies: - async "^3.2.6" - debug "^4.3.6" - postcss-calc@^10.1.1: version "10.1.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.1.1.tgz#52b385f2e628239686eb6e3a16207a43f36064ca" @@ -5669,29 +5764,6 @@ postcss-discard-overridden@^7.0.1: resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.1.0.tgz#003b63c6edde948766e40f3daf7e997ae43a5ce6" - integrity sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw== - dependencies: - camelcase-css "^2.0.1" - -"postcss-load-config@^4.0.2 || ^5.0 || ^6.0": - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096" - integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== - dependencies: - lilconfig "^3.1.1" - postcss-merge-longhand@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" @@ -5743,22 +5815,6 @@ postcss-minify-selectors@^7.0.5: cssesc "^3.0.0" postcss-selector-parser "^7.1.0" -postcss-nested@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" - integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== - dependencies: - postcss-selector-parser "^6.1.1" - -postcss-nesting@^13.0.1: - version "13.0.2" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" - integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== - dependencies: - "@csstools/selector-resolve-nested" "^3.1.0" - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-normalize-charset@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" @@ -5844,14 +5900,6 @@ postcss-reduce-transforms@^7.0.1: dependencies: postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" @@ -5875,12 +5923,12 @@ postcss-unique-selectors@^7.0.4: dependencies: postcss-selector-parser "^7.1.0" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.47, postcss@^8.5.3, postcss@^8.5.6: +postcss@^8.4.41, postcss@^8.5.6: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== @@ -5974,13 +6022,6 @@ rc9@^2.1.2: defu "^6.1.4" destr "^2.0.3" -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - readable-stream@^2.0.5: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -6022,13 +6063,6 @@ readdirp@^5.0.0: resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.0.0.tgz#fbf1f71a727891d685bb1786f9ba74084f6e2f91" integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ== -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" @@ -6068,14 +6102,37 @@ regjsparser@^0.13.0: dependencies: jsesc "~3.1.0" -replace-in-file@^6.1.0: - version "6.3.5" - resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-6.3.5.tgz#ff956b0ab5bc96613207d603d197cd209400a654" - integrity sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg== - dependencies: - chalk "^4.1.2" - glob "^7.2.0" - yargs "^17.2.1" +reka-ui@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/reka-ui/-/reka-ui-2.6.0.tgz#3b96712744decb9da8f4b1af79d16a499c84b826" + integrity sha512-NrGMKrABD97l890mFS3TNUzB0BLUfbL3hh0NjcJRIUSUljb288bx3Mzo31nOyUcdiiW0HqFGXJwyCBh9cWgb0w== + dependencies: + "@floating-ui/dom" "^1.6.13" + "@floating-ui/vue" "^1.1.6" + "@internationalized/date" "^3.5.0" + "@internationalized/number" "^3.5.0" + "@tanstack/vue-virtual" "^3.12.0" + "@vueuse/core" "^12.5.0" + "@vueuse/shared" "^12.5.0" + aria-hidden "^1.2.4" + defu "^6.1.4" + ohash "^2.0.11" + +reka-ui@^2.0.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/reka-ui/-/reka-ui-2.6.1.tgz#08f6b8a8ee774887b6bcde3d8ea54b608acfe82c" + integrity sha512-XK7cJDQoNuGXfCNzBBo/81Yg/OgjPwvbabnlzXG2VsdSgNsT6iIkuPBPr+C0Shs+3bb0x0lbPvgQAhMSCKm5Ww== + dependencies: + "@floating-ui/dom" "^1.6.13" + "@floating-ui/vue" "^1.1.6" + "@internationalized/date" "^3.5.0" + "@internationalized/number" "^3.5.0" + "@tanstack/vue-virtual" "^3.12.0" + "@vueuse/core" "^12.5.0" + "@vueuse/shared" "^12.5.0" + aria-hidden "^1.2.4" + defu "^6.1.4" + ohash "^2.0.11" require-directory@^2.1.1: version "2.1.1" @@ -6097,20 +6154,12 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-path@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" - integrity sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w== - dependencies: - http-errors "~1.6.2" - path-is-absolute "1.0.1" - resolve-pkg-maps@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.8: +resolve@^1.22.1: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -6119,6 +6168,11 @@ resolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.8: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restructure@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" + integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== + reusify@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" @@ -6182,7 +6236,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6192,15 +6246,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6281,12 +6326,7 @@ serve-static@^2.2.0: parseurl "^1.3.3" send "^1.2.0" -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0, setprototypeof@~1.2.0: +setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -6407,11 +6447,6 @@ standard-as-callback@^2.1.0: resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@^2.0.1, statuses@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" @@ -6528,19 +6563,6 @@ stylehacks@^7.0.5: browserslist "^4.27.0" postcss-selector-parser "^7.1.0" -sucrase@^3.35.0: - version "3.35.1" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.1.tgz#4619ea50393fe8bd0ae5071c26abd9b2e346bfe1" - integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - tinyglobby "^0.2.11" - ts-interface-checker "^0.1.9" - superjson@^2.2.2: version "2.2.6" resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.6.tgz#a223a3a988172a5f9656e2063fe5f733af40d099" @@ -6595,47 +6617,25 @@ tagged-tag@^1.0.0: resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== -tailwind-config-viewer@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/tailwind-config-viewer/-/tailwind-config-viewer-2.0.4.tgz#5f47ef0f0ba3719557f88628de8bf276cad7a4cb" - integrity sha512-icvcmdMmt9dphvas8wL40qttrHwAnW3QEN4ExJ2zICjwRsPj7gowd1cOceaWG3IfTuM/cTNGQcx+bsjMtmV+cw== - dependencies: - "@koa/router" "^12.0.1" - commander "^6.0.0" - fs-extra "^9.0.1" - koa "^2.14.2" - koa-static "^5.0.0" - open "^7.0.4" - portfinder "^1.0.26" - replace-in-file "^6.1.0" - -tailwindcss@~3.4.17: - version "3.4.18" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.18.tgz#9fa9650aace186644b608242f1e57d2d55593301" - integrity sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.6.0" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.2" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.21.7" - lilconfig "^3.1.3" - micromatch "^4.0.8" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.1.1" - postcss "^8.4.47" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.2 || ^5.0 || ^6.0" - postcss-nested "^6.2.0" - postcss-selector-parser "^6.1.2" - resolve "^1.22.8" - sucrase "^3.35.0" +tailwind-merge@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-3.4.0.tgz#5a264e131a096879965f1175d11f8c36e6b64eca" + integrity sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g== + +tailwind-variants@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/tailwind-variants/-/tailwind-variants-3.2.2.tgz#3ac8ccc735cae8b6f416330070f5f7437a77a0f3" + integrity sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg== + +tailwindcss@4.1.17, tailwindcss@^4.1.17: + version "4.1.17" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.17.tgz#e6dcb7a9c60cef7522169b5f207ffec2fd652286" + integrity sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q== + +tapable@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== tar-stream@^3.0.0: version "3.1.7" @@ -6674,19 +6674,10 @@ text-decoder@^1.1.0: dependencies: b4a "^1.6.4" -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" +tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== tiny-invariant@^1.3.3: version "1.3.3" @@ -6698,7 +6689,7 @@ tinyexec@^1.0.1: resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== -tinyglobby@^0.2.11, tinyglobby@^0.2.14, tinyglobby@^0.2.15: +tinyglobby@^0.2.14, tinyglobby@^0.2.15: version "0.2.15" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== @@ -6721,7 +6712,7 @@ to-valid-identifier@^1.0.0: "@sindresorhus/base62" "^1.0.0" reserved-identifiers "^1.0.0" -toidentifier@1.0.1, toidentifier@~1.0.1: +toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -6741,21 +6732,11 @@ ts-api-utils@^2.1.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.4.0, tslib@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tsscmp@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -6775,14 +6756,6 @@ type-fest@^5.0.0: dependencies: tagged-tag "^1.0.0" -type-is@^1.6.16: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - type-level-regexp@~0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/type-level-regexp/-/type-level-regexp-0.1.17.tgz#ec1bf7dd65b85201f9863031d6f023bdefc2410f" @@ -6832,11 +6805,36 @@ unhead@2.0.19: dependencies: hookable "^5.5.3" +unicode-properties@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" + integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== + dependencies: + base64-js "^1.3.0" + unicode-trie "^2.0.0" + +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + unicorn-magic@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== +unifont@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/unifont/-/unifont-0.6.0.tgz#c0ddd6411f1917f934907d989b4566842c5b482b" + integrity sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA== + dependencies: + css-tree "^3.0.0" + ofetch "^1.4.1" + ohash "^2.0.0" + unimport@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/unimport/-/unimport-5.5.0.tgz#03a4fffcd2e36943eb28ca9b065016b9eba01b77" @@ -6857,10 +6855,17 @@ unimport@^5.5.0: unplugin "^2.3.10" unplugin-utils "^0.3.0" -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unplugin-auto-import@^20.2.0: + version "20.3.0" + resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-20.3.0.tgz#a4947cea55b2b06413b28a8477cb120e03b9db32" + integrity sha512-RcSEQiVv7g0mLMMXibYVKk8mpteKxvyffGuDKqZZiFr7Oq3PB1HwgHdK5O7H4AzbhzHoVKG0NnMnsk/1HIVYzQ== + dependencies: + local-pkg "^1.1.2" + magic-string "^0.30.21" + picomatch "^4.0.3" + unimport "^5.5.0" + unplugin "^2.3.11" + unplugin-utils "^0.3.1" unplugin-utils@^0.2.4: version "0.2.5" @@ -6878,6 +6883,20 @@ unplugin-utils@^0.3.0, unplugin-utils@^0.3.1: pathe "^2.0.3" picomatch "^4.0.3" +unplugin-vue-components@^30.0.0: + version "30.0.0" + resolved "https://registry.yarnpkg.com/unplugin-vue-components/-/unplugin-vue-components-30.0.0.tgz#c0972272364f4a58a7904c54e5d262b75cefd008" + integrity sha512-4qVE/lwCgmdPTp6h0qsRN2u642tt4boBQtcpn4wQcWZAsr8TQwq+SPT3NDu/6kBFxzo/sSEK4ioXhOOBrXc3iw== + dependencies: + chokidar "^4.0.3" + debug "^4.4.3" + local-pkg "^1.1.2" + magic-string "^0.30.19" + mlly "^1.8.0" + tinyglobby "^0.2.15" + unplugin "^2.3.10" + unplugin-utils "^0.3.1" + unplugin-vue-router@^0.16.1: version "0.16.2" resolved "https://registry.yarnpkg.com/unplugin-vue-router/-/unplugin-vue-router-0.16.2.tgz#9e76448742622116b7e6c29133341c6b66a5fa15" @@ -6901,7 +6920,7 @@ unplugin-vue-router@^0.16.1: unplugin-utils "^0.3.1" yaml "^2.8.1" -unplugin@^2.0.0, unplugin@^2.1.0, unplugin@^2.3.10, unplugin@^2.3.2, unplugin@^2.3.6: +unplugin@^2.0.0, unplugin@^2.1.0, unplugin@^2.3.10, unplugin@^2.3.11, unplugin@^2.3.2, unplugin@^2.3.6: version "2.3.11" resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.11.tgz#411e020dd2ba90e2fbe1e7bd63a5a399e6ee3b54" integrity sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww== @@ -7009,10 +7028,14 @@ util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vaul-vue@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/vaul-vue/-/vaul-vue-0.4.1.tgz#76ad8ccf8f9a61ea89ae51874defd3e36a5cef6d" + integrity sha512-A6jOWOZX5yvyo1qMn7IveoWN91mJI5L3BUKsIwkg6qrTGgHs1Sb1JF/vyLJgnbN1rH4OOOxFbtqL9A46bOyGUQ== + dependencies: + "@vueuse/core" "^10.8.0" + reka-ui "^2.0.0" + vue "^3.4.5" vee-validate@4.15.1, vee-validate@^4.12.4: version "4.15.1" @@ -7112,6 +7135,16 @@ vue-bundle-renderer@^2.2.0: dependencies: ufo "^1.6.1" +vue-component-type-helpers@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/vue-component-type-helpers/-/vue-component-type-helpers-3.1.5.tgz#a5d2ef14d2f9ef3c53831991524421605d14ee02" + integrity sha512-7V3yJuNWW7/1jxCcI1CswnpDsvs02Qcx/N43LkV+ZqhLj2PKj50slUflHAroNkN4UWiYfzMUUUXiNuv9khmSpQ== + +vue-demi@>=0.13.0, vue-demi@>=0.14.8: + version "0.14.10" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04" + integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== + vue-devtools-stub@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz#a65b9485edecd4273cedcb8102c739b83add2c81" @@ -7154,7 +7187,7 @@ vue3-emoji-picker@^1.1.8: idb "^7.1.0" vue "^3.2.23" -vue@^3.2.23, vue@^3.4.29, vue@^3.5.13, vue@^3.5.23: +vue@^3.2.23, vue@^3.4.29, vue@^3.4.5, vue@^3.5.13, vue@^3.5.23: version "3.5.25" resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.25.tgz#b68b5092b617c57a0a36e8e640fd2c09aa2a374d" integrity sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g== @@ -7183,6 +7216,11 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +wheel-gestures@^2.2.5: + version "2.2.48" + resolved "https://registry.yarnpkg.com/wheel-gestures/-/wheel-gestures-2.2.48.tgz#7b84b2522e66962efb50b5fe7e4a55503061255e" + integrity sha512-f+Gy33Oa5Z14XY9679Zze+7VFhbsQfBFXodnU2x589l4kxGM9L5Y8zETTmcMR5pWOPQyRv4Z0lNax6xCO0NSlA== + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7229,11 +7267,6 @@ wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - ws@^8.18.3: version "8.18.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" @@ -7276,7 +7309,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.2.1, yargs@^17.5.1: +yargs@^17.5.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -7289,11 +7322,6 @@ yargs@^17.2.1, yargs@^17.5.1: y18n "^5.0.5" yargs-parser "^21.1.1" -ylru@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.4.0.tgz#0cf0aa57e9c24f8a2cbde0cc1ca2c9592ac4e0f6" - integrity sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 74757a599e1504e7ab562c680da446868ae4d398 Mon Sep 17 00:00:00 2001 From: PadBro Date: Sat, 6 Dec 2025 00:22:47 +0100 Subject: [PATCH 06/14] feat: refactor faq to use nuxt ui --- .editorconfig | 13 ++ app/app.config.ts | 7 + app/assets/css/main.css | 28 ++++ app/components/faq/action-cell.vue | 70 ++++++++++ app/components/faq/fields.vue | 13 ++ app/components/faq/form.vue | 55 ++++++++ app/composables/api-client.ts | 7 + app/composables/api-form.ts | 26 ++++ app/composables/api.ts | 13 ++ app/composables/toast.ts | 21 +++ app/pages/faq/create.vue | 68 +++------- app/pages/faq/edit/[id].vue | 107 ++++----------- app/pages/faq/index.vue | 203 ++++++++--------------------- app/pages/reaction-role/index.vue | 3 - app/pages/ticket/panel/index.vue | 4 - app/types/form.ts | 16 +++ app/utils/{Helper.ts => helper.ts} | 24 ++-- app/utils/useApi.ts | 78 ----------- eslint.config.mjs | 4 +- nuxt.config.ts | 22 ++++ package.json | 1 + yarn.lock | 3 + 22 files changed, 402 insertions(+), 384 deletions(-) create mode 100644 .editorconfig create mode 100644 app/app.config.ts create mode 100644 app/components/faq/action-cell.vue create mode 100644 app/components/faq/fields.vue create mode 100644 app/components/faq/form.vue create mode 100644 app/composables/api-client.ts create mode 100644 app/composables/api-form.ts create mode 100644 app/composables/api.ts create mode 100644 app/composables/toast.ts create mode 100644 app/types/form.ts rename app/utils/{Helper.ts => helper.ts} (66%) delete mode 100644 app/utils/useApi.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5d12634 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/app/app.config.ts b/app/app.config.ts new file mode 100644 index 0000000..30ee66f --- /dev/null +++ b/app/app.config.ts @@ -0,0 +1,7 @@ +export default defineAppConfig({ + ui: { + colors: { + brand: "brand", + }, + }, +}); diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 7c95c6f..043c438 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -1,2 +1,30 @@ @import "tailwindcss"; @import "@nuxt/ui"; + +@theme { + --color-brand-50: #fff3ea; + --color-brand-100: #ffe1cc; + --color-brand-200: #ffc599; + --color-brand-300: #ffa866; + --color-brand-400: #f88b47; + --color-brand-500: #f0833a; + --color-brand-600: #d66d2a; + --color-brand-700: #b8581f; + --color-brand-800: #964518; + --color-brand-900: #6e3212; + --color-brand-950: #3a1808; +} + +:root { + --color-primary-50: var(--color-brand-50); + --color-primary-100: var(--color-brand-100); + --color-primary-200: var(--color-brand-200); + --color-primary-300: var(--color-brand-300); + --color-primary-400: var(--color-brand-400); + --color-primary-500: var(--color-brand-500); + --color-primary-600: var(--color-brand-600); + --color-primary-700: var(--color-brand-700); + --color-primary-800: var(--color-brand-800); + --color-primary-900: var(--color-brand-900); + --color-primary-950: var(--color-brand-950); +} diff --git a/app/components/faq/action-cell.vue b/app/components/faq/action-cell.vue new file mode 100644 index 0000000..e27971a --- /dev/null +++ b/app/components/faq/action-cell.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/faq/fields.vue b/app/components/faq/fields.vue new file mode 100644 index 0000000..06b5aa0 --- /dev/null +++ b/app/components/faq/fields.vue @@ -0,0 +1,13 @@ + + + diff --git a/app/components/faq/form.vue b/app/components/faq/form.vue new file mode 100644 index 0000000..3100575 --- /dev/null +++ b/app/components/faq/form.vue @@ -0,0 +1,55 @@ + + + diff --git a/app/composables/api-client.ts b/app/composables/api-client.ts new file mode 100644 index 0000000..15e7c54 --- /dev/null +++ b/app/composables/api-client.ts @@ -0,0 +1,7 @@ +export const useApiClient = () => { + const client = useSanctumClient(); + const config = useRuntimeConfig(); + return client.create({ + baseURL: `${config.public.sanctum.baseUrl}/api/v1`, + }); +}; diff --git a/app/composables/api-form.ts b/app/composables/api-form.ts new file mode 100644 index 0000000..cbffcce --- /dev/null +++ b/app/composables/api-form.ts @@ -0,0 +1,26 @@ +import type { FormSubmitEvent, Form } from "#ui/types"; +import type { LaravelValidationResponse } from "@/types/form"; + +export const useApiForm = ( + form: Ref | undefined>, + callback: (event: FormSubmitEvent) => void | Promise, +) => { + const submitting = ref(false); + + async function onSubmit(event: FormSubmitEvent) { + submitting.value = true; + try { + await callback(event); + } catch (err) { + const response = err as LaravelValidationResponse; + if (response.statusCode === 422) { + form.value!.setErrors( + laravelValidationErrorToNuxtUiForm(response.data), + ); + } + } finally { + submitting.value = false; + } + } + return { submitting, onSubmit }; +}; diff --git a/app/composables/api.ts b/app/composables/api.ts new file mode 100644 index 0000000..52921ab --- /dev/null +++ b/app/composables/api.ts @@ -0,0 +1,13 @@ +import type { UseFetchOptions } from "nuxt/app"; + +export const useApi = async ( + url: string | (() => string), + options?: UseFetchOptions, +) => { + const client = useApiClient(); + + return await useFetch(url, { + ...options, + $fetch: client as typeof $fetch, + }); +}; diff --git a/app/composables/toast.ts b/app/composables/toast.ts new file mode 100644 index 0000000..a6bae8b --- /dev/null +++ b/app/composables/toast.ts @@ -0,0 +1,21 @@ +export const useSimpleToast = () => { + const toast = useToast(); + + const success = (message: string) => { + toast.add({ + title: message, + icon: "mdi:check-circle-outline", + color: "success" as const, + }); + }; + + const error = (message: string) => { + toast.add({ + title: message, + icon: "mdi:circle-off-outline", + color: "error" as const, + }); + }; + + return { success, error }; +}; diff --git a/app/pages/faq/create.vue b/app/pages/faq/create.vue index 240f19c..5cae856 100644 --- a/app/pages/faq/create.vue +++ b/app/pages/faq/create.vue @@ -1,37 +1,18 @@ diff --git a/app/pages/reaction-role/index.vue b/app/pages/reaction-role/index.vue index fd8508b..189e653 100644 --- a/app/pages/reaction-role/index.vue +++ b/app/pages/reaction-role/index.vue @@ -83,9 +83,6 @@ const pageChange = (page: number) => { }; definePageMeta({ - navbar: { - buttons: resolveComponent("ReactionRoleNavbarButtons"), - }, permission: { permission: "reactionRole.read", }, diff --git a/app/pages/ticket/panel/index.vue b/app/pages/ticket/panel/index.vue index f2534fb..3910ae0 100644 --- a/app/pages/ticket/panel/index.vue +++ b/app/pages/ticket/panel/index.vue @@ -87,10 +87,6 @@ const pageChange = (page: number) => { }; definePageMeta({ - title: "Ticket Panel", - navbar: { - buttons: resolveComponent("TicketPanelNavbarButtons"), - }, permission: { permission: "ticket.read", }, diff --git a/app/types/form.ts b/app/types/form.ts new file mode 100644 index 0000000..90d1afa --- /dev/null +++ b/app/types/form.ts @@ -0,0 +1,16 @@ +export type LaravelValidationResponse = { + statusCode: number; + data: LaravelValidationErrors; +}; + +export type LaravelValidationErrors = { + errors: Record; + message: string; +}; + +export type NuxtUiFormError = { + name: string; // The path to the field with the error + message: string; // The error message +}; + +export type NuxtUiFormErrors = NuxtUiFormError[]; diff --git a/app/utils/Helper.ts b/app/utils/helper.ts similarity index 66% rename from app/utils/Helper.ts rename to app/utils/helper.ts index 13239d2..c7908bc 100644 --- a/app/utils/Helper.ts +++ b/app/utils/helper.ts @@ -1,4 +1,4 @@ -import type { LocationQueryValue } from "vue-router"; +import type { LaravelValidationErrors, NuxtUiFormErrors } from "@/types/form"; export const parseRouteParameter = ( param: string | string[] | undefined, @@ -12,15 +12,6 @@ export const parseRouteParameter = ( return Number.isNaN(value) ? 0 : value; }; -export const parseRouteParameterString = ( - param: string | string[] | LocationQueryValue[], -): string => { - if (typeof param === "object") { - return `${param[0]}`; - } - return `${param}`; -}; - export const hasPermissionTo = (permission: string): boolean => { const user = useCurrentUser().value; if (!user) { @@ -29,6 +20,7 @@ export const hasPermissionTo = (permission: string): boolean => { return user.permissions.includes(permission) || user.is_owner; }; +// replace with enum from api export const discordButtonItems = [ { label: "Primary", @@ -51,3 +43,15 @@ export const discordButtonItems = [ color: "#da373c", }, ]; + +export function laravelValidationErrorToNuxtUiForm( + response: LaravelValidationErrors, +): NuxtUiFormErrors { + return Object.entries(response.errors).map(([name, messages]) => { + const baseName = name.split(".")[0]; + return { + name: baseName ?? "", + message: messages.join(" "), + }; + }); +} diff --git a/app/utils/useApi.ts b/app/utils/useApi.ts deleted file mode 100644 index fb50fd5..0000000 --- a/app/utils/useApi.ts +++ /dev/null @@ -1,78 +0,0 @@ -type UseFetchOptions = { - method?: "get" | "post" | "patch" | "put" | "delete"; - query?: Record | [key: string, value: string][]; - params?: Record | [key: string, value: string][]; - body?: - | RequestInit["body"] - | Record - | Record[]; - headers?: Record | [key: string, value: string][] | Headers; - watch?: boolean; - baseURL?: string; - credentials?: string; -}; - -export const useApi = async ( - path: string, - options: UseFetchOptions = {}, - displayErrors = false, -) => { - const xsrfToken = useCookie("XSRF-TOKEN"); - if (xsrfToken.value) { - options.headers = { - "X-XSRF-TOKEN": xsrfToken.value, - "Content-Type": "application/json", - Accept: "application/json", - ...options.headers, - }; - } - options.credentials = "include"; - options.watch = false; - options.baseURL = "/"; - - const { data, error, refresh } = await useFetch( - apiUrl(path), - options as object, - ); - - await handleError(error.value, displayErrors); - - return { data, error, refresh }; -}; - -const handleError = async ( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - error: any | null, - displayAllError: boolean, -) => { - if (!error || error.statusCode === undefined) { - return; - } - - if ([400, 500, 502].includes(error.statusCode)) { - useNotification().error( - error.cause?.response.statusText, - `${error.message}: ${error.cause?.response._data.message}`, - ); - } else if ([401, 403].includes(error.statusCode ?? 0)) { - await navigateTo("/login"); - } else if (displayAllError) { - let errorMessage = error.data.message; - let errorTitle = error.cause?.response.statusText; - - if (error.data.errors) { - errorTitle = error.data.message; - Object.keys(error.data.errors).forEach((key) => { - errorMessage += `${error.data.errors[key].join(",")}\n`; - }); - } - - useNotification().error(errorTitle, errorMessage); - } -}; - -export const apiUrl = (path: string): string => { - const config = useRuntimeConfig(); - - return `${config.public.apiBase}${path.startsWith("/") ? "" : "/"}${path}`; -}; diff --git a/eslint.config.mjs b/eslint.config.mjs index b604c52..4a84178 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,9 +3,7 @@ import withNuxt from "./.nuxt/eslint.config.mjs"; export default withNuxt({ rules: { - "vue/multi-word-component-names": "off", - "vue/html-self-closing": "off", - quotes: ["error", "double"], + "no-console": "error", }, }); // Your custom configs here diff --git a/nuxt.config.ts b/nuxt.config.ts index 7ff4715..2fa35e7 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -36,4 +36,26 @@ export default defineNuxtConfig({ }, }, }, + vite: { + optimizeDeps: { + exclude: ["@ordinary/api-types"], + }, + }, + ui: { + theme: { + colors: [ + "primary", + "secondary", + "brand", + "info", + "success", + "warning", + "error", + ], + defaultVariants: { + color: "brand", + size: "xl", + }, + }, + }, }); diff --git a/package.json b/package.json index 4304cef..e5bcf3b 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@headlessui/vue": "^1.7.22", "@heroicons/vue": "^2.1.4", "@nuxt/ui": "^4.2.1", + "@ordinary/api-types": "file:./../api/resources/types/", "@vee-validate/zod": "^4.12.4", "@vueuse/core": "^12.3.0", "dayjs": "^1.11.13", diff --git a/yarn.lock b/yarn.lock index 27bfd61..cadac70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1340,6 +1340,9 @@ pkg-types "^1.2.1" semver "^7.6.3" +"@ordinary/api-types@file:../api/resources/types": + version "0.0.1" + "@oxc-minify/binding-android-arm64@0.96.0": version "0.96.0" resolved "https://registry.yarnpkg.com/@oxc-minify/binding-android-arm64/-/binding-android-arm64-0.96.0.tgz#c0f525ec7e34f39617fd379911f4e904f6dc67a0" From 98bcd1e031ac969c7fc29d3924854e2a4c7346ce Mon Sep 17 00:00:00 2001 From: PadBro Date: Sat, 6 Dec 2025 13:41:11 +0100 Subject: [PATCH 07/14] feat: refactor rule, server content, reaction roles + permissions --- app/components/TextChannelSelector.vue | 94 +++-- app/components/faq/action-cell.vue | 1 + app/components/permission/fields.vue | 73 ++++ app/components/permission/form.vue | 120 ++++++ app/components/reaction-role/action-cell.vue | 76 ++++ app/components/reaction-role/fields.vue | 52 +++ app/components/reaction-role/form.vue | 58 +++ app/components/rule/action-cell.vue | 71 ++++ app/components/rule/fields.vue | 16 + app/components/rule/form.vue | 56 +++ app/components/server-content/action-cell.vue | 76 ++++ app/components/server-content/fields.vue | 22 + app/components/server-content/form.vue | 60 +++ app/components/table/boolean-cell.vue | 14 + app/pages/faq/index.vue | 20 +- app/pages/permission/index.vue | 168 +------- app/pages/reaction-role/create.vue | 72 +--- app/pages/reaction-role/edit/[id].vue | 119 ++---- app/pages/reaction-role/index.vue | 229 +++-------- app/pages/rule/create.vue | 71 +--- app/pages/rule/edit/[id].vue | 112 ++--- app/pages/rule/index.vue | 211 +++------- app/pages/server-content/create.vue | 85 +--- app/pages/server-content/edit/[id].vue | 117 +----- app/pages/server-content/index.vue | 382 ++++-------------- app/types/permission.ts | 7 +- 26 files changed, 1086 insertions(+), 1296 deletions(-) create mode 100644 app/components/permission/fields.vue create mode 100644 app/components/permission/form.vue create mode 100644 app/components/reaction-role/action-cell.vue create mode 100644 app/components/reaction-role/fields.vue create mode 100644 app/components/reaction-role/form.vue create mode 100644 app/components/rule/action-cell.vue create mode 100644 app/components/rule/fields.vue create mode 100644 app/components/rule/form.vue create mode 100644 app/components/server-content/action-cell.vue create mode 100644 app/components/server-content/fields.vue create mode 100644 app/components/server-content/form.vue create mode 100644 app/components/table/boolean-cell.vue diff --git a/app/components/TextChannelSelector.vue b/app/components/TextChannelSelector.vue index 8129a50..b635d4e 100644 --- a/app/components/TextChannelSelector.vue +++ b/app/components/TextChannelSelector.vue @@ -1,33 +1,24 @@ diff --git a/app/components/faq/action-cell.vue b/app/components/faq/action-cell.vue index e27971a..499f8ad 100644 --- a/app/components/faq/action-cell.vue +++ b/app/components/faq/action-cell.vue @@ -45,6 +45,7 @@ const deleteFaq = async () => { :description="`Are you sure, this action cannot be undone.`" > +import { ref } from "vue"; +import type { PermissionTemplate, PermissionMap } from "@/types/permission"; + +const model = defineModel({ required: true }); +defineProps<{ + permissionTemplate: PermissionTemplate; +}>(); + +const roles = ref(await loadRoles()); + +const remove = (key: number) => { + model.value?.splice(key, 1); +}; + +const toTitleCase = (input: string): string => { + return input + .replace(/([a-z])([A-Z])/g, "$1 $2") // Split camelCase into separate words + .replace(/\b\w/g, (char) => char.toUpperCase()); // Capitalize each word +}; + +const roleIdToName = (roleId: string) => { + return ( + roles.value.find((role) => role.value === roleId)?.label ?? + "No role selected" + ); +}; + + + diff --git a/app/components/permission/form.vue b/app/components/permission/form.vue new file mode 100644 index 0000000..5bdb489 --- /dev/null +++ b/app/components/permission/form.vue @@ -0,0 +1,120 @@ + + + diff --git a/app/components/reaction-role/action-cell.vue b/app/components/reaction-role/action-cell.vue new file mode 100644 index 0000000..1373746 --- /dev/null +++ b/app/components/reaction-role/action-cell.vue @@ -0,0 +1,76 @@ + + + diff --git a/app/components/reaction-role/fields.vue b/app/components/reaction-role/fields.vue new file mode 100644 index 0000000..b1f9268 --- /dev/null +++ b/app/components/reaction-role/fields.vue @@ -0,0 +1,52 @@ + + + diff --git a/app/components/reaction-role/form.vue b/app/components/reaction-role/form.vue new file mode 100644 index 0000000..2bc50d4 --- /dev/null +++ b/app/components/reaction-role/form.vue @@ -0,0 +1,58 @@ + + + diff --git a/app/components/rule/action-cell.vue b/app/components/rule/action-cell.vue new file mode 100644 index 0000000..46a9bc9 --- /dev/null +++ b/app/components/rule/action-cell.vue @@ -0,0 +1,71 @@ + + + diff --git a/app/components/rule/fields.vue b/app/components/rule/fields.vue new file mode 100644 index 0000000..953f77d --- /dev/null +++ b/app/components/rule/fields.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/components/rule/form.vue b/app/components/rule/form.vue new file mode 100644 index 0000000..c15e34f --- /dev/null +++ b/app/components/rule/form.vue @@ -0,0 +1,56 @@ + + + diff --git a/app/components/server-content/action-cell.vue b/app/components/server-content/action-cell.vue new file mode 100644 index 0000000..450df27 --- /dev/null +++ b/app/components/server-content/action-cell.vue @@ -0,0 +1,76 @@ + + + diff --git a/app/components/server-content/fields.vue b/app/components/server-content/fields.vue new file mode 100644 index 0000000..ee199dc --- /dev/null +++ b/app/components/server-content/fields.vue @@ -0,0 +1,22 @@ + + + diff --git a/app/components/server-content/form.vue b/app/components/server-content/form.vue new file mode 100644 index 0000000..1a38116 --- /dev/null +++ b/app/components/server-content/form.vue @@ -0,0 +1,60 @@ + + + diff --git a/app/components/table/boolean-cell.vue b/app/components/table/boolean-cell.vue new file mode 100644 index 0000000..b62f831 --- /dev/null +++ b/app/components/table/boolean-cell.vue @@ -0,0 +1,14 @@ + + + diff --git a/app/pages/faq/index.vue b/app/pages/faq/index.vue index 5c633c9..bec9131 100644 --- a/app/pages/faq/index.vue +++ b/app/pages/faq/index.vue @@ -54,16 +54,16 @@ useHead({ diff --git a/app/pages/permission/index.vue b/app/pages/permission/index.vue index af006c0..e254dbf 100644 --- a/app/pages/permission/index.vue +++ b/app/pages/permission/index.vue @@ -1,107 +1,12 @@ diff --git a/app/pages/reaction-role/create.vue b/app/pages/reaction-role/create.vue index d9220e6..19df615 100644 --- a/app/pages/reaction-role/create.vue +++ b/app/pages/reaction-role/create.vue @@ -1,39 +1,18 @@