diff --git a/.changeset/fair-singers-return.md b/.changeset/fair-singers-return.md new file mode 100644 index 0000000000..96e937a631 --- /dev/null +++ b/.changeset/fair-singers-return.md @@ -0,0 +1,5 @@ +--- +'@swisspost/design-system-styles': patch +--- + +Fixed the `.form-check-input` background-color, by setting it to white on none or light backgrounds. diff --git a/.changeset/shaggy-files-protect.md b/.changeset/shaggy-files-protect.md new file mode 100644 index 0000000000..4e3c6e9382 --- /dev/null +++ b/.changeset/shaggy-files-protect.md @@ -0,0 +1,7 @@ +--- +'@swisspost/design-system-components-angular-workspace': minor +'@swisspost/design-system-documentation': minor +'@swisspost/design-system-components': minor +--- + +Added a new web-component `post-card-control`, which works like a native `input[type="checkbox"]` or `input[type="radio"]` but with a custom visual design. diff --git a/package.json b/package.json index 10aa71b9c0..ba8d904573 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "components:snapshots": "start-server-and-test docs:headless 9001 'pnpm --filter design-system-components snapshots'", "components-angular:start": "pnpm --filter design-system-components-angular-workspace start", "components-angular:build": "pnpm --filter design-system-components-angular-workspace build", + "components-angular:e2e": "pnpm --filter design-system-components-angular-workspace e2e", + "components-angular:e2e:watch": "pnpm --filter design-system-components-angular-workspace e2e:watch", "header": "pnpm header:start", "header:start": "pnpm --filter internet-header dev", "header:build": "pnpm --filter internet-header build", diff --git a/packages/components-angular/projects/components/src/lib/components.module.ts b/packages/components-angular/projects/components/src/lib/components.module.ts index 2ca7874446..e7901d9999 100644 --- a/packages/components-angular/projects/components/src/lib/components.module.ts +++ b/packages/components-angular/projects/components/src/lib/components.module.ts @@ -1,9 +1,15 @@ import { APP_INITIALIZER, NgModule } from '@angular/core'; -import { DIRECTIVES } from './stencil-generated'; import { defineCustomElements } from '@swisspost/design-system-components/loader'; +import { DIRECTIVES } from './stencil-generated'; +import { BooleanValueAccessor } from './stencil-generated/boolean-value-accessor'; +import { PostCardControlValueAccessorDirective } from './custom/value-accessors/post-card-control-radio-value-accessor'; + +const DECLARATIONS = [...DIRECTIVES, BooleanValueAccessor, PostCardControlValueAccessorDirective]; + @NgModule({ - declarations: [...DIRECTIVES], + declarations: DECLARATIONS, + exports: DECLARATIONS, providers: [ { provide: APP_INITIALIZER, @@ -11,6 +17,5 @@ import { defineCustomElements } from '@swisspost/design-system-components/loader multi: true, }, ], - exports: [...DIRECTIVES], }) export class PostComponentsModule {} diff --git a/packages/components-angular/projects/components/src/lib/custom/value-accessors/post-card-control-radio-value-accessor.ts b/packages/components-angular/projects/components/src/lib/custom/value-accessors/post-card-control-radio-value-accessor.ts new file mode 100644 index 0000000000..a08a58d2fe --- /dev/null +++ b/packages/components-angular/projects/components/src/lib/custom/value-accessors/post-card-control-radio-value-accessor.ts @@ -0,0 +1,51 @@ +import { Directive, ElementRef, HostListener } from '@angular/core'; +import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; + +@Directive({ + /* eslint-disable-next-line @angular-eslint/directive-selector */ + selector: 'post-card-control[type="radio"]', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: PostCardControlValueAccessorDirective, + multi: true, + }, + ], +}) +export class PostCardControlValueAccessorDirective implements ControlValueAccessor { + private onChange: (value: any) => void = () => { + /**/ + }; + private onTouched: () => void = () => { + /**/ + }; + protected lastValue: any; + + constructor(protected el: ElementRef) {} + + writeValue(value: any) { + this.el.nativeElement.checked = this.lastValue = + this.el.nativeElement.value != value ? false : value; + } + + @HostListener('change', ['$event.detail.value']) + handleChangeEvent(value: any) { + this.onChange(value); + } + + @HostListener('focusout') + _handleBlurEvent() { + this.onTouched(); + } + + registerOnChange(fn: (value: any) => void) { + this.onChange = fn; + } + registerOnTouched(fn: () => void) { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean) { + this.el.nativeElement.disabled = isDisabled; + } +} diff --git a/packages/components-angular/projects/components/src/public-api.ts b/packages/components-angular/projects/components/src/public-api.ts index 4e5ec8ff60..e60791988a 100644 --- a/packages/components-angular/projects/components/src/public-api.ts +++ b/packages/components-angular/projects/components/src/public-api.ts @@ -3,5 +3,11 @@ */ export * from './lib/components.module'; -export { DIRECTIVES } from './lib/stencil-generated'; export * from './lib/stencil-generated/components'; +export { DIRECTIVES } from './lib/stencil-generated'; + +// Export all custom made components & directives! +// Skipping this step will lead to Angular Ivy errors when building for production. + +export { BooleanValueAccessor } from './lib/stencil-generated/boolean-value-accessor'; +export { PostCardControlValueAccessorDirective } from './lib/custom/value-accessors/post-card-control-radio-value-accessor'; diff --git a/packages/components-angular/projects/components/tsconfig.lib.json b/packages/components-angular/projects/components/tsconfig.lib.json index 543fd474ab..b0d6d02847 100644 --- a/packages/components-angular/projects/components/tsconfig.lib.json +++ b/packages/components-angular/projects/components/tsconfig.lib.json @@ -6,9 +6,8 @@ "declaration": true, "declarationMap": true, "inlineSources": true, + "noImplicitOverride": false, "types": [] }, - "exclude": [ - "**/*.spec.ts" - ] + "exclude": ["**/*.spec.ts"] } diff --git a/packages/components-angular/projects/consumer-app/cypress.config.ts b/packages/components-angular/projects/consumer-app/cypress.config.ts index f01955f82b..94cece0eaa 100644 --- a/packages/components-angular/projects/consumer-app/cypress.config.ts +++ b/packages/components-angular/projects/consumer-app/cypress.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from 'cypress'; export default defineConfig({ e2e: { baseUrl: 'http://localhost:4200', + includeShadowDom: true, }, component: { devServer: { diff --git a/packages/components-angular/projects/consumer-app/cypress/e2e/card-control.cy.ts b/packages/components-angular/projects/consumer-app/cypress/e2e/card-control.cy.ts new file mode 100644 index 0000000000..15c4b2b124 --- /dev/null +++ b/packages/components-angular/projects/consumer-app/cypress/e2e/card-control.cy.ts @@ -0,0 +1,102 @@ +describe('Card-Control', () => { + beforeEach(() => { + cy.visit('/card-control'); + + cy.get('post-card-control[type="checkbox"]').as('checkbox'); + cy.get('@checkbox').find('input.card-control--input').as('checkbox-input'); + cy.get('.form-check input.form-check-input[type="checkbox"]').as('native-checkbox'); + cy.get('post-card-control[type="radio"]').as('radio'); + cy.get('@radio').find('input.card-control--input').as('radio-input'); + cy.get('.form-check input.form-check-input[type="radio"]').as('native-radio'); + + cy.get('button[type="reset"]').as('reset'); + + cy.get('#validity').as('state'); + cy.get('#output').as('output'); + }); + + it('should exist', () => { + cy.get('@checkbox').should('exist'); + cy.get('@radio').should('exist'); + }); + + it('should update the surrounding form value, when checked', () => { + cy.get('@output').then($output => { + cy.checkOutputProps($output, { + checkbox: null, + radio: null, + }); + + cy.get('@checkbox').click(); + cy.checkOutputProps($output, { checkbox: true }); + cy.get('@checkbox').click(); + cy.checkOutputProps($output, { checkbox: false }); + cy.get('@checkbox-input').type(' '); + cy.checkOutputProps($output, { checkbox: true }); + + cy.get('@radio').each(($control, i) => { + cy.wrap($control).click(); + cy.checkOutputProps($output, { radio: `option_${i + 1}` }); + }); + + cy.get('@radio-input').each(($input, i) => { + cy.wrap($input).type(' '); + cy.checkOutputProps($output, { radio: `option_${i + 1}` }); + }); + }); + }); + + it('should not update the surrounding form value, when a disabled group member has been checked by keyboard', () => { + cy.get('@radio').eq(1).invoke('attr', 'disabled', true); + cy.get('@radio').eq(3).invoke('attr', 'disabled', true); + + cy.wait(0) + .get('@output') + .then($output => { + cy.checkOutputProps($output, { radio: null }); + + let option: null | undefined | string = null; + + cy.get('@radio-input') + .its('length') + .then(length => { + cy.get('@radio-input').each(($input, i) => { + cy.get('@radio-input') + .eq(i + 1 < length ? i + 1 : 0) + .then($next => { + const isDisabled = $next.attr('aria-disabled') !== undefined; + + if (!isDisabled) option = $next.val()?.toString(); + + cy.wrap($input).focus().type('{downArrow}'); + cy.checkOutputProps($output, { radio: option }); + }); + }); + }); + }); + }); + + it('should update the surrounding form validity, when checked', () => { + cy.get('@state').should('contain.text', 'INVALID'); + + cy.get('@native-checkbox').check(); + cy.get('@native-radio').eq(2).check(); + cy.get('@radio').eq(2).click(); + cy.get('@radio').eq(2).click(); + cy.get('@state').should('contain.text', 'INVALID'); + + cy.get('@checkbox').click(); + cy.get('@state').should('contain.text', 'VALID'); + cy.get('@checkbox').click(); + cy.get('@state').should('contain.text', 'INVALID'); + + cy.get('@reset').click(); + cy.get('@native-checkbox').check(); + cy.get('@native-radio').eq(2).check(); + cy.get('@checkbox').click(); + cy.get('@state').should('contain.text', 'INVALID'); + + cy.get('@radio').eq(2).click(); + cy.get('@state').should('contain.text', 'VALID'); + }); +}); diff --git a/packages/components-angular/projects/consumer-app/cypress/support/commands.ts b/packages/components-angular/projects/consumer-app/cypress/support/commands.ts index af1f44a0fc..1249d710fa 100644 --- a/packages/components-angular/projects/consumer-app/cypress/support/commands.ts +++ b/packages/components-angular/projects/consumer-app/cypress/support/commands.ts @@ -41,3 +41,11 @@ // // -- This will overwrite an existing command -- // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) + +Cypress.Commands.add('checkOutputProps', ($output, props) => { + const output = JSON.parse($output.text()); + + Object.entries(props).forEach(([key, value]) => { + expect(output[key]).to.be.eq(value); + }); +}); diff --git a/packages/components-angular/projects/consumer-app/cypress/support/component.ts b/packages/components-angular/projects/consumer-app/cypress/support/component.ts index 96e1d27983..a703d324a9 100644 --- a/packages/components-angular/projects/consumer-app/cypress/support/component.ts +++ b/packages/components-angular/projects/consumer-app/cypress/support/component.ts @@ -14,12 +14,12 @@ // *********************************************************** // Import commands.js using ES2015 syntax: -import './commands' +import './commands'; // Alternatively you can use CommonJS syntax: // require('./commands') -import { mount } from 'cypress/angular' +import { mount } from 'cypress/angular'; // Augment the Cypress namespace to include type definitions for // your custom command. @@ -28,12 +28,12 @@ import { mount } from 'cypress/angular' declare global { namespace Cypress { interface Chainable { - mount: typeof mount + mount: typeof mount; } } } -Cypress.Commands.add('mount', mount) +Cypress.Commands.add('mount', mount); // Example use: // cy.mount(MyComponent) diff --git a/packages/components-angular/projects/consumer-app/cypress/support/e2e.ts b/packages/components-angular/projects/consumer-app/cypress/support/e2e.ts index 55540ff7d9..959d46bc93 100644 --- a/packages/components-angular/projects/consumer-app/cypress/support/e2e.ts +++ b/packages/components-angular/projects/consumer-app/cypress/support/e2e.ts @@ -14,4 +14,4 @@ // *********************************************************** // When a command from ./commands is ready to use, import with `import './commands'` syntax -// import './commands'; +import './commands'; diff --git a/packages/components-angular/projects/consumer-app/cypress/support/index.d.ts b/packages/components-angular/projects/consumer-app/cypress/support/index.d.ts new file mode 100644 index 0000000000..1a314a1b78 --- /dev/null +++ b/packages/components-angular/projects/consumer-app/cypress/support/index.d.ts @@ -0,0 +1,5 @@ +declare namespace Cypress { + interface Chainable { + checkOutputProps($output: JQuery, props: {}): Chainable; + } +} diff --git a/packages/components-angular/projects/consumer-app/src/app/app-routing.module.ts b/packages/components-angular/projects/consumer-app/src/app/app-routing.module.ts index 02972627f8..5172e3b67c 100644 --- a/packages/components-angular/projects/consumer-app/src/app/app-routing.module.ts +++ b/packages/components-angular/projects/consumer-app/src/app/app-routing.module.ts @@ -1,10 +1,16 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { HomeComponent } from './routes/home/home.component'; +import { CardControlComponent } from './routes/card-control/card-control.component'; -const routes: Routes = []; +const routes: Routes = [ + { path: '', redirectTo: 'home', pathMatch: 'full' }, + { title: 'Home', path: 'home', component: HomeComponent }, + { title: 'Card-Control', path: 'card-control', component: CardControlComponent }, +]; @NgModule({ imports: [RouterModule.forRoot(routes)], - exports: [RouterModule] + exports: [RouterModule], }) -export class AppRoutingModule { } +export class AppRoutingModule {} diff --git a/packages/components-angular/projects/consumer-app/src/app/app.component.html b/packages/components-angular/projects/consumer-app/src/app/app.component.html index 48fb72fe47..d67562cfc9 100644 --- a/packages/components-angular/projects/consumer-app/src/app/app.component.html +++ b/packages/components-angular/projects/consumer-app/src/app/app.component.html @@ -1,94 +1,14 @@ -

Hurray, it works!

- -
-

Post Accordion

- - - Titulum 1 -

Contentus momentus vero siteos et accusam iretea et justo.

-
- - - Titulum 2 -

Contentus momentus vero siteos et accusam iretea et justo.

-
- - - Titulum 3 -

Contentus momentus vero siteos et accusam iretea et justo.

-
-
-
- -
-

Post Alert

-

Contentus momentus vero siteos et accusam iretea et justo.

-
- -
-

Post Collapsible

- -

Contentus momentus vero siteos et accusam iretea et justo.

-
-
- -
-

Post Popover

- - -

Optional title

- -

- A longer message that needs more time to read. - Links - are also possible. -

-
-
- -
-

Post Popovercontainer

- -
- -
-

Post Icon

- -
- -
-

Post Tabs

- - Unua langeto - Dua langeto - Tria langeto - - - Jen la enhavo de la unua langeto. Defaŭlte ĝi montriĝas komence. - - - Jen la enhavo de la dua langeto. Defaŭlte ĝi estas kaŝita komence. - - - Jen la enhavo de la tria langeto. Defaŭlte ĝi ankaŭ estas kaŝita komence. - - -
- -
-

Post Tooltip

- - Hi there 👋 -
- -
-

Post Rating

- -
- -
-

Post Tag

- Tag -
+
+ +
+ +
+

Hurray, it works!

+ +
diff --git a/packages/components-angular/projects/consumer-app/src/app/app.component.spec.ts b/packages/components-angular/projects/consumer-app/src/app/app.component.spec.ts index 127eda1957..427775cd67 100644 --- a/packages/components-angular/projects/consumer-app/src/app/app.component.spec.ts +++ b/packages/components-angular/projects/consumer-app/src/app/app.component.spec.ts @@ -2,11 +2,13 @@ import { TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { AppComponent } from './app.component'; -describe('AppComponent', () => { - beforeEach(() => TestBed.configureTestingModule({ - imports: [RouterTestingModule], - declarations: [AppComponent] - })); +describe('App', () => { + beforeEach(() => + TestBed.configureTestingModule({ + imports: [RouterTestingModule], + declarations: [AppComponent], + }), + ); it('should create the app', () => { const fixture = TestBed.createComponent(AppComponent); @@ -24,6 +26,8 @@ describe('AppComponent', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('consumer-app app is running!'); + expect(compiled.querySelector('.content span')?.textContent).toContain( + 'consumer-app app is running!', + ); }); }); diff --git a/packages/components-angular/projects/consumer-app/src/app/app.component.ts b/packages/components-angular/projects/consumer-app/src/app/app.component.ts index aaa0cedc4a..84eb2dd04b 100644 --- a/packages/components-angular/projects/consumer-app/src/app/app.component.ts +++ b/packages/components-angular/projects/consumer-app/src/app/app.component.ts @@ -1,10 +1,18 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { Route, Router } from '@angular/router'; @Component({ selector: 'app-root', templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'] + styleUrls: ['./app.component.scss'], }) -export class AppComponent { +export class AppComponent implements OnInit { title = 'consumer-app'; + public navigationRoutes: Route[] = []; + + constructor(private router: Router) {} + + ngOnInit(): void { + this.navigationRoutes = this.router.config.filter(r => r.title); + } } diff --git a/packages/components-angular/projects/consumer-app/src/app/app.module.ts b/packages/components-angular/projects/consumer-app/src/app/app.module.ts index 00544eb082..063d25fddb 100644 --- a/packages/components-angular/projects/consumer-app/src/app/app.module.ts +++ b/packages/components-angular/projects/consumer-app/src/app/app.module.ts @@ -1,13 +1,24 @@ import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { BrowserModule } from '@angular/platform-browser'; - import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; +import { FormsModule } from '@angular/forms'; import { PostComponentsModule } from 'components'; +import { AppComponent } from './app.component'; +import { HomeComponent } from './routes/home/home.component'; +import { CardControlComponent } from './routes/card-control/card-control.component'; + @NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, AppRoutingModule, PostComponentsModule], + imports: [ + CommonModule, + BrowserModule, + AppRoutingModule, + FormsModule, + PostComponentsModule, + CardControlComponent, + ], + declarations: [AppComponent, HomeComponent], providers: [], bootstrap: [AppComponent], }) diff --git a/packages/components-angular/projects/consumer-app/src/app/routes/card-control/card-control.component.html b/packages/components-angular/projects/consumer-app/src/app/routes/card-control/card-control.component.html new file mode 100644 index 0000000000..5cd8b5b0a3 --- /dev/null +++ b/packages/components-angular/projects/consumer-app/src/app/routes/card-control/card-control.component.html @@ -0,0 +1,78 @@ +

CardControl Forms

+ +

Form Builder Form

+
+
+
+
+ Post Card Control Checkbox + +
+ +
+ Native Checkbox +
+ + +
+
+
+
+ +
+
+
+ Post Card Control Radio Group + + + +
+ +
+ Native Checkbox +
+ + +
+
+
+
+ +
+ + +
+
+ +
+

Form Status:

+

{{ formBuilderForm.status }}

+
+ +
+

Output

+
{{ formBuilderFormValue }}
+
diff --git a/packages/components-angular/projects/consumer-app/src/app/routes/card-control/card-control.component.ts b/packages/components-angular/projects/consumer-app/src/app/routes/card-control/card-control.component.ts new file mode 100644 index 0000000000..fbd76304a3 --- /dev/null +++ b/packages/components-angular/projects/consumer-app/src/app/routes/card-control/card-control.component.ts @@ -0,0 +1,31 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; +import { PostComponentsModule } from 'components'; + +@Component({ + standalone: true, + selector: 'card-control-page', + templateUrl: './card-control.component.html', + imports: [CommonModule, ReactiveFormsModule, PostComponentsModule], +}) +export class CardControlComponent { + public radioOptions = ['option_1', 'option_2', 'option_3', 'option_4', 'option_5']; + + formBuilderForm = this.formBuilder.group({ + checkbox: [null, Validators.requiredTrue], + nativeCheckbox: [null, Validators.requiredTrue], + radio: [null, Validators.required], + nativeRadio: [null, Validators.required], + }); + + constructor(private formBuilder: FormBuilder) {} + + get formBuilderFormValue() { + return JSON.stringify(this.formBuilderForm.value, null, 2); + } + + formBuilderFormOnSubmit(e: any) { + console.log(Array.from((new FormData(e.target) as any).entries())); + } +} diff --git a/packages/components-angular/projects/consumer-app/src/app/routes/home/home.component.html b/packages/components-angular/projects/consumer-app/src/app/routes/home/home.component.html new file mode 100644 index 0000000000..cd2d915695 --- /dev/null +++ b/packages/components-angular/projects/consumer-app/src/app/routes/home/home.component.html @@ -0,0 +1,97 @@ +
+

Post Accordion

+ + + Titulum 1 +

Contentus momentus vero siteos et accusam iretea et justo.

+
+ + + Titulum 2 +

Contentus momentus vero siteos et accusam iretea et justo.

+
+ + + Titulum 3 +

Contentus momentus vero siteos et accusam iretea et justo.

+
+
+
+ +
+

Post Alert

+

Contentus momentus vero siteos et accusam iretea et justo.

+
+ +
+

Post Card-Control

+ +
+ +
+

Post Collapsible

+ +

Contentus momentus vero siteos et accusam iretea et justo.

+
+
+ +
+

Post Icon

+ +
+ +
+

Post Rating

+ +
+ +
+

Post Popover

+ + +

Optional title

+ +

+ A longer message that needs more time to read. + Links + are also possible. +

+
+
+ +
+

Post Popovercontainer

+ +
+ +
+

Post Tabs

+ + Unua langeto + Dua langeto + Tria langeto + + + Jen la enhavo de la unua langeto. Defaŭlte ĝi montriĝas komence. + + + Jen la enhavo de la dua langeto. Defaŭlte ĝi estas kaŝita komence. + + + Jen la enhavo de la tria langeto. Defaŭlte ĝi ankaŭ estas kaŝita komence. + + +
+ +
+

Post Tag

+ Tag +
+ +
+

Post Tooltip

+ + Hi there 👋 +
diff --git a/packages/components-angular/projects/consumer-app/src/app/routes/home/home.component.ts b/packages/components-angular/projects/consumer-app/src/app/routes/home/home.component.ts new file mode 100644 index 0000000000..b795b9fdf8 --- /dev/null +++ b/packages/components-angular/projects/consumer-app/src/app/routes/home/home.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'home-page', + templateUrl: './home.component.html', +}) +export class HomeComponent {} diff --git a/packages/components-angular/projects/consumer-app/src/index.html b/packages/components-angular/projects/consumer-app/src/index.html index 72a6331501..8c64c979ce 100644 --- a/packages/components-angular/projects/consumer-app/src/index.html +++ b/packages/components-angular/projects/consumer-app/src/index.html @@ -8,13 +8,6 @@ - - -
- - -
- - + diff --git a/packages/components/.config/bindings.angular.ts b/packages/components/.config/bindings.angular.ts index 07665ff1dc..e86f44fbb7 100644 --- a/packages/components/.config/bindings.angular.ts +++ b/packages/components/.config/bindings.angular.ts @@ -1,4 +1,12 @@ import { ValueAccessorConfig } from '@stencil/angular-output-target'; // https://stenciljs.com/docs/v4/angular#valueaccessorconfigs -export const angularValueAccessorBindings: ValueAccessorConfig[] = []; +export const angularValueAccessorBindings: ValueAccessorConfig[] = [ + { + elementSelectors: ['post-card-control[type="checkbox"]'], + event: 'change', + targetAttr: 'checked', + type: 'boolean', + }, + // a custom post-card-control-value-accessor for post-card-control[type="radio"] has been implemented in the components-angular package +]; diff --git a/packages/components/.eslintrc.js b/packages/components/.eslintrc.js index 11f03ada2b..6e6dd46738 100644 --- a/packages/components/.eslintrc.js +++ b/packages/components/.eslintrc.js @@ -29,6 +29,7 @@ module.exports = { ], 'quotes': ['error', 'single'], 'semi': ['error', 'always'], + 'react/jsx-no-bind': 'off', '@typescript-eslint/no-unused-vars': [ 'error', { @@ -39,40 +40,11 @@ module.exports = { ], '@stencil-community/strict-boolean-conditions': 'off', '@stencil-community/required-prefix': ['error', ['post-']], - '@stencil-community/async-methods': 'error', - '@stencil-community/decorators-context': 'error', - '@stencil-community/decorators-style': [ - 'error', - { - prop: 'inline', - state: 'inline', - element: 'inline', - event: 'inline', - method: 'multiline', - watch: 'multiline', - listen: 'multiline', - }, - ], '@stencil-community/class-pattern': [ 'error', { pattern: '^Post.*(?!Component)$', }, ], - '@stencil-community/element-type': 'error', - '@stencil-community/host-data-deprecated': 'error', - '@stencil-community/methods-must-be-public': 'error', - '@stencil-community/no-unused-watch': 'error', - '@stencil-community/own-methods-must-be-private': 'error', - '@stencil-community/own-props-must-be-private': 'error', - '@stencil-community/prefer-vdom-listener': 'error', - '@stencil-community/props-must-be-public': 'error', - '@stencil-community/props-must-be-readonly': 'error', - '@stencil-community/render-returns-host': 'error', - '@stencil-community/required-jsdoc': 'error', - '@stencil-community/reserved-member-names': 'error', - '@stencil-community/single-export': 'error', - '@stencil-community/strict-mutable': 'error', - 'react/jsx-no-bind': 'off', }, }; diff --git a/packages/components/cypress/downloads/downloads.htm b/packages/components/cypress/downloads/downloads.htm new file mode 100644 index 0000000000..65bed6147d Binary files /dev/null and b/packages/components/cypress/downloads/downloads.htm differ diff --git a/packages/components/cypress/e2e/card-control.cy.ts b/packages/components/cypress/e2e/card-control.cy.ts new file mode 100644 index 0000000000..8fc28cd0d3 --- /dev/null +++ b/packages/components/cypress/e2e/card-control.cy.ts @@ -0,0 +1,512 @@ +const CARDCONTROL_ID = '886fabcf-148b-4054-a2ec-4869668294fb'; + +describe('Card-Control', () => { + describe('Structure & Props', () => { + beforeEach(() => { + cy.getComponent('card-control', CARDCONTROL_ID); + cy.window().then(win => { + cy.wrap(cy.spy(win.console, 'error')).as('consoleError'); + }); + + cy.get('@card-control').find('.card-control').as('wrapper'); + cy.get('@card-control').find('input.card-control--input').as('input'); + cy.get('@card-control').find('label.card-control--label').as('label'); + cy.get('@card-control').find('.card-control--icon').as('icon'); + cy.get('@card-control').find('.card-control--icon slot[name="icon"]').as('slotIcon'); + }); + + it('should have no console errors', () => { + cy.get('@consoleError').should('not.be.called'); + }); + + it('should render mandatory elements', () => { + cy.get('@card-control').should('exist'); + + cy.get('@input').should('exist'); + + cy.get('@label').should('exist'); + + cy.get('@icon').should('exist'); + cy.get('@slotIcon').should('exist'); + }); + + it('should have mandatory attributes', () => { + cy.get('@card-control').should('have.attr', 'data-version'); + cy.get('@card-control').should('have.attr', 'label').and('eq', 'Label'); + cy.get('@card-control').should('have.attr', 'type').and('eq', 'checkbox'); + + cy.get('@input').then($input => { + const controlId = $input.attr('id'); + + cy.get('@input') + .should('have.attr', 'id') + .and('contain', 'PostCardControl_') + .and('eq', controlId); + cy.get('@input').should('have.attr', 'type').and('eq', 'checkbox'); + + cy.get('@label').should('have.attr', 'for').and('eq', controlId); + }); + }); + + it('should set label text according to "label" prop', () => { + cy.get('@label').should('have.text', 'Label'); + cy.get('@card-control').invoke('attr', 'label', 'Lorem ipsum'); + cy.get('@label').should('have.text', 'Lorem ipsum'); + }); + + it('should render label also with empty string, but log an error', () => { + cy.get('@card-control').invoke('attr', 'label', ''); + cy.get('@label').should('exist').and('have.text', ''); + cy.get('@consoleError') + .invoke('getCalls') + .then(calls => { + expect(calls[0].args[0].message).to.eq( + 'The "post-card-control" element requires its "label" property to be set.', + ); + }); + }); + + it('should set description text according to "description" prop', () => { + cy.get('@card-control').find('.card-control--description').should('not.exist'); + cy.get('@card-control') + .invoke('attr', 'description', 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr.') + .find('.card-control--description') + .should('exist') + .and('have.text', 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr.'); + }); + + it('should only render description, when "description" prop is not an empty string', () => { + cy.get('@card-control') + .invoke('attr', 'description', '') + .find('.card-control--description') + .should('not.exist'); + }); + + it('should set input "type" attr according to "type" prop', () => { + cy.get('@card-control').invoke('attr', 'type', 'radio'); + cy.get('@input').should('have.attr', 'type').and('eq', 'radio'); + cy.get('@card-control').invoke('attr', 'type', 'checkbox'); + cy.get('@input').should('have.attr', 'type').and('eq', 'checkbox'); + }); + + it('should log an error when "type" prop is not defined', () => { + cy.get('@card-control').invoke('attr', 'type', ''); + cy.get('@consoleError') + .invoke('getCalls') + .then(calls => { + expect(calls[0].args[0].message).to.eq( + 'The "post-card-control" element requires its "type" prop to be one of either "checkbox" or "radio".', + ); + }); + }); + + it('should set input "name" attr according to "name" prop', () => { + cy.get('@input').should('not.have.attr', 'name'); + cy.get('@card-control').invoke('attr', 'name', 'custom-name'); + cy.get('@input').should('have.attr', 'name').and('eq', 'custom-name'); + cy.get('@card-control').invoke('removeAttr', 'name'); + cy.get('@input').should('not.have.attr', 'name'); + }); + + it('should set input "value" attr according to "value" prop', () => { + cy.get('@input').should('not.have.attr', 'value'); + cy.get('@card-control').invoke('attr', 'value', 'custom-value'); + cy.get('@input').should('have.attr', 'value').and('eq', 'custom-value'); + cy.get('@card-control').invoke('removeAttr', 'value'); + cy.get('@input').should('not.have.attr', 'value'); + }); + + it('should set input "checked" prop according to "checked" prop', () => { + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('have.prop', 'checked').and('eq', false); + cy.get('@card-control').invoke('attr', 'checked', true); + cy.get('@wrapper').should('have.class', 'is-checked'); + cy.get('@input').should('have.prop', 'checked').and('eq', true); + cy.get('@card-control').invoke('removeAttr', 'checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('have.prop', 'checked').and('eq', false); + }); + + it('should set input "disabled" attr according to "disbled" prop', () => { + cy.get('@wrapper').should('not.have.class', 'is-disabled'); + cy.get('@input').should('not.have.attr', 'aria-disabled'); + cy.get('@card-control').invoke('attr', 'disabled', true); + cy.get('@wrapper').should('have.class', 'is-disabled'); + cy.get('@input').should('have.attr', 'aria-disabled'); + cy.get('@card-control').invoke('removeAttr', 'disabled'); + cy.get('@wrapper').should('not.have.class', 'is-disabled'); + cy.get('@input').should('not.have.attr', 'aria-disabled'); + }); + + it('should set validation state according to "validity" prop', () => { + cy.get('@wrapper').should('not.have.class', 'is-valid').and('not.have.class', 'is-invalid'); + cy.get('@card-control').invoke('attr', 'validity', ''); + cy.get('@wrapper').should('have.class', 'is-valid').and('not.have.class', 'is-invalid'); + cy.get('@card-control').invoke('attr', 'validity', 'anything-but-false'); + cy.get('@wrapper').should('have.class', 'is-valid').and('not.have.class', 'is-invalid'); + cy.get('@card-control').invoke('attr', 'validity', true); + cy.get('@wrapper').should('have.class', 'is-valid').and('not.have.class', 'is-invalid'); + cy.get('@card-control').invoke('attr', 'validity', false); + cy.get('@wrapper').should('not.have.class', 'is-valid').and('have.class', 'is-invalid'); + }); + + it('should set icon "name" attr according to "icon" prop', () => { + cy.get('@slotIcon').find('post-icon').should('not.exist'); + cy.get('@card-control').invoke('attr', 'icon', '1000'); + cy.get('@slotIcon') + .find('post-icon') + .should('exist') + .find('[style*="/1000.svg"]') + .should('exist'); + cy.get('@card-control').invoke('removeAttr', 'icon'); + cy.get('@slotIcon').find('post-icon').should('not.exist'); + }); + }); + + describe('Events', () => { + beforeEach(() => { + cy.getComponent('card-control', CARDCONTROL_ID); + + cy.get('@card-control').find('.card-control').as('wrapper'); + cy.get('@card-control').find('input.card-control--input').as('input'); + }); + + it('should toggle when clicked or by typing {space}', () => { + cy.get('@input').should('not.be.checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked').click(); + cy.get('@input').should('be.checked'); + cy.get('@wrapper').should('have.class', 'is-checked').click(); + cy.get('@input').should('not.be.checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked'); + + cy.get('@input').type(' ').should('be.checked'); + cy.get('@wrapper').should('have.class', 'is-checked'); + cy.get('@input').focus().type(' ').should('not.be.checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked'); + }); + + it('should not toggle when disabled', () => { + cy.get('@card-control').invoke('attr', 'disabled', true); + + cy.get('@input').should('not.be.checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked').click(); + cy.get('@input').should('not.be.checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked'); + + cy.get('@input').type(' ').should('not.be.checked'); + cy.get('@wrapper').should('not.have.class', 'is-checked'); + }); + + it('should toggle class "is-focused" when focused/blured', () => { + cy.get('@wrapper').should('not.have.class', 'is-focused'); + cy.get('@input').should('not.have.focus').focus(); + + cy.get('@wrapper').should('have.class', 'is-focused'); + cy.get('@input').should('have.focus').blur({ force: true }); + + cy.get('@wrapper').should('not.have.class', 'is-focused'); + cy.get('@input').should('not.have.focus'); + }); + + it('should emit input and change events when toggled', () => { + let inputEventCallCount = 0; + let changeEventCallCount = 0; + + cy.get('@card-control').then($cardControl => { + $cardControl.get(0).addEventListener('input', () => inputEventCallCount++); + $cardControl.get(0).addEventListener('change', () => changeEventCallCount++); + }); + + cy.get('@wrapper') + .click() + .then(() => { + expect(inputEventCallCount).to.eq(1); + expect(changeEventCallCount).to.eq(1); + }) + .click() + .then(() => { + expect(inputEventCallCount).to.eq(2); + expect(changeEventCallCount).to.eq(2); + }); + + cy.get('@input') + .type(' ') + .then(() => { + expect(inputEventCallCount).to.eq(3); + expect(changeEventCallCount).to.eq(3); + }) + .focus() + .type(' ') + .then(() => { + expect(inputEventCallCount).to.eq(4); + expect(changeEventCallCount).to.eq(4); + }); + }); + + it('should not emit input and change events when disabled', () => { + cy.get('@card-control').invoke('attr', 'disabled', true); + + let inputEventCallCount = 0; + let changeEventCallCount = 0; + + cy.get('@card-control').then($cardControl => { + $cardControl.get(0).addEventListener('input', () => inputEventCallCount++); + $cardControl.get(0).addEventListener('change', () => changeEventCallCount++); + }); + + cy.get('@wrapper') + .click() + .then(() => { + expect(inputEventCallCount).to.eq(0); + expect(changeEventCallCount).to.eq(0); + }); + + cy.get('@input') + .type(' ') + .then(() => { + expect(inputEventCallCount).to.eq(0); + expect(changeEventCallCount).to.eq(0); + }); + }); + }); + + describe('Methods', () => { + beforeEach(() => { + cy.getComponent('card-control', CARDCONTROL_ID); + + cy.get('@card-control').find('.card-control').as('wrapper'); + cy.get('@card-control').find('input.card-control--input').as('input'); + }); + + it('should reset the checked and validity state to its initial values, when calling public "reset" method', () => { + cy.get('@card-control').invoke('attr', 'checked', true).invoke('attr', 'validity', true); + cy.get('@wrapper') + .should('have.class', 'is-checked') + .and('have.class', 'is-valid') + .and('not.have.class', 'is-invalid'); + cy.get('@card-control').then($cardControl => { + ($cardControl.get(0) as HTMLPostCardControlElement).reset(); + cy.get('@wrapper') + .should('not.have.class', 'is-checked') + .and('not.have.class', 'is-valid') + .and('not.have.class', 'is-invalid'); + }); + }); + }); + + describe('Form Association', { baseUrl: null, includeShadowDom: true }, () => { + beforeEach(() => { + cy.visit('./cypress/fixtures/post-card-control.form-association.test.html'); + + cy.get('form#AssociatedForm').as('form'); + cy.get('@form').find('button[type="reset"]').as('reset'); + cy.get('@form').find('button[type="submit"]').as('submit'); + cy.get('@form').find('fieldset#FieldsetCheckbox').as('fieldset'); + cy.get('@fieldset').find('post-card-control').as('card-control'); + cy.get('@card-control').find('.card-control').as('wrapper'); + cy.get('@card-control').find('input.card-control--input').as('input'); + cy.get('@card-control').find('label.card-control--label').as('label'); + cy.get('@card-control').find('.card-control--icon').as('icon'); + cy.get('@card-control').find('.card-control--icon slot[name="icon"]').as('slotIcon'); + }); + + it('should update surrounding form when toggled', () => { + cy.get('@form').then($form => { + cy.get('@wrapper').click(); + cy.checkFormDataPropValue($form, 'CardControl', 'on'); + cy.get('@wrapper').click(); + cy.checkFormDataPropValue($form, 'CardControl', null); + + cy.get('@input').type(' '); + cy.checkFormDataPropValue($form, 'CardControl', 'on'); + cy.get('@input').focus().type(' '); + cy.checkFormDataPropValue($form, 'CardControl', null); + }); + }); + + it('should reset surrounding form and itself when form is resetted', () => { + cy.get('@form').then($form => { + cy.get('@wrapper').click(); + cy.checkFormDataPropValue($form, 'CardControl', 'on'); + + cy.get('@reset').click(); + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('not.be.checked'); + cy.checkFormDataPropValue($form, 'CardControl', null); + }); + }); + + it('should not update surrounding form when disabled', () => { + cy.get('@form').then($form => { + cy.get('@card-control').invoke('attr', 'checked', true).invoke('attr', 'disabled', true); + + cy.get('@wrapper').should('have.class', 'is-checked').and('have.class', 'is-disabled'); + cy.get('@input').should('be.checked').and('have.attr', 'aria-disabled'); + cy.checkFormDataPropValue($form, 'CardControl', null); + }); + }); + + it('should be disable when surrounding fieldset element is disabled', () => { + cy.get('@form').then($form => { + cy.get('@fieldset').invoke('attr', 'disabled', true).should('have.attr', 'disabled'); + cy.get('@card-control').invoke('attr', 'checked', true); + + cy.get('@wrapper').should('have.class', 'is-checked').and('have.class', 'is-disabled'); + cy.get('@input').should('be.checked').and('have.attr', 'aria-disabled'); + cy.checkFormDataPropValue($form, 'CardControl', null); + }); + }); + + it('should not update surrounding form when name is not set', () => { + cy.get('@form').then($form => { + cy.get('@card-control') + .invoke('attr', 'checked', true) + .invoke('removeAttr', 'name') + .should('not.have.attr', 'name'); + + cy.get('@wrapper').should('have.class', 'is-checked'); + cy.get('@input').should('be.checked'); + cy.checkFormDataPropValue($form, 'CardControl', null); + }); + }); + }); + + describe('Radio Group', { baseUrl: null, includeShadowDom: true }, () => { + beforeEach(() => { + cy.visit('./cypress/fixtures/post-card-control.form-association.test.html'); + + cy.get('form#AssociatedForm').as('form'); + cy.get('@form').find('fieldset#FieldsetRadioGroup').as('fieldset'); + cy.get('@fieldset').find('post-card-control[name="CardControlGroup"]').as('card-control'); + cy.get('@card-control').find('.card-control').as('wrapper'); + cy.get('@wrapper').find('input.card-control--input').as('input'); + }); + + it('should only have its first group member focussable, when none is checked', () => { + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('not.be.checked'); + + cy.get('@input').each(($input, i) => { + cy.wrap($input) + .should('have.attr', 'tabindex') + .and('eq', i === 0 ? '0' : '-1'); + }); + }); + + it('should only have one checked group member', () => { + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('not.be.checked'); + + cy.get('@wrapper').each($wrapper => { + cy.wrap($wrapper).click(); + cy.get('@input').filter(':checked').its('length').should('eq', 1); + }); + }); + + it('should only have its checked group member focussable, when one is checked', () => { + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('not.be.checked').eq(1).type(' '); + + cy.get('@input').each(($input, i) => { + cy.wrap($input) + .should('have.attr', 'tabindex') + .and('eq', i === 1 ? '0' : '-1'); + }); + }); + + it('should be checked when focused + keydown {space}', () => { + cy.get('@wrapper').should('not.have.class', 'is-checked'); + cy.get('@input').should('not.be.checked'); + + cy.get('@input').each($input => { + cy.wrap($input).type(' ').should('be.checked'); + }); + }); + + it('should be checked when focused + keydown {space} on the same control multiple times', () => { + cy.get('@input').each($input => { + cy.wrap($input).type(' ').should('be.checked'); + cy.wrap($input).type(' ').should('be.checked'); + cy.wrap($input).type(' ').should('be.checked'); + }); + }); + + it('should check next group member, when focused + keydown {downArrow | rightArrow}', () => { + cy.get('@input') + .its('length') + .then(length => { + cy.get('@input').each(($input, i) => { + cy.wrap($input).type('{downArrow}'); + cy.get('@input') + .eq(i + 1 < length ? i + 1 : 0) + .should('be.checked'); + }); + + cy.get('@input').each(($input, i) => { + cy.wrap($input).type('{rightArrow}'); + cy.get('@input') + .eq(i + 1 < length ? i + 1 : 0) + .should('be.checked'); + }); + }); + }); + + it('should check previous group member, when focused + keydown {upArrow | leftArrow}', () => { + cy.get('@input') + .its('length') + .then(length => { + let $input = cy.get('@input').eq(0); + + while (length > 0) { + $input.type('{upArrow}'); + $input = cy.get('@input').eq(--length).should('be.checked'); + } + }) + .then(length => { + let $input = cy.get('@input').eq(0); + + while (length > 0) { + $input.type('{leftArrow}'); + $input = cy.get('@input').eq(--length).should('be.checked'); + } + }); + }); + + it('should update surrounding form when checked', () => { + cy.get('@form').then($form => { + cy.get('@wrapper').each(($wrapper, i) => { + cy.wrap($wrapper).click(); + cy.checkFormDataPropValue($form, 'CardControlGroup', i.toString()); + }); + + cy.get('@input').each(($input, i) => { + cy.wrap($input).type(' '); + cy.checkFormDataPropValue($form, 'CardControlGroup', i.toString()); + }); + }); + }); + + it('should not update the surrounding form value, when a disabled group member has been checked by keyboard', () => { + cy.get('@card-control').eq(1).invoke('attr', 'disabled', true); + cy.get('@wrapper').eq(1).should('have.class', 'is-disabled'); + cy.get('@input').eq(1).should('have.attr', 'aria-disabled'); + + let formValue = null; + + cy.get('@form').then($form => { + cy.get('@input').each(($input, i) => { + if (i !== 1) formValue = i.toString(); + cy.wrap($input).type(' '); + cy.checkFormDataPropValue($form, 'CardControlGroup', formValue); + }); + }); + }); + }); + + describe('Accessibility', () => { + it('Has no detectable a11y violations on load for all variants', () => { + cy.getSnapshots('card-control'); + cy.checkA11y('#root-inner'); + }); + }); +}); diff --git a/packages/components/cypress/fixtures/post-card-control.form-association.test.html b/packages/components/cypress/fixtures/post-card-control.form-association.test.html new file mode 100644 index 0000000000..8a06dfcfb3 --- /dev/null +++ b/packages/components/cypress/fixtures/post-card-control.form-association.test.html @@ -0,0 +1,50 @@ + + + + + + Document + + + + +
+
+ Legend Checkbox + +
+ +
+ Legend RadioGroup + + + + + + + + + + +
+
+ + +
+
+ + diff --git a/packages/components/cypress/support/commands.ts b/packages/components/cypress/support/commands.ts index e51d53405a..29e8f58b8c 100644 --- a/packages/components/cypress/support/commands.ts +++ b/packages/components/cypress/support/commands.ts @@ -76,3 +76,11 @@ Cypress.Commands.add( }); }, ); + +Cypress.Commands.add( + 'checkFormDataPropValue', + ($form: JQuery, key: string, value: any) => { + const formControlData = new FormData($form.get(0) as HTMLFormElement).get(key); + expect(formControlData).to.be.eq(value); + }, +); diff --git a/packages/components/cypress/support/index.d.ts b/packages/components/cypress/support/index.d.ts index 09f021d700..d7b6a2cd32 100644 --- a/packages/components/cypress/support/index.d.ts +++ b/packages/components/cypress/support/index.d.ts @@ -7,6 +7,7 @@ declare global { controlledElementSelector: string, isExpanded: 'true' | 'false', ): Chainable; + checkFormDataPropValue($form: JQuery, key: string, value: any): Chainable; } } } diff --git a/packages/components/package.json b/packages/components/package.json index b763b14885..5ea2c6fd35 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -63,6 +63,7 @@ "eslint": "8.57.0", "eslint-plugin-react": "7.34.0", "rimraf": "5.0.5", + "rollup-plugin-postcss": "4.0.2", "sass": "1.72.0", "ts-jest": "29.1.2", "typescript": "4.9.5" diff --git a/packages/components/src/components.d.ts b/packages/components/src/components.d.ts index 547716b178..7ea32c17fa 100644 --- a/packages/components/src/components.d.ts +++ b/packages/components/src/components.d.ts @@ -70,6 +70,55 @@ export namespace Components { */ "type": AlertType; } + /** + * @class PostCardControl - representing a stencil component + */ + interface PostCardControl { + /** + * Defines the `checked` attribute of the control. If `true`, the control is selected at its value will be included in the forms data. + */ + "checked": boolean; + /** + * Defines the description in the control-label. + */ + "description": string; + /** + * Defines the `disabled` attribute of the control. If `true`, the user can not interact with the control and the controls value will not be included in the forms data. + */ + "disabled": boolean; + /** + * A hidden public method to reset the group controls `checked` state to `false`. + */ + "groupReset": () => Promise; + /** + * Defines the icon `name` inside of the card. If not set the icon will not show up. + */ + "icon": string; + /** + * Defines the text in the control-label. + */ + "label": string; + /** + * Defines the `name` attribute of the control. This is a required property, when the control should participate in a native `form`. If not specified, a native `form` will never contain this controls value. This is a required property, when the control is used with type `radio`. + */ + "name": string; + /** + * A public method to reset the controls `checked` and `validity` state. The validity state is set to `null`, so it's neither valid nor invalid. + */ + "reset": () => Promise; + /** + * Defines the `type` attribute of the control. + */ + "type": 'checkbox' | 'radio'; + /** + * Defines the validation `validity` of the control. To reset validity to an undefiend state, simply remove the attribute from the control. + */ + "validity": null | 'true' | 'false'; + /** + * Defines the `value` attribute of the control. This is a required property, when the control is used with type `radio`. + */ + "value": string; + } interface PostCollapsible { /** * If `true`, the element is initially collapsed otherwise it is displayed. @@ -251,6 +300,10 @@ export interface PostAlertCustomEvent extends CustomEvent { detail: T; target: HTMLPostAlertElement; } +export interface PostCardControlCustomEvent extends CustomEvent { + detail: T; + target: HTMLPostCardControlElement; +} export interface PostCollapsibleCustomEvent extends CustomEvent { detail: T; target: HTMLPostCollapsibleElement; @@ -297,6 +350,27 @@ declare global { prototype: HTMLPostAlertElement; new (): HTMLPostAlertElement; }; + interface HTMLPostCardControlElementEventMap { + "input": { state: boolean; value: string }; + "change": { state: boolean; value: string }; + } + /** + * @class PostCardControl - representing a stencil component + */ + interface HTMLPostCardControlElement extends Components.PostCardControl, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLPostCardControlElement, ev: PostCardControlCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLPostCardControlElement, ev: PostCardControlCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLPostCardControlElement: { + prototype: HTMLPostCardControlElement; + new (): HTMLPostCardControlElement; + }; interface HTMLPostCollapsibleElementEventMap { "collapseChange": boolean; } @@ -409,6 +483,7 @@ declare global { "post-accordion": HTMLPostAccordionElement; "post-accordion-item": HTMLPostAccordionItemElement; "post-alert": HTMLPostAlertElement; + "post-card-control": HTMLPostCardControlElement; "post-collapsible": HTMLPostCollapsibleElement; "post-icon": HTMLPostIconElement; "post-popover": HTMLPostPopoverElement; @@ -464,6 +539,55 @@ declare namespace LocalJSX { */ "type"?: AlertType; } + /** + * @class PostCardControl - representing a stencil component + */ + interface PostCardControl { + /** + * Defines the `checked` attribute of the control. If `true`, the control is selected at its value will be included in the forms data. + */ + "checked"?: boolean; + /** + * Defines the description in the control-label. + */ + "description"?: string; + /** + * Defines the `disabled` attribute of the control. If `true`, the user can not interact with the control and the controls value will not be included in the forms data. + */ + "disabled"?: boolean; + /** + * Defines the icon `name` inside of the card. If not set the icon will not show up. + */ + "icon"?: string; + /** + * Defines the text in the control-label. + */ + "label": string; + /** + * Defines the `name` attribute of the control. This is a required property, when the control should participate in a native `form`. If not specified, a native `form` will never contain this controls value. This is a required property, when the control is used with type `radio`. + */ + "name"?: string; + /** + * An event emitted whenever the components checked state is toggled. The event payload (emitted under `event.detail.state`) is a boolean: `true` if the component is checked, `false` if it is unchecked. If the component is used with type `radio`, it will only emit this event, when the checked state is changing to `true`. + */ + "onChange"?: (event: PostCardControlCustomEvent<{ state: boolean; value: string }>) => void; + /** + * An event emitted whenever the components checked state is toggled. The event payload (emitted under `event.detail.state`) is a boolean: `true` if the component is checked, `false` if it is unchecked. + */ + "onInput"?: (event: PostCardControlCustomEvent<{ state: boolean; value: string }>) => void; + /** + * Defines the `type` attribute of the control. + */ + "type": 'checkbox' | 'radio'; + /** + * Defines the validation `validity` of the control. To reset validity to an undefiend state, simply remove the attribute from the control. + */ + "validity"?: null | 'true' | 'false'; + /** + * Defines the `value` attribute of the control. This is a required property, when the control is used with type `radio`. + */ + "value"?: string; + } interface PostCollapsible { /** * If `true`, the element is initially collapsed otherwise it is displayed. @@ -611,6 +735,7 @@ declare namespace LocalJSX { "post-accordion": PostAccordion; "post-accordion-item": PostAccordionItem; "post-alert": PostAlert; + "post-card-control": PostCardControl; "post-collapsible": PostCollapsible; "post-icon": PostIcon; "post-popover": PostPopover; @@ -630,6 +755,10 @@ declare module "@stencil/core" { "post-accordion": LocalJSX.PostAccordion & JSXBase.HTMLAttributes; "post-accordion-item": LocalJSX.PostAccordionItem & JSXBase.HTMLAttributes; "post-alert": LocalJSX.PostAlert & JSXBase.HTMLAttributes; + /** + * @class PostCardControl - representing a stencil component + */ + "post-card-control": LocalJSX.PostCardControl & JSXBase.HTMLAttributes; "post-collapsible": LocalJSX.PostCollapsible & JSXBase.HTMLAttributes; /** * @class PostIcon - representing a stencil component diff --git a/packages/components/src/components/post-card-control/post-card-control.module.scss b/packages/components/src/components/post-card-control/post-card-control.module.scss new file mode 100644 index 0000000000..f843459b36 --- /dev/null +++ b/packages/components/src/components/post-card-control/post-card-control.module.scss @@ -0,0 +1,5 @@ +@use '@swisspost/design-system-styles/core' as post; + +:export { + dark-bg-selectors: [post.$dark-backgrounds]; +} diff --git a/packages/components/src/components/post-card-control/post-card-control.scss b/packages/components/src/components/post-card-control/post-card-control.scss new file mode 100644 index 0000000000..e2ba443d2a --- /dev/null +++ b/packages/components/src/components/post-card-control/post-card-control.scss @@ -0,0 +1,246 @@ +@use '@swisspost/design-system-styles/core' as post; +@use '@swisspost/design-system-styles/components/form-check'; + +:host { + display: flex; + width: 100%; +} + +:host-context(fieldset) { + &:host(:not(:last-child)) { + .card-control { + margin-bottom: post.$size-regular; + } + } +} + +.card-control { + --post-card-control-border-color: #{post.$gray-60}; + --post-card-control-bg: #{post.$white}; + --post-card-control-color: #{post.$gray-80}; + --post-card-control-input-border-color: #{post.$gray-80}; + --post-card-control-input-bg: #{post.$white}; + + flex-basis: 100%; + display: flex; + gap: 0 post.$size-mini; + padding: post.$size-regular; + background-color: var(--post-card-control-bg); + border: post.$size-line solid var(--post-card-control-border-color); + border-radius: post.$border-radius; + color: var(--post-card-control-color); + + cursor: pointer; + transition: background-color 100ms linear, border-color 100ms linear; + + .card-control--input { + flex: 0 0 auto; + margin: post.$size-micro 0; + background-color: var(--post-card-control-input-bg); + border-color: var(--post-card-control-input-border-color) !important; + color: var(--post-card-control-input-border-color) !important; + cursor: inherit; + transition: border-color 100ms ease-in-out; + + &:focus, + &:focus-visible { + box-shadow: none; + } + + ~ .card-control--label { + flex-grow: 2; + margin: post.$size-micro 0; + color: inherit !important; + pointer-events: none; + } + } + + .card-control--description { + font-size: 0.75rem; + } + + .card-control--icon { + flex: 0 0 auto; + width: post.$size-big; + height: post.$size-big; + pointer-events: none; + + > slot { + > * { + width: 100%; + height: 100%; + } + } + } + + &:not(.is-disabled) { + // order matters! + // because we only overwrite the props, which need to be different from one selector to the other. + + &.is-checked { + --post-card-control-border-color: #{post.$black}; + --post-card-control-bg: #{post.$yellow}; + } + + &.is-invalid { + --post-card-control-border-color: #{post.$danger}; + --post-card-control-color: #{post.$danger}; + --post-card-control-input-border-color: #{post.$danger}; + } + + &:hover { + --post-card-control-border-color: #{post.$gray-80}; + --post-card-control-bg: #{post.$gray-60}; + --post-card-control-color: #{post.$white}; + --post-card-control-input-border-color: #{post.$black}; + } + } + + // show focus even if is-disabled, because aria-disabled allows focus at any moment + &.is-focused { + &:where(:has(.card-control--input:focus-visible)) { + outline-offset: post.$input-focus-outline-thickness; + outline: post.$input-focus-outline-thickness solid post.$outline-color; + } + } + + &.is-disabled { + --post-card-control-border-color: #{post.$gray-60}; + --post-card-control-bg: transparent; + --post-card-control-color: #{post.$gray-60}; + --post-card-control-input-border-color: #{post.$gray-60}; + --post-card-control-input-bg: transparent; + + border-style: dashed; + text-decoration: line-through; + cursor: default; + + .card-control--input { + border-style: dashed; + } + } + + :host-context(:is(#{post.$dark-backgrounds})) & { + --post-card-control-border-color: #{post.$white}; + --post-card-control-bg: transparent; + --post-card-control-color: #{post.$white}; + --post-card-control-input-border-color: #{post.$white}; + --post-card-control-input-bg: transparent; + + &:not(.is-disabled) { + // order matters! + // because we only overwrite the props, which need to be different from one selector to the other. + + &.is-checked { + --post-card-control-border-color: #{post.$yellow}; + --post-card-control-bg: #{post.$yellow}; + --post-card-control-color: #{post.$gray-80}; + --post-card-control-input-border-color: #{post.$gray-80}; + --post-card-control-input-bg: #{post.$white}; + + &.is-invalid { + --post-card-control-bg: #{post.$yellow}; + } + } + + &.is-invalid { + --post-card-control-border-color: #{post.$danger}; + --post-card-control-bg: #{post.$error-background}; + --post-card-control-color: #{post.$danger}; + --post-card-control-input-border-color: #{post.$danger}; + --post-card-control-input-bg: #{post.$white}; + } + + &:hover { + --post-card-control-border-color: #{post.$black}; + --post-card-control-bg: #{post.$gray-20}; + --post-card-control-color: #{post.$black}; + --post-card-control-input-border-color: #{post.$black}; + --post-card-control-input-bg: #{post.$white}; + } + } + + // show focus even if is-disabled, because aria-disabled allows focus at any moment + &.is-focused { + &:where(:has(.card-control--input:focus-visible)) { + outline-color: post.$white; + } + } + + // TODO: update white alpha colors with design-system alpha colors, once they are defined + &.is-disabled { + --post-card-control-border-color: #{#{rgba(post.$white, 0.8)}}; + --post-card-control-bg: transparent; + --post-card-control-color: #{#{rgba(post.$white, 0.8)}}; + --post-card-control-input-border-color: #{#{rgba(post.$white, 0.8)}}; + --post-card-control-input-bg: transparent; + } + } +} + +// remove as soon as all browser support :host-context() +// https://caniuse.com/?search=%3Ahost-context() +:host(:not(:last-child)) { + .card-control[data-host-context*='fieldset'] { + margin-bottom: post.$size-regular; + } +} + +@each $bg in post.$dark-backgrounds { + .card-control[data-host-context*='#{$bg}'] { + --post-card-control-border-color: #{post.$white}; + --post-card-control-bg: transparent; + --post-card-control-color: #{post.$white}; + --post-card-control-input-border-color: #{post.$white}; + --post-card-control-input-bg: transparent; + + &:not(.is-disabled) { + // order matters! + // because we only overwrite the props, which need to be different from one selector to the other. + + &.is-checked { + --post-card-control-border-color: #{post.$yellow}; + --post-card-control-bg: #{post.$yellow}; + --post-card-control-color: #{post.$gray-80}; + --post-card-control-input-border-color: #{post.$gray-80}; + --post-card-control-input-bg: #{post.$white}; + + &.is-invalid { + --post-card-control-bg: #{post.$yellow}; + } + } + + &.is-invalid { + --post-card-control-border-color: #{post.$danger}; + --post-card-control-bg: #{post.$error-background}; + --post-card-control-color: #{post.$danger}; + --post-card-control-input-border-color: #{post.$danger}; + --post-card-control-input-bg: #{post.$white}; + } + + &:hover { + --post-card-control-border-color: #{post.$black}; + --post-card-control-bg: #{post.$gray-20}; + --post-card-control-color: #{post.$black}; + --post-card-control-input-border-color: #{post.$black}; + --post-card-control-input-bg: #{post.$white}; + } + } + + // show focus even if is-disabled, because aria-disabled allows focus at any moment + &.is-focused { + &:where(:has(.card-control--input:focus-visible)) { + outline-color: post.$white; + } + } + + // TODO: update white alpha colors with design-system alpha colors, once they are defined + &.is-disabled { + --post-card-control-border-color: #{#{rgba(post.$white, 0.8)}}; + --post-card-control-bg: transparent; + --post-card-control-color: #{#{rgba(post.$white, 0.8)}}; + --post-card-control-input-border-color: #{#{rgba(post.$white, 0.8)}}; + --post-card-control-input-bg: transparent; + } + } +} diff --git a/packages/components/src/components/post-card-control/post-card-control.tsx b/packages/components/src/components/post-card-control/post-card-control.tsx new file mode 100644 index 0000000000..dffe7f05f0 --- /dev/null +++ b/packages/components/src/components/post-card-control/post-card-control.tsx @@ -0,0 +1,422 @@ +import { + AttachInternals, + Component, + Element, + Event, + EventEmitter, + h, + Host, + Method, + Prop, + State, + Watch, +} from '@stencil/core'; +import { checkNonEmpty, checkOneOf } from '../../utils'; +import { version } from '../../../package.json'; + +// remove as soon as all browser support :host-context() +// https://caniuse.com/?search=%3Ahost-context() +import scss from './post-card-control.module.scss'; +import { parse } from '../../utils/sass-export'; + +const SCSS_VARIABLES = parse(scss); + +let cardControlIds = 0; + +/** + * @class PostCardControl - representing a stencil component + * + * @slot icon - Content to place in the named `icon` slot.

Markup accepted: inline content.
It is only meant for img or svg elements and overrides the `icon` property.

+ */ +@Component({ + tag: 'post-card-control', + styleUrl: 'post-card-control.scss', + shadow: true, + formAssociated: true, +}) +export class PostCardControl { + private readonly KEYCODES = { + SPACE: 'Space', + LEFT: 'ArrowLeft', + UP: 'ArrowUp', + RIGHT: 'ArrowRight', + DOWN: 'ArrowDown', + }; + + private group = { + hosts: [], + members: [], + first: null, + last: null, + checked: null, + focused: null, + }; + + private control: HTMLInputElement; + private controlId = `PostCardControl_${cardControlIds++}`; + private initialChecked: boolean; + + @Element() host: HTMLPostCardControlElement; + + @State() focused = false; + + @AttachInternals() private internals: ElementInternals; + + /** + * Defines the text in the control-label. + */ + @Prop() readonly label!: string; + + /** + * Defines the description in the control-label. + */ + @Prop() readonly description: string = null; + + /** + * Defines the `type` attribute of the control. + */ + @Prop() readonly type!: 'checkbox' | 'radio'; + + /** + * Defines the `name` attribute of the control. + * This is a required property, when the control should participate in a native `form`. If not specified, a native `form` will never contain this controls value. + * This is a required property, when the control is used with type `radio`. + */ + @Prop() readonly name: string = null; + + /** + * Defines the `value` attribute of the control. This is a required property, when the control is used with type `radio`. + */ + @Prop() readonly value: string = null; + + /** + * Defines the `checked` attribute of the control. If `true`, the control is selected at its value will be included in the forms data. + */ + @Prop({ mutable: true }) checked = false; + + /** + * Defines the `disabled` attribute of the control. If `true`, the user can not interact with the control and the controls value will not be included in the forms data. + */ + @Prop({ mutable: true }) disabled = false; + + /** + * Defines the validation `validity` of the control. + * To reset validity to an undefiend state, simply remove the attribute from the control. + */ + @Prop({ mutable: true }) validity: null | 'true' | 'false' = null; + + /** + * Defines the icon `name` inside of the card. + * If not set the icon will not show up. + */ + @Prop() readonly icon: string = null; + + /** + * An event emitted whenever the components checked state is toggled. + * The event payload (emitted under `event.detail.state`) is a boolean: `true` if the component is checked, `false` if it is unchecked. + */ + @Event() input: EventEmitter<{ state: boolean; value: string }>; + + /** + * An event emitted whenever the components checked state is toggled. + * The event payload (emitted under `event.detail.state`) is a boolean: `true` if the component is checked, `false` if it is unchecked. + * If the component is used with type `radio`, it will only emit this event, when the checked state is changing to `true`. + */ + @Event() change: EventEmitter<{ state: boolean; value: string }>; + + /** + * A public method to reset the controls `checked` and `validity` state. + * The validity state is set to `null`, so it's neither valid nor invalid. + */ + @Method() + async reset() { + this.validity = null; + this.controlSetChecked(this.initialChecked); + } + + /** + * A hidden public method to reset the group controls `checked` state to `false`. + */ + @Method() + async groupReset() { + if (this.disabled) this.control.checked = this.checked = false; + this.controlSetChecked(false); + } + + @Watch('label') + validateControlLabel(label = this.label) { + checkNonEmpty( + label, + 'The "post-card-control" element requires its "label" property to be set.', + ); + } + + @Watch('type') + validateControlType(type = this.type) { + checkOneOf( + type, + ['checkbox', 'radio'], + 'The "post-card-control" element requires its "type" prop to be one of either "checkbox" or "radio".', + ); + } + + @Watch('checked') + updateControlChecked(checked = this.checked) { + this.controlSetChecked(checked); + } + + @Watch('disabled') + updateControlDisbled() { + this.controlSetChecked(this.checked); + } + + constructor() { + this.cardClickHandler = this.cardClickHandler.bind(this); + this.controlClickHandler = this.controlClickHandler.bind(this); + this.controlChangeHandler = this.controlChangeHandler.bind(this); + this.controlFocusHandler = this.controlFocusHandler.bind(this); + this.controlKeyDownHandler = this.controlKeyDownHandler.bind(this); + } + + private cardClickHandler(e: Event) { + e.stopPropagation(); + + // if this was not the clicked element anyway, trigger click on control to change it + if (e.target !== this.control) this.control.click(); + } + + private controlClickHandler(e: Event) { + e.stopPropagation(); + + // if control is disabled do nothing + // else control value will fire a change event, which is handled in the controlChangeHandler method + if (this.disabled) e.preventDefault(); + } + + private controlChangeHandler(e: Event) { + e.stopPropagation(); + + this.groupCollectMembers(); + this.controlSetChecked(this.control.checked, e); + this.groupSetChecked(this.control, e); + } + + private controlFocusHandler() { + this.focused = this.host === document.activeElement; + } + + // https://googlechromelabs.github.io/howto-components/howto-radio-group/ + private controlKeyDownHandler(e: KeyboardEvent) { + if (this.type === 'radio') { + e.stopPropagation(); + if (Object.values(this.KEYCODES).includes(e.code)) e.preventDefault(); + + this.groupCollectMembers(); + + switch (e.code) { + case this.KEYCODES.UP: + case this.KEYCODES.LEFT: + this.groupSetChecked(this.groupGetPrev(), e); + break; + case this.KEYCODES.DOWN: + case this.KEYCODES.RIGHT: + this.groupSetChecked(this.groupGetNext(), e); + break; + case this.KEYCODES.SPACE: + this.groupSetChecked(this.control, e); + break; + default: + break; + } + } + } + + private controlSetChecked(checked: boolean, e?: Event) { + if (!this.control) return; + + if (this.disabled) { + this.internals.setFormValue(null); + } else { + this.control.checked = this.checked = checked; + this.internals.setFormValue(this.checked ? this.control.value : null); + + if (e) { + const isCheckbox = this.type === 'checkbox'; + const isRadioAndChecked = this.type === 'radio' && this.checked; + + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio + // if an event parameter is given and a native control would fire an event, emit the corresponding event to the light dom + if (isCheckbox || isRadioAndChecked) + this[e.type].emit({ state: this.checked, value: this.value }); + } + } + } + + private groupCollectMembers() { + if (this.type === 'radio' && this.name) { + this.group.hosts = Array.from( + document.querySelectorAll(`post-card-control[type="radio"][name="${this.name}"]`), + ); + + this.group.members = this.group.hosts + .map(m => m.shadowRoot.querySelector('input[type="radio"]')) + .filter(m => m !== null); + + if (this.group.members.length > 1) { + this.group.first = this.group.members[0]; + this.group.last = this.group.members[this.group.members.length - 1]; + this.group.checked = this.group.members.find(m => m.checked) ?? null; + this.group.focused = + this.group.members.find(m => m.getRootNode().host === document.activeElement) ?? + this.group.first; + + const focusableMember = this.group.checked || this.group.focused || this.group.first; + + this.group.members.forEach(m => { + m.tabIndex = m === focusableMember ? 0 : -1; + }); + } + } + } + + private groupGetPrev() { + const focusedIndex = this.group.members.findIndex(m => m.id === this.group.focused.id); + return this.group.members.find((_m, i) => i === focusedIndex - 1) ?? this.group.last; + } + + private groupGetNext() { + const focusedIndex = this.group.members.findIndex(m => m.id === this.group.focused.id); + return this.group.members.find((_m, i) => i === focusedIndex + 1) ?? this.group.first; + } + + private groupSetChecked(newChecked: HTMLInputElement, e: Event) { + if (this.group.members.length > 1) { + const isKeyboardEvent = e.type === 'keydown'; + const newIsAriaDisabled = newChecked.hasAttribute('aria-disabled'); + const newIndex = this.group.members.findIndex(m => m === newChecked); + + if (isKeyboardEvent) newChecked.focus(); + + // if new is disabled, do not reset/set anything + if (!newIsAriaDisabled) { + // reset all group members but the newChecked + this.group.hosts + .filter((_h, i) => i !== newIndex) + .forEach(h => { + h.groupReset(); + }); + + // if method was called by keyboard event, select newChecked + // else this has already been done by clicking on the newChecked element already + if (isKeyboardEvent) newChecked.click(); + } + } + } + + // remove as soon as all browser support the :host-context() selector + private readonly HOST_CONTEXT_FILTERS = ['fieldset', ...SCSS_VARIABLES['dark-bg-selectors']]; + private hostContext: string[]; + + private setHostContext() { + this.hostContext = []; + let element = this.host as HTMLElement; + + while (element) { + const localName = element.localName; + const id = element.id ? `#${element.id}` : ''; + const classes = + element.classList.length > 0 ? `.${Array.from(element.classList).join('.')}` : ''; + + this.hostContext.push(`${localName}${id}${classes}`); + element = element.parentElement; + } + + this.hostContext = this.hostContext.filter(ctx => + this.HOST_CONTEXT_FILTERS.find(f => ctx.includes(f)), + ); + } + + connectedCallback() { + // remove as soon as all browser support :host-context() + this.setHostContext(); + + this.initialChecked = this.checked; + } + + render() { + return ( + +
+ (this.control = el as HTMLInputElement)} + id={this.controlId} + class="card-control--input form-check-input" + type={this.type} + name={this.name} + value={this.value} + checked={this.checked} + aria-disabled={this.disabled} + aria-invalid={this.validity === 'false'} + onClick={this.controlClickHandler} + onInput={this.controlChangeHandler} + onChange={this.controlChangeHandler} + onFocus={this.controlFocusHandler} + onBlur={this.controlFocusHandler} + onKeyDown={this.controlKeyDownHandler} + /> + + + +
+ {this.icon ? : null} +
+
+
+ ); + } + + componentDidRender() { + this.groupCollectMembers(); + } + + componentDidLoad() { + this.validateControlLabel(); + this.validateControlType(); + } + + // https://stenciljs.com/docs/form-associated + /* eslint-disable @stencil-community/own-methods-must-be-private */ + formAssociatedCallback() { + this.controlSetChecked(this.checked); + } + + formDisabledCallback(disabled: boolean) { + this.disabled = disabled; + } + + formStateRestoreCallback(checked) { + this.controlSetChecked(checked); + } + + formResetCallback() { + this.reset(); + } + /* eslint-enable @stencil-community/own-methods-must-be-private */ +} diff --git a/packages/components/src/components/post-card-control/readme.md b/packages/components/src/components/post-card-control/readme.md new file mode 100644 index 0000000000..cd78493c3f --- /dev/null +++ b/packages/components/src/components/post-card-control/readme.md @@ -0,0 +1,77 @@ +# post-card-control + + + + + + +## Properties + +| Property | Attribute | Description | Type | Default | +| -------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- | ----------- | +| `checked` | `checked` | Defines the `checked` attribute of the control. If `true`, the control is selected at its value will be included in the forms data. | `boolean` | `false` | +| `description` | `description` | Defines the description in the control-label. | `string` | `null` | +| `disabled` | `disabled` | Defines the `disabled` attribute of the control. If `true`, the user can not interact with the control and the controls value will not be included in the forms data. | `boolean` | `false` | +| `icon` | `icon` | Defines the icon `name` inside of the card. If not set the icon will not show up. | `string` | `null` | +| `label` _(required)_ | `label` | Defines the text in the control-label. | `string` | `undefined` | +| `name` | `name` | Defines the `name` attribute of the control. This is a required property, when the control should participate in a native `form`. If not specified, a native `form` will never contain this controls value. This is a required property, when the control is used with type `radio`. | `string` | `null` | +| `type` _(required)_ | `type` | Defines the `type` attribute of the control. | `"checkbox" \| "radio"` | `undefined` | +| `validity` | `validity` | Defines the validation `validity` of the control. To reset validity to an undefiend state, simply remove the attribute from the control. | `"false" \| "true"` | `null` | +| `value` | `value` | Defines the `value` attribute of the control. This is a required property, when the control is used with type `radio`. | `string` | `null` | + + +## Events + +| Event | Description | Type | +| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | +| `change` | An event emitted whenever the components checked state is toggled. The event payload (emitted under `event.detail.state`) is a boolean: `true` if the component is checked, `false` if it is unchecked. If the component is used with type `radio`, it will only emit this event, when the checked state is changing to `true`. | `CustomEvent<{ state: boolean; value: string; }>` | +| `input` | An event emitted whenever the components checked state is toggled. The event payload (emitted under `event.detail.state`) is a boolean: `true` if the component is checked, `false` if it is unchecked. | `CustomEvent<{ state: boolean; value: string; }>` | + + +## Methods + +### `groupReset() => Promise` + +A hidden public method to reset the group controls `checked` state to `false`. + +#### Returns + +Type: `Promise` + + + +### `reset() => Promise` + +A public method to reset the controls `checked` and `validity` state. +The validity state is set to `null`, so it's neither valid nor invalid. + +#### Returns + +Type: `Promise` + + + + +## Slots + +| Slot | Description | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `"icon"` | Content to place in the named `icon` slot.

Markup accepted: inline content.
It is only meant for img or svg elements and overrides the `icon` property.

| + + +## Dependencies + +### Depends on + +- [post-icon](../post-icon) + +### Graph +```mermaid +graph TD; + post-card-control --> post-icon + style post-card-control fill:#f9f,stroke:#333,stroke-width:4px +``` + +---------------------------------------------- + +*Built with [StencilJS](https://stenciljs.com/)* diff --git a/packages/components/src/components/post-icon/readme.md b/packages/components/src/components/post-icon/readme.md index 4e275443ad..17b972971f 100644 --- a/packages/components/src/components/post-icon/readme.md +++ b/packages/components/src/components/post-icon/readme.md @@ -23,6 +23,7 @@ some content ### Used by - [post-alert](../post-alert) + - [post-card-control](../post-card-control) - [post-rating](../post-rating) - [post-tag](../post-tag) @@ -30,6 +31,7 @@ some content ```mermaid graph TD; post-alert --> post-icon + post-card-control --> post-icon post-rating --> post-icon post-tag --> post-icon style post-icon fill:#f9f,stroke:#333,stroke-width:4px diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 65e47e39bd..6ad5b611b6 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -4,6 +4,7 @@ export { Components, JSX } from './components'; export { PostAccordion } from './components/post-accordion/post-accordion'; export { PostAccordionItem } from './components/post-accordion-item/post-accordion-item'; export { PostAlert } from './components/post-alert/post-alert'; +export { PostCardControl } from './components/post-card-control/post-card-control'; export { PostCollapsible } from './components/post-collapsible/post-collapsible'; export { PostIcon } from './components/post-icon/post-icon'; export { PostPopover } from './components/post-popover/post-popover'; diff --git a/packages/components/src/utils/index.ts b/packages/components/src/utils/index.ts index 8b8e9fc00e..6756aaf369 100644 --- a/packages/components/src/utils/index.ts +++ b/packages/components/src/utils/index.ts @@ -1,2 +1,3 @@ export * from './property-checkers'; export * from './is-motion-reduced'; +export * from './sass-export'; diff --git a/packages/components/src/utils/sass-export.ts b/packages/components/src/utils/sass-export.ts new file mode 100644 index 0000000000..e5a18ef1f0 --- /dev/null +++ b/packages/components/src/utils/sass-export.ts @@ -0,0 +1,20 @@ +export function parse(scss: object) { + return Object.entries(scss).reduce((object, [path, value]) => { + let output = object; + + path.split('_').forEach((key, i, values) => { + const pathKey = key as keyof typeof output; + const normalized = /^\[.*\]$/.test(value) ? JSON.parse(value) : value; + const pathValue = i >= values.length - 1 ? normalized : output[pathKey] || {}; + + output[pathKey] = pathValue as never; + output = output[pathKey]; + }); + + return object; + }, {}); +} + +export function formatAsMap(obj: object) { + return JSON.stringify(obj, null, 2).replace(/[{[]/g, '(').replace(/[}\]]/g, ')'); +} diff --git a/packages/components/stencil.config.ts b/packages/components/stencil.config.ts index 2371a621f3..2f06439e84 100644 --- a/packages/components/stencil.config.ts +++ b/packages/components/stencil.config.ts @@ -1,5 +1,6 @@ import { Config } from '@stencil/core'; import { sass } from '@stencil/sass'; +import postcss from 'rollup-plugin-postcss'; import { reactOutputTarget } from '@stencil/react-output-target'; import { angularOutputTarget } from '@stencil/angular-output-target'; import { angularValueAccessorBindings } from './.config/bindings.angular'; @@ -50,6 +51,20 @@ export const config: Config = { includePaths: ['node_modules'], }), ], + rollupPlugins: { + before: [ + postcss({ + modules: true, + use: { + sass: { + includePaths: ['node_modules'], + }, + stylus: false, + less: false, + }, + }), + ], + }, testing: { testPathIgnorePatterns: [ '/dist/', diff --git a/packages/components/tsconfig.json b/packages/components/tsconfig.json index 46d74c1d44..1ddb3014e8 100644 --- a/packages/components/tsconfig.json +++ b/packages/components/tsconfig.json @@ -4,10 +4,7 @@ "allowUnreachableCode": false, "declaration": false, "experimentalDecorators": true, - "lib": [ - "dom", - "es2017" - ], + "lib": ["dom", "es2017"], "moduleResolution": "node", "module": "esnext", "target": "es2017", @@ -18,11 +15,6 @@ "resolveJsonModule": true, "skipLibCheck": true }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - "**/tests" - ] + "include": ["src", "types"], + "exclude": ["node_modules", "**/tests"] } diff --git a/packages/components/types/css-modules.ts b/packages/components/types/css-modules.ts new file mode 100644 index 0000000000..428dc96e0f --- /dev/null +++ b/packages/components/types/css-modules.ts @@ -0,0 +1,4 @@ +declare module '*.scss' { + const content: { [key: string]: string }; + export default content; +} diff --git a/packages/documentation/cypress/e2e/components/card.cy.ts b/packages/documentation/cypress/e2e/components/card.cy.ts index 10462d1dcf..4e6dfc474d 100644 --- a/packages/documentation/cypress/e2e/components/card.cy.ts +++ b/packages/documentation/cypress/e2e/components/card.cy.ts @@ -12,7 +12,7 @@ describe('Card', () => { 'heading-order': { enabled: false, }, - 'aria-prohibited-attr': { + 'aria-allowed-attr': { // aria-label attribute is used as a prop on post-icon enabled: false, }, diff --git a/packages/documentation/cypress/snapshots/components/card-control.snapshot.ts b/packages/documentation/cypress/snapshots/components/card-control.snapshot.ts new file mode 100644 index 0000000000..58bcc0fb6f --- /dev/null +++ b/packages/documentation/cypress/snapshots/components/card-control.snapshot.ts @@ -0,0 +1,7 @@ +describe('CardControl', () => { + it('default', () => { + cy.visit('/iframe.html?id=snapshots--card-control'); + cy.get('post-card-control.hydrated', { timeout: 30000 }).should('be.visible'); + cy.percySnapshot('CardControls', { widths: [1440] }); + }); +}); diff --git a/packages/documentation/src/stories/components/card-control/card-control-methods.sample.ts b/packages/documentation/src/stories/components/card-control/card-control-methods.sample.ts new file mode 100644 index 0000000000..57f8b6d3fb --- /dev/null +++ b/packages/documentation/src/stories/components/card-control/card-control-methods.sample.ts @@ -0,0 +1,2 @@ +const cardControl = document.querySelector('post-card-control') as HTMLPostCardControlElement; +cardControl.reset(); diff --git a/packages/documentation/src/stories/components/card-control/card-control.docs.mdx b/packages/documentation/src/stories/components/card-control/card-control.docs.mdx new file mode 100644 index 0000000000..3e5470f7c3 --- /dev/null +++ b/packages/documentation/src/stories/components/card-control/card-control.docs.mdx @@ -0,0 +1,72 @@ +import { Canvas, Controls, Meta, Source } from '@storybook/blocks'; +import * as CardControlStories from './card-control.stories'; +import LinkTo from '@storybook/addon-links/react'; +import SampleCardControlMethods from './card-control-methods.sample?raw'; + + + +# Card-Controls +

For a more specialized visualization of checkbox and/or radio elements.

+ + + + +## Installation + +The `` element is part of the `@swisspost/design-system-components` package. For more information, read the +getting started with components guide. + +## Examples + +### On dark background + + + +
+ +
+ +### Custom icon + +You can use our built-in icons by just adding the `icon` property with the name of the desired icon.
+If this is not enough, you can also use the named `icon` slot and add your very own custom icon. + +
Make sure you remove all the `width` and `height` attributes from the `img` or `svg` tag. Otherwise we can not ensure, our styles will work properly.
+ + + +### Form Integration + +You can use the component directly in your forms, the control value will be available in the `FormData` of the surrounding `
` element, just as you are used to from native input elements. + +

Update the control and submit or reset the form to see how its FormData value changes.

+ +
+ +
+ +### Lined up + +Change the `width` of a `` component, by putting it (for example) in a grid. +If you like to stretch all `` components within a row to the same `height`, simply add the class `.h-100` to them. + + +
+ +
+ +### Radio button group + +As you can create radio button groups with native `` elements, you can do the same with our `` component as well.
+Just add the same `name` attribute value to multiple `` components. + + + +### Custom Trigger +The `` offers a `reset` method to reset it to the initial state (`validity` and `checked` state). +The method can be called directly on the element itself. + + diff --git a/packages/documentation/src/stories/components/card-control/card-control.module.scss b/packages/documentation/src/stories/components/card-control/card-control.module.scss new file mode 100644 index 0000000000..2f116295ff --- /dev/null +++ b/packages/documentation/src/stories/components/card-control/card-control.module.scss @@ -0,0 +1,13 @@ +@use '@swisspost/design-system-styles/core' as post; + +:export { + @each $color, $value in post.$background-colors { + background_#{$color}: $value; + + @if (post.light-or-dark($value) == 'dark') { + dark_#{$color}: $value; + } @else { + light_#{$color}: $value; + } + } +} diff --git a/packages/documentation/src/stories/components/card-control/card-control.snapshot.stories.ts b/packages/documentation/src/stories/components/card-control/card-control.snapshot.stories.ts new file mode 100644 index 0000000000..9e664971b5 --- /dev/null +++ b/packages/documentation/src/stories/components/card-control/card-control.snapshot.stories.ts @@ -0,0 +1,51 @@ +import type { Args, StoryContext, StoryObj } from '@storybook/web-components'; +import meta, { Default } from './card-control.stories'; +import { html } from 'lit'; +import { bombArgs } from '../../../utils'; + +const { id, ...metaWithoutId } = meta; + +export default { + ...metaWithoutId, + title: 'Snapshots', +}; + +type Story = StoryObj; + +export const CardControl: Story = { + render: (_args: Args, context: StoryContext) => { + return html` +
+

CardControl

+ ${['bg-white', 'bg-dark'].map( + bg => html` +
+ ${context.argTypes.type.options.map( + (type: string) => html` +
+

type: ${type}

+ ${bombArgs({ + icon: ['1001'], + validity: ['null', true, false], + disabled: [false, true], + checked: [false, true], + type: [type], + label: ['Label'], + }).map((args: Args) => { + const description = Object.entries(args) + .filter(([key]) => !['label', 'type', 'icon'].includes(key)) + .map(([key, value]) => `${key}: ${value}`) + .join(', '); + + return Default.render?.({ ...context.args, ...args, description }, context); + })} +
+ `, + )} +
+ `, + )} +
+ `; + }, +}; diff --git a/packages/documentation/src/stories/components/card-control/card-control.stories.ts b/packages/documentation/src/stories/components/card-control/card-control.stories.ts new file mode 100644 index 0000000000..1a9effe8cd --- /dev/null +++ b/packages/documentation/src/stories/components/card-control/card-control.stories.ts @@ -0,0 +1,333 @@ +import { useArgs } from '@storybook/preview-api'; +import { Args, StoryContext, StoryObj } from '@storybook/web-components'; +import { MetaComponent } from '../../../../types'; +import { html, nothing } from 'lit'; +import { unsafeHTML } from 'lit/directives/unsafe-html.js'; +import { parse } from '../../../utils/sass-export'; +import './card-control.styles.scss'; +import scss from './card-control.module.scss'; + +const SCSS_VARIABLES: { [key: string]: string } = parse(scss); + +const meta: MetaComponent = { + id: '886fabcf-148b-4054-a2ec-4869668294fb', + title: 'Components/Forms/Card-Control', + component: 'post-card-control', + tags: ['package:WebComponents'], + args: { + 'label': 'Label', + 'description': '', + 'type': 'checkbox', + 'name': '', + 'value': '', + 'checked': '', + 'disabled': '', + 'validity': 'null', + 'icon': '', + 'slots-icon': '', + }, + argTypes: { + 'type': { + control: { + type: 'radio', + labels: { + checkbox: 'Checkbox', + radio: 'Radio', + }, + }, + options: ['checkbox', 'radio'], + }, + 'validity': { + control: { + type: 'radio', + labels: { + null: 'Default', + true: 'Valid', + false: 'Invalid', + }, + }, + options: ['null', 'true', 'false'], + table: { + type: { + summary: 'null | boolean', + }, + }, + }, + 'method-groupReset': { + table: { + disable: true, + }, + }, + }, +}; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + render: (args: Args) => { + const [, updateArgs] = useArgs(); + + const icon = html`${unsafeHTML(args['slots-icon'])} `; + + return html` + + ${args['slots-icon'] ? icon : null} + + `; + }, +}; + +export const DarkBackground: Story = { + parameters: { + docs: { + controls: { + include: ['Background-Color', 'type', 'checked', 'disabled', 'validity'], + }, + }, + }, + decorators: [ + (story, context) => + html`
+ ${story()} +
`, + ], + args: { + background: 'dark', + icon: '1001', + }, + argTypes: { + background: { + name: 'Background-Color', + description: 'The background color of a surrounding wrapper element.', + control: { + type: 'select', + }, + options: [...Object.keys(SCSS_VARIABLES.dark)], + }, + }, + render: Default.render, +}; + +export const CustomIcon: Story = { + args: { + 'slots-icon': + '', + }, + render: Default.render, +}; + +export const FormIntegration: Story = { + parameters: { + docs: { + controls: { + include: ['disabled fieldset', 'value', 'disabled'], + }, + }, + }, + args: { + name: 'checkbox', + checkboxFieldset: false, + radioValue: '', + radioDisabled: '', + radioFieldset: false, + }, + argTypes: { + value: { + description: 'Set the value of the `checkbox` card.', + table: { + category: 'Checkbox', + }, + }, + disabled: { + description: 'Set the disabled state of the `checkbox` card.', + table: { + category: 'Checkbox', + }, + }, + checkboxFieldset: { + name: 'disabled fieldset', + description: 'Set the `disabled` attribute of the `fieldset` around the `checkbox` card.', + control: { + type: 'boolean', + }, + table: { + category: 'Checkbox', + }, + }, + radioValue: { + name: 'value', + description: 'Set the value **prefix** of the `radio` cards.', + control: { + type: 'text', + }, + table: { + category: 'Radio', + }, + }, + radioDisabled: { + name: 'disabled', + description: 'Set the disabled state of the **second** `radio` card.', + control: { + type: 'boolean', + }, + table: { + category: 'Radio', + }, + }, + radioFieldset: { + name: 'disabled fieldset', + description: 'Set the `disabled` attribute of the `fieldset` around the `radio` cards.', + control: { + type: 'boolean', + }, + table: { + category: 'Radio', + }, + }, + }, + decorators: [ + story => html` + ${story()} +
+

FormData

+

Submit or reset the form to see how the FormData will look like.

+
{}
+
+ `, + ], + render: (args: Args, context: StoryContext) => { + return html` +
+ Legend + ${Default.render?.(args, context)} +
+
+ Legend + ${[1, 2, 3].map( + n => + html``, + )} +
+
+ + +
+ `; + }, +}; + +function formHandler(e: any) { + if (e.type === 'submit') e.preventDefault(); + + setTimeout(() => { + const formOutput = document.querySelector('#AssociatedFormOutput'); + const formData = Array.from(new FormData(e.target).entries()).reduce( + (acc, [k, v]) => Object.assign(acc, { [k]: v }), + {}, + ); + + if (formOutput) formOutput.innerHTML = JSON.stringify(formData, null, 2); + }); +} + +export const LinedUp: Story = { + parameters: { + controls: { + include: ['Columns', 'Full Height'], + }, + }, + args: { + colCount: 2, + fullHeight: false, + }, + argTypes: { + colCount: { + name: 'Columns', + description: 'Controls the amount of elements per row shown in the grid.', + control: { + type: 'inline-radio', + }, + options: [1, 2, 3, 4], + table: { + category: 'General', + }, + }, + fullHeight: { + name: 'Full Height', + description: 'Stretch elements in one row to the maximum height.', + control: { + type: 'boolean', + }, + table: { + category: 'General', + }, + }, + }, + render: (args: Args, context: StoryContext) => html` +
+ ${[1, 2, 3, 4, 5, 6].map( + i => html` +
+ ${Default.render?.( + { + class: args.fullHeight ? 'h-100' : null, + label: `Checkbox${i}`, + description: i === 6 ? '20.- per year' : null, + type: args.type, + disabled: i === 3, + validity: args.validity, + }, + context, + )} +
+ `, + )} +
+ `, +}; + +export const RadioGroup: Story = { + render: (args: Args, context: StoryContext) => html` +
+ Legend + ${[1, 2, 3, 4, 5, 6].map( + i => html` + ${Default.render?.( + { + label: `Radio${i}`, + type: 'radio', + name: 'RadioGroup_Name', + disabled: i > 3 && i < 6 ? true : null, + validity: args.validity, + }, + context, + )} + `, + )} +
+ `, +}; diff --git a/packages/documentation/src/stories/components/card-control/card-control.styles.scss b/packages/documentation/src/stories/components/card-control/card-control.styles.scss new file mode 100644 index 0000000000..dfff789c5a --- /dev/null +++ b/packages/documentation/src/stories/components/card-control/card-control.styles.scss @@ -0,0 +1,5 @@ +#story--886fabcf-148b-4054-a2ec-4869668294fb--lined-up { + post-card-control { + visibility: visible; + } +} diff --git a/packages/documentation/src/utils/sass-export.ts b/packages/documentation/src/utils/sass-export.ts index 76a59b9d25..e5a18ef1f0 100644 --- a/packages/documentation/src/utils/sass-export.ts +++ b/packages/documentation/src/utils/sass-export.ts @@ -1,22 +1,20 @@ export function parse(scss: object) { - let output: { [key: string]: any } = {}; - return Object.entries(scss).reduce((object, [path, value]) => { - let temp: any = object; + let output = object; - path.split('_').forEach((key: string, index: number, values: string[]) => { - const isJsonArray = typeof value === 'string' && /^\[.*\]$/.test(value); - const parsedValue = isJsonArray ? JSON.parse(value) : value; - const v = index === values.length - 1 ? parsedValue : temp[key] || {}; + path.split('_').forEach((key, i, values) => { + const pathKey = key as keyof typeof output; + const normalized = /^\[.*\]$/.test(value) ? JSON.parse(value) : value; + const pathValue = i >= values.length - 1 ? normalized : output[pathKey] || {}; - temp[key] = v; - temp = temp[key]; + output[pathKey] = pathValue as never; + output = output[pathKey]; }); return object; - }, output); + }, {}); } export function formatAsMap(obj: object) { - return JSON.stringify(obj, null, 2).replace(/[{\[]/g, '(').replace(/[}\]]/g, ')'); + return JSON.stringify(obj, null, 2).replace(/[{[]/g, '(').replace(/[}\]]/g, ')'); } diff --git a/packages/styles/src/components/form-check.scss b/packages/styles/src/components/form-check.scss index 7daaedea43..d0eb245bcf 100644 --- a/packages/styles/src/components/form-check.scss +++ b/packages/styles/src/components/form-check.scss @@ -44,7 +44,7 @@ display: inline-flex; flex: 0 auto; appearance: none; - background: none; + background: color.$white; height: form-check.$form-check-input-size; width: form-check.$form-check-input-size; border: form-check.$form-check-input-border-width solid diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17cd8eaa7a..5244c06a2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,7 +50,7 @@ importers: devDependencies: '@changesets/parse': specifier: '*' - version: 0.4.0 + version: 0.1.0 typescript: specifier: 4.9.5 version: 4.9.5 @@ -114,7 +114,7 @@ importers: version: 13.7.0 cypress-axe: specifier: 1.5.0 - version: 1.5.0(axe-core@4.8.4)(cypress@13.7.0) + version: 1.5.0(axe-core@4.7.0)(cypress@13.7.0) cypress-storybook: specifier: 0.5.1 version: 0.5.1(cypress@13.7.0) @@ -127,6 +127,9 @@ importers: rimraf: specifier: 5.0.5 version: 5.0.5 + rollup-plugin-postcss: + specifier: 4.0.2 + version: 4.0.2(postcss@8.4.35) sass: specifier: 1.72.0 version: 1.72.0 @@ -241,10 +244,10 @@ importers: dependencies: '@angular/common': specifier: ^16.0.0 || ^17.0.0 - version: 17.2.3(@angular/core@17.2.3)(rxjs@7.8.1) + version: 17.2.4(@angular/core@17.2.4)(rxjs@7.8.1) '@angular/core': specifier: ^16.0.0 || ^17.0.0 - version: 17.2.3(rxjs@7.8.1)(zone.js@0.14.4) + version: 17.2.4(rxjs@7.8.1)(zone.js@0.14.4) '@swisspost/design-system-components': specifier: workspace:2.1.0 version: link:../../../components @@ -503,7 +506,7 @@ importers: devDependencies: '@geometricpanda/storybook-addon-badges': specifier: 2.0.2 - version: 2.0.2(@storybook/blocks@7.6.17)(@storybook/components@7.6.17)(@storybook/core-events@7.6.17)(@storybook/manager-api@7.6.17)(@storybook/preview-api@7.6.17)(@storybook/theming@7.6.17)(@storybook/types@7.6.17)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.2(@storybook/blocks@7.6.17)(@storybook/components@7.6.17)(@storybook/core-events@7.6.17)(@storybook/manager-api@7.6.17)(@storybook/preview-api@7.6.17)(@storybook/theming@7.6.17)(@storybook/types@7.6.12)(react-dom@18.2.0)(react@18.2.0) '@lit/task': specifier: 1.0.0 version: 1.0.0 @@ -560,7 +563,7 @@ importers: version: 7.6.17(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0) '@storybook/web-components-vite': specifier: 7.6.17 - version: 7.6.17(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(vite@5.1.6) + version: 7.6.17(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(vite@5.0.12) '@types/css-modules': specifier: 1.0.5 version: 1.0.5 @@ -578,7 +581,7 @@ importers: version: 13.7.0 cypress-axe: specifier: 1.5.0 - version: 1.5.0(axe-core@4.8.4)(cypress@13.7.0) + version: 1.5.0(axe-core@4.7.0)(cypress@13.7.0) lit: specifier: 3.1.2 version: 3.1.2 @@ -699,7 +702,7 @@ importers: version: 3.1.2(cypress@13.7.0) '@stencil-community/eslint-plugin': specifier: 0.7.2 - version: 0.7.2(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-react@7.34.0)(eslint@8.57.0)(typescript@4.9.5) + version: 0.7.2(eslint-plugin-react@7.34.0)(typescript@4.9.5) '@stencil/core': specifier: 4.12.6 version: 4.12.6 @@ -744,7 +747,7 @@ importers: version: 0.5.1(cypress@13.7.0) eslint-plugin-react: specifier: 7.34.0 - version: 7.34.0(eslint@8.57.0) + version: 7.34.0(eslint@8.56.0) globby: specifier: 14.0.1 version: 14.0.1 @@ -965,22 +968,22 @@ importers: version: 20.11.16 '@types/react': specifier: ^18 - version: 18.2.66 + version: 18.2.53 '@types/react-dom': specifier: ^18 - version: 18.2.22 + version: 18.2.18 autoprefixer: specifier: ^10.0.1 - version: 10.4.18(postcss@8.4.35) + version: 10.4.17(postcss@8.4.33) eslint: specifier: ^8 - version: 8.57.0 + version: 8.56.0 eslint-config-next: specifier: 14.1.3 - version: 14.1.3(eslint@8.57.0)(typescript@5.2.2) + version: 14.1.3(eslint@8.56.0)(typescript@5.2.2) postcss: specifier: '>=8.4.31' - version: 8.4.35 + version: 8.4.33 sass: specifier: 1.72.0 version: 1.72.0 @@ -1584,14 +1587,14 @@ packages: - supports-color dev: true - /@angular/common@17.2.3(@angular/core@17.2.3)(rxjs@7.8.1): - resolution: {integrity: sha512-XR3rWS4W7/+RknyJMUUo9E81mSeyUznpclqTZ+Hy7+i4Naeso0qcRaIyr6JJmB5UGvlnfT1MlH9Fj78Dc80NEw==} + /@angular/common@17.2.4(@angular/core@17.2.4)(rxjs@7.8.1): + resolution: {integrity: sha512-ymzDHZPQWpBKVQ7lPZucU+vBSb70Re6y5TKzkOX7oYE8Z1+tiNGLvfmzGsO2/N0lvwyZWXjkdXYEDON2hIlZ1Q==} engines: {node: ^18.13.0 || >=20.9.0} peerDependencies: - '@angular/core': 17.2.3 + '@angular/core': 17.2.4 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/core': 17.2.3(rxjs@7.8.1)(zone.js@0.14.4) + '@angular/core': 17.2.4(rxjs@7.8.1)(zone.js@0.14.4) rxjs: 7.8.1 tslib: 2.6.2 dev: false @@ -1653,8 +1656,8 @@ packages: zone.js: 0.12.0 dev: false - /@angular/core@17.2.3(rxjs@7.8.1)(zone.js@0.14.4): - resolution: {integrity: sha512-DU+RdUB4E4I489R2P2hOrgkCDJNXlVaTzYixpgeDnuldCIYM0MatEzjor9DYNL3EDCayHF+M4HlVOcn6T/IVPQ==} + /@angular/core@17.2.4(rxjs@7.8.1)(zone.js@0.14.4): + resolution: {integrity: sha512-5Bko+vk7H1Ce57MHuRcpZtq2Srq5euufSvwg0piPozp0yYmCqNoYN7c128kgi6PbiPQeAnKRzRbEuYd1YCU4Tw==} engines: {node: ^18.13.0 || >=20.9.0} peerDependencies: rxjs: ^6.5.3 || ^7.4.0 @@ -1805,6 +1808,14 @@ packages: '@babel/highlight': 7.23.4 chalk: 2.4.2 + /@babel/code-frame@7.24.1: + resolution: {integrity: sha512-bC49z4spJQR3j8vFtJBLqzyzFV0ciuL5HYX7qfSl3KEqeMVV+eTquRvmXxpvB0AMubRrvv7y5DILiLLPi57Ewg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.1 + picocolors: 1.0.0 + dev: true + /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} @@ -1840,10 +1851,10 @@ packages: '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@8.1.1) @@ -1863,6 +1874,16 @@ packages: '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 + /@babel/generator@7.24.1: + resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -1955,8 +1976,8 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} @@ -2095,12 +2116,12 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helpers@7.24.0: - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + /@babel/helpers@7.24.1: + resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 + '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color @@ -2114,6 +2135,24 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@babel/highlight@7.24.1: + resolution: {integrity: sha512-EPmDPxidWe/Ex+HTFINpvXdPHRmgSF3T8hGvzondYjmgzTQ/0EbLpSxyt+w3zzlYSk9cNBQNF9k0dT5Z2NiBjw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + dev: true + + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.9 + dev: true + /@babel/parser@7.23.9: resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} engines: {node: '>=6.0.0'} @@ -2121,13 +2160,12 @@ packages: dependencies: '@babel/types': 7.23.9 - /@babel/parser@7.24.0: - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + /@babel/parser@7.24.1: + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.24.0 - dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} @@ -2729,18 +2767,17 @@ packages: '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) dev: true - /@babel/plugin-transform-object-rest-spread@7.24.0(@babel/core@7.24.0): - resolution: {integrity: sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==} + /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.0): + resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.0) dev: true /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.24.0): @@ -2787,6 +2824,16 @@ packages: '@babel/helper-plugin-utils': 7.24.0 dev: true + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.0): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.24.0 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.0): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} @@ -3119,7 +3166,7 @@ packages: '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.24.0) '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.24.0) '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.24.0) - '@babel/plugin-transform-object-rest-spread': 7.24.0(@babel/core@7.24.0) + '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.0) '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.24.0) '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.24.0) '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.0) @@ -3244,9 +3291,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 - dev: true /@babel/traverse@7.23.9: resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} @@ -3265,17 +3311,17 @@ packages: transitivePeerDependencies: - supports-color - /@babel/traverse@7.24.0: - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.1 + '@babel/generator': 7.24.1 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 + '@babel/parser': 7.24.1 '@babel/types': 7.24.0 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 @@ -3283,6 +3329,15 @@ packages: - supports-color dev: true + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@babel/types@7.23.9: resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} @@ -3318,7 +3373,7 @@ packages: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.6.0 + semver: 7.5.4 dev: true /@changesets/assemble-release-plan@6.0.0: @@ -3329,7 +3384,7 @@ packages: '@changesets/get-dependents-graph': 2.0.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 7.6.0 + semver: 7.5.4 dev: true /@changesets/changelog-git@0.2.0: @@ -3401,7 +3456,7 @@ packages: '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 - semver: 7.6.0 + semver: 7.5.4 dev: true /@changesets/get-github-info@0.6.0: @@ -3447,6 +3502,13 @@ packages: chalk: 2.4.2 dev: true + /@changesets/parse@0.1.0: + resolution: {integrity: sha512-xswMwT4CiQsvmGqqPqOBKk17wsv6r4O84N6u7mxTZZxfQmfQ+/NyepygLpExOwUH+/qiSr1cOo4xWoXPijFLtg==} + dependencies: + '@changesets/types': 0.1.2 + js-yaml: 3.14.1 + dev: true + /@changesets/parse@0.4.0: resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} dependencies: @@ -3477,6 +3539,10 @@ packages: p-filter: 2.1.0 dev: true + /@changesets/types@0.1.2: + resolution: {integrity: sha512-D1wVuumeLJXdS3SdNNZQlGMR13aVSdCdNrf8yytbUXiZluR07UiJpM98bpNzf5HoTC/grnFbZLnmyfezwh2mpg==} + dev: true + /@changesets/types@4.1.0: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} dev: true @@ -3617,15 +3683,6 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.20.2: - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.18.17: resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} engines: {node: '>=12'} @@ -3635,15 +3692,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.19.12: resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -3662,15 +3710,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.20.2: - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.17: resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} engines: {node: '>=12'} @@ -3680,15 +3719,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.12: resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -3707,15 +3737,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.20.2: - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.17: resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} engines: {node: '>=12'} @@ -3725,15 +3746,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.12: resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -3752,15 +3764,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.20.2: - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.17: resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} engines: {node: '>=12'} @@ -3770,15 +3773,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.12: resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -3797,15 +3791,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.20.2: - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.17: resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} engines: {node: '>=12'} @@ -3815,15 +3800,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.12: resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -3842,15 +3818,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.20.2: - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.17: resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} engines: {node: '>=12'} @@ -3860,15 +3827,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.12: resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -3887,15 +3845,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.20.2: - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.17: resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} engines: {node: '>=12'} @@ -3905,15 +3854,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.12: resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -3932,15 +3872,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.20.2: - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.17: resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} engines: {node: '>=12'} @@ -3950,15 +3881,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.12: resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -3977,15 +3899,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.20.2: - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.17: resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} engines: {node: '>=12'} @@ -3995,15 +3908,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.12: resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -4022,15 +3926,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.20.2: - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.17: resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} engines: {node: '>=12'} @@ -4040,15 +3935,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.12: resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -4067,15 +3953,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.20.2: - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.17: resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} engines: {node: '>=12'} @@ -4085,15 +3962,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.12: resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -4112,15 +3980,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.20.2: - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.17: resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} engines: {node: '>=12'} @@ -4130,15 +3989,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.12: resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -4157,15 +4007,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.20.2: - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.17: resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} engines: {node: '>=12'} @@ -4175,15 +4016,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.12: resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -4202,26 +4034,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.20.2: - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.17: - resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + /@esbuild/linux-riscv64@0.18.17: + resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -4247,15 +4061,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.20.2: - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.17: resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} engines: {node: '>=12'} @@ -4265,15 +4070,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.12: resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -4292,15 +4088,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.20.2: - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.17: resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} engines: {node: '>=12'} @@ -4310,15 +4097,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.12: resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -4337,15 +4115,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.20.2: - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.17: resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} engines: {node: '>=12'} @@ -4355,15 +4124,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.12: resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} @@ -4382,15 +4142,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.20.2: - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.17: resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} engines: {node: '>=12'} @@ -4400,15 +4151,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.12: resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -4427,15 +4169,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.20.2: - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.17: resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} engines: {node: '>=12'} @@ -4445,15 +4178,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.12: resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -4472,15 +4196,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.20.2: - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.17: resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} engines: {node: '>=12'} @@ -4490,15 +4205,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.12: resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -4517,15 +4223,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.20.2: - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.17: resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} engines: {node: '>=12'} @@ -4535,15 +4232,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.12: resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -4562,15 +4250,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.20.2: - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.17: resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} engines: {node: '>=12'} @@ -4580,15 +4259,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.12: resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -4607,14 +4277,18 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.20.2: - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + peerDependenciesMeta: + eslint: + optional: true + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 dev: true - optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} @@ -4629,11 +4303,6 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint-community/regexpp@4.6.2: resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -4647,7 +4316,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -4656,6 +4325,11 @@ packages: - supports-color dev: true + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4706,7 +4380,7 @@ packages: /@floating-ui/utils@0.2.1: resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - /@geometricpanda/storybook-addon-badges@2.0.2(@storybook/blocks@7.6.17)(@storybook/components@7.6.17)(@storybook/core-events@7.6.17)(@storybook/manager-api@7.6.17)(@storybook/preview-api@7.6.17)(@storybook/theming@7.6.17)(@storybook/types@7.6.17)(react-dom@18.2.0)(react@18.2.0): + /@geometricpanda/storybook-addon-badges@2.0.2(@storybook/blocks@7.6.17)(@storybook/components@7.6.17)(@storybook/core-events@7.6.17)(@storybook/manager-api@7.6.17)(@storybook/preview-api@7.6.17)(@storybook/theming@7.6.17)(@storybook/types@7.6.12)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RlJvQcSSXwwrN+ABc+2s1UDatWSUsba9TPX/TyNVyobuZZPvu+Bx1d2HVDCIVtXwhlrSvgVB2yr+nVa18edOgw==} peerDependencies: '@storybook/blocks': ^7.0.0 @@ -4730,7 +4404,7 @@ packages: '@storybook/manager-api': 7.6.17(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.17 '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.17 + '@storybook/types': 7.6.12 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -4745,6 +4419,17 @@ packages: '@hapi/hoek': 9.3.0 dev: true + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -4761,6 +4446,10 @@ packages: engines: {node: '>=12.22'} dev: true + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + /@humanwhocodes/object-schema@2.0.2: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true @@ -5289,7 +4978,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.15.0 /@npmcli/agent@2.2.1: resolution: {integrity: sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==} @@ -5405,7 +5094,7 @@ packages: '@nrwl/devkit': 17.2.8(nx@17.2.8) ejs: 3.1.9 enquirer: 2.3.6 - ignore: 5.3.1 + ignore: 5.3.0 nx: 17.2.8 semver: 7.5.3 tmp: 0.2.1 @@ -6566,6 +6255,35 @@ packages: - utf-8-validate dev: true + /@stencil-community/eslint-plugin@0.7.2(eslint-plugin-react@7.34.0)(typescript@4.9.5): + resolution: {integrity: sha512-rj8rD63ZadJHcMrfyrm+SdmEKouBXn54NEBOeXd+7p9BnFCt2ehYZjA7OhGAOBhrxf7ZpUgXtDEXS9iEs//bRw==} + engines: {node: '>=16.20.2'} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 + '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 + eslint: <9 && ^8.0.0 + eslint-plugin-react: ^7.0.0 + typescript: ^4.9.4 || ^5.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + dependencies: + eslint-plugin-react: 7.34.0(eslint@8.56.0) + eslint-utils: 3.0.0(eslint@8.57.0) + jsdom: 23.2.0 + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + /@stencil/angular-output-target@0.8.4(@stencil/core@4.12.6): resolution: {integrity: sha512-QvmHTueXXs5vB9W2L12uEzFmAuR8sqATJV2b+SCFmYsjJSaymiSqR3dKo2wnr0tZiTgU1t16BWaUKiSh3wPXpw==} peerDependencies: @@ -6860,10 +6578,10 @@ packages: '@storybook/node-logger': 7.6.17 '@types/ejs': 3.1.2 '@types/find-cache-dir': 3.2.1 - '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.20) + '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.18.17) browser-assert: 1.2.1 ejs: 3.1.9 - esbuild: 0.18.20 + esbuild: 0.18.17 esbuild-plugin-alias: 0.2.1 express: 4.18.2 find-cache-dir: 3.3.2 @@ -6875,7 +6593,7 @@ packages: - supports-color dev: true - /@storybook/builder-vite@7.6.17(typescript@5.1.6)(vite@5.1.6): + /@storybook/builder-vite@7.6.17(typescript@5.1.6)(vite@5.0.12): resolution: {integrity: sha512-2Q32qalI401EsKKr9Hkk8TAOcHEerqwsjCpQgTNJnCu6GgCVKoVUcb99oRbR9Vyg0xh+jb19XiWqqQujFtLYlQ==} peerDependencies: '@preact/preset-vite': '*' @@ -6907,7 +6625,7 @@ packages: magic-string: 0.30.7 rollup: 3.29.4 typescript: 5.1.6 - vite: 5.1.6(sass@1.72.0) + vite: 5.0.12(sass@1.72.0) transitivePeerDependencies: - encoding - supports-color @@ -6921,6 +6639,17 @@ packages: util-deprecate: 1.0.2 dev: true + /@storybook/channels@7.6.12: + resolution: {integrity: sha512-TaPl5Y3lOoVi5kTLgKNRX8xh2sUPekH0Id1l4Ymw+lpgriEY6r60bmkZLysLG1GhlskpQ/da2+S2ap2ht8P2TQ==} + dependencies: + '@storybook/client-logger': 7.6.12 + '@storybook/core-events': 7.6.12 + '@storybook/global': 5.0.0 + qs: 6.11.2 + telejson: 7.2.0 + tiny-invariant: 1.3.1 + dev: true + /@storybook/channels@7.6.17: resolution: {integrity: sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==} dependencies: @@ -6990,6 +6719,12 @@ packages: global: 4.4.0 dev: true + /@storybook/client-logger@7.6.12: + resolution: {integrity: sha512-hiRv6dXsOttMPqm9SxEuFoAtDe9rs7TUS8XcO5rmJ9BgfwBJsYlHzAxXkazxmvlyZtKL7gMx6m8OYbCdZgUqtA==} + dependencies: + '@storybook/global': 5.0.0 + dev: true + /@storybook/client-logger@7.6.17: resolution: {integrity: sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==} dependencies: @@ -7084,6 +6819,12 @@ packages: core-js: 3.36.0 dev: true + /@storybook/core-events@7.6.12: + resolution: {integrity: sha512-IO4cwk7bBCKH6lLnnIlHO9FwQXt/9CzLUAoZSY9msWsdPppCdKlw8ynJI5YarSNKDBUn8ArIfnRf0Mve0KQr9Q==} + dependencies: + ts-dedent: 2.2.0 + dev: true + /@storybook/core-events@7.6.17: resolution: {integrity: sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==} dependencies: @@ -7356,6 +7097,15 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@storybook/types@7.6.12: + resolution: {integrity: sha512-Wsbd+NS10/2yMHQ/26rXHflXam0hm2qufTFiHOX6VXZWxij3slRU88Fnwzp+1QSyjXb0qkEr8dOx7aG00+ItVw==} + dependencies: + '@storybook/channels': 7.6.12 + '@types/babel__core': 7.20.5 + '@types/express': 4.17.17 + file-system-cache: 2.3.0 + dev: true + /@storybook/types@7.6.17: resolution: {integrity: sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==} dependencies: @@ -7365,11 +7115,11 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/web-components-vite@7.6.17(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(vite@5.1.6): + /@storybook/web-components-vite@7.6.17(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6)(vite@5.0.12): resolution: {integrity: sha512-luBXrRP1OS9QfB+Sw7hcP0cktqQmbF41+m2R/3C56DjBckoh8ojw0CUIpNIktkN4rS9cB/NUGHvaeZSWuDtuFw==} engines: {node: ^14.18 || >=16} dependencies: - '@storybook/builder-vite': 7.6.17(typescript@5.1.6)(vite@5.1.6) + '@storybook/builder-vite': 7.6.17(typescript@5.1.6)(vite@5.0.12) '@storybook/core-server': 7.6.17 '@storybook/node-logger': 7.6.17 '@storybook/web-components': 7.6.17(lit@3.1.2)(react-dom@18.2.0)(react@18.2.0) @@ -7648,7 +7398,7 @@ packages: /@types/hast@3.0.3: resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 2.0.6 dev: true /@types/http-proxy@1.17.11: @@ -7716,6 +7466,10 @@ packages: parse5: 7.1.2 dev: true + /@types/json-schema@7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + /@types/json-schema@7.0.14: resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} dev: true @@ -7799,8 +7553,8 @@ packages: resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} dev: true - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true /@types/qs@6.9.7: @@ -7811,6 +7565,12 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true + /@types/react-dom@18.2.18: + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + dependencies: + '@types/react': 18.2.66 + dev: true + /@types/react-dom@18.2.22: resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} dependencies: @@ -7823,12 +7583,20 @@ packages: '@types/react': 18.2.66 dev: true + /@types/react@18.2.53: + resolution: {integrity: sha512-52IHsMDT8qATp9B9zoOyobW8W3/0QhaJQTw1HwRj0UY2yBpCAQ7+S/CqHYQ8niAm3p4ji+rWUQ9UCib0GxQ60w==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + dev: true + /@types/react@18.2.66: resolution: {integrity: sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==} dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 dev: true /@types/resolve@1.20.2: @@ -7839,8 +7607,8 @@ packages: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} dev: true - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + /@types/scheduler@0.16.3: + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} dev: true /@types/semver@7.5.0: @@ -7925,8 +7693,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + /@types/yauzl@2.10.0: + resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: '@types/node': 20.11.16 @@ -8053,7 +7821,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5): + /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.2.2): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -8067,16 +7835,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 - typescript: 4.9.5 + eslint: 8.56.0 + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.2.2): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -8090,11 +7858,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 - typescript: 5.2.2 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true @@ -8299,7 +8067,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.5.4 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -8321,7 +8089,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.5.4 ts-api-utils: 1.0.2(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: @@ -8343,7 +8111,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.5.4 ts-api-utils: 1.0.2(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -8365,7 +8133,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.5.4 ts-api-utils: 1.0.2(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -8387,7 +8155,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.5.4 ts-api-utils: 1.0.2(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: @@ -8409,7 +8177,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.5.4 ts-api-utils: 1.0.2(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: @@ -8433,7 +8201,7 @@ packages: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -8455,7 +8223,7 @@ packages: '@typescript-eslint/types': 6.19.0 '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) eslint: 8.57.0 - semver: 7.6.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -8477,7 +8245,7 @@ packages: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) eslint: 8.57.0 - semver: 7.6.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -8499,7 +8267,7 @@ packages: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.3.3) eslint: 8.57.0 - semver: 7.6.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript @@ -8670,13 +8438,13 @@ packages: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} dev: true - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20): + /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.17): resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} engines: {node: '>=14.15.0'} peerDependencies: esbuild: '>=0.10.0' dependencies: - esbuild: 0.18.20 + esbuild: 0.18.17 tslib: 2.6.2 dev: true @@ -8736,7 +8504,7 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.11.3 + acorn: 8.9.0 acorn-walk: 8.2.0 dev: true @@ -8748,12 +8516,12 @@ packages: acorn: 8.9.0 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.9.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.9.0 dev: true /acorn-walk@8.2.0: @@ -8761,12 +8529,6 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} @@ -9098,8 +8860,8 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 + call-bind: 1.0.2 + is-array-buffer: 3.0.2 dev: true /array-buffer-byte-length@1.0.1: @@ -9193,20 +8955,20 @@ packages: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.1 dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 dev: true @@ -9214,9 +8976,9 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 dev: true @@ -9239,6 +9001,18 @@ packages: es-shim-unscopables: 1.0.2 dev: true + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + /arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} @@ -9356,6 +9130,22 @@ packages: hasBin: true dev: true + /autoprefixer@10.4.17(postcss@8.4.33): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001580 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + /autoprefixer@10.4.18(postcss@8.4.35): resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} engines: {node: ^10 || ^12 || >=14} @@ -9372,6 +9162,11 @@ packages: postcss-value-parser: 4.2.0 dev: true + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /available-typed-arrays@1.0.6: resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} engines: {node: '>= 0.4'} @@ -9390,11 +9185,6 @@ packages: engines: {node: '>=4'} dev: true - /axe-core@4.8.4: - resolution: {integrity: sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==} - engines: {node: '>=4'} - dev: true - /axios@1.6.2(debug@4.3.4): resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} dependencies: @@ -9795,13 +9585,24 @@ packages: pako: 0.2.9 dev: true + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001580 + electron-to-chromium: 1.4.601 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: caniuse-lite: 1.0.30001597 - electron-to-chromium: 1.4.702 + electron-to-chromium: 1.4.703 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -9845,7 +9646,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.6.0 + semver: 7.5.4 dev: true /busboy@1.6.0: @@ -9903,6 +9704,13 @@ packages: engines: {node: '>=6'} dev: true + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.1 + dev: true + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -9948,6 +9756,19 @@ packages: engines: {node: '>=10'} dev: true + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001580 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + + /caniuse-lite@1.0.30001580: + resolution: {integrity: sha512-mtj5ur2FFPZcCEpXFy8ADXbDACuNFXg6mxVDqp7tqooX6l3zwm+d8EPoeOSIFRDvHs8qu7/SLFOGniULkcH2iA==} + dev: true + /caniuse-lite@1.0.30001597: resolution: {integrity: sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==} @@ -10360,6 +10181,12 @@ packages: typedarray: 0.0.6 dev: true + /concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + /connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} @@ -10604,6 +10431,15 @@ packages: engines: {node: '>=8'} dev: true + /css-declaration-sorter@6.4.1(postcss@8.4.35): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + /css-functions-list@3.2.1: resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==} engines: {node: '>=12 || >=16'} @@ -10632,6 +10468,16 @@ packages: webpack: 5.90.3(esbuild@0.20.1) dev: true + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + /css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} dependencies: @@ -10641,6 +10487,14 @@ packages: domutils: 3.1.0 nth-check: 2.1.1 + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + /css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -10671,6 +10525,72 @@ packages: hasBin: true dev: true + /cssnano-preset-default@5.2.14(postcss@8.4.35): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.35) + cssnano-utils: 3.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-calc: 8.2.4(postcss@8.4.35) + postcss-colormin: 5.3.1(postcss@8.4.35) + postcss-convert-values: 5.1.3(postcss@8.4.35) + postcss-discard-comments: 5.1.2(postcss@8.4.35) + postcss-discard-duplicates: 5.1.0(postcss@8.4.35) + postcss-discard-empty: 5.1.1(postcss@8.4.35) + postcss-discard-overridden: 5.1.0(postcss@8.4.35) + postcss-merge-longhand: 5.1.7(postcss@8.4.35) + postcss-merge-rules: 5.1.4(postcss@8.4.35) + postcss-minify-font-values: 5.1.0(postcss@8.4.35) + postcss-minify-gradients: 5.1.1(postcss@8.4.35) + postcss-minify-params: 5.1.4(postcss@8.4.35) + postcss-minify-selectors: 5.2.1(postcss@8.4.35) + postcss-normalize-charset: 5.1.0(postcss@8.4.35) + postcss-normalize-display-values: 5.1.0(postcss@8.4.35) + postcss-normalize-positions: 5.1.1(postcss@8.4.35) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.35) + postcss-normalize-string: 5.1.0(postcss@8.4.35) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.35) + postcss-normalize-unicode: 5.1.1(postcss@8.4.35) + postcss-normalize-url: 5.1.0(postcss@8.4.35) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.35) + postcss-ordered-values: 5.1.3(postcss@8.4.35) + postcss-reduce-initial: 5.1.2(postcss@8.4.35) + postcss-reduce-transforms: 5.1.0(postcss@8.4.35) + postcss-svgo: 5.1.0(postcss@8.4.35) + postcss-unique-selectors: 5.1.1(postcss@8.4.35) + dev: true + + /cssnano-utils@3.1.0(postcss@8.4.35): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + + /cssnano@5.1.15(postcss@8.4.35): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.35) + lilconfig: 2.1.0 + postcss: 8.4.35 + yaml: 1.10.2 + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -10700,8 +10620,8 @@ packages: rrweb-cssom: 0.6.0 dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} dev: true /csv-generate@3.4.3: @@ -10730,14 +10650,14 @@ packages: resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} dev: true - /cypress-axe@1.5.0(axe-core@4.8.4)(cypress@13.7.0): + /cypress-axe@1.5.0(axe-core@4.7.0)(cypress@13.7.0): resolution: {integrity: sha512-Hy/owCjfj+25KMsecvDgo4fC/781ccL+e8p+UUYoadGVM2ogZF9XIKbiM6KI8Y3cEaSreymdD6ZzccbI2bY0lQ==} engines: {node: '>=10'} peerDependencies: axe-core: ^3 || ^4 cypress: ^10 || ^11 || ^12 || ^13 dependencies: - axe-core: 4.8.4 + axe-core: 4.7.0 cypress: 13.7.0 dev: true @@ -10921,9 +10841,9 @@ packages: resolution: {integrity: sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==} dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.7 + call-bind: 1.0.2 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.1 is-arguments: 1.1.1 is-array-buffer: 3.0.2 is-date-object: 1.0.5 @@ -10932,8 +10852,8 @@ packages: isarray: 2.0.5 object-is: 1.1.5 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 side-channel: 1.0.4 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 @@ -10995,6 +10915,14 @@ packages: engines: {node: '>=8'} dev: true + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -11187,6 +11115,14 @@ packages: void-elements: 2.0.1 dev: true + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -11209,12 +11145,27 @@ packages: webidl-conversions: 7.0.0 dev: true + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + /domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: @@ -11279,8 +11230,12 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.702: - resolution: {integrity: sha512-LYLXyEUsZ3nNSwiOWjI88N1PJUAMU2QphQSgGLVkFnb3FxZxNui2Vzi2PaKPgPWbsWbZstZnh6BMf/VQJamjiQ==} + /electron-to-chromium@1.4.601: + resolution: {integrity: sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==} + dev: true + + /electron-to-chromium@1.4.703: + resolution: {integrity: sha512-094ZZC4nHXPKl/OwPinSMtLN9+hoFkdfQGKnvXbY+3WEAYtVDpz9UhJIViiY6Zb8agvqxiaJzNG9M+pRZWvSZw==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -11362,6 +11317,10 @@ packages: resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} dev: true + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -11396,6 +11355,51 @@ packages: is-arrayish: 0.2.1 dev: true + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + /es-abstract@1.22.4: resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} engines: {node: '>= 0.4'} @@ -11458,8 +11462,8 @@ packages: /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 @@ -11498,6 +11502,15 @@ packages: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} dev: true + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} @@ -11613,36 +11626,6 @@ packages: '@esbuild/win32-x64': 0.18.17 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} @@ -11704,47 +11687,12 @@ packages: '@esbuild/win32-ia32': 0.20.1 '@esbuild/win32-x64': 0.20.1 dev: true - - /esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - dev: true optional: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true @@ -11787,7 +11735,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-next@14.1.3(eslint@8.57.0)(typescript@5.2.2): + /eslint-config-next@14.1.3(eslint@8.56.0)(typescript@5.2.2): resolution: {integrity: sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -11800,14 +11748,14 @@ packages: dependencies: '@next/eslint-plugin-next': 14.1.3 '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) - eslint: 8.57.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.2.2) + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) + eslint-plugin-react: 7.34.0(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) typescript: 5.2.2 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -11869,7 +11817,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -11881,9 +11829,9 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint: 8.56.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.0 is-core-module: 2.13.1 @@ -11924,7 +11872,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -11945,11 +11893,11 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.2.2) debug: 3.2.7(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color dev: true @@ -11964,7 +11912,7 @@ packages: optional: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.6.2 eslint: 8.57.0 eslint-compat-utils: 0.1.2(eslint@8.57.0) dev: true @@ -12006,7 +11954,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -12018,16 +11966,16 @@ packages: eslint: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.2.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -12043,7 +11991,7 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} peerDependencies: @@ -12062,7 +12010,7 @@ packages: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.0.17 - eslint: 8.57.0 + eslint: 8.56.0 hasown: 2.0.1 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -12106,7 +12054,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: @@ -12115,7 +12063,37 @@ packages: eslint: optional: true dependencies: - eslint: 8.57.0 + eslint: 8.56.0 + dev: true + + /eslint-plugin-react@7.34.0(eslint@8.56.0): + resolution: {integrity: sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + peerDependenciesMeta: + eslint: + optional: true + dependencies: + array-includes: 3.1.7 + array.prototype.findlast: 1.2.4 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.17 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 dev: true /eslint-plugin-react@7.34.0(eslint@8.57.0): @@ -12195,13 +12173,60 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.6.2 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12225,7 +12250,7 @@ packages: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -12246,8 +12271,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.3 dev: true @@ -12530,7 +12555,7 @@ packages: get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: - '@types/yauzl': 2.10.3 + '@types/yauzl': 2.10.0 transitivePeerDependencies: - supports-color dev: true @@ -12591,8 +12616,8 @@ packages: engines: {node: '>= 4.9.1'} dev: true - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 @@ -12636,14 +12661,14 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.2.0 + flat-cache: 3.1.1 dev: true /file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} dependencies: - flat-cache: 4.0.1 + flat-cache: 4.0.0 dev: true /file-system-cache@2.3.0: @@ -12824,21 +12849,22 @@ packages: engines: {node: '>= 0.10'} dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} dependencies: - flatted: 3.3.1 + flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + /flat-cache@4.0.0: + resolution: {integrity: sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==} engines: {node: '>=16'} dependencies: - flatted: 3.3.1 + flatted: 3.2.9 keyv: 4.5.4 + rimraf: 5.0.5 dev: true /flat@5.0.2: @@ -12850,10 +12876,6 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true - /flow-parser@0.211.0: resolution: {integrity: sha512-Ftqkqisn4MA8u+1I7KGYz35y/RtLsRETsK4qrH6KkDUjxnC4mgq3CcXbckHpGyfTErqMyVhJnlJ56feEn9Cn7A==} engines: {node: '>=0.4.0'} @@ -13035,7 +13057,7 @@ packages: requiresBuild: true dependencies: bindings: 1.5.0 - nan: 2.19.0 + nan: 2.17.0 dev: true optional: true @@ -13050,6 +13072,16 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + dev: true + /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} @@ -13064,6 +13096,12 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + dependencies: + loader-utils: 3.2.1 + dev: true + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -13076,6 +13114,15 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.2 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -13119,6 +13166,14 @@ packages: engines: {node: '>=10'} dev: true + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -13236,7 +13291,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.5 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -13317,7 +13372,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.1 + define-properties: 1.2.0 dev: true /globby@11.1.0: @@ -13338,7 +13393,7 @@ packages: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.0 merge2: 1.4.1 slash: 4.0.0 dev: true @@ -13369,7 +13424,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.1 dev: true /graceful-fs@4.2.11: @@ -13511,6 +13566,12 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: @@ -13527,6 +13588,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -13862,6 +13930,10 @@ packages: safer-buffer: 2.1.2 dev: true + /icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + dev: true + /icss-utils@5.1.0(postcss@8.4.35): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -13896,11 +13968,6 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true - /image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} @@ -13920,6 +13987,13 @@ packages: /immutable@4.3.0: resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} + /import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -13928,6 +14002,13 @@ packages: resolve-from: 4.0.0 dev: true + /import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -14002,6 +14083,15 @@ packages: wrap-ansi: 6.2.0 dev: true + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -14087,16 +14177,16 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - is-typed-array: 1.1.13 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.10 dev: true /is-array-buffer@3.0.4: @@ -14141,8 +14231,8 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-buffer@1.1.6: @@ -14176,7 +14266,7 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.0 dev: true /is-data-descriptor@0.1.4: @@ -14197,7 +14287,7 @@ packages: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-decimal@1.0.4: @@ -14349,7 +14439,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-number@3.0.0: @@ -14413,8 +14503,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 + call-bind: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-relative@1.0.0: @@ -14431,7 +14521,7 @@ packages: /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 dev: true /is-stream@2.0.1: @@ -14443,7 +14533,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /is-subdir@1.2.0: @@ -14460,6 +14550,17 @@ packages: has-symbols: 1.0.3 dev: true + /is-typed-array@1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} @@ -14498,14 +14599,14 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 dev: true /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 dev: true /is-what@3.14.1: @@ -14599,7 +14700,7 @@ packages: engines: {node: '>=10'} dependencies: '@babel/core': 7.24.0 - '@babel/parser': 7.23.9 + '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.6.0 @@ -15143,7 +15244,7 @@ packages: '@babel/generator': 7.23.6 '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/types': 7.23.9 + '@babel/types': 7.23.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -15158,7 +15259,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -15368,7 +15469,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.9.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -15780,8 +15881,10 @@ packages: image-size: 0.5.5 make-dir: 2.1.0 mime: 1.6.0 - needle: 3.3.1 + needle: 3.2.0 source-map: 0.6.1 + transitivePeerDependencies: + - supports-color dev: true /leven@3.1.0: @@ -15980,6 +16083,10 @@ packages: p-locate: 6.0.0 dev: true + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + /lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} dev: true @@ -16008,6 +16115,10 @@ packages: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -16230,6 +16341,10 @@ packages: resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} dev: true + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + /mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} dev: true @@ -16579,8 +16694,8 @@ packages: thenify-all: 1.6.0 dev: true - /nan@2.19.0: - resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==} + /nan@2.17.0: + resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} requiresBuild: true dev: true optional: true @@ -16617,14 +16732,17 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + /needle@3.2.0: + resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} engines: {node: '>= 4.4.x'} hasBin: true requiresBuild: true dependencies: + debug: 3.2.7(supports-color@8.1.1) iconv-lite: 0.6.3 sax: 1.2.4 + transitivePeerDependencies: + - supports-color dev: true optional: true @@ -16720,8 +16838,10 @@ packages: tslib: 2.6.2 typescript: 5.3.3 optionalDependencies: - esbuild: 0.20.2 + esbuild: 0.20.1 rollup: 4.13.0 + transitivePeerDependencies: + - supports-color dev: true /ngx-highlightjs@10.0.0(@angular/common@17.3.0)(@angular/core@17.3.0)(rxjs@7.8.1): @@ -16881,6 +17001,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: true + /now-and-later@2.0.1: resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==} engines: {node: '>= 0.10'} @@ -16999,7 +17124,7 @@ packages: flat: 5.0.2 fs-extra: 11.1.1 glob: 7.1.4 - ignore: 5.3.1 + ignore: 5.3.0 jest-diff: 29.7.0 js-yaml: 4.1.0 jsonc-parser: 3.2.0 @@ -17051,6 +17176,10 @@ packages: engines: {node: '>= 6'} dev: true + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true @@ -17059,8 +17188,8 @@ packages: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 + call-bind: 1.0.2 + define-properties: 1.2.0 dev: true /object-keys@1.1.1: @@ -17079,8 +17208,8 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 + call-bind: 1.0.2 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -17118,18 +17247,18 @@ packages: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - get-intrinsic: 1.2.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 dev: true /object.hasown@1.1.3: @@ -17166,9 +17295,9 @@ packages: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /obuf@1.1.2: @@ -17279,6 +17408,11 @@ packages: p-map: 2.1.0 dev: true + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -17340,6 +17474,14 @@ packages: aggregate-error: 3.1.0 dev: true + /p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: true + /p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -17348,6 +17490,13 @@ packages: retry: 0.13.1 dev: true + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -17609,6 +17758,11 @@ packages: engines: {node: '>=6'} dev: true + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: true + /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} @@ -17690,163 +17844,479 @@ packages: resolution: {integrity: sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==} engines: {node: '>=10.13.0'} dependencies: - ansi-colors: 1.1.0 + ansi-colors: 1.1.0 + dev: true + + /polished@4.2.2: + resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} + engines: {node: '>=10'} + dependencies: + '@babel/runtime': 7.23.9 + dev: true + + /portfinder@1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7(supports-color@8.1.1) + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-calc@8.2.4(postcss@8.4.35): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@5.3.1(postcss@8.4.35): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@5.1.3(postcss@8.4.35): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-discard-comments@5.1.2(postcss@8.4.35): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + + /postcss-discard-duplicates@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + + /postcss-discard-empty@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + + /postcss-discard-overridden@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + + /postcss-import@15.1.0(postcss@8.4.33): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.33): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.33 + dev: true + + /postcss-load-config@3.1.4(postcss@8.4.35): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.4.31' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.35 + yaml: 1.10.2 + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.33): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.4.31' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.33 + yaml: 2.3.4 + dev: true + + /postcss-load-config@5.0.2(postcss@8.4.35): + resolution: {integrity: sha512-Q8QR3FYbqOKa0bnC1UQ2bFq9/ulHX5Bi34muzitMr8aDtUelO5xKeJEYC/5smE0jNE9zdB/NBnOwXKexELbRlw==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.4.31' + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + dependencies: + lilconfig: 3.0.0 + postcss: 8.4.35 + yaml: 2.3.4 + dev: true + + /postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.3.3)(webpack@5.90.3): + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + postcss: '>=8.4.31' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + cosmiconfig: 9.0.0(typescript@5.3.3) + jiti: 1.20.0 + postcss: 8.4.35 + semver: 7.6.0 + webpack: 5.90.3(esbuild@0.20.1) + transitivePeerDependencies: + - typescript + dev: true + + /postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + dev: true + + /postcss-merge-longhand@5.1.7(postcss@8.4.35): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.35) + dev: true + + /postcss-merge-rules@5.1.4(postcss@8.4.35): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-minify-font-values@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@5.1.4(postcss@8.4.35): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + cssnano-utils: 3.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@5.2.1(postcss@8.4.35): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + dev: true + + /postcss-modules-local-by-default@4.0.3(postcss@8.4.35): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-local-by-default@4.0.4(postcss@8.4.35): + resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@3.0.0(postcss@8.4.35): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-modules-scope@3.1.1(postcss@8.4.35): + resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.35): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + icss-utils: 5.1.0(postcss@8.4.35) + postcss: 8.4.35 dev: true - /polished@4.2.2: - resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} - engines: {node: '>=10'} + /postcss-modules@4.3.1(postcss@8.4.35): + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: '>=8.4.31' dependencies: - '@babel/runtime': 7.23.9 + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.4.35 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.35) + postcss-modules-scope: 3.0.0(postcss@8.4.35) + postcss-modules-values: 4.0.0(postcss@8.4.35) + string-hash: 1.1.3 dev: true - /portfinder@1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} + /postcss-nested@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: '>=8.4.31' dependencies: - async: 2.6.4 - debug: 3.2.7(supports-color@8.1.1) - mkdirp: 0.5.6 - transitivePeerDependencies: - - supports-color + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 dev: true - /posix-character-classes@0.1.1: - resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} - engines: {node: '>=0.10.0'} + /postcss-normalize-charset@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 dev: true - /postcss-import@15.1.0(postcss@8.4.35): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + /postcss-normalize-display-values@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: postcss: 8.4.35 postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 dev: true - /postcss-js@4.0.1(postcss@8.4.35): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} + /postcss-normalize-positions@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: - camelcase-css: 2.0.1 postcss: 8.4.35 + postcss-value-parser: 4.2.0 dev: true - /postcss-load-config@4.0.2(postcss@8.4.35): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true dependencies: - lilconfig: 3.0.0 postcss: 8.4.35 - yaml: 2.3.4 + postcss-value-parser: 4.2.0 dev: true - /postcss-load-config@5.0.2(postcss@8.4.35): - resolution: {integrity: sha512-Q8QR3FYbqOKa0bnC1UQ2bFq9/ulHX5Bi34muzitMr8aDtUelO5xKeJEYC/5smE0jNE9zdB/NBnOwXKexELbRlw==} - engines: {node: '>= 18'} + /postcss-normalize-string@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - jiti: '>=1.21.0' postcss: '>=8.4.31' - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true dependencies: - lilconfig: 3.0.0 postcss: 8.4.35 - yaml: 2.3.4 + postcss-value-parser: 4.2.0 dev: true - /postcss-loader@8.1.1(postcss@8.4.35)(typescript@5.3.3)(webpack@5.90.3): - resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} - engines: {node: '>= 18.12.0'} + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - '@rspack/core': 0.x || 1.x postcss: '>=8.4.31' - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true dependencies: - cosmiconfig: 9.0.0(typescript@5.3.3) - jiti: 1.20.0 postcss: 8.4.35 - semver: 7.6.0 - webpack: 5.90.3(esbuild@0.20.1) - transitivePeerDependencies: - - typescript + postcss-value-parser: 4.2.0 dev: true - /postcss-media-query-parser@0.2.3: - resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + /postcss-normalize-unicode@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + postcss: 8.4.35 + postcss-value-parser: 4.2.0 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} + /postcss-normalize-url@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: + normalize-url: 6.1.0 postcss: 8.4.35 + postcss-value-parser: 4.2.0 dev: true - /postcss-modules-local-by-default@4.0.4(postcss@8.4.35): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} - engines: {node: ^10 || ^12 || >= 14} + /postcss-normalize-whitespace@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: - icss-utils: 5.1.0(postcss@8.4.35) postcss: 8.4.35 - postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.1(postcss@8.4.35): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} - engines: {node: ^10 || ^12 || >= 14} + /postcss-ordered-values@5.1.3(postcss@8.4.35): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: + cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.35): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} + /postcss-reduce-initial@5.1.2(postcss@8.4.35): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: - icss-utils: 5.1.0(postcss@8.4.35) + browserslist: 4.22.2 + caniuse-api: 3.0.0 postcss: 8.4.35 dev: true - /postcss-nested@6.0.1(postcss@8.4.35): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} + /postcss-reduce-transforms@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: '>=8.4.31' dependencies: postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss-value-parser: 4.2.0 dev: true /postcss-resolve-nested-selector@0.1.1: @@ -17879,6 +18349,27 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-svgo@5.1.0(postcss@8.4.35): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + + /postcss-unique-selectors@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true @@ -17892,6 +18383,15 @@ packages: source-map-js: 1.0.2 dev: false + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} @@ -18007,6 +18507,11 @@ packages: retry: 0.12.0 dev: true + /promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + dev: true + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -18089,9 +18594,14 @@ packages: pump: 2.0.1 dev: true + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + dev: true /puppeteer-core@2.1.1: resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} @@ -18513,6 +19023,15 @@ packages: resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} dev: true + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -18806,6 +19325,30 @@ packages: rollup-plugin-inject: 3.0.2 dev: true + /rollup-plugin-postcss@4.0.2(postcss@8.4.35): + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.4.35) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.4.35 + postcss-load-config: 3.1.4(postcss@8.4.35) + postcss-modules: 4.3.1(postcss@8.4.35) + promise.series: 0.2.0 + resolve: 1.22.8 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + dev: true + /rollup-plugin-scss@4.0.0: resolution: {integrity: sha512-wxasNXDYC2m+fDxCMgK00WebVWYmeFvShyNABmjvSJZ6D1/SepwqFeaMFMQromveI79gfvb64yJjiZZxSZxEIA==} dependencies: @@ -18890,6 +19433,16 @@ packages: dependencies: tslib: 2.6.2 + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} @@ -18907,6 +19460,18 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + dev: true + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: true + /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -18993,7 +19558,7 @@ packages: resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.14 + '@types/json-schema': 7.0.11 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true @@ -19201,9 +19766,9 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 dev: true /signal-exit@3.0.7: @@ -19545,6 +20110,11 @@ packages: minipass: 5.0.0 dev: true + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + /stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: true @@ -19595,7 +20165,7 @@ packages: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} dependencies: - internal-slot: 1.0.7 + internal-slot: 1.0.5 dev: true /store2@2.14.2: @@ -19650,6 +20220,10 @@ packages: engines: {node: '>=10.0.0'} dev: false + /string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + dev: true + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -19698,6 +20272,15 @@ packages: side-channel: 1.0.4 dev: true + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} @@ -19707,6 +20290,14 @@ packages: es-abstract: 1.22.4 dev: true + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: @@ -19715,6 +20306,14 @@ packages: es-abstract: 1.22.4 dev: true + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: @@ -19803,6 +20402,10 @@ packages: through: 2.3.8 dev: true + /style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + dev: true + /styled-jsx@5.1.1(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -19820,6 +20423,17 @@ packages: react: 18.2.0 dev: false + /stylehacks@5.1.1(postcss@8.4.35): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: '>=8.4.31' + dependencies: + browserslist: 4.22.2 + postcss: 8.4.35 + postcss-selector-parser: 6.0.15 + dev: true + /stylelint-config-sass-guidelines@11.1.0(postcss@8.4.35)(stylelint@16.2.1): resolution: {integrity: sha512-mVE3UmN8MlshK4Gb3eYk6f8tw9DkQ9yjMF4W9krlmpaNZpSXOdh13AL0sU7l/9l4Pnpt4KMobNNIRI0tJl56Cw==} engines: {node: '>=18.12.0'} @@ -19963,6 +20577,20 @@ packages: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} dev: true + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + /svgo@3.2.0: resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} engines: {node: '>=14.0.0'} @@ -20024,11 +20652,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.35 - postcss-import: 15.1.0(postcss@8.4.35) - postcss-js: 4.0.1(postcss@8.4.35) - postcss-load-config: 4.0.2(postcss@8.4.35) - postcss-nested: 6.0.1(postcss@8.4.35) + postcss: 8.4.33 + postcss-import: 15.1.0(postcss@8.4.33) + postcss-js: 4.0.1(postcss@8.4.33) + postcss-load-config: 4.0.2(postcss@8.4.33) + postcss-nested: 6.0.1(postcss@8.4.33) postcss-selector-parser: 6.0.15 resolve: 1.22.8 sucrase: 3.35.0 @@ -20120,7 +20748,7 @@ packages: engines: {node: '>=8'} dev: true - /terser-webpack-plugin@5.3.10(esbuild@0.20.1)(webpack@5.90.3): + /terser-webpack-plugin@5.3.10(webpack@5.90.3): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20137,7 +20765,6 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.22 - esbuild: 0.20.1 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 @@ -20315,7 +20942,7 @@ packages: engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.3.1 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -20327,7 +20954,7 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: - punycode: 2.3.1 + punycode: 2.3.0 dev: true /tr46@5.0.0: @@ -20649,6 +21276,15 @@ packages: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.10 + dev: true + /typed-array-buffer@1.0.1: resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} engines: {node: '>= 0.4'} @@ -20662,29 +21298,29 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 - is-typed-array: 1.1.13 + is-typed-array: 1.1.10 dev: true /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 - is-typed-array: 1.1.13 + is-typed-array: 1.1.10 dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 for-each: 0.3.3 - is-typed-array: 1.1.13 + is-typed-array: 1.1.10 dev: true /typed-assert@1.0.9: @@ -20732,7 +21368,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.2 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -20966,7 +21602,7 @@ packages: /unplugin@1.4.0: resolution: {integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==} dependencies: - acorn: 8.11.3 + acorn: 8.9.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -20990,6 +21626,17 @@ packages: engines: {node: '>=4'} dev: true + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -20997,13 +21644,13 @@ packages: browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.0 - escalade: 3.1.2 + escalade: 3.1.1 picocolors: 1.0.0 /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.1 + punycode: 2.3.0 /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} @@ -21238,8 +21885,8 @@ packages: replace-ext: 1.0.1 dev: true - /vite@5.1.5(@types/node@18.17.19)(less@4.2.0)(sass@1.72.0): - resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} + /vite@5.0.12(sass@1.72.0): + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -21266,9 +21913,7 @@ packages: terser: optional: true dependencies: - '@types/node': 18.17.19 esbuild: 0.19.12 - less: 4.2.0 postcss: 8.4.35 rollup: 4.13.0 sass: 1.72.0 @@ -21276,7 +21921,7 @@ packages: fsevents: 2.3.3 dev: true - /vite@5.1.5(@types/node@18.19.14)(less@4.2.0)(sass@1.71.1)(terser@5.29.1): + /vite@5.1.5(@types/node@18.17.19)(less@4.2.0)(sass@1.72.0): resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -21304,19 +21949,18 @@ packages: terser: optional: true dependencies: - '@types/node': 18.19.14 + '@types/node': 18.17.19 esbuild: 0.19.12 less: 4.2.0 postcss: 8.4.35 rollup: 4.13.0 - sass: 1.71.1 - terser: 5.29.1 + sass: 1.72.0 optionalDependencies: fsevents: 2.3.3 dev: true - /vite@5.1.6(sass@1.72.0): - resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==} + /vite@5.1.5(@types/node@18.19.14)(less@4.2.0)(sass@1.71.1)(terser@5.29.1): + resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -21343,10 +21987,13 @@ packages: terser: optional: true dependencies: + '@types/node': 18.19.14 esbuild: 0.19.12 + less: 4.2.0 postcss: 8.4.35 rollup: 4.13.0 - sass: 1.72.0 + sass: 1.71.1 + terser: 5.29.1 optionalDependencies: fsevents: 2.3.3 dev: true @@ -21571,7 +22218,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.20.1)(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(webpack@5.90.3) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21697,11 +22344,11 @@ packages: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 - call-bind: 1.0.7 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.2 + has-tostringtag: 1.0.0 dev: true /which-typed-array@1.1.14: @@ -21902,6 +22549,11 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} @@ -21928,7 +22580,7 @@ packages: resolution: {integrity: sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==} dependencies: camelcase: 3.0.0 - object.assign: 4.1.5 + object.assign: 4.1.4 dev: true /yargs@15.4.1: