diff --git a/.changeset/vue-integration.md b/.changeset/vue-integration.md new file mode 100644 index 00000000..379f6fab --- /dev/null +++ b/.changeset/vue-integration.md @@ -0,0 +1,7 @@ +--- +"@tryabby/vue": minor +--- + +Add the `@tryabby/vue` integration with `useAbby`, `useFeatureFlag` and +`useRemoteConfig` composables, an `AbbyProvider` component and an installable +Vue plugin. diff --git a/apps/docs/pages/integrations/_meta.json b/apps/docs/pages/integrations/_meta.json index 5cbf2999..1f8b2ad8 100644 --- a/apps/docs/pages/integrations/_meta.json +++ b/apps/docs/pages/integrations/_meta.json @@ -3,6 +3,7 @@ "react": "React", "remix": "Remix", "svelte": "Svelte", + "vue": "Vue", "angular": "Angular", "node": "Node", "express": "Express", diff --git a/apps/docs/pages/integrations/vue.mdx b/apps/docs/pages/integrations/vue.mdx new file mode 100644 index 00000000..17c0193d --- /dev/null +++ b/apps/docs/pages/integrations/vue.mdx @@ -0,0 +1,187 @@ +import { Tab, Tabs, Callout } from "nextra-theme-docs"; + +# Vue + +Our Vue integration works with Vue 3 (SPAs as well as server side rendered apps) +and with Nuxt. + +## Installation + +To get started make sure to install the package using your favorite package manager. + + + + ```bash + npm i @tryabby/vue + ``` + + + + ```bash + yarn add @tryabby/vue + ``` + + + ```bash + pnpm i @tryabby/vue + ``` + + + +## Usage + +### Create your config + +To use Abby you need to create your config first. You can do this by creating a +file called `abby.config.ts` in your `root` folder. This file will be used to +configure your project. + +```ts +// abby.config.ts +import { defineConfig } from "@tryabby/vue"; + +export default defineConfig({ + projectId: "", + currentEnvironment: import.meta.env.MODE, + environments: ["production", "development"], + tests: { + test: { variants: ["A", "B"] }, + footer: { variants: ["dark", "orange", "green"] }, + // ... your tests + }, + flags: ["darkMode", "newFeature"], + remoteConfig: { + customButtonText: "String", + }, +}); +``` + +### Create your instance + +To use Abby in your code you will need to create your typed composables first. +You can do this by using the `createAbby` function. Please copy the id of your +project from the dashboard to get started. + +```ts +import { createAbby } from "@tryabby/vue"; +import abbyConfig from "../abby.config"; + +const { AbbyProvider, useAbby } = createAbby(abbyConfig); +``` + + + Call `createAbby` once in its own module and import the returned composables + where you need them - that keeps the types of your tests, flags and remote + config available across your whole app. + + +### Wrap your Application + +Wrap your application in the `AbbyProvider`. The provider loads your project +data and provides it to all components below it. + +```html + + + +``` + +If you prefer to use a plugin you can also install Abby on your app instance. +The composables need to be created outside of your components for this. + +```ts +// main.ts +import { createApp } from "vue"; +import { AbbyPlugin } from "./abby"; +import App from "./App.vue"; + +createApp(App).use(AbbyPlugin).mount("#app"); +``` + +### Use the composables + +The composables can be used inside the `setup` function of your components. They +all return `ComputedRef`s, so they stay in sync when new project data arrives. + +#### useAbby + +`useAbby` takes the name of your test and returns the currently selected variant +as well as the `onAct` function, which you can call to track a conversion. + +```html + + + +``` + +#### useFeatureFlag + +`useFeatureFlag` takes the name of your feature flag and returns its value. + +```html + + + +``` + +#### useRemoteConfig + +`useRemoteConfig` takes the name of your remote config and returns its value. + +```html + + + +``` + +### Nuxt + +For Nuxt you can put your `createAbby` instance into a plugin and pass the +project data which is fetched during server side rendering as `initialData`. +This way the first render already contains your variants and flags. + +```ts +// plugins/abby.ts +import { createAbby } from "./abby"; + +const { AbbyPlugin } = createAbby(abbyConfig); + +export default defineNuxtPlugin((nuxtApp) => { + nuxtApp.vueApp.use(AbbyPlugin); +}); +``` + + + `AbbyProvider` accepts an `initialData` prop (an `AbbyDataResponse` from + `@tryabby/core`). If you pass it, the provider will not fetch your project data + on the client, which avoids a hydration mismatch. + diff --git a/apps/docs/pages/reference/_meta.json b/apps/docs/pages/reference/_meta.json index ef26086c..aa93d31c 100644 --- a/apps/docs/pages/reference/_meta.json +++ b/apps/docs/pages/reference/_meta.json @@ -3,6 +3,7 @@ "react": "React", "remix": "Remix", "svelte": "Svelte", + "vue": "Vue", "angular": "Angular", "http": "HTTP API", "cli": "CLI", diff --git a/apps/docs/pages/reference/vue.mdx b/apps/docs/pages/reference/vue.mdx new file mode 100644 index 00000000..587c8555 --- /dev/null +++ b/apps/docs/pages/reference/vue.mdx @@ -0,0 +1,89 @@ +# API Reference (Vue) + +## createAbby + +### Parameters + +The `createAbby` function takes an object as a parameter. The object can contain the following properties: + +| Name | Type | Required | Description | +| ------------------ | -------- | :------: | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| projectId | `string` | YES | The ID of your project in Abby | +| apiUrl | `string` | | The URL of the Abby API. Defaults to the hosted version | +| currentEnvironment | `string` | YES | The current environment of your application | +| tests | `object` | | An object containing your defined A/B Tests | +| flags | `array` | | An array containing your defined Feature Flags | +| remoteConfig | `object` | | An object containing the name of your remote config and their type | +| settings | `object` | | An object with additional settings for Abby | +| user | `object` | | Optional configuration for user properties that can be used for targeting feature flags. This enables conditional rules based on user attributes. | + +### Return value + +| Name | Type | Description | +| -------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `AbbyProvider` | `Component` | Loads the project data and provides it to all child components | +| `AbbyPlugin` | `Plugin` | Vue plugin, install it with `app.use(AbbyPlugin, initialData?)` | +| `useAbby` | `(name, lookupObject?) => { variant, onAct }` | Returns the current variant of a test and a function to track an act | +| `useFeatureFlag` | `(name) => ComputedRef` | Returns the value of a feature flag | +| `useFeatureFlags` | `() => ComputedRef>` | Returns all feature flags with their current value | +| `useRemoteConfig` | `(name) => ComputedRef` | Returns the value of a remote config | +| `useRemoteConfigVariables` | `() => ComputedRef>` | Returns all remote config variables with their current value | +| `getFeatureFlagValue` | `(name) => boolean` | Non reactive helper to read a feature flag | +| `getRemoteConfig` | `(name) => value` | Non reactive helper to read a remote config | +| `getABTestValue` | `(name, lookupObject?) => value` | Non reactive helper to read the variant of a test | +| `getVariants` | `(name) => string[]` | Returns all variants of a test | +| `getABResetFunction` | `() => void` | Returns a function which resets the persisted variant of a test | +| `updateUserProperties` | `(userProperties) => void` | Updates the user properties which are sent to Abby | +| `__abby__` | `Abby` | The underlying `Abby` instance of `@tryabby/core` | + +## AbbyProvider + +### Props + +| Name | Type | Required | Description | +| ------------- | ------------------ | :------: | ---------------------------------------------------------------------------------------------------------- | +| `initialData` | `AbbyDataResponse` | | Project data which is used instead of fetching it from the Abby API (for example during server rendering) | + +## useAbby + +### Parameters + +| Name | Type | Required | Description | +| -------------- | -------- | :------: | -------------------------------------------------------------------------------------- | +| `name` | `string` | YES | The name of your A/B test | +| `lookupObject` | `object` | | A map from variant to the value you want to get back from `variant`, e.g. a component | + +### Return value + +| Name | Type | Description | +| --------- | ------------------------------------- | ---------------------------------------------------------- | +| `variant` | `ComputedRef` | The currently selected variant (or its mapped value) | +| `onAct` | `() => void` | Call this function to track an act for the current variant | + +## useFeatureFlag + +### Parameters + +| Name | Type | Required | Description | +| ------ | -------- | :------: | ------------------------------- | +| `name` | `string` | YES | The name of your feature flag | + +### Return value + +| Name | Type | Description | +| ------- | ----------------------- | ----------------------------- | +| `value` | `ComputedRef` | The value of the feature flag | + +## useRemoteConfig + +### Parameters + +| Name | Type | Required | Description | +| ------ | -------- | :------: | ------------------------------ | +| `name` | `string` | YES | The name of your remote config | + +### Return value + +| Name | Type | Description | +| ------- | --------------------------- | ------------------------------- | +| `value` | `ComputedRef` | The value of the remote config | diff --git a/packages/vue/.gitignore b/packages/vue/.gitignore new file mode 100644 index 00000000..0e75fe55 --- /dev/null +++ b/packages/vue/.gitignore @@ -0,0 +1,3 @@ +node_modules +dist +coverage diff --git a/packages/vue/README.md b/packages/vue/README.md new file mode 100644 index 00000000..a2900fde --- /dev/null +++ b/packages/vue/README.md @@ -0,0 +1,123 @@ +# @tryabby/vue + +Vue 3 bindings for [Abby](https://tryabby.com), the open source A/B testing, feature flagging and remote config platform. + +## Installation + +```bash +npm install @tryabby/vue @tryabby/core +``` + +## Setup + +Create an `abby.ts` file, just like you would with the React integration: + +```ts +import { createAbby } from "@tryabby/vue"; +import { defineConfig } from "@tryabby/core"; + +export const abby = createAbby( + defineConfig({ + projectId: "YOUR_PROJECT_ID", + currentEnvironment: process.env.NODE_ENV, + environments: ["development", "production"], + tests: { + Footer: { variants: ["Old", "New"] }, + }, + flags: ["NewFooter"], + remoteConfig: { + ButtonColor: "string", + }, + }) +); +``` + +Then wrap your app in the `AbbyProvider`: + +```vue + + + +``` + +For SSR (for example with Nuxt) pass the data you fetched on the server as +`initialData`, so the first client render matches the server render: + +```vue + + + +``` + +## Usage + +### AB Tests + +```vue + + + +``` + +`variant` is a computed ref, so it automatically updates when the project data +changes or when the AB test is reset through the devtools. + +### Feature Flags + +```vue + + + +``` + +### Remote Config + +```vue + + + +``` + +## Non reactive getters + +Besides the composables, `createAbby` also exposes non reactive getters that +can be used outside of the setup function (for example in event handlers): +`getFeatureFlagValue`, `getABTestValue`, `getRemoteConfig`, `getVariants`, +`getABResetFunction` and `updateUserProperties`. + +## Testing + +```bash +pnpm --filter @tryabby/vue test +pnpm --filter @tryabby/vue build +``` diff --git a/packages/vue/package.json b/packages/vue/package.json new file mode 100644 index 00000000..d2af9858 --- /dev/null +++ b/packages/vue/package.json @@ -0,0 +1,47 @@ +{ + "name": "@tryabby/vue", + "version": "0.0.1", + "description": "Vue 3 bindings for Abby", + "main": "dist/index.js", + "files": ["dist"], + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } + }, + "scripts": { + "build": "tsup src/", + "dev": "tsup src/ --watch", + "test": "vitest" + }, + "homepage": "https://docs.tryabby.com", + "keywords": ["vue", "feature-flags", "ab-testing", "remote-config"], + "author": "", + "license": "ISC", + "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@types/js-cookie": "^3.0.3", + "@vitejs/plugin-vue": "5.0.4", + "@vue/test-utils": "^2.4.6", + "jsdom": "^20.0.3", + "msw": "^0.49.1", + "node-fetch": "^3.3.0", + "tsconfig": "workspace:*", + "tsup": "^6.5.0", + "typescript": "5.5.4", + "vite": "5.4.0", + "vitest": "2.0.5", + "vue": "^3.4.21" + }, + "peerDependencies": { + "vue": "^3.3.0" + }, + "dependencies": { + "@tryabby/core": "workspace:*", + "js-cookie": "^3.0.1" + } +} diff --git a/packages/vue/src/StorageService.ts b/packages/vue/src/StorageService.ts new file mode 100644 index 00000000..496d6ccd --- /dev/null +++ b/packages/vue/src/StorageService.ts @@ -0,0 +1,58 @@ +import { + type IStorageService, + type StorageServiceOptions, + getABStorageKey, + getFFStorageKey, + getRCStorageKey, +} from "@tryabby/core"; +import Cookie from "js-cookie"; + +const DEFAULT_COOKIE_AGE = 365; + +/** + * Returns true if we are running in an environment with a browser and + * therefore can read and write cookies. This is false on the server (SSR), + * during prerendering and in edge runtimes. + */ +export const isBrowser = () => + typeof window !== "undefined" && typeof document !== "undefined"; + +class CookieStorageService implements IStorageService { + constructor( + private readonly getKey: (projectId: string, name: string) => string + ) {} + + get(projectId: string, name: string): string | null { + if (!isBrowser()) return null; + + // biome-ignore lint/style/noNonNullAssertion: we checked that we are in a browser + return Cookie.get(this.getKey(projectId, name)!) ?? null; + } + + set( + projectId: string, + name: string, + value: string, + options?: StorageServiceOptions + ): void { + if (!isBrowser()) return; + + Cookie.set(this.getKey(projectId, name), value, { + // the nullish coalescing is important here: an explicit `0` (session + // cookie) must not fall back to the default expiration + expires: options?.expiresInDays ?? DEFAULT_COOKIE_AGE, + }); + } + + remove(projectId: string, name: string): void { + if (!isBrowser()) return; + + Cookie.remove(this.getKey(projectId, name)); + } +} + +export const TestStorageService = new CookieStorageService(getABStorageKey); +export const FlagStorageService = new CookieStorageService(getFFStorageKey); +export const RemoteConfigStorageService = new CookieStorageService( + getRCStorageKey +); diff --git a/packages/vue/src/context.ts b/packages/vue/src/context.ts new file mode 100644 index 00000000..5e998b9e --- /dev/null +++ b/packages/vue/src/context.ts @@ -0,0 +1,435 @@ +import { + type ABConfig, + Abby, + type AbbyConfig, + type AbbyDataResponse, + AbbyEventType, + HttpService, + type RemoteConfigValueString, + type RemoteConfigValueStringToType, + type ValidatorType, +} from "@tryabby/core"; +import type { Infer } from "@tryabby/core/validation"; +import { + type App, + type ComputedRef, + type InjectionKey, + type PropType, + type ShallowRef, + computed, + defineComponent, + inject, + onMounted, + onUnmounted, + provide, + shallowRef, + watch, +} from "vue"; +import { + FlagStorageService, + RemoteConfigStorageService, + TestStorageService, + isBrowser, +} from "./StorageService"; + +/** + * The value of an AB test. If a lookup object was passed to `useAbby`, + * the type of the looked up value is returned instead of the variant name. + */ +export type ABTestReturnValue = Lookup extends undefined + ? TestVariant + : TestVariant extends keyof Lookup + ? Lookup[TestVariant] + : never; + +export function createAbby< + const FlagName extends string, + const TestName extends string, + const Tests extends Record, + const RemoteConfig extends Record, + const RemoteConfigName extends Extract, + const User extends Record = Record< + string, + ValidatorType + >, +>( + abbyConfig: AbbyConfig< + FlagName, + Tests, + string[], + RemoteConfigName, + RemoteConfig, + User + > +) { + // we need to return the config as a const so that the types are narrowed + const config = abbyConfig; + + const abby = new Abby< + FlagName, + TestName, + Tests, + RemoteConfig, + RemoteConfigName, + string[], + User + >( + config, + { + get: (key: string) => { + if (!isBrowser()) return null; + return TestStorageService.get(config.projectId, key); + }, + set: (key: string, value: string) => { + if (!isBrowser() || config.cookies?.disableByDefault) return; + TestStorageService.set(config.projectId, key, value); + }, + }, + { + get: (key: string) => { + if (!isBrowser()) return null; + return FlagStorageService.get(config.projectId, key); + }, + set: (key: string, value: string) => { + if (!isBrowser()) return; + FlagStorageService.set(config.projectId, key, value); + }, + }, + { + get: (key: string) => { + if (!isBrowser()) return null; + return RemoteConfigStorageService.get(config.projectId, key); + }, + set: (key: string, value: string) => { + if (!isBrowser()) return; + RemoteConfigStorageService.set(config.projectId, key, value); + }, + } + ); + + type AbbyProjectData = ReturnType; + + /** + * Each app (and therefore each SSR request) gets its own reactive project + * data, which is provided to every component below the provider via + * `provide` / `inject`. + */ + const ABBY_INJECTION_KEY: InjectionKey> = + Symbol("abby-project-data"); + + /** + * Throws a helpful error if the composable is used outside of an + * `AbbyProvider`. This is the same behaviour as the React integration. + */ + const useAbbyData = (): ShallowRef => { + const data = inject(ABBY_INJECTION_KEY, null); + + if (!data) { + throw new Error( + "useAbbyData must be used within an AbbyProvider. Wrap a parent component in to fix this error." + ); + } + + return data; + }; + + const sendData = (type: AbbyEventType, testName: string, variant: string) => { + HttpService.sendData({ + url: config.apiUrl, + type, + data: { + projectId: config.projectId, + selectedVariant: variant, + testName, + }, + }); + }; + + /** + * Returns the currently selected variant for the given test as well as an + * `onAct` callback. The variant is a computed ref, so it stays in sync when + * the project data is loaded, when the AB test is reset via the devtools or + * when the local overrides change. + */ + const useAbby = < + K extends keyof Tests, + TestVariant extends Tests[K]["variants"][number], + LookupValue, + const Lookup extends + | Record + | undefined = undefined, + >( + name: K, + lookupObject?: Lookup + ): { + variant: ComputedRef>; + onAct: () => void; + } => { + const data = useAbbyData(); + + // Typescript loses the typing here, so we cast in favor of a better + // developer experience (same as the react integration) + const testName = name as unknown as TestName; + + // always return an empty string until the data has been loaded to avoid + // SSR hydration mismatches, the server doesn't know the variant either + const selectedVariant = computed( + () => data.value.tests[testName]?.selectedVariant ?? "" + ); + + const variant = computed(() => { + const current = selectedVariant.value; + + return ( + lookupObject ? lookupObject[current as TestVariant] : current + ) as ABTestReturnValue; + }); + + // report a ping whenever the selected variant changes, just like the + // React integration does on every render after a variant change + watch( + selectedVariant, + (current) => { + if (!current) return; + sendData(AbbyEventType.PING, testName, current); + }, + { immediate: true } + ); + + /** + * This function can be called to indicate that something that uses the + * selected variant has been rendered. It will automatically send the + * selected variant to the server. + */ + const onAct = () => { + const current = selectedVariant.value; + if (!current) return; + + sendData(AbbyEventType.ACT, testName, current); + }; + + return { variant, onAct }; + }; + + /** + * Returns the value of the given feature flag + */ + const useFeatureFlag = (name: FlagName): ComputedRef => { + const data = useAbbyData(); + + // flags which are not part of the project data fall back to the defaults + // and dev overrides of the config, just like `getFeatureFlag` does + return computed( + () => data.value.flags[name]?.value ?? abby.getFeatureFlag(name) + ); + }; + + /** + * Returns an array of all flags with their name and value + */ + const useFeatureFlags = () => { + const data = useAbbyData(); + + return computed(() => + (Object.keys(data.value.flags) as Array).map((flagName) => ({ + name: flagName, + value: data.value.flags[flagName].value, + })) + ); + }; + + /** + * Returns the value of the given remote config variable + */ + const useRemoteConfig = < + T extends RemoteConfigName, + Config extends RemoteConfig[T], + >( + remoteConfigName: T + ): ComputedRef> => { + const data = useAbbyData(); + + return computed( + () => + (data.value.remoteConfig[remoteConfigName]?.value ?? + abby.getRemoteConfig( + remoteConfigName + )) as RemoteConfigValueStringToType + ); + }; + + /** + * Returns an array of all remote config variables with their name and value + */ + const useRemoteConfigVariables = () => { + const data = useAbbyData(); + + return computed(() => + (Object.keys(data.value.remoteConfig) as Array).map( + (configName) => ({ + name: configName, + value: data.value.remoteConfig[configName].value, + }) + ) + ); + }; + + /** + * Non reactive getter for a feature flag. Useful in event handlers and + * anywhere a computed ref is not convenient. + */ + const getFeatureFlagValue = (name: FlagName) => abby.getFeatureFlag(name); + + /** + * Non reactive getter for a remote config variable + */ + const getRemoteConfig = < + T extends RemoteConfigName, + Config extends RemoteConfig[T], + >( + remoteConfigName: T + ): RemoteConfigValueStringToType => + abby.getRemoteConfig(remoteConfigName); + + /** + * Non reactive getter for the currently selected variant of an AB test + */ + const getABTestValue = < + TestName_ extends keyof Tests, + TestVariant extends Tests[TestName_]["variants"][number], + LookupValue, + const Lookup extends + | Record + | undefined = undefined, + >( + testName: TestName_, + lookupObject?: Lookup + ): ABTestReturnValue => { + const variant = abby.getTestVariant(testName); + + if (lookupObject === undefined) { + // Typescript looses its typing here, so we cast as any in favor of + // having better type inference for the user + return variant as any; + } + + return lookupObject[variant as TestVariant] as any; + }; + + /** + * Simple helper function to create a function that resets an AB test + */ + const getABResetFunction = (name: T) => { + return () => { + TestStorageService.remove(config.projectId, name as string); + }; + }; + + /** + * Simple helper function to get a list of all variants for a given test + */ + const getVariants = (name: T) => + abby.getVariants(name); + + const updateUserProperties = ( + user: Partial<{ + -readonly [K in keyof User]: Infer; + }> + ) => { + abby.updateUserProperties(user); + }; + + /** + * Provides the project data to all children. It loads the data from the + * server on mount (unless `initialData` was passed, which is what Nuxt and + * SSR setups should do) and subscribes to changes of the local overrides. + */ + const AbbyProvider = defineComponent({ + name: "AbbyProvider", + props: { + initialData: { + type: Object as PropType, + default: undefined, + }, + }, + setup(props, { slots }) { + const data = shallowRef( + props.initialData ? abby.init(props.initialData) : abby.getProjectData() + ); + + let hasLoaded = false; + let unsubscribe: (() => void) | null = null; + + const load = async () => { + if (props.initialData || hasLoaded) return; + hasLoaded = true; + + const newData = await abby.loadProjectData(); + if (newData) data.value = newData; + }; + + provide(ABBY_INJECTION_KEY, data); + + // subscribe to changes of the project data (devtools overrides, + // local storage overrides, ...) and clean the subscription up when the + // provider unmounts + onMounted(() => { + load(); + + unsubscribe = abby.subscribe((newData) => { + data.value = newData; + }); + }); + + onUnmounted(() => { + unsubscribe?.(); + unsubscribe = null; + }); + + return () => slots.default?.(); + }, + }); + + /** + * Vue plugin, so the integration can be used with `app.use(AbbyPlugin)` + * as well. It mounts the provider implicitly by providing the state on the + * app level, which allows using the composables outside of a dedicated + * provider component too. + */ + const AbbyPlugin = { + install(app: App, initialData?: AbbyDataResponse) { + const data = shallowRef( + initialData ? abby.init(initialData) : abby.getProjectData() + ); + + app.provide(ABBY_INJECTION_KEY, data); + + abby.subscribe((newData) => { + data.value = newData; + }); + + if (!initialData && isBrowser()) { + abby.loadProjectData().then((newData) => { + if (newData) data.value = newData; + }); + } + }, + }; + + return { + useAbby, + AbbyProvider, + AbbyPlugin, + useFeatureFlag, + useFeatureFlags, + useRemoteConfig, + useRemoteConfigVariables, + getFeatureFlagValue, + getRemoteConfig, + getABTestValue, + getABResetFunction, + getVariants, + updateUserProperties, + __abby__: abby, + }; +} diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts new file mode 100644 index 00000000..6f10a7dd --- /dev/null +++ b/packages/vue/src/index.ts @@ -0,0 +1,2 @@ +export { createAbby, type ABTestReturnValue } from "./context"; +export { type ABConfig, type AbbyConfig, defineConfig } from "@tryabby/core"; diff --git a/packages/vue/tests/featureFlags.test.ts b/packages/vue/tests/featureFlags.test.ts new file mode 100644 index 00000000..9747c6fb --- /dev/null +++ b/packages/vue/tests/featureFlags.test.ts @@ -0,0 +1,84 @@ +import { flushPromises, mount } from "@vue/test-utils"; +import { defineComponent, h } from "vue"; +import { createAbby } from "../src"; + +const abbyConfig = { + environments: [""], + currentEnvironment: "", + projectId: "123", + flags: ["flag1", "flag2", "flag3"], + settings: { flags: { defaultValue: true } }, +}; + +describe("useFeatureFlag", () => { + it("returns the value of the feature flag", async () => { + const { AbbyProvider, useFeatureFlag } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const flag1 = useFeatureFlag("flag1"); + const flag2 = useFeatureFlag("flag2"); + + expectTypeOf(flag1.value).toEqualTypeOf(); + + return () => h("div", `${flag1.value}-${flag2.value}`); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("true-false"); + }); + + it("falls back to the default value for unknown flags", async () => { + const { AbbyProvider, useFeatureFlag } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const flag3 = useFeatureFlag("flag3"); + + return () => h("div", String(flag3.value)); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("true"); + }); + + it("getFeatureFlagValue works outside of the reactivity system", () => { + const { getFeatureFlagValue } = createAbby(abbyConfig); + + expect(getFeatureFlagValue("flag1")).toBeDefined(); + }); +}); + +describe("useFeatureFlags", () => { + it("returns all flags", async () => { + const { AbbyProvider, useFeatureFlags } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const flags = useFeatureFlags(); + + return () => h("div", flags.value.map((flag) => flag.name).join(",")); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("flag1,flag2"); + }); +}); diff --git a/packages/vue/tests/mocks/handlers.ts b/packages/vue/tests/mocks/handlers.ts new file mode 100644 index 00000000..3141a6ac --- /dev/null +++ b/packages/vue/tests/mocks/handlers.ts @@ -0,0 +1,40 @@ +import { ABBY_BASE_URL, type AbbyDataResponse } from "@tryabby/core"; +import { rest } from "msw"; + +const returnData: AbbyDataResponse = { + tests: [ + { + name: "test", + weights: [1, 1, 1, 1], + }, + { + name: "test2", + weights: [1, 0], + }, + ], + flags: [ + { + name: "flag1", + value: true, + }, + { + name: "flag2", + value: false, + }, + ], + remoteConfig: [ + { + name: "remoteConfig1", + value: "FooBar", + }, + ], +}; + +export const handlers = [ + rest.get(`${ABBY_BASE_URL}api/dashboard/:projectId/data`, (_req, res, ctx) => + res(ctx.json(returnData)) + ), + rest.get(`${ABBY_BASE_URL}api/v2/data/:projectId`, (_req, res, ctx) => + res(ctx.json(returnData)) + ), +]; diff --git a/packages/vue/tests/mocks/server.ts b/packages/vue/tests/mocks/server.ts new file mode 100644 index 00000000..7b37f2ac --- /dev/null +++ b/packages/vue/tests/mocks/server.ts @@ -0,0 +1,4 @@ +import { setupServer } from "msw/node"; +import { handlers } from "./handlers"; + +export const server = setupServer(...handlers); diff --git a/packages/vue/tests/remoteConfig.test.ts b/packages/vue/tests/remoteConfig.test.ts new file mode 100644 index 00000000..ba791cb5 --- /dev/null +++ b/packages/vue/tests/remoteConfig.test.ts @@ -0,0 +1,117 @@ +import { flushPromises, mount } from "@vue/test-utils"; +import { defineComponent, h } from "vue"; +import { createAbby } from "../src"; + +describe("useRemoteConfig", () => { + it("returns the value of the remote config", async () => { + const { AbbyProvider, useRemoteConfig } = createAbby({ + environments: [""], + currentEnvironment: "", + projectId: "123", + remoteConfig: { remoteConfig1: "String" }, + }); + + const Child = defineComponent({ + setup() { + const value = useRemoteConfig("remoteConfig1"); + + expectTypeOf(value.value).toEqualTypeOf(); + + return () => h("div", value.value); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("FooBar"); + }); + + it("falls back to the default values of the config", () => { + const { getRemoteConfig } = createAbby({ + environments: [""], + currentEnvironment: "", + projectId: "123", + remoteConfig: { + numberConfig: "Number", + jsonConfig: "JSON", + }, + settings: { + remoteConfig: { + defaultValues: { + Number: 10, + JSON: { foo: "bar" }, + }, + }, + }, + }); + + const number = getRemoteConfig("numberConfig"); + const json = getRemoteConfig("jsonConfig"); + + expectTypeOf(number).toEqualTypeOf(); + expectTypeOf(json).toEqualTypeOf>(); + + expect(number).toBe(10); + expect(json).toEqual({ foo: "bar" }); + }); + + it("returns the default value for remote configs which are not on the server", async () => { + const { AbbyProvider, useRemoteConfig } = createAbby({ + environments: [""], + currentEnvironment: "", + projectId: "123", + remoteConfig: { numberConfig: "Number" }, + settings: { remoteConfig: { defaultValues: { Number: 10 } } }, + }); + + const Child = defineComponent({ + setup() { + const value = useRemoteConfig("numberConfig"); + + expectTypeOf(value.value).toEqualTypeOf(); + + return () => h("div", String(value.value)); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("10"); + }); +}); + +describe("useRemoteConfigVariables", () => { + it("returns all remote config variables", async () => { + const { AbbyProvider, useRemoteConfigVariables } = createAbby({ + environments: [""], + currentEnvironment: "", + projectId: "123", + remoteConfig: { remoteConfig1: "String" }, + }); + + const Child = defineComponent({ + setup() { + const variables = useRemoteConfigVariables(); + + return () => + h("div", variables.value.map((variable) => variable.name).join(",")); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("remoteConfig1"); + }); +}); diff --git a/packages/vue/tests/setup.ts b/packages/vue/tests/setup.ts new file mode 100644 index 00000000..d6f1121b --- /dev/null +++ b/packages/vue/tests/setup.ts @@ -0,0 +1,28 @@ +/// @ts-ignore it doesn't have types +import matchers from "@testing-library/jest-dom/matchers"; +import { config } from "@vue/test-utils"; +import fetch from "node-fetch"; +import { afterEach, beforeAll } from "vitest"; +import { server } from "./mocks/server"; + +/// @ts-ignore node-fetch is not type compatible with the global fetch +global.fetch = fetch; + +// Establish API mocking before all tests. +beforeAll(() => server.listen()); + +// Clean up after the tests are finished. +afterAll(() => server.close()); + +// extends Vitest's expect method with methods from testing-library +expect.extend(matchers); + +// runs a cleanup after each test case (e.g. clearing jsdom) +afterEach(() => { + // Reset any request handlers that we may add during the tests, + // so they don't affect other tests. + server.resetHandlers(); + document.cookie = ""; +}); + +config.global.stubs = {}; diff --git a/packages/vue/tests/types.test.ts b/packages/vue/tests/types.test.ts new file mode 100644 index 00000000..68949c2c --- /dev/null +++ b/packages/vue/tests/types.test.ts @@ -0,0 +1,75 @@ +import { mount } from "@vue/test-utils"; +import { defineComponent, h } from "vue"; +import { createAbby } from "../src"; + +const test2Variants = [ + "SimonsText", + "MatthiasText", + "TomsText", + "TimsText", +] as const; + +const { AbbyProvider, useAbby, useFeatureFlag, useRemoteConfig } = createAbby({ + environments: [""], + currentEnvironment: "", + projectId: "123", + flags: ["flag1"], + tests: { + test: { variants: ["ONLY_ONE_VARIANT"] }, + test2: { + variants: test2Variants, + }, + }, + remoteConfig: { + stringConfig: "String", + numberConfig: "Number", + jsonConfig: "JSON", + }, +}); + +describe("types", () => { + it("infers the variant types of the tests", () => { + const Child = defineComponent({ + setup() { + const test = useAbby("test"); + const test2 = useAbby("test2"); + expectTypeOf(test.variant.value).toEqualTypeOf<"ONLY_ONE_VARIANT">(); + expectTypeOf(test2.variant.value).toEqualTypeOf< + (typeof test2Variants)[number] + >(); + + return () => h("div"); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + expect(wrapper.text()).toBe(""); + }); + + it("infers the flag and remote config types", () => { + const Child = defineComponent({ + setup() { + const flag = useFeatureFlag("flag1"); + const stringConfig = useRemoteConfig("stringConfig"); + const numberConfig = useRemoteConfig("numberConfig"); + const jsonConfig = useRemoteConfig("jsonConfig"); + + expectTypeOf(flag.value).toEqualTypeOf(); + expectTypeOf(stringConfig.value).toEqualTypeOf(); + expectTypeOf(numberConfig.value).toEqualTypeOf(); + expectTypeOf(jsonConfig.value).toEqualTypeOf>(); + + return () => h("div"); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + expect(wrapper.text()).toBe(""); + }); +}); diff --git a/packages/vue/tests/useAbby.test.ts b/packages/vue/tests/useAbby.test.ts new file mode 100644 index 00000000..cd80bdc3 --- /dev/null +++ b/packages/vue/tests/useAbby.test.ts @@ -0,0 +1,181 @@ +import { AbbyEventType, HttpService } from "@tryabby/core"; +import { flushPromises, mount } from "@vue/test-utils"; +import { beforeEach } from "vitest"; +import { defineComponent, h } from "vue"; +import { createAbby } from "../src"; +import { TestStorageService } from "../src/StorageService"; + +const OLD_ENV = process.env; + +beforeEach(() => { + document.cookie = ""; + vi.resetModules(); + vi.restoreAllMocks(); + process.env = { ...OLD_ENV }; +}); + +afterAll(() => { + process.env = OLD_ENV; +}); + +const abbyConfig = { + environments: [""], + currentEnvironment: "", + projectId: "123", + tests: { + test: { variants: ["OldFooter", "NewFooter"] }, + test2: { + variants: ["SimonsText", "MatthiasText", "TomsText", "TimsText"], + }, + }, +}; + +describe("useAbby", () => { + it("returns the selected variant of the given test", async () => { + const setSpy = vi.spyOn(TestStorageService, "set"); + + const { AbbyProvider, useAbby } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const { variant } = useAbby("test"); + + return () => h("div", variant.value); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(setSpy).toHaveBeenCalled(); + expect(["OldFooter", "NewFooter"]).toContain(wrapper.text()); + }); + + it("should use the persisted value", async () => { + const persistedValue = "SimonsText"; + const getSpy = vi.spyOn(TestStorageService, "get"); + getSpy.mockReturnValue(persistedValue); + + const { AbbyProvider, useAbby } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const { variant } = useAbby("test2"); + return () => h("div", variant.value); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe(persistedValue); + }); + + it("looks the variant up in the lookup object", async () => { + const getSpy = vi.spyOn(TestStorageService, "get"); + getSpy.mockReturnValue("OldFooter"); + + const { AbbyProvider, useAbby } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const { variant } = useAbby("test", { + OldFooter: "Retro", + NewFooter: "Modern", + }); + return () => h("div", variant.value); + }, + }); + + const wrapper = mount(AbbyProvider, { + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("Retro"); + }); + + it("sends an act event when onAct is called", async () => { + const getSpy = vi.spyOn(TestStorageService, "get"); + getSpy.mockReturnValue("SimonsText"); + const sendSpy = vi.spyOn(HttpService, "sendData"); + + const { AbbyProvider, useAbby } = createAbby(abbyConfig); + + let onAct: (() => void) | undefined; + + const Child = defineComponent({ + setup() { + const abbyTest = useAbby("test2"); + onAct = abbyTest.onAct; + return () => h("div", abbyTest.variant.value); + }, + }); + + mount(AbbyProvider, { slots: { default: () => h(Child) } }); + + await flushPromises(); + sendSpy.mockClear(); + + onAct?.(); + + expect(sendSpy).toHaveBeenCalledWith( + expect.objectContaining({ + type: AbbyEventType.ACT, + data: expect.objectContaining({ + projectId: "123", + testName: "test2", + selectedVariant: "SimonsText", + }), + }) + ); + }); + + it("throws a helpful error when used outside of the provider", () => { + const { useAbby } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + useAbby("test"); + return () => h("div"); + }, + }); + + expect(() => mount(Child)).toThrow( + /useAbbyData must be used within an AbbyProvider/ + ); + }); + + it("uses the initialData from the server instead of fetching", async () => { + const { AbbyProvider, useAbby } = createAbby(abbyConfig); + + const Child = defineComponent({ + setup() { + const { variant } = useAbby("test"); + return () => h("div", variant.value); + }, + }); + + const wrapper = mount(AbbyProvider, { + props: { + initialData: { + tests: [{ name: "test", weights: [0, 1] }], + flags: [], + remoteConfig: [], + }, + }, + slots: { default: () => h(Child) }, + }); + + await flushPromises(); + + expect(wrapper.text()).toBe("NewFooter"); + }); +}); diff --git a/packages/vue/tsconfig.json b/packages/vue/tsconfig.json new file mode 100644 index 00000000..06924dee --- /dev/null +++ b/packages/vue/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "tsconfig/react-library.json", + "compilerOptions": { + "lib": ["ESNext", "DOM"], + "types": ["vitest/globals"] + } +} diff --git a/packages/vue/tsup.config.ts b/packages/vue/tsup.config.ts new file mode 100644 index 00000000..63bfce96 --- /dev/null +++ b/packages/vue/tsup.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + dts: true, + // we want to bundle the shared package because it's not published to npm + // it's hacky :) + noExternal: ["shared/src/types"], + clean: true, + format: ["cjs", "esm"], + sourcemap: true, + treeshake: true, + // vue is a peer dependency, it should never be bundled into the package + external: ["vue"], +}); diff --git a/packages/vue/vite.config.ts b/packages/vue/vite.config.ts new file mode 100644 index 00000000..65a4bbc1 --- /dev/null +++ b/packages/vue/vite.config.ts @@ -0,0 +1,13 @@ +/// + +import vue from "@vitejs/plugin-vue"; +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [vue()], + test: { + globals: true, + environment: "jsdom", + setupFiles: "./tests/setup.ts", + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69fa896e..d4438a48 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -327,7 +327,7 @@ importers: version: 3.1.55(@next/env@14.2.4)(next@14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8)) next-themes: specifier: ^0.2.1 - version: 0.2.1(next@14.1.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 0.2.1(next@14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) nextjs-cors: specifier: ^2.1.2 version: 2.1.2(next@14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8)) @@ -620,7 +620,7 @@ importers: version: 2.4.2 tsup: specifier: ^6.5.0 - version: 6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4))(typescript@5.5.4) + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4))(typescript@5.5.4) unconfig: specifier: ^0.3.10 version: 0.3.10 @@ -681,7 +681,7 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -757,7 +757,7 @@ importers: version: 3.59.1 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1) + version: 2.10.3(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1) tslib: specifier: ^2.5.0 version: 2.5.3 @@ -827,7 +827,7 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -876,7 +876,7 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -940,7 +940,7 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -1004,7 +1004,7 @@ importers: version: link:../tsconfig tsup: specifier: ^6.5.0 - version: 6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -1089,7 +1089,7 @@ importers: version: 3.59.1 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1) + version: 2.10.3(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1) tslib: specifier: ^2.5.0 version: 2.5.3 @@ -1108,6 +1108,55 @@ importers: packages/tsconfig: {} + packages/vue: + dependencies: + '@tryabby/core': + specifier: workspace:* + version: link:../core + js-cookie: + specifier: ^3.0.1 + version: 3.0.5 + devDependencies: + '@testing-library/jest-dom': + specifier: ^5.16.5 + version: 5.16.5 + '@types/js-cookie': + specifier: ^3.0.3 + version: 3.0.3 + '@vitejs/plugin-vue': + specifier: 5.0.4 + version: 5.0.4(vite@5.4.0(@types/node@22.1.0)(less@4.2.0)(sass@1.77.8)(terser@5.31.1))(vue@3.5.43(typescript@5.5.4)) + '@vue/test-utils': + specifier: ^2.4.6 + version: 2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.43(typescript@5.5.4)) + jsdom: + specifier: ^20.0.3 + version: 20.0.3 + msw: + specifier: ^0.49.1 + version: 0.49.3(encoding@0.1.13)(typescript@5.5.4) + node-fetch: + specifier: ^3.3.0 + version: 3.3.2 + tsconfig: + specifier: workspace:* + version: link:../tsconfig + tsup: + specifier: ^6.5.0 + version: 6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4) + typescript: + specifier: 5.5.4 + version: 5.5.4 + vite: + specifier: 5.4.0 + version: 5.4.0(@types/node@22.1.0)(less@4.2.0)(sass@1.77.8)(terser@5.31.1) + vitest: + specifier: 2.0.5 + version: 2.0.5(@types/node@22.1.0)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(terser@5.31.1) + vue: + specifier: ^3.4.21 + version: 3.5.43(typescript@5.5.4) + packages: '@adobe/css-tools@4.2.0': @@ -1582,6 +1631,10 @@ packages: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -1590,6 +1643,10 @@ packages: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.22.5': resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} @@ -1656,11 +1713,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.24.4': - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.24.7': resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} @@ -1671,6 +1723,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.9': + resolution: {integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} engines: {node: '>=6.9.0'} @@ -2661,10 +2718,6 @@ packages: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} @@ -2673,6 +2726,10 @@ packages: resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2892,7 +2949,7 @@ packages: '@emotion/use-insertion-effect-with-fallbacks@1.0.1': resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: - react: ^18.2.0 + react: '>=16.8.0' '@esbuild-plugins/node-globals-polyfill@0.2.3': resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} @@ -3713,10 +3770,6 @@ packages: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -3725,18 +3778,10 @@ packages: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} @@ -3750,12 +3795,12 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + '@jridgewell/trace-mapping@0.3.18': resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} - '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -3845,7 +3890,7 @@ packages: '@mdx-js/react@2.3.0': resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: - react: ^18.2.0 + react: '>=16' '@mdx-js/react@3.0.0': resolution: {integrity: sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==} @@ -4295,6 +4340,9 @@ packages: resolution: {integrity: sha512-TUkJLtI163Bz5+JK0O+zDkQpn4gKwN+BovclUvCj6pI/6RXrFqQvUMRS2M+Rt8Rv0qR3wjoMoOPmpJKeOh0nBg==} engines: {node: '>= 18'} + '@one-ini/wasm@0.2.1': + resolution: {integrity: sha512-TUqERXGNTifZ9y2g3wPxQrw3HpHv/02DsW3D90T9x0hhonrL1ZqpSmNrU2XkoIq0fP1N6gZfVQzy2Fw1ZvGBNg==} + '@open-draft/until@1.0.3': resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} @@ -4671,8 +4719,8 @@ packages: '@radix-ui/react-direction@1.1.0': resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: - '@types/react': 18.0.26 - react: ^18.2.0 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -5161,8 +5209,8 @@ packages: '@radix-ui/react-use-layout-effect@1.1.0': resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} peerDependencies: - '@types/react': 18.0.26 - react: ^18.2.0 + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true @@ -6344,9 +6392,6 @@ packages: '@types/estree-jsx@1.0.3': resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} - '@types/estree@1.0.1': - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -6654,6 +6699,13 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-vue@5.0.4': + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + '@vitest/coverage-c8@0.33.0': resolution: {integrity: sha512-DaF1zJz4dcOZS4k/neiQJokmOWqsGXwhthfmUdPGorXIQHjdPvV6JQSYhQDI41MyI8c+IieQUdIDs5XAMHtDDw==} deprecated: v8 coverage is moved to @vitest/coverage-v8 package @@ -6690,9 +6742,21 @@ packages: '@vue/compiler-core@3.4.24': resolution: {integrity: sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A==} + '@vue/compiler-core@3.5.43': + resolution: {integrity: sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==} + '@vue/compiler-dom@3.4.24': resolution: {integrity: sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA==} + '@vue/compiler-dom@3.5.43': + resolution: {integrity: sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==} + + '@vue/compiler-sfc@3.5.43': + resolution: {integrity: sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==} + + '@vue/compiler-ssr@3.5.43': + resolution: {integrity: sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==} + '@vue/language-core@1.8.27': resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} peerDependencies: @@ -6701,9 +6765,34 @@ packages: typescript: optional: true + '@vue/reactivity@3.5.43': + resolution: {integrity: sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==} + + '@vue/runtime-core@3.5.43': + resolution: {integrity: sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==} + + '@vue/runtime-dom@3.5.43': + resolution: {integrity: sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==} + + '@vue/server-renderer@3.5.43': + resolution: {integrity: sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==} + '@vue/shared@3.4.24': resolution: {integrity: sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw==} + '@vue/shared@3.5.43': + resolution: {integrity: sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==} + + '@vue/test-utils@2.5.1': + resolution: {integrity: sha512-V/4a99odJ7hapr0bRt35XxljGk8hefq31gSOnlKTcEq2fUeoj2qb+FcpJYfQu4qfYhW9Ug+O2+CZ3QmZ7gXDzA==} + peerDependencies: + '@vue/compiler-dom': 3.x + '@vue/server-renderer': 3.x + vue: 3.x + peerDependenciesMeta: + '@vue/server-renderer': + optional: true + '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -6786,6 +6875,10 @@ packages: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + abbrev@5.0.0: + resolution: {integrity: sha512-/XrFJgzQQQHpti1raDJC6m4ws6aNktmjBlhk8Fdlk7LwCEuDoieEJJY9OFHjfiFJFFRM2tK+Ky/IsfbbmlMu1w==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -7141,6 +7234,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -7206,6 +7303,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -7576,6 +7677,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -7796,6 +7901,9 @@ packages: csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} @@ -8276,6 +8384,11 @@ packages: resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==} hasBin: true + editorconfig@3.0.2: + resolution: {integrity: sha512-T0ix8GhtxyKVfUFEcvdNDt3YGqlwkFHbD4/5bgFUDgFmxhI/cSRAeJ87/Sz//Cq8Eam6JX/e23RkoFO71P7aAA==} + engines: {node: '>=20'} + hasBin: true + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -8345,6 +8458,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -8985,18 +9102,18 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.2.7: - resolution: {integrity: sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -9010,6 +9127,7 @@ packages: glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -9800,10 +9918,6 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} - engines: {node: '>=14'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -9882,10 +9996,18 @@ packages: engines: {node: '>=12'} hasBin: true + js-beautify@2.0.3: + resolution: {integrity: sha512-cyFbh3tkPhknnTD/0bLf0T0yy2ZIbqL05mttzbt4y1Zfr7NxqXQZ62dkBLKs3oHH/lpjmDRAnciJiSUyOy8XwQ==} + engines: {node: '>=14'} + hasBin: true + js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} + js-cookie@3.0.8: + resolution: {integrity: sha512-yeJd4aNAdYZQjaon2bpD/Gb0B/omw7HQOsynXXcOiWVCacbBcPlgn8S/d1X6blFSaHao7ozqtW7NZW19xpCtIw==} + js-levenshtein@1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} @@ -10220,6 +10342,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.3: + resolution: {integrity: sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==} + engines: {node: 20 || >=22} + lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -10230,10 +10356,6 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lru-cache@9.1.2: - resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} - engines: {node: 14 || >=16.14} - lucide-react@0.320.0: resolution: {integrity: sha512-HuMmfmFiWwctDkN27wklKVZr8UpwP2TTekLZ3xiLCEjx/STG1k0KLWMbBfIJ/lnNJQDfSjztDZSVU316xA+AQg==} peerDependencies: @@ -10261,6 +10383,9 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} @@ -10713,6 +10838,10 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} @@ -10774,6 +10903,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -10884,6 +11017,11 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.19: + resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -11131,6 +11269,11 @@ packages: resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} hasBin: true + nopt@10.0.1: + resolution: {integrity: sha512-df3sBr/6ax9hSGuC3CspvLlbnX8cP5L5nZwXF8cGN8l0zSWR6BvzmQ6jPUKjvo6+/xdpkNvEcucBNUdBeeV13g==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} + hasBin: true + nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -11512,9 +11655,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@1.9.2: - resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -11569,6 +11712,9 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -11735,6 +11881,10 @@ packages: resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -12414,16 +12564,6 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@3.25.0: - resolution: {integrity: sha512-FnJkNRst2jEZGw7f+v4hFo6UTzpDKrAKcHZWcEfm5/GJQ5CK7wgb4moNLNAe7npKUev7yQn1AY/YbZRIxOv6Qg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - - rollup@3.27.1: - resolution: {integrity: sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -12587,6 +12727,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -12771,6 +12916,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-loader@5.0.0: resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} engines: {node: '>= 18.12.0'} @@ -12791,6 +12940,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -13964,6 +14114,9 @@ packages: vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + vue-component-type-helpers@3.3.11: + resolution: {integrity: sha512-LwcxzeliO9fkQcpJG0PoX8X5kmAhKmH9wkpDLxNabwzkQ9Zeib2YVHwFV4pcWmMLfXVfjr/dSV+DaJ3cIPgSNA==} + vue-template-compiler@2.7.16: resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} @@ -13973,6 +14126,14 @@ packages: peerDependencies: typescript: '*' + vue@3.5.43: + resolution: {integrity: sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -14046,7 +14207,7 @@ packages: engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: - webpack: 5.93.0 + webpack: ^5.0.0 webpack-cli: '*' peerDependenciesMeta: webpack: @@ -14099,6 +14260,7 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} @@ -14411,7 +14573,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1801.3(chokidar@3.6.0) - '@angular-devkit/build-webpack': 0.1801.3(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.92.1))(webpack@5.92.1(esbuild@0.21.5)) + '@angular-devkit/build-webpack': 0.1801.3(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.92.1))(webpack@5.92.1) '@angular-devkit/core': 18.1.3(chokidar@3.6.0) '@angular/build': 18.1.3(@angular/compiler-cli@18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4))(@types/node@20.3.1)(chokidar@3.6.0)(less@4.2.0)(postcss@8.4.38)(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4)))(terser@5.29.2)(typescript@5.5.4) '@angular/compiler-cli': 18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4) @@ -14425,15 +14587,15 @@ snapshots: '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/runtime': 7.24.7 '@discoveryjs/json-ext': 0.5.7 - '@ngtools/webpack': 18.1.3(@angular/compiler-cli@18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4))(typescript@5.5.4)(webpack@5.92.1(esbuild@0.21.5)) + '@ngtools/webpack': 18.1.3(@angular/compiler-cli@18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4))(typescript@5.5.4)(webpack@5.92.1) '@vitejs/plugin-basic-ssl': 1.1.0(vite@5.3.2(@types/node@20.3.1)(less@4.2.0)(sass@1.77.6)(terser@5.29.2)) ansi-colors: 4.1.3 autoprefixer: 10.4.19(postcss@8.4.38) - babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.1(esbuild@0.21.5)) + babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.1) browserslist: 4.23.1 - copy-webpack-plugin: 12.0.2(webpack@5.92.1(esbuild@0.21.5)) + copy-webpack-plugin: 12.0.2(webpack@5.92.1) critters: 0.0.24 - css-loader: 7.1.2(webpack@5.92.1(esbuild@0.21.5)) + css-loader: 7.1.2(webpack@5.92.1) esbuild-wasm: 0.21.5 fast-glob: 3.3.2 http-proxy-middleware: 3.0.0 @@ -14442,11 +14604,11 @@ snapshots: jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.2.0 - less-loader: 12.2.0(less@4.2.0)(webpack@5.92.1(esbuild@0.21.5)) - license-webpack-plugin: 4.0.2(webpack@5.92.1(esbuild@0.21.5)) + less-loader: 12.2.0(less@4.2.0)(webpack@5.92.1) + license-webpack-plugin: 4.0.2(webpack@5.92.1) loader-utils: 3.3.1 magic-string: 0.30.10 - mini-css-extract-plugin: 2.9.0(webpack@5.92.1(esbuild@0.21.5)) + mini-css-extract-plugin: 2.9.0(webpack@5.92.1) mrmime: 2.0.0 open: 10.1.0 ora: 5.4.1 @@ -14454,13 +14616,13 @@ snapshots: picomatch: 4.0.2 piscina: 4.6.1 postcss: 8.4.38 - postcss-loader: 8.1.1(postcss@8.4.38)(typescript@5.5.4)(webpack@5.92.1(esbuild@0.21.5)) + postcss-loader: 8.1.1(postcss@8.4.38)(typescript@5.5.4)(webpack@5.92.1) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.77.6 - sass-loader: 14.2.1(sass@1.77.6)(webpack@5.92.1(esbuild@0.21.5)) + sass-loader: 14.2.1(sass@1.77.6)(webpack@5.92.1) semver: 7.6.2 - source-map-loader: 5.0.0(webpack@5.92.1(esbuild@0.21.5)) + source-map-loader: 5.0.0(webpack@5.92.1) source-map-support: 0.5.21 terser: 5.29.2 tree-kill: 1.2.2 @@ -14473,7 +14635,7 @@ snapshots: webpack-dev-middleware: 7.2.1(webpack@5.92.1) webpack-dev-server: 5.0.4(webpack@5.92.1) webpack-merge: 5.10.0 - webpack-subresource-integrity: 5.1.0(webpack@5.92.1(esbuild@0.21.5)) + webpack-subresource-integrity: 5.1.0(webpack@5.92.1) optionalDependencies: esbuild: 0.21.5 karma: 6.4.0 @@ -14497,7 +14659,7 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-webpack@0.1801.3(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.92.1))(webpack@5.92.1(esbuild@0.21.5))': + '@angular-devkit/build-webpack@0.1801.3(chokidar@3.6.0)(webpack-dev-server@5.0.4(webpack@5.92.1))(webpack@5.92.1)': dependencies: '@angular-devkit/architect': 0.1801.3(chokidar@3.6.0) rxjs: 7.8.1 @@ -14708,10 +14870,10 @@ snapshots: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.21.8) '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.3 '@babel/template': 7.24.0 '@babel/traverse': 7.24.1 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 convert-source-map: 1.9.0 debug: 4.3.5 gensync: 1.0.0-beta.2 @@ -14748,10 +14910,10 @@ snapshots: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/parser': 7.25.3 '@babel/template': 7.24.0 '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 convert-source-map: 2.0.0 debug: 4.3.5 gensync: 1.0.0-beta.2 @@ -14802,28 +14964,28 @@ snapshots: '@babel/generator@7.21.9': dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@babel/types': 7.25.2 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/generator@7.23.6': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/generator@7.24.4': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/generator@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -14837,20 +14999,20 @@ snapshots: '@babel/helper-annotate-as-pure@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15003,29 +15165,29 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-function-name@7.23.0': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-hoist-variables@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-member-expression-to-functions@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-member-expression-to-functions@7.24.8': dependencies: @@ -15036,16 +15198,16 @@ snapshots: '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-module-imports@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15142,11 +15304,11 @@ snapshots: '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-plugin-utils@7.22.5': {} @@ -15160,7 +15322,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.5 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15170,7 +15332,7 @@ snapshots: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.5 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15190,7 +15352,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.22.5 '@babel/template': 7.24.7 '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15205,33 +15367,33 @@ snapshots: '@babel/helper-simple-access@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.22.6': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-string-parser@7.23.4': {} @@ -15239,10 +15401,14 @@ snapshots: '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.22.20': {} '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.22.5': {} '@babel/helper-validator-option@7.23.5': {} @@ -15256,7 +15422,7 @@ snapshots: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.22.15 '@babel/traverse': 7.23.6 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15272,7 +15438,7 @@ snapshots: dependencies: '@babel/template': 7.24.7 '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color @@ -15280,14 +15446,14 @@ snapshots: dependencies: '@babel/template': 7.24.7 '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helpers@7.24.7': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helpers@7.25.0': dependencies: @@ -15296,13 +15462,13 @@ snapshots: '@babel/highlight@7.22.5': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 '@babel/highlight@7.23.4': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 @@ -15322,16 +15488,12 @@ snapshots: '@babel/parser@7.21.9': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/parser@7.23.6': dependencies: '@babel/types': 7.23.6 - '@babel/parser@7.24.4': - dependencies: - '@babel/types': 7.24.7 - '@babel/parser@7.24.7': dependencies: '@babel/types': 7.24.7 @@ -15340,6 +15502,10 @@ snapshots: dependencies: '@babel/types': 7.25.2 + '@babel/parser@7.29.9': + dependencies: + '@babel/types': 7.29.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 @@ -16539,7 +16705,7 @@ snapshots: '@babel/helper-module-imports': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.6) - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.21.8)': dependencies: @@ -16806,7 +16972,7 @@ snapshots: '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.21.8) '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.21.8) '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) @@ -16892,7 +17058,7 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.6) '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.6) '@babel/preset-modules': 0.1.5(@babel/core@7.23.6) - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 babel-plugin-polyfill-corejs2: 0.4.3(@babel/core@7.23.6) babel-plugin-polyfill-corejs3: 0.8.1(@babel/core@7.23.6) babel-plugin-polyfill-regenerator: 0.5.0(@babel/core@7.23.6) @@ -17001,7 +17167,7 @@ snapshots: '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.21.8) - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 esutils: 2.0.3 '@babel/preset-modules@0.1.5(@babel/core@7.23.6)': @@ -17010,14 +17176,14 @@ snapshots: '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.23.6) '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.6) - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': dependencies: '@babel/core': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 esutils: 2.0.3 '@babel/preset-typescript@7.22.5(@babel/core@7.24.4)': @@ -17057,20 +17223,20 @@ snapshots: '@babel/template@7.22.15': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@babel/template@7.25.0': dependencies: @@ -17086,9 +17252,9 @@ snapshots: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -17101,8 +17267,8 @@ snapshots: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: @@ -17116,8 +17282,8 @@ snapshots: '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: @@ -17131,8 +17297,8 @@ snapshots: '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: @@ -17152,7 +17318,7 @@ snapshots: '@babel/types@7.21.5': dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 @@ -17162,12 +17328,6 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - '@babel/types@7.24.0': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - '@babel/types@7.24.7': dependencies: '@babel/helper-string-parser': 7.24.7 @@ -17180,6 +17340,11 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} '@biomejs/biome@1.9.4': @@ -17234,7 +17399,7 @@ snapshots: '@changesets/apply-release-plan@6.1.3': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/config': 2.3.0 '@changesets/get-version-range-type': 0.3.2 '@changesets/git': 2.0.0 @@ -17250,7 +17415,7 @@ snapshots: '@changesets/assemble-release-plan@5.2.3': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.5 '@changesets/types': 5.2.1 @@ -17321,7 +17486,7 @@ snapshots: '@changesets/get-release-plan@3.0.16': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/assemble-release-plan': 5.2.3 '@changesets/config': 2.3.0 '@changesets/pre': 1.0.14 @@ -17333,7 +17498,7 @@ snapshots: '@changesets/git@2.0.0': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -17352,7 +17517,7 @@ snapshots: '@changesets/pre@1.0.14': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -17360,7 +17525,7 @@ snapshots: '@changesets/read@0.5.9': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/git': 2.0.0 '@changesets/logger': 0.0.5 '@changesets/parse': 0.3.16 @@ -17375,7 +17540,7 @@ snapshots: '@changesets/write@0.2.3': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 @@ -18024,7 +18189,7 @@ snapshots: dependencies: '@babel/core': 7.24.4 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -18057,12 +18222,6 @@ snapshots: '@types/yargs': 17.0.24 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -18071,12 +18230,8 @@ snapshots: '@jridgewell/resolve-uri@3.1.0': {} - '@jridgewell/resolve-uri@3.1.1': {} - '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.1.2': {} - '@jridgewell/set-array@1.2.1': {} '@jridgewell/source-map@0.3.6': @@ -18088,16 +18243,13 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.6.0': {} + '@jridgewell/trace-mapping@0.3.18': dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping@0.3.20': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -18105,7 +18257,7 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jsonjoy.com/base64@1.1.2(tslib@2.6.3)': @@ -18155,14 +18307,14 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -18201,7 +18353,7 @@ snapshots: '@mdx-js/mdx@3.0.0': dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 '@types/estree-jsx': 1.0.0 '@types/hast': 3.0.3 '@types/mdx': 2.0.5 @@ -18462,7 +18614,7 @@ snapshots: '@next/swc-win32-x64-msvc@14.1.1': optional: true - '@ngtools/webpack@18.1.3(@angular/compiler-cli@18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4))(typescript@5.5.4)(webpack@5.92.1(esbuild@0.21.5))': + '@ngtools/webpack@18.1.3(@angular/compiler-cli@18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4))(typescript@5.5.4)(webpack@5.92.1)': dependencies: '@angular/compiler-cli': 18.1.3(@angular/compiler@18.1.3(@angular/core@18.1.3(rxjs@7.8.1)(zone.js@0.12.0)))(typescript@5.5.4) typescript: 5.5.4 @@ -18691,6 +18843,8 @@ snapshots: '@octokit/request-error': 6.1.4 '@octokit/webhooks-methods': 5.1.0 + '@one-ini/wasm@0.2.1': {} + '@open-draft/until@1.0.3': {} '@openpanel/nextjs@1.0.3(next@14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': @@ -18986,21 +19140,21 @@ snapshots: '@radix-ui/number@1.0.1': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive@1.0.0': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive@1.1.0': {} '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -19023,7 +19177,7 @@ snapshots: '@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -19048,12 +19202,12 @@ snapshots: '@radix-ui/react-compose-refs@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 '@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 @@ -19066,12 +19220,12 @@ snapshots: '@radix-ui/react-context@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 '@radix-ui/react-context@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 @@ -19129,7 +19283,7 @@ snapshots: '@radix-ui/react-direction@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 @@ -19142,7 +19296,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -19153,7 +19307,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -19167,7 +19321,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -19197,19 +19351,19 @@ snapshots: '@radix-ui/react-focus-guards@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 '@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 '@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) @@ -19218,7 +19372,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) @@ -19230,7 +19384,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) @@ -19246,13 +19400,13 @@ snapshots: '@radix-ui/react-id@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 '@radix-ui/react-id@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) react: 18.2.0 optionalDependencies: @@ -19351,7 +19505,7 @@ snapshots: '@radix-ui/react-popper@1.1.2(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) @@ -19370,7 +19524,7 @@ snapshots: '@radix-ui/react-popper@1.1.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) @@ -19389,14 +19543,14 @@ snapshots: '@radix-ui/react-portal@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@radix-ui/react-portal@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -19406,7 +19560,7 @@ snapshots: '@radix-ui/react-portal@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -19416,7 +19570,7 @@ snapshots: '@radix-ui/react-presence@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0) react: 18.2.0 @@ -19424,7 +19578,7 @@ snapshots: '@radix-ui/react-presence@1.0.1(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) react: 18.2.0 @@ -19445,14 +19599,14 @@ snapshots: '@radix-ui/react-primitive@1.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-slot': 1.0.0(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-slot': 1.0.2(@types/react@18.0.14)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -19490,7 +19644,7 @@ snapshots: '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.14)(react@18.2.0) @@ -19555,7 +19709,7 @@ snapshots: '@radix-ui/react-slot@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) react: 18.2.0 @@ -19629,12 +19783,12 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 @@ -19647,13 +19801,13 @@ snapshots: '@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) react: 18.2.0 optionalDependencies: @@ -19668,13 +19822,13 @@ snapshots: '@radix-ui/react-use-escape-keydown@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0) react: 18.2.0 '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.14)(react@18.2.0) react: 18.2.0 optionalDependencies: @@ -19682,12 +19836,12 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 @@ -19700,14 +19854,14 @@ snapshots: '@radix-ui/react-use-previous@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 optionalDependencies: '@types/react': 18.0.14 '@radix-ui/react-use-rect@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/rect': 1.0.1 react: 18.2.0 optionalDependencies: @@ -19715,7 +19869,7 @@ snapshots: '@radix-ui/react-use-size@1.0.1(@types/react@18.0.14)(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.14)(react@18.2.0) react: 18.2.0 optionalDependencies: @@ -19723,7 +19877,7 @@ snapshots: '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.5)(@types/react@18.0.14)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -19733,7 +19887,7 @@ snapshots: '@radix-ui/rect@1.0.1': dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 '@react-email/button@0.0.5': dependencies: @@ -20521,7 +20675,7 @@ snapshots: magic-string: 0.27.0 remark-external-links: 8.0.0 remark-slug: 6.1.0 - rollup: 3.27.1 + rollup: 3.29.4 vite: 5.4.0(@types/node@22.1.0)(less@4.2.0)(sass@1.77.8)(terser@5.31.1) optionalDependencies: typescript: 5.5.4 @@ -20702,7 +20856,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.13.0 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - encoding @@ -20773,7 +20927,7 @@ snapshots: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - semver: 7.5.1 + semver: 7.6.2 store2: 2.14.2 telejson: 7.1.0 ts-dedent: 2.2.0 @@ -21013,7 +21167,7 @@ snapshots: '@testing-library/jest-dom@5.16.5': dependencies: '@adobe/css-tools': 4.2.0 - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.24.7 '@types/testing-library__jest-dom': 5.14.6 aria-query: 5.1.3 chalk: 3.0.0 @@ -21291,8 +21445,8 @@ snapshots: '@types/babel__core@7.20.1': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 @@ -21307,7 +21461,7 @@ snapshots: '@types/babel__generator@7.6.4': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@types/babel__generator@7.6.8': dependencies: @@ -21315,8 +21469,8 @@ snapshots: '@types/babel__template@7.4.1': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@types/babel__template@7.4.4': dependencies: @@ -21325,7 +21479,7 @@ snapshots: '@types/babel__traverse@7.20.1': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@types/babel__traverse@7.20.5': dependencies: @@ -21426,14 +21580,12 @@ snapshots: '@types/estree-jsx@1.0.0': dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 '@types/estree-jsx@1.0.3': dependencies: '@types/estree': 1.0.5 - '@types/estree@1.0.1': {} - '@types/estree@1.0.5': {} '@types/express-serve-static-core@4.17.35': @@ -21784,6 +21936,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue@5.0.4(vite@5.4.0(@types/node@22.1.0)(less@4.2.0)(sass@1.77.8)(terser@5.31.1))(vue@3.5.43(typescript@5.5.4))': + dependencies: + vite: 5.4.0(@types/node@22.1.0)(less@4.2.0)(sass@1.77.8)(terser@5.31.1) + vue: 3.5.43(typescript@5.5.4) + '@vitest/coverage-c8@0.33.0(vitest@2.0.5(@types/node@22.1.0)(jsdom@20.0.3)(less@4.2.0)(sass@1.77.8)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 @@ -21841,17 +21998,47 @@ snapshots: '@vue/compiler-core@3.4.24': dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.3 '@vue/shared': 3.4.24 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 + '@vue/compiler-core@3.5.43': + dependencies: + '@babel/parser': 7.29.9 + '@vue/shared': 3.5.43 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.4.24': dependencies: '@vue/compiler-core': 3.4.24 '@vue/shared': 3.4.24 + '@vue/compiler-dom@3.5.43': + dependencies: + '@vue/compiler-core': 3.5.43 + '@vue/shared': 3.5.43 + + '@vue/compiler-sfc@3.5.43': + dependencies: + '@babel/parser': 7.29.9 + '@vue/compiler-core': 3.5.43 + '@vue/compiler-dom': 3.5.43 + '@vue/compiler-ssr': 3.5.43 + '@vue/shared': 3.5.43 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.28 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.43': + dependencies: + '@vue/compiler-dom': 3.5.43 + '@vue/shared': 3.5.43 + '@vue/language-core@1.8.27(typescript@5.5.4)': dependencies: '@volar/language-core': 1.11.1 @@ -21866,8 +22053,41 @@ snapshots: optionalDependencies: typescript: 5.5.4 + '@vue/reactivity@3.5.43': + dependencies: + '@vue/shared': 3.5.43 + + '@vue/runtime-core@3.5.43': + dependencies: + '@vue/reactivity': 3.5.43 + '@vue/shared': 3.5.43 + + '@vue/runtime-dom@3.5.43': + dependencies: + '@vue/reactivity': 3.5.43 + '@vue/runtime-core': 3.5.43 + '@vue/shared': 3.5.43 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.43': + dependencies: + '@vue/compiler-ssr': 3.5.43 + '@vue/runtime-dom': 3.5.43 + '@vue/shared': 3.5.43 + '@vue/shared@3.4.24': {} + '@vue/shared@3.5.43': {} + + '@vue/test-utils@2.5.1(@vue/compiler-dom@3.5.43)(@vue/server-renderer@3.5.43)(vue@3.5.43(typescript@5.5.4))': + dependencies: + '@vue/compiler-dom': 3.5.43 + js-beautify: 2.0.3 + vue: 3.5.43(typescript@5.5.4) + vue-component-type-helpers: 3.3.11 + optionalDependencies: + '@vue/server-renderer': 3.5.43 + '@web3-storage/multipart-parser@1.0.0': {} '@webassemblyjs/ast@1.12.1': @@ -21968,6 +22188,8 @@ snapshots: abbrev@2.0.0: {} + abbrev@5.0.0: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -21979,7 +22201,7 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.11.3 + acorn: 8.12.0 acorn-walk: 8.3.2 acorn-import-assertions@1.9.0(acorn@8.12.0): @@ -22234,7 +22456,7 @@ snapshots: dependencies: '@babel/core': 7.24.4 - babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.92.1(esbuild@0.21.5)): + babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.92.1): dependencies: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 @@ -22327,6 +22549,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} base64id@2.0.0: {} @@ -22407,6 +22631,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.12: + dependencies: + balanced-match: 4.0.4 + braces@3.0.2: dependencies: fill-range: 7.0.1 @@ -22520,7 +22748,7 @@ snapshots: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.2 - glob: 10.2.7 + glob: 10.4.5 lru-cache: 10.4.3 minipass: 7.1.2 minipass-collect: 2.0.1 @@ -22798,6 +23026,8 @@ snapshots: commander@12.1.0: {} + commander@14.0.3: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -22907,7 +23137,7 @@ snapshots: dependencies: is-what: 4.1.15 - copy-webpack-plugin@12.0.2(webpack@5.92.1(esbuild@0.21.5)): + copy-webpack-plugin@12.0.2(webpack@5.92.1): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -22960,7 +23190,7 @@ snapshots: dom-serializer: 2.0.0 domhandler: 5.0.3 htmlparser2: 8.0.2 - postcss: 8.4.38 + postcss: 8.4.41 postcss-media-query-parser: 0.2.3 cron-parser@4.9.0: @@ -22981,14 +23211,14 @@ snapshots: crypto-random-string@2.0.0: {} - css-loader@7.1.2(webpack@5.92.1(esbuild@0.21.5)): + css-loader@7.1.2(webpack@5.92.1): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.41) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.41) + postcss-modules-scope: 3.2.0(postcss@8.4.41) + postcss-modules-values: 4.0.0(postcss@8.4.41) postcss-value-parser: 4.2.0 semver: 7.6.2 optionalDependencies: @@ -23018,6 +23248,8 @@ snapshots: csstype@3.1.2: {} + csstype@3.2.3: {} + csv-generate@3.4.3: {} csv-parse@4.16.3: {} @@ -23430,7 +23662,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 csstype: 3.1.2 dom-serialize@2.2.1: @@ -23508,6 +23740,13 @@ snapshots: semver: 5.7.1 sigmund: 1.0.1 + editorconfig@3.0.2: + dependencies: + '@one-ini/wasm': 0.2.1 + commander: 14.0.3 + minimatch: 10.2.6 + semver: 7.8.5 + ee-first@1.1.1: {} ejs@3.1.9: @@ -23575,6 +23814,8 @@ snapshots: entities@4.5.0: {} + entities@7.0.1: {} + env-paths@2.2.1: {} envinfo@7.8.1: {} @@ -23904,7 +24145,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 estree-util-build-jsx@2.2.2: dependencies: @@ -23955,7 +24196,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 esutils@2.0.3: {} @@ -24443,14 +24684,6 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.2.7: - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.2.1 - minimatch: 9.0.4 - minipass: 5.0.0 - path-scurry: 1.9.2 - glob@10.4.5: dependencies: foreground-child: 3.1.1 @@ -24460,6 +24693,12 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 + glob@13.0.6: + dependencies: + minimatch: 10.2.6 + minipass: 7.1.3 + path-scurry: 2.0.2 + glob@7.1.6: dependencies: fs.realpath: 1.0.0 @@ -24691,7 +24930,7 @@ snapshots: hast-util-to-estree@3.1.0: dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 '@types/estree-jsx': 1.0.0 '@types/hast': 3.0.3 comma-separated-tokens: 2.0.3 @@ -24712,7 +24951,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.0: dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 '@types/hast': 3.0.3 '@types/unist': 3.0.2 comma-separated-tokens: 2.0.3 @@ -24949,9 +25188,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.38): + icss-utils@5.1.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 ieee754@1.2.1: {} @@ -25236,7 +25475,7 @@ snapshots: is-reference@3.0.1: dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 is-regex@1.1.4: dependencies: @@ -25357,7 +25596,7 @@ snapshots: istanbul-lib-instrument@6.0.2: dependencies: '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.2 @@ -25394,12 +25633,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@2.2.1: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -25507,8 +25740,18 @@ snapshots: glob: 8.1.0 nopt: 6.0.0 + js-beautify@2.0.3: + dependencies: + config-chain: 1.1.13 + editorconfig: 3.0.2 + glob: 13.0.6 + js-cookie: 3.0.8 + nopt: 10.0.1 + js-cookie@3.0.5: {} + js-cookie@3.0.8: {} + js-levenshtein@1.1.6: {} js-tokens@4.0.0: {} @@ -25527,7 +25770,7 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.21.5(@babel/core@7.21.8)): dependencies: '@babel/core': 7.24.4 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.3 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) @@ -25552,7 +25795,7 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.22.5(@babel/core@7.23.6)): dependencies: '@babel/core': 7.24.4 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.3 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.4) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.24.4) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.24.4) @@ -25577,7 +25820,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.11.2 + acorn: 8.12.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -25600,7 +25843,7 @@ snapshots: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.13.0 + ws: 8.18.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -25781,7 +26024,7 @@ snapshots: leac@0.6.0: {} - less-loader@12.2.0(less@4.2.0)(webpack@5.92.1(esbuild@0.21.5)): + less-loader@12.2.0(less@4.2.0)(webpack@5.92.1): dependencies: less: 4.2.0 optionalDependencies: @@ -25813,7 +26056,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.92.1(esbuild@0.21.5)): + license-webpack-plugin@4.0.2(webpack@5.92.1): dependencies: webpack-sources: 3.2.3 optionalDependencies: @@ -25961,6 +26204,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.5.3: {} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 @@ -25974,8 +26219,6 @@ snapshots: dependencies: yallist: 4.0.0 - lru-cache@9.1.2: {} - lucide-react@0.320.0(react@18.2.0): dependencies: react: 18.2.0 @@ -26000,6 +26243,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + magic-string@0.30.8: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -26073,7 +26320,7 @@ snapshots: match-sorter@6.3.1: dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 remove-accents: 0.4.2 matchit@1.1.0: @@ -26602,8 +26849,8 @@ snapshots: micromark-extension-mdxjs@1.0.1: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -26613,8 +26860,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -26919,7 +27166,7 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.0(webpack@5.92.1(esbuild@0.21.5)): + mini-css-extract-plugin@2.9.0(webpack@5.92.1): dependencies: schema-utils: 4.1.0 tapable: 2.2.1 @@ -26948,6 +27195,10 @@ snapshots: minimalistic-assert@1.0.1: {} + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.12 + minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 @@ -27010,6 +27261,8 @@ snapshots: minipass@7.1.2: {} + minipass@7.1.3: {} + minizlib@2.1.2: dependencies: minipass: 3.3.6 @@ -27085,7 +27338,7 @@ snapshots: '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 chalk: 4.1.1 - chokidar: 3.5.3 + chokidar: 3.6.0 cookie: 0.4.2 graphql: 16.6.0 headers-polyfill: 3.1.2 @@ -27150,6 +27403,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.19: {} + nanoid@3.3.6: {} nanoid@3.3.7: {} @@ -27227,7 +27482,7 @@ snapshots: minimist: 1.2.8 next: 14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8) - next-themes@0.2.1(next@14.1.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next-themes@0.2.1(next@14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: next: 14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8) react: 18.2.0 @@ -27306,7 +27561,7 @@ snapshots: match-sorter: 6.3.1 next: 14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8) next-seo: 6.4.0(next@14.1.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - next-themes: 0.2.1(next@14.1.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + next-themes: 0.2.1(next@14.1.1(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) nextra: 2.13.2(next@14.1.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.77.8))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -27475,6 +27730,10 @@ snapshots: dependencies: abbrev: 1.1.1 + nopt@10.0.1: + dependencies: + abbrev: 5.0.0 + nopt@6.0.0: dependencies: abbrev: 1.1.1 @@ -27917,10 +28176,10 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-scurry@1.9.2: + path-scurry@2.0.2: dependencies: - lru-cache: 9.1.2 - minipass: 5.0.0 + lru-cache: 11.5.3 + minipass: 7.1.3 path-to-regexp@0.1.7: {} @@ -27948,7 +28207,7 @@ snapshots: periscopic@3.1.0: dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.1 @@ -27968,6 +28227,8 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} picomatch@4.0.2: {} @@ -28006,7 +28267,7 @@ snapshots: polished@4.2.2: dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 polka@0.5.2: dependencies: @@ -28033,20 +28294,20 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.24 - postcss-load-config@3.1.4(postcss@8.4.41)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4)): + postcss-load-config@3.1.4(postcss@8.5.28)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.4.41 + postcss: 8.5.28 ts-node: 10.9.1(@types/node@20.3.1)(typescript@5.5.4) - postcss-load-config@3.1.4(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)): + postcss-load-config@3.1.4(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.4.41 + postcss: 8.5.28 ts-node: 10.9.1(@types/node@22.1.0)(typescript@5.5.4) postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1(@types/node@18.16.17)(typescript@5.5.4)): @@ -28066,16 +28327,16 @@ snapshots: ts-node: 10.9.1(@types/node@20.3.1)(typescript@5.5.4) optional: true - postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)): + postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)): dependencies: lilconfig: 2.1.0 yaml: 2.3.1 optionalDependencies: - postcss: 8.4.41 + postcss: 8.5.28 ts-node: 10.9.1(@types/node@22.1.0)(typescript@5.5.4) optional: true - postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.5.4)(webpack@5.92.1(esbuild@0.21.5)): + postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.5.4)(webpack@5.92.1): dependencies: cosmiconfig: 9.0.0(typescript@5.5.4) jiti: 1.21.6 @@ -28088,26 +28349,26 @@ snapshots: postcss-media-query-parser@0.2.3: {} - postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + postcss-modules-extract-imports@3.1.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 - postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + postcss-modules-local-by-default@4.0.5(postcss@8.4.41): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.0(postcss@8.4.38): + postcss-modules-scope@3.2.0(postcss@8.4.41): dependencies: - postcss: 8.4.38 + postcss: 8.4.41 postcss-selector-parser: 6.0.13 - postcss-modules-values@4.0.0(postcss@8.4.38): + postcss-modules-values@4.0.0(postcss@8.4.41): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.41) + postcss: 8.4.41 postcss-nested@6.0.1(postcss@8.4.24): dependencies: @@ -28156,6 +28417,12 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.5.28: + dependencies: + nanoid: 3.3.19 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres-array@2.0.0: {} postgres-bytea@1.0.0: {} @@ -28483,7 +28750,7 @@ snapshots: react-error-boundary@3.1.4(react@18.2.0): dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 react: 18.2.0 react-hook-form@7.44.3(react@18.2.0): @@ -28579,7 +28846,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -28702,7 +28969,7 @@ snapshots: regenerator-transform@0.15.1: dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.24.7 regenerator-transform@0.15.2: dependencies: @@ -28864,7 +29131,7 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.38 + postcss: 8.4.41 source-map: 0.6.1 resolve.exports@2.0.2: {} @@ -28943,14 +29210,6 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@3.25.0: - optionalDependencies: - fsevents: 2.3.3 - - rollup@3.27.1: - optionalDependencies: - fsevents: 2.3.3 - rollup@3.29.4: optionalDependencies: fsevents: 2.3.3 @@ -29018,7 +29277,7 @@ snapshots: mkdirp: 0.5.6 rimraf: 2.7.1 - sass-loader@14.2.1(sass@1.77.6)(webpack@5.92.1(esbuild@0.21.5)): + sass-loader@14.2.1(sass@1.77.6)(webpack@5.92.1): dependencies: neo-async: 2.6.2 optionalDependencies: @@ -29033,13 +29292,13 @@ snapshots: sass@1.77.6: dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 immutable: 4.3.0 source-map-js: 1.2.0 sass@1.77.8: dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 immutable: 4.3.0 source-map-js: 1.2.0 @@ -29118,6 +29377,8 @@ snapshots: semver@7.6.2: {} + semver@7.8.5: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -29393,7 +29654,9 @@ snapshots: source-map-js@1.2.0: {} - source-map-loader@5.0.0(webpack@5.92.1(esbuild@0.21.5)): + source-map-js@1.2.1: {} + + source-map-loader@5.0.0(webpack@5.92.1): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.0 @@ -29637,7 +29900,7 @@ snapshots: sucrase@3.32.0: dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 7.1.6 lines-and-columns: 1.2.4 @@ -29689,7 +29952,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@2.10.3(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1): + svelte-check@2.10.3(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1): dependencies: '@jridgewell/trace-mapping': 0.3.18 chokidar: 3.5.3 @@ -29698,7 +29961,7 @@ snapshots: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 4.10.7(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4) + svelte-preprocess: 4.10.7(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - '@babel/core' @@ -29712,7 +29975,7 @@ snapshots: - stylus - sugarss - svelte-check@2.10.3(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1): + svelte-check@2.10.3(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1): dependencies: '@jridgewell/trace-mapping': 0.3.18 chokidar: 3.5.3 @@ -29721,7 +29984,7 @@ snapshots: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 4.10.7(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4) + svelte-preprocess: 4.10.7(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - '@babel/core' @@ -29739,7 +30002,7 @@ snapshots: dependencies: svelte: 3.59.1 - svelte-preprocess@4.10.7(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4): + svelte-preprocess@4.10.7(@babel/core@7.23.6)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4): dependencies: '@types/pug': 2.0.6 '@types/sass': 1.45.0 @@ -29751,12 +30014,12 @@ snapshots: optionalDependencies: '@babel/core': 7.23.6 less: 4.2.0 - postcss: 8.4.41 - postcss-load-config: 4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)) + postcss: 8.5.28 + postcss-load-config: 4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)) sass: 1.77.8 typescript: 5.5.4 - svelte-preprocess@4.10.7(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.4.41)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4): + svelte-preprocess@4.10.7(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)))(postcss@8.5.28)(sass@1.77.8)(svelte@3.59.1)(typescript@5.5.4): dependencies: '@types/pug': 2.0.6 '@types/sass': 1.45.0 @@ -29768,8 +30031,8 @@ snapshots: optionalDependencies: '@babel/core': 7.24.9 less: 4.2.0 - postcss: 8.4.41 - postcss-load-config: 4.0.1(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)) + postcss: 8.5.28 + postcss-load-config: 4.0.1(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)) sass: 1.77.8 typescript: 5.5.4 @@ -30151,47 +30414,47 @@ snapshots: tsscmp@1.0.6: {} - tsup@6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4))(typescript@5.5.4): + tsup@6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4))(typescript@5.5.4): dependencies: bundle-require: 4.0.1(esbuild@0.17.19) cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 + chokidar: 3.6.0 + debug: 4.3.5 esbuild: 0.17.19 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(postcss@8.4.41)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4)) + postcss-load-config: 3.1.4(postcss@8.5.28)(ts-node@10.9.1(@types/node@20.3.1)(typescript@5.5.4)) resolve-from: 5.0.0 - rollup: 3.25.0 + rollup: 3.29.4 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.4.41 + postcss: 8.5.28 typescript: 5.5.4 transitivePeerDependencies: - supports-color - ts-node - tsup@6.7.0(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4): + tsup@6.7.0(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4))(typescript@5.5.4): dependencies: bundle-require: 4.0.1(esbuild@0.17.19) cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 + chokidar: 3.6.0 + debug: 4.3.5 esbuild: 0.17.19 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(postcss@8.4.41)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)) + postcss-load-config: 3.1.4(postcss@8.5.28)(ts-node@10.9.1(@types/node@22.1.0)(typescript@5.5.4)) resolve-from: 5.0.0 - rollup: 3.25.0 + rollup: 3.29.4 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 optionalDependencies: - postcss: 8.4.41 + postcss: 8.5.28 typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -30746,7 +31009,7 @@ snapshots: vite@5.3.2(@types/node@20.3.1)(less@4.2.0)(sass@1.77.6)(terser@5.29.2): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 + postcss: 8.4.41 rollup: 4.18.0 optionalDependencies: '@types/node': 20.3.1 @@ -30905,6 +31168,8 @@ snapshots: vscode-textmate@8.0.0: {} + vue-component-type-helpers@3.3.11: {} + vue-template-compiler@2.7.16: dependencies: de-indent: 1.0.2 @@ -30914,7 +31179,17 @@ snapshots: dependencies: '@volar/typescript': 1.11.1 '@vue/language-core': 1.8.27(typescript@5.5.4) - semver: 7.6.0 + semver: 7.6.2 + typescript: 5.5.4 + + vue@3.5.43(typescript@5.5.4): + dependencies: + '@vue/compiler-dom': 3.5.43 + '@vue/compiler-sfc': 3.5.43 + '@vue/runtime-dom': 3.5.43 + '@vue/server-renderer': 3.5.43 + '@vue/shared': 3.5.43 + optionalDependencies: typescript: 5.5.4 w3c-keyname@2.2.8: {} @@ -31041,7 +31316,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack-subresource-integrity@5.1.0(webpack@5.92.1(esbuild@0.21.5)): + webpack-subresource-integrity@5.1.0(webpack@5.92.1): dependencies: typed-assert: 1.0.9 webpack: 5.92.1(esbuild@0.21.5)