From 7f4898dfa528c4347b301f38d4217c137aa523d4 Mon Sep 17 00:00:00 2001 From: "Shivprasad Kounsalye (Remote Angular Dev)" Date: Fri, 20 Dec 2024 12:11:27 +0530 Subject: [PATCH 01/21] chore(demo): Fix documentation Name & Description, Type columns overlapping. (#10032) --- .../components/documentation/documentation.style.less | 4 ++++ .../components/documentation/documentation.template.html | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/projects/addon-doc/components/documentation/documentation.style.less b/projects/addon-doc/components/documentation/documentation.style.less index 2fa936ef3f151..b1dacfeb8327d 100644 --- a/projects/addon-doc/components/documentation/documentation.style.less +++ b/projects/addon-doc/components/documentation/documentation.style.less @@ -159,3 +159,7 @@ max-inline-size: 22.5rem; } } + +.t-no-overflow { + overflow: hidden !important; +} diff --git a/projects/addon-doc/components/documentation/documentation.template.html b/projects/addon-doc/components/documentation/documentation.template.html index fe9dec0458ad0..e6c717e1cf0f5 100644 --- a/projects/addon-doc/components/documentation/documentation.template.html +++ b/projects/addon-doc/components/documentation/documentation.template.html @@ -25,7 +25,7 @@ class="t-row" [class.t-deprecated]="propertyConnector.documentationPropertyDeprecated" > - +
- + Date: Fri, 20 Dec 2024 13:00:56 +0530 Subject: [PATCH 02/21] chore(demo): Remove `tui-form` classes from demo (#9990) Co-authored-by: Alex Inkin --- projects/demo/src/modules/app/app.routes.ts | 7 +- projects/demo/src/modules/app/demo-routes.ts | 3 +- projects/demo/src/modules/app/pages.ts | 10 +- .../components/form/examples/2/index.html | 315 ++++++++++++++++++ .../components/form/examples/2/index.less | 127 +++++++ .../1 => components/form/examples/2}/index.ts | 16 +- .../demo/src/modules/components/form/index.ts | 2 +- .../multi-select/examples/9/index.html | 2 +- .../modules/markup/form/examples/1/index.html | 308 ----------------- .../modules/markup/form/examples/1/index.less | 26 -- .../demo/src/modules/markup/form/index.html | 98 ------ .../demo/src/modules/markup/form/index.ts | 13 - .../pipes/field-error/examples/5/index.html | 27 +- .../pipes/field-error/examples/5/index.ts | 2 + .../layout/components/form/form.styles.less | 6 +- 15 files changed, 482 insertions(+), 480 deletions(-) create mode 100644 projects/demo/src/modules/components/form/examples/2/index.html create mode 100644 projects/demo/src/modules/components/form/examples/2/index.less rename projects/demo/src/modules/{markup/form/examples/1 => components/form/examples/2}/index.ts (93%) delete mode 100644 projects/demo/src/modules/markup/form/examples/1/index.html delete mode 100644 projects/demo/src/modules/markup/form/examples/1/index.less delete mode 100644 projects/demo/src/modules/markup/form/index.html delete mode 100644 projects/demo/src/modules/markup/form/index.ts diff --git a/projects/demo/src/modules/app/app.routes.ts b/projects/demo/src/modules/app/app.routes.ts index e07ad4f1c1916..21eee25270eab 100644 --- a/projects/demo/src/modules/app/app.routes.ts +++ b/projects/demo/src/modules/app/app.routes.ts @@ -325,7 +325,7 @@ export const ROUTES: Routes = [ title: 'InputColor', }), route({ - path: DemoRoute.FormLayout, + path: DemoRoute.Form, loadComponent: async () => import('../components/form'), title: 'Form', }), @@ -748,11 +748,6 @@ export const ROUTES: Routes = [ loadComponent: async () => import('../markup/colors'), title: 'Colors', }), - route({ - path: DemoRoute.Form, - loadComponent: async () => import('../markup/form'), - title: 'Form ', - }), route({ path: DemoRoute.Lists, loadComponent: async () => import('../markup/lists'), diff --git a/projects/demo/src/modules/app/demo-routes.ts b/projects/demo/src/modules/app/demo-routes.ts index e056dd65fac42..01037bc17b955 100644 --- a/projects/demo/src/modules/app/demo-routes.ts +++ b/projects/demo/src/modules/app/demo-routes.ts @@ -59,7 +59,7 @@ export const DemoRoute = { Expand: '/components/expand', ElasticContainer: '/components/elastic-container', FieldError: '/pipes/field-error', - FormLayout: '/components/form', + Form: '/layout/form', InputFiles: '/components/input-files', InputColor: '/components/input-color', Group: '/components/group', @@ -148,7 +148,6 @@ export const DemoRoute = { PieChart: '/charts/pie-chart', RingChart: '/charts/ring-chart', Colors: '/colors', - Form: '/form', Lists: '/lists', Shadows: '/shadows', Spaces: '/spaces', diff --git a/projects/demo/src/modules/app/pages.ts b/projects/demo/src/modules/app/pages.ts index d96e7120f6969..32422d2806452 100644 --- a/projects/demo/src/modules/app/pages.ts +++ b/projects/demo/src/modules/app/pages.ts @@ -150,12 +150,6 @@ export const pages: DocRoutePages = [ 'layout, markup, отступы, margin, padding, маржин, падинг, spaces', route: DemoRoute.Spaces, }, - { - section: 'Foundations', - title: 'Form', - keywords: 'верстка, markup, форма, ввод, пример, input, form', - route: DemoRoute.Form, - }, ], }, // Components @@ -422,10 +416,10 @@ export const pages: DocRoutePages = [ route: DemoRoute.Filter, }, { - section: 'Components', + section: 'Layout', title: 'Form', keywords: 'форма, поле, кнопка, группировка, группа', - route: DemoRoute.FormLayout, + route: DemoRoute.Form, meta: {scheme: 'beaver', name: 'form'}, }, { diff --git a/projects/demo/src/modules/components/form/examples/2/index.html b/projects/demo/src/modules/components/form/examples/2/index.html new file mode 100644 index 0000000000000..b8dc70016d7e1 --- /dev/null +++ b/projects/demo/src/modules/components/form/examples/2/index.html @@ -0,0 +1,315 @@ +
+
+ + + + + + +
+ +
+
+

A header

+
+ + + Textfield + + + + + + + Input date + + + + +
+
+ Input password + +
+
+ + Input money + + +
+
+
+ + Some slider + +
+ from 50 000 ₽ + to 3 000 000 ₽ +
+
Some additional text
+ +
+
+
+ + Choose a person + + + +
{{ data.firstName }} {{ data.lastName }}
+
+ +
+
+ Input phone + +
+
+
+

Header

+
+
+ + +
+
+ Input time +
+
+ + + + +
+
+

Header

+
+ + +
+

Header

+
+
+ + Textfield + + + +
+
+ + +
+ + + + +
diff --git a/projects/demo/src/modules/components/form/examples/2/index.less b/projects/demo/src/modules/components/form/examples/2/index.less new file mode 100644 index 0000000000000..67edd78faf282 --- /dev/null +++ b/projects/demo/src/modules/components/form/examples/2/index.less @@ -0,0 +1,127 @@ +@import '@taiga-ui/core/styles/taiga-ui-local'; + +@fields-space: 1.25rem; +@fields-space-mobile: 1rem; +@fields-space-large: 0.75rem; +@fields-space-large-mobile: 1.5rem; + +:host { + display: block; +} + +.stepper { + margin-bottom: 2rem; +} + +.uppercase-name { + text-transform: uppercase; +} + +.account { + display: flex; + flex: 1; + justify-content: space-between; +} + +.ticks-labels { + .tui-slider-ticks-labels(); + + color: var(--tui-text-secondary); + margin-top: 0.25rem; +} + +.example2-form { + .multi-fields { + display: flex; + + @media @tui-mobile { + flex-wrap: wrap; + } + + .multi-field { + flex: 1 1 0; + min-inline-size: 0; + margin-left: @fields-space; + + &:first-child { + margin-left: 0; + } + + @media @tui-mobile { + flex-basis: 100%; + margin-top: @fields-space-mobile; + margin-left: 0; + + &:first-child { + margin-top: 0; + } + } + } + } + + .field-note { + font: var(--tui-font-text-s); + margin-top: 0.25rem; + color: var(--tui-text-secondary); + } + + .half-width { + inline-size: ~'calc(50% - (@{fields-space} / 2))'; + + @media @tui-mobile { + inline-size: 100%; + } + } + + .checkboxes { + display: flex; + flex-wrap: wrap; + + .checkbox { + flex: ~'1 1 calc(50% - 0.625rem)'; + + &:nth-child(even) { + margin-left: 1.25rem; + } + + &:nth-child(n + 3) { + margin-top: 1rem; + } + } + } + + .text-normal { + font: var(--tui-font-text-s); + } + + .buttons { + display: flex; + margin-top: @fields-space-large; + + &_align_end { + justify-content: flex-end; + } + + &_align_center { + justify-content: center; + } + + @media @tui-mobile { + flex-direction: column; + margin-top: @fields-space-large-mobile; + } + + .button { + margin-left: 0.75rem; + + &:first-child { + margin-left: 0; + } + + @media @tui-mobile { + margin-top: 0.5rem; + margin-left: 0; + } + } + } +} diff --git a/projects/demo/src/modules/markup/form/examples/1/index.ts b/projects/demo/src/modules/components/form/examples/2/index.ts similarity index 93% rename from projects/demo/src/modules/markup/form/examples/1/index.ts rename to projects/demo/src/modules/components/form/examples/2/index.ts index 28b5867ac28b7..e77bbf869053d 100644 --- a/projects/demo/src/modules/markup/form/examples/1/index.ts +++ b/projects/demo/src/modules/components/form/examples/2/index.ts @@ -4,7 +4,15 @@ import {FormControl, FormGroup, ReactiveFormsModule, Validators} from '@angular/ import {changeDetection} from '@demo/emulate/change-detection'; import {TuiAmountPipe, TuiCurrency, TuiCurrencyPipe} from '@taiga-ui/addon-commerce'; import {TuiDay, TuiTime} from '@taiga-ui/cdk'; -import {TuiButton, TuiError, TuiGroup, TuiLabel} from '@taiga-ui/core'; +import { + TuiAppearance, + TuiButton, + TuiError, + TuiGroup, + TuiLabel, + TuiTextfield, + TuiTitle, +} from '@taiga-ui/core'; import { TuiBlock, TuiCheckbox, @@ -13,6 +21,7 @@ import { TuiRadio, TuiStepper, } from '@taiga-ui/kit'; +import {TuiForm, TuiHeader} from '@taiga-ui/layout'; import { TuiInputDateModule, TuiInputModule, @@ -52,6 +61,7 @@ class Account { AsyncPipe, ReactiveFormsModule, TuiAmountPipe, + TuiAppearance, TuiBlock, TuiButton, TuiCheckbox, @@ -59,7 +69,9 @@ class Account { TuiDataListWrapper, TuiError, TuiFieldErrorPipe, + TuiForm, TuiGroup, + TuiHeader, TuiInputDateModule, TuiInputModule, TuiInputNumberModule, @@ -71,7 +83,9 @@ class Account { TuiRadio, TuiSelectModule, TuiStepper, + TuiTextfield, TuiTextfieldControllerModule, + TuiTitle, ], templateUrl: './index.html', styleUrls: ['./index.less'], diff --git a/projects/demo/src/modules/components/form/index.ts b/projects/demo/src/modules/components/form/index.ts index 8d7fbeb20e2cd..ef62ae263633f 100644 --- a/projects/demo/src/modules/components/form/index.ts +++ b/projects/demo/src/modules/components/form/index.ts @@ -10,5 +10,5 @@ import {TuiDemo} from '@demo/utils'; changeDetection, }) export default class Page { - protected readonly examples = ['Basic']; + protected readonly examples = ['Basic', 'Custom Layout']; } diff --git a/projects/demo/src/modules/components/multi-select/examples/9/index.html b/projects/demo/src/modules/components/multi-select/examples/9/index.html index d92dc87f5abd8..04bb4eae9b246 100644 --- a/projects/demo/src/modules/components/multi-select/examples/9/index.html +++ b/projects/demo/src/modules/components/multi-select/examples/9/index.html @@ -34,7 +34,7 @@ let-data="data" >
-
+
diff --git a/projects/demo/src/modules/markup/form/examples/1/index.less b/projects/demo/src/modules/markup/form/examples/1/index.less deleted file mode 100644 index 8f118fadcd6e9..0000000000000 --- a/projects/demo/src/modules/markup/form/examples/1/index.less +++ /dev/null @@ -1,26 +0,0 @@ -@import '@taiga-ui/core/styles/taiga-ui-local'; - -:host { - display: block; -} - -.stepper { - margin-bottom: 2rem; -} - -.uppercase-name { - text-transform: uppercase; -} - -.account { - display: flex; - flex: 1; - justify-content: space-between; -} - -.ticks-labels { - .tui-slider-ticks-labels(); - - color: var(--tui-text-secondary); - margin-top: 0.25rem; -} diff --git a/projects/demo/src/modules/markup/form/index.html b/projects/demo/src/modules/markup/form/index.html deleted file mode 100644 index bd97a4416d7c0..0000000000000 --- a/projects/demo/src/modules/markup/form/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - -
- Use global - .tui-form - class and its modifications: -
-
    -
  • - .tui-form__header - : form header. Margins: 32px top and 20px bottom. -
      -
    • - .tui-form__header_margin-top_none - : nullifies - margin-top -
    • -
    • - .tui-form__header_margin-bottom_none - : nullifies - margin-bottom -
    • -
    • - .tui-form__header_margin-bottom_small - : reduced margin bottom (16px) - margin-bottom -
    • -
    -
  • -
  • - .tui-form__row - : form row. Margin between rows is 20px. -
      -
    • - .tui-form__row_multi-fields - : row with several inputs with 20px margin between them -
    • -
    • - .tui-form__row_half-width - : a half width row -
    • -
    • - .tui-form__row_checkboxes - : a row with two columns for checkboxes -
    • -
    -
  • -
  • - .tui-form__multi-field - : field in a row - tui-form__row_multi-fields - . fields with 20px margin between -
  • -
  • - .tui-form__checkbox - : checkbox with a label for two column case -
  • -
  • - .tui-form__field-note - : a secondary text under field -
  • -
  • - .tui-form__field-checkbox - : checkbox under a field -
  • -
  • - .tui-form__buttons - : a block with buttons and margin top 32px -
      -
    • - .tui-form__buttons_align_end - : align buttons right -
    • -
    • - .tui-form__buttons_align_center - : align buttons center -
    • -
    -
  • -
  • - .tui-form__button - : a button of buttons block -
  • -
- - -
-
diff --git a/projects/demo/src/modules/markup/form/index.ts b/projects/demo/src/modules/markup/form/index.ts deleted file mode 100644 index 4690d6b397aa6..0000000000000 --- a/projects/demo/src/modules/markup/form/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {Component} from '@angular/core'; -import {changeDetection} from '@demo/emulate/change-detection'; -import {TuiDemo} from '@demo/utils'; - -import {StylesInfo} from '../../app/styles-info'; - -@Component({ - standalone: true, - imports: [StylesInfo, TuiDemo], - templateUrl: './index.html', - changeDetection, -}) -export default class Page {} diff --git a/projects/demo/src/modules/pipes/field-error/examples/5/index.html b/projects/demo/src/modules/pipes/field-error/examples/5/index.html index 0c49cff8ef39a..98e9dc3a6e71a 100644 --- a/projects/demo/src/modules/pipes/field-error/examples/5/index.html +++ b/projects/demo/src/modules/pipes/field-error/examples/5/index.html @@ -1,15 +1,16 @@ -
-
- - Enter some text - + + + Enter some text + - -
+ diff --git a/projects/demo/src/modules/pipes/field-error/examples/5/index.ts b/projects/demo/src/modules/pipes/field-error/examples/5/index.ts index 9154a9c7318c6..7a62bb6cbb495 100644 --- a/projects/demo/src/modules/pipes/field-error/examples/5/index.ts +++ b/projects/demo/src/modules/pipes/field-error/examples/5/index.ts @@ -7,6 +7,7 @@ import {encapsulation} from '@demo/emulate/encapsulation'; import {TUI_IS_E2E, TuiValidationError} from '@taiga-ui/cdk'; import {TuiError} from '@taiga-ui/core'; import {TuiFieldErrorPipe} from '@taiga-ui/kit'; +import {TuiForm} from '@taiga-ui/layout'; import {TuiInputModule} from '@taiga-ui/legacy'; import {delay, of} from 'rxjs'; @@ -28,6 +29,7 @@ function asyncValidatorFn(isE2E: boolean): AsyncValidatorFn { ReactiveFormsModule, TuiError, TuiFieldErrorPipe, + TuiForm, TuiInputModule, ], templateUrl: './index.html', diff --git a/projects/layout/components/form/form.styles.less b/projects/layout/components/form/form.styles.less index ad50c74cee7eb..f47db42fed953 100644 --- a/projects/layout/components/form/form.styles.less +++ b/projects/layout/components/form/form.styles.less @@ -9,7 +9,7 @@ gap: 0.75rem; font: var(--tui-font-text-s); - tui-error { + tui-error:not(.tui-space-top-none) { margin-top: -0.75rem; } @@ -26,7 +26,7 @@ gap: 1rem; font: var(--tui-font-text-s); - tui-error { + tui-error:not(.tui-space-top-none) { margin-top: -1rem; } } @@ -35,7 +35,7 @@ gap: 1.25rem; font: var(--tui-font-text-m); - tui-error { + tui-error:not(.tui-space-top-none) { margin-top: -1.25rem; } } From c12ceaa21040ffcba72dde2911228171fb6caa92 Mon Sep 17 00:00:00 2001 From: Nikita Barsukov Date: Fri, 20 Dec 2024 14:12:20 +0300 Subject: [PATCH 03/21] chore(demo): use modern API page approach for documentation about `[tuiNumberFormat]` (#10034) --- .../src/components/number-format/index.html | 141 ++++++++ .../src/components/number-format/index.ts | 48 +++ .../inherited-documentation/index.html | 1 - .../abstract/inherited-documentation/index.ts | 9 - .../number-format-documentation/index.html | 90 ----- .../number-format-documentation/index.ts | 32 -- .../components/abstract/number-format.ts | 24 -- .../supporting-documentation-component.ts | 4 +- .../components/input-number/index.html | 18 +- .../modules/components/input-number/index.ts | 7 +- .../modules/components/input-range/index.html | 320 ++++++++++-------- .../modules/components/input-range/index.ts | 14 +- .../components/input-slider/index.html | 185 +++++----- .../modules/components/input-slider/index.ts | 6 +- .../modules/pipes/format-number/index.html | 22 +- .../src/modules/pipes/format-number/index.ts | 11 +- 16 files changed, 515 insertions(+), 417 deletions(-) create mode 100644 projects/demo/src/components/number-format/index.html create mode 100644 projects/demo/src/components/number-format/index.ts delete mode 100644 projects/demo/src/modules/components/abstract/number-format-documentation/index.html delete mode 100644 projects/demo/src/modules/components/abstract/number-format-documentation/index.ts delete mode 100644 projects/demo/src/modules/components/abstract/number-format.ts diff --git a/projects/demo/src/components/number-format/index.html b/projects/demo/src/components/number-format/index.html new file mode 100644 index 0000000000000..dc600e460a8b3 --- /dev/null +++ b/projects/demo/src/components/number-format/index.html @@ -0,0 +1,141 @@ + + + + + TuiNumberFormat + +
+ Usage example: +
+ [tuiNumberFormat]="{thousandSeparator, decimalSeparator, ..., rounding}" +
+
+ + + + + Symbol for separating thousands + + + + Symbol for separating fraction + + + + A number of digits after + [decimalSeparator] + ( + Infinity + for an untouched decimal part) + + + +
+
+ always +
+
+ number of digits after + [decimalSeparator] + is + always + equal to the precision. +
+ +
+ pad +
+
pads trailing zeroes up to precision, if the number is fractional
+ +
+ not-zero +
+
drops trailing zeroes
+
+ + + +
+
+ round +
+
+ rounds to the + nearest + number with the specified + [precision] +
+ +
+ floor +
+
+ rounds down (the + largest + number with the specified + [precision] + less than or equal to a given number) +
+ +
+ ceil +
+
+ rounds up (the + smallest + number with the specified + [precision] + greater than or equal to a given number) +
+ +
+ truncate +
+
+ returns the number with the specified + [precision] + by just removing extra fractional digits +
+
+ diff --git a/projects/demo/src/components/number-format/index.ts b/projects/demo/src/components/number-format/index.ts new file mode 100644 index 0000000000000..45abd332bb606 --- /dev/null +++ b/projects/demo/src/components/number-format/index.ts @@ -0,0 +1,48 @@ +import {NgIf} from '@angular/common'; +import type {WritableSignal} from '@angular/core'; +import {ChangeDetectionStrategy, Component, Input, signal} from '@angular/core'; +import {RouterLink} from '@angular/router'; +import {DemoRoute} from '@demo/routes'; +import {TuiDocAPIItem} from '@taiga-ui/addon-doc'; +import type {TuiLooseUnion, TuiRounding} from '@taiga-ui/cdk'; +import type {TuiDecimalMode, TuiNumberFormatSettings} from '@taiga-ui/core'; +import {TUI_DEFAULT_NUMBER_FORMAT, TuiLink, TuiTitle} from '@taiga-ui/core'; +import {tuiInputNumberOptionsProvider} from '@taiga-ui/legacy'; + +@Component({ + standalone: true, + selector: 'tbody[tuiDocNumberFormat]', + imports: [NgIf, RouterLink, TuiDocAPIItem, TuiLink, TuiTitle], + templateUrl: './index.html', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + tuiInputNumberOptionsProvider({ + min: 0, + }), + ], +}) +export class TuiDocNumberFormat + implements + Record< + keyof TuiNumberFormatSettings, + WritableSignal + > +{ + protected readonly routes = DemoRoute; + protected readonly decimalVariants: TuiDecimalMode[] = ['always', 'pad', 'not-zero']; + protected readonly roundingVariants: TuiRounding[] = [ + 'truncate', + 'round', + 'ceil', + 'floor', + ]; + + @Input() + public hiddenOptions: Array> = []; + + public thousandSeparator = signal(TUI_DEFAULT_NUMBER_FORMAT.thousandSeparator); + public decimalSeparator = signal(TUI_DEFAULT_NUMBER_FORMAT.decimalSeparator); + public precision = signal(TUI_DEFAULT_NUMBER_FORMAT.precision); + public decimalMode = signal(TUI_DEFAULT_NUMBER_FORMAT.decimalMode); + public rounding = signal(TUI_DEFAULT_NUMBER_FORMAT.rounding); +} diff --git a/projects/demo/src/modules/components/abstract/inherited-documentation/index.html b/projects/demo/src/modules/components/abstract/inherited-documentation/index.html index 6623203266357..19a182544bedd 100644 --- a/projects/demo/src/modules/components/abstract/inherited-documentation/index.html +++ b/projects/demo/src/modules/components/abstract/inherited-documentation/index.html @@ -1,5 +1,4 @@ - diff --git a/projects/demo/src/modules/components/abstract/inherited-documentation/index.ts b/projects/demo/src/modules/components/abstract/inherited-documentation/index.ts index c201f7d7431e9..4825ff69b5e18 100644 --- a/projects/demo/src/modules/components/abstract/inherited-documentation/index.ts +++ b/projects/demo/src/modules/components/abstract/inherited-documentation/index.ts @@ -14,8 +14,6 @@ import {DropdownDocumentation} from '../dropdown-documentation'; import {AbstractExampleTuiHint} from '../hint'; import {HintControllerDocumentation} from '../hint-controller-documentation'; import {AbstractExampleTuiInteractive} from '../interactive'; -import {AbstractExampleTuiNumberFormat} from '../number-format'; -import {NumberFormatDocumentation} from '../number-format-documentation'; import type {TuiSupportingDocumentationComponent} from '../supporting-documentation-component'; import {TextfieldControllerDocumentation} from '../textfield-controller-documentation'; @@ -26,7 +24,6 @@ import {TextfieldControllerDocumentation} from '../textfield-controller-document DropdownDocumentation, HintControllerDocumentation, NgIf, - NumberFormatDocumentation, TextfieldControllerDocumentation, TuiDocDocumentation, TuiDocDocumentationPropertyConnector, @@ -70,10 +67,4 @@ export class InheritedDocumentation { ): documentedComponent is AbstractExampleTuiHint { return documentedComponent instanceof AbstractExampleTuiHint; } - - protected isTuiFormatNumber( - documentedComponent: TuiSupportingDocumentationComponent, - ): documentedComponent is AbstractExampleTuiHint { - return documentedComponent instanceof AbstractExampleTuiNumberFormat; - } } diff --git a/projects/demo/src/modules/components/abstract/number-format-documentation/index.html b/projects/demo/src/modules/components/abstract/number-format-documentation/index.html deleted file mode 100644 index 5fc2642e93ffb..0000000000000 --- a/projects/demo/src/modules/components/abstract/number-format-documentation/index.html +++ /dev/null @@ -1,90 +0,0 @@ -
- Can be expanded with - - TuiNumberFormat - -
-

- Usage example: - - [tuiNumberFormat]='{decimalMode, precision, rounding, zeroPadding, thousandSeparator, - decimalSeparator}' - -

-

- Requires you to import - TuiNumberFormat - . -

- - - -
-
- always -
-
- number of digits after - decimalSeparator - is - always - equal to the precision. -
- -
- pad -
-
pads trailing zeroes up to precision, if the number is fractional
- -
- not-zero -
-
drops trailing zeroes
-
-
- - Rounding - - - A number of digits after comma ( - Infinity - for an untouched decimal part) - - - Symbol for separating thousands - - - Symbol for separating fraction - -
diff --git a/projects/demo/src/modules/components/abstract/number-format-documentation/index.ts b/projects/demo/src/modules/components/abstract/number-format-documentation/index.ts deleted file mode 100644 index c43690f247238..0000000000000 --- a/projects/demo/src/modules/components/abstract/number-format-documentation/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {Component, inject} from '@angular/core'; -import {RouterLink} from '@angular/router'; -import {changeDetection} from '@demo/emulate/change-detection'; -import {DemoRoute} from '@demo/routes'; -import { - TuiDocDocumentation, - TuiDocDocumentationPropertyConnector, -} from '@taiga-ui/addon-doc'; -import {TuiLink} from '@taiga-ui/core'; - -import {ABSTRACT_PROPS_ACCESSOR} from '../abstract-props-accessor'; -import type {AbstractExampleTuiNumberFormat} from '../number-format'; - -@Component({ - standalone: true, - selector: 'number-format-documentation', - imports: [ - RouterLink, - TuiDocDocumentation, - TuiDocDocumentationPropertyConnector, - TuiLink, - ], - templateUrl: './index.html', - changeDetection, -}) -export class NumberFormatDocumentation { - protected readonly documentedComponent = inject( - ABSTRACT_PROPS_ACCESSOR, - ); - - protected readonly routes = DemoRoute; -} diff --git a/projects/demo/src/modules/components/abstract/number-format.ts b/projects/demo/src/modules/components/abstract/number-format.ts deleted file mode 100644 index 1829ab6f3800d..0000000000000 --- a/projects/demo/src/modules/components/abstract/number-format.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type {TuiRounding} from '@taiga-ui/cdk'; -import type {TuiDecimalMode} from '@taiga-ui/core'; -import {TUI_DEFAULT_NUMBER_FORMAT} from '@taiga-ui/core'; - -import {AbstractExampleTuiControl} from './control'; - -export abstract class AbstractExampleTuiNumberFormat extends AbstractExampleTuiControl { - public precision = TUI_DEFAULT_NUMBER_FORMAT.precision; - - public readonly decimalVariants: TuiDecimalMode[] = ['always', 'pad', 'not-zero']; - public decimalMode = TUI_DEFAULT_NUMBER_FORMAT.decimalMode; - - public readonly roundingVariants: TuiRounding[] = [ - 'truncate', - 'round', - 'ceil', - 'floor', - ]; - - public rounding = TUI_DEFAULT_NUMBER_FORMAT.rounding; - - public decimalSeparator = TUI_DEFAULT_NUMBER_FORMAT.decimalSeparator; - public thousandSeparator = TUI_DEFAULT_NUMBER_FORMAT.thousandSeparator; -} diff --git a/projects/demo/src/modules/components/abstract/supporting-documentation-component.ts b/projects/demo/src/modules/components/abstract/supporting-documentation-component.ts index a6467e2dbbc48..a5fa099d1faad 100644 --- a/projects/demo/src/modules/components/abstract/supporting-documentation-component.ts +++ b/projects/demo/src/modules/components/abstract/supporting-documentation-component.ts @@ -1,10 +1,8 @@ import type {AbstractExampleTuiControl} from './control'; import type {AbstractExampleTuiHint} from './hint'; import type {AbstractExampleTuiInteractive} from './interactive'; -import type {AbstractExampleTuiNumberFormat} from './number-format'; export type TuiSupportingDocumentationComponent = | AbstractExampleTuiControl | AbstractExampleTuiHint - | AbstractExampleTuiInteractive - | AbstractExampleTuiNumberFormat; + | AbstractExampleTuiInteractive; diff --git a/projects/demo/src/modules/components/input-number/index.html b/projects/demo/src/modules/components/input-number/index.html index 1f2a2103e5b51..17a2f27967a03 100644 --- a/projects/demo/src/modules/components/input-number/index.html +++ b/projects/demo/src/modules/components/input-number/index.html @@ -176,11 +176,11 @@

There are also other components to input numbers:

[tuiHintContent]="hintContent" [tuiHintDirection]="hintDirection" [tuiNumberFormat]="{ - precision, - decimalMode: decimalMode, - rounding, - thousandSeparator, - decimalSeparator, + decimalMode: numberFormatDoc.decimalMode(), + rounding: numberFormatDoc.rounding(), + thousandSeparator: numberFormatDoc.thousandSeparator(), + decimalSeparator: numberFormatDoc.decimalSeparator(), + precision: numberFormatDoc.precision(), }" [tuiTextfieldCleaner]="cleaner" [tuiTextfieldCustomContent]="customContent" @@ -232,6 +232,14 @@

There are also other components to input numbers:

Step to increase/decrease value with keyboard and buttons on the side + + + +
+ @@ -129,159 +134,184 @@ - - - Disabled state (use - formControl.disable() - ) - - - Min value - - - Max value - - - Minimum indivisible value - - - Number of actual discrete slider steps - - - A number of visual segments - - - Anchor points of non-uniform format between value and position - - - A template for custom view of the left selected value. - - - A template for custom view of the right selected value. - - - Plural forms for labels. -

- Use object that mimics the + + + + Disabled state (use + formControl.disable() + ) + + + + The lowest value in the range of permitted values + + + + The greatest value in the range of permitted values + + + + Minimum indivisible value + + + + Number of actual discrete slider steps + + + + A number of visual segments (use + 1 + for no ticks) + + + + Anchor points of non-uniform format between value and position + + + + A template for custom view of the + left + selected value. + + + + A template for custom view of the + right + selected value. + + + + Plural forms for labels. + +

+ Use object that mimics the + + ICU format + + for Plural +

+ + + + Component is read only + + + + + + +
+ Can be expanded with - ICU format + TuiTextfieldController - for Plural -

- - - Component is read only - - +
-
- Can be expanded with - - TuiTextfieldController - -
- -

- Requires you to import - TuiTextfieldControllerModule -

+

+ Requires you to import + TuiTextfieldControllerModule +

- - - Label is outside a component and made with - - Label - - + Label is outside a component and made with + + Label + + - - Size - - - + + Size + + +
diff --git a/projects/demo/src/modules/components/input-range/index.ts b/projects/demo/src/modules/components/input-range/index.ts index 3f4a9f3657030..ac49a71d0426a 100644 --- a/projects/demo/src/modules/components/input-range/index.ts +++ b/projects/demo/src/modules/components/input-range/index.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; import {FormControl, ReactiveFormsModule} from '@angular/forms'; +import {TuiDocNumberFormat} from '@demo/components/number-format'; import {changeDetection} from '@demo/emulate/change-detection'; import {DemoRoute} from '@demo/routes'; import {TuiDemo} from '@demo/utils'; -import {tuiDocExcludeProperties} from '@taiga-ui/addon-doc'; import type {TuiContext} from '@taiga-ui/cdk'; import {tuiProvide} from '@taiga-ui/cdk'; import type {TuiSizeL} from '@taiga-ui/core'; @@ -12,27 +12,23 @@ import type {TuiKeySteps} from '@taiga-ui/kit'; import {TuiInputRangeModule, TuiTextfieldControllerModule} from '@taiga-ui/legacy'; import {ABSTRACT_PROPS_ACCESSOR} from '../abstract/abstract-props-accessor'; -import {AbstractExampleTuiNumberFormat} from '../abstract/number-format'; -import {NumberFormatDocumentation} from '../abstract/number-format-documentation'; +import {AbstractExampleTuiControl} from '../abstract/control'; @Component({ standalone: true, imports: [ - NumberFormatDocumentation, ReactiveFormsModule, TuiDemo, + TuiDocNumberFormat, TuiInputRangeModule, TuiNumberFormat, TuiTextfieldControllerModule, ], templateUrl: './index.html', changeDetection, - providers: [ - tuiProvide(ABSTRACT_PROPS_ACCESSOR, PageComponent), - tuiDocExcludeProperties(['precision']), - ], + providers: [tuiProvide(ABSTRACT_PROPS_ACCESSOR, PageComponent)], }) -export default class PageComponent extends AbstractExampleTuiNumberFormat { +export default class PageComponent extends AbstractExampleTuiControl { protected readonly routes = DemoRoute; protected minVariants: readonly number[] = [0, 5, 7.77, -10]; diff --git a/projects/demo/src/modules/components/input-slider/index.html b/projects/demo/src/modules/components/input-slider/index.html index 0538555605a96..4fd92fbce3dd8 100644 --- a/projects/demo/src/modules/components/input-slider/index.html +++ b/projects/demo/src/modules/components/input-slider/index.html @@ -113,7 +113,12 @@ [tuiHintAppearance]="hintAppearance" [tuiHintContent]="hintContent" [tuiHintDirection]="hintDirection" - [tuiNumberFormat]="{decimalMode: decimalMode, rounding, thousandSeparator, decimalSeparator}" + [tuiNumberFormat]="{ + decimalMode: numberFormatDoc.decimalMode(), + rounding: numberFormatDoc.rounding(), + thousandSeparator: numberFormatDoc.thousandSeparator(), + decimalSeparator: numberFormatDoc.decimalSeparator(), + }" [tuiTextfieldCleaner]="cleaner" [tuiTextfieldCustomContent]="customContentSelected" [tuiTextfieldIconLeft]="iconStart" @@ -127,87 +132,105 @@ - - - Disabled state (use - formControl.disable() - ) - - - Min value - - - Max value - - - Minimum indivisible value - - - Number of actual discrete slider steps -

- If property is not set (i.e. equals to default value - 0 - ), number of steps equals - (max - min) / quantum -

-
- - A number of visual segments (use - 1 - for no ticks) - - - Key steps to bind slider position and value - - - A template for custom view of selected value. - -
+ + + + Disabled state (use + formControl.disable() + ) + + + + The lowest value in the range of permitted values + + + + The greatest value in the range of permitted values + + + + Minimum indivisible value + + + + Number of actual discrete slider steps + +

+ If property is not set (i.e. equals to default value + 0 + ), number of steps equals + (max - min) / quantum +

+ + + + A number of visual segments (use + 1 + for no ticks) + + + + Anchor points of non-uniform format between value and position + + + + A template for custom view of selected value. + + + + +
+ diff --git a/projects/demo/src/modules/components/input-slider/index.ts b/projects/demo/src/modules/components/input-slider/index.ts index feb22515a607f..d6cbc6ffb4d1a 100644 --- a/projects/demo/src/modules/components/input-slider/index.ts +++ b/projects/demo/src/modules/components/input-slider/index.ts @@ -1,5 +1,6 @@ import {Component} from '@angular/core'; import {FormControl, ReactiveFormsModule} from '@angular/forms'; +import {TuiDocNumberFormat} from '@demo/components/number-format'; import {changeDetection} from '@demo/emulate/change-detection'; import {DemoRoute} from '@demo/routes'; import {TuiDemo} from '@demo/utils'; @@ -12,8 +13,8 @@ import type {TuiKeySteps} from '@taiga-ui/kit'; import {TuiInputSliderModule, TuiTextfieldControllerModule} from '@taiga-ui/legacy'; import {ABSTRACT_PROPS_ACCESSOR} from '../abstract/abstract-props-accessor'; +import {AbstractExampleTuiControl} from '../abstract/control'; import {InheritedDocumentation} from '../abstract/inherited-documentation'; -import {AbstractExampleTuiNumberFormat} from '../abstract/number-format'; @Component({ standalone: true, @@ -21,6 +22,7 @@ import {AbstractExampleTuiNumberFormat} from '../abstract/number-format'; InheritedDocumentation, ReactiveFormsModule, TuiDemo, + TuiDocNumberFormat, TuiHint, TuiInputSliderModule, TuiNumberFormat, @@ -33,7 +35,7 @@ import {AbstractExampleTuiNumberFormat} from '../abstract/number-format'; tuiDocExcludeProperties(['precision']), ], }) -export default class PageComponent extends AbstractExampleTuiNumberFormat { +export default class PageComponent extends AbstractExampleTuiControl { protected readonly routes = DemoRoute; protected readonly minVariants: readonly number[] = [0, 1, 5, 7.77, -10]; diff --git a/projects/demo/src/modules/pipes/format-number/index.html b/projects/demo/src/modules/pipes/format-number/index.html index 3dec61985ed6c..e869d86b67a36 100644 --- a/projects/demo/src/modules/pipes/format-number/index.html +++ b/projects/demo/src/modules/pipes/format-number/index.html @@ -33,17 +33,29 @@ [formControl]="control" [tuiTextfieldLabelOutside]="true" /> - Formatted number: - + Formatted number: +
+ {{ control.value ?? 0 | tuiFormatNumber - : {precision, decimalMode: decimalMode, rounding, thousandSeparator, decimalSeparator} + : { + precision: numberFormatDoc.precision(), + decimalMode: numberFormatDoc.decimalMode(), + rounding: numberFormatDoc.rounding(), + thousandSeparator: numberFormatDoc.thousandSeparator(), + decimalSeparator: numberFormatDoc.decimalSeparator(), + } | async }} -
+
- + + +
diff --git a/projects/demo/src/modules/pipes/format-number/index.ts b/projects/demo/src/modules/pipes/format-number/index.ts index eab79442a12f2..a79c0c55e675d 100644 --- a/projects/demo/src/modules/pipes/format-number/index.ts +++ b/projects/demo/src/modules/pipes/format-number/index.ts @@ -1,31 +1,26 @@ import {Component} from '@angular/core'; import {FormControl, ReactiveFormsModule} from '@angular/forms'; +import {TuiDocNumberFormat} from '@demo/components/number-format'; import {changeDetection} from '@demo/emulate/change-detection'; import {DemoRoute} from '@demo/routes'; import {TuiDemo} from '@demo/utils'; -import {tuiProvide} from '@taiga-ui/cdk'; import {TuiFormatNumberPipe} from '@taiga-ui/core'; import {TuiInputNumberModule, TuiTextfieldControllerModule} from '@taiga-ui/legacy'; -import {ABSTRACT_PROPS_ACCESSOR} from '../../components/abstract/abstract-props-accessor'; -import {AbstractExampleTuiNumberFormat} from '../../components/abstract/number-format'; -import {NumberFormatDocumentation} from '../../components/abstract/number-format-documentation'; - @Component({ standalone: true, imports: [ - NumberFormatDocumentation, ReactiveFormsModule, TuiDemo, + TuiDocNumberFormat, TuiFormatNumberPipe, TuiInputNumberModule, TuiTextfieldControllerModule, ], templateUrl: './index.html', changeDetection, - providers: [tuiProvide(ABSTRACT_PROPS_ACCESSOR, PageComponent)], }) -export default class PageComponent extends AbstractExampleTuiNumberFormat { +export default class PageComponent { protected readonly routes = DemoRoute; public readonly control = new FormControl(100); } From fb7a0ab472e67bb1254536353abf72b9baa94a91 Mon Sep 17 00:00:00 2001 From: taiga-family-bot <140712314+taiga-family-bot@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:51:30 +0300 Subject: [PATCH 04/21] chore: update codecov/codecov-action action to v5.1.2 (#10028) --- .github/workflows/test.yml | 2 +- projects/demo-playwright/utils/goto.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f244f3abf217b..db67bb19d42ab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: - uses: taiga-family/ci/actions/setup/node@v1.104.0 - run: npm test - run: tree -L 2 ./coverage -P 'lcov.info' - - uses: codecov/codecov-action@v5.1.1 + - uses: codecov/codecov-action@v5.1.2 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: diff --git a/projects/demo-playwright/utils/goto.ts b/projects/demo-playwright/utils/goto.ts index 5a460206e614b..1d5d3f47bb93f 100644 --- a/projects/demo-playwright/utils/goto.ts +++ b/projects/demo-playwright/utils/goto.ts @@ -67,7 +67,7 @@ export async function tuiGoto( await waitIcons({ page, timeout: 200, - icons: await page.locator('tui-icon >> visible=true').all(), + icons: await page.locator('tui-icon').all(), }); await tuiWaitForFonts(page); From fbddf1045def9a7f6330cbacbfbc46ff914346a7 Mon Sep 17 00:00:00 2001 From: taiga-family-bot <140712314+taiga-family-bot@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:35:28 +0300 Subject: [PATCH 05/21] chore: update @taiga-ui/* deps to v0.238.0 (#10039) --- package-lock.json | 430 ++++++++++++++++++++++++---------------------- package.json | 16 +- 2 files changed, 229 insertions(+), 217 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6074c1aeda7f..05bd38c6f0313 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,16 +28,16 @@ "@nx/jest": "20.1.4", "@nx/workspace": "20.1.4", "@schematics/angular": "16.2.16", - "@taiga-ui/browserslist-config": "0.237.0", - "@taiga-ui/commitlint-config": "0.237.0", - "@taiga-ui/cspell-config": "0.237.0", + "@taiga-ui/browserslist-config": "0.238.0", + "@taiga-ui/commitlint-config": "0.238.0", + "@taiga-ui/cspell-config": "0.238.0", "@taiga-ui/design-tokens": "0.157.0", - "@taiga-ui/eslint-plugin-experience": "0.237.0", + "@taiga-ui/eslint-plugin-experience": "0.238.0", "@taiga-ui/event-plugins": "4.3.1", - "@taiga-ui/jest-config": "0.237.0", - "@taiga-ui/prettier-config": "0.237.0", - "@taiga-ui/stylelint-config": "0.237.0", - "@taiga-ui/tsconfig": "0.237.0", + "@taiga-ui/jest-config": "0.238.0", + "@taiga-ui/prettier-config": "0.238.0", + "@taiga-ui/stylelint-config": "0.238.0", + "@taiga-ui/tsconfig": "0.238.0", "@types/glob": "8.1.0", "@types/loader-utils": "2.0.6", "@types/node": "22.10.2", @@ -4212,9 +4212,9 @@ "peer": true }, "node_modules/@cspell/dict-companies": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.9.tgz", - "integrity": "sha512-w7XEJ2B6x2jq9ws5XNyYgpYj2MxdZ3jW3PETLxjK7nc8pulCFmaGVgZ0JTnDWfJ3QMOczoagn5f9LM2PZ/CuJg==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.10.tgz", + "integrity": "sha512-KpRLiVDCpTkF+IjWnuYc31B0gyHVh0TSf/MDrWPobl9oYNQRWFUMACAJO9FP+kHI0jzLjTyLC1KpKwqte/88iA==", "dev": true, "license": "MIT", "peer": true @@ -4506,9 +4506,9 @@ "peer": true }, "node_modules/@cspell/dict-npm": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.18.tgz", - "integrity": "sha512-/Nukl+DSxtEWSlb8svWFSpJVctAsM9SP+f5Q1n+qdDcXNKMb1bUCo/d3QZPwyOhuMjDawnsGBUAfp+iq7Mw83Q==", + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.19.tgz", + "integrity": "sha512-ygpKeCXKURqymycqZEF9r/TytkWZxedDehudqiJLtPI6OZJhx3Kxy3hysiRq7RYpHiK+LSX39bwpxGM/h0Ghnw==", "dev": true, "license": "MIT", "peer": true @@ -4597,9 +4597,9 @@ "peer": true }, "node_modules/@cspell/dict-software-terms": { - "version": "4.1.20", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.1.20.tgz", - "integrity": "sha512-ma51njqbk9ZKzZF9NpCZpZ+c50EwR5JTJ2LEXlX0tX+ExVbKpthhlDLhT2+mkUh5Zvj+CLf5F9z0qB4+X3re/w==", + "version": "4.1.21", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.1.21.tgz", + "integrity": "sha512-LXoFLHzqPeehPMpu4mLpUoP+UVgT8aDfMuuvpsowvDc/nYaMq0UvnPVo632VOi5SUOzFX6NHsQ4x5eP3TRUOFA==", "dev": true, "license": "MIT", "peer": true @@ -8792,9 +8792,9 @@ } }, "node_modules/@nx/webpack/node_modules/memfs": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.0.tgz", - "integrity": "sha512-q9MmZXd2rRWHS6GU3WEm3HyiXZyyoA1DqdOhEq0lxPBmKb5S7IAOwX0RgUCwJfqjelDCySa5h8ujOy24LqsWcw==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.1.tgz", + "integrity": "sha512-ufCzgFwiVnR6R9cCYuvwznJdhdYXEvFl0hpnM4cCtVaVkHuqBR+6fo2sqt1SSMdp+uiHw9GyPZr3OMM5tqjSmQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9794,9 +9794,9 @@ "link": true }, "node_modules/@taiga-ui/browserslist-config": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/browserslist-config/-/browserslist-config-0.237.0.tgz", - "integrity": "sha512-WIVSoLoht2BkUzyvokSFZJMKbA4e5p0NK7NySahNev4U51KtvKv/LJaQdgMC2tiP0TQMi23rIVEPstvDp0bMrA==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/browserslist-config/-/browserslist-config-0.238.0.tgz", + "integrity": "sha512-oI9e48rqpsHXQY/MFfrcT+FT/5fcCibb/G4glC7z5t58G/Y++iorh2wBiDrKEPpI7dcRzEKplWLAmWuEwmRwNg==", "dev": true, "license": "Apache-2.0" }, @@ -9805,9 +9805,9 @@ "link": true }, "node_modules/@taiga-ui/commitlint-config": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/commitlint-config/-/commitlint-config-0.237.0.tgz", - "integrity": "sha512-S3A/546+RXaPXT2HvrZpGjt/z28d3tyYCKK6jAG+py66G7322pmoVDXUnsQi++5Tke/BdL0ScyQsOHSlTaebVQ==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/commitlint-config/-/commitlint-config-0.238.0.tgz", + "integrity": "sha512-8oEK375QSrJx0HDoAnLbRUCsty/NMHZv0PcrZVQ4kH6M8tGskn0Ba+i9e1S0LQK38A7EtIGVtBHAT3pOv9pu+g==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -9820,9 +9820,9 @@ "link": true }, "node_modules/@taiga-ui/cspell-config": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/cspell-config/-/cspell-config-0.237.0.tgz", - "integrity": "sha512-dTF+uEsTnGew2RUPPbcdXKYQrfHVMYgWnG4MOP3YhYF5t30+taBqq/ZBvoNLVIPz2NXKOsgh9rvBX9EuqdLsDA==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/cspell-config/-/cspell-config-0.238.0.tgz", + "integrity": "sha512-djfHBbHKbBAg+BWM1MpOrtyXKXuOh+HiJXJP9leLB+Hj/JyyDE6cwkOrLl02gOuRmfoCD9z3TZhFFf/bR+v9aw==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -9872,9 +9872,9 @@ } }, "node_modules/@taiga-ui/eslint-plugin-experience": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/eslint-plugin-experience/-/eslint-plugin-experience-0.237.0.tgz", - "integrity": "sha512-y38Lj55O501M1+2FqXjeK87IWGj5/DnA1yPJxdfog7GZ/xHD6IxTT5T149PBhDRW9BT7xKAc0riwHdMCDRRkXQ==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/eslint-plugin-experience/-/eslint-plugin-experience-0.238.0.tgz", + "integrity": "sha512-LyPhQ8N2KyuHfKo+cUQcqXesfnGn8PNrKx0mib6ey1K5F0HzZ6jtVTQ3twfF7PClFdyNSqpUNcB40b0PkihOdQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9906,7 +9906,7 @@ "eslint-plugin-file-progress": "^1.5.0", "eslint-plugin-i18n": "^2.4.0", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.9.0", + "eslint-plugin-jest": "^28.10.0", "eslint-plugin-node-import": "^1.0.4", "eslint-plugin-perfectionist": "^3.9.1", "eslint-plugin-playwright": "^1.8.3", @@ -10038,9 +10038,9 @@ "link": true }, "node_modules/@taiga-ui/jest-config": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/jest-config/-/jest-config-0.237.0.tgz", - "integrity": "sha512-23kvf9lL7sGVjcChipNFChyZYWATk3rj7+jY99GzSRDlRSIH9YwlU+Rt4cOo4dF3byAhF6/7f1hqDMbBeZ/Mnw==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/jest-config/-/jest-config-0.238.0.tgz", + "integrity": "sha512-lDglvOmKjgyWoKP2ZClU9OyrmgcM7f3n13SbbIwFhXzOkDxE4+8K6ZIlhvvb3sIqLWxDHsFO+7O7SCtm8LOR8Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10077,9 +10077,9 @@ } }, "node_modules/@taiga-ui/prettier-config": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/prettier-config/-/prettier-config-0.237.0.tgz", - "integrity": "sha512-71tvVzmjLlElqlHjii2kHLXehfpB8dEDa9xhSEGNcvZyylgPKSYF9yJWrALjA+SxltSDiu/VxJovVlA/MAWv9Q==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/prettier-config/-/prettier-config-0.238.0.tgz", + "integrity": "sha512-xBlkW1RKdf1NELtTk3Tmx9L05sR9S0HxR6tHFfehxY5+vGYr35kXzBmkH5qSSIQapZtJ8awnTX15wtgPkb0Vtg==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -10092,9 +10092,9 @@ } }, "node_modules/@taiga-ui/stylelint-config": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/stylelint-config/-/stylelint-config-0.237.0.tgz", - "integrity": "sha512-/twcQSk0X7rVJDDsMV04obYKnjJrCzo3T4HIf+L9dIqACk/ujvb5lfojBW6/XxMEd7BEOwt1ahTtdbGjbW7TOw==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/stylelint-config/-/stylelint-config-0.238.0.tgz", + "integrity": "sha512-s4pvsMAzs+MpH2reW1TEoru0VZRvIO1Q7TirHivCtEDWy8KOS0+Tv5pjRJnklrzE38PzNUOAk4iFavkuLogFqw==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -10118,9 +10118,9 @@ "link": true }, "node_modules/@taiga-ui/tsconfig": { - "version": "0.237.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/tsconfig/-/tsconfig-0.237.0.tgz", - "integrity": "sha512-vwyunNJDSiiWH709VTElKGGQ7oh5e6jbg2UxGK20SiqqE8vV2NUojdC3Iqha6swJ2d1LZNn8fFvcPZ0uv1sxPA==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/tsconfig/-/tsconfig-0.238.0.tgz", + "integrity": "sha512-3eXUCvDHtsMWcvX0eJsa7IuS22vkb2awTKHcaE4RO6tOlbC+YrMU2KO4xzEzTIjzmlFGpfHzZlZfFgqsnCNFxA==", "dev": true, "license": "Apache-2.0" }, @@ -12375,15 +12375,15 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -13988,9 +13988,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001689", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", - "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==", + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", "dev": true, "funding": [ { @@ -14016,11 +14016,12 @@ "license": "Apache-2.0" }, "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -16908,16 +16909,16 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -16927,33 +16928,33 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -17793,9 +17794,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.74", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz", - "integrity": "sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==", + "version": "1.5.75", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz", + "integrity": "sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==", "dev": true, "license": "ISC" }, @@ -18019,9 +18020,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18112,29 +18113,29 @@ } }, "node_modules/es-abstract": { - "version": "1.23.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", - "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", + "version": "1.23.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.7.tgz", + "integrity": "sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", + "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.7", + "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.2.6", - "get-symbol-description": "^1.0.2", + "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", @@ -18142,31 +18143,30 @@ "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.4", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.3", + "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", - "is-typed-array": "^1.1.13", + "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", - "math-intrinsics": "^1.0.0", + "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", + "object.assign": "^4.1.7", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", "safe-regex-test": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.3", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.16" + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -18218,28 +18218,29 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -18572,9 +18573,9 @@ } }, "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "1.22.9", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz", - "integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "peer": true, @@ -18586,6 +18587,9 @@ "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -19036,9 +19040,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.9.0.tgz", - "integrity": "sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==", + "version": "28.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.10.0.tgz", + "integrity": "sha512-hyMWUxkBH99HpXT3p8hc7REbEZK3D+nk8vHXGgpB+XXsi0gO4PxMSP+pjfUzb67GnV9yawV9a53eUmcde1CCZA==", "dev": true, "license": "MIT", "peer": true, @@ -20593,9 +20597,9 @@ } }, "node_modules/eslint-plugin-unicorn/node_modules/globals": { - "version": "15.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz", - "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, "license": "MIT", "peer": true, @@ -22216,14 +22220,15 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz", - "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", @@ -23109,12 +23114,15 @@ "license": "(Apache-2.0 OR MPL-1.1)" }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -24253,9 +24261,9 @@ } }, "node_modules/is-core-module": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", - "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -24487,20 +24495,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -24637,14 +24631,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -24718,9 +24712,9 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.14.tgz", - "integrity": "sha512-lQUsHzcTb7rH57dajbOuZEuMDXjs9f04ZloER4QOpjpKcaw4f98BRUrs8aiO9Z4G7i7B0Xhgarg6SCgYcYi8Nw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "peer": true, @@ -27480,6 +27474,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/lint-staged/node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -28735,9 +28742,9 @@ } }, "node_modules/math-intrinsics": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", - "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -30768,16 +30775,18 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -30840,14 +30849,15 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -32833,9 +32843,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.25.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.2.tgz", - "integrity": "sha512-GEts1EH3oMnqdOIeXhlbBSddZ9nrINd070WBOiPO2ous1orrKGUM4SMDbwyjSWD1iMS2dBvaDjAa5qUhz3TXqw==", + "version": "10.25.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.3.tgz", + "integrity": "sha512-dzQmIFtM970z+fP9ziQ3yG4e3ULIbwZzJ734vaMVUTaKQ2+Ru1Ou/gjshOYVHCcd1rpAelC6ngjvjDXph98unQ==", "dev": true, "license": "MIT", "funding": { @@ -33657,21 +33667,21 @@ "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", - "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "dunder-proto": "^1.0.0", - "es-abstract": "^1.23.5", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", - "which-builtin-type": "^1.2.0" + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -36236,25 +36246,26 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -37529,22 +37540,22 @@ } }, "node_modules/tldts": { - "version": "6.1.68", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.68.tgz", - "integrity": "sha512-JKF17jROiYkjJPT73hUTEiTp2OBCf+kAlB+1novk8i6Q6dWjHsgEjw9VLiipV4KTJavazXhY1QUXyQFSem2T7w==", + "version": "6.1.69", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.69.tgz", + "integrity": "sha512-Oh/CqRQ1NXNY7cy9NkTPUauOWiTro0jEYZTioGbOmcQh6EC45oribyIMJp0OJO3677r13tO6SKdWoGZUx2BDFw==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^6.1.68" + "tldts-core": "^6.1.69" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.68", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.68.tgz", - "integrity": "sha512-85TdlS/DLW/gVdf2oyyzqp3ocS30WxjaL4la85EArl9cHUR/nizifKAJPziWewSZjDZS71U517/i6ciUeqtB5Q==", + "version": "6.1.69", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.69.tgz", + "integrity": "sha512-nygxy9n2PBUFQUtAXAc122gGo+04/j5qr5TGQFZTHafTKYvmARVXt2cA5rgero2/dnXUfkdPtiJoKmrd3T+wdA==", "dev": true, "license": "MIT" }, @@ -38267,16 +38278,16 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -38304,20 +38315,20 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -38377,9 +38388,9 @@ } }, "node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", "dev": true, "funding": [ { @@ -39458,17 +39469,18 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", - "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { diff --git a/package.json b/package.json index fe612bba7577b..beea13fc35f29 100644 --- a/package.json +++ b/package.json @@ -158,16 +158,16 @@ "@nx/jest": "20.1.4", "@nx/workspace": "20.1.4", "@schematics/angular": "16.2.16", - "@taiga-ui/browserslist-config": "0.237.0", - "@taiga-ui/commitlint-config": "0.237.0", - "@taiga-ui/cspell-config": "0.237.0", + "@taiga-ui/browserslist-config": "0.238.0", + "@taiga-ui/commitlint-config": "0.238.0", + "@taiga-ui/cspell-config": "0.238.0", "@taiga-ui/design-tokens": "0.157.0", - "@taiga-ui/eslint-plugin-experience": "0.237.0", + "@taiga-ui/eslint-plugin-experience": "0.238.0", "@taiga-ui/event-plugins": "4.3.1", - "@taiga-ui/jest-config": "0.237.0", - "@taiga-ui/prettier-config": "0.237.0", - "@taiga-ui/stylelint-config": "0.237.0", - "@taiga-ui/tsconfig": "0.237.0", + "@taiga-ui/jest-config": "0.238.0", + "@taiga-ui/prettier-config": "0.238.0", + "@taiga-ui/stylelint-config": "0.238.0", + "@taiga-ui/tsconfig": "0.238.0", "@types/glob": "8.1.0", "@types/loader-utils": "2.0.6", "@types/node": "22.10.2", From 27da56eb8f70167d6cd06ddc583e746a30267524 Mon Sep 17 00:00:00 2001 From: taiga-family-bot <140712314+taiga-family-bot@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:28:00 +0300 Subject: [PATCH 06/21] chore: update dependency lucide-static to v0.469.0 (#10036) Co-authored-by: taiga-family-bot --- package-lock.json | 8 ++++---- projects/icons/package.json | 2 +- projects/icons/src/snowflake-filled.svg | 18 ++++++++++++------ projects/icons/src/snowflake.svg | 18 ++++++++++++------ projects/icons/src/sun-snow-filled.svg | 16 ++++++++-------- projects/icons/src/sun-snow.svg | 16 ++++++++-------- .../icons/src/thermometer-snowflake-filled.svg | 14 ++++++++------ projects/icons/src/thermometer-snowflake.svg | 14 ++++++++------ 8 files changed, 61 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 05bd38c6f0313..feaa2ce2dcdaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28408,9 +28408,9 @@ } }, "node_modules/lucide-static": { - "version": "0.468.0", - "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.468.0.tgz", - "integrity": "sha512-JvpWui2umxRyEVMoETfMzb+qKqibV/sdoqJbKmW1JLdkuhXluJKoO6NqCbvCK/vAbUuH5bTEFD4T6uECsrNcnA==", + "version": "0.469.0", + "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.469.0.tgz", + "integrity": "sha512-ravTgZodIVLO53rJyjIq0iuCRHs+kjd3dAfOcTbA41KCDfdy0Pt6Me8akkhda3jRpbIxjKe1PpYZOg2eQnI/lA==", "dev": true, "license": "ISC" }, @@ -40056,7 +40056,7 @@ "version": "4.18.0", "license": "Apache-2.0", "devDependencies": { - "lucide-static": "0.468.0" + "lucide-static": "0.469.0" } }, "projects/icons-fontawesome": { diff --git a/projects/icons/package.json b/projects/icons/package.json index 44c075abde0d7..926a6eec1fef1 100644 --- a/projects/icons/package.json +++ b/projects/icons/package.json @@ -12,6 +12,6 @@ "repository": "https://github.com/taiga-family/taiga-ui", "license": "Apache-2.0", "devDependencies": { - "lucide-static": "0.468.0" + "lucide-static": "0.469.0" } } diff --git a/projects/icons/src/snowflake-filled.svg b/projects/icons/src/snowflake-filled.svg index ce168d165c77f..4631cb57b674b 100644 --- a/projects/icons/src/snowflake-filled.svg +++ b/projects/icons/src/snowflake-filled.svg @@ -9,10 +9,16 @@ stroke-linecap="round" stroke-linejoin="round" > - - - - - - + + + + + + + + + + + + diff --git a/projects/icons/src/snowflake.svg b/projects/icons/src/snowflake.svg index 46528a891e85d..6b4c7675a7067 100644 --- a/projects/icons/src/snowflake.svg +++ b/projects/icons/src/snowflake.svg @@ -9,10 +9,16 @@ stroke-linecap="round" stroke-linejoin="round" > - - - - - - + + + + + + + + + + + + diff --git a/projects/icons/src/sun-snow-filled.svg b/projects/icons/src/sun-snow-filled.svg index 4c15be59f7207..65aa37b38553f 100644 --- a/projects/icons/src/sun-snow-filled.svg +++ b/projects/icons/src/sun-snow-filled.svg @@ -9,15 +9,15 @@ stroke-linecap="round" stroke-linejoin="round" > - - - - + + + + + + + + - - - - diff --git a/projects/icons/src/sun-snow.svg b/projects/icons/src/sun-snow.svg index c85e42cd9e471..7d6bb7e3918fe 100644 --- a/projects/icons/src/sun-snow.svg +++ b/projects/icons/src/sun-snow.svg @@ -9,15 +9,15 @@ stroke-linecap="round" stroke-linejoin="round" > - - - - + + + + + + + + - - - - diff --git a/projects/icons/src/thermometer-snowflake-filled.svg b/projects/icons/src/thermometer-snowflake-filled.svg index a12365e822d75..15f2df65481a4 100644 --- a/projects/icons/src/thermometer-snowflake-filled.svg +++ b/projects/icons/src/thermometer-snowflake-filled.svg @@ -9,10 +9,12 @@ stroke-linecap="round" stroke-linejoin="round" > - - - - - - + + + + + + + + diff --git a/projects/icons/src/thermometer-snowflake.svg b/projects/icons/src/thermometer-snowflake.svg index 80af01e3dc333..17f6d38ba3273 100644 --- a/projects/icons/src/thermometer-snowflake.svg +++ b/projects/icons/src/thermometer-snowflake.svg @@ -9,10 +9,12 @@ stroke-linecap="round" stroke-linejoin="round" > - - - - - - + + + + + + + + From e3cfbc940e2cb0c196b551e39ff58a9ffa8ff1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=98=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Mon, 23 Dec 2024 12:45:25 +0300 Subject: [PATCH 07/21] fix(addon-mobile): virtual-scroll flickers during scroll in zoneless mode (#10023) --- .../components/mobile-calendar/mobile-calendar.style.less | 4 ++++ .../components/mobile-calendar/mobile-calendar.template.html | 3 +++ .../tests/legacy/input-date-range/input-date-range.pw.spec.ts | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/addon-mobile/components/mobile-calendar/mobile-calendar.style.less b/projects/addon-mobile/components/mobile-calendar/mobile-calendar.style.less index a574f5e48ef0c..ae0cd2077c55c 100644 --- a/projects/addon-mobile/components/mobile-calendar/mobile-calendar.style.less +++ b/projects/addon-mobile/components/mobile-calendar/mobile-calendar.style.less @@ -177,11 +177,15 @@ } .t-month-wrapper { + display: flex; margin: 0.625rem 0 -0.625rem; + block-size: 22.125rem; // itemSize: 354px; + flex-direction: column; } .t-month { block-size: 2.75rem; + inline-size: 100%; line-height: 2.75rem; padding-left: 1rem; font-size: 0.875rem; diff --git a/projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html b/projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html index 2146719ebda7d..0b724559abcfc 100644 --- a/projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html +++ b/projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html @@ -69,6 +69,9 @@
diff --git a/projects/demo-playwright/tests/legacy/input-date-range/input-date-range.pw.spec.ts b/projects/demo-playwright/tests/legacy/input-date-range/input-date-range.pw.spec.ts index 974c0ce6a5973..a3daabe165303 100644 --- a/projects/demo-playwright/tests/legacy/input-date-range/input-date-range.pw.spec.ts +++ b/projects/demo-playwright/tests/legacy/input-date-range/input-date-range.pw.spec.ts @@ -261,7 +261,7 @@ test.describe('InputDateRange', () => { await mobileCalendar.confirmButton.click(); await expect(inputDateRange.textfield).toHaveValue( - `17.08.2020${CHAR_NO_BREAK_SPACE}–${CHAR_NO_BREAK_SPACE}17.08.2020`, + `17.09.2020${CHAR_NO_BREAK_SPACE}–${CHAR_NO_BREAK_SPACE}17.09.2020`, ); }); }); From b2f43026bd1647a574dc788b542f993751932d13 Mon Sep 17 00:00:00 2001 From: Alex Inkin Date: Mon, 23 Dec 2024 15:02:10 +0400 Subject: [PATCH 08/21] chore(demo): improve form example (#10037) --- .../components/form/examples/2/index.html | 483 +++++++----------- .../components/form/examples/2/index.less | 119 +---- .../components/form/examples/2/index.ts | 2 +- .../demo/src/modules/components/form/index.ts | 2 +- 4 files changed, 197 insertions(+), 409 deletions(-) diff --git a/projects/demo/src/modules/components/form/examples/2/index.html b/projects/demo/src/modules/components/form/examples/2/index.html index b8dc70016d7e1..a24c03341e921 100644 --- a/projects/demo/src/modules/components/form/examples/2/index.html +++ b/projects/demo/src/modules/components/form/examples/2/index.html @@ -1,315 +1,206 @@ -
-
- - - - - - -
+ + + + + + -
+
+

+ A header + Form with large controls +

+
+ + -
-

A header

-
+ Textfield + +
+ - - Textfield - - - - + Input date + + + - - Input date - +
+ Input password + - - - -
-
- Input password - -
-
- - Input money - - -
-
- + - Some slider - -
- from 50 000 ₽ - to 3 000 000 ₽ -
-
Some additional text
+ Input money +
-
-
- - Choose a person - - - -
{{ data.firstName }} {{ data.lastName }}
-
- -
-
- Input phone - -
-
-
-

Header

-
-
- - -
-
- Input time -
-
- - - - -
-
-

Header

-
- -
+ + + Some slider + +
+ from 50 000 ₽ + to 3 000 000 ₽ +
+ +
+
+ + Choose a person - -
-

Header

-
-
- - Textfield - - - +
-
- - +
+ Input phone +
- +
+ + +
+
+ + + + +
+ +
+ +
+ Cancel + + + diff --git a/projects/demo/src/modules/components/form/examples/2/index.less b/projects/demo/src/modules/components/form/examples/2/index.less index 67edd78faf282..8710a452a2163 100644 --- a/projects/demo/src/modules/components/form/examples/2/index.less +++ b/projects/demo/src/modules/components/form/examples/2/index.less @@ -1,127 +1,24 @@ @import '@taiga-ui/core/styles/taiga-ui-local'; -@fields-space: 1.25rem; -@fields-space-mobile: 1rem; -@fields-space-large: 0.75rem; -@fields-space-large-mobile: 1.5rem; - -:host { - display: block; -} - .stepper { margin-bottom: 2rem; } -.uppercase-name { - text-transform: uppercase; +.grid { + display: grid; + gap: inherit; + grid-template-columns: 1fr 1fr; } -.account { +.stack { display: flex; - flex: 1; - justify-content: space-between; + gap: inherit; + flex-direction: column; } .ticks-labels { .tui-slider-ticks-labels(); color: var(--tui-text-secondary); - margin-top: 0.25rem; -} - -.example2-form { - .multi-fields { - display: flex; - - @media @tui-mobile { - flex-wrap: wrap; - } - - .multi-field { - flex: 1 1 0; - min-inline-size: 0; - margin-left: @fields-space; - - &:first-child { - margin-left: 0; - } - - @media @tui-mobile { - flex-basis: 100%; - margin-top: @fields-space-mobile; - margin-left: 0; - - &:first-child { - margin-top: 0; - } - } - } - } - - .field-note { - font: var(--tui-font-text-s); - margin-top: 0.25rem; - color: var(--tui-text-secondary); - } - - .half-width { - inline-size: ~'calc(50% - (@{fields-space} / 2))'; - - @media @tui-mobile { - inline-size: 100%; - } - } - - .checkboxes { - display: flex; - flex-wrap: wrap; - - .checkbox { - flex: ~'1 1 calc(50% - 0.625rem)'; - - &:nth-child(even) { - margin-left: 1.25rem; - } - - &:nth-child(n + 3) { - margin-top: 1rem; - } - } - } - - .text-normal { - font: var(--tui-font-text-s); - } - - .buttons { - display: flex; - margin-top: @fields-space-large; - - &_align_end { - justify-content: flex-end; - } - - &_align_center { - justify-content: center; - } - - @media @tui-mobile { - flex-direction: column; - margin-top: @fields-space-large-mobile; - } - - .button { - margin-left: 0.75rem; - - &:first-child { - margin-left: 0; - } - - @media @tui-mobile { - margin-top: 0.5rem; - margin-left: 0; - } - } - } + margin-block-start: -1rem; } diff --git a/projects/demo/src/modules/components/form/examples/2/index.ts b/projects/demo/src/modules/components/form/examples/2/index.ts index e77bbf869053d..3d22eb12aae7c 100644 --- a/projects/demo/src/modules/components/form/examples/2/index.ts +++ b/projects/demo/src/modules/components/form/examples/2/index.ts @@ -125,7 +125,7 @@ export default class Example { periodValue: new FormControl(new TuiDay(2017, 2, 15), Validators.required), timeValue: new FormControl(new TuiTime(12, 30), Validators.required), personValue: new FormControl(this.persons[0]), - quantityValue: new FormControl(50_000, Validators.required), + quantityValue: new FormControl(50_000), radioValue: new FormControl('with-commission'), accountWherefrom: new FormControl(null), accountWhere: new FormControl(null), diff --git a/projects/demo/src/modules/components/form/index.ts b/projects/demo/src/modules/components/form/index.ts index ef62ae263633f..845d6eded67ff 100644 --- a/projects/demo/src/modules/components/form/index.ts +++ b/projects/demo/src/modules/components/form/index.ts @@ -10,5 +10,5 @@ import {TuiDemo} from '@demo/utils'; changeDetection, }) export default class Page { - protected readonly examples = ['Basic', 'Custom Layout']; + protected readonly examples = ['Basic', 'Expansive']; } From 681add262bd910c58b5686e7e3a101e4f3608359 Mon Sep 17 00:00:00 2001 From: taiga-family-bot <140712314+taiga-family-bot@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:00:34 +0300 Subject: [PATCH 09/21] chore: update dependency @taiga-ui/design-tokens to v0.158.0 (#10040) --- package-lock.json | 8 ++--- package.json | 2 +- .../multi-select/multi-select.pw.spec.ts | 32 +++++++++---------- .../tests/legacy/select/select.pw.spec.ts | 8 +++-- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index feaa2ce2dcdaf..2ce8fe9048ad7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@taiga-ui/browserslist-config": "0.238.0", "@taiga-ui/commitlint-config": "0.238.0", "@taiga-ui/cspell-config": "0.238.0", - "@taiga-ui/design-tokens": "0.157.0", + "@taiga-ui/design-tokens": "0.158.0", "@taiga-ui/eslint-plugin-experience": "0.238.0", "@taiga-ui/event-plugins": "4.3.1", "@taiga-ui/jest-config": "0.238.0", @@ -9846,9 +9846,9 @@ "link": true }, "node_modules/@taiga-ui/design-tokens": { - "version": "0.157.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/design-tokens/-/design-tokens-0.157.0.tgz", - "integrity": "sha512-flq2utD5stWVxF8SHtmgu01PN/uf91hQ5pXVTuZ5xOqp9LhNA9gPsBtul3d3/l0DmqWcnolcWmkp9ctUEb1XZA==", + "version": "0.158.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/design-tokens/-/design-tokens-0.158.0.tgz", + "integrity": "sha512-a/B0wK1lzmBIQj1L+fK2mtT19gkCzm2peWiYujhY8J4UsDW+J72drRzm1jZSfyZEmHhmYolBEqj11U1eqVHk5g==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index beea13fc35f29..887af785c1fd4 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "@taiga-ui/browserslist-config": "0.238.0", "@taiga-ui/commitlint-config": "0.238.0", "@taiga-ui/cspell-config": "0.238.0", - "@taiga-ui/design-tokens": "0.157.0", + "@taiga-ui/design-tokens": "0.158.0", "@taiga-ui/eslint-plugin-experience": "0.238.0", "@taiga-ui/event-plugins": "4.3.1", "@taiga-ui/jest-config": "0.238.0", diff --git a/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts b/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts index 37a80561c033f..0e8fa5aead274 100644 --- a/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts +++ b/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts @@ -7,16 +7,10 @@ test.describe('MultiSelect', () => { test.describe('Examples', () => { let documentationPage: TuiDocumentationPagePO; - test.beforeEach(async ({page, browserName}) => { + test.beforeEach(async ({page}) => { await tuiGoto(page, DemoRoute.MultiSelect); documentationPage = new TuiDocumentationPagePO(page); - - // TODO: why does this test keep failing in safari - test.skip( - browserName !== 'chromium', - 'This feature is only relevant in Chrome', - ); }); test('does not overflow arrow icon by many tags', async () => { @@ -37,7 +31,7 @@ test.describe('MultiSelect', () => { ); }); - test('multi-select with data list with label', async () => { + test('multi-select with data list with label', async ({page}) => { const example = documentationPage.getExample('#datalist'); const multiSelect = new TuiMultiSelectPO( example.locator('tui-multi-select').first(), @@ -45,13 +39,15 @@ test.describe('MultiSelect', () => { await multiSelect.arrow.click(); await documentationPage.waitStableState(); + await page.waitForTimeout(300); + await page.locator('tui-dropdown [tuiOption]').first().hover(); await expect(multiSelect.dropdown).toHaveScreenshot( - '02-with-data-list__with-label.png', + '02-with-data-list-with-label.png', ); }); - test('multi-select with data list without label', async () => { + test('multi-select with data list without label', async ({page}) => { const example = documentationPage.getExample('#datalist'); const multiSelect = new TuiMultiSelectPO( example.locator('tui-multi-select').nth(1), @@ -59,9 +55,11 @@ test.describe('MultiSelect', () => { await multiSelect.arrow.click(); await documentationPage.waitStableState(); + await page.waitForTimeout(300); + await page.locator('tui-dropdown [tuiOption]').first().hover(); await expect(multiSelect.dropdown).toHaveScreenshot( - '03-with-data-list__without-label.png', + '03-with-data-list-without-label.png', ); }); @@ -144,7 +142,7 @@ test.describe('MultiSelect', () => { await documentationPage.waitStableState(); await expect(apiPageExample).toHaveScreenshot( - `06-update-on-${type}__1_initial.png`, + `06-update-on-${type}-1_initial.png`, ); await multiSelect.arrow.click(); @@ -153,35 +151,35 @@ test.describe('MultiSelect', () => { await documentationPage.waitStableState(); await expect(multiSelect.dropdown).toHaveScreenshot( - `06-update-on-${type}__2_selected-values.png`, + `06-update-on-${type}-2_selected-values.png`, ); await multiSelect.closeDropdown(); await documentationPage.waitStableState(); await expect(apiPageExample).toHaveScreenshot( - `06-update-on-${type}__3_hide-dropdown.png`, + `06-update-on-${type}-3_hide-dropdown.png`, ); await multiSelect.textfield.blur(); await documentationPage.waitStableState(); await expect(apiPageExample).toHaveScreenshot( - `06-update-on-${type}__4_blur-event.png`, + `06-update-on-${type}-4_blur-event.png`, ); await documentationPage.submitFormControlButton.click(); await documentationPage.waitStableState(); await expect(apiPageExample).toHaveScreenshot( - `06-update-on-${type}__5_submit-event.png`, + `06-update-on-${type}-5_submit-event.png`, ); await documentationPage.resetFormControlButton.click(); await documentationPage.waitStableState(); await expect(apiPageExample).toHaveScreenshot( - `06-update-on-${type}__6_reset.png`, + `06-update-on-${type}-6_reset.png`, ); }); }); diff --git a/projects/demo-playwright/tests/legacy/select/select.pw.spec.ts b/projects/demo-playwright/tests/legacy/select/select.pw.spec.ts index 11bd0fd76f992..3ffe54bd4b490 100644 --- a/projects/demo-playwright/tests/legacy/select/select.pw.spec.ts +++ b/projects/demo-playwright/tests/legacy/select/select.pw.spec.ts @@ -16,8 +16,10 @@ test.describe('Select', () => { test('checkmark size', async ({page}) => { const example = documentationPage.getExample('#template'); - const select = new TuiSelectPO(example.locator('tui-select').first()); + const selectLocator = example.locator('tui-select').first(); + const select = new TuiSelectPO(selectLocator); + await selectLocator.scrollIntoViewIfNeeded(); await select.textfield.click(); await expect(select.dropdown).toBeVisible(); @@ -32,8 +34,10 @@ test.describe('Select', () => { test('opens dropdown by click on icon', async ({page}) => { const example = documentationPage.getExample('#base'); - const select = new TuiSelectPO(example.locator('tui-select').last()); + const selectLocator = example.locator('tui-select').first(); + const select = new TuiSelectPO(selectLocator); + await selectLocator.scrollIntoViewIfNeeded(); await select.textfield.click({position: {x: 200, y: 30}}); await expect(select.dropdown).toBeVisible(); From 552d97ec0284df79e3c463f3a1b4c1835cc8c40e Mon Sep 17 00:00:00 2001 From: taiga-family-bot <140712314+taiga-family-bot@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:10:34 +0300 Subject: [PATCH 10/21] chore: update taiga-family/ci action to v1.105.0 (#10042) --- .github/workflows/assign-author.yml | 2 +- .github/workflows/auto-merge.yml | 10 +++---- .github/workflows/auto-update-icons.yml | 6 ++-- .github/workflows/build.yml | 8 +++--- .github/workflows/create-release.yml | 4 +-- .github/workflows/deploy-gh-pages.yml | 2 +- .github/workflows/deploy-preview.yml | 4 +-- .github/workflows/e2e.yml | 28 +++++++++---------- .github/workflows/lint.yml | 6 ++-- .github/workflows/publish-canary.yml | 6 ++-- .github/workflows/publish.yml | 12 ++++---- .github/workflows/ready-to-merge.yml | 4 +-- .github/workflows/schematic.yml | 4 +-- .github/workflows/snapshots.yml | 8 +++--- .github/workflows/test.yml | 4 +-- .../multi-select/multi-select.pw.spec.ts | 4 +-- .../page-objects/documentation-api-page.po.ts | 8 ++++++ 17 files changed, 64 insertions(+), 56 deletions(-) diff --git a/.github/workflows/assign-author.yml b/.github/workflows/assign-author.yml index c33ec153d8111..41f4dae0f4369 100644 --- a/.github/workflows/assign-author.yml +++ b/.github/workflows/assign-author.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 - uses: toshimaru/auto-author-assign@v2.1.1 continue-on-error: true diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index ded74aceed20a..8a51d2dfb61a2 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -13,7 +13,7 @@ jobs: matrix: ${{ steps.matrix.outputs.value }} steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 - id: matrix if: env.IS_TAIGA_FAMILY_BOT_PR_AUTHOR == 'true' run: | @@ -31,7 +31,7 @@ jobs: matrix: value: ${{ fromJSON(needs.setup.outputs.matrix) }} steps: - - uses: taiga-family/ci/actions/run/wait-job@v1.104.0 + - uses: taiga-family/ci/actions/run/wait-job@v1.105.0 with: token: ${{ secrets.GITHUB_TOKEN }} job: ${{ matrix.value }} @@ -41,13 +41,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/auto/approve/double@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/auto/approve/double@v1.105.0 if: env.IS_TAIGA_FAMILY_BOT_PR_AUTHOR == 'true' with: token1: ${{ secrets.GITHUB_TOKEN }} token2: ${{ secrets.TAIGA_FAMILY_APPROVE_BOT_PAT }} - - uses: taiga-family/ci/actions/run/merge@v1.104.0 + - uses: taiga-family/ci/actions/run/merge@v1.105.0 if: env.IS_TAIGA_FAMILY_BOT_PR_AUTHOR == 'true' with: token: ${{ secrets.TAIGA_FAMILY_BOT_PAT }} diff --git a/.github/workflows/auto-update-icons.yml b/.github/workflows/auto-update-icons.yml index c30c100c64218..74fca23fea91e 100644 --- a/.github/workflows/auto-update-icons.yml +++ b/.github/workflows/auto-update-icons.yml @@ -11,8 +11,8 @@ jobs: - uses: actions/checkout@v4.2.2 with: persist-credentials: false - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - name: Lucide icons run: | npx nx prebuild icons @@ -31,7 +31,7 @@ jobs: npx eslint ./projects/demo/used-icons.ts --fix || echo "no file matching" npx prettier ./projects/demo/used-icons.ts --write || echo "no file matching" npx prettier ./projects/cdk/constants/used-icons.ts --write || echo "no file matching" - - uses: taiga-family/ci/actions/auto/push@v1.104.0 + - uses: taiga-family/ci/actions/auto/push@v1.105.0 if: env.SUPPORT_AUTO_PUSH with: message: icons have changed diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5242cf598712c..fe5a995eb4ae1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,8 +11,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npm run run-many:build:libs - run: npx ts-node ./scripts/check-dist.ts @@ -22,8 +22,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npx nx prerender demo - run: npx --yes bundlemon --config .github/.bundlemonrc.json continue-on-error: true diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 612a925db8961..3cb7c03670c51 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -24,8 +24,8 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.TAIGA_FAMILY_BOT_PAT }} - - uses: taiga-family/ci/actions/setup/node@v1.104.0 - - uses: taiga-family/ci/actions/setup/config/git@v1.104.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 + - uses: taiga-family/ci/actions/setup/config/git@v1.105.0 with: token: ${{ secrets.TAIGA_FAMILY_BOT_PAT }} diff --git a/.github/workflows/deploy-gh-pages.yml b/.github/workflows/deploy-gh-pages.yml index 7f45a7df1ac4a..7a68750b29c78 100644 --- a/.github/workflows/deploy-gh-pages.yml +++ b/.github/workflows/deploy-gh-pages.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 - name: Prepare demo before deploy from snapshots run: | diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index fefe6823f00e8..24b0889855742 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -8,8 +8,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npx nx build demo - name: Debug output run: tree dist/demo/browser -P '*.html' diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 6856524f6a0b9..08df559da46bd 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -14,10 +14,10 @@ jobs: - uses: actions/checkout@v4.2.2 with: fetch-depth: 10 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/run/rebase@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/run/rebase@v1.105.0 continue-on-error: true - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npx nx type-check demo-playwright - name: Building demo-app of git-branch without cache @@ -41,8 +41,8 @@ jobs: - uses: actions/checkout@v4.2.2 with: ref: ${{ github.base_ref }} - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - name: Run tests for baseline state run: npx nx component-test demo-cypress @@ -57,8 +57,8 @@ jobs: retention-days: 1 - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - name: Download Cypress Baseline Snapshots uses: actions/download-artifact@v4.1.8 @@ -120,13 +120,13 @@ jobs: runs-on: ${{ matrix.shard.os }} steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 - name: Mac OS X building all dependencies if: ${{ contains( matrix.shard.os, 'macos') }} run: brew install pkg-config cairo pango libpng jpeg-turbo giflib librsvg --force || echo '' - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - name: Get installed Playwright version id: playwright-version @@ -152,7 +152,7 @@ jobs: path: dist/demo key: ${{ env.CACHE_DIST_KEY }} - - uses: taiga-family/ci/actions/run/serve@v1.104.0 + - uses: taiga-family/ci/actions/run/serve@v1.105.0 with: port: ${{ env.NG_SERVER_PORT }} directory: ${{ env.DIST }} @@ -165,12 +165,12 @@ jobs: --project=${{ matrix.shard.project }} \ --shard=${{ matrix.shard.index }}/${{ matrix.shard.total }} - - uses: taiga-family/ci/actions/run/clone@v1.104.0 + - uses: taiga-family/ci/actions/run/clone@v1.105.0 with: branch: snapshots/demo/next/${{ github.base_ref }} destination: ${{ env.DIST_NEXT }} - - uses: taiga-family/ci/actions/run/serve@v1.104.0 + - uses: taiga-family/ci/actions/run/serve@v1.105.0 with: port: ${{ env.NG_SERVER_PORT }} directory: ${{ env.DIST_NEXT }} @@ -230,8 +230,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - name: Download artifacts for Playwright continue-on-error: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 526302ab4231a..e7c6f8d111aff 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,8 +13,8 @@ jobs: - uses: actions/checkout@v4.2.2 with: persist-credentials: false - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npm run typecheck - run: npm run cspell - run: | @@ -27,7 +27,7 @@ jobs: npm run prettier -- --check npm run lint fi - - uses: taiga-family/ci/actions/auto/push@v1.104.0 + - uses: taiga-family/ci/actions/auto/push@v1.105.0 with: token: ${{ secrets.TAIGA_FAMILY_BOT_PAT }} diff --git a/.github/workflows/publish-canary.yml b/.github/workflows/publish-canary.yml index be090fbe0e2a6..cb244c996ede1 100644 --- a/.github/workflows/publish-canary.yml +++ b/.github/workflows/publish-canary.yml @@ -10,9 +10,9 @@ jobs: name: Publish canary steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 - - uses: taiga-family/ci/actions/setup/config/npm@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 + - uses: taiga-family/ci/actions/setup/config/npm@v1.105.0 with: token: ${{ secrets.TAIGA_UI_SCOPE_NPM_TOKEN }} - run: npx ts-node ./scripts/publish-canary.ts diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ff9078fa556df..00ea27bd539a5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,19 +11,19 @@ jobs: - uses: actions/checkout@v4.2.2 with: fetch-depth: 0 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 - - uses: taiga-family/ci/actions/setup/config/npm@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 + - uses: taiga-family/ci/actions/setup/config/npm@v1.105.0 with: token: ${{ secrets.TAIGA_UI_SCOPE_NPM_TOKEN }} - run: npx nx run-many -t publish - - uses: taiga-family/ci/actions/run/read-package-json@v1.104.0 + - uses: taiga-family/ci/actions/run/read-package-json@v1.105.0 id: info - name: Announce to Time messenger - uses: taiga-family/ci/actions/messenger/time/announce@v1.104.0 + uses: taiga-family/ci/actions/messenger/time/announce@v1.105.0 if: ${{ !contains(steps.info.outputs.version, 'rc') }} with: url: ${{ secrets.ANNOUNCE_WEBHOOK }} @@ -31,7 +31,7 @@ jobs: version: v${{ steps.info.outputs.version }} - name: Announce to Telegram messenger - uses: taiga-family/ci/actions/messenger/telegram/announce@v1.104.0 + uses: taiga-family/ci/actions/messenger/telegram/announce@v1.105.0 if: ${{ !contains(steps.info.outputs.version, 'rc') }} with: chatId: ${{ secrets.TAIGA_TELEGRAM_CHAT_ID }} diff --git a/.github/workflows/ready-to-merge.yml b/.github/workflows/ready-to-merge.yml index 8fe9235c75377..c02ba8bfe96ca 100644 --- a/.github/workflows/ready-to-merge.yml +++ b/.github/workflows/ready-to-merge.yml @@ -10,8 +10,8 @@ jobs: if: github.event.review.state == 'approved' steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/auto/label-when-approved@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/auto/label-when-approved@v1.105.0 with: approvals: 2 token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/schematic.yml b/.github/workflows/schematic.yml index 3f8c9e6fb7402..803b2e4f96547 100644 --- a/.github/workflows/schematic.yml +++ b/.github/workflows/schematic.yml @@ -8,8 +8,8 @@ jobs: name: Run the latest migration steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 - - uses: taiga-family/ci/actions/run/node-info@v1.104.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 + - uses: taiga-family/ci/actions/run/node-info@v1.105.0 id: info - run: npx nx run cdk:schematics --v=${{ steps.info.outputs.root-package-major-version }} diff --git a/.github/workflows/snapshots.yml b/.github/workflows/snapshots.yml index 3fe27293fb4e2..c899f8cf6c20d 100644 --- a/.github/workflows/snapshots.yml +++ b/.github/workflows/snapshots.yml @@ -16,8 +16,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npx nx build demo # Don't use prerender please, because it's flaky for e2e - run: tree ${{ env.DIST }} -P '*.html' @@ -35,8 +35,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 id: nodejs-workspace - run: npx nx prerender demo diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db67bb19d42ab..e9c808836ce92 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,8 +12,8 @@ jobs: name: Unit tests steps: - uses: actions/checkout@v4.2.2 - - uses: taiga-family/ci/actions/setup/variables@v1.104.0 - - uses: taiga-family/ci/actions/setup/node@v1.104.0 + - uses: taiga-family/ci/actions/setup/variables@v1.105.0 + - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npm test - run: tree -L 2 ./coverage -P 'lcov.info' - uses: codecov/codecov-action@v5.1.2 diff --git a/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts b/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts index 0e8fa5aead274..c5c343c9afea3 100644 --- a/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts +++ b/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts @@ -39,8 +39,8 @@ test.describe('MultiSelect', () => { await multiSelect.arrow.click(); await documentationPage.waitStableState(); - await page.waitForTimeout(300); await page.locator('tui-dropdown [tuiOption]').first().hover(); + await page.waitForTimeout(300); await expect(multiSelect.dropdown).toHaveScreenshot( '02-with-data-list-with-label.png', @@ -55,8 +55,8 @@ test.describe('MultiSelect', () => { await multiSelect.arrow.click(); await documentationPage.waitStableState(); - await page.waitForTimeout(300); await page.locator('tui-dropdown [tuiOption]').first().hover(); + await page.waitForTimeout(300); await expect(multiSelect.dropdown).toHaveScreenshot( '03-with-data-list-without-label.png', diff --git a/projects/demo-playwright/utils/page-objects/documentation-api-page.po.ts b/projects/demo-playwright/utils/page-objects/documentation-api-page.po.ts index 7296920caa1f4..e8c3b28e490c5 100644 --- a/projects/demo-playwright/utils/page-objects/documentation-api-page.po.ts +++ b/projects/demo-playwright/utils/page-objects/documentation-api-page.po.ts @@ -31,6 +31,14 @@ export class TuiDocumentationApiPagePO { } public async hideContent(): Promise { + const bars = await this.page + .locator('tui-root > tui-scroll-controls .t-bar') + .all(); + + for (const bar of bars) { + await tuiHideElement(bar); + } + return tuiHideElement(this.page.locator('tui-doc-page')); } From fb3bf1d1f09607564bcb5cbb5667b4d03a486e10 Mon Sep 17 00:00:00 2001 From: Vladimir Potekhin <46284632+vladimirpotekhin@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:58:51 +0300 Subject: [PATCH 11/21] chore: fix block migration (#9996) --- .cspell.json | 4 +++- .../v4/steps/constants/tags-to-replace.ts | 14 ++++++++++++++ .../v4/tests/schematic-migrate-blocked.spec.ts | 6 +++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.cspell.json b/.cspell.json index 6e5909793cd8f..f2aba0275f30e 100644 --- a/.cspell.json +++ b/.cspell.json @@ -13,7 +13,9 @@ "significand", "undoubtable", "Clintock", - "Bonorum" + "Bonorum", + "hidecheckbox", + "hideradio" ], "ignoreRegExpList": ["\\(https?://.*?\\)", "\\/{1}.+\\/{1}", "\\%2F.+", "\\%2C.+", "\\ɵ.+", "\\ыва.+"], "overrides": [ diff --git a/projects/cdk/schematics/ng-update/v4/steps/constants/tags-to-replace.ts b/projects/cdk/schematics/ng-update/v4/steps/constants/tags-to-replace.ts index a195a44adbed7..40b86b7fe78e2 100644 --- a/projects/cdk/schematics/ng-update/v4/steps/constants/tags-to-replace.ts +++ b/projects/cdk/schematics/ng-update/v4/steps/constants/tags-to-replace.ts @@ -31,15 +31,29 @@ export const TAGS_TO_REPLACE: ReplacementTag[] = [ to: 'input', addAttributes: ['tuiRadio', 'type="radio"'], }, + { + from: 'tui-checkbox-block', + to: 'input', + addAttributes: ['tuiCheckbox', 'type="checkbox"', 'tuiBlock'], + filterFn: (el) => el.attrs.some((attr) => attr.name === '[hidecheckbox]'), + }, { from: 'tui-checkbox-block', to: 'input', addAttributes: ['tuiCheckbox', 'type="checkbox"'], + filterFn: (el) => !el.attrs.some((attr) => attr.name === '[hidecheckbox]'), + }, + { + from: 'tui-radio-block', + to: 'input', + addAttributes: ['tuiRadio', 'type="radio"', 'tuiBlock'], + filterFn: (el) => el.attrs.some((attr) => attr.name === '[hideradio]'), }, { from: 'tui-radio-block', to: 'input', addAttributes: ['tuiRadio', 'type="radio"'], + filterFn: (el) => !el.attrs.some((attr) => attr.name === '[hideradio]'), }, { from: 'tui-hosted-dropdown', diff --git a/projects/cdk/schematics/ng-update/v4/tests/schematic-migrate-blocked.spec.ts b/projects/cdk/schematics/ng-update/v4/tests/schematic-migrate-blocked.spec.ts index b8801b2b5b7e9..f412d8b32fa3d 100644 --- a/projects/cdk/schematics/ng-update/v4/tests/schematic-migrate-blocked.spec.ts +++ b/projects/cdk/schematics/ng-update/v4/tests/schematic-migrate-blocked.spec.ts @@ -112,7 +112,7 @@ const TEMPLATE_AFTER = `
+ +
+
+ + +

+
+
+ + Research and Development Platform + +
+
+ Here you can initiate and participate in the review of package objects. Each object have up to 3 + groups of reviewers, with one response required from each type, and any other participant can + change both positive. +
+
+ + + Alex Inkin + + Edited 6 minutes ago + + + Private + +
+
+
+ + + +
+

+
+ +

+
Projects
+
+ +
+

+ + + +
+ + + + Code + + + Repositories + + Taiga UI + +
+

+ Personal and Development Plan + + Here you can initiate and participate in the review of package objects. Each object have up to 3 + groups of reviewers, with one response required from each type, and any other participant can + change both positive + +

+
+
+ + + + + +
+

Some random content diff --git a/projects/demo/src/modules/components/navigation/examples/3/index.ts b/projects/demo/src/modules/components/navigation/examples/3/index.ts index 332302230018f..6f8c5cbba256a 100644 --- a/projects/demo/src/modules/components/navigation/examples/3/index.ts +++ b/projects/demo/src/modules/components/navigation/examples/3/index.ts @@ -1,38 +1,47 @@ +import {NgIf} from '@angular/common'; import {Component} from '@angular/core'; +import {FormsModule} from '@angular/forms'; import {changeDetection} from '@demo/emulate/change-detection'; import {encapsulation} from '@demo/emulate/encapsulation'; -import {TuiItem, TuiRepeatTimes} from '@taiga-ui/cdk'; +import {TuiRepeatTimes} from '@taiga-ui/cdk'; import { TuiAppearance, TuiButton, + TuiGroup, TuiIcon, TuiLink, - TuiSurface, + TuiTextfield, TuiTitle, } from '@taiga-ui/core'; -import {TuiAvatar, TuiBreadcrumbs, TuiTabs} from '@taiga-ui/kit'; +import {TuiBadge, TuiBlock, TuiBreadcrumbs, TuiFade, TuiTabs} from '@taiga-ui/kit'; import {TuiCardLarge, TuiHeader, TuiNavigation} from '@taiga-ui/layout'; @Component({ standalone: true, imports: [ + FormsModule, + NgIf, TuiAppearance, - TuiAvatar, + TuiBadge, + TuiBlock, TuiBreadcrumbs, TuiButton, TuiCardLarge, + TuiFade, + TuiGroup, TuiHeader, TuiIcon, - TuiItem, TuiLink, TuiNavigation, TuiRepeatTimes, - TuiSurface, TuiTabs, + TuiTextfield, TuiTitle, ], templateUrl: './index.html', encapsulation, changeDetection, }) -export default class Example {} +export default class Example { + protected current = 'basic'; +} diff --git a/projects/demo/src/modules/components/navigation/index.ts b/projects/demo/src/modules/components/navigation/index.ts index 996f4fe24cbc3..7b6af88b3ab7d 100644 --- a/projects/demo/src/modules/components/navigation/index.ts +++ b/projects/demo/src/modules/components/navigation/index.ts @@ -17,8 +17,8 @@ export default class Page implements OnDestroy { protected readonly theme = inject(TuiThemeColorService); protected readonly examples = [ 'Full', - 'Expansive heading', - 'Card heading', + 'Subheader compact', + 'Subheader object', 'Customization', ]; diff --git a/projects/layout/components/navigation/drawer.style.less b/projects/layout/components/navigation/drawer.style.less index e2588f157c378..cbe080dacc9ce 100644 --- a/projects/layout/components/navigation/drawer.style.less +++ b/projects/layout/components/navigation/drawer.style.less @@ -4,7 +4,7 @@ right: 0; bottom: 0; background: var(--tui-theme-color, #000); - inline-size: 13.75rem; + inline-size: 14.375rem; color: var(--tui-text-primary); pointer-events: auto; diff --git a/projects/layout/components/navigation/index.ts b/projects/layout/components/navigation/index.ts index eb8e1ffbcd87a..7e9f988df9bc0 100644 --- a/projects/layout/components/navigation/index.ts +++ b/projects/layout/components/navigation/index.ts @@ -8,3 +8,4 @@ export * from './logo.component'; export * from './main.component'; export * from './nav.component'; export * from './navigation'; +export * from './subheader.component'; diff --git a/projects/layout/components/navigation/main.style.less b/projects/layout/components/navigation/main.style.less index 0f2a8532a0a39..c7135510fac76 100644 --- a/projects/layout/components/navigation/main.style.less +++ b/projects/layout/components/navigation/main.style.less @@ -3,6 +3,7 @@ main[tuiNavigationMain] { .transition(max-width); + position: relative; display: grid; grid-template-columns: repeat(12, minmax(0, 8.5625rem)); align-items: start; @@ -14,6 +15,12 @@ main[tuiNavigationMain] { isolation: isolate; box-sizing: border-box; + > * { + grid-column: span 12; + max-inline-size: 100%; + } + + // @deprecated from here > nav[tuiNavigationNav]:not(:first-child) { border-image: conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 100vw; box-shadow: inset 0 -1px var(--tui-border-normal); @@ -84,9 +91,4 @@ main[tuiNavigationMain] { margin-top: 0.875rem; justify-self: flex-start; } - - > * { - grid-column: span 12; - max-inline-size: 100%; - } } diff --git a/projects/layout/components/navigation/navigation.ts b/projects/layout/components/navigation/navigation.ts index 12e80a2daf769..5159d0d66750c 100644 --- a/projects/layout/components/navigation/navigation.ts +++ b/projects/layout/components/navigation/navigation.ts @@ -7,6 +7,7 @@ import {TuiHintAsideDirective} from './hint-aside.directive'; import {TuiLogoComponent} from './logo.component'; import {TuiMainComponent} from './main.component'; import {TuiNavComponent} from './nav.component'; +import {TuiSubheaderCompactComponent, TuiSubheaderComponent} from './subheader.component'; export const TuiNavigation = [ TuiHeaderComponent, @@ -18,4 +19,6 @@ export const TuiNavigation = [ TuiNavComponent, TuiHintAsideDirective, TuiDrawerDirective, + TuiSubheaderComponent, + TuiSubheaderCompactComponent, ] as const; diff --git a/projects/layout/components/navigation/subheader.component.ts b/projects/layout/components/navigation/subheader.component.ts new file mode 100644 index 0000000000000..8320bdce007cf --- /dev/null +++ b/projects/layout/components/navigation/subheader.component.ts @@ -0,0 +1,59 @@ +import { + ChangeDetectionStrategy, + Component, + signal, + ViewEncapsulation, +} from '@angular/core'; +import {tuiButtonOptionsProvider} from '@taiga-ui/core/components/button'; +import {tuiLinkOptionsProvider} from '@taiga-ui/core/components/link'; +import {tuiTextfieldOptionsProvider} from '@taiga-ui/core/components/textfield'; +import {tuiDropdownOptionsProvider} from '@taiga-ui/core/directives/dropdown'; +import {tuiBreadcrumbsOptionsProvider} from '@taiga-ui/kit/components/breadcrumbs'; +import {tuiTabsOptionsProvider} from '@taiga-ui/kit/components/tabs'; + +const PROVIDERS = [ + tuiTextfieldOptionsProvider({size: signal('s')}), + tuiBreadcrumbsOptionsProvider({icon: '/'}), + tuiLinkOptionsProvider({appearance: 'action-grayscale'}), + tuiTabsOptionsProvider({size: 'm'}), + tuiDropdownOptionsProvider({align: 'right'}), +]; + +@Component({ + standalone: true, + selector: '[tuiSubheader]:not([compact])', + template: ` + + + + + + `, + styleUrls: ['./subheader.style.less'], + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + PROVIDERS, + tuiButtonOptionsProvider({appearance: 'secondary', size: 'xs'}), + ], +}) +export class TuiSubheaderComponent {} + +@Component({ + standalone: true, + selector: '[tuiSubheader][compact]', + template: ` +
+ + + +
+ `, + styleUrls: ['./subheader.style.less'], + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [PROVIDERS, tuiButtonOptionsProvider({size: 's'})], +}) +export class TuiSubheaderCompactComponent {} diff --git a/projects/layout/components/navigation/subheader.style.less b/projects/layout/components/navigation/subheader.style.less new file mode 100644 index 0000000000000..c7698e592ab3c --- /dev/null +++ b/projects/layout/components/navigation/subheader.style.less @@ -0,0 +1,93 @@ +[tuiSubheader][compact] { + top: 3rem; + z-index: 1; + block-size: var(--tui-height-m); + padding-block-start: 0.25rem; + + .t-nav-subheader { + position: absolute; + top: 0; + left: 0; + right: 0; + display: flex; + block-size: inherit; + align-items: center; + gap: 0.5rem; + font: var(--tui-font-text-s); + white-space: nowrap; + overflow: hidden; + padding: inherit; + border-image: linear-gradient(0deg, var(--tui-border-normal) 1px, var(--tui-background-base) 0) fill 0/0/0 100vw; + + tui-breadcrumbs { + flex: 1; + overflow: hidden; + } + + > tui-tabs, + > tui-tabs-with-more, + > [tuiTabs], + > [tuiTabsWithMore] { + margin-inline-start: auto; + margin-inline-end: 1.5rem; + border-inline-start: 3rem solid transparent; + box-shadow: none; + } + + tui-tabs::before, + tui-tabs-with-more::before, + [tuiTabs]::before, + [tuiTabsWithMore]::before { + background: var(--tui-background-accent-opposite-pressed); + } + } +} + +[tuiSubheader]:not([compact]) { + margin-block-start: 0.875rem; + + [tuiHeader] { + margin: 1rem 0 0.5rem; + + &:first-child { + margin-block-start: 0; + } + + [tuiTitle] { + max-inline-size: 42rem; + margin-inline-end: auto; + } + + [tuiSubtitle] { + font: var(--tui-font-text-s); + + tui-icon { + font-size: 1rem; + } + } + + & + tui-textfield { + margin-block-start: 0.75rem; + } + } + + tui-tabs, + [tuiTabs] { + margin-block-start: 0.5rem; + + &::before { + background: var(--tui-background-accent-opposite-pressed); + } + + [tuiButton], + [tuiIconButton] { + margin-inline-start: 0.5rem; + align-self: center; + } + + [tuiTab] + [tuiButton], + [tuiTab] + [tuiIconButton] { + margin-inline-start: auto; + } + } +} From 875011d1bf8223d64cd8d92f2006f196000d1bc3 Mon Sep 17 00:00:00 2001 From: taiga-family-bot <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:31:39 +0000 Subject: [PATCH 14/21] chore(release): 4.19.0 --- CHANGELOG.md | 57 +++++++++++++++++++++++++ package-lock.json | 42 +++++++++--------- package.json | 2 +- projects/addon-charts/package.json | 6 +-- projects/addon-commerce/package.json | 10 ++--- projects/addon-doc/package.json | 12 +++--- projects/addon-mobile/package.json | 8 ++-- projects/addon-table/package.json | 10 ++--- projects/cdk/constants/version.ts | 2 +- projects/cdk/package.json | 2 +- projects/core/package.json | 6 +-- projects/experimental/package.json | 10 ++--- projects/i18n/package.json | 2 +- projects/icons-fontawesome/package.json | 2 +- projects/icons-material/package.json | 2 +- projects/icons/package.json | 2 +- projects/kit/package.json | 8 ++-- projects/layout/package.json | 8 ++-- projects/legacy/package.json | 2 +- projects/styles/package.json | 6 +-- projects/taiga-schematics/package.json | 6 +-- projects/testing/package.json | 4 +- 22 files changed, 133 insertions(+), 76 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a07e207ab5d0..749671f608b34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,63 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [4.19.0](https://github.com/taiga-family/taiga-ui/compare/v4.18.0...v4.19.0) (2024-12-23) + +### 🐞 Bug Fixes + +- **addon-mobile:** virtual-scroll flickers during scroll in zoneless mode + ([#10023](https://github.com/taiga-family/taiga-ui/issues/10023)) + ([e3cfbc9](https://github.com/taiga-family/taiga-ui/commit/e3cfbc940e2cb0c196b551e39ff58a9ffa8ff1cb)) +- **addon-table:** fix calculating start page ([#9980](https://github.com/taiga-family/taiga-ui/issues/9980)) + ([d26f32b](https://github.com/taiga-family/taiga-ui/commit/d26f32b11948a3060e7840a9844a6b97e8a58ef8)) +- **cdk:** fix tuiFocusedIn error when focus events happened in reactive context + ([#10020](https://github.com/taiga-family/taiga-ui/issues/10020)) + ([12e9a29](https://github.com/taiga-family/taiga-ui/commit/12e9a29436b309f5d7b2229249c1113b06a2ff3d)) +- **core:** dialog has padding for close button event when not closeable + ([#10012](https://github.com/taiga-family/taiga-ui/issues/10012)) + ([97d24ad](https://github.com/taiga-family/taiga-ui/commit/97d24ad3a7c74f7c0447804234badc46997aca34)) +- **core:** dont allow to select disabled dates in calendar + ([#10007](https://github.com/taiga-family/taiga-ui/issues/10007)) + ([b5d328c](https://github.com/taiga-family/taiga-ui/commit/b5d328cb41a0e8c663c5fe875ef2db9a8f929036)) +- **core:** emit tuiDropdownOpenChange on distinct values + ([#9962](https://github.com/taiga-family/taiga-ui/issues/9962)) + ([f8ea2f2](https://github.com/taiga-family/taiga-ui/commit/f8ea2f2d41351dae33362acee7dd12e99767eea2)) +- **kit:** `Carousel` fix scrolling page on mobile devices + ([#10009](https://github.com/taiga-family/taiga-ui/issues/10009)) + ([13dcf7c](https://github.com/taiga-family/taiga-ui/commit/13dcf7c8c92f7d1198325f79816823dd0ee7eea4)) +- **kit:** `InputNumber` has rounding problems on blur with float large numbers + ([#9974](https://github.com/taiga-family/taiga-ui/issues/9974)) + ([9ec1e7b](https://github.com/taiga-family/taiga-ui/commit/9ec1e7b27301594df2e7f3d86862a16dc3d9b691)) +- **kit:** skeleton animation speed slow down after speed up `TUI_ANIMATION` + ([#9984](https://github.com/taiga-family/taiga-ui/issues/9984)) + ([b8bb938](https://github.com/taiga-family/taiga-ui/commit/b8bb938ec1f9b47d8b9b9e3f9e2f12e04841da28)) +- **kit:** strange behavior in Safari when working with tiles + ([#9952](https://github.com/taiga-family/taiga-ui/issues/9952)) + ([80614b3](https://github.com/taiga-family/taiga-ui/commit/80614b310e626092e3b0e316713e1a595ab4a693)) +- **legacy:** reset cached active period in `tui-input-date-range` + ([#9946](https://github.com/taiga-family/taiga-ui/issues/9946)) + ([1144fae](https://github.com/taiga-family/taiga-ui/commit/1144fae8c7589118c7ebe62eded7a3a7e9f219fd)) + +### 🚀 Features + +- **addon-commerce:** `InputCardGroup` add `inputs` option + ([#10033](https://github.com/taiga-family/taiga-ui/issues/10033)) + ([5e20a26](https://github.com/taiga-family/taiga-ui/commit/5e20a2612839a5c7be2b49df26be6175bb22b431)) +- **addon-commerce:** `ThumbnailCard` has new `xs` size + ([fc1ec3e](https://github.com/taiga-family/taiga-ui/commit/fc1ec3eba8e1e4d2e944a43f59f39f14b7dca99e)) +- **addon-commerce:** `ThumbnailCard` has new `xs` size ([#9969](https://github.com/taiga-family/taiga-ui/issues/9969)) + ([436e351](https://github.com/taiga-family/taiga-ui/commit/436e351a4c65d866db6b14056087256660222008)) +- **addon-table:** allow resize more than 100% width of table + ([#9961](https://github.com/taiga-family/taiga-ui/issues/9961)) + ([a16071a](https://github.com/taiga-family/taiga-ui/commit/a16071af434df266afd09b7bae4d5330c595b674)) +- **experimental:** `InputPhoneInternational` refactor to new textfield approach + ([#9976](https://github.com/taiga-family/taiga-ui/issues/9976)) + ([08f924d](https://github.com/taiga-family/taiga-ui/commit/08f924de9c3f756a72ce8cee0ac0f3072557b338)) +- **kit:** safety change active index in stepper ([#10004](https://github.com/taiga-family/taiga-ui/issues/10004)) + ([286b6d2](https://github.com/taiga-family/taiga-ui/commit/286b6d2274b1adeaa467b4fa4401f32bd9d0a72a)) +- **layout:** `Navigation` add `Subheader` component ([#10041](https://github.com/taiga-family/taiga-ui/issues/10041)) + ([7de5985](https://github.com/taiga-family/taiga-ui/commit/7de59857276cddbbb608343524932668b1a243f6)) + ## [4.18.0](https://github.com/taiga-family/taiga-ui/compare/v4.17.0...v4.18.0) (2024-12-10) ### 🐞 Bug Fixes diff --git a/package-lock.json b/package-lock.json index 2ce8fe9048ad7..4d24cf3dc32bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@taiga-ui/components", - "version": "4.18.0", + "version": "4.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@taiga-ui/components", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "workspaces": [ "projects/*" @@ -39822,7 +39822,7 @@ }, "projects/addon-charts": { "name": "@taiga-ui/addon-charts", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/common": ">=16.0.0", @@ -39836,7 +39836,7 @@ }, "projects/addon-commerce": { "name": "@taiga-ui/addon-commerce", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/common": ">=16.0.0", @@ -39857,7 +39857,7 @@ }, "projects/addon-doc": { "name": "@taiga-ui/addon-doc", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "devDependencies": { "@types/markdown-it": "14.1.2" @@ -39882,7 +39882,7 @@ }, "projects/addon-mobile": { "name": "@taiga-ui/addon-mobile", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/cdk": ">=16.0.0", @@ -39899,7 +39899,7 @@ }, "projects/addon-table": { "name": "@taiga-ui/addon-table", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/common": ">=16.0.0", @@ -39916,7 +39916,7 @@ }, "projects/cdk": { "name": "@taiga-ui/cdk", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "dependencies": { "tslib": "2.8.1" @@ -39952,7 +39952,7 @@ }, "projects/core": { "name": "@taiga-ui/core", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/animations": ">=16.0.0", @@ -40026,7 +40026,7 @@ }, "projects/experimental": { "name": "@taiga-ui/experimental", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/common": ">=16.0.0", @@ -40042,7 +40042,7 @@ }, "projects/i18n": { "name": "@taiga-ui/i18n", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/core": ">=16.0.0", @@ -40053,7 +40053,7 @@ }, "projects/icons": { "name": "@taiga-ui/icons", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "devDependencies": { "lucide-static": "0.469.0" @@ -40061,7 +40061,7 @@ }, "projects/icons-fontawesome": { "name": "@taiga-ui/icons-fontawesome", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "devDependencies": { "@fortawesome/fontawesome-free": "6.7.2" @@ -40069,7 +40069,7 @@ }, "projects/icons-material": { "name": "@taiga-ui/icons-material", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "devDependencies": { "@material-design-icons/svg": "0.14.13" @@ -40077,7 +40077,7 @@ }, "projects/kit": { "name": "@taiga-ui/kit", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/common": ">=16.0.0", @@ -40102,7 +40102,7 @@ }, "projects/layout": { "name": "@taiga-ui/layout", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/common": ">=16.0.0", @@ -40117,7 +40117,7 @@ }, "projects/legacy": { "name": "@taiga-ui/legacy", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "peerDependencies": { "@angular/core": ">=16.0.0", @@ -40126,7 +40126,7 @@ }, "projects/styles": { "name": "@taiga-ui/styles", - "version": "4.18.0", + "version": "4.19.0", "peerDependencies": { "@taiga-ui/cdk": "^4.18.0", "@taiga-ui/core": "^4.18.0", @@ -40135,10 +40135,10 @@ }, "projects/taiga-schematics": { "name": "taiga-ui", - "version": "4.18.0", + "version": "4.19.0", "license": "Apache-2.0", "dependencies": { - "@taiga-ui/cdk": "^4.18.0" + "@taiga-ui/cdk": "^4.19.0" }, "peerDependencies": { "@taiga-ui/cdk": "^4.18.0", @@ -40147,7 +40147,7 @@ }, "projects/testing": { "name": "@taiga-ui/testing", - "version": "4.18.0", + "version": "4.19.0", "devDependencies": { "@types/jest": "29.5.14", "jest": "29.7.0", diff --git a/package.json b/package.json index 887af785c1fd4..cf6e0439e0b50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/components", - "version": "4.18.0", + "version": "4.19.0", "private": true, "description": "Taiga UI is a set of components, services, directives and other tools to build high quality UI using modern Angular framework", "keywords": [ diff --git a/projects/addon-charts/package.json b/projects/addon-charts/package.json index 1cd6d92649ceb..c29c88adaf306 100644 --- a/projects/addon-charts/package.json +++ b/projects/addon-charts/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/addon-charts", - "version": "4.18.0", + "version": "4.19.0", "description": "Extension package for Taiga UI that adds various charts, graphs and related components.", "keywords": [ "angular", @@ -17,8 +17,8 @@ "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "tslib": ">=2.8.1" } diff --git a/projects/addon-commerce/package.json b/projects/addon-commerce/package.json index 6e42146e8203d..056a241254826 100644 --- a/projects/addon-commerce/package.json +++ b/projects/addon-commerce/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/addon-commerce", - "version": "4.18.0", + "version": "4.19.0", "description": "Extension package for Taiga UI related to commerce, payment systems, currencies etc.", "keywords": [ "angular", @@ -21,10 +21,10 @@ "@maskito/core": "^3.2.0", "@maskito/kit": "^3.2.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/i18n": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/i18n": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/addon-doc/package.json b/projects/addon-doc/package.json index e13a1a4cb0cbe..2a8ac76712a85 100644 --- a/projects/addon-doc/package.json +++ b/projects/addon-doc/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/addon-doc", - "version": "4.18.0", + "version": "4.19.0", "description": "Taiga UI based library for developing documentation portals for Angular libraries.", "keywords": [ "angular", @@ -23,11 +23,11 @@ "@angular/forms": ">=16.0.0", "@angular/router": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/addon-mobile": "^4.18.0", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", - "@taiga-ui/legacy": "^4.18.0", + "@taiga-ui/addon-mobile": "^4.19.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", + "@taiga-ui/legacy": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "markdown-it": ">=14.1.0", "ngx-highlightjs": ">=10.0.0", diff --git a/projects/addon-mobile/package.json b/projects/addon-mobile/package.json index 196dac2dc5da2..264d1e55f8411 100644 --- a/projects/addon-mobile/package.json +++ b/projects/addon-mobile/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/addon-mobile", - "version": "4.18.0", + "version": "4.19.0", "description": "Extension package for Taiga UI that adds support for mobile specific behaviors such as custom data pickers, dropdowns, etc.", "keywords": [ "angular", @@ -18,9 +18,9 @@ "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/addon-table/package.json b/projects/addon-table/package.json index b8562ff8ecca9..a6e49cdf9fab5 100644 --- a/projects/addon-table/package.json +++ b/projects/addon-table/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/addon-table", - "version": "4.18.0", + "version": "4.19.0", "description": "A library to display tabled data with filters, search, group actions, etc.", "keywords": [ "angular", @@ -16,10 +16,10 @@ "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", "@ng-web-apis/intersection-observer": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/i18n": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/i18n": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/cdk/constants/version.ts b/projects/cdk/constants/version.ts index b08596bb4ba80..4449dfd7b8b94 100644 --- a/projects/cdk/constants/version.ts +++ b/projects/cdk/constants/version.ts @@ -1 +1 @@ -export const TUI_VERSION = '4.18.0'; +export const TUI_VERSION = '4.19.0'; diff --git a/projects/cdk/package.json b/projects/cdk/package.json index 1dc8680f7d4b4..c207f8379c48a 100644 --- a/projects/cdk/package.json +++ b/projects/cdk/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/cdk", - "version": "4.18.0", + "version": "4.19.0", "description": "Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance", "keywords": [ "angular", diff --git a/projects/core/package.json b/projects/core/package.json index 3535c89bc0791..871717e1ad48b 100644 --- a/projects/core/package.json +++ b/projects/core/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/core", - "version": "4.18.0", + "version": "4.19.0", "description": "Core library for creating Angular components and applications using Taiga UI", "keywords": [ "angular", @@ -26,9 +26,9 @@ "@angular/router": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", "@ng-web-apis/mutation-observer": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", "@taiga-ui/event-plugins": "^4.3.1", - "@taiga-ui/i18n": "^4.18.0", + "@taiga-ui/i18n": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/experimental/package.json b/projects/experimental/package.json index 73dfc60e4baf7..004cd21694b14 100644 --- a/projects/experimental/package.json +++ b/projects/experimental/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/experimental", - "version": "4.18.0", + "version": "4.19.0", "description": "A package with Taiga UI experimental components", "keywords": [ "angular", @@ -13,10 +13,10 @@ "peerDependencies": { "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", - "@taiga-ui/addon-commerce": "^4.18.0", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/addon-commerce": "^4.19.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/i18n/package.json b/projects/i18n/package.json index a8cbb2851fe4d..2babcbc5fb5aa 100644 --- a/projects/i18n/package.json +++ b/projects/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/i18n", - "version": "4.18.0", + "version": "4.19.0", "description": "A package with tools for Taiga UI library i18n", "keywords": [ "angular", diff --git a/projects/icons-fontawesome/package.json b/projects/icons-fontawesome/package.json index 7c431af194783..afe61390a3665 100644 --- a/projects/icons-fontawesome/package.json +++ b/projects/icons-fontawesome/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/icons-fontawesome", - "version": "4.18.0", + "version": "4.19.0", "description": "FontAwesome icons for Taiga UI", "keywords": [ "angular", diff --git a/projects/icons-material/package.json b/projects/icons-material/package.json index 7666cffa11a73..711c9ff72bf5b 100644 --- a/projects/icons-material/package.json +++ b/projects/icons-material/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/icons-material", - "version": "4.18.0", + "version": "4.19.0", "description": "Feather icons for Taiga UI", "keywords": [ "angular", diff --git a/projects/icons/package.json b/projects/icons/package.json index 926a6eec1fef1..e4e75b7ccb2bd 100644 --- a/projects/icons/package.json +++ b/projects/icons/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/icons", - "version": "4.18.0", + "version": "4.19.0", "description": "Feather icons for Taiga UI", "keywords": [ "angular", diff --git a/projects/kit/package.json b/projects/kit/package.json index 174e4a2c7ac6f..745b900b5b20e 100644 --- a/projects/kit/package.json +++ b/projects/kit/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/kit", - "version": "4.18.0", + "version": "4.19.0", "description": "Taiga UI Angular main components kit", "keywords": [ "angular", @@ -28,9 +28,9 @@ "@ng-web-apis/intersection-observer": "^4.11.1", "@ng-web-apis/mutation-observer": "^4.11.1", "@ng-web-apis/resize-observer": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/i18n": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/i18n": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/layout/package.json b/projects/layout/package.json index 90a2d71327b8e..a3eb01c908714 100644 --- a/projects/layout/package.json +++ b/projects/layout/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/layout", - "version": "4.18.0", + "version": "4.19.0", "description": "A package with Taiga UI layout components", "keywords": [ "angular", @@ -13,9 +13,9 @@ "peerDependencies": { "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" diff --git a/projects/legacy/package.json b/projects/legacy/package.json index 96a3cc8d721c4..9bab6d66a2873 100644 --- a/projects/legacy/package.json +++ b/projects/legacy/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/legacy", - "version": "4.18.0", + "version": "4.19.0", "description": "Legacy Taiga UI entities from the previous major release to simplify migration", "keywords": [ "legacy", diff --git a/projects/styles/package.json b/projects/styles/package.json index fa8b066703f44..03605b761ea89 100644 --- a/projects/styles/package.json +++ b/projects/styles/package.json @@ -1,10 +1,10 @@ { "name": "@taiga-ui/styles", - "version": "4.18.0", + "version": "4.19.0", "description": "Global Styles for Taiga UI", "peerDependencies": { - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", "tslib": ">=2.8.1" } } diff --git a/projects/taiga-schematics/package.json b/projects/taiga-schematics/package.json index ce47ffb6c11af..558b1bde3f15a 100644 --- a/projects/taiga-schematics/package.json +++ b/projects/taiga-schematics/package.json @@ -1,6 +1,6 @@ { "name": "taiga-ui", - "version": "4.18.0", + "version": "4.19.0", "description": "Taiga UI package that provides ng add command for Taiga library", "keywords": [ "angular", @@ -15,10 +15,10 @@ "repository": "https://github.com/taiga-family/taiga-ui", "license": "Apache-2.0", "dependencies": { - "@taiga-ui/cdk": "^4.18.0" + "@taiga-ui/cdk": "^4.19.0" }, "peerDependencies": { - "@taiga-ui/cdk": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", "tslib": ">=2.8.1" }, "schematics": "../@taiga-ui/cdk/schematics/collection.json" diff --git a/projects/testing/package.json b/projects/testing/package.json index 52d9ec5c05311..1c37cbe138b48 100644 --- a/projects/testing/package.json +++ b/projects/testing/package.json @@ -1,6 +1,6 @@ { "name": "@taiga-ui/testing", - "version": "4.18.0", + "version": "4.19.0", "description": "Utils functions for testing Taiga UI packages", "devDependencies": { "@types/jest": "29.5.14", @@ -9,7 +9,7 @@ "ts-jest": "29.2.5" }, "peerDependencies": { - "@taiga-ui/cdk": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", "tslib": ">=2.8.1" } } From 2c14206962f281b79fed381d203e4905941a2631 Mon Sep 17 00:00:00 2001 From: taiga-family-bot <140712314+taiga-family-bot@users.noreply.github.com> Date: Mon, 23 Dec 2024 19:21:36 +0300 Subject: [PATCH 15/21] chore: update dependency @taiga-ui/design-tokens to v0.159.0 (#10047) --- package-lock.json | 14 +++++++------- package.json | 2 +- .../legacy/multi-select/multi-select.pw.spec.ts | 6 ++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d24cf3dc32bb..ed59f3d0e483e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@taiga-ui/browserslist-config": "0.238.0", "@taiga-ui/commitlint-config": "0.238.0", "@taiga-ui/cspell-config": "0.238.0", - "@taiga-ui/design-tokens": "0.158.0", + "@taiga-ui/design-tokens": "0.159.0", "@taiga-ui/eslint-plugin-experience": "0.238.0", "@taiga-ui/event-plugins": "4.3.1", "@taiga-ui/jest-config": "0.238.0", @@ -9846,9 +9846,9 @@ "link": true }, "node_modules/@taiga-ui/design-tokens": { - "version": "0.158.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/design-tokens/-/design-tokens-0.158.0.tgz", - "integrity": "sha512-a/B0wK1lzmBIQj1L+fK2mtT19gkCzm2peWiYujhY8J4UsDW+J72drRzm1jZSfyZEmHhmYolBEqj11U1eqVHk5g==", + "version": "0.159.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/design-tokens/-/design-tokens-0.159.0.tgz", + "integrity": "sha512-KQe/0SY2GzDx4KQ8v7bUVsFR9jDvXEGsfaxa/chN9ViAlWeEIoBiR9zBjnsowwwIasbq4VNTbGv3o/MWcDobRw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -21509,9 +21509,9 @@ } }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "devOptional": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index cf6e0439e0b50..a0d4fab34e805 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "@taiga-ui/browserslist-config": "0.238.0", "@taiga-ui/commitlint-config": "0.238.0", "@taiga-ui/cspell-config": "0.238.0", - "@taiga-ui/design-tokens": "0.158.0", + "@taiga-ui/design-tokens": "0.159.0", "@taiga-ui/eslint-plugin-experience": "0.238.0", "@taiga-ui/event-plugins": "4.3.1", "@taiga-ui/jest-config": "0.238.0", diff --git a/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts b/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts index c5c343c9afea3..4c118650b6c42 100644 --- a/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts +++ b/projects/demo-playwright/tests/legacy/multi-select/multi-select.pw.spec.ts @@ -39,8 +39,7 @@ test.describe('MultiSelect', () => { await multiSelect.arrow.click(); await documentationPage.waitStableState(); - await page.locator('tui-dropdown [tuiOption]').first().hover(); - await page.waitForTimeout(300); + await page.mouse.move(0, 0); // clear focus await expect(multiSelect.dropdown).toHaveScreenshot( '02-with-data-list-with-label.png', @@ -55,8 +54,7 @@ test.describe('MultiSelect', () => { await multiSelect.arrow.click(); await documentationPage.waitStableState(); - await page.locator('tui-dropdown [tuiOption]').first().hover(); - await page.waitForTimeout(300); + await page.mouse.move(0, 0); // clear focus await expect(multiSelect.dropdown).toHaveScreenshot( '03-with-data-list-without-label.png', From 99cb0bcd250d310e3612dc56b0f4b64d1738903c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=98=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Tue, 24 Dec 2024 17:59:49 +0300 Subject: [PATCH 16/21] fix(legacy): wrong prefix placement in table context (#10045) --- .../modules/components/table/examples/8/index.html | 9 ++++++++- .../modules/components/table/examples/8/index.ts | 14 +++++++++++--- .../primitive-textfield.component.ts | 8 +++++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/projects/demo/src/modules/components/table/examples/8/index.html b/projects/demo/src/modules/components/table/examples/8/index.html index 48701948a53be..3b7a0d077fb08 100644 --- a/projects/demo/src/modules/components/table/examples/8/index.html +++ b/projects/demo/src/modules/components/table/examples/8/index.html @@ -19,7 +19,14 @@ {{ item.name }} - {{ item.balance }} + + + Value + + Date: Tue, 24 Dec 2024 21:56:11 +0300 Subject: [PATCH 17/21] refactor(kit): new version of `InputNumber` (#10031) --- projects/cdk/classes/value-transformer.ts | 12 + .../tests/input-number/dynamic-postfix.cy.ts | 33 +- .../kit/input-number/input-number.pw.spec.ts | 636 ++++++++++++++++++ .../input-number/input-number.pw.spec.ts | 607 +++++++++-------- projects/demo/src/modules/app/app.routes.ts | 5 + projects/demo/src/modules/app/demo-routes.ts | 1 + projects/demo/src/modules/app/pages.ts | 13 +- .../examples/1/index.html | 0 .../examples/1/index.less | 0 .../examples/1/index.ts | 0 .../examples/2/index.html | 0 .../examples/2/index.less | 0 .../examples/2/index.ts | 0 .../examples/3/index.html | 0 .../examples/3/index.ts | 0 .../examples/4/index.html | 0 .../examples/4/index.less | 0 .../examples/4/index.ts | 0 .../examples/5/index.html | 0 .../examples/5/index.ts | 0 .../examples/6/index.html | 0 .../examples/6/index.ts | 0 .../examples/7/index.html | 0 .../examples/7/index.ts | 0 .../examples/8/index.html | 0 .../examples/8/index.ts | 0 .../examples/import/import.md | 15 + .../examples/import/template.md | 5 + .../components/input-number-legacy/index.html | 258 +++++++ .../components/input-number-legacy/index.ts | 47 ++ .../input-number/examples/import/import.md | 24 +- .../input-number/examples/import/template.md | 10 +- .../components/input-number/index.html | 315 +++------ .../modules/components/input-number/index.ts | 37 +- .../src/modules/components/input/index.html | 2 +- .../utils/tokens/examples/5/index.html | 2 +- .../src/modules/pipes/currency/index.html | 2 +- projects/kit/components/index.ts | 1 + projects/kit/components/input-number/index.ts | 2 + .../input-number/input-number.component.ts | 250 +++++++ .../input-number/input-number.options.ts | 22 + .../components/input-number/ng-package.json | 5 + 42 files changed, 1704 insertions(+), 600 deletions(-) create mode 100644 projects/demo-playwright/tests/kit/input-number/input-number.pw.spec.ts rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/1/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/1/index.less (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/1/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/2/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/2/index.less (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/2/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/3/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/3/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/4/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/4/index.less (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/4/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/5/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/5/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/6/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/6/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/7/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/7/index.ts (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/8/index.html (100%) rename projects/demo/src/modules/components/{input-number => input-number-legacy}/examples/8/index.ts (100%) create mode 100644 projects/demo/src/modules/components/input-number-legacy/examples/import/import.md create mode 100644 projects/demo/src/modules/components/input-number-legacy/examples/import/template.md create mode 100644 projects/demo/src/modules/components/input-number-legacy/index.html create mode 100644 projects/demo/src/modules/components/input-number-legacy/index.ts create mode 100644 projects/kit/components/input-number/index.ts create mode 100644 projects/kit/components/input-number/input-number.component.ts create mode 100644 projects/kit/components/input-number/input-number.options.ts create mode 100644 projects/kit/components/input-number/ng-package.json diff --git a/projects/cdk/classes/value-transformer.ts b/projects/cdk/classes/value-transformer.ts index 61c3cf8b0beeb..46a568e49e30f 100644 --- a/projects/cdk/classes/value-transformer.ts +++ b/projects/cdk/classes/value-transformer.ts @@ -1,4 +1,16 @@ +import type {FactoryProvider, ProviderToken} from '@angular/core'; +import {inject} from '@angular/core'; + export abstract class TuiValueTransformer { public abstract toControlValue(componentValue: From): To; public abstract fromControlValue(controlValue: To): From; } + +export function tuiValueTransformerFrom< + T extends {valueTransformer: TuiValueTransformer}, +>(token: ProviderToken): FactoryProvider { + return { + provide: TuiValueTransformer, + useFactory: () => inject(token).valueTransformer, + }; +} diff --git a/projects/demo-cypress/src/tests/input-number/dynamic-postfix.cy.ts b/projects/demo-cypress/src/tests/input-number/dynamic-postfix.cy.ts index 09e1237d9b1d8..8a497fc203db2 100644 --- a/projects/demo-cypress/src/tests/input-number/dynamic-postfix.cy.ts +++ b/projects/demo-cypress/src/tests/input-number/dynamic-postfix.cy.ts @@ -3,24 +3,21 @@ import '@angular/common/locales/global/ru'; import {I18nPluralPipe} from '@angular/common'; import {ChangeDetectionStrategy, Component} from '@angular/core'; import {FormsModule} from '@angular/forms'; -import {TuiRoot} from '@taiga-ui/core'; -import {TuiInputNumberModule, TuiTextfieldControllerModule} from '@taiga-ui/legacy'; +import {TuiRoot, TuiTextfield} from '@taiga-ui/core'; +import {TuiInputNumber} from '@taiga-ui/kit'; @Component({ standalone: true, - imports: [ - FormsModule, - I18nPluralPipe, - TuiInputNumberModule, - TuiRoot, - TuiTextfieldControllerModule, - ], + imports: [FormsModule, I18nPluralPipe, TuiInputNumber, TuiRoot, TuiTextfield], template: ` - + + + `, changeDetection: ChangeDetectionStrategy.OnPush, @@ -28,10 +25,10 @@ import {TuiInputNumberModule, TuiTextfieldControllerModule} from '@taiga-ui/lega export class TestInputNumberWithPostfix { protected value: number | null = null; protected pluralMap = { - one: 'секунда', - few: 'секунды', - many: 'секунд', - other: 'секунды', + one: ' секунда', + few: ' секунды', + many: ' секунд', + other: ' секунды', }; } @@ -39,7 +36,7 @@ describe('InputNumber with dynamic postfix', () => { describe('Plural forms of seconds (locale ru-RU)', () => { beforeEach(() => { cy.mount(TestInputNumberWithPostfix); - cy.get('tui-input-number input').as('textfield'); + cy.get('[tuiInputNumber]').as('textfield'); }); const withPostfix = ( diff --git a/projects/demo-playwright/tests/kit/input-number/input-number.pw.spec.ts b/projects/demo-playwright/tests/kit/input-number/input-number.pw.spec.ts new file mode 100644 index 0000000000000..0e51794475a23 --- /dev/null +++ b/projects/demo-playwright/tests/kit/input-number/input-number.pw.spec.ts @@ -0,0 +1,636 @@ +import {DemoRoute} from '@demo/routes'; +import { + CHAR_EM_DASH, + CHAR_EN_DASH, + CHAR_HYPHEN, + CHAR_MINUS, + CMD, + TuiDocumentationApiPagePO, + tuiGoto, +} from '@demo-playwright/utils'; +import type {Locator} from '@playwright/test'; +import {expect, test} from '@playwright/test'; + +const {describe, beforeEach} = test; + +describe('InputNumber', () => { + let example: Locator; + let textfield: Locator; + + describe('API', () => { + beforeEach(({page}) => { + example = new TuiDocumentationApiPagePO(page).apiPageExample; + textfield = example.locator('[tuiInputNumber]'); + }); + + describe('[min] prop', () => { + describe('[min] property is positive number', () => { + test('rejects minus sign', async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?min=5`); + await textfield.fill( + `${CHAR_MINUS}${CHAR_HYPHEN}${CHAR_EN_DASH}${CHAR_EM_DASH}9`, + ); + + await expect(textfield).toHaveValue('9'); + await expect(textfield).toHaveJSProperty('selectionStart', 1); + await expect(textfield).toHaveJSProperty('selectionEnd', 1); + }); + + test('validates positive value (less than [min]) only on blur', async ({ + page, + }) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?min=5`); + await textfield.fill('2'); + + await expect(textfield).toHaveValue('2'); + await expect(textfield).toHaveJSProperty('selectionStart', 1); + await expect(textfield).toHaveJSProperty('selectionEnd', 1); + + await textfield.blur(); + + await expect(textfield).toHaveValue('5'); + }); + + test('allows to enter multi-length positive value (which is less than [min])', async ({ + page, + }) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?min=100`); + + await textfield.fill('3'); // less than min + + await expect(textfield).toHaveValue('3'); + + await textfield.pressSequentially('3'); // still less than min + + await expect(textfield).toHaveValue('33'); + + await textfield.fill('333'); // more than min + + await expect(textfield).toHaveValue('333'); + }); + }); + + describe('[min] property is negative number', () => { + beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?min=-5`); + + await textfield.clear(); + }); + + test('immediately validates negative value', async () => { + await textfield.fill('-10'); // less than [min] + + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + await expect(textfield).toHaveValue(`${CHAR_MINUS}5`); + }); + + test('do not touch any positive value', async ({page}) => { + await textfield.fill('1'); + + await expect(textfield).toHaveJSProperty('selectionStart', 1); + await expect(textfield).toHaveJSProperty('selectionEnd', 1); + await expect(textfield).toHaveValue('1'); + + await textfield.pressSequentially('0'); + + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + await expect(textfield).toHaveValue('10'); + + await textfield.blur(); + + await expect(textfield).toHaveValue('10'); + + await page.waitForTimeout(100); // to be sure that value is not changed even in case of some async validation + + await expect(textfield).toHaveValue('10'); + }); + }); + }); + + describe('[max] prop', () => { + describe('[max] property is negative number', () => { + beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?max=-5`); + }); + + test('validates negative value only on blur', async ({page}) => { + await textfield.fill('-1'); // more than [max] + await page.waitForTimeout(100); // to be sure that value is not changed even in case of some async validation + + await expect(textfield).toHaveValue(`${CHAR_MINUS}1`); + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + + await textfield.blur(); + + await expect(textfield).toHaveValue(`${CHAR_MINUS}5`); + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + }); + }); + + describe('[max] property is positive number', () => { + beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?max=12`); + }); + + test('immediately validates positive value', async () => { + await textfield.fill('19'); // more than max + + await expect(textfield).toHaveValue('12'); + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + }); + + test('do not touch any negative value', async ({page}) => { + await textfield.fill('-1'); + + await expect(textfield).toHaveValue(`${CHAR_MINUS}1`); + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + + await page.keyboard.down('9'); + + await expect(textfield).toHaveJSProperty('selectionStart', 3); + await expect(textfield).toHaveJSProperty('selectionEnd', 3); + await expect(textfield).toHaveValue(`${CHAR_MINUS}19`); + + await page.waitForTimeout(100); // to ensure that value is not changed even in case of some async validation + + await expect(textfield).toHaveValue(`${CHAR_MINUS}19`); + await expect(textfield).toHaveJSProperty('selectionStart', 3); + await expect(textfield).toHaveJSProperty('selectionEnd', 3); + }); + }); + }); + + describe('[prefix] & [postfix] props', () => { + ( + [ + {prefix: '$', postfix: ''}, + {prefix: '', postfix: 'kg'}, + {prefix: '$', postfix: 'kg'}, + ] as const + ).forEach(({prefix, postfix}) => { + describe(`[prefix]="${prefix}" & [postfix]="${postfix}"`, () => { + beforeEach(async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?prefix=${prefix}&postfix=${postfix}`, + ); + }); + + test('does not show suffixes for unfocused empty textfield', async () => { + await expect(textfield).toHaveValue(''); + }); + + test('shows suffixes for empty textfield on focus', async () => { + await textfield.focus(); + + await expect(textfield).toHaveValue(prefix + postfix); + }); + + test('does not shows prefix for READONLY empty textfield on focus', async ({ + page, + }) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?prefix=${prefix}&postfix=${postfix}&readOnly=true`, + ); + await textfield.focus(); + + await expect(textfield).toHaveValue(''); + + await textfield.click(); + + await expect(textfield).toHaveValue(''); + }); + + describe('forbids to erase prefix', () => { + test('using Backspace many times', async () => { + await textfield.focus(); + await textfield.press('Backspace'); + await textfield.press('Backspace'); + + await expect(textfield).toHaveValue(prefix + postfix); + + await textfield.pressSequentially('42'); + + await expect(textfield).toHaveValue(`${prefix}42${postfix}`); + + await textfield.press('Backspace'); + await textfield.press('Backspace'); + await textfield.press('Backspace'); + await textfield.press('Backspace'); + await textfield.press('Backspace'); + + await expect(textfield).toHaveValue(prefix + postfix); + }); + + test('select all + Backspace', async ({page}) => { + await textfield.focus(); + await page.keyboard.press(`${CMD}+A`); + await page.keyboard.press('Backspace'); + + await expect(textfield).toHaveValue(prefix + postfix); + + await textfield.pressSequentially('42'); + + await expect(textfield).toHaveValue(`${prefix}42${postfix}`); + + await page.keyboard.press(`${CMD}+A`); + await page.keyboard.press('Backspace'); + + await expect(textfield).toHaveValue(prefix + postfix); + }); + + test('select all + Delete', async ({page}) => { + await textfield.focus(); + await page.keyboard.press(`${CMD}+A`); + await page.keyboard.press('Delete'); + + await expect(textfield).toHaveValue(prefix + postfix); + + await textfield.pressSequentially('42'); + + await expect(textfield).toHaveValue(`${prefix}42${postfix}`); + + await page.keyboard.press(`${CMD}+A`); + await page.keyboard.press('Delete'); + + await expect(textfield).toHaveValue(prefix + postfix); + }); + }); + + test('textfield does not contain any digit (only suffixes) => clear textfield value on blur', async ({ + browserName, + }) => { + // TODO + test.skip( + browserName !== 'chromium', + 'Investigate why it fails in Safari', + ); + + await textfield.focus(); + + await expect(textfield).toHaveValue(prefix + postfix); + await expect(textfield).toHaveJSProperty( + 'selectionStart', + prefix.length, + ); + await expect(textfield).toHaveJSProperty( + 'selectionEnd', + prefix.length, + ); + + await textfield.blur(); + + await expect(textfield).toHaveValue(''); + }); + }); + }); + }); + + describe('[precision] prop', () => { + test('[precision]=0', async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?precision=0`); + await textfield.focus(); + await textfield.pressSequentially(',.'); + + await expect(textfield).toHaveValue(''); + + await textfield.pressSequentially('0,.'); + + await expect(textfield).toHaveValue('0'); + }); + + test('[precision]=2', async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?precision=2`); + await textfield.focus(); + await textfield.pressSequentially(',.'); + + await expect(textfield).toHaveValue('0.'); + + await textfield.pressSequentially('12345'); + + await expect(textfield).toHaveValue('0.12'); + }); + }); + + describe('[thousandSeparator] prop', () => { + test('_', async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumber}/API?thousandSeparator=_`); + await textfield.focus(); + await textfield.pressSequentially('1234567890'); + + await expect(textfield).toHaveValue('1_234_567_890'); + }); + + test('.', async ({page}) => { + await tuiGoto( + page, + /** + * TODO: drop `&decimalSeparator=,` after fixing this issue + * https://github.com/taiga-family/maskito/issues/1907 + */ + `${DemoRoute.InputNumber}/API?precision=0&thousandSeparator=.&decimalSeparator=,`, + ); + await textfield.focus(); + await textfield.pressSequentially('1234567890'); + + await expect(textfield).toHaveValue('1.234.567.890'); + }); + }); + + describe('[decimalSeparator] prop', () => { + test('.', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=4&decimalSeparator=.`, + ); + await textfield.focus(); + await textfield.pressSequentially('.1234567890'); + + await expect(textfield).toHaveValue('0.1234'); + + await textfield.clear(); + + await textfield.pressSequentially(',42'); + + await expect(textfield).toHaveValue('0.42'); + }); + }); + + describe('[decimalMode] prop', () => { + test('decimalMode=not-zero | 42 => Blur => 42', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=2&decimalMode=not-zero`, + ); + + await textfield.fill('42'); + + await expect(textfield).toHaveValue('42'); + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + await expect(textfield).toHaveValue('42'); + }); + + test('decimalMode=not-zero | 42.1 => Blur => 42.1', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=2&decimalMode=not-zero`, + ); + + await textfield.fill('42.1'); + + await expect(textfield).toHaveValue('42.1'); + await expect(textfield).toHaveJSProperty('selectionStart', 4); + await expect(textfield).toHaveJSProperty('selectionEnd', 4); + + await textfield.blur(); + + await expect(textfield).toHaveValue('42.1'); + }); + + test('decimalMode=not-zero | 42.00 => Blur => 42', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=2&decimalMode=not-zero`, + ); + + await textfield.fill('42.00'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '42.00'.length, + ); + await expect(textfield).toHaveJSProperty('selectionEnd', '42.00'.length); + + await textfield.blur(); + + await expect(textfield).toHaveValue('42'); + }); + + test('decimalMode=pad | 42.1 => Blur => 42.10', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=2&decimalMode=pad`, + ); + + await textfield.fill('42.1'); + + await expect(textfield).toHaveValue('42.1'); + await expect(textfield).toHaveJSProperty('selectionStart', '42.1'.length); + await expect(textfield).toHaveJSProperty('selectionEnd', '42.1'.length); + + await textfield.blur(); + + await expect(textfield).toHaveValue('42.10'); + }); + + test('decimalMode=always | Enter 42 => 42.00', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=2&decimalMode=always`, + ); + await textfield.fill('42'); + + await expect(textfield).toHaveValue('42.00'); + await expect(textfield).toHaveJSProperty('selectionStart', 2); + await expect(textfield).toHaveJSProperty('selectionEnd', 2); + }); + }); + + describe('Caret navigation', () => { + describe('if user tries to erase padded decimal zeroes (decimalMode="always"), mask triggers caret navigation', () => { + beforeEach(async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?decimalMode=always&precision=2`, + ); + + await textfield.clear(); + await textfield.fill('105.00'); + }); + + test('105.00| => Backspace => 105.0|0', async ({page}) => { + await page.keyboard.press('Backspace'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '105.0'.length, + ); + await expect(textfield).toHaveJSProperty( + 'selectionEnd', + '105.0'.length, + ); + await expect(textfield).toHaveValue('105.00'); + }); + + test('105.0|0 => Backspace => 105.|00', async ({page}) => { + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('Backspace'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '105.'.length, + ); + await expect(textfield).toHaveJSProperty( + 'selectionEnd', + '105.'.length, + ); + await expect(textfield).toHaveValue('105.00'); + }); + + test('105.|00 => Backspace => 105|.00', async ({page}) => { + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('Backspace'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '105'.length, + ); + await expect(textfield).toHaveJSProperty( + 'selectionEnd', + '105'.length, + ); + await expect(textfield).toHaveValue('105.00'); + }); + + test('105.|00 => Delete => 105.0|0', async ({page}) => { + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('Delete'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '105.0'.length, + ); + await expect(textfield).toHaveJSProperty( + 'selectionEnd', + '105.0'.length, + ); + await expect(textfield).toHaveValue('105.00'); + }); + }); + + describe('if user tries to erase thousand separator, mask triggers caret navigation', () => { + beforeEach(async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?decimalMode=not-zero`, + ); + + await textfield.fill('1000'); + }); + + test('1| 000 => Delete => 1 |000', async ({page}) => { + const length = (await textfield.inputValue()).length; + + for (let i = 0; i < length; i++) { + await page.keyboard.press('ArrowLeft'); + } + + await expect(textfield).toHaveJSProperty('selectionStart', 0); + await expect(textfield).toHaveJSProperty('selectionEnd', 0); + + await page.keyboard.press('ArrowRight'); + await page.keyboard.press('Delete'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '1 '.length, + ); + await expect(textfield).toHaveJSProperty('selectionEnd', '1 '.length); + await expect(textfield).toHaveValue('1 000'); + }); + + test('1 |000 => Backspace => 1| 000', async ({page}) => { + const length = (await textfield.inputValue()).length; + + for (let i = 0; i < length; i++) { + await page.keyboard.press('ArrowLeft'); + } + + await expect(textfield).toHaveJSProperty('selectionStart', 0); + await expect(textfield).toHaveJSProperty('selectionEnd', 0); + + await page.keyboard.press('ArrowRight'); + await page.keyboard.press('ArrowRight'); + await page.keyboard.press('Backspace'); + + await expect(textfield).toHaveJSProperty( + 'selectionStart', + '1'.length, + ); + await expect(textfield).toHaveJSProperty('selectionEnd', '1'.length); + await expect(textfield).toHaveValue('1 000'); + }); + }); + }); + + describe('[tuiTextfieldSize] prop', () => { + test.use({viewport: {width: 300, height: 500}}); + + ['s', 'm', 'l'].forEach((size) => { + test(`Empty textfield | ${size}`, async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?tuiTextfieldSize=${size}`, + ); + + await expect(textfield).toHaveValue(''); + await expect(example).toHaveScreenshot( + `input-number-unfocused-empty-size-${size}.png`, + ); + + await textfield.focus(); + + await expect(example).toHaveScreenshot( + `input-number-focused-empty-size-${size}.png`, + ); + }); + + test(`Textfield has value | ${size}`, async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?precision=2&tuiTextfieldSize=${size}`, + ); + + await textfield.fill('12.34'); + + await expect(textfield).toHaveValue('12.34'); + await expect(example).toHaveScreenshot( + `input-number-focused-with-value-size-${size}.png`, + ); + + await textfield.blur(); + + await expect(example).toHaveScreenshot( + `input-number-unfocused-with-value-size-${size}.png`, + ); + }); + }); + }); + + test('does not mutate already valid too large number on blur', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumber}/API?thousandSeparator=_&precision=2`, + ); + await textfield.focus(); + await textfield.clear(); + await textfield.pressSequentially('123456789012345.6789'); + + await expect(textfield).toHaveValue('123_456_789_012_345.67'); + + await textfield.blur(); + + await expect(textfield).toHaveValue('123_456_789_012_345.67'); + }); + }); +}); diff --git a/projects/demo-playwright/tests/legacy/input-number/input-number.pw.spec.ts b/projects/demo-playwright/tests/legacy/input-number/input-number.pw.spec.ts index 9193f7cce4ec5..973306dd70f87 100644 --- a/projects/demo-playwright/tests/legacy/input-number/input-number.pw.spec.ts +++ b/projects/demo-playwright/tests/legacy/input-number/input-number.pw.spec.ts @@ -22,7 +22,7 @@ test.describe('InputNumber', () => { }); test('Infinite precision', async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?precision=Infinity`); + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}/API?precision=Infinity`); await input.focus(); await input.fill('1,2345'); @@ -32,7 +32,7 @@ test.describe('InputNumber', () => { test('does not mutate already valid too large number on blur', async ({page}) => { await tuiGoto( page, - `${DemoRoute.InputNumber}/API?thousandSeparator=_&precision=2`, + `${DemoRoute.InputNumberLegacy}/API?thousandSeparator=_&precision=2`, ); await input.focus(); await input.clear(); @@ -48,7 +48,7 @@ test.describe('InputNumber', () => { test('prefix + value + postfix', async ({page}) => { await tuiGoto( page, - '/components/input-number/API?tuiTextfieldPrefix=$&tuiTextfieldPostfix=GBP', + `${DemoRoute.InputNumberLegacy}/API?tuiTextfieldPrefix=$&tuiTextfieldPostfix=GBP`, ); await expect(example).toHaveScreenshot('02-input-number.png'); @@ -64,7 +64,7 @@ test.describe('InputNumber', () => { await tuiGoto( page, - `/components/input-number/API?style.text-align=${align}&tuiTextfieldPrefix=${readableFormatText}&tuiTextfieldPostfix=${readableFormatText}`, + `${DemoRoute.InputNumberLegacy}/API?style.text-align=${align}&tuiTextfieldPrefix=${readableFormatText}&tuiTextfieldPostfix=${readableFormatText}`, ); await expect(example).toHaveScreenshot(`04-input-number-${i}.png`); @@ -76,421 +76,414 @@ test.describe('InputNumber', () => { test(`sandboxWidth=${sandboxWidth}`, async ({page}) => { await tuiGoto( page, - `/components/input-number/API?tuiTextfieldPostfix=$&tuiTextfieldPrefix=VeryLongText&sandboxWidth=${sandboxWidth}`, + `${DemoRoute.InputNumberLegacy}/API?tuiTextfieldPostfix=$&tuiTextfieldPrefix=VeryLongText&sandboxWidth=${sandboxWidth}`, ); await expect(example).toHaveScreenshot(`05-input-number-${i}.png`); }); }); }); - }); - - test.describe('Examples', () => { - test('cursor position', async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}`); - const example = new TuiDocumentationPagePO(page).getExample('#currency'); - - await expect(example).toHaveScreenshot('06-input-number.png'); - - const inputs = await example - .getByTestId('tui-primitive-textfield__native-input') - .all(); + test.describe('Caret navigation', () => { + test.describe('if user tries to erase padded decimal zeroes (decimalMode="always"), mask triggers caret navigation', () => { + test.beforeEach(async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?decimalMode=always&precision=2`, + ); - for (const [i, input] of inputs.entries()) { - await input.clear(); - await input.focus(); + await input.clear(); + await input.fill('105,00'); + }); - await expect(example).toHaveScreenshot(`06-input-number-${i}.png`); - } - }); - }); + test('105,00| => Backspace => 105,0|0', async ({page}) => { + await page.keyboard.press('Backspace'); - test.describe('Caret navigation', () => { - test.describe('if user tries to erase padded decimal zeroes (decimalMode="always"), mask triggers caret navigation', () => { - test.beforeEach(async ({page}) => { - await tuiGoto( - page, - '/components/input-number/API?decimalMode=always&precision=2', - ); + await expect(input).toHaveJSProperty( + 'selectionStart', + '105,0'.length, + ); + await expect(input).toHaveJSProperty('selectionEnd', '105,0'.length); + await expect(example).toHaveScreenshot('07-input-number.png'); + }); - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); + test('105,0|0 => Backspace => 105,|00', async ({page}) => { + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('Backspace'); - await input.clear(); - await input.fill('105,00'); - }); + await expect(input).toHaveJSProperty('selectionStart', '105,'.length); + await expect(input).toHaveJSProperty('selectionEnd', '105,'.length); + await expect(example).toHaveScreenshot('08-input-number.png'); + }); - test('105,00| => Backspace => 105,0|0', async ({page}) => { - await page.keyboard.press('Backspace'); + test('105,|00 => Backspace => 105|,00', async ({page}) => { + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('Backspace'); - await expect(input).toHaveJSProperty('selectionStart', '105,0'.length); - await expect(input).toHaveJSProperty('selectionEnd', '105,0'.length); - await expect(example).toHaveScreenshot('07-input-number.png'); - }); + await expect(input).toHaveJSProperty('selectionStart', '105'.length); + await expect(input).toHaveJSProperty('selectionEnd', '105'.length); + await expect(example).toHaveScreenshot('09-input-number.png'); + }); - test('105,0|0 => Backspace => 105,|00', async ({page}) => { - await page.keyboard.press('ArrowLeft'); - await page.keyboard.press('Backspace'); + test('105,|00 => Delete => 105,0|0', async ({page}) => { + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('ArrowLeft'); + await page.keyboard.press('Delete'); - await expect(input).toHaveJSProperty('selectionStart', '105,'.length); - await expect(input).toHaveJSProperty('selectionEnd', '105,'.length); - await expect(example).toHaveScreenshot('08-input-number.png'); + await expect(input).toHaveJSProperty( + 'selectionStart', + '105,0'.length, + ); + await expect(input).toHaveJSProperty('selectionEnd', '105,0'.length); + await expect(example).toHaveScreenshot('10-input-number.png'); + }); }); - test('105,|00 => Backspace => 105|,00', async ({page}) => { - await page.keyboard.press('ArrowLeft'); - await page.keyboard.press('ArrowLeft'); - await page.keyboard.press('Backspace'); + test.describe('if user tries to erase thousand separator, mask triggers caret navigation', () => { + test.beforeEach(async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?decimalMode=not-zero`, + ); - await expect(input).toHaveJSProperty('selectionStart', '105'.length); - await expect(input).toHaveJSProperty('selectionEnd', '105'.length); - await expect(example).toHaveScreenshot('09-input-number.png'); - }); + await input.fill('1000'); + }); - test('105,|00 => Delete => 105,0|0', async ({page}) => { - await page.keyboard.press('ArrowLeft'); - await page.keyboard.press('ArrowLeft'); - await page.keyboard.press('Delete'); + test('1| 000 => Delete => 1 |000', async ({page}) => { + const length = (await input.inputValue()).length; - await expect(input).toHaveJSProperty('selectionStart', '105,0'.length); - await expect(input).toHaveJSProperty('selectionEnd', '105,0'.length); - await expect(example).toHaveScreenshot('10-input-number.png'); - }); - }); + for (let i = 0; i < length; i++) { + await page.keyboard.press('ArrowLeft'); + } - test.describe('if user tries to erase thousand separator, mask triggers caret navigation', () => { - test.beforeEach(async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?decimalMode=not-zero`); + await expect(input).toHaveJSProperty('selectionStart', 0); + await expect(input).toHaveJSProperty('selectionEnd', 0); - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); + await page.keyboard.press('ArrowRight'); + await page.keyboard.press('Delete'); - await input.fill('1000'); - }); + await expect(input).toHaveJSProperty('selectionStart', '1 '.length); + await expect(input).toHaveJSProperty('selectionEnd', '1 '.length); + await expect(example).toHaveScreenshot('11-input-number.png'); + }); - test('1| 000 => Delete => 1 |000', async ({page}) => { - const length = (await input.inputValue()).length; + test('1 |000 => Backspace => 1| 000', async ({page}) => { + const length = (await input.inputValue()).length; - for (let i = 0; i < length; i++) { - await page.keyboard.press('ArrowLeft'); - } + for (let i = 0; i < length; i++) { + await page.keyboard.press('ArrowLeft'); + } - await expect(input).toHaveJSProperty('selectionStart', 0); - await expect(input).toHaveJSProperty('selectionEnd', 0); + await expect(input).toHaveJSProperty('selectionStart', 0); + await expect(input).toHaveJSProperty('selectionEnd', 0); - await page.keyboard.press('ArrowRight'); - await page.keyboard.press('Delete'); + await page.keyboard.press('ArrowRight'); + await page.keyboard.press('ArrowRight'); + await page.keyboard.press('Backspace'); - await expect(input).toHaveJSProperty('selectionStart', '1 '.length); - await expect(input).toHaveJSProperty('selectionEnd', '1 '.length); - await expect(example).toHaveScreenshot('11-input-number.png'); + await expect(input).toHaveJSProperty('selectionStart', '1'.length); + await expect(input).toHaveJSProperty('selectionEnd', '1'.length); + await expect(example).toHaveScreenshot('12-input-number.png'); + }); }); + }); - test('1 |000 => Backspace => 1| 000', async ({page}) => { - const length = (await input.inputValue()).length; + test.describe('[min] prop', () => { + test.describe('[min] property is positive number', () => { + test.beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}/API?min=5`); - for (let i = 0; i < length; i++) { - await page.keyboard.press('ArrowLeft'); - } + await input.clear(); + }); - await expect(input).toHaveJSProperty('selectionStart', 0); - await expect(input).toHaveJSProperty('selectionEnd', 0); + test('rejects minus sign', async () => { + await input.fill( + `${CHAR_MINUS}${CHAR_HYPHEN}${CHAR_EN_DASH}${CHAR_EM_DASH}9`, + ); - await page.keyboard.press('ArrowRight'); - await page.keyboard.press('ArrowRight'); - await page.keyboard.press('Backspace'); + await expect(input).toHaveJSProperty('selectionStart', 1); + await expect(input).toHaveJSProperty('selectionEnd', 1); + await expect(example).toHaveScreenshot('13-input-number.png'); + }); - await expect(input).toHaveJSProperty('selectionStart', '1'.length); - await expect(input).toHaveJSProperty('selectionEnd', '1'.length); - await expect(example).toHaveScreenshot('12-input-number.png'); - }); - }); - }); + test('validates positive value only on blur', async () => { + await input.fill('2'); - test.describe('[min] prop', () => { - test.describe('[min] property is positive number', () => { - test.beforeEach(async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?min=5`); + await expect(input).toHaveJSProperty('selectionStart', 1); + await expect(input).toHaveJSProperty('selectionEnd', 1); + await expect(example).toHaveScreenshot('14-input-number.png'); - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); + await input.blur(); - await input.clear(); + await expect(example).toHaveScreenshot('15-input-number.png'); + }); }); - test('rejects minus sign', async () => { - await input.fill( - `${CHAR_MINUS}${CHAR_HYPHEN}${CHAR_EN_DASH}${CHAR_EM_DASH}9`, - ); + test.describe('[min] property is negative number', () => { + test.beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}/API?min=-5`); - await expect(input).toHaveJSProperty('selectionStart', 1); - await expect(input).toHaveJSProperty('selectionEnd', 1); - await expect(example).toHaveScreenshot('13-input-number.png'); - }); + await input.clear(); + }); - test('validates positive value only on blur', async () => { - await input.fill('2'); + test('immediately validates negative value', async () => { + await input.fill('-10'); // less than [min] - await expect(input).toHaveJSProperty('selectionStart', 1); - await expect(input).toHaveJSProperty('selectionEnd', 1); - await expect(example).toHaveScreenshot('14-input-number.png'); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(input).toHaveValue(`${CHAR_MINUS}5`); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(example).toHaveScreenshot('16-input-number.png'); + }); - await input.blur(); + test("don't touch any positive value", async ({page}) => { + await input.fill('1'); - await expect(example).toHaveScreenshot('15-input-number.png'); - }); - }); + await expect(input).toHaveJSProperty('selectionStart', 1); + await expect(input).toHaveJSProperty('selectionEnd', 1); + await expect(example).toHaveScreenshot('17-input-number.png'); - test.describe('[min] property is negative number', () => { - test.beforeEach(async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?min=-5`); + await input.fill('0'); - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); + await expect(input).toHaveJSProperty('selectionStart', 1); + await expect(input).toHaveJSProperty('selectionEnd', 1); + await expect(example).toHaveScreenshot('18-input-number.png'); - await input.clear(); - }); + await input.blur(); - test('immediately validates negative value', async () => { - await input.fill('-10'); // less than [min] + await expect(input).toHaveJSProperty('selectionStart', 1); + await expect(input).toHaveJSProperty('selectionEnd', 1); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(input).toHaveValue(`${CHAR_MINUS}5`); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('16-input-number.png'); - }); + await page.waitForTimeout(100); // to be sure that value is not changed even in case of some async validation - test("don't touch any positive value", async ({page}) => { - await input.fill('1'); + await expect(example).toHaveScreenshot('19-input-number.png'); + }); + }); - await expect(input).toHaveJSProperty('selectionStart', 1); - await expect(input).toHaveJSProperty('selectionEnd', 1); - await expect(example).toHaveScreenshot('17-input-number.png'); + test('positive [min] property and positive value (which is less than [min])', async ({ + page, + }) => { + await tuiGoto(page, DemoRoute.InputNumberLegacy); - await input.fill('0'); + const example = new TuiDocumentationPagePO(page).getExample('#min-max'); + const textfield = example.getByRole('textbox'); - await expect(input).toHaveJSProperty('selectionStart', 1); - await expect(input).toHaveJSProperty('selectionEnd', 1); - await expect(example).toHaveScreenshot('18-input-number.png'); + await expect(textfield).toHaveValue(''); - await input.blur(); + textfield.fill('33'); // less than min - await expect(input).toHaveJSProperty('selectionStart', 1); - await expect(input).toHaveJSProperty('selectionEnd', 1); + await expect(example).toHaveScreenshot( + '20-input-number-positive-min-positive-wrong-value.png', + ); - await page.waitForTimeout(100); // to be sure that value is not changed even in case of some async validation + textfield.fill('333'); // more than min - await expect(example).toHaveScreenshot('19-input-number.png'); + await expect(example).toHaveScreenshot( + '20-input-number-positive-min-positive-valid-value.png', + ); }); }); - test('positive [min] property and positive value (which is less than [min])', async ({ - page, - }) => { - await tuiGoto(page, DemoRoute.InputNumber); + test.describe('[max] prop', () => { + test.describe('[max] property is negative number', () => { + test.beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}/API?max=-5`); - const example = new TuiDocumentationPagePO(page).getExample('#min-max'); - const textfield = example.getByRole('textbox'); + example = new TuiDocumentationApiPagePO(page).apiPageExample; + input = example.getByTestId('tui-primitive-textfield__native-input'); - await expect(textfield).toHaveValue(''); + await input.clear(); + }); - textfield.fill('33'); // less than min + test('validates negative value only on blur', async ({page}) => { + await input.fill('-1'); // more than [max] + await page.waitForTimeout(100); // to be sure that value is not changed even in case of some async validation - await expect(example).toHaveScreenshot( - '20-input-number-positive-min-positive-wrong-value.png', - ); + await expect(input).toHaveValue(`${CHAR_MINUS}1`); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(example).toHaveScreenshot( + '21-input-number-before-blur.png', + ); - textfield.fill('333'); // more than min + await input.blur(); - await expect(example).toHaveScreenshot( - '20-input-number-positive-min-positive-valid-value.png', - ); - }); - }); + await expect(input).toHaveValue(`${CHAR_MINUS}5`); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(example).toHaveScreenshot( + '21-input-number-after-blur.png', + ); + }); + }); - test.describe('[max] prop', () => { - test.describe('[max] property is negative number', () => { - test.beforeEach(async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?max=-5`); + test.describe('[max] property is positive number', () => { + test.beforeEach(async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}/API?max=12`); - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); + await input.clear(); + }); - await input.clear(); - }); + test('immediately validates positive value', async () => { + await input.fill('19'); - test('validates negative value only on blur', async ({page}) => { - await input.fill('-1'); // more than [max] - await page.waitForTimeout(100); // to be sure that value is not changed even in case of some async validation + await expect(input).toHaveValue('12'); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(example).toHaveScreenshot('22-input-number.png'); + }); - await expect(input).toHaveValue(`${CHAR_MINUS}1`); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('21-input-number-before-blur.png'); + test("don't touch any negative value", async ({page}) => { + await input.fill('-1'); - await input.blur(); + await expect(input).toHaveValue(`${CHAR_MINUS}1`); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(example).toHaveScreenshot('23-input-number.png'); - await expect(input).toHaveValue(`${CHAR_MINUS}5`); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('21-input-number-after-blur.png'); - }); - }); + await page.keyboard.down('9'); - test.describe('[max] property is positive number', () => { - test.beforeEach(async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?max=12`); + await expect(input).toHaveJSProperty('selectionStart', 3); + await expect(input).toHaveJSProperty('selectionEnd', 3); + await expect(input).toHaveValue(`${CHAR_MINUS}19`); + await expect(input).toHaveJSProperty('selectionStart', 3); + await expect(input).toHaveJSProperty('selectionEnd', 3); + await expect(example).toHaveScreenshot('24-input-number.png'); - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); + await page.waitForTimeout(100); - await input.clear(); + await expect(input).toHaveValue(`${CHAR_MINUS}19`); + await expect(input).toHaveJSProperty('selectionStart', 3); + await expect(input).toHaveJSProperty('selectionEnd', 3); + await expect(example).toHaveScreenshot('25-input-number.png'); + }); }); + }); + + test.describe('value formatting on blur', () => { + test('Value 42 (decimalMode=not-zero) => 42', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?precision=2&decimalMode=not-zero`, + ); - test('immediately validates positive value', async () => { - await input.fill('19'); + await input.fill('42'); - await expect(input).toHaveValue('12'); + await expect(input).toHaveValue('42'); await expect(input).toHaveJSProperty('selectionStart', 2); await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('22-input-number.png'); + await expect(example).toHaveScreenshot('26-input-number.png'); }); - test("don't touch any negative value", async ({page}) => { - await input.fill('-1'); - - await expect(input).toHaveValue(`${CHAR_MINUS}1`); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('23-input-number.png'); + test('Value 42,1 (decimalMode=not-zero) => 42,1', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?precision=2&decimalMode=not-zero`, + ); - await page.keyboard.down('9'); + await input.fill('42.1'); - await expect(input).toHaveJSProperty('selectionStart', 3); - await expect(input).toHaveJSProperty('selectionEnd', 3); - await expect(input).toHaveValue(`${CHAR_MINUS}19`); - await expect(input).toHaveJSProperty('selectionStart', 3); - await expect(input).toHaveJSProperty('selectionEnd', 3); - await expect(example).toHaveScreenshot('24-input-number.png'); + await expect(input).toHaveValue('42.1'); + await expect(input).toHaveJSProperty('selectionStart', 4); + await expect(input).toHaveJSProperty('selectionEnd', 4); - await page.waitForTimeout(100); + await input.blur(); - await expect(input).toHaveValue(`${CHAR_MINUS}19`); - await expect(input).toHaveJSProperty('selectionStart', 3); - await expect(input).toHaveJSProperty('selectionEnd', 3); - await expect(example).toHaveScreenshot('25-input-number.png'); + await expect(input).toHaveValue('42.1'); + await expect(example).toHaveScreenshot('27-input-number.png'); }); - }); - }); - - test.describe('value formatting on blur', () => { - test.beforeEach(({page}) => { - example = new TuiDocumentationApiPagePO(page).apiPageExample; - input = example.getByTestId('tui-primitive-textfield__native-input'); - }); - test('Value 42 (decimalMode=not-zero) => 42', async ({page}) => { - await tuiGoto( - page, - 'components/input-number/API?precision=2&decimalMode=not-zero', - ); + test('Value 42,1 (decimalMode=pad) => 42,10', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?precision=2&decimalMode=pad`, + ); - await input.fill('42'); + await input.fill('42.1'); - await expect(input).toHaveValue('42'); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('26-input-number.png'); - }); + await expect(input).toHaveValue('42.1'); + await expect(input).toHaveJSProperty('selectionStart', 4); + await expect(input).toHaveJSProperty('selectionEnd', 4); - test('Value 42,1 (decimalMode=not-zero) => 42,1', async ({page}) => { - await tuiGoto( - page, - '/components/input-number/API?precision=2&decimalMode=not-zero', - ); + await input.blur(); - await input.fill('42.1'); + await expect(input).toHaveValue('42.10'); + await expect(example).toHaveScreenshot('28-input-number.png'); + }); - await expect(input).toHaveValue('42.1'); - await expect(input).toHaveJSProperty('selectionStart', 4); - await expect(input).toHaveJSProperty('selectionEnd', 4); + test('Value 42,00 (decimalMode=not-zero) => 42', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?precision=2&decimalMode=not-zero`, + ); - await input.blur(); + await input.fill('42.00'); - await expect(input).toHaveValue('42.1'); - await expect(example).toHaveScreenshot('27-input-number.png'); - }); + await expect(input).toHaveJSProperty('selectionStart', 5); + await expect(input).toHaveJSProperty('selectionEnd', 5); + await expect(example).toHaveScreenshot('29-input-number.png'); + }); - test('Value 42,1 (decimalMode=pad) => 42,10', async ({page}) => { - await tuiGoto( - page, - '/components/input-number/API?precision=2&decimalMode=pad', - ); + test('Value 42,1 (precision=0) => 42', async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}/API?precision=0`); - await input.fill('42.1'); + await input.fill('42.1'); - await expect(input).toHaveValue('42.1'); - await expect(input).toHaveJSProperty('selectionStart', 4); - await expect(input).toHaveJSProperty('selectionEnd', 4); + await expect(input).toHaveValue('42'); + await expect(example).toHaveScreenshot('30-input-number.png'); + }); - await input.blur(); + test('Value 42 (decimalMode=always) => 42.00', async ({page}) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?precision=2&decimalMode=always`, + ); + await input.fill('42'); - await expect(input).toHaveValue('42.10'); - await expect(example).toHaveScreenshot('28-input-number.png'); - }); + await expect(input).toHaveValue('42.00'); + await expect(input).toHaveJSProperty('selectionStart', 2); + await expect(input).toHaveJSProperty('selectionEnd', 2); + await expect(example).toHaveScreenshot('31-input-number.png'); + }); - test('Value 42,00 (decimalMode=not-zero) => 42', async ({page}) => { - await tuiGoto( + test("text field does not contain any digit (only prefix + postfix) => clear text field's value on blur", async ({ page, - '/components/input-number/API?precision=2&decimalMode=not-zero', - ); - - await input.fill('42.00'); + }) => { + await tuiGoto( + page, + `${DemoRoute.InputNumberLegacy}/API?tuiTextfieldPrefix=$&tuiTextfieldPostfix=kg`, + ); + await input.clear(); + await input.focus(); - await expect(input).toHaveJSProperty('selectionStart', 5); - await expect(input).toHaveJSProperty('selectionEnd', 5); - await expect(example).toHaveScreenshot('29-input-number.png'); + await expect(input).toHaveValue('$ kg'); + await expect(input).toHaveJSProperty('selectionStart', 1); + await expect(input).toHaveJSProperty('selectionEnd', 1); + await expect(example).toHaveScreenshot('32-input-number.png'); + }); }); + }); - test('Value 42,1 (precision=0) => 42', async ({page}) => { - await tuiGoto(page, `${DemoRoute.InputNumber}/API?precision=0`); - - await input.fill('42.1'); + test.describe('Examples', () => { + test('cursor position', async ({page}) => { + await tuiGoto(page, `${DemoRoute.InputNumberLegacy}`); - await expect(input).toHaveValue('42'); - await expect(example).toHaveScreenshot('30-input-number.png'); - }); + const example = new TuiDocumentationPagePO(page).getExample('#currency'); - test('Value 42 (decimalMode=always) => 42.00', async ({page}) => { - await tuiGoto( - page, - '/components/input-number/API?precision=2&decimalMode=always', - ); - await input.fill('42'); + await expect(example).toHaveScreenshot('06-input-number.png'); - await expect(input).toHaveValue('42.00'); - await expect(input).toHaveJSProperty('selectionStart', 2); - await expect(input).toHaveJSProperty('selectionEnd', 2); - await expect(example).toHaveScreenshot('31-input-number.png'); - }); + const inputs = await example + .getByTestId('tui-primitive-textfield__native-input') + .all(); - test("text field does not contain any digit (only prefix + postfix) => clear text field's value on blur", async ({ - page, - }) => { - await tuiGoto( - page, - '/components/input-number/API?tuiTextfieldPrefix=$&tuiTextfieldPostfix=kg', - ); - await input.clear(); - await input.focus(); + for (const [i, input] of inputs.entries()) { + await input.clear(); + await input.focus(); - await expect(input).toHaveValue('$ kg'); - await expect(input).toHaveJSProperty('selectionStart', 1); - await expect(input).toHaveJSProperty('selectionEnd', 1); - await expect(example).toHaveScreenshot('32-input-number.png'); + await expect(example).toHaveScreenshot(`06-input-number-${i}.png`); + } }); }); }); diff --git a/projects/demo/src/modules/app/app.routes.ts b/projects/demo/src/modules/app/app.routes.ts index 21eee25270eab..895c8a7617173 100644 --- a/projects/demo/src/modules/app/app.routes.ts +++ b/projects/demo/src/modules/app/app.routes.ts @@ -424,6 +424,11 @@ export const ROUTES: Routes = [ loadComponent: async () => import('../components/input-number'), title: 'InputNumber', }), + route({ + path: DemoRoute.InputNumberLegacy, + loadComponent: async () => import('../components/input-number-legacy'), + title: 'InputNumber [deprecated]', + }), route({ path: DemoRoute.InputPhone, loadComponent: async () => import('../components/input-phone'), diff --git a/projects/demo/src/modules/app/demo-routes.ts b/projects/demo/src/modules/app/demo-routes.ts index 01037bc17b955..293543b9ce01e 100644 --- a/projects/demo/src/modules/app/demo-routes.ts +++ b/projects/demo/src/modules/app/demo-routes.ts @@ -81,6 +81,7 @@ export const DemoRoute = { InputMonth: '/components/input-month', InputMonthRange: '/components/input-month-range', InputNumber: '/components/input-number', + InputNumberLegacy: '/legacy/input-number', InputPhone: '/components/input-phone', InputRange: '/components/input-range', InputDateRange: '/components/input-date-range', diff --git a/projects/demo/src/modules/app/pages.ts b/projects/demo/src/modules/app/pages.ts index 2988a7edc91b0..346844ad0b1b8 100644 --- a/projects/demo/src/modules/app/pages.ts +++ b/projects/demo/src/modules/app/pages.ts @@ -544,13 +544,22 @@ export const pages: DocRoutePages = [ keywords: 'поле, инпут, форма, ввод, input, month, месяц, год, дата', route: DemoRoute.InputMonthRange, }, + // TODO: it will be revealed later + // { + // section: 'Components', + // title: 'InputNumber', + // keywords: + // 'поле, инпут, number, число, форма, ввод, input, money, деньги, ' + + // 'cash, копейки, рубли, доллары, евро, control, контрол', + // route: DemoRoute.InputNumber, + // }, { section: 'Components', - title: 'InputNumber', + title: 'InputNumber [deprecated]', keywords: 'поле, инпут, number, число, форма, ввод, input, money, деньги, ' + 'cash, копейки, рубли, доллары, евро, control, контрол', - route: DemoRoute.InputNumber, + route: DemoRoute.InputNumberLegacy, }, { section: 'Components', diff --git a/projects/demo/src/modules/components/input-number/examples/1/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/1/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/1/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/1/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/1/index.less b/projects/demo/src/modules/components/input-number-legacy/examples/1/index.less similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/1/index.less rename to projects/demo/src/modules/components/input-number-legacy/examples/1/index.less diff --git a/projects/demo/src/modules/components/input-number/examples/1/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/1/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/1/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/1/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/2/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/2/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/2/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/2/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/2/index.less b/projects/demo/src/modules/components/input-number-legacy/examples/2/index.less similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/2/index.less rename to projects/demo/src/modules/components/input-number-legacy/examples/2/index.less diff --git a/projects/demo/src/modules/components/input-number/examples/2/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/2/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/2/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/2/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/3/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/3/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/3/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/3/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/3/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/3/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/3/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/3/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/4/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/4/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/4/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/4/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/4/index.less b/projects/demo/src/modules/components/input-number-legacy/examples/4/index.less similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/4/index.less rename to projects/demo/src/modules/components/input-number-legacy/examples/4/index.less diff --git a/projects/demo/src/modules/components/input-number/examples/4/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/4/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/4/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/4/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/5/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/5/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/5/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/5/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/5/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/5/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/5/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/5/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/6/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/6/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/6/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/6/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/6/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/6/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/6/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/6/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/7/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/7/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/7/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/7/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/7/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/7/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/7/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/7/index.ts diff --git a/projects/demo/src/modules/components/input-number/examples/8/index.html b/projects/demo/src/modules/components/input-number-legacy/examples/8/index.html similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/8/index.html rename to projects/demo/src/modules/components/input-number-legacy/examples/8/index.html diff --git a/projects/demo/src/modules/components/input-number/examples/8/index.ts b/projects/demo/src/modules/components/input-number-legacy/examples/8/index.ts similarity index 100% rename from projects/demo/src/modules/components/input-number/examples/8/index.ts rename to projects/demo/src/modules/components/input-number-legacy/examples/8/index.ts diff --git a/projects/demo/src/modules/components/input-number-legacy/examples/import/import.md b/projects/demo/src/modules/components/input-number-legacy/examples/import/import.md new file mode 100644 index 0000000000000..5261a0d398492 --- /dev/null +++ b/projects/demo/src/modules/components/input-number-legacy/examples/import/import.md @@ -0,0 +1,15 @@ +```ts +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {TuiInputNumberModule} from '@taiga-ui/legacy'; + +@Component({ + standalone: true, + imports: [FormsModule, ReactiveFormsModule, TuiInputNumberModule], + // ... +}) +export class Example { + testForm = new FormGroup({ + testValue: new FormControl(5000), + }); +} +``` diff --git a/projects/demo/src/modules/components/input-number-legacy/examples/import/template.md b/projects/demo/src/modules/components/input-number-legacy/examples/import/template.md new file mode 100644 index 0000000000000..6427b847151e6 --- /dev/null +++ b/projects/demo/src/modules/components/input-number-legacy/examples/import/template.md @@ -0,0 +1,5 @@ +```html +
+ Type a sum +
+``` diff --git a/projects/demo/src/modules/components/input-number-legacy/index.html b/projects/demo/src/modules/components/input-number-legacy/index.html new file mode 100644 index 0000000000000..d4b8b89c44ce8 --- /dev/null +++ b/projects/demo/src/modules/components/input-number-legacy/index.html @@ -0,0 +1,258 @@ + + +
A component to input numbers. Control value is also of number type.
+ +
+

There are also other components to input numbers:

+ +
+ +

+ Number formatting can be customized with + + TUI_NUMBER_FORMAT + + token. +

+ + + +

+ To input money use properties + [postfix] + or + [prefix] + . To get currency symbol use pipe + + tuiCurrency + + . +

+
+
+ + + + Customize input via + + TextfieldControllers + + . + + + + If you need to set some attributes or listen to events on native + input + , you can put it inside with + Textfield + directive as shown below + + + + + + Use property + [precision] + to configure a number of digits after comma. + + + + + + + + + + + + +
+ + + + + + Type a sum + + + + + + Disabled state (use + formControl.disable() + ) + + + Min value + + + Max value + + + Step to increase/decrease value with keyboard and buttons on the side + + + + + +
+ + + + + Custom align content by text-align + + +
+ + +
diff --git a/projects/demo/src/modules/components/input-number-legacy/index.ts b/projects/demo/src/modules/components/input-number-legacy/index.ts new file mode 100644 index 0000000000000..ffb031178332f --- /dev/null +++ b/projects/demo/src/modules/components/input-number-legacy/index.ts @@ -0,0 +1,47 @@ +import {Component} from '@angular/core'; +import {FormControl, ReactiveFormsModule, Validators} from '@angular/forms'; +import {TuiDocNumberFormat} from '@demo/components/number-format'; +import {changeDetection} from '@demo/emulate/change-detection'; +import {DemoRoute} from '@demo/routes'; +import {TuiDemo} from '@demo/utils'; +import {tuiProvide} from '@taiga-ui/cdk'; +import {TuiHint, TuiNumberFormat} from '@taiga-ui/core'; +import {TuiInputNumberModule, TuiTextfieldControllerModule} from '@taiga-ui/legacy'; + +import {ABSTRACT_PROPS_ACCESSOR} from '../abstract/abstract-props-accessor'; +import {AbstractExampleTuiControl} from '../abstract/control'; +import {InheritedDocumentation} from '../abstract/inherited-documentation'; + +@Component({ + standalone: true, + imports: [ + InheritedDocumentation, + ReactiveFormsModule, + TuiDemo, + TuiDocNumberFormat, + TuiHint, + TuiInputNumberModule, + TuiNumberFormat, + TuiTextfieldControllerModule, + ], + templateUrl: './index.html', + changeDetection, + providers: [tuiProvide(ABSTRACT_PROPS_ACCESSOR, PageComponent)], +}) +export default class PageComponent extends AbstractExampleTuiControl { + protected readonly routes = DemoRoute; + protected docPages = DemoRoute; + + protected readonly minVariants: readonly number[] = [-Infinity, -500, 5, 25]; + + protected min = this.minVariants[0]!; + + protected readonly maxVariants: readonly number[] = [Infinity, 10, 500]; + + protected max = this.maxVariants[0]!; + + protected step = 0; + + public override cleaner = false; + public readonly control = new FormControl(6432, Validators.required); +} diff --git a/projects/demo/src/modules/components/input-number/examples/import/import.md b/projects/demo/src/modules/components/input-number/examples/import/import.md index 5261a0d398492..787a7dbd04df0 100644 --- a/projects/demo/src/modules/components/input-number/examples/import/import.md +++ b/projects/demo/src/modules/components/input-number/examples/import/import.md @@ -1,15 +1,25 @@ ```ts -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {TuiInputNumberModule} from '@taiga-ui/legacy'; +import {ReactiveFormsModule} from '@angular/forms'; +import {TuiNumberFormat} from '@taiga-ui/core'; +import {TuiInputNumber, tuiInputNumberOptionsProvider} from '@taiga-ui/kit'; @Component({ standalone: true, - imports: [FormsModule, ReactiveFormsModule, TuiInputNumberModule], - // ... + imports: [ReactiveFormsModule, TuiInputNumber, TuiNumberFormat], + providers: [ + /** + * (Optional) + * Customize default behavior for all InputNumber-s + * inside specific Dependency Injection scope + */ + tuiInputNumberOptionsProvider({ + min: 0, + max: 100, + postfix: '%', + }), + ], }) export class Example { - testForm = new FormGroup({ - testValue: new FormControl(5000), - }); + protected readonly control = new FormControl(42); } ``` diff --git a/projects/demo/src/modules/components/input-number/examples/import/template.md b/projects/demo/src/modules/components/input-number/examples/import/template.md index 6427b847151e6..b6e540fa7df1e 100644 --- a/projects/demo/src/modules/components/input-number/examples/import/template.md +++ b/projects/demo/src/modules/components/input-number/examples/import/template.md @@ -1,5 +1,9 @@ ```html -
- Type a sum -
+ + + ``` diff --git a/projects/demo/src/modules/components/input-number/index.html b/projects/demo/src/modules/components/input-number/index.html index 17a2f27967a03..bfa7f99c660b8 100644 --- a/projects/demo/src/modules/components/input-number/index.html +++ b/projects/demo/src/modules/components/input-number/index.html @@ -1,257 +1,100 @@ - -
A component to input numbers. Control value is also of number type.
- -
-

There are also other components to input numbers:

- -
- -

- Number formatting can be customized with - - TUI_NUMBER_FORMAT - - token. -

- - - -

- To input money use properties - [postfix] - or - [prefix] - . To get currency symbol use pipe - - tuiCurrency - - . -

-
-
+ Coming soon, stay tuned... - - - Customize input via - + + + - TextfieldControllers - - . - - - - If you need to set some attributes or listen to events on native - input - , you can put it inside with - Textfield - directive as shown below - - + - - - Use property - [precision] - to configure a number of digits after comma. + + - - - - - - - + + + + + The lowest value in the range of permitted values + - + + The greatest value in the range of permitted values + - - + + Uneditable text + before + number + - - - - - Type a sum - - - - - - Disabled state (use - formControl.disable() - ) - - - Min value - - - Max value - - - Step to increase/decrease value with keyboard and buttons on the side - - + Uneditable text + after + number + + -
-
- - - - Custom align content by text-align - - + + + +
diff --git a/projects/demo/src/modules/components/input-number/index.ts b/projects/demo/src/modules/components/input-number/index.ts index ffb031178332f..45bdb4d1a9aae 100644 --- a/projects/demo/src/modules/components/input-number/index.ts +++ b/projects/demo/src/modules/components/input-number/index.ts @@ -1,47 +1,36 @@ import {Component} from '@angular/core'; import {FormControl, ReactiveFormsModule, Validators} from '@angular/forms'; +import {TuiDocControl} from '@demo/components/control'; import {TuiDocNumberFormat} from '@demo/components/number-format'; +import {TuiDocTextfield} from '@demo/components/textfield'; import {changeDetection} from '@demo/emulate/change-detection'; -import {DemoRoute} from '@demo/routes'; import {TuiDemo} from '@demo/utils'; -import {tuiProvide} from '@taiga-ui/cdk'; -import {TuiHint, TuiNumberFormat} from '@taiga-ui/core'; -import {TuiInputNumberModule, TuiTextfieldControllerModule} from '@taiga-ui/legacy'; - -import {ABSTRACT_PROPS_ACCESSOR} from '../abstract/abstract-props-accessor'; -import {AbstractExampleTuiControl} from '../abstract/control'; -import {InheritedDocumentation} from '../abstract/inherited-documentation'; +import {TuiHint, TuiNumberFormat, TuiTextfield} from '@taiga-ui/core'; +import {TuiInputNumber} from '@taiga-ui/kit'; @Component({ standalone: true, imports: [ - InheritedDocumentation, ReactiveFormsModule, TuiDemo, + TuiDocControl, TuiDocNumberFormat, + TuiDocTextfield, TuiHint, - TuiInputNumberModule, + TuiInputNumber, TuiNumberFormat, - TuiTextfieldControllerModule, + TuiTextfield, ], templateUrl: './index.html', changeDetection, - providers: [tuiProvide(ABSTRACT_PROPS_ACCESSOR, PageComponent)], }) -export default class PageComponent extends AbstractExampleTuiControl { - protected readonly routes = DemoRoute; - protected docPages = DemoRoute; - +export default class PageComponent { + protected readonly control = new FormControl(null, Validators.required); + protected readonly maxVariants: readonly number[] = [Infinity, 10, 500]; protected readonly minVariants: readonly number[] = [-Infinity, -500, 5, 25]; protected min = this.minVariants[0]!; - - protected readonly maxVariants: readonly number[] = [Infinity, 10, 500]; - protected max = this.maxVariants[0]!; - - protected step = 0; - - public override cleaner = false; - public readonly control = new FormControl(6432, Validators.required); + protected prefix = ''; + protected postfix = ''; } diff --git a/projects/demo/src/modules/components/input/index.html b/projects/demo/src/modules/components/input/index.html index 5fe7efabc1568..a3240d3bd0ae7 100644 --- a/projects/demo/src/modules/components/input/index.html +++ b/projects/demo/src/modules/components/input/index.html @@ -43,7 +43,7 @@
  • InputNumber diff --git a/projects/demo/src/modules/components/utils/tokens/examples/5/index.html b/projects/demo/src/modules/components/utils/tokens/examples/5/index.html index 904ea55f6dbbc..4aa86769076f0 100644 --- a/projects/demo/src/modules/components/utils/tokens/examples/5/index.html +++ b/projects/demo/src/modules/components/utils/tokens/examples/5/index.html @@ -51,7 +51,7 @@

    Components that are customizable:

  • TuiInputNumberComponent diff --git a/projects/demo/src/modules/pipes/currency/index.html b/projects/demo/src/modules/pipes/currency/index.html index d7c8a1c83d3f8..6a66915ff79fe 100644 --- a/projects/demo/src/modules/pipes/currency/index.html +++ b/projects/demo/src/modules/pipes/currency/index.html @@ -8,7 +8,7 @@ Pipe for transforming number into money. It is usually used with InputNumber diff --git a/projects/kit/components/index.ts b/projects/kit/components/index.ts index d9599844ac38d..3e64f6678962d 100644 --- a/projects/kit/components/index.ts +++ b/projects/kit/components/index.ts @@ -21,6 +21,7 @@ export * from '@taiga-ui/kit/components/elastic-container'; export * from '@taiga-ui/kit/components/files'; export * from '@taiga-ui/kit/components/filter'; export * from '@taiga-ui/kit/components/input-inline'; +export * from '@taiga-ui/kit/components/input-number'; export * from '@taiga-ui/kit/components/input-password'; export * from '@taiga-ui/kit/components/input-phone-international'; export * from '@taiga-ui/kit/components/items-with-more'; diff --git a/projects/kit/components/input-number/index.ts b/projects/kit/components/input-number/index.ts new file mode 100644 index 0000000000000..e4e250600fe95 --- /dev/null +++ b/projects/kit/components/input-number/index.ts @@ -0,0 +1,2 @@ +export * from './input-number.component'; +export * from './input-number.options'; diff --git a/projects/kit/components/input-number/input-number.component.ts b/projects/kit/components/input-number/input-number.component.ts new file mode 100644 index 0000000000000..162f17818bbb1 --- /dev/null +++ b/projects/kit/components/input-number/input-number.component.ts @@ -0,0 +1,250 @@ +import { + ChangeDetectionStrategy, + Component, + computed, + inject, + Input, + signal, +} from '@angular/core'; +import {toSignal} from '@angular/core/rxjs-interop'; +import {MaskitoDirective} from '@maskito/angular'; +import type {MaskitoOptions} from '@maskito/core'; +import {maskitoInitialCalibrationPlugin} from '@maskito/core'; +import { + maskitoCaretGuard, + maskitoNumberOptionsGenerator, + maskitoParseNumber, +} from '@maskito/kit'; +import {TuiControl, tuiValueTransformerFrom} from '@taiga-ui/cdk/classes'; +import {CHAR_HYPHEN, CHAR_MINUS} from '@taiga-ui/cdk/constants'; +import {TUI_IS_IOS, tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens'; +import {tuiInjectElement} from '@taiga-ui/cdk/utils/dom'; +import {tuiIsSafeToRound} from '@taiga-ui/cdk/utils/math'; +import {TuiWithTextfield} from '@taiga-ui/core/components/textfield'; +import {TUI_DEFAULT_NUMBER_FORMAT, TUI_NUMBER_FORMAT} from '@taiga-ui/core/tokens'; +import {tuiFormatNumber} from '@taiga-ui/core/utils/format'; +import {tuiMaskito} from '@taiga-ui/kit/utils'; + +import {TUI_INPUT_NUMBER_OPTIONS} from './input-number.options'; + +const DEFAULT_MAX_LENGTH = 18; + +@Component({ + standalone: true, + selector: 'input[tuiInputNumber]', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [ + tuiFallbackValueProvider(null), + tuiValueTransformerFrom(TUI_INPUT_NUMBER_OPTIONS), + ], + hostDirectives: [TuiWithTextfield, MaskitoDirective], + host: { + '[value]': 'textfieldValue()', + '[disabled]': 'disabled()', + '[attr.inputMode]': 'inputMode()', + '[attr.maxLength]': 'maxLength()', + '(input)': 'onInput()', + '(blur)': 'onBlur()', + '(focus)': 'onFocus()', + }, +}) +export class TuiInputNumber extends TuiControl { + private readonly element = tuiInjectElement(); + private readonly isIOS = inject(TUI_IS_IOS); + private readonly options = inject(TUI_INPUT_NUMBER_OPTIONS); + private readonly numberFormat = toSignal(inject(TUI_NUMBER_FORMAT), { + initialValue: TUI_DEFAULT_NUMBER_FORMAT, + }); + + private readonly min = signal(this.options.min); + private readonly max = signal(this.options.max); + private readonly prefix = signal(this.options.prefix); + private readonly postfix = signal(this.options.postfix); + + private readonly precision = computed(() => + Number.isNaN(this.numberFormat().precision) ? 2 : this.numberFormat().precision, + ); + + private readonly isIntermediateState = computed(() => { + const value = maskitoParseNumber( + this.textfieldValue(), + this.numberFormat().decimalSeparator, + ); + + return value < 0 ? value > this.max() : value < this.min(); + }); + + protected textfieldValue = signal(this.element.value || ''); + + protected readonly inputMode = computed(() => { + if (this.isIOS && this.min() < 0) { + // iPhone does not have minus sign if inputMode is equal to 'numeric' / 'decimal' + return 'text'; + } + + return this.precision() ? 'decimal' : 'numeric'; + }); + + protected readonly maxLength = computed(() => { + const {decimalSeparator, thousandSeparator} = this.numberFormat(); + const decimalPart = + !!this.precision() && this.textfieldValue().includes(decimalSeparator); + const precision = decimalPart ? Math.min(this.precision() + 1, 20) : 0; + const takeThousand = thousandSeparator.repeat(5).length; + + return DEFAULT_MAX_LENGTH + precision + takeThousand; + }); + + protected readonly mask = tuiMaskito( + computed(({decimalMode, ...numberFormat} = this.numberFormat()) => + this.computeMask({ + ...numberFormat, + precision: this.precision(), + min: this.min(), + max: this.max(), + prefix: this.prefix(), + postfix: this.postfix(), + decimalZeroPadding: decimalMode === 'always', + }), + ), + ); + + @Input('min') + public set minSetter(x: number | null) { + this.updateMinMaxLimits(x, this.max()); + } + + @Input('max') + public set maxSetter(x: number | null) { + this.updateMinMaxLimits(this.min(), x); + } + + // TODO(v5): replace with signal input + @Input('prefix') + public set prefixSetter(x: string) { + this.prefix.set(x); + } + + // TODO(v5): replace with signal input + @Input('postfix') + public set postfixSetter(x: string) { + this.postfix.set(x); + } + + public override writeValue(value: number | null): void { + super.writeValue(value); + this.textfieldValue.set(this.formatNumber(value)); + } + + protected onInput(): void { + const value = this.element.value; + const parsedValue = maskitoParseNumber( + value, + this.numberFormat().decimalSeparator, + ); + + this.textfieldValue.set(value); + + if (Number.isNaN(parsedValue)) { + this.onChange(null); + + return; + } + + if ( + this.isIntermediateState() || + parsedValue < this.min() || + parsedValue > this.max() + ) { + return; + } + + this.onChange(parsedValue); + } + + protected onBlur(): void { + this.onTouched(); + + if (!this.isIntermediateState()) { + this.textfieldValue.set(this.formatNumber(this.value())); + } + } + + protected onFocus(): void { + const value = maskitoParseNumber( + this.textfieldValue(), + this.numberFormat().decimalSeparator, + ); + + if (Number.isNaN(value) && !this.readOnly()) { + this.textfieldValue.set(this.prefix() + this.postfix()); + } + } + + private formatNumber(value: number | null): string { + if (value === null) { + return ''; + } + + return ( + this.prefix() + + tuiFormatNumber(value, { + ...this.numberFormat(), + /** + * Number can satisfy interval [Number.MIN_SAFE_INTEGER; Number.MAX_SAFE_INTEGER] + * but its rounding can violate it. + * Before BigInt support there is no perfect solution – only trade off. + * No rounding is better than lose precision and incorrect mutation of already valid value. + */ + precision: tuiIsSafeToRound(value, this.precision()) + ? this.precision() + : Infinity, + }).replace(CHAR_HYPHEN, CHAR_MINUS) + + this.postfix() + ); + } + + private updateMinMaxLimits( + nullableMin: number | null, + nullableMax: number | null, + ): void { + const min = + this.transformer?.fromControlValue(nullableMin) ?? + nullableMin ?? + this.options.min; + const max = + this.transformer?.fromControlValue(nullableMax) ?? + nullableMax ?? + this.options.max; + + this.min.set(Math.min(min, max)); + this.max.set(Math.max(min, max)); + } + + private computeMask( + params: NonNullable[0]>, + ): MaskitoOptions { + const {prefix = '', postfix = ''} = params; + const {plugins, ...options} = maskitoNumberOptionsGenerator(params); + const initialCalibrationPlugin = maskitoInitialCalibrationPlugin( + maskitoNumberOptionsGenerator({ + ...params, + min: Number.MIN_SAFE_INTEGER, + max: Number.MAX_SAFE_INTEGER, + }), + ); + + return { + ...options, + plugins: [ + ...plugins, + initialCalibrationPlugin, + maskitoCaretGuard((value) => [ + prefix.length, + value.length - postfix.length, + ]), + ], + }; + } +} diff --git a/projects/kit/components/input-number/input-number.options.ts b/projects/kit/components/input-number/input-number.options.ts new file mode 100644 index 0000000000000..52b54960cc54f --- /dev/null +++ b/projects/kit/components/input-number/input-number.options.ts @@ -0,0 +1,22 @@ +import type {TuiValueTransformer} from '@taiga-ui/cdk/classes'; +import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di'; + +export interface TuiInputNumberOptions { + readonly max: number; + readonly min: number; + readonly prefix: string; + readonly postfix: string; + readonly valueTransformer: TuiValueTransformer | null; +} + +export const TUI_INPUT_NUMBER_DEFAULT_OPTIONS: TuiInputNumberOptions = { + min: Number.MIN_SAFE_INTEGER, + max: Number.MAX_SAFE_INTEGER, + prefix: '', + postfix: '', + valueTransformer: null, +}; + +export const [TUI_INPUT_NUMBER_OPTIONS, tuiInputNumberOptionsProvider] = tuiCreateOptions( + TUI_INPUT_NUMBER_DEFAULT_OPTIONS, +); diff --git a/projects/kit/components/input-number/ng-package.json b/projects/kit/components/input-number/ng-package.json new file mode 100644 index 0000000000000..bebf62dcb5e51 --- /dev/null +++ b/projects/kit/components/input-number/ng-package.json @@ -0,0 +1,5 @@ +{ + "lib": { + "entryFile": "index.ts" + } +} From e96d4eb76604f6dcfd96594778ee1b87109d9259 Mon Sep 17 00:00:00 2001 From: Vladimir Potekhin <46284632+vladimirpotekhin@users.noreply.github.com> Date: Wed, 25 Dec 2024 09:02:38 +0300 Subject: [PATCH 18/21] fix(legacy): `TuiMultiSelect` fix arrow (#10050) --- .../legacy/components/arrow/arrow.component.ts | 16 ++++++++++------ .../legacy/components/arrow/arrow.template.html | 1 - .../components/input-tag/input-tag.component.ts | 17 +++++++++++------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/projects/legacy/components/arrow/arrow.component.ts b/projects/legacy/components/arrow/arrow.component.ts index 198d217b54b0f..a56222e45a071 100644 --- a/projects/legacy/components/arrow/arrow.component.ts +++ b/projects/legacy/components/arrow/arrow.component.ts @@ -1,5 +1,6 @@ import {AsyncPipe, NgIf} from '@angular/common'; -import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; +import {ChangeDetectionStrategy, Component, computed, inject} from '@angular/core'; +import {toSignal} from '@angular/core/rxjs-interop'; import {TuiIcon} from '@taiga-ui/core/components/icon'; import {TuiDropdownOpen} from '@taiga-ui/core/directives/dropdown'; import {tuiSizeBigger} from '@taiga-ui/core/utils/miscellaneous'; @@ -11,6 +12,7 @@ import { PolymorpheusOutlet, PolymorpheusTemplate, } from '@taiga-ui/polymorpheus'; +import {of} from 'rxjs'; import {TUI_ARROW_OPTIONS} from './arrow.options'; @@ -25,7 +27,7 @@ import {TUI_ARROW_OPTIONS} from './arrow.options'; styleUrls: ['./arrow.style.less'], changeDetection: ChangeDetectionStrategy.OnPush, host: { - '[class._rotated]': 'rotated', + '[class._rotated]': 'rotated()', '[class._small]': 'small', }, }) @@ -33,11 +35,13 @@ export class TuiArrowComponent { private readonly control: any = inject(AbstractTuiControl, {optional: true}); private readonly textfieldSize = inject(TUI_TEXTFIELD_SIZE); private readonly options = inject(TUI_ARROW_OPTIONS); - protected readonly directive = inject(TuiDropdownOpen, {optional: true}); + protected readonly dropdownOpen = toSignal( + inject(TuiDropdownOpen, {optional: true})?.tuiDropdownOpenChange || of(false), + ); - protected get rotated(): boolean { - return this.directive?.tuiDropdownOpen || !!this.control.pseudoOpen || false; - } + protected readonly rotated = computed( + () => this.dropdownOpen() || this.control.pseudoOpen?.(), + ); protected get small(): boolean { return !tuiSizeBigger(this.textfieldSize.size); diff --git a/projects/legacy/components/arrow/arrow.template.html b/projects/legacy/components/arrow/arrow.template.html index 560a57f74c8a2..8a291f72f5fdb 100644 --- a/projects/legacy/components/arrow/arrow.template.html +++ b/projects/legacy/components/arrow/arrow.template.html @@ -2,4 +2,3 @@ *polymorpheusOutlet="arrowIcon as src" [icon]="src" /> - diff --git a/projects/legacy/components/input-tag/input-tag.component.ts b/projects/legacy/components/input-tag/input-tag.component.ts index 94e37c4abdcaf..a6007c0cf1332 100644 --- a/projects/legacy/components/input-tag/input-tag.component.ts +++ b/projects/legacy/components/input-tag/input-tag.component.ts @@ -8,6 +8,7 @@ import { inject, Input, Output, + signal, TemplateRef, ViewChild, ViewChildren, @@ -159,12 +160,6 @@ export class TuiInputTagComponent @Input() public removable = true; - /** - * @deprecated hack - */ - @Input() - public pseudoOpen = false; - @Input() public disabledItemHandler: TuiBooleanHandler | string> = TUI_FALSE_HANDLER; @@ -172,6 +167,8 @@ export class TuiInputTagComponent @Output() public readonly searchChange = new EventEmitter(); + public pseudoOpen = signal(false); + @Input('pseudoFocused') public set pseudoFocusedSetter(value: boolean | null) { if (!value && !this.focused) { @@ -181,6 +178,14 @@ export class TuiInputTagComponent this.pseudoFocus = value; } + /** + * @deprecated hack + */ + @Input('pseudoOpen') + public set setPseudoOpen(value: boolean) { + this.pseudoOpen.set(value); + } + public get labelOutside(): boolean { const {size, labelOutside} = this.controller; From 416dd8bf28e20f7b8b600acfa771b5c1bef18308 Mon Sep 17 00:00:00 2001 From: Alexey <47535336+dequubi@users.noreply.github.com> Date: Wed, 25 Dec 2024 10:22:07 +0300 Subject: [PATCH 19/21] fix(legacy): incorrect InputTag table appearance and PrimitiveTextfield placeholderRaisable calculation (#10052) --- .../modules/components/table/examples/8/index.html | 11 ++++++++++- .../modules/components/table/examples/8/index.ts | 9 ++++++++- .../components/input-tag/input-tag.component.ts | 8 ++++++-- .../primitive-textfield.component.ts | 13 ++++++++++--- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/projects/demo/src/modules/components/table/examples/8/index.html b/projects/demo/src/modules/components/table/examples/8/index.html index 3b7a0d077fb08..f03c9f1c20ead 100644 --- a/projects/demo/src/modules/components/table/examples/8/index.html +++ b/projects/demo/src/modules/components/table/examples/8/index.html @@ -11,7 +11,13 @@ tuiTh [resizable]="true" > - Age + Items + + + Balance Description @@ -19,6 +25,9 @@ {{ item.name }} + + Items + >; + protected readonly textfieldOptions = inject(TUI_TEXTFIELD_OPTIONS); protected readonly hintOptions = inject(TuiHintOptionsDirective, {optional: true}); protected readonly controller = inject(TUI_TEXTFIELD_WATCHED_CONTROLLER); protected readonly icons = inject(TUI_COMMON_ICONS); @@ -189,7 +191,7 @@ export class TuiInputTagComponent public get labelOutside(): boolean { const {size, labelOutside} = this.controller; - return size === 's' || labelOutside; + return this.appearance === 'table' || size === 's' || labelOutside; } public get size(): TuiSizeL | TuiSizeS { @@ -273,7 +275,9 @@ export class TuiInputTagComponent } protected get appearance(): string { - return this.controller.appearance; + return this.textfieldOptions.appearance() === 'table' + ? 'table' + : this.controller.appearance; } protected get expandable(): boolean { diff --git a/projects/legacy/components/primitive-textfield/primitive-textfield.component.ts b/projects/legacy/components/primitive-textfield/primitive-textfield.component.ts index 6186dc4f795f6..5285c27a6cbf3 100644 --- a/projects/legacy/components/primitive-textfield/primitive-textfield.component.ts +++ b/projects/legacy/components/primitive-textfield/primitive-textfield.component.ts @@ -59,8 +59,7 @@ export const TUI_ICON_START_PADDINGS: Record = { '[class._autofilled]': 'autofilled', '[style.--border-start.rem]': 'borderStart', '[style.--border-end.rem]': 'borderEnd', - '[class._label-outside]': - 'options.appearance() === "table" || controller.labelOutside', + '[class._label-outside]': 'labelOutside', '(focusin)': 'onFocused(true)', '(focusout)': 'onFocused(false)', '(transitionstart.capture)': 'transitionStartHandler($event)', @@ -146,6 +145,14 @@ export class TuiPrimitiveTextfieldComponent this.updateValue(value); } + protected get labelOutside(): boolean { + return ( + this.appearance === 'table' || + this.size === 's' || + this.controller.labelOutside + ); + } + protected get size(): TuiSizeL | TuiSizeS { return this.controller.size; } @@ -303,7 +310,7 @@ export class TuiPrimitiveTextfieldComponent } private get placeholderRaisable(): boolean { - return this.size !== 's' && !this.controller.labelOutside; + return !this.labelOutside; } private updateAutofilled(autofilled: boolean): void { From c7861890dde5b5403887f0e9a2cd3febba8be989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=98=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Wed, 25 Dec 2024 16:43:36 +0300 Subject: [PATCH 20/21] chore: add test on windows (#10058) --- .github/workflows/test.yml | 10 +- package-lock.json | 3755 +++++++++++++++++------------------- package.json | 16 +- 3 files changed, 1823 insertions(+), 1958 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e9c808836ce92..e29dc82346b8d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,15 +8,19 @@ on: jobs: test: if: ${{ !contains(github.head_ref, 'release/') }} - runs-on: ubuntu-latest - name: Unit tests + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + name: Unit tests (${{ matrix.os }}) + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4.2.2 - uses: taiga-family/ci/actions/setup/variables@v1.105.0 - uses: taiga-family/ci/actions/setup/node@v1.105.0 - run: npm test - - run: tree -L 2 ./coverage -P 'lcov.info' - uses: codecov/codecov-action@v5.1.2 + if: ${{ matrix.os == 'ubuntu-latest' }} env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: diff --git a/package-lock.json b/package-lock.json index ed59f3d0e483e..8b13ab31aab57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,16 +28,16 @@ "@nx/jest": "20.1.4", "@nx/workspace": "20.1.4", "@schematics/angular": "16.2.16", - "@taiga-ui/browserslist-config": "0.238.0", - "@taiga-ui/commitlint-config": "0.238.0", - "@taiga-ui/cspell-config": "0.238.0", + "@taiga-ui/browserslist-config": "0.239.0", + "@taiga-ui/commitlint-config": "0.239.0", + "@taiga-ui/cspell-config": "0.239.0", "@taiga-ui/design-tokens": "0.159.0", - "@taiga-ui/eslint-plugin-experience": "0.238.0", + "@taiga-ui/eslint-plugin-experience": "0.239.0", "@taiga-ui/event-plugins": "4.3.1", - "@taiga-ui/jest-config": "0.238.0", - "@taiga-ui/prettier-config": "0.238.0", - "@taiga-ui/stylelint-config": "0.238.0", - "@taiga-ui/tsconfig": "0.238.0", + "@taiga-ui/jest-config": "0.239.0", + "@taiga-ui/prettier-config": "0.239.0", + "@taiga-ui/stylelint-config": "0.239.0", + "@taiga-ui/tsconfig": "0.239.0", "@types/glob": "8.1.0", "@types/loader-utils": "2.0.6", "@types/node": "22.10.2", @@ -4506,9 +4506,9 @@ "peer": true }, "node_modules/@cspell/dict-npm": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.19.tgz", - "integrity": "sha512-ygpKeCXKURqymycqZEF9r/TytkWZxedDehudqiJLtPI6OZJhx3Kxy3hysiRq7RYpHiK+LSX39bwpxGM/h0Ghnw==", + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.20.tgz", + "integrity": "sha512-vE9pFIifCDChsVhhUDuVtnwxygOdtHNluDm+8FkgC84M6LwiUVJr/CuSOI/SCR0oI9iiFp0VvMz194B6XwMv3g==", "dev": true, "license": "MIT", "peer": true @@ -4597,9 +4597,9 @@ "peer": true }, "node_modules/@cspell/dict-software-terms": { - "version": "4.1.21", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.1.21.tgz", - "integrity": "sha512-LXoFLHzqPeehPMpu4mLpUoP+UVgT8aDfMuuvpsowvDc/nYaMq0UvnPVo632VOi5SUOzFX6NHsQ4x5eP3TRUOFA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.2.0.tgz", + "integrity": "sha512-cTLTNdP9RM6nruZ01FThEFKRi7C4TPN8ndc+FpvCqis9J8iSg4Cr4YQemT/DxXoXz0527NbBPCARunxA0qIgTA==", "dev": true, "license": "MIT", "peer": true @@ -4629,9 +4629,9 @@ "peer": true }, "node_modules/@cspell/dict-terraform": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.6.tgz", - "integrity": "sha512-Sqm5vGbXuI9hCFcr4w6xWf4Y25J9SdleE/IqfM6RySPnk8lISEmVdax4k6+Kinv9qaxyvnIbUUN4WFLWcBPQAg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.7.tgz", + "integrity": "sha512-Ip7tOlAt/qUVdWYyDMA7DlKMpQ6sjtrsXk4vcpqXoYpoJlzMoDce7pw+fPhHshtNOFBAZ4nOrszlLu6APuy+HQ==", "dev": true, "license": "MIT", "peer": true @@ -4824,6 +4824,35 @@ "node": ">= 6" } }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/request/node_modules/tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -4873,7 +4902,7 @@ "preact": "^10.0.0" } }, - "node_modules/@docsearch/react": { + "node_modules/@docsearch/js/node_modules/@docsearch/react": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", @@ -4906,6 +4935,49 @@ } } }, + "node_modules/@docsearch/js/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@docsearch/js/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/@docsearch/js/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/@dual-bundle/import-meta-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", @@ -5891,19 +5963,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", @@ -6001,19 +6060,6 @@ "node": ">=8" } }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -6168,19 +6214,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -6308,19 +6341,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -6372,19 +6392,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", @@ -6676,19 +6683,6 @@ "node": ">=8" } }, - "node_modules/@module-federation/dts-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@module-federation/enhanced": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.7.6.tgz", @@ -6787,19 +6781,6 @@ "node": ">=8" } }, - "node_modules/@module-federation/manifest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@module-federation/rspack": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.7.6.tgz", @@ -7358,6 +7339,44 @@ "@angular-devkit/build-angular": "^16.0.0 || ^16.1.0-next.0" } }, + "node_modules/@nguniversal/builders/node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/@nguniversal/builders/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@nguniversal/common": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/@nguniversal/common/-/common-16.2.0.tgz", @@ -7377,6 +7396,199 @@ "@angular/core": "^16.0.0 || ^16.1.0-next.0" } }, + "node_modules/@nguniversal/common/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nguniversal/common/node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nguniversal/common/node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nguniversal/common/node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nguniversal/common/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nguniversal/common/node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/@nguniversal/common/node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/@nguniversal/common/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nguniversal/common/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nguniversal/common/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/@nguniversal/common/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/@nguniversal/common/node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nguniversal/common/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, "node_modules/@nguniversal/express-engine": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-16.2.0.tgz", @@ -7745,19 +7957,6 @@ "@napi-rs/nice": "^1.0.1" } }, - "node_modules/@nx/angular/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx/cypress": { "version": "20.1.4", "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-20.1.4.tgz", @@ -7895,19 +8094,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nx/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx/js": { "version": "20.1.4", "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.1.4.tgz", @@ -8113,6 +8299,19 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@nx/js/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@nx/js/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8270,19 +8469,6 @@ "source-map": "^0.6.0" } }, - "node_modules/@nx/js/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@nx/js/node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -8620,16 +8806,6 @@ "node": ">= 6" } }, - "node_modules/@nx/webpack/node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/@nx/webpack/node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -8719,24 +8895,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/webpack/node_modules/http-proxy-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", - "integrity": "sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.15", - "debug": "^4.3.6", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.3", - "is-plain-object": "^5.0.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@nx/webpack/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -8760,6 +8918,19 @@ "node": ">= 10" } }, + "node_modules/@nx/webpack/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@nx/webpack/node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", @@ -9151,19 +9322,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nx/workspace/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@phenomnomnominal/tsquery": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", @@ -9377,6 +9535,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@sigstore/sign/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/@sigstore/sign/node_modules/cacache": { "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", @@ -9422,6 +9590,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@sigstore/sign/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@sigstore/sign/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -9794,9 +9977,9 @@ "link": true }, "node_modules/@taiga-ui/browserslist-config": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/browserslist-config/-/browserslist-config-0.238.0.tgz", - "integrity": "sha512-oI9e48rqpsHXQY/MFfrcT+FT/5fcCibb/G4glC7z5t58G/Y++iorh2wBiDrKEPpI7dcRzEKplWLAmWuEwmRwNg==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/browserslist-config/-/browserslist-config-0.239.0.tgz", + "integrity": "sha512-7I+jrwu10mwpbuBzRO4t4PhvKhYFNozWdDT16sDewLbcMEEXQtAijxoOF/ftDipsZhk/W57YHaID/s12NG0PzA==", "dev": true, "license": "Apache-2.0" }, @@ -9805,9 +9988,9 @@ "link": true }, "node_modules/@taiga-ui/commitlint-config": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/commitlint-config/-/commitlint-config-0.238.0.tgz", - "integrity": "sha512-8oEK375QSrJx0HDoAnLbRUCsty/NMHZv0PcrZVQ4kH6M8tGskn0Ba+i9e1S0LQK38A7EtIGVtBHAT3pOv9pu+g==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/commitlint-config/-/commitlint-config-0.239.0.tgz", + "integrity": "sha512-W+MHKjLJTfMrp1ZROxdPJUIxf1uanA9LeNVC4nIGE6tQQurM+y01or0uUJe3DTAMB5Qi2Bv+0rCms2JP98xOSg==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -9820,9 +10003,9 @@ "link": true }, "node_modules/@taiga-ui/cspell-config": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/cspell-config/-/cspell-config-0.238.0.tgz", - "integrity": "sha512-djfHBbHKbBAg+BWM1MpOrtyXKXuOh+HiJXJP9leLB+Hj/JyyDE6cwkOrLl02gOuRmfoCD9z3TZhFFf/bR+v9aw==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/cspell-config/-/cspell-config-0.239.0.tgz", + "integrity": "sha512-e5hsAGO22Eq9eSjJ5Ff53Dc5/ny0EiL2+KqAm2SlVujEP2ozQNz7hzanFR1liqkGMdNe81wj9Tg7TI//xLRkQQ==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -9872,9 +10055,9 @@ } }, "node_modules/@taiga-ui/eslint-plugin-experience": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/eslint-plugin-experience/-/eslint-plugin-experience-0.238.0.tgz", - "integrity": "sha512-LyPhQ8N2KyuHfKo+cUQcqXesfnGn8PNrKx0mib6ey1K5F0HzZ6jtVTQ3twfF7PClFdyNSqpUNcB40b0PkihOdQ==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/eslint-plugin-experience/-/eslint-plugin-experience-0.239.0.tgz", + "integrity": "sha512-xYSSszQ2unhXkP5BZjL/o9yKuZw/4CZlEIoWhWUsPSnbdYciPFWi4/stvmi1g/i3D/zm6mSX8b/YT1ZKOHYZ9Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9890,11 +10073,11 @@ "@stylistic/eslint-plugin-js": "^2.12.1", "@stylistic/eslint-plugin-plus": "^2.12.1", "@stylistic/eslint-plugin-ts": "^2.12.1", - "@typescript-eslint/eslint-plugin": "^8.18.1", - "@typescript-eslint/parser": "^8.18.1", - "@typescript-eslint/types": "^8.18.1", - "@typescript-eslint/typescript-estree": "^8.18.1", - "@typescript-eslint/utils": "^8.18.1", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", + "@typescript-eslint/types": "^8.18.2", + "@typescript-eslint/typescript-estree": "^8.18.2", + "@typescript-eslint/utils": "^8.18.2", "eslint": "^8.57.1 || ^9.0.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^9.1.0", @@ -10038,9 +10221,9 @@ "link": true }, "node_modules/@taiga-ui/jest-config": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/jest-config/-/jest-config-0.238.0.tgz", - "integrity": "sha512-lDglvOmKjgyWoKP2ZClU9OyrmgcM7f3n13SbbIwFhXzOkDxE4+8K6ZIlhvvb3sIqLWxDHsFO+7O7SCtm8LOR8Q==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/jest-config/-/jest-config-0.239.0.tgz", + "integrity": "sha512-ApuJlKTgxQjMchBIMcIq3y9ores5aY4A1R4L3kspIjvvtozA+8uL0J//PNmctvVOW1f/DHpOyux6vmlTWECHng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10077,9 +10260,9 @@ } }, "node_modules/@taiga-ui/prettier-config": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/prettier-config/-/prettier-config-0.238.0.tgz", - "integrity": "sha512-xBlkW1RKdf1NELtTk3Tmx9L05sR9S0HxR6tHFfehxY5+vGYr35kXzBmkH5qSSIQapZtJ8awnTX15wtgPkb0Vtg==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/prettier-config/-/prettier-config-0.239.0.tgz", + "integrity": "sha512-JgXMstFaSRXNvZL3YZzAqvmPl027JPmEO/QkzYEZfa0TjH0aQdFxQk8P6uXyQ1mQgfeQB3ZyUgERD4hIjJkQrQ==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -10092,9 +10275,9 @@ } }, "node_modules/@taiga-ui/stylelint-config": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/stylelint-config/-/stylelint-config-0.238.0.tgz", - "integrity": "sha512-s4pvsMAzs+MpH2reW1TEoru0VZRvIO1Q7TirHivCtEDWy8KOS0+Tv5pjRJnklrzE38PzNUOAk4iFavkuLogFqw==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/stylelint-config/-/stylelint-config-0.239.0.tgz", + "integrity": "sha512-YNwn8fFKKaEeYKkOoiXntN7xLwUKtE8WkZi/nMhVQeI149O+0OpuQyo/WYgDYXmEDVgxO+/CNe2pEoUTNGHZvA==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -10118,20 +10301,20 @@ "link": true }, "node_modules/@taiga-ui/tsconfig": { - "version": "0.238.0", - "resolved": "https://registry.npmjs.org/@taiga-ui/tsconfig/-/tsconfig-0.238.0.tgz", - "integrity": "sha512-3eXUCvDHtsMWcvX0eJsa7IuS22vkb2awTKHcaE4RO6tOlbC+YrMU2KO4xzEzTIjzmlFGpfHzZlZfFgqsnCNFxA==", + "version": "0.239.0", + "resolved": "https://registry.npmjs.org/@taiga-ui/tsconfig/-/tsconfig-0.239.0.tgz", + "integrity": "sha512-xavDti1S1KlsQBSWlar1CnD48WT7nNhSRfOHtbLl2GdHvXi4CQMUZbdoPhKpCpbCnAhSYUDhX2fkXy9tKqzbyA==", "dev": true, "license": "Apache-2.0" }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 6" } }, "node_modules/@trysound/sax": { @@ -10895,18 +11078,18 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz", - "integrity": "sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.2.tgz", + "integrity": "sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.18.1", - "@typescript-eslint/type-utils": "8.18.1", - "@typescript-eslint/utils": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1", + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/type-utils": "8.18.2", + "@typescript-eslint/utils": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -11119,17 +11302,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.1.tgz", - "integrity": "sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.2.tgz", + "integrity": "sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.18.1", - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/typescript-estree": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1", + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/typescript-estree": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "debug": "^4.3.4" }, "engines": { @@ -11145,14 +11328,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz", - "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz", + "integrity": "sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1" + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11163,14 +11346,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz", - "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz", + "integrity": "sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.18.1", - "@typescript-eslint/utils": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.2", + "@typescript-eslint/utils": "8.18.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -11187,9 +11370,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", - "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.2.tgz", + "integrity": "sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==", "dev": true, "license": "MIT", "engines": { @@ -11201,14 +11384,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", - "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz", + "integrity": "sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/visitor-keys": "8.18.1", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/visitor-keys": "8.18.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -11274,16 +11457,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz", - "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.2.tgz", + "integrity": "sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.18.1", - "@typescript-eslint/types": "8.18.1", - "@typescript-eslint/typescript-estree": "8.18.1" + "@typescript-eslint/scope-manager": "8.18.2", + "@typescript-eslint/types": "8.18.2", + "@typescript-eslint/typescript-estree": "8.18.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11298,13 +11481,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", - "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz", + "integrity": "sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/types": "8.18.2", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -11534,16 +11717,6 @@ "typescript": ">=3.2.x || >= 4.x" } }, - "node_modules/@wessberg/ts-evaluator/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/@wessberg/ts-evaluator/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -11577,311 +11750,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wessberg/ts-evaluator/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wessberg/ts-evaluator/node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/form-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", - "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wessberg/ts-evaluator/node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wessberg/ts-evaluator/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@wessberg/ts-evaluator/node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/@xml-tools/parser": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", @@ -12007,16 +11875,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", @@ -12039,14 +11897,11 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, "engines": { "node": ">=0.4.0" } @@ -12834,19 +12689,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-loader": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", @@ -13348,22 +13190,6 @@ "dev": true, "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -13520,17 +13346,24 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/browser-sync-ui/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/browser-sync-ui/node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.8" + } + }, + "node_modules/browser-sync-ui/node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/browser-sync/node_modules/ansi-styles": { @@ -13566,6 +13399,53 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/browser-sync/node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/browser-sync/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/browser-sync/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/browser-sync/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-sync/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/browser-sync/node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -13578,6 +13458,39 @@ "universalify": "^0.1.0" } }, + "node_modules/browser-sync/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/browser-sync/node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/browser-sync/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, "node_modules/browser-sync/node_modules/jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -13588,17 +13501,92 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/browser-sync/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/browser-sync/node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + } + }, + "node_modules/browser-sync/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-sync/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8" + } + }, + "node_modules/browser-sync/node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/browser-sync/node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/browser-sync/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/browser-sync/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/browser-sync/node_modules/universalify": { @@ -14251,22 +14239,76 @@ } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -14596,9 +14638,9 @@ } }, "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, "license": "MIT", "engines": { @@ -14615,6 +14657,35 @@ "ms": "2.0.0" } }, + "node_modules/connect/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14622,6 +14693,29 @@ "dev": true, "license": "MIT" }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -16059,19 +16153,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -16128,19 +16209,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/critters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cron-parser": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", @@ -16673,18 +16741,25 @@ "license": "MIT" }, "node_modules/cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "cssom": "~0.3.6" }, "engines": { - "node": ">=14" + "node": ">=8" } }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, "node_modules/cuint": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", @@ -16841,6 +16916,23 @@ "node": ">=8" } }, + "node_modules/cypress/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cypress/node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -16851,6 +16943,162 @@ "node": ">= 6" } }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/cypress/node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cypress/node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cypress/node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -16858,6 +17106,37 @@ "dev": true, "license": "MIT" }, + "node_modules/cypress/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -16894,18 +17173,18 @@ } }, "node_modules/data-urls": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", - "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/data-view-buffer": { @@ -17147,53 +17426,6 @@ "node": ">= 10" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -17450,17 +17682,27 @@ "license": "BSD-2-Clause" }, "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "deprecated": "Use your platform's native DOMException instead", "dev": true, "license": "MIT", "dependencies": { - "webidl-conversions": "^7.0.0" + "webidl-conversions": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" } }, "node_modules/domhandler": { @@ -17488,9 +17730,9 @@ "peer": true }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.1.tgz", + "integrity": "sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -17739,19 +17981,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eazy-logger/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -17794,9 +18023,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.75", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz", - "integrity": "sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==", + "version": "1.5.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", + "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", "dev": true, "license": "ISC" }, @@ -20971,20 +21200,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -21141,20 +21356,20 @@ } }, "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { @@ -21280,99 +21495,13 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/debug/node_modules/ms": { + "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -21429,6 +21558,22 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -21628,18 +21773,18 @@ } }, "node_modules/finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.1", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -21656,16 +21801,6 @@ "ms": "2.0.0" } }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -21673,29 +21808,6 @@ "dev": true, "license": "MIT" }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -22062,19 +22174,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -22519,16 +22618,13 @@ } }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23531,13 +23627,13 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", + "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, @@ -23546,28 +23642,21 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", + "integrity": "sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==", "dev": true, "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.8", + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/http-server": { @@ -23631,19 +23720,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/http-server/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -23674,13 +23750,13 @@ } }, "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=8.12.0" + "node": ">=10.17.0" } }, "node_modules/humanize-duration": { @@ -23824,14 +23900,11 @@ } }, "node_modules/immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", @@ -24031,19 +24104,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -24357,13 +24417,16 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-fn": { @@ -24567,13 +24630,14 @@ } }, "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -24937,19 +25001,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -25100,19 +25151,6 @@ "node": "*" } }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -25155,53 +25193,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/jest-circus": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", @@ -25319,19 +25310,6 @@ } } }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-circus/node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -25411,19 +25389,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", @@ -25519,19 +25484,6 @@ "node": ">=8" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -25581,19 +25533,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-docblock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -25657,19 +25596,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-environment-jsdom": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", @@ -25698,6 +25624,16 @@ } } }, + "node_modules/jest-environment-jsdom/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/jest-environment-jsdom/node_modules/acorn-globals": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", @@ -25709,30 +25645,23 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/jest-environment-jsdom/node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/jest-environment-jsdom/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { - "cssom": "~0.3.6" + "acorn": "^8.11.0" }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/jest-environment-jsdom/node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true, "license": "MIT" }, @@ -25751,6 +25680,35 @@ "node": ">=12" } }, + "node_modules/jest-environment-jsdom/node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jest-environment-jsdom/node_modules/jsdom": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", @@ -25797,20 +25755,17 @@ } } }, - "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "node_modules/jest-environment-jsdom/node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">=v12.22.7" } }, "node_modules/jest-environment-jsdom/node_modules/tr46": { @@ -25826,14 +25781,37 @@ "node": ">=12" } }, - "node_modules/jest-environment-jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=14" + } + }, + "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" } }, "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { @@ -25850,6 +25828,16 @@ "node": ">=12" } }, + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, "node_modules/jest-environment-node": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", @@ -25967,19 +25955,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-message-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", @@ -26034,19 +26009,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", @@ -26196,19 +26158,6 @@ "node": ">=10" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runner": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", @@ -26296,19 +26245,6 @@ "source-map": "^0.6.0" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runtime": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", @@ -26376,19 +26312,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -26454,19 +26377,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", @@ -26534,19 +26444,6 @@ "node": ">=8" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", @@ -26611,19 +26508,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -26677,19 +26561,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", @@ -26706,6 +26577,22 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jiti": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", @@ -26763,38 +26650,42 @@ "license": "MIT" }, "node_modules/jsdom": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", - "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", - "decimal.js": "^10.4.3", - "domexception": "^4.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, "peerDependencies": { "canvas": "^2.5.0" @@ -26805,30 +26696,71 @@ } } }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", + "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/jsdom/node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom/node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/jsesc": { @@ -27432,48 +27364,6 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/lint-staged/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -27487,53 +27377,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lint-staged/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, "node_modules/lint-staged/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -27581,19 +27424,6 @@ "node": ">=16.17.0" } }, - "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lint-staged/node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", @@ -27607,77 +27437,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/listr2": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", - "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/lint-staged/node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/lint-staged/node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -27736,70 +27495,91 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "node_modules/lint-staged/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" + "license": "ISC", + "engines": { + "node": ">=14" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/lint-staged/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/lint-staged/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lint-staged/node_modules/string-width": { + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", @@ -27817,7 +27597,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/strip-ansi": { + "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", @@ -27833,20 +27613,7 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/wrap-ansi": { + "node_modules/listr2/node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", @@ -27864,50 +27631,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -28267,85 +27990,220 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "environment": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/log4js": { @@ -28512,6 +28370,16 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -28576,6 +28444,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -30318,6 +30201,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/npm-registry-fetch/node_modules/cacache": { "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", @@ -30383,6 +30276,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/npm-registry-fetch/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -30699,19 +30607,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -31064,19 +30959,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -33227,9 +33109,9 @@ } }, "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -34295,20 +34177,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/rxjs-report-usage/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -34433,13 +34301,6 @@ } } }, - "node_modules/sass/node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, - "license": "MIT" - }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", @@ -34448,16 +34309,16 @@ "license": "ISC" }, "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, "engines": { - "node": ">=v12.22.7" + "node": ">=10" } }, "node_modules/scheduler": { @@ -34577,25 +34438,25 @@ "license": "ISC" }, "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -34611,20 +34472,10 @@ "ms": "2.0.0" } }, - "node_modules/send/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, @@ -34638,76 +34489,6 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, - "node_modules/send/node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/send/node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -34805,31 +34586,21 @@ } }, "node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", @@ -35039,6 +34810,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/sigstore/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/sigstore/node_modules/cacache": { "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", @@ -35084,6 +34865,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sigstore/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/sigstore/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -35232,31 +35028,30 @@ } }, "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -35532,20 +35327,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sort-package-json/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/sort-package-json/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -36222,6 +36003,16 @@ "dev": true, "license": "MIT" }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -36229,6 +36020,16 @@ "dev": true, "license": "MIT" }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -36959,19 +36760,16 @@ } }, "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/supports-hyperlinks": { @@ -36992,20 +36790,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -37153,6 +36937,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -37353,6 +37148,22 @@ "node": ">= 10.13.0" } }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/terser-webpack-plugin/node_modules/terser": { "version": "5.37.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", @@ -37540,22 +37351,22 @@ } }, "node_modules/tldts": { - "version": "6.1.69", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.69.tgz", - "integrity": "sha512-Oh/CqRQ1NXNY7cy9NkTPUauOWiTro0jEYZTioGbOmcQh6EC45oribyIMJp0OJO3677r13tO6SKdWoGZUx2BDFw==", + "version": "6.1.70", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", + "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^6.1.69" + "tldts-core": "^6.1.70" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.69", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.69.tgz", - "integrity": "sha512-nygxy9n2PBUFQUtAXAc122gGo+04/j5qr5TGQFZTHafTKYvmARVXt2cA5rgero2/dnXUfkdPtiJoKmrd3T+wdA==", + "version": "6.1.70", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", + "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", "dev": true, "license": "MIT" }, @@ -37600,29 +37411,42 @@ } }, "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "tldts": "^6.1.32" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=16" + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" } }, "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.3.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=14" + "node": ">=8" } }, "node_modules/tree-dump": { @@ -37791,19 +37615,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-mockito": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", @@ -37869,6 +37680,19 @@ } } }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", @@ -37932,19 +37756,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -38031,6 +37842,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/tuf-js/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/tuf-js/node_modules/cacache": { "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", @@ -38076,6 +37897,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/tuf-js/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/tuf-js/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -38928,16 +38764,16 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/walker": { @@ -38985,13 +38821,13 @@ } }, "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=10.4" } }, "node_modules/webpack": { @@ -39130,14 +38966,29 @@ } } }, - "node_modules/webpack-dev-server/node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, "engines": { - "node": ">=0.8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { @@ -39150,6 +39001,19 @@ "node": ">= 10" } }, + "node_modules/webpack-dev-server/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", @@ -39359,27 +39223,25 @@ } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } + "license": "MIT" }, "node_modules/whatwg-url": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", - "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" } }, "node_modules/which": { @@ -39662,14 +39524,11 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } + "license": "Apache-2.0" }, "node_modules/xmlchars": { "version": "2.2.0", @@ -39828,8 +39687,8 @@ "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "tslib": ">=2.8.1" } @@ -39846,10 +39705,10 @@ "@maskito/core": "^3.2.0", "@maskito/kit": "^3.2.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/i18n": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/i18n": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -39869,11 +39728,11 @@ "@angular/forms": ">=16.0.0", "@angular/router": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/addon-mobile": "^4.18.0", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", - "@taiga-ui/legacy": "^4.18.0", + "@taiga-ui/addon-mobile": "^4.19.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", + "@taiga-ui/legacy": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "markdown-it": ">=14.1.0", "ngx-highlightjs": ">=10.0.0", @@ -39889,9 +39748,9 @@ "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -39905,10 +39764,10 @@ "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", "@ng-web-apis/intersection-observer": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/i18n": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/i18n": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -39963,9 +39822,9 @@ "@angular/router": ">=16.0.0", "@ng-web-apis/common": "^4.11.1", "@ng-web-apis/mutation-observer": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", "@taiga-ui/event-plugins": "^4.3.1", - "@taiga-ui/i18n": "^4.18.0", + "@taiga-ui/i18n": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -40015,6 +39874,8 @@ }, "projects/demo/node_modules/@types/express": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -40031,10 +39892,10 @@ "peerDependencies": { "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", - "@taiga-ui/addon-commerce": "^4.18.0", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/addon-commerce": "^4.19.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -40092,9 +39953,9 @@ "@ng-web-apis/intersection-observer": "^4.11.1", "@ng-web-apis/mutation-observer": "^4.11.1", "@ng-web-apis/resize-observer": "^4.11.1", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/i18n": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/i18n": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -40107,9 +39968,9 @@ "peerDependencies": { "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0", - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", - "@taiga-ui/kit": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", + "@taiga-ui/kit": "^4.19.0", "@taiga-ui/polymorpheus": "^4.7.4", "rxjs": ">=7.0.0", "tslib": ">=2.8.1" @@ -40128,8 +39989,8 @@ "name": "@taiga-ui/styles", "version": "4.19.0", "peerDependencies": { - "@taiga-ui/cdk": "^4.18.0", - "@taiga-ui/core": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", + "@taiga-ui/core": "^4.19.0", "tslib": ">=2.8.1" } }, @@ -40141,7 +40002,7 @@ "@taiga-ui/cdk": "^4.19.0" }, "peerDependencies": { - "@taiga-ui/cdk": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", "tslib": ">=2.8.1" } }, @@ -40155,7 +40016,7 @@ "ts-jest": "29.2.5" }, "peerDependencies": { - "@taiga-ui/cdk": "^4.18.0", + "@taiga-ui/cdk": "^4.19.0", "tslib": ">=2.8.1" } } diff --git a/package.json b/package.json index a0d4fab34e805..973e97b630f05 100644 --- a/package.json +++ b/package.json @@ -158,16 +158,16 @@ "@nx/jest": "20.1.4", "@nx/workspace": "20.1.4", "@schematics/angular": "16.2.16", - "@taiga-ui/browserslist-config": "0.238.0", - "@taiga-ui/commitlint-config": "0.238.0", - "@taiga-ui/cspell-config": "0.238.0", + "@taiga-ui/browserslist-config": "0.239.0", + "@taiga-ui/commitlint-config": "0.239.0", + "@taiga-ui/cspell-config": "0.239.0", "@taiga-ui/design-tokens": "0.159.0", - "@taiga-ui/eslint-plugin-experience": "0.238.0", + "@taiga-ui/eslint-plugin-experience": "0.239.0", "@taiga-ui/event-plugins": "4.3.1", - "@taiga-ui/jest-config": "0.238.0", - "@taiga-ui/prettier-config": "0.238.0", - "@taiga-ui/stylelint-config": "0.238.0", - "@taiga-ui/tsconfig": "0.238.0", + "@taiga-ui/jest-config": "0.239.0", + "@taiga-ui/prettier-config": "0.239.0", + "@taiga-ui/stylelint-config": "0.239.0", + "@taiga-ui/tsconfig": "0.239.0", "@types/glob": "8.1.0", "@types/loader-utils": "2.0.6", "@types/node": "22.10.2", From a3a5c1c0a75fb00a30bb54d49b28d5db19d7af0f Mon Sep 17 00:00:00 2001 From: shiv9604 Date: Thu, 26 Dec 2024 01:55:28 +0530 Subject: [PATCH 21/21] fix(core): resolve number with country code not processing correctly --- .../utils/complete-phone-insertion-preprocessor.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/legacy/components/input-phone/utils/complete-phone-insertion-preprocessor.ts b/projects/legacy/components/input-phone/utils/complete-phone-insertion-preprocessor.ts index b1bb17664262a..2c5e1f65ee52f 100644 --- a/projects/legacy/components/input-phone/utils/complete-phone-insertion-preprocessor.ts +++ b/projects/legacy/components/input-phone/utils/complete-phone-insertion-preprocessor.ts @@ -40,12 +40,13 @@ export function tuiCreateCompletePhoneInsertionPreprocessor( * and mask are ready to reject "extra" characters. * We should cut leading country prefix to save trailing characters! */ - countDigits(value) > completePhoneLength + countDigits(value) > completePhoneLength || + value.startsWith(countryCode) ? trimCountryPrefix(value) : value, }, data: - countDigits(data) >= completePhoneLength + countDigits(data) >= completePhoneLength || value.startsWith(countryCode) ? /** * User tries to insert/drop the complete phone number (with country prefix). * We should drop already existing non-removable prefix.