From 998946157aa31fa89d62a2a26980f01d6d7e65db Mon Sep 17 00:00:00 2001 From: Lorenz Hilpert Date: Thu, 26 Jun 2025 22:09:21 +0200 Subject: [PATCH] chore: update dependencies and add vitest configuration - Added @analogjs/vite-plugin-angular and @analogjs/vitest-angular to devDependencies. - Updated @nx/vite to version 20.1.4. - Added @vitest/coverage-v8 and @vitest/ui to devDependencies. - Added jsdom to devDependencies. - Added vite and vitest to devDependencies. - Updated tsconfig.base.json to include new paths for shared libraries. - Created vitest.workspace.ts for vitest configuration. Refs: #5135 --- .claude/settings.local.json | 9 + .gitignore | 2 + .prettierrc | 2 +- apps/isa-app/src/ui.scss | 1 + libs/catalogue/data-access/src/index.ts | 1 + .../src/lib/models/availability.ts | 6 + .../data-access/src/lib/models/index.ts | 3 + .../data-access/src/lib/models/item.ts | 2 + .../data-access/src/lib/models/price-value.ts | 5 + .../data-access/src/lib/models/price.ts | 6 + .../lib/schemas/catalouge-search.schemas.ts | 8 +- .../lib/services/catalouge-search.service.ts | 15 +- libs/common/data-access/src/index.ts | 1 + .../data-access/src/lib/errors/index.ts | 1 + .../src/lib/errors/response-args.error.ts | 27 + .../create-esc-abort-controller.helper.ts | 13 + .../data-access/src/lib/helpers/index.ts | 1 + .../src/lib/models/response-args.ts | 2 +- .../print/src/lib/services/print.service.ts | 2 +- libs/core/storage/src/lib/hash.utils.ts | 2 +- libs/core/storage/src/lib/storage.ts | 18 +- .../src/lib/guards/uncompleted-tasks.guard.ts | 7 +- .../data-access/src/lib/models/price-value.ts | 1 - .../lib/schemas/fetch-return-reason.schema.ts | 9 + .../data-access/src/lib/schemas/index.ts | 5 +- .../data-access/src/lib/services/index.ts | 3 +- .../lib/services/remission-reason.service.ts | 32 + .../lib/services/remission-stock.service.ts | 9 +- .../remission-start-card.component.ts | 6 +- .../search-item-to-remit-dialog/README.md | 7 + .../eslint.config.js | 34 + .../search-item-to-remit-dialog/project.json | 20 + .../search-item-to-remit-dialog/src/index.ts | 1 + .../src/lib/constants.ts | 11 + .../quantity-and-reason-item.component.html | 21 + .../quantity-and-reason-item.component.scss | 3 + .../lib/quantity-and-reason-item.component.ts | 64 + ...search-item-to-remit-dialog.component.html | 15 + ...search-item-to-remit-dialog.component.scss | 3 + .../search-item-to-remit-dialog.component.ts | 51 + .../search-item-to-remit-list.component.html | 31 + .../search-item-to-remit-list.component.scss | 3 + .../search-item-to-remit-list.component.ts | 124 + .../lib/search-item-to-remit.component.html | 17 + .../lib/search-item-to-remit.component.scss | 3 + .../src/lib/search-item-to-remit.component.ts | 23 + ...ct-remi-quantity-and-reason.component.html | 22 + ...ct-remi-quantity-and-reason.component.scss | 3 + ...lect-remi-quantity-and-reason.component.ts | 32 + .../src/test-setup.ts | 12 + .../search-item-to-remit-dialog/tsconfig.json | 28 + .../tsconfig.lib.json | 28 + .../tsconfig.spec.json | 29 + .../vite.config.mts | 29 + .../README.md | 7 + .../eslint.config.js | 34 + .../project.json | 20 + .../src/index.ts | 1 + ...n-quantity-and-reason-dialog.component.css | 0 ...-quantity-and-reason-dialog.component.html | 1 + ...antity-and-reason-dialog.component.spec.ts | 23 + ...on-quantity-and-reason-dialog.component.ts | 13 + .../src/test-setup.ts | 12 + .../tsconfig.json | 28 + .../tsconfig.lib.json | 28 + .../tsconfig.spec.json | 29 + .../vite.config.mts | 29 + .../buttons/src/lib/icon-button.component.ts | 1 - libs/ui/dialog/src/dialog.scss | 7 +- .../src/lib/dialog-content.directive.ts | 3 + libs/ui/dialog/src/lib/dialog.component.html | 2 +- libs/ui/dialog/src/lib/dialog.component.ts | 9 +- libs/ui/dialog/src/lib/injects.ts | 54 +- .../src/lib/search-bar.component.ts | 1 - ...rch-bar.component.scss => search-bar.scss} | 12 +- nx.json | 4 + package-lock.json | 3074 ++++++++++++++++- package.json | 10 +- tsconfig.base.json | 10 +- vitest.workspace.ts | 1 + 80 files changed, 4084 insertions(+), 142 deletions(-) create mode 100644 .claude/settings.local.json create mode 100644 libs/catalogue/data-access/src/lib/models/availability.ts create mode 100644 libs/catalogue/data-access/src/lib/models/price-value.ts create mode 100644 libs/catalogue/data-access/src/lib/models/price.ts create mode 100644 libs/common/data-access/src/lib/errors/response-args.error.ts create mode 100644 libs/common/data-access/src/lib/helpers/create-esc-abort-controller.helper.ts create mode 100644 libs/common/data-access/src/lib/helpers/index.ts create mode 100644 libs/remission/data-access/src/lib/schemas/fetch-return-reason.schema.ts create mode 100644 libs/remission/data-access/src/lib/services/remission-reason.service.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/README.md create mode 100644 libs/remission/shared/search-item-to-remit-dialog/eslint.config.js create mode 100644 libs/remission/shared/search-item-to-remit-dialog/project.json create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/index.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/constants.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.html create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.scss create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.html create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.scss create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.html create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.scss create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.html create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.scss create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.html create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.scss create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/src/test-setup.ts create mode 100644 libs/remission/shared/search-item-to-remit-dialog/tsconfig.json create mode 100644 libs/remission/shared/search-item-to-remit-dialog/tsconfig.lib.json create mode 100644 libs/remission/shared/search-item-to-remit-dialog/tsconfig.spec.json create mode 100644 libs/remission/shared/search-item-to-remit-dialog/vite.config.mts create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/README.md create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/eslint.config.js create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/project.json create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/src/index.ts create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.css create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.html create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.spec.ts create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.ts create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/src/test-setup.ts create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.json create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.lib.json create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.spec.json create mode 100644 libs/remission/shared/select-remission-quantity-and-reason-dialog/vite.config.mts rename libs/ui/search-bar/src/{lib/search-bar.component.scss => search-bar.scss} (86%) create mode 100644 vitest.workspace.ts diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 000000000..d3c7338c7 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "mcp__context7__resolve-library-id", + "mcp__context7__get-library-docs" + ], + "deny": [] + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index fd8a2a5f5..4d06e99cc 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,5 @@ storybook-static .github\instructions\nx.instructions.md .cursor/rules/nx-rules.mdc .github/instructions/nx.instructions.md + +vite.config.*.timestamp* \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 5922806fc..90848b839 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,7 +5,7 @@ "tabWidth": 2, "bracketSpacing": true, "printWidth": 80, - "endOfLine": "crlf", + "endOfLine": "auto", "arrowParens": "always", "quoteProps": "consistent", "overrides": [ diff --git a/apps/isa-app/src/ui.scss b/apps/isa-app/src/ui.scss index fc3296990..532f8389b 100644 --- a/apps/isa-app/src/ui.scss +++ b/apps/isa-app/src/ui.scss @@ -4,5 +4,6 @@ @use "../../../libs/ui/input-controls/src/input-controls.scss"; @use "../../../libs/ui/menu/src/menu.scss"; @use "../../../libs/ui/progress-bar/src/lib/progress-bar.scss"; +@use "../../../libs/ui/search-bar/src/search-bar.scss"; @use "../../../libs/ui/skeleton-loader/src/skeleton-loader.scss"; @use "../../../libs/ui/tooltip/src/tooltip.scss"; diff --git a/libs/catalogue/data-access/src/index.ts b/libs/catalogue/data-access/src/index.ts index f96119b2a..1de4dea0d 100644 --- a/libs/catalogue/data-access/src/index.ts +++ b/libs/catalogue/data-access/src/index.ts @@ -1,2 +1,3 @@ export * from './lib/services'; +export * from './lib/schemas'; export * from './lib/models'; diff --git a/libs/catalogue/data-access/src/lib/models/availability.ts b/libs/catalogue/data-access/src/lib/models/availability.ts new file mode 100644 index 000000000..b619d37ba --- /dev/null +++ b/libs/catalogue/data-access/src/lib/models/availability.ts @@ -0,0 +1,6 @@ +import { AvailabilityDTO } from '@generated/swagger/cat-search-api'; +import { Price } from './price'; + +export interface Availability extends AvailabilityDTO { + price: Price; +} diff --git a/libs/catalogue/data-access/src/lib/models/index.ts b/libs/catalogue/data-access/src/lib/models/index.ts index 3d3352801..a85957052 100644 --- a/libs/catalogue/data-access/src/lib/models/index.ts +++ b/libs/catalogue/data-access/src/lib/models/index.ts @@ -1,2 +1,5 @@ +export * from './availability'; export * from './item'; +export * from './price-value'; +export * from './price'; export * from './product'; diff --git a/libs/catalogue/data-access/src/lib/models/item.ts b/libs/catalogue/data-access/src/lib/models/item.ts index 5d98743ab..b6b8ea3ef 100644 --- a/libs/catalogue/data-access/src/lib/models/item.ts +++ b/libs/catalogue/data-access/src/lib/models/item.ts @@ -1,7 +1,9 @@ import { ItemDTO } from '@generated/swagger/cat-search-api'; import { Product } from './product'; +import { Availability } from './availability'; export interface Item extends ItemDTO { id: number; product: Product; + catalogAvailability: Availability; } diff --git a/libs/catalogue/data-access/src/lib/models/price-value.ts b/libs/catalogue/data-access/src/lib/models/price-value.ts new file mode 100644 index 000000000..7b259f364 --- /dev/null +++ b/libs/catalogue/data-access/src/lib/models/price-value.ts @@ -0,0 +1,5 @@ +import { PriceValueDTO } from '@generated/swagger/cat-search-api'; + +export interface PriceValue extends PriceValueDTO { + value: number; +} diff --git a/libs/catalogue/data-access/src/lib/models/price.ts b/libs/catalogue/data-access/src/lib/models/price.ts new file mode 100644 index 000000000..09830ccd0 --- /dev/null +++ b/libs/catalogue/data-access/src/lib/models/price.ts @@ -0,0 +1,6 @@ +import { PriceDTO } from '@generated/swagger/cat-search-api'; +import { PriceValue } from './price-value'; + +export interface Price extends PriceDTO { + value: PriceValue; +} diff --git a/libs/catalogue/data-access/src/lib/schemas/catalouge-search.schemas.ts b/libs/catalogue/data-access/src/lib/schemas/catalouge-search.schemas.ts index b0bda1e9b..d20910854 100644 --- a/libs/catalogue/data-access/src/lib/schemas/catalouge-search.schemas.ts +++ b/libs/catalogue/data-access/src/lib/schemas/catalouge-search.schemas.ts @@ -1,9 +1,11 @@ import { z } from 'zod'; -export const SearchByTermParamsSchema = z.object({ - term: z.string().min(1, 'Search term must not be empty'), +export const SearchByTermSchema = z.object({ + searchTerm: z.string().min(1, 'Search term must not be empty'), skip: z.number().int().min(0).default(0), take: z.number().int().min(1).max(100).default(20), }); -export type SearchByTermParams = z.infer; +export type SearchByTerm = z.infer; + +export type SearchByTermInput = z.input; diff --git a/libs/catalogue/data-access/src/lib/services/catalouge-search.service.ts b/libs/catalogue/data-access/src/lib/services/catalouge-search.service.ts index d6a841e5f..8e99fdb2a 100644 --- a/libs/catalogue/data-access/src/lib/services/catalouge-search.service.ts +++ b/libs/catalogue/data-access/src/lib/services/catalouge-search.service.ts @@ -4,9 +4,10 @@ import { firstValueFrom, map, Observable } from 'rxjs'; import { takeUntilAborted } from '@isa/common/data-access'; import { Item } from '../models'; import { - SearchByTermParams, - SearchByTermParamsSchema, + SearchByTermInput, + SearchByTermSchema, } from '../schemas/catalouge-search.schemas'; +import { ListResponseArgs } from '@isa/common/data-access'; @Injectable({ providedIn: 'root' }) export class CatalougeSearchService { @@ -25,15 +26,15 @@ export class CatalougeSearchService { } async searchByTerm( - params: SearchByTermParams, + params: SearchByTermInput, abortSignal: AbortSignal, - ): Promise { - const { term, skip, take } = SearchByTermParamsSchema.parse(params); + ): Promise> { + const { searchTerm, skip, take } = SearchByTermSchema.parse(params); const req$ = this.#searchService .SearchSearch({ filter: { - qs: term, + qs: searchTerm, }, skip, take, @@ -46,6 +47,6 @@ export class CatalougeSearchService { throw new Error(res.message); } - return res.result as Item[]; + return res as ListResponseArgs; } } diff --git a/libs/common/data-access/src/index.ts b/libs/common/data-access/src/index.ts index b2d994353..40f116802 100644 --- a/libs/common/data-access/src/index.ts +++ b/libs/common/data-access/src/index.ts @@ -1,3 +1,4 @@ export * from './lib/errors'; +export * from './lib/helpers'; export * from './lib/models'; export * from './lib/operators'; diff --git a/libs/common/data-access/src/lib/errors/index.ts b/libs/common/data-access/src/lib/errors/index.ts index c639ee233..177fcd3a0 100644 --- a/libs/common/data-access/src/lib/errors/index.ts +++ b/libs/common/data-access/src/lib/errors/index.ts @@ -1,3 +1,4 @@ export * from './data-access.error'; export * from './property-is-empty.error'; export * from './property-is-null-or-undefined.error'; +export * from './response-args.error'; diff --git a/libs/common/data-access/src/lib/errors/response-args.error.ts b/libs/common/data-access/src/lib/errors/response-args.error.ts new file mode 100644 index 000000000..234f35672 --- /dev/null +++ b/libs/common/data-access/src/lib/errors/response-args.error.ts @@ -0,0 +1,27 @@ +import { ResponseArgs } from '../models'; +import { DataAccessError } from './data-access.error'; + +function invalidPropertyErrorMessage( + invalidProperties: Record | undefined, +): string | undefined { + if (!invalidProperties || Object.keys(invalidProperties).length === 0) { + return undefined; + } + + return Object.entries(invalidProperties) + .map(([key, value]) => `${key}: ${value}`) + .join('; '); +} + +export class ResponseArgsError< + T, +> extends DataAccessError<'RESPONSE_ARGS_ERROR'> { + constructor(public readonly responseArgs: Omit, 'result'>) { + super( + 'RESPONSE_ARGS_ERROR', + responseArgs.message || + invalidPropertyErrorMessage(responseArgs.invalidProperties) || + 'An error occurred while processing response arguments', + ); + } +} diff --git a/libs/common/data-access/src/lib/helpers/create-esc-abort-controller.helper.ts b/libs/common/data-access/src/lib/helpers/create-esc-abort-controller.helper.ts new file mode 100644 index 000000000..e13363422 --- /dev/null +++ b/libs/common/data-access/src/lib/helpers/create-esc-abort-controller.helper.ts @@ -0,0 +1,13 @@ +export function createEscAbortControllerHelper(): AbortController { + const escAbortController = new AbortController(); + const escKeyHandler = (event: KeyboardEvent) => { + if (event.key === 'Escape') { + escAbortController.abort(); + document.removeEventListener('keydown', escKeyHandler); + } + }; + + document.addEventListener('keydown', escKeyHandler); + + return escAbortController; +} diff --git a/libs/common/data-access/src/lib/helpers/index.ts b/libs/common/data-access/src/lib/helpers/index.ts new file mode 100644 index 000000000..a317178b5 --- /dev/null +++ b/libs/common/data-access/src/lib/helpers/index.ts @@ -0,0 +1 @@ +export * from './create-esc-abort-controller.helper'; diff --git a/libs/common/data-access/src/lib/models/response-args.ts b/libs/common/data-access/src/lib/models/response-args.ts index 3c03beb67..e69b5436f 100644 --- a/libs/common/data-access/src/lib/models/response-args.ts +++ b/libs/common/data-access/src/lib/models/response-args.ts @@ -15,7 +15,7 @@ export interface ResponseArgs { * Map of property names to error messages for validation failures * Keys represent property names, values contain validation error messages */ - invalidProperties: Record; + invalidProperties?: Record; /** * Optional message providing additional information about the response diff --git a/libs/common/print/src/lib/services/print.service.ts b/libs/common/print/src/lib/services/print.service.ts index 2b6a7e920..cf48d9ca9 100644 --- a/libs/common/print/src/lib/services/print.service.ts +++ b/libs/common/print/src/lib/services/print.service.ts @@ -14,7 +14,7 @@ import { PrintDialogComponent } from '../print-dialog/print-dialog.component'; @Injectable({ providedIn: 'root' }) export class PrintService { #printService = inject(PrintApiService); - #printDailog = injectDialog(PrintDialogComponent, 'Drucken'); + #printDailog = injectDialog(PrintDialogComponent, { title: 'Drucken' }); #platform = inject(Platform); /** diff --git a/libs/core/storage/src/lib/hash.utils.ts b/libs/core/storage/src/lib/hash.utils.ts index 22e44119a..2b0a0d982 100644 --- a/libs/core/storage/src/lib/hash.utils.ts +++ b/libs/core/storage/src/lib/hash.utils.ts @@ -3,7 +3,7 @@ export function hash(obj: object | string): string { return obj; } - const str = JSON.stringify(obj, Object.keys(obj).sort()); + const str = JSON.stringify(obj); let hash = 0; for (let i = 0; i < str.length; i++) { hash = (hash << 5) - hash + str.charCodeAt(i); diff --git a/libs/core/storage/src/lib/storage.ts b/libs/core/storage/src/lib/storage.ts index d3c227f23..1b0ed27cd 100644 --- a/libs/core/storage/src/lib/storage.ts +++ b/libs/core/storage/src/lib/storage.ts @@ -4,12 +4,15 @@ import { z } from 'zod'; import { OAuthService } from 'angular-oauth2-oidc'; import { hash } from './hash.utils'; -export const USER_SUB = new InjectionToken<() => string>('core.storage.user-sub', { - factory: () => { - const auth = inject(OAuthService, { optional: true }); - return () => auth?.getIdentityClaims()?.['sub'] ?? 'anonymous'; +export const USER_SUB = new InjectionToken<() => string>( + 'core.storage.user-sub', + { + factory: () => { + const auth = inject(OAuthService, { optional: true }); + return () => auth?.getIdentityClaims()?.['sub'] ?? 'anonymous'; + }, }, -}); +); export class Storage { private readonly userSub = inject(USER_SUB); @@ -25,7 +28,10 @@ export class Storage { return this.storageProvider.set(this.getKey(token), value); } - async get(token: string | object, schema?: z.ZodType): Promise { + async get( + token: string | object, + schema?: z.ZodType, + ): Promise { const data = await this.storageProvider.get(this.getKey(token)); if (schema) { return schema.parse(data); diff --git a/libs/oms/feature/return-review/src/lib/guards/uncompleted-tasks.guard.ts b/libs/oms/feature/return-review/src/lib/guards/uncompleted-tasks.guard.ts index 5a5b59aa1..472b86918 100644 --- a/libs/oms/feature/return-review/src/lib/guards/uncompleted-tasks.guard.ts +++ b/libs/oms/feature/return-review/src/lib/guards/uncompleted-tasks.guard.ts @@ -11,10 +11,9 @@ export class UncompletedTasksGuard implements CanDeactivate { #returnTaskListStore = inject(ReturnTaskListStore); - #confirmationDialog = injectDialog( - ConfirmationDialogComponent, - 'Aufgaben erledigen', - ); + #confirmationDialog = injectDialog(ConfirmationDialogComponent, { + title: 'Aufgaben erledigen', + }); processId = injectActivatedTabId(); diff --git a/libs/remission/data-access/src/lib/models/price-value.ts b/libs/remission/data-access/src/lib/models/price-value.ts index 4a67bbba3..e62c73cc2 100644 --- a/libs/remission/data-access/src/lib/models/price-value.ts +++ b/libs/remission/data-access/src/lib/models/price-value.ts @@ -2,5 +2,4 @@ import { PriceValueDTO } from '@generated/swagger/inventory-api'; export interface PriceValue extends PriceValueDTO { value: number; - currency: string; } diff --git a/libs/remission/data-access/src/lib/schemas/fetch-return-reason.schema.ts b/libs/remission/data-access/src/lib/schemas/fetch-return-reason.schema.ts new file mode 100644 index 000000000..59eb6a636 --- /dev/null +++ b/libs/remission/data-access/src/lib/schemas/fetch-return-reason.schema.ts @@ -0,0 +1,9 @@ +import { z } from 'zod'; + +export const FetchReturnReasonSchema = z.object({ + stockId: z.number(), +}); + +export type FetchReturnReason = z.infer; + +export type FetchReturnReasonParams = z.input; diff --git a/libs/remission/data-access/src/lib/schemas/index.ts b/libs/remission/data-access/src/lib/schemas/index.ts index dc305107b..10819fb9d 100644 --- a/libs/remission/data-access/src/lib/schemas/index.ts +++ b/libs/remission/data-access/src/lib/schemas/index.ts @@ -1,5 +1,6 @@ +export * from './fetch-product-groups.schema'; +export * from './fetch-query-settings.schema'; +export * from './fetch-return-reason.schema'; export * from './fetch-stock-in-stock.schema'; export * from './fetch-suppliers.schema'; -export * from './fetch-query-settings.schema'; export * from './query-token.schema'; -export * from './fetch-product-groups.schema'; diff --git a/libs/remission/data-access/src/lib/services/index.ts b/libs/remission/data-access/src/lib/services/index.ts index 5bf363d71..a25ed957b 100644 --- a/libs/remission/data-access/src/lib/services/index.ts +++ b/libs/remission/data-access/src/lib/services/index.ts @@ -1,4 +1,5 @@ -export * from './remission-stock.service'; export * from './remission-product-group.service'; +export * from './remission-reason.service'; export * from './remission-search.service'; +export * from './remission-stock.service'; export * from './remission-supplier.service'; diff --git a/libs/remission/data-access/src/lib/services/remission-reason.service.ts b/libs/remission/data-access/src/lib/services/remission-reason.service.ts new file mode 100644 index 000000000..cd09238ec --- /dev/null +++ b/libs/remission/data-access/src/lib/services/remission-reason.service.ts @@ -0,0 +1,32 @@ +import { inject, Injectable } from '@angular/core'; +import { ReturnService } from '@generated/swagger/inventory-api'; +import { FetchReturnReasonParams, FetchReturnReasonSchema } from '../schemas'; +import { ResponseArgsError, takeUntilAborted } from '@isa/common/data-access'; +import { firstValueFrom } from 'rxjs'; +import { KeyValueStringAndString } from '../models'; + +@Injectable({ providedIn: 'root' }) +export class RemissionReasonService { + #returnService = inject(ReturnService); + + async fetchReturnReasons( + params: FetchReturnReasonParams, + abortSignal?: AbortSignal, + ): Promise { + const { stockId } = FetchReturnReasonSchema.parse(params); + + let req$ = this.#returnService.ReturnGetReturnReasons({ stockId }); + + if (abortSignal) { + req$ = req$.pipe(takeUntilAborted(abortSignal)); + } + + const res = await firstValueFrom(req$); + + if (res.error) { + throw new ResponseArgsError(res); + } + + return res.result as KeyValueStringAndString[]; + } +} diff --git a/libs/remission/data-access/src/lib/services/remission-stock.service.ts b/libs/remission/data-access/src/lib/services/remission-stock.service.ts index e0349cdc6..25690ed4f 100644 --- a/libs/remission/data-access/src/lib/services/remission-stock.service.ts +++ b/libs/remission/data-access/src/lib/services/remission-stock.service.ts @@ -5,13 +5,14 @@ import { Stock, StockInfo } from '../models'; import { FetchStockInStock, FetchStockInStockSchema } from '../schemas'; import { injectStorage, MemoryStorageProvider } from '@isa/core/storage'; import { ASSIGNED_STOCK_STORAGE_KEY } from '../constants'; +import { ResponseArgsError, takeUntilAborted } from '@isa/common/data-access'; @Injectable({ providedIn: 'root' }) export class RemissionStockService { #stockService = inject(StockService); #memoryStorage = injectStorage(MemoryStorageProvider); - async fetchAssignedStock(): Promise { + async fetchAssignedStock(abortSignal?: AbortSignal): Promise { const cached = await this.#memoryStorage.get(ASSIGNED_STOCK_STORAGE_KEY); if (cached) { @@ -20,10 +21,14 @@ export class RemissionStockService { const req$ = this.#stockService.StockCurrentStock(); + if (abortSignal) { + req$.pipe(takeUntilAborted(abortSignal)); + } + const res = await firstValueFrom(req$); if (res.error || !res.result) { - throw new Error(res.message || 'Failed to fetch CurrentStock data'); + throw new ResponseArgsError(res); } this.#memoryStorage.set(ASSIGNED_STOCK_STORAGE_KEY, res.result); diff --git a/libs/remission/feature/remission-list/src/lib/remission-start-card/remission-start-card.component.ts b/libs/remission/feature/remission-list/src/lib/remission-start-card/remission-start-card.component.ts index 3cccc8c0c..209d230c3 100644 --- a/libs/remission/feature/remission-list/src/lib/remission-start-card/remission-start-card.component.ts +++ b/libs/remission/feature/remission-list/src/lib/remission-start-card/remission-start-card.component.ts @@ -1,5 +1,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ButtonComponent } from '@isa/ui/buttons'; +import { injectDialog } from '@isa/ui/dialog'; +import { SearchItemToRemitDialogComponent } from '@isa/remission/shared/search-item-to-remit-dialog'; @Component({ selector: 'remission-feature-remission-start-card', @@ -9,7 +11,9 @@ import { ButtonComponent } from '@isa/ui/buttons'; imports: [ButtonComponent], }) export class RemissionStartCardComponent { + searchItemToRemitDialog = injectDialog(SearchItemToRemitDialogComponent); + startRemission() { - console.log('Start'); + this.searchItemToRemitDialog({ data: { searchTerm: 'Pokemon' } }); } } diff --git a/libs/remission/shared/search-item-to-remit-dialog/README.md b/libs/remission/shared/search-item-to-remit-dialog/README.md new file mode 100644 index 000000000..19108bf08 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/README.md @@ -0,0 +1,7 @@ +# remission-shared-search-item-to-remit-dialog + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test remission-shared-search-item-to-remit-dialog` to execute the unit tests. diff --git a/libs/remission/shared/search-item-to-remit-dialog/eslint.config.js b/libs/remission/shared/search-item-to-remit-dialog/eslint.config.js new file mode 100644 index 000000000..868eef81a --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/eslint.config.js @@ -0,0 +1,34 @@ +const nx = require('@nx/eslint-plugin'); +const baseConfig = require('../../../../eslint.config.js'); + +module.exports = [ + ...baseConfig, + ...nx.configs['flat/angular'], + ...nx.configs['flat/angular-template'], + { + files: ['**/*.ts'], + rules: { + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'remi', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'remi', + style: 'kebab-case', + }, + ], + }, + }, + { + files: ['**/*.html'], + // Override or add rules here + rules: {}, + }, +]; diff --git a/libs/remission/shared/search-item-to-remit-dialog/project.json b/libs/remission/shared/search-item-to-remit-dialog/project.json new file mode 100644 index 000000000..4bdcef7f1 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/project.json @@ -0,0 +1,20 @@ +{ + "name": "remission-shared-search-item-to-remit-dialog", + "$schema": "../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remission/shared/search-item-to-remit-dialog/src", + "prefix": "remi", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/vite:test", + "outputs": ["{options.reportsDirectory}"], + "options": { + "reportsDirectory": "../../../../coverage/libs/remission/shared/search-item-to-remit-dialog" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/index.ts b/libs/remission/shared/search-item-to-remit-dialog/src/index.ts new file mode 100644 index 000000000..a2323daae --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/index.ts @@ -0,0 +1 @@ +export * from './lib/search-item-to-remit-dialog.component'; diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/constants.ts b/libs/remission/shared/search-item-to-remit-dialog/src/lib/constants.ts new file mode 100644 index 000000000..3a842fed4 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/constants.ts @@ -0,0 +1,11 @@ +import { Item } from '@isa/catalogue/data-access'; +import { ListResponseArgs } from '@isa/common/data-access'; + +export const DEFAULT_LIST_RESPONSE_ARGS_OF_ITEM: ListResponseArgs = { + error: false, + hits: 0, + result: [], + skip: 0, + take: 0, + invalidProperties: {}, +}; diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.html b/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.html new file mode 100644 index 000000000..9fcdd438f --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.html @@ -0,0 +1,21 @@ +
Menge {{ position() }}
+
+ + 1 + 2 + 3 + 4 + 5 + + + @if (reasonResource.value(); as reasons) { + @for (reson of reasons; track reson.key) { + + {{ reson.value }} + + } + } + + 1 + +
diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.scss b/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.scss new file mode 100644 index 000000000..420175233 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.scss @@ -0,0 +1,3 @@ +:host { + @apply grid grid-cols-[1fr,auto] items-center justify-between px-4 py-[.44rem] border border-isa-neutral-400 rounded-lg; +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.ts b/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.ts new file mode 100644 index 000000000..92e4fd64b --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/quantity-and-reason-item.component.ts @@ -0,0 +1,64 @@ +import { + ChangeDetectionStrategy, + Component, + inject, + input, + linkedSignal, + model, + resource, +} from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { + RemissionReasonService, + RemissionStockService, +} from '@isa/remission/data-access'; +import { + DropdownButtonComponent, + DropdownOptionComponent, +} from '@isa/ui/input-controls'; + +@Component({ + selector: 'remi-quantity-and-reason-item', + templateUrl: './quantity-and-reason-item.component.html', + styleUrls: ['./quantity-and-reason-item.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [DropdownButtonComponent, DropdownOptionComponent, FormsModule], +}) +export class QuantityAndReasonItemComponent { + #reasonService = inject(RemissionReasonService); + #stockService = inject(RemissionStockService); + + position = input.required(); + + quantity = linkedSignal(() => 1); + + reason = linkedSignal(() => { + const returnReasons = this.reasonResource.value(); + if (!returnReasons || returnReasons.length === 0) { + return undefined; + } + return returnReasons[0].value; + }); + + assignedStockResource = resource({ + loader: ({ abortSignal }) => + this.#stockService.fetchAssignedStock(abortSignal), + }); + + reasonResource = resource({ + params: this.assignedStockResource.value, + loader: async ({ abortSignal, params }) => { + if (!params || !params.id) { + return []; + } + + return this.#reasonService.fetchReturnReasons( + { + stockId: params.id, + }, + abortSignal, + ); + }, + }); +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.html b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.html new file mode 100644 index 000000000..1b17413dd --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.html @@ -0,0 +1,15 @@ +@if (item()) { + +} @else { + + +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.scss b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.scss new file mode 100644 index 000000000..2dbc21683 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.scss @@ -0,0 +1,3 @@ +:host { + @apply block h-full; +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.ts b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.ts new file mode 100644 index 000000000..106949091 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-dialog.component.ts @@ -0,0 +1,51 @@ +import { + ChangeDetectionStrategy, + Component, + effect, + isSignal, + linkedSignal, + signal, + Signal, +} from '@angular/core'; +import { DialogContentDirective } from '@isa/ui/dialog'; +import { Item } from '@isa/catalogue/data-access'; +import { TextButtonComponent } from '@isa/ui/buttons'; +import { provideIcons } from '@ng-icons/core'; +import { isaActionSearch } from '@isa/icons'; +import { SearchItemToRemitListComponent } from './search-item-to-remit-list.component'; +import { SelectRemiQuantityAndReasonComponent } from './select-remi-quantity-and-reason.component'; + +export type SearchItemToRemitDialogData = { + searchTerm: string | Signal; +}; + +@Component({ + selector: 'remi-search-item-to-remit-dialog', + templateUrl: './search-item-to-remit-dialog.component.html', + styleUrls: ['./search-item-to-remit-dialog.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + TextButtonComponent, + SearchItemToRemitListComponent, + SelectRemiQuantityAndReasonComponent, + ], + providers: [provideIcons({ isaActionSearch })], +}) +export class SearchItemToRemitDialogComponent extends DialogContentDirective< + SearchItemToRemitDialogData, + Item | undefined +> { + searchTerm = linkedSignal(() => + isSignal(this.data.searchTerm) + ? this.data.searchTerm() + : this.data.searchTerm, + ); + + item = signal(undefined); + + itemEffect = effect(() => { + const item = this.item(); + this.dialogRef.updateSize(item ? '36rem' : 'auto'); + }); +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.html b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.html new file mode 100644 index 000000000..73e3dfd9b --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.html @@ -0,0 +1,31 @@ + + + + + +

+ Sie können Artikel die nicht auf der Remi Liste stehen direkt zum + Warenbegleitschein hinzufügen. +

+
+ @if (searchResource.value()?.result; as items) { + @for (item of items; track item.id) { + @defer { + + } + } + } +
diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.scss b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.scss new file mode 100644 index 000000000..819991ee4 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.scss @@ -0,0 +1,3 @@ +:host { + @apply grid grid-rows-[auto,auto,1fr] gap-6 h-full; +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.ts b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.ts new file mode 100644 index 000000000..cf0de7078 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit-list.component.ts @@ -0,0 +1,124 @@ +import { + ChangeDetectionStrategy, + Component, + inject, + OnInit, + resource, + signal, +} from '@angular/core'; +import { isaActionSearch } from '@isa/icons'; +import { IconButtonComponent } from '@isa/ui/buttons'; +import { + UiSearchBarClearComponent, + UiSearchBarComponent, +} from '@isa/ui/search-bar'; +import { provideIcons } from '@ng-icons/core'; +import { SearchItemToRemitComponent } from './search-item-to-remit.component'; +import { FormsModule } from '@angular/forms'; +import { DEFAULT_LIST_RESPONSE_ARGS_OF_ITEM } from './constants'; +import { + CatalougeSearchService, + SearchByTermInput, + Item, +} from '@isa/catalogue/data-access'; +import { + ListResponseArgs, + createEscAbortControllerHelper, +} from '@isa/common/data-access'; +import { injectStorage, MemoryStorageProvider } from '@isa/core/storage'; +import { SearchItemToRemitDialogComponent } from './search-item-to-remit-dialog.component'; + +@Component({ + selector: 'remi-search-item-to-remit-list', + templateUrl: './search-item-to-remit-list.component.html', + styleUrls: ['./search-item-to-remit-list.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + UiSearchBarClearComponent, + UiSearchBarComponent, + IconButtonComponent, + FormsModule, + SearchItemToRemitComponent, + ], + providers: [provideIcons({ isaActionSearch })], +}) +export class SearchItemToRemitListComponent implements OnInit { + host = inject(SearchItemToRemitDialogComponent); + #catalougeSearchService = inject(CatalougeSearchService); + #memoryStorage = injectStorage(MemoryStorageProvider); + + searchParams = signal(undefined); + + #setSearchResourceCache( + params: SearchByTermInput, + data: ListResponseArgs, + ): Promise { + return this.#memoryStorage.set( + { + component: 'SearchItemToRemitDialogComponent', + params, + }, + data, + ); + } + + #getSearchResourceCache( + params: SearchByTermInput, + ): Promise | undefined> { + return this.#memoryStorage.get({ + component: 'SearchItemToRemitDialogComponent', + params, + }) as Promise | undefined>; + } + + triggerSearch(): void { + this.searchParams.set({ + searchTerm: this.host.searchTerm(), + }); + } + + searchResource = resource({ + params: this.searchParams, + loader: async ({ abortSignal, params }) => { + if (params === undefined) { + return DEFAULT_LIST_RESPONSE_ARGS_OF_ITEM; + } + let result = await this.#getSearchResourceCache(params); + + if (result) { + return result; + } + + const escAbortController = createEscAbortControllerHelper(); + + try { + result = await this.#catalougeSearchService.searchByTerm( + params, + AbortSignal.any([abortSignal, escAbortController.signal]), + ); + + this.#setSearchResourceCache(params, result); + } catch (error) { + const message = + error instanceof Error ? error.message : 'Unknown error'; + result = { + ...DEFAULT_LIST_RESPONSE_ARGS_OF_ITEM, + error: true, + message, + }; + } finally { + escAbortController.abort(); + } + + return result; + }, + }); + + ngOnInit(): void { + this.host.dialog.title.set(''); + if (this.host.searchTerm().length) { + this.triggerSearch(); + } + } +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.html b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.html new file mode 100644 index 000000000..8f66bbc86 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.html @@ -0,0 +1,17 @@ + +
+ +
diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.scss b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.scss new file mode 100644 index 000000000..ce6b04875 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.scss @@ -0,0 +1,3 @@ +:host { + @apply grid grid-flow-row border-b border-b-isa-neutral-300 pt-6 pb-4 gap-4; +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.ts b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.ts new file mode 100644 index 000000000..d195d6932 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/search-item-to-remit.component.ts @@ -0,0 +1,23 @@ +import { + ChangeDetectionStrategy, + Component, + inject, + input, +} from '@angular/core'; +import { Item } from '@isa/catalogue/data-access'; +import { ProductInfoComponent } from '@isa/remission/shared/product'; +import { TextButtonComponent } from '@isa/ui/buttons'; +import { SearchItemToRemitDialogComponent } from './search-item-to-remit-dialog.component'; + +@Component({ + selector: 'remi-search-item-to-remit', + templateUrl: './search-item-to-remit.component.html', + styleUrls: ['./search-item-to-remit.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ProductInfoComponent, TextButtonComponent], +}) +export class SearchItemToRemitComponent { + host = inject(SearchItemToRemitDialogComponent); + + item = input.required(); +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.html b/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.html new file mode 100644 index 000000000..11fd81347 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.html @@ -0,0 +1,22 @@ +

+ Wie viele Exemplare können remittiert werden? +

+
+ +
+
+ +
+
+
+ + +
diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.scss b/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.scss new file mode 100644 index 000000000..39231131d --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.scss @@ -0,0 +1,3 @@ +:host { + @apply grid grid-flow-row gap-6; +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.ts b/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.ts new file mode 100644 index 000000000..588f621f3 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/lib/select-remi-quantity-and-reason.component.ts @@ -0,0 +1,32 @@ +import { + ChangeDetectionStrategy, + Component, + inject, + OnInit, +} from '@angular/core'; +import { SearchItemToRemitDialogComponent } from './search-item-to-remit-dialog.component'; +import { QuantityAndReasonItemComponent } from './quantity-and-reason-item.component'; +import { ButtonComponent, TextButtonComponent } from '@isa/ui/buttons'; +import { NgIcon, provideIcons } from '@ng-icons/core'; +import { isaActionPlus } from '@isa/icons'; + +@Component({ + selector: 'remi-select-remi-quantity-and-reason', + templateUrl: './select-remi-quantity-and-reason.component.html', + styleUrls: ['./select-remi-quantity-and-reason.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + QuantityAndReasonItemComponent, + TextButtonComponent, + NgIcon, + ButtonComponent, + ], + providers: [provideIcons({ isaActionPlus })], +}) +export class SelectRemiQuantityAndReasonComponent implements OnInit { + host = inject(SearchItemToRemitDialogComponent); + ngOnInit(): void { + this.host.dialog.title.set('Dieser Artikel steht nicht auf der Remi Liste'); + } +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/src/test-setup.ts b/libs/remission/shared/search-item-to-remit-dialog/src/test-setup.ts new file mode 100644 index 000000000..dd9cc988a --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@analogjs/vitest-angular/setup-zone'; + +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; +import { getTestBed } from '@angular/core/testing'; + +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); diff --git a/libs/remission/shared/search-item-to-remit-dialog/tsconfig.json b/libs/remission/shared/search-item-to-remit-dialog/tsconfig.json new file mode 100644 index 000000000..52a0866e0 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es2022", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/tsconfig.lib.json b/libs/remission/shared/search-item-to-remit-dialog/tsconfig.lib.json new file mode 100644 index 000000000..cdca8b947 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/tsconfig.lib.json @@ -0,0 +1,28 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "src/**/*.spec.ts", + "src/test-setup.ts", + "jest.config.ts", + "src/**/*.test.ts", + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/test-setup.ts" + ], + "include": ["src/**/*.ts"] +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/tsconfig.spec.json b/libs/remission/shared/search-item-to-remit-dialog/tsconfig.spec.json new file mode 100644 index 000000000..b2f92f3ec --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/tsconfig.spec.json @@ -0,0 +1,29 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../../dist/out-tsc", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ] + }, + "include": [ + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ], + "files": ["src/test-setup.ts"] +} diff --git a/libs/remission/shared/search-item-to-remit-dialog/vite.config.mts b/libs/remission/shared/search-item-to-remit-dialog/vite.config.mts new file mode 100644 index 000000000..1fadad7d7 --- /dev/null +++ b/libs/remission/shared/search-item-to-remit-dialog/vite.config.mts @@ -0,0 +1,29 @@ +/// +import { defineConfig } from 'vite'; +import angular from '@analogjs/vite-plugin-angular'; +import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; +import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin'; + +export default defineConfig({ + root: __dirname, + cacheDir: + '../../../../node_modules/.vite/libs/remission/shared/search-item-to-remit-dialog', + plugins: [angular(), nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])], + // Uncomment this if you are using workers. + // worker: { + // plugins: [ nxViteTsPaths() ], + // }, + test: { + watch: false, + globals: true, + environment: 'jsdom', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + setupFiles: ['src/test-setup.ts'], + reporters: ['default'], + coverage: { + reportsDirectory: + '../../../../coverage/libs/remission/shared/search-item-to-remit-dialog', + provider: 'v8', + }, + }, +}); diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/README.md b/libs/remission/shared/select-remission-quantity-and-reason-dialog/README.md new file mode 100644 index 000000000..443afd61d --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/README.md @@ -0,0 +1,7 @@ +# remission-shared-select-remission-quantity-and-reason-dialog + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test remission-shared-select-remission-quantity-and-reason-dialog` to execute the unit tests. diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/eslint.config.js b/libs/remission/shared/select-remission-quantity-and-reason-dialog/eslint.config.js new file mode 100644 index 000000000..868eef81a --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/eslint.config.js @@ -0,0 +1,34 @@ +const nx = require('@nx/eslint-plugin'); +const baseConfig = require('../../../../eslint.config.js'); + +module.exports = [ + ...baseConfig, + ...nx.configs['flat/angular'], + ...nx.configs['flat/angular-template'], + { + files: ['**/*.ts'], + rules: { + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'remi', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'remi', + style: 'kebab-case', + }, + ], + }, + }, + { + files: ['**/*.html'], + // Override or add rules here + rules: {}, + }, +]; diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/project.json b/libs/remission/shared/select-remission-quantity-and-reason-dialog/project.json new file mode 100644 index 000000000..5a6ec6e6a --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/project.json @@ -0,0 +1,20 @@ +{ + "name": "remission-shared-select-remission-quantity-and-reason-dialog", + "$schema": "../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/remission/shared/select-remission-quantity-and-reason-dialog/src", + "prefix": "remi", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/vite:test", + "outputs": ["{options.reportsDirectory}"], + "options": { + "reportsDirectory": "../../../../coverage/libs/remission/shared/select-remission-quantity-and-reason-dialog" + } + }, + "lint": { + "executor": "@nx/eslint:lint" + } + } +} diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/index.ts b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/index.ts new file mode 100644 index 000000000..b9324715e --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/index.ts @@ -0,0 +1 @@ +export * from './lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component'; diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.css b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.css new file mode 100644 index 000000000..e69de29bb diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.html b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.html new file mode 100644 index 000000000..584300787 --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.html @@ -0,0 +1 @@ +

remission-shared-select-remission-quantity-and-reason-dialog works!

diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.spec.ts b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.spec.ts new file mode 100644 index 000000000..3e835701c --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RemissionSharedSelectRemissionQuantityAndReasonDialogComponent } from './remission-shared-select-remission-quantity-and-reason-dialog.component'; + +describe('RemissionSharedSelectRemissionQuantityAndReasonDialogComponent', () => { + let component: RemissionSharedSelectRemissionQuantityAndReasonDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RemissionSharedSelectRemissionQuantityAndReasonDialogComponent], + }).compileComponents(); + + fixture = TestBed.createComponent( + RemissionSharedSelectRemissionQuantityAndReasonDialogComponent, + ); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.ts b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.ts new file mode 100644 index 000000000..1c56fa45b --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/lib/remission-shared-select-remission-quantity-and-reason-dialog/remission-shared-select-remission-quantity-and-reason-dialog.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'remi-remission-shared-select-remission-quantity-and-reason-dialog', + standalone: true, + imports: [CommonModule], + templateUrl: + './remission-shared-select-remission-quantity-and-reason-dialog.component.html', + styleUrl: + './remission-shared-select-remission-quantity-and-reason-dialog.component.css', +}) +export class RemissionSharedSelectRemissionQuantityAndReasonDialogComponent {} diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/test-setup.ts b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/test-setup.ts new file mode 100644 index 000000000..dd9cc988a --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@analogjs/vitest-angular/setup-zone'; + +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; +import { getTestBed } from '@angular/core/testing'; + +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.json b/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.json new file mode 100644 index 000000000..52a0866e0 --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es2022", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.lib.json b/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.lib.json new file mode 100644 index 000000000..cdca8b947 --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.lib.json @@ -0,0 +1,28 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "src/**/*.spec.ts", + "src/test-setup.ts", + "jest.config.ts", + "src/**/*.test.ts", + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/test-setup.ts" + ], + "include": ["src/**/*.ts"] +} diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.spec.json b/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.spec.json new file mode 100644 index 000000000..b2f92f3ec --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/tsconfig.spec.json @@ -0,0 +1,29 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../../dist/out-tsc", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ] + }, + "include": [ + "vite.config.ts", + "vite.config.mts", + "vitest.config.ts", + "vitest.config.mts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ], + "files": ["src/test-setup.ts"] +} diff --git a/libs/remission/shared/select-remission-quantity-and-reason-dialog/vite.config.mts b/libs/remission/shared/select-remission-quantity-and-reason-dialog/vite.config.mts new file mode 100644 index 000000000..fd27e7103 --- /dev/null +++ b/libs/remission/shared/select-remission-quantity-and-reason-dialog/vite.config.mts @@ -0,0 +1,29 @@ +/// +import { defineConfig } from 'vite'; +import angular from '@analogjs/vite-plugin-angular'; +import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; +import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin'; + +export default defineConfig({ + root: __dirname, + cacheDir: + '../../../../node_modules/.vite/libs/remission/shared/select-remission-quantity-and-reason-dialog', + plugins: [angular(), nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])], + // Uncomment this if you are using workers. + // worker: { + // plugins: [ nxViteTsPaths() ], + // }, + test: { + watch: false, + globals: true, + environment: 'jsdom', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + setupFiles: ['src/test-setup.ts'], + reporters: ['default'], + coverage: { + reportsDirectory: + '../../../../coverage/libs/remission/shared/select-remission-quantity-and-reason-dialog', + provider: 'v8', + }, + }, +}); diff --git a/libs/ui/buttons/src/lib/icon-button.component.ts b/libs/ui/buttons/src/lib/icon-button.component.ts index 47df9752b..73f9bb4a3 100644 --- a/libs/ui/buttons/src/lib/icon-button.component.ts +++ b/libs/ui/buttons/src/lib/icon-button.component.ts @@ -37,7 +37,6 @@ import { isaLoading } from '@isa/icons'; '[tabindex]': 'tabIndex()', '[attr.aria-disabled]': 'disabled()', '[attr.aria-label]': 'name()', - '[attr.aria-hidden]': 'pending()', '[attr.aria-busy]': 'pending()', '[attr.role]': 'pending() ? "progressbar" : "button"', }, diff --git a/libs/ui/dialog/src/dialog.scss b/libs/ui/dialog/src/dialog.scss index 3bdab89df..022ecb24c 100644 --- a/libs/ui/dialog/src/dialog.scss +++ b/libs/ui/dialog/src/dialog.scss @@ -1,11 +1,16 @@ .ui-dialog { - @apply bg-isa-white p-8 flex gap-8 items-start rounded-[2rem] flex-col text-isa-neutral-900; + @apply bg-isa-white p-8 grid gap-8 items-start rounded-[2rem] grid-flow-row text-isa-neutral-900 relative; + @apply max-h-[90vh] max-w-[90vw] overflow-hidden; + grid-template-rows: auto 1fr; .ui-dialog-title { @apply isa-text-subtitle-1-bold; + @apply flex-shrink-0; } .ui-dialog-content { @apply flex flex-col gap-8; + @apply overflow-y-auto overflow-x-hidden; + @apply min-h-0; } } diff --git a/libs/ui/dialog/src/lib/dialog-content.directive.ts b/libs/ui/dialog/src/lib/dialog-content.directive.ts index 1bf75224f..aea47529c 100644 --- a/libs/ui/dialog/src/lib/dialog-content.directive.ts +++ b/libs/ui/dialog/src/lib/dialog-content.directive.ts @@ -1,5 +1,6 @@ import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog'; import { Directive, inject } from '@angular/core'; +import { DialogComponent } from './dialog.component'; /** * Base directive for dialog content components @@ -14,6 +15,8 @@ import { Directive, inject } from '@angular/core'; }, }) export abstract class DialogContentDirective { + readonly dialog = inject(DialogComponent>); + /** Reference to the dialog instance */ readonly dialogRef = inject(DialogRef>); diff --git a/libs/ui/dialog/src/lib/dialog.component.html b/libs/ui/dialog/src/lib/dialog.component.html index b2af7b9f5..fd720d8cb 100644 --- a/libs/ui/dialog/src/lib/dialog.component.html +++ b/libs/ui/dialog/src/lib/dialog.component.html @@ -1,5 +1,5 @@

- {{ title }} + {{ title() }}

diff --git a/libs/ui/dialog/src/lib/dialog.component.ts b/libs/ui/dialog/src/lib/dialog.component.ts index 74462c227..73877d8dd 100644 --- a/libs/ui/dialog/src/lib/dialog.component.ts +++ b/libs/ui/dialog/src/lib/dialog.component.ts @@ -1,4 +1,9 @@ -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + inject, + signal, +} from '@angular/core'; import { DialogContentDirective } from './dialog-content.directive'; import { DIALOG_CONTENT, DIALOG_TITLE } from './tokens'; import { ComponentType } from '@angular/cdk/portal'; @@ -23,7 +28,7 @@ import { NgComponentOutlet } from '@angular/common'; }) export class DialogComponent> { /** The title to display at the top of the dialog */ - title = inject(DIALOG_TITLE); + title = signal(inject(DIALOG_TITLE)); /** The component type to instantiate as the dialog content */ readonly component = inject(DIALOG_CONTENT) as ComponentType; diff --git a/libs/ui/dialog/src/lib/injects.ts b/libs/ui/dialog/src/lib/injects.ts index addc14fb2..ab866ee72 100644 --- a/libs/ui/dialog/src/lib/injects.ts +++ b/libs/ui/dialog/src/lib/injects.ts @@ -7,13 +7,40 @@ import { DialogComponent } from './dialog.component'; import { DIALOG_CONTENT, DIALOG_TITLE } from './tokens'; import { MessageDialogComponent } from './message-dialog/message-dialog.component'; +export interface InjectDialogOptions { + /** Optional title override for the dialog */ + title?: string; + + /** Optional width for the dialog */ + width?: string; + + /** Optional height for the dialog */ + height?: string; + + /** Optional minWidth for the dialog */ + minWidth?: string; + + /** Optional maxWidth for the dialog */ + maxWidth?: string; + + /** Optional minHeight for the dialog */ + minHeight?: string; + + /** Optional maxHeight for the dialog */ + maxHeight?: string; + + /** Optional hasBackdrop for the dialog */ + hasBackdrop?: boolean; + + /** Optional disableClose for the dialog */ + disableClose?: boolean; +} + /** * Options for opening a dialog using injectDialog function * @template D The type of data passed to the dialog */ -export interface OpenDialogOptions { - /** Optional title override for the dialog */ - title?: string; +export interface OpenDialogOptions extends InjectDialogOptions { /** Data to pass to the dialog component */ data: D; } @@ -29,7 +56,7 @@ export interface OpenDialogOptions { */ export function injectDialog>( componentType: ComponentType, - title?: string, + injectOptions?: InjectDialogOptions, ) { type D = C extends DialogContentDirective ? D : never; type R = C extends DialogContentDirective ? R : never; @@ -37,7 +64,7 @@ export function injectDialog>( const cdkDialog = inject(Dialog); const injector = inject(Injector); - return (options?: OpenDialogOptions) => { + return (openOptions?: OpenDialogOptions) => { const dialogInjector = Injector.create({ parent: injector, providers: [ @@ -47,7 +74,7 @@ export function injectDialog>( }, { provide: DIALOG_TITLE, - useValue: options?.title ?? title, + useValue: openOptions?.title ?? injectOptions?.title, }, ], }); @@ -55,11 +82,18 @@ export function injectDialog>( const dialogRef = cdkDialog.open>( DialogComponent, { - data: options?.data, + data: openOptions?.data, injector: dialogInjector, - width: '30rem', - hasBackdrop: true, - disableClose: true, + width: openOptions?.width ?? injectOptions?.width, + height: openOptions?.height ?? injectOptions?.height, + minWidth: openOptions?.minWidth ?? injectOptions?.minWidth ?? '30rem', + maxWidth: openOptions?.maxWidth ?? injectOptions?.maxWidth, + minHeight: openOptions?.minHeight ?? injectOptions?.minHeight, + maxHeight: openOptions?.maxHeight ?? injectOptions?.maxHeight, + hasBackdrop: + openOptions?.hasBackdrop ?? injectOptions?.hasBackdrop ?? true, + disableClose: + openOptions?.disableClose ?? injectOptions?.disableClose ?? true, }, ); diff --git a/libs/ui/search-bar/src/lib/search-bar.component.ts b/libs/ui/search-bar/src/lib/search-bar.component.ts index 1c0e9b7e1..16193400d 100644 --- a/libs/ui/search-bar/src/lib/search-bar.component.ts +++ b/libs/ui/search-bar/src/lib/search-bar.component.ts @@ -20,7 +20,6 @@ export type SearchbarAppearance = @Component({ selector: 'ui-search-bar', templateUrl: './search-bar.component.html', - styleUrl: './search-bar.component.scss', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { diff --git a/libs/ui/search-bar/src/lib/search-bar.component.scss b/libs/ui/search-bar/src/search-bar.scss similarity index 86% rename from libs/ui/search-bar/src/lib/search-bar.component.scss rename to libs/ui/search-bar/src/search-bar.scss index b9319c638..4f01149c0 100644 --- a/libs/ui/search-bar/src/lib/search-bar.component.scss +++ b/libs/ui/search-bar/src/search-bar.scss @@ -5,13 +5,13 @@ display: inline-flex; } - &:has(input[type='text']:placeholder-shown) { + &:has(input[type="text"]:placeholder-shown) { .ui-search-bar__action__close { display: none; } } - input[type='text'] { + input[type="text"] { appearance: none; flex-grow: 1; @@ -19,7 +19,7 @@ font-style: normal; font-weight: 700; line-height: 1.25rem; /* 142.857% */ - @apply text-isa-neutral-900; + background-color: inherit; &::placeholder { @apply text-isa-neutral-500; @@ -57,7 +57,7 @@ @apply pr-4; } - &:has(input[type='text']:placeholder-shown) { + &:has(input[type="text"]:placeholder-shown) { @apply pl-0; button[prefix][uiIconButton] { @@ -65,10 +65,10 @@ } } - &:has(input[type='text']) { + &:has(input[type="text"]) { @apply pl-4; - input[type='text'] { + input[type="text"] { @apply pr-4 whitespace-nowrap overflow-hidden overflow-ellipsis; } diff --git a/nx.json b/nx.json index cad8895b7..fa6de74a7 100644 --- a/nx.json +++ b/nx.json @@ -52,6 +52,10 @@ "cache": true, "dependsOn": ["^build"], "inputs": ["production", "^production"] + }, + "@nx/vite:test": { + "cache": true, + "inputs": ["default", "^production"] } }, "defaultBase": "develop", diff --git a/package-lock.json b/package-lock.json index ed6eca63a..c938c2294 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,6 +46,8 @@ "zone.js": "~0.15.0" }, "devDependencies": { + "@analogjs/vite-plugin-angular": "~1.9.1", + "@analogjs/vitest-angular": "~1.9.1", "@angular-devkit/build-angular": "20.0.3", "@angular-devkit/core": "20.0.2", "@angular-devkit/schematics": "20.0.2", @@ -61,6 +63,7 @@ "@nx/jest": "21.2.0", "@nx/js": "21.2.0", "@nx/storybook": "21.2.0", + "@nx/vite": "20.1.4", "@nx/web": "21.2.0", "@nx/workspace": "21.2.0", "@schematics/angular": "20.0.2", @@ -76,6 +79,8 @@ "@types/node": "18.16.9", "@types/uuid": "^10.0.0", "@typescript-eslint/utils": "^8.19.0", + "@vitest/coverage-v8": "^1.0.4", + "@vitest/ui": "^1.3.1", "angular-eslint": "^19.2.0", "autoprefixer": "^10.4.20", "eslint": "^9.8.0", @@ -87,9 +92,10 @@ "jest-environment-node": "^29.7.0", "jest-junit": "^16.0.0", "jest-preset-angular": "14.6.0", + "jsdom": "~22.1.0", "jsonc-eslint-parser": "^2.1.0", "ng-mocks": "14.13.5", - "ng-packagr": "^20.0.0", + "ng-packagr": "20.0.1", "ng-swagger-gen": "^2.3.1", "nx": "21.2.0", "postcss": "^8.5.3", @@ -101,7 +107,9 @@ "ts-jest": "^29.1.0", "ts-node": "10.9.1", "typescript": "5.8.3", - "typescript-eslint": "^8.19.0" + "typescript-eslint": "^8.19.0", + "vite": "^5.0.0", + "vitest": "^1.3.1" }, "engines": { "node": ">=22.0.0", @@ -144,6 +152,49 @@ "node": ">=6.0.0" } }, + "node_modules/@analogjs/vite-plugin-angular": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@analogjs/vite-plugin-angular/-/vite-plugin-angular-1.9.4.tgz", + "integrity": "sha512-H7U96uo51ZO53sRuHxqCjbjmPWWGGcgk++Gge38tsmQz39E1CftOpHkc7SrAXFP3L8mzs0XSaKH2UR9VU8s+Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-morph": "^21.0.0", + "vfile": "^6.0.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/brandonroberts" + }, + "peerDependencies": { + "@angular-devkit/build-angular": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0", + "@angular/build": "^18.0.0 || ^19.0.0-rc.0" + }, + "peerDependenciesMeta": { + "@angular-devkit/build-angular": { + "optional": true + }, + "@angular/build": { + "optional": true + } + } + }, + "node_modules/@analogjs/vitest-angular": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@analogjs/vitest-angular/-/vitest-angular-1.9.4.tgz", + "integrity": "sha512-LcUQOjOWLh8lodYEWQ89NjzGDZ3jCYTTGVsEq2FwbIvkIiaB2Is8koX3Fz64ehllVqeEYsqj5wHp/keYEkAPSA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/brandonroberts" + }, + "peerDependencies": { + "@analogjs/vite-plugin-angular": "*", + "@angular-devkit/architect": "^0.1500.0 || ^0.1600.0 || ^0.1700.0 || ^0.1800.0 || next", + "vitest": "^1.3.1 || ^2.0.0" + } + }, "node_modules/@angular-devkit/architect": { "version": "0.2000.2", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.2.tgz", @@ -1366,6 +1417,81 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/@angular/build/node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/@angular/build/node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", @@ -4034,6 +4160,278 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", @@ -4050,6 +4448,125 @@ "node": ">=18" } }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/win32-x64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", @@ -7325,6 +7842,159 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.1.4.tgz", + "integrity": "sha512-afyDOZbIyHi6BgKk+Bb4RI1t8dZ6/oIbOY89z4mBPNNevZkbGqUfMwO2vjKnaOoThcjT93SEMJfCLGL8i857ww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.1.4.tgz", + "integrity": "sha512-aiYklAt95aX0EinepJRryMna8K53G52ngYOFuac1G8iLlguinJvg/YgSKCf7GOAzec8b7Hm7KauPjSJE/P3/iw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.1.4.tgz", + "integrity": "sha512-WUh4bsLK+e7wuN3lE3ZQUj+xQKdWU4P4RymutfLQQnPYiilCMtFwITcvDmazmOHFWI2vPhzSyYJRbOu+YMIR3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.1.4.tgz", + "integrity": "sha512-9vPMw5s89v3od7aw3enTWjdMSCAmQ0tIA89Uz7xbbjB2kX2mAdihSzAKd9woi/cj+ROnY+ynNXzU9UjqhfxdBg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.1.4.tgz", + "integrity": "sha512-JUE4l8utr9KmQSG9tO2Qw5R5i/bZ16s1+J5xnEar7UfcSOfOLqxGHS7HCBUZcfr46dmtv6KjIC83uHMs19AwDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.1.4.tgz", + "integrity": "sha512-EaPUDqXvnPc/ure0x7N+5lRYvk5zqOQ3LzFOTRPWdqnFXejyTkGjZEYWbLFIJTFrvyEdpfaPTHyNmCHUrEz9TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.1.4.tgz", + "integrity": "sha512-vaWV37ZayfyckVI/faWdQWIV9XQb06ZT8jHQnwgSd9tKbGz37vN30eYtgZlFL0P4bHfhjtmMXnLvADmfyO/KOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.1.4.tgz", + "integrity": "sha512-wjq4Ea1oweBsIA9jq+jDT6BALxv/uac0aFykwoN23dOiwwSMFWMxbXUuBrxp0LjMFGV49S62kVDoRezukvkiZA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.1.4.tgz", + "integrity": "sha512-d9jN8biyEJh4Mjdc3RU1j/+WIOjrO9mCDxYuERXP2ELaNsOk0tJgcXE1xsa9AF88AHGpOkCOS2rxy61DKBtFKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nx/nx-win32-x64-msvc": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.2.0.tgz", @@ -7358,6 +8028,511 @@ "storybook": ">=7.0.0 <10.0.0" } }, + "node_modules/@nx/vite": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/vite/-/vite-20.1.4.tgz", + "integrity": "sha512-qiWzFCbbVyhYtpwTgSpTQjLpD15bwvE783N2jJhjJiaVWXZKKZpcU5RY6q2/T+ieuTYYt1BWyePS8C6ecNIdmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "20.1.4", + "@nx/js": "20.1.4", + "@phenomnomnominal/tsquery": "~5.0.1", + "@swc/helpers": "~0.5.0", + "enquirer": "~2.3.6", + "minimatch": "9.0.3", + "tsconfig-paths": "^4.1.2" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vitest": "^1.3.1 || ^2.0.0" + } + }, + "node_modules/@nx/vite/node_modules/@nx/devkit": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.1.4.tgz", + "integrity": "sha512-Opz7eRPmpt3e4SGkbwZbE9Bg3MhKeivh1QTNCj4tQVAB4gucz0lW/F3mdtRDFdj6gUbqIc5rRrbO/DGlNaEzYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 19 <= 21" + } + }, + "node_modules/@nx/vite/node_modules/@nx/js": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.1.4.tgz", + "integrity": "sha512-o44prlNHyEEzhLOaIsEWdHm0I6SrEYkX5zjGAjlajoHuZ0o9JJBuE4uyIPZGo/EOZIy6idANfvpAbEtd6XAhJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/plugin-proposal-decorators": "^7.22.7", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@nx/devkit": "20.1.4", + "@nx/workspace": "20.1.4", + "@zkochan/js-yaml": "0.0.7", + "babel-plugin-const-enum": "^1.0.1", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-transform-typescript-metadata": "^0.3.1", + "chalk": "^4.1.0", + "columnify": "^1.6.0", + "detect-port": "^1.5.1", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "jsonc-parser": "3.2.0", + "minimatch": "9.0.3", + "npm-package-arg": "11.0.1", + "npm-run-path": "^4.0.1", + "ora": "5.3.0", + "semver": "^7.5.3", + "source-map-support": "0.5.19", + "ts-node": "10.9.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "verdaccio": "^5.0.4" + }, + "peerDependenciesMeta": { + "verdaccio": { + "optional": true + } + } + }, + "node_modules/@nx/vite/node_modules/@nx/nx-win32-x64-msvc": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.1.4.tgz", + "integrity": "sha512-s3RwOkkWKzOflbTmc5MRc4EH2mk1AkJ/V8Gu3Qi2QncF9r1GrR7hDxROpu0MEoHfIhRG+d+n8OGX31nC9GZWUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/vite/node_modules/@nx/workspace": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.1.4.tgz", + "integrity": "sha512-rEceXQqcNdlD5EvUA2w3MLi7mZPH13OvpvDPPyBNBurBrRcSaylDSvUCL54jWJ2G7bLzJx9bqWy81W8g7KNS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nx/devkit": "20.1.4", + "chalk": "^4.1.0", + "enquirer": "~2.3.6", + "nx": "20.1.4", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + } + }, + "node_modules/@nx/vite/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/@nx/vite/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nx/vite/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/vite/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nx/vite/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@nx/vite/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nx/vite/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/vite/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@nx/vite/node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@nx/vite/node_modules/nx": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.1.4.tgz", + "integrity": "sha512-hyvGYxTzBkPxSXAB2tuqdv9TpVde5xOdGalsIdhF7j7PI3nwPpqtc3y28YTgRgpxtOE1Y6BfDNkXMO1SW0xu2w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.7.4", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "9.0.3", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "semver": "^7.5.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "20.1.4", + "@nx/nx-darwin-x64": "20.1.4", + "@nx/nx-freebsd-x64": "20.1.4", + "@nx/nx-linux-arm-gnueabihf": "20.1.4", + "@nx/nx-linux-arm64-gnu": "20.1.4", + "@nx/nx-linux-arm64-musl": "20.1.4", + "@nx/nx-linux-x64-gnu": "20.1.4", + "@nx/nx-linux-x64-musl": "20.1.4", + "@nx/nx-win32-arm64-msvc": "20.1.4", + "@nx/nx-win32-x64-msvc": "20.1.4" + }, + "peerDependencies": { + "@swc-node/register": "^1.8.0", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nx/vite/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nx/vite/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nx/vite/node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nx/vite/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@nx/vite/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@nx/vite/node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@nx/vite/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/vite/node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nx/vite/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/@nx/web": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/@nx/web/-/web-21.2.0.tgz", @@ -8315,6 +9490,13 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/plugin-json": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", @@ -9268,6 +10450,35 @@ "node": ">=10.13.0" } }, + "node_modules/@ts-morph/common": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.22.0.tgz", + "integrity": "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "minimatch": "^9.0.3", + "mkdirp": "^3.0.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -9777,6 +10988,13 @@ "integrity": "sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==", "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", @@ -10090,6 +11308,49 @@ "vite": "^6.0.0" } }, + "node_modules/@vitest/coverage-v8": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.1.tgz", + "integrity": "sha512-6YeRZwuO4oTGKxD3bijok756oktHSIm3eczVVzNe3scqzuhLwltIF3S9ZL/vwOVIpURmU6SnZhziXXAfw8/Qlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.4", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.3", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.6.1" + } + }, + "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@vitest/expect": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.9.tgz", @@ -10119,6 +11380,171 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/runner": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.1.tgz", + "integrity": "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/@vitest/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/runner/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/runner/node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/runner/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.1.tgz", + "integrity": "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/@vitest/spy": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.9.tgz", @@ -10132,6 +11558,99 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/ui": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.6.1.tgz", + "integrity": "sha512-xa57bCPGuzEFqGjPs3vVLyqareG8DX0uMkr5U/v5vLv5/ZUrBrPL7gzxzTJedEyZxFMfsozwTIbbYfEQVo3kgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.1", + "fast-glob": "^3.3.2", + "fflate": "^0.8.1", + "flatted": "^3.2.9", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.4" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.6.1" + } + }, + "node_modules/@vitest/ui/node_modules/@vitest/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/ui/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/ui/node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/@vitest/ui/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/ui/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/@vitest/utils": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.9.tgz", @@ -11837,6 +13356,16 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -12469,6 +13998,13 @@ "node": ">= 0.12.0" } }, + "node_modules/code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true, + "license": "MIT" + }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -12627,6 +14163,13 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -13183,6 +14726,19 @@ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -13196,20 +14752,6 @@ "dev": true, "license": "MIT" }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/date-fns": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", @@ -13645,6 +15187,20 @@ ], "license": "BSD-2-Clause" }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", @@ -14069,6 +15625,363 @@ "node": ">=18" } }, + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -14822,6 +16735,13 @@ "tough-cookie": "^4.0.0" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -15525,6 +17445,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -17945,15 +19875,6 @@ "node": ">=14" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", @@ -17988,15 +19909,6 @@ } } }, - "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", @@ -18909,6 +20821,141 @@ "dev": true, "license": "MIT" }, + "node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/jsdom/node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -19554,6 +21601,23 @@ "node": ">= 12.13.0" } }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -19854,6 +21918,18 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -20346,6 +22422,26 @@ "license": "MIT", "optional": true }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -20546,10 +22642,11 @@ } }, "node_modules/ng-packagr": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-20.0.0.tgz", - "integrity": "sha512-p4pKkeulFi8wIOE2oLCPuzGLWE3uCNdrovSHGK5/w3+eA3l6DZmdEcvXM8YrEhbi253aB3yp4nKipc1OlK7hvQ==", + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-20.0.1.tgz", + "integrity": "sha512-MDqUwAg5tXpbOmt7DJH+qvycgNgxEPchwWUy7//1p6lOl2VvbF/XxrC4kAt948YQIkn1UhPxLXHIIcpZt5rt9g==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@rollup/plugin-json": "^6.1.0", @@ -20583,7 +22680,7 @@ "rollup": "^4.24.0" }, "peerDependencies": { - "@angular/compiler-cli": "^20.0.0 || ^20.0.0-next.0 || ^20.1.0-next.0", + "@angular/compiler-cli": "^20.0.0 || ^20.1.0-next.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "tslib": "^2.3.0", "typescript": ">=5.8 <5.9" @@ -21300,6 +23397,132 @@ } } }, + "node_modules/nx/node_modules/@nx/nx-darwin-arm64": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.2.0.tgz", + "integrity": "sha512-vfGvQ9IKinXo785jB1gTa9pAFRfxkZGeK/4P5hQNxYNLyROGu9caujrseXTLjZvF1hDuStvnUfoaBlcfhP36hQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/nx/node_modules/@nx/nx-darwin-x64": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-21.2.0.tgz", + "integrity": "sha512-+EMFxQzZshXbKXF1AexSnutroF1+Fs2W84DdfukHL0Q/hT00CZTKS4wgVAkMEO5dfRKpSB/fs8owRkSbE8R9vQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/nx/node_modules/@nx/nx-freebsd-x64": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.2.0.tgz", + "integrity": "sha512-wKTSZI9jb7lEjc8x60h10XCm5NExbXpz0vRjLEt8x8y5NXvDYCgHCRpAU4jPQRS3PIm2fBqa+5umc8qskQu7CQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/nx/node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.2.0.tgz", + "integrity": "sha512-6/Uoun4plMesFCrmjtaY5Ye2YvYqNZVkucZyjBYfJ8D5mF967I8Vpt0hDyDVfXxT0zx9YQGeUb33UgOktVL+xg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nx/node_modules/@nx/nx-linux-arm64-gnu": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.2.0.tgz", + "integrity": "sha512-0U2Q760B0pf9dQBGK3qes25jm1SwqGZ4bCgrdfccWpkka+Z+wWyIga55fAh3KIJQr5Cdw6QgsPKra6HbIFbpfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nx/node_modules/@nx/nx-linux-arm64-musl": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.2.0.tgz", + "integrity": "sha512-lM5GEliTA8TH8l64v1zq3sfsSOsODy+KdBLkcis0mNsuCop1kv/CxyuE0X3PwCGAGFchzDNj7mDprRR4FLfWoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nx/node_modules/@nx/nx-linux-x64-gnu": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.2.0.tgz", + "integrity": "sha512-5KoTe9Kv9elMWPvlWI4cXLXYmFjnD2asQIMgR4eSuWi09CqX9ua4mIyKC5sPjgy9VxWUhaKx+fZydp+akWh37w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nx/node_modules/@nx/nx-linux-x64-musl": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.2.0.tgz", + "integrity": "sha512-UbFzIU331vEEprCeKN01k+9Sn1y9pQO32/6yV4eLvK/FdrvzJahu0Dn+IinvCqdIAMiUvIdkBtcKirQby+Pc2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nx/node_modules/@nx/nx-win32-arm64-msvc": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.2.0.tgz", + "integrity": "sha512-mKqED/y9hD4qTPSeBTc3uZHQozm0XtqnnnrZui4BdXJOMvS3llCiCxmZF2E5N6GZl5L5sb6nNkjhzJDbAfs3TQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -22055,6 +24278,13 @@ "tslib": "^2.0.3" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -22143,6 +24373,13 @@ "node": ">=6" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -22286,6 +24523,25 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/portfinder": { "version": "1.0.37", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", @@ -24221,6 +26477,13 @@ "dev": true, "license": "MIT" }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true, + "license": "MIT" + }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -24900,6 +27163,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -24978,6 +27248,21 @@ "simple-concat": "^1.0.0" } }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -25258,6 +27543,13 @@ "node": ">=8" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -25268,6 +27560,13 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, "node_modules/stdin-discarder": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", @@ -25576,6 +27875,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/style-loader": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", @@ -26414,6 +28733,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", @@ -26430,6 +28756,16 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tinyrainbow": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", @@ -26450,26 +28786,6 @@ "node": ">=14.0.0" } }, - "node_modules/tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.86" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", - "dev": true, - "license": "MIT" - }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -26510,6 +28826,16 @@ "node": ">=0.6" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -26534,6 +28860,19 @@ "node": ">= 4.0.0" } }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/tree-dump": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", @@ -26695,6 +29034,17 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/ts-morph": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-21.0.1.tgz", + "integrity": "sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.22.0", + "code-block-writer": "^12.0.0" + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -26964,6 +29314,13 @@ "node": "*" } }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", @@ -27046,6 +29403,20 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -27241,24 +29612,52 @@ "node": ">= 0.8" } }, - "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -27267,25 +29666,19 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "terser": "^5.4.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, - "jiti": { - "optional": true - }, "less": { "optional": true }, @@ -27306,26 +29699,484 @@ }, "terser": { "optional": true - }, - "tsx": { + } + } + }, + "node_modules/vite-node": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitest": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.1.tgz", + "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "1.6.1", + "@vitest/runner": "1.6.1", + "@vitest/snapshot": "1.6.1", + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.6.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.6.1", + "@vitest/ui": "1.6.1", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { "optional": true }, - "yaml": { + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { "optional": true } } }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "node_modules/vitest/node_modules/@vitest/expect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", + "integrity": "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^5.0.0" + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/@vitest/spy": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.1.tgz", + "integrity": "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/@vitest/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vitest/node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/vitest/node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" }, "engines": { - "node": ">=18" + "node": ">=4" + } + }, + "node_modules/vitest/node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/vitest/node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vitest/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/vitest/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/vitest/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/vitest/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/vitest/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/vitest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/vitest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vitest/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vitest/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, "node_modules/walk-up-path": { @@ -27824,6 +30675,30 @@ "node": ">=12" } }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -27901,6 +30776,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -28072,6 +30964,16 @@ "dev": true, "license": "MIT" }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", diff --git a/package.json b/package.json index 5b82c4260..875dd5bfd 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,8 @@ "zone.js": "~0.15.0" }, "devDependencies": { + "@analogjs/vite-plugin-angular": "~1.9.1", + "@analogjs/vitest-angular": "~1.9.1", "@angular-devkit/build-angular": "20.0.3", "@angular-devkit/core": "20.0.2", "@angular-devkit/schematics": "20.0.2", @@ -73,6 +75,7 @@ "@nx/jest": "21.2.0", "@nx/js": "21.2.0", "@nx/storybook": "21.2.0", + "@nx/vite": "20.1.4", "@nx/web": "21.2.0", "@nx/workspace": "21.2.0", "@schematics/angular": "20.0.2", @@ -88,6 +91,8 @@ "@types/node": "18.16.9", "@types/uuid": "^10.0.0", "@typescript-eslint/utils": "^8.19.0", + "@vitest/coverage-v8": "^1.0.4", + "@vitest/ui": "^1.3.1", "angular-eslint": "^19.2.0", "autoprefixer": "^10.4.20", "eslint": "^9.8.0", @@ -99,6 +104,7 @@ "jest-environment-node": "^29.7.0", "jest-junit": "^16.0.0", "jest-preset-angular": "14.6.0", + "jsdom": "~22.1.0", "jsonc-eslint-parser": "^2.1.0", "ng-mocks": "14.13.5", "ng-packagr": "20.0.1", @@ -113,7 +119,9 @@ "ts-jest": "^29.1.0", "ts-node": "10.9.1", "typescript": "5.8.3", - "typescript-eslint": "^8.19.0" + "typescript-eslint": "^8.19.0", + "vite": "^5.0.0", + "vitest": "^1.3.1" }, "optionalDependencies": { "@esbuild/linux-x64": "^0.25.5" diff --git a/tsconfig.base.json b/tsconfig.base.json index d080c05da..8b8fe2fa8 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -75,11 +75,17 @@ ], "@isa/remission/helpers": ["libs/remission/helpers/src/index.ts"], "@isa/remission/shared": ["libs/remission/shared/src/index.ts"], + "@isa/remission/shared/product": [ + "libs/remission/shared/product/src/index.ts" + ], "@isa/remission/shared/product-details": [ "libs/remission/shared/product-details/src/index.ts" ], - "@isa/remission/shared/product": [ - "libs/remission/shared/product/src/index.ts" + "@isa/remission/shared/search-item-to-remit-dialog": [ + "libs/remission/shared/search-item-to-remit-dialog/src/index.ts" + ], + "@isa/remission/shared/select-remission-quantity-and-reason-dialog": [ + "libs/remission/shared/select-remission-quantity-and-reason-dialog/src/index.ts" ], "@isa/shared/filter": ["libs/shared/filter/src/index.ts"], "@isa/shared/product-foramt": ["libs/shared/product-format/src/index.ts"], diff --git a/vitest.workspace.ts b/vitest.workspace.ts new file mode 100644 index 000000000..f85d9fccc --- /dev/null +++ b/vitest.workspace.ts @@ -0,0 +1 @@ +export default ['**/*/vite.config.{ts,mts}', '**/*/vitest.config.{ts,mts}'];