@taiga-ui/kit 4.52.0-canary.eb5ffe3 → 4.52.0-canary.ece97e9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/components/input-number/input-number.directive.d.ts +5 -9
  2. package/components/input-time/input-time.directive.d.ts +5 -8
  3. package/components/pagination/index.d.ts +1 -0
  4. package/components/pagination/pagination.component.d.ts +2 -1
  5. package/components/pagination/pagination.options.d.ts +10 -0
  6. package/components/progress/progress-bar/progress-color-segments.directive.d.ts +4 -4
  7. package/components/range/range-change.directive.d.ts +1 -2
  8. package/components/range/range.component.d.ts +16 -19
  9. package/components/select/native-select/native-select.component.d.ts +4 -5
  10. package/directives/button-close/button-close.directive.d.ts +2 -1
  11. package/directives/fluid-typography/fluid-typography.directive.d.ts +3 -6
  12. package/fesm2022/taiga-ui-kit-components-button-loading.mjs +3 -3
  13. package/fesm2022/taiga-ui-kit-components-button-loading.mjs.map +1 -1
  14. package/fesm2022/taiga-ui-kit-components-calendar-month.mjs +2 -4
  15. package/fesm2022/taiga-ui-kit-components-calendar-month.mjs.map +1 -1
  16. package/fesm2022/taiga-ui-kit-components-data-list-wrapper.mjs +2 -2
  17. package/fesm2022/taiga-ui-kit-components-data-list-wrapper.mjs.map +1 -1
  18. package/fesm2022/taiga-ui-kit-components-files.mjs +1 -1
  19. package/fesm2022/taiga-ui-kit-components-files.mjs.map +1 -1
  20. package/fesm2022/taiga-ui-kit-components-input-date.mjs +1 -1
  21. package/fesm2022/taiga-ui-kit-components-input-date.mjs.map +1 -1
  22. package/fesm2022/taiga-ui-kit-components-input-inline.mjs +2 -3
  23. package/fesm2022/taiga-ui-kit-components-input-inline.mjs.map +1 -1
  24. package/fesm2022/taiga-ui-kit-components-input-number.mjs +13 -33
  25. package/fesm2022/taiga-ui-kit-components-input-number.mjs.map +1 -1
  26. package/fesm2022/taiga-ui-kit-components-input-phone-international.mjs +2 -2
  27. package/fesm2022/taiga-ui-kit-components-input-phone-international.mjs.map +1 -1
  28. package/fesm2022/taiga-ui-kit-components-input-phone.mjs +1 -1
  29. package/fesm2022/taiga-ui-kit-components-input-phone.mjs.map +1 -1
  30. package/fesm2022/taiga-ui-kit-components-input-range.mjs +1 -1
  31. package/fesm2022/taiga-ui-kit-components-input-range.mjs.map +1 -1
  32. package/fesm2022/taiga-ui-kit-components-input-time.mjs +13 -34
  33. package/fesm2022/taiga-ui-kit-components-input-time.mjs.map +1 -1
  34. package/fesm2022/taiga-ui-kit-components-multi-select.mjs +4 -4
  35. package/fesm2022/taiga-ui-kit-components-multi-select.mjs.map +1 -1
  36. package/fesm2022/taiga-ui-kit-components-notification-middle.mjs +1 -1
  37. package/fesm2022/taiga-ui-kit-components-notification-middle.mjs.map +1 -1
  38. package/fesm2022/taiga-ui-kit-components-pagination.mjs +19 -8
  39. package/fesm2022/taiga-ui-kit-components-pagination.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-kit-components-progress.mjs +35 -22
  41. package/fesm2022/taiga-ui-kit-components-progress.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-kit-components-range.mjs +34 -66
  43. package/fesm2022/taiga-ui-kit-components-range.mjs.map +1 -1
  44. package/fesm2022/taiga-ui-kit-components-select.mjs +8 -19
  45. package/fesm2022/taiga-ui-kit-components-select.mjs.map +1 -1
  46. package/fesm2022/taiga-ui-kit-components-tree.mjs +2 -3
  47. package/fesm2022/taiga-ui-kit-components-tree.mjs.map +1 -1
  48. package/fesm2022/taiga-ui-kit-directives-button-close.mjs +13 -4
  49. package/fesm2022/taiga-ui-kit-directives-button-close.mjs.map +1 -1
  50. package/fesm2022/taiga-ui-kit-directives-fluid-typography.mjs +10 -17
  51. package/fesm2022/taiga-ui-kit-directives-fluid-typography.mjs.map +1 -1
  52. package/package.json +18 -18
@@ -7,8 +7,6 @@ export declare class TuiInputNumberDirective extends TuiControl<number | null> {
7
7
  private readonly options;
8
8
  private readonly textfield;
9
9
  private readonly isIOS;
10
- private readonly minRaw;
11
- private readonly maxRaw;
12
10
  private readonly numberFormat;
13
11
  private readonly formatted;
14
12
  private readonly precision;
@@ -21,12 +19,10 @@ export declare class TuiInputNumberDirective extends TuiControl<number | null> {
21
19
  protected maskInitialCalibrationEffect: import("@angular/core").EffectRef;
22
20
  readonly min: import("@angular/core").Signal<number>;
23
21
  readonly max: import("@angular/core").Signal<number>;
24
- readonly prefix: import("@angular/core").WritableSignal<string>;
25
- readonly postfix: import("@angular/core").WritableSignal<string>;
26
- set minSetter(x: number | null);
27
- set maxSetter(x: number | null);
28
- set prefixSetter(x: string);
29
- set postfixSetter(x: string);
22
+ readonly prefix: import("@angular/core").InputSignal<string>;
23
+ readonly postfix: import("@angular/core").InputSignal<string>;
24
+ readonly minRaw: import("@angular/core").InputSignalWithTransform<number, number | null>;
25
+ readonly maxRaw: import("@angular/core").InputSignalWithTransform<number, number | null>;
30
26
  writeValue(value: number | null): void;
31
27
  setValue(value: number | null): void;
32
28
  protected onFocus(): void;
@@ -34,5 +30,5 @@ export declare class TuiInputNumberDirective extends TuiControl<number | null> {
34
30
  private formatNumber;
35
31
  private computeMask;
36
32
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiInputNumberDirective, never>;
37
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiInputNumberDirective, "input[tuiInputNumber]", never, { "minSetter": { "alias": "min"; "required": false; }; "maxSetter": { "alias": "max"; "required": false; }; "prefixSetter": { "alias": "prefix"; "required": false; }; "postfixSetter": { "alias": "postfix"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.TuiWithTextfield; inputs: {}; outputs: {}; }, { directive: typeof i2.MaskitoDirective; inputs: {}; outputs: {}; }]>;
33
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiInputNumberDirective, "input[tuiInputNumber]", never, { "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "postfix": { "alias": "postfix"; "required": false; "isSignal": true; }; "minRaw": { "alias": "min"; "required": false; "isSignal": true; }; "maxRaw": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TuiWithTextfield; inputs: {}; outputs: {}; }, { directive: typeof i2.MaskitoDirective; inputs: {}; outputs: {}; }]>;
38
34
  }
@@ -12,18 +12,15 @@ export declare class TuiInputTimeDirective extends TuiControl<TuiTime | null> im
12
12
  private readonly open;
13
13
  private readonly options;
14
14
  private readonly fillers;
15
- private readonly prefix;
16
- private readonly postfix;
17
15
  protected readonly icon: import("@angular/core").Signal<string>;
18
16
  protected readonly dropdownEnabled: import("@angular/core").Signal<boolean>;
19
17
  protected readonly filler: import("@angular/core").Signal<string>;
20
18
  protected readonly mask: import("@angular/core").Signal<MaskitoOptions | null>;
21
- accept: readonly TuiTime[];
19
+ readonly accept: import("@angular/core").InputSignal<readonly TuiTime[]>;
22
20
  readonly native: boolean;
23
- readonly timeMode: import("@angular/core").WritableSignal<MaskitoTimeMode>;
24
- set modeSetter(x: MaskitoTimeMode);
25
- set prefixSetter(x: string);
26
- set postfixSetter(x: string);
21
+ readonly timeMode: import("@angular/core").InputSignal<MaskitoTimeMode>;
22
+ readonly prefix: import("@angular/core").InputSignal<string>;
23
+ readonly postfix: import("@angular/core").InputSignal<string>;
27
24
  setValue(value: TuiTime | null): void;
28
25
  writeValue(value: TuiTime | null): void;
29
26
  protected onInput(valueWithAffixes: string): void;
@@ -33,5 +30,5 @@ export declare class TuiInputTimeDirective extends TuiControl<TuiTime | null> im
33
30
  private findNearestTime;
34
31
  private stringify;
35
32
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiInputTimeDirective, never>;
36
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiInputTimeDirective, "input[tuiInputTime]", never, { "accept": { "alias": "accept"; "required": false; }; "modeSetter": { "alias": "mode"; "required": false; }; "prefixSetter": { "alias": "prefix"; "required": false; }; "postfixSetter": { "alias": "postfix"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.TuiWithTextfield; inputs: {}; outputs: {}; }, { directive: typeof i2.MaskitoDirective; inputs: {}; outputs: {}; }]>;
33
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiInputTimeDirective, "input[tuiInputTime]", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "timeMode": { "alias": "mode"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "postfix": { "alias": "postfix"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TuiWithTextfield; inputs: {}; outputs: {}; }, { directive: typeof i2.MaskitoDirective; inputs: {}; outputs: {}; }]>;
37
34
  }
@@ -1 +1,2 @@
1
1
  export * from './pagination.component';
2
+ export * from './pagination.options';
@@ -8,6 +8,7 @@ export declare class TuiPagination {
8
8
  private readonly el;
9
9
  protected readonly texts: import("@angular/core").Signal<readonly [previous_page: string, next_page: string]>;
10
10
  protected readonly icons: import("@taiga-ui/core/tokens").TuiSpinIcons;
11
+ protected readonly options: import("./pagination.options").TuiPaginationOptions;
11
12
  length: number;
12
13
  focusable: boolean;
13
14
  size: TuiSizeL | TuiSizeS;
@@ -45,7 +46,7 @@ export declare class TuiPagination {
45
46
  * @returns index or null (for '…')
46
47
  */
47
48
  protected getItemIndexByElementIndex(elementIndex: number): number | null;
48
- protected getElementMode(index: number): string;
49
+ protected getElementMode(index?: number): string;
49
50
  protected onElementClick(index: number): void;
50
51
  protected onElementKeyDownArrowLeft(element: HTMLElement): void;
51
52
  protected onElementKeyDownArrowRight(element: HTMLElement): void;
@@ -0,0 +1,10 @@
1
+ import { type TuiStringHandler } from '@taiga-ui/cdk/types';
2
+ import { type TuiSizeL, type TuiSizeS } from '@taiga-ui/core/types';
3
+ export interface TuiPaginationOptions {
4
+ readonly appearance: TuiStringHandler<{
5
+ isActive: boolean;
6
+ size: TuiSizeL | TuiSizeS;
7
+ }>;
8
+ readonly defaultSize: TuiSizeL | TuiSizeS;
9
+ }
10
+ export declare const TUI_PAGINATION_OPTIONS: import("@angular/core").InjectionToken<TuiPaginationOptions>, tuiPaginationOptionsProvider: (item: Partial<TuiPaginationOptions> | (() => Partial<TuiPaginationOptions>)) => import("@angular/core").FactoryProvider;
@@ -1,9 +1,9 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class TuiProgressColorSegments {
3
- private readonly colors$;
4
3
  private readonly el;
5
- protected readonly color: import("@angular/core").Signal<string | undefined>;
6
- set colors(colors: string[]);
4
+ private readonly position;
5
+ protected readonly color: import("@angular/core").Signal<string | null>;
6
+ readonly colors: import("@angular/core").InputSignal<readonly string[]>;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiProgressColorSegments, never>;
8
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiProgressColorSegments, "progress[tuiProgressBar][tuiProgressColorSegments]", never, { "colors": { "alias": "tuiProgressColorSegments"; "required": false; }; }, {}, never, never, true, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiProgressColorSegments, "progress[tuiProgressBar][tuiProgressColorSegments]", never, { "colors": { "alias": "tuiProgressColorSegments"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9
9
  }
@@ -1,10 +1,9 @@
1
- import { EventEmitter } from '@angular/core';
2
1
  import * as i0 from "@angular/core";
3
2
  export declare class TuiRangeChange {
4
3
  private readonly doc;
5
4
  private readonly el;
6
5
  private readonly range;
7
- readonly activeThumbChange: EventEmitter<"end" | "start">;
6
+ readonly activeThumbChange: import("@angular/core").OutputEmitterRef<"end" | "start">;
8
7
  constructor();
9
8
  private getFractionFromEvents;
10
9
  private detectActiveThumb;
@@ -1,33 +1,30 @@
1
- import { ElementRef, type OnChanges, type QueryList } from '@angular/core';
1
+ import { ElementRef } from '@angular/core';
2
2
  import { TuiControl } from '@taiga-ui/cdk/classes';
3
3
  import { type TuiSizeS } from '@taiga-ui/core/types';
4
- import { type TuiKeySteps } from '@taiga-ui/kit/components/slider';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "./range-change.directive";
7
- export declare class TuiRange extends TuiControl<[number, number]> implements OnChanges {
8
- private readonly changes;
6
+ export declare class TuiRange extends TuiControl<[number, number]> {
9
7
  private readonly el;
10
8
  protected readonly options: import("@taiga-ui/kit/components/slider").TuiSliderOptions;
11
9
  protected lastActiveThumb: 'end' | 'start';
12
- min: number;
13
- max: number;
14
- step: number;
15
- size: TuiSizeS;
16
- segments: number;
17
- keySteps: TuiKeySteps | null;
18
- focusable: boolean;
19
- margin: number;
20
- limit: number;
21
- readonly slidersRefs: QueryList<ElementRef<HTMLInputElement>>;
10
+ readonly min: import("@angular/core").InputSignal<number>;
11
+ readonly max: import("@angular/core").InputSignal<number>;
12
+ readonly step: import("@angular/core").InputSignal<number>;
13
+ readonly size: import("@angular/core").InputSignal<TuiSizeS>;
14
+ readonly segments: import("@angular/core").InputSignal<number>;
15
+ readonly keySteps: import("@angular/core").InputSignal<[[0, number], ...[number, number][], [100, number]] | null>;
16
+ readonly focusable: import("@angular/core").InputSignal<boolean>;
17
+ readonly margin: import("@angular/core").InputSignal<number>;
18
+ readonly limit: import("@angular/core").InputSignal<number>;
19
+ readonly slidersRefs: import("@angular/core").Signal<readonly ElementRef<HTMLInputElement>[]>;
22
20
  readonly start: import("@angular/core").Signal<number>;
23
21
  readonly end: import("@angular/core").Signal<number>;
24
- ngOnChanges(): void;
22
+ protected readonly fractionStep: import("@angular/core").Signal<number>;
23
+ protected readonly computedKeySteps: import("@angular/core").Signal<[[0, number], ...[number, number][], [100, number]]>;
24
+ protected readonly segmentWidthRatio: import("@angular/core").Signal<number>;
25
25
  processValue(value: number, end: boolean): void;
26
26
  takeStep(coefficients: readonly [number, number]): readonly [number, number];
27
27
  toValue(fraction: number): number;
28
- protected get fractionStep(): number;
29
- protected get computedKeySteps(): TuiKeySteps;
30
- protected get segmentWidthRatio(): number;
31
28
  protected get rtl(): boolean;
32
29
  protected changeByStep(coefficient: number, target: HTMLElement): void;
33
30
  protected toPercent(value: number): number;
@@ -36,5 +33,5 @@ export declare class TuiRange extends TuiControl<[number, number]> implements On
36
33
  private updateEnd;
37
34
  private checkDistance;
38
35
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiRange, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<TuiRange, "tui-range", never, { "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "size": { "alias": "size"; "required": false; }; "segments": { "alias": "segments"; "required": false; }; "keySteps": { "alias": "keySteps"; "required": false; }; "focusable": { "alias": "focusable"; "required": false; }; "margin": { "alias": "margin"; "required": false; }; "limit": { "alias": "limit"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.TuiRangeChange; inputs: {}; outputs: { "activeThumbChange": "activeThumbChange"; }; }]>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiRange, "tui-range", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "keySteps": { "alias": "keySteps"; "required": false; "isSignal": true; }; "focusable": { "alias": "focusable"; "required": false; "isSignal": true; }; "margin": { "alias": "margin"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TuiRangeChange; inputs: {}; outputs: { "activeThumbChange": "activeThumbChange"; }; }]>;
40
37
  }
@@ -7,17 +7,16 @@ import * as i1 from "@taiga-ui/core/components/textfield";
7
7
  export declare class TuiNativeSelect<T> extends TuiControl<T | null> implements TuiTextfieldAccessor<T> {
8
8
  private readonly textfield;
9
9
  protected readonly isFlat: typeof tuiIsFlat;
10
- protected readonly placeholder: import("@angular/core").WritableSignal<string>;
11
10
  protected readonly itemsHandlers: TuiItemsHandlers<T>;
12
11
  protected readonly stringified: import("@angular/core").Signal<string>;
13
12
  protected readonly showPlaceholder: import("@angular/core").Signal<boolean | "">;
14
13
  protected readonly isSelected: import("@angular/core").Signal<(x: T) => boolean>;
15
14
  protected readonly valueEffect: import("@angular/core").EffectRef;
16
- items: ReadonlyArray<readonly T[]> | readonly T[] | null;
17
- labels: readonly string[];
18
- set placeholderSetter(x: string);
15
+ readonly items: import("@angular/core").InputSignal<readonly T[] | readonly (readonly T[])[] | null>;
16
+ readonly labels: import("@angular/core").InputSignal<readonly string[]>;
17
+ readonly placeholder: import("@angular/core").InputSignal<string>;
19
18
  setValue(value: T | null): void;
20
19
  protected selectOption(index: number): void;
21
20
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiNativeSelect<any>, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<TuiNativeSelect<any>, "select[tuiSelect]", never, { "items": { "alias": "items"; "required": false; }; "labels": { "alias": "labels"; "required": false; }; "placeholderSetter": { "alias": "placeholder"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.TuiWithTextfield; inputs: {}; outputs: {}; }]>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiNativeSelect<any>, "select[tuiSelect]", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TuiWithTextfield; inputs: {}; outputs: {}; }]>;
23
22
  }
@@ -1,5 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
+ import * as i1 from "@taiga-ui/core/components/button";
2
3
  export declare class TuiButtonClose {
3
4
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiButtonClose, never>;
4
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiButtonClose, "[tuiIconButton][tuiButtonClose]", never, {}, {}, never, never, true, never>;
5
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiButtonClose, "[tuiButtonClose]", never, {}, {}, never, never, true, [{ directive: typeof i1.TuiButton; inputs: { "size": "size"; }; outputs: {}; }]>;
5
6
  }
@@ -1,12 +1,9 @@
1
- import { type OnChanges } from '@angular/core';
2
1
  import * as i0 from "@angular/core";
3
- export declare class TuiFluidTypography implements OnChanges {
4
- private readonly changes$;
2
+ export declare class TuiFluidTypography {
5
3
  private readonly el;
6
4
  private readonly options;
5
+ readonly tuiFluidTypography: import("@angular/core").InputSignal<"" | readonly [min: number, max: number]>;
7
6
  protected readonly sub: import("rxjs").Subscription;
8
- tuiFluidTypography: readonly [min: number, max: number] | '';
9
- ngOnChanges(): void;
10
7
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiFluidTypography, never>;
11
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiFluidTypography, "[tuiFluidTypography]", never, { "tuiFluidTypography": { "alias": "tuiFluidTypography"; "required": false; }; }, {}, never, never, true, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiFluidTypography, "[tuiFluidTypography]", never, { "tuiFluidTypography": { "alias": "tuiFluidTypography"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
9
  }
@@ -31,11 +31,11 @@ class TuiButtonLoading {
31
31
  role="status"
32
32
  class="t-loader"
33
33
  [inheritColor]="true"
34
- [showLoader]="!!loading"
34
+ [loading]="!!loading"
35
35
  [size]="loaderSize"
36
36
  [textContent]="label"
37
37
  />
38
- `, isInline: true, dependencies: [{ kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38
+ `, isInline: true, dependencies: [{ kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
39
  }
40
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiButtonLoading, decorators: [{
41
41
  type: Component,
@@ -49,7 +49,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
49
49
  role="status"
50
50
  class="t-loader"
51
51
  [inheritColor]="true"
52
- [showLoader]="!!loading"
52
+ [loading]="!!loading"
53
53
  [size]="loaderSize"
54
54
  [textContent]="label"
55
55
  />
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-components-button-loading.mjs","sources":["../../../projects/kit/components/button-loading/button-loading.component.ts","../../../projects/kit/components/button-loading/taiga-ui-kit-components-button-loading.ts"],"sourcesContent":["import {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_BUTTON_OPTIONS} from '@taiga-ui/core/components/button';\nimport {TuiLoader} from '@taiga-ui/core/components/loader';\nimport {type TuiSizeS} from '@taiga-ui/core/types';\nimport {tuiSizeBigger} from '@taiga-ui/core/utils/miscellaneous';\n\n@Component({\n selector: '[tuiButton][loading],[tuiIconButton][loading]',\n imports: [TuiLoader],\n template: `\n <ng-content />\n <tui-loader\n aria-live=\"polite\"\n role=\"status\"\n class=\"t-loader\"\n [inheritColor]=\"true\"\n [showLoader]=\"!!loading\"\n [size]=\"loaderSize\"\n [textContent]=\"label\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'loading',\n '[class._loading]': 'loading',\n '(click.capture)': 'onClick($event)',\n },\n})\nexport class TuiButtonLoading {\n private readonly options = inject(TUI_BUTTON_OPTIONS);\n\n @Input()\n public size = this.options.size;\n\n @Input()\n public loading: boolean | string | null = false;\n\n protected get loaderSize(): TuiSizeS {\n return tuiSizeBigger(this.size) ? 'm' : 's';\n }\n\n protected get label(): string {\n return tuiIsString(this.loading) ? this.loading : '';\n }\n\n protected onClick(event: MouseEvent): void {\n if (this.loading) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MA6Ba,gBAAgB,CAAA;AAtB7B,IAAA,WAAA,GAAA;AAuBqB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAG9C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;QAGxB,IAAO,CAAA,OAAA,GAA4B,KAAK;AAgBlD;AAdG,IAAA,IAAc,UAAU,GAAA;AACpB,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG;;AAG/C,IAAA,IAAc,KAAK,GAAA;AACf,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE;;AAG9C,IAAA,OAAO,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;;;+GApBtB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAnBf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAZS,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAoBV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+CAA+C;oBACzD,OAAO,EAAE,CAAC,SAAS,CAAC;AACpB,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACF,wBAAA,sBAAsB,EAAE,SAAS;AACjC,wBAAA,kBAAkB,EAAE,SAAS;AAC7B,wBAAA,iBAAiB,EAAE,iBAAiB;AACvC,qBAAA;AACJ,iBAAA;8BAKU,IAAI,EAAA,CAAA;sBADV;gBAIM,OAAO,EAAA,CAAA;sBADb;;;ACnCL;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-kit-components-button-loading.mjs","sources":["../../../projects/kit/components/button-loading/button-loading.component.ts","../../../projects/kit/components/button-loading/taiga-ui-kit-components-button-loading.ts"],"sourcesContent":["import {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_BUTTON_OPTIONS} from '@taiga-ui/core/components/button';\nimport {TuiLoader} from '@taiga-ui/core/components/loader';\nimport {type TuiSizeS} from '@taiga-ui/core/types';\nimport {tuiSizeBigger} from '@taiga-ui/core/utils/miscellaneous';\n\n@Component({\n selector: '[tuiButton][loading],[tuiIconButton][loading]',\n imports: [TuiLoader],\n template: `\n <ng-content />\n <tui-loader\n aria-live=\"polite\"\n role=\"status\"\n class=\"t-loader\"\n [inheritColor]=\"true\"\n [loading]=\"!!loading\"\n [size]=\"loaderSize\"\n [textContent]=\"label\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.aria-disabled]': 'loading',\n '[class._loading]': 'loading',\n '(click.capture)': 'onClick($event)',\n },\n})\nexport class TuiButtonLoading {\n private readonly options = inject(TUI_BUTTON_OPTIONS);\n\n @Input()\n public size = this.options.size;\n\n @Input()\n public loading: boolean | string | null = false;\n\n protected get loaderSize(): TuiSizeS {\n return tuiSizeBigger(this.size) ? 'm' : 's';\n }\n\n protected get label(): string {\n return tuiIsString(this.loading) ? this.loading : '';\n }\n\n protected onClick(event: MouseEvent): void {\n if (this.loading) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MA6Ba,gBAAgB,CAAA;AAtB7B,IAAA,WAAA,GAAA;AAuBqB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAG9C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;QAGxB,IAAO,CAAA,OAAA,GAA4B,KAAK;AAgBlD;AAdG,IAAA,IAAc,UAAU,GAAA;AACpB,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG;;AAG/C,IAAA,IAAc,KAAK,GAAA;AACf,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE;;AAG9C,IAAA,OAAO,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;;;+GApBtB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAnBf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAZS,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAoBV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+CAA+C;oBACzD,OAAO,EAAE,CAAC,SAAS,CAAC;AACpB,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACF,wBAAA,sBAAsB,EAAE,SAAS;AACjC,wBAAA,kBAAkB,EAAE,SAAS;AAC7B,wBAAA,iBAAiB,EAAE,iBAAiB;AACvC,qBAAA;AACJ,iBAAA;8BAKU,IAAI,EAAA,CAAA;sBADV;gBAIM,OAAO,EAAA,CAAA;sBADb;;;ACnCL;;AAEG;;;;"}
@@ -4,7 +4,6 @@ import { inject, computed, EventEmitter, signal, Input, Output, ChangeDetectionS
4
4
  import { TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
5
5
  import { TuiDay, TuiMonthRange, TuiMonth, TUI_FIRST_DAY, TUI_LAST_DAY, TuiYear } from '@taiga-ui/cdk/date-time';
6
6
  import { TuiHovered } from '@taiga-ui/cdk/directives/hovered';
7
- import { TuiLet } from '@taiga-ui/cdk/directives/let';
8
7
  import { TuiRepeatTimes } from '@taiga-ui/cdk/directives/repeat-times';
9
8
  import { tuiNullableSame, tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
10
9
  import { TuiCalendarYear } from '@taiga-ui/core/components/calendar';
@@ -143,7 +142,7 @@ class TuiCalendarMonth {
143
142
  this.yearChange.emit(year);
144
143
  }
145
144
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiCalendarMonth, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
146
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiCalendarMonth, isStandalone: true, selector: "tui-calendar-month", inputs: { year: "year", disabledItemHandler: "disabledItemHandler", minLength: "minLength", maxLength: "maxLength", minSetter: ["min", "minSetter", (x) => x ?? TUI_FIRST_DAY], maxSetter: ["max", "maxSetter", (x) => x ?? TUI_LAST_DAY], valueSetter: ["value", "valueSetter"] }, outputs: { monthClick: "monthClick", hoveredItemChange: "hoveredItemChange", yearChange: "yearChange" }, host: { properties: { "class._picking": "isRangePicking()" } }, providers: [tuiAsAuxiliary(TuiCalendarMonth)], ngImport: i0, template: "@if (isYearPickerShown) {\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-calendar-year\n [initialItem]=\"year.year\"\n [max]=\"max().year\"\n [min]=\"min().year\"\n [rangeMode]=\"options.rangeMode\"\n [value]=\"value()\"\n (yearClick)=\"onPickerYearClick($event)\"\n />\n </tui-scrollbar>\n} @else {\n <tui-spin-button\n class=\"t-spin\"\n [focusable]=\"false\"\n [leftDisabled]=\"year.yearSameOrBefore(min())\"\n [rightDisabled]=\"year.yearSameOrAfter(max())\"\n (leftClick)=\"onPreviousYear()\"\n (rightClick)=\"onNextYear()\"\n >\n <button\n automation-id=\"tui-calendar-month__active-year\"\n tabIndex=\"-1\"\n tuiLink\n type=\"button\"\n (click)=\"onYearClick()\"\n >\n {{ year.formattedYear }}\n </button>\n </tui-spin-button>\n <div\n *tuiRepeatTimes=\"let row of 3\"\n class=\"t-row\"\n >\n <ng-container *tuiRepeatTimes=\"let column of 4\">\n <div\n *tuiLet=\"getTuiMonth(row * 4 + column, year.year) as item\"\n class=\"t-cell\"\n [attr.data-range]=\"getItemRange(item)\"\n [class.t-cell_disabled]=\"disabledItemHandlerWithMinMax(item)\"\n [class.t-cell_today]=\"isItemToday(item)\"\n (click)=\"onItemClick(item)\"\n (tuiHoveredChange)=\"onItemHovered($event, item)\"\n >\n {{ months()[row * 4 + column] }}\n </div>\n </ng-container>\n </div>\n}\n", styles: [".t-row{display:flex;justify-content:flex-start;font:var(--tui-font-text-m)}.t-row:first-child{justify-content:flex-end}.t-row:last-child{justify-content:flex-start}.t-cell{position:relative;display:flex;align-items:center;justify-content:center;line-height:2rem;isolation:isolate;cursor:pointer;overflow:hidden;border:.125rem solid transparent;box-sizing:border-box;mask:linear-gradient(transparent calc(50% - 1rem),#000 calc(50% - 1rem),#000 calc(50% + 1rem),transparent calc(50% + 1rem))}.t-cell:first-child{border-inline-start-color:transparent!important}.t-cell:last-child{border-inline-end-color:transparent!important}.t-cell:before,.t-cell:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";z-index:-1;border-radius:var(--tui-radius-m)}.t-cell:after{mask:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 32\"><path d=\"M0.2856 0L0.6763 0C2.9265 0 4.9876 1.259 6.0147 3.2611L10.2442 11.5048C11.5301 14.0113 11.5683 16.9754 10.3472 19.5141L5.9766 28.6007C4.9772 30.6786 2.8754 32 0.5696 32H0.285645V0Z\"></path></svg>') right / .75rem 100% no-repeat,linear-gradient(#000,#000) left / calc(100% - .7rem) 100% no-repeat}.t-cell[data-range]:before{background:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range]:before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]:not(:first-child):before{border-top-left-radius:0;border-bottom-left-radius:0}.t-cell[data-range=middle]:not(:last-child):before{border-top-right-radius:0;border-bottom-right-radius:0}.t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:not(:last-child):before{right:-1rem}.t-cell[data-range=start]:after{background:var(--tui-background-accent-1)}.t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=end]:not(:first-child):before{left:-1rem}.t-cell[data-range=end]:after{background:var(--tui-background-accent-1);transform:scaleX(-1)}.t-cell[data-range=active]{color:var(--tui-text-primary-on-accent-1)}.t-cell[data-range=active]:after{background:var(--tui-background-accent-1);mask:none}.t-cell_disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-cell_today{text-decoration:underline;text-underline-offset:.25rem}@media (hover: hover) and (pointer: fine){.t-cell:hover:not([data-range=start]):not([data-range=end]):before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:hover:after,.t-cell[data-range=end]:hover:after,.t-cell[data-range=active]:hover:after{background:var(--tui-background-accent-1-hover)}}:host{display:block;block-size:12rem;inline-size:16rem;padding:1.125rem;box-sizing:content-box}.t-spin{margin-block-end:1rem}.t-cell{inline-size:4rem;border-block-start-width:.75rem;border-block-end-width:.75rem}.t-scrollbar{block-size:inherit;inline-size:inherit}\n"], dependencies: [{ kind: "component", type: TuiCalendarYear, selector: "tui-calendar-year", inputs: ["rangeMode", "disabledItemHandler", "initialItem", "min", "max", "value"], outputs: ["yearClick"] }, { kind: "directive", type: TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: TuiRepeatTimes, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }, { kind: "component", type: TuiSpinButton, selector: "tui-spin-button", inputs: ["focusable", "disabled", "leftDisabled", "rightDisabled"], outputs: ["leftClick", "rightClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiCalendarMonth, isStandalone: true, selector: "tui-calendar-month", inputs: { year: "year", disabledItemHandler: "disabledItemHandler", minLength: "minLength", maxLength: "maxLength", minSetter: ["min", "minSetter", (x) => x ?? TUI_FIRST_DAY], maxSetter: ["max", "maxSetter", (x) => x ?? TUI_LAST_DAY], valueSetter: ["value", "valueSetter"] }, outputs: { monthClick: "monthClick", hoveredItemChange: "hoveredItemChange", yearChange: "yearChange" }, host: { properties: { "class._picking": "isRangePicking()" } }, providers: [tuiAsAuxiliary(TuiCalendarMonth)], ngImport: i0, template: "@if (isYearPickerShown) {\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-calendar-year\n [initialItem]=\"year.year\"\n [max]=\"max().year\"\n [min]=\"min().year\"\n [rangeMode]=\"options.rangeMode\"\n [value]=\"value()\"\n (yearClick)=\"onPickerYearClick($event)\"\n />\n </tui-scrollbar>\n} @else {\n <tui-spin-button\n class=\"t-spin\"\n [focusable]=\"false\"\n [leftDisabled]=\"year.yearSameOrBefore(min())\"\n [rightDisabled]=\"year.yearSameOrAfter(max())\"\n (leftClick)=\"onPreviousYear()\"\n (rightClick)=\"onNextYear()\"\n >\n <button\n automation-id=\"tui-calendar-month__active-year\"\n tabIndex=\"-1\"\n tuiLink\n type=\"button\"\n (click)=\"onYearClick()\"\n >\n {{ year.formattedYear }}\n </button>\n </tui-spin-button>\n <div\n *tuiRepeatTimes=\"let row of 3\"\n class=\"t-row\"\n >\n <ng-container *tuiRepeatTimes=\"let column of 4\">\n @let item = getTuiMonth(row * 4 + column, year.year);\n <div\n class=\"t-cell\"\n [attr.data-range]=\"getItemRange(item)\"\n [class.t-cell_disabled]=\"disabledItemHandlerWithMinMax(item)\"\n [class.t-cell_today]=\"isItemToday(item)\"\n (click)=\"onItemClick(item)\"\n (tuiHoveredChange)=\"onItemHovered($event, item)\"\n >\n {{ months()[row * 4 + column] }}\n </div>\n </ng-container>\n </div>\n}\n", styles: [".t-row{display:flex;justify-content:flex-start;font:var(--tui-font-text-m)}.t-row:first-child{justify-content:flex-end}.t-row:last-child{justify-content:flex-start}.t-cell{position:relative;display:flex;align-items:center;justify-content:center;line-height:2rem;isolation:isolate;cursor:pointer;overflow:hidden;border:.125rem solid transparent;box-sizing:border-box;mask:linear-gradient(transparent calc(50% - 1rem),#000 calc(50% - 1rem),#000 calc(50% + 1rem),transparent calc(50% + 1rem))}.t-cell:first-child{border-inline-start-color:transparent!important}.t-cell:last-child{border-inline-end-color:transparent!important}.t-cell:before,.t-cell:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";z-index:-1;border-radius:var(--tui-radius-m)}.t-cell:after{mask:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 32\"><path d=\"M0.2856 0L0.6763 0C2.9265 0 4.9876 1.259 6.0147 3.2611L10.2442 11.5048C11.5301 14.0113 11.5683 16.9754 10.3472 19.5141L5.9766 28.6007C4.9772 30.6786 2.8754 32 0.5696 32H0.285645V0Z\"></path></svg>') right / .75rem 100% no-repeat,linear-gradient(#000,#000) left / calc(100% - .7rem) 100% no-repeat}.t-cell[data-range]:before{background:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range]:before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]:not(:first-child):before{border-top-left-radius:0;border-bottom-left-radius:0}.t-cell[data-range=middle]:not(:last-child):before{border-top-right-radius:0;border-bottom-right-radius:0}.t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:not(:last-child):before{right:-1rem}.t-cell[data-range=start]:after{background:var(--tui-background-accent-1)}.t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=end]:not(:first-child):before{left:-1rem}.t-cell[data-range=end]:after{background:var(--tui-background-accent-1);transform:scaleX(-1)}.t-cell[data-range=active]{color:var(--tui-text-primary-on-accent-1)}.t-cell[data-range=active]:after{background:var(--tui-background-accent-1);mask:none}.t-cell_disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-cell_today{text-decoration:underline;text-underline-offset:.25rem}@media (hover: hover) and (pointer: fine){.t-cell:hover:not([data-range=start]):not([data-range=end]):before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:hover:after,.t-cell[data-range=end]:hover:after,.t-cell[data-range=active]:hover:after{background:var(--tui-background-accent-1-hover)}}:host{display:block;block-size:12rem;inline-size:16rem;padding:1.125rem;box-sizing:content-box}.t-spin{margin-block-end:1rem}.t-cell{inline-size:4rem;border-block-start-width:.75rem;border-block-end-width:.75rem}.t-scrollbar{block-size:inherit;inline-size:inherit}\n"], dependencies: [{ kind: "component", type: TuiCalendarYear, selector: "tui-calendar-year", inputs: ["rangeMode", "disabledItemHandler", "initialItem", "min", "max", "value"], outputs: ["yearClick"] }, { kind: "directive", type: TuiHovered, selector: "[tuiHoveredChange]", outputs: ["tuiHoveredChange"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: TuiRepeatTimes, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }, { kind: "component", type: TuiSpinButton, selector: "tui-spin-button", inputs: ["focusable", "disabled", "leftDisabled", "rightDisabled"], outputs: ["leftClick", "rightClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
147
146
  }
148
147
  __decorate([
149
148
  tuiPure
@@ -153,14 +152,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
153
152
  args: [{ selector: 'tui-calendar-month', imports: [
154
153
  TuiCalendarYear,
155
154
  TuiHovered,
156
- TuiLet,
157
155
  TuiLink,
158
156
  TuiRepeatTimes,
159
157
  TuiScrollbar,
160
158
  TuiSpinButton,
161
159
  ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiAsAuxiliary(TuiCalendarMonth)], host: {
162
160
  '[class._picking]': 'isRangePicking()',
163
- }, template: "@if (isYearPickerShown) {\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-calendar-year\n [initialItem]=\"year.year\"\n [max]=\"max().year\"\n [min]=\"min().year\"\n [rangeMode]=\"options.rangeMode\"\n [value]=\"value()\"\n (yearClick)=\"onPickerYearClick($event)\"\n />\n </tui-scrollbar>\n} @else {\n <tui-spin-button\n class=\"t-spin\"\n [focusable]=\"false\"\n [leftDisabled]=\"year.yearSameOrBefore(min())\"\n [rightDisabled]=\"year.yearSameOrAfter(max())\"\n (leftClick)=\"onPreviousYear()\"\n (rightClick)=\"onNextYear()\"\n >\n <button\n automation-id=\"tui-calendar-month__active-year\"\n tabIndex=\"-1\"\n tuiLink\n type=\"button\"\n (click)=\"onYearClick()\"\n >\n {{ year.formattedYear }}\n </button>\n </tui-spin-button>\n <div\n *tuiRepeatTimes=\"let row of 3\"\n class=\"t-row\"\n >\n <ng-container *tuiRepeatTimes=\"let column of 4\">\n <div\n *tuiLet=\"getTuiMonth(row * 4 + column, year.year) as item\"\n class=\"t-cell\"\n [attr.data-range]=\"getItemRange(item)\"\n [class.t-cell_disabled]=\"disabledItemHandlerWithMinMax(item)\"\n [class.t-cell_today]=\"isItemToday(item)\"\n (click)=\"onItemClick(item)\"\n (tuiHoveredChange)=\"onItemHovered($event, item)\"\n >\n {{ months()[row * 4 + column] }}\n </div>\n </ng-container>\n </div>\n}\n", styles: [".t-row{display:flex;justify-content:flex-start;font:var(--tui-font-text-m)}.t-row:first-child{justify-content:flex-end}.t-row:last-child{justify-content:flex-start}.t-cell{position:relative;display:flex;align-items:center;justify-content:center;line-height:2rem;isolation:isolate;cursor:pointer;overflow:hidden;border:.125rem solid transparent;box-sizing:border-box;mask:linear-gradient(transparent calc(50% - 1rem),#000 calc(50% - 1rem),#000 calc(50% + 1rem),transparent calc(50% + 1rem))}.t-cell:first-child{border-inline-start-color:transparent!important}.t-cell:last-child{border-inline-end-color:transparent!important}.t-cell:before,.t-cell:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";z-index:-1;border-radius:var(--tui-radius-m)}.t-cell:after{mask:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 32\"><path d=\"M0.2856 0L0.6763 0C2.9265 0 4.9876 1.259 6.0147 3.2611L10.2442 11.5048C11.5301 14.0113 11.5683 16.9754 10.3472 19.5141L5.9766 28.6007C4.9772 30.6786 2.8754 32 0.5696 32H0.285645V0Z\"></path></svg>') right / .75rem 100% no-repeat,linear-gradient(#000,#000) left / calc(100% - .7rem) 100% no-repeat}.t-cell[data-range]:before{background:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range]:before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]:not(:first-child):before{border-top-left-radius:0;border-bottom-left-radius:0}.t-cell[data-range=middle]:not(:last-child):before{border-top-right-radius:0;border-bottom-right-radius:0}.t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:not(:last-child):before{right:-1rem}.t-cell[data-range=start]:after{background:var(--tui-background-accent-1)}.t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=end]:not(:first-child):before{left:-1rem}.t-cell[data-range=end]:after{background:var(--tui-background-accent-1);transform:scaleX(-1)}.t-cell[data-range=active]{color:var(--tui-text-primary-on-accent-1)}.t-cell[data-range=active]:after{background:var(--tui-background-accent-1);mask:none}.t-cell_disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-cell_today{text-decoration:underline;text-underline-offset:.25rem}@media (hover: hover) and (pointer: fine){.t-cell:hover:not([data-range=start]):not([data-range=end]):before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:hover:after,.t-cell[data-range=end]:hover:after,.t-cell[data-range=active]:hover:after{background:var(--tui-background-accent-1-hover)}}:host{display:block;block-size:12rem;inline-size:16rem;padding:1.125rem;box-sizing:content-box}.t-spin{margin-block-end:1rem}.t-cell{inline-size:4rem;border-block-start-width:.75rem;border-block-end-width:.75rem}.t-scrollbar{block-size:inherit;inline-size:inherit}\n"] }]
161
+ }, template: "@if (isYearPickerShown) {\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-calendar-year\n [initialItem]=\"year.year\"\n [max]=\"max().year\"\n [min]=\"min().year\"\n [rangeMode]=\"options.rangeMode\"\n [value]=\"value()\"\n (yearClick)=\"onPickerYearClick($event)\"\n />\n </tui-scrollbar>\n} @else {\n <tui-spin-button\n class=\"t-spin\"\n [focusable]=\"false\"\n [leftDisabled]=\"year.yearSameOrBefore(min())\"\n [rightDisabled]=\"year.yearSameOrAfter(max())\"\n (leftClick)=\"onPreviousYear()\"\n (rightClick)=\"onNextYear()\"\n >\n <button\n automation-id=\"tui-calendar-month__active-year\"\n tabIndex=\"-1\"\n tuiLink\n type=\"button\"\n (click)=\"onYearClick()\"\n >\n {{ year.formattedYear }}\n </button>\n </tui-spin-button>\n <div\n *tuiRepeatTimes=\"let row of 3\"\n class=\"t-row\"\n >\n <ng-container *tuiRepeatTimes=\"let column of 4\">\n @let item = getTuiMonth(row * 4 + column, year.year);\n <div\n class=\"t-cell\"\n [attr.data-range]=\"getItemRange(item)\"\n [class.t-cell_disabled]=\"disabledItemHandlerWithMinMax(item)\"\n [class.t-cell_today]=\"isItemToday(item)\"\n (click)=\"onItemClick(item)\"\n (tuiHoveredChange)=\"onItemHovered($event, item)\"\n >\n {{ months()[row * 4 + column] }}\n </div>\n </ng-container>\n </div>\n}\n", styles: [".t-row{display:flex;justify-content:flex-start;font:var(--tui-font-text-m)}.t-row:first-child{justify-content:flex-end}.t-row:last-child{justify-content:flex-start}.t-cell{position:relative;display:flex;align-items:center;justify-content:center;line-height:2rem;isolation:isolate;cursor:pointer;overflow:hidden;border:.125rem solid transparent;box-sizing:border-box;mask:linear-gradient(transparent calc(50% - 1rem),#000 calc(50% - 1rem),#000 calc(50% + 1rem),transparent calc(50% + 1rem))}.t-cell:first-child{border-inline-start-color:transparent!important}.t-cell:last-child{border-inline-end-color:transparent!important}.t-cell:before,.t-cell:after{position:absolute;top:0;left:0;bottom:0;right:0;content:\"\";z-index:-1;border-radius:var(--tui-radius-m)}.t-cell:after{mask:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 32\"><path d=\"M0.2856 0L0.6763 0C2.9265 0 4.9876 1.259 6.0147 3.2611L10.2442 11.5048C11.5301 14.0113 11.5683 16.9754 10.3472 19.5141L5.9766 28.6007C4.9772 30.6786 2.8754 32 0.5696 32H0.285645V0Z\"></path></svg>') right / .75rem 100% no-repeat,linear-gradient(#000,#000) left / calc(100% - .7rem) 100% no-repeat}.t-cell[data-range]:before{background:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range]:before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1)}:host._picking .t-cell[data-range=middle]{border-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=middle]:not(:first-child):before{border-top-left-radius:0;border-bottom-left-radius:0}.t-cell[data-range=middle]:not(:last-child):before{border-top-right-radius:0;border-bottom-right-radius:0}.t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=start]{border-inline-end-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:not(:last-child):before{right:-1rem}.t-cell[data-range=start]:after{background:var(--tui-background-accent-1)}.t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1);color:var(--tui-text-primary-on-accent-1)}:host._picking .t-cell[data-range=end]{border-inline-start-color:var(--tui-background-neutral-1-hover)}.t-cell[data-range=end]:not(:first-child):before{left:-1rem}.t-cell[data-range=end]:after{background:var(--tui-background-accent-1);transform:scaleX(-1)}.t-cell[data-range=active]{color:var(--tui-text-primary-on-accent-1)}.t-cell[data-range=active]:after{background:var(--tui-background-accent-1);mask:none}.t-cell_disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-cell_today{text-decoration:underline;text-underline-offset:.25rem}@media (hover: hover) and (pointer: fine){.t-cell:hover:not([data-range=start]):not([data-range=end]):before{background:var(--tui-background-neutral-1-hover)}.t-cell[data-range=start]:hover:after,.t-cell[data-range=end]:hover:after,.t-cell[data-range=active]:hover:after{background:var(--tui-background-accent-1-hover)}}:host{display:block;block-size:12rem;inline-size:16rem;padding:1.125rem;box-sizing:content-box}.t-spin{margin-block-end:1rem}.t-cell{inline-size:4rem;border-block-start-width:.75rem;border-block-end-width:.75rem}.t-scrollbar{block-size:inherit;inline-size:inherit}\n"] }]
164
162
  }], propDecorators: { year: [{
165
163
  type: Input
166
164
  }], disabledItemHandler: [{
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-components-calendar-month.mjs","sources":["../../../projects/kit/components/calendar-month/calendar-month.options.ts","../../../projects/kit/components/calendar-month/calendar-month.component.ts","../../../projects/kit/components/calendar-month/calendar-month.template.html","../../../projects/kit/components/calendar-month/taiga-ui-kit-components-calendar-month.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiCalendarMonthOptions {\n rangeMode: boolean;\n}\n\nexport const TUI_CALENDAR_MONTH_DEFAULT_OPTIONS: TuiCalendarMonthOptions = {\n rangeMode: false,\n};\n\nexport const [TUI_CALENDAR_MONTH_OPTIONS, tuiCalendarMonthOptionsProvider] =\n tuiCreateOptions(TUI_CALENDAR_MONTH_DEFAULT_OPTIONS);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport {TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {\n TUI_FIRST_DAY,\n TUI_LAST_DAY,\n TuiDay,\n TuiMonth,\n TuiMonthRange,\n TuiYear,\n} from '@taiga-ui/cdk/date-time';\nimport {TuiHovered} from '@taiga-ui/cdk/directives/hovered';\nimport {TuiLet} from '@taiga-ui/cdk/directives/let';\nimport {TuiRepeatTimes} from '@taiga-ui/cdk/directives/repeat-times';\nimport {type TuiBooleanHandler} from '@taiga-ui/cdk/types';\nimport {tuiNullableSame, tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiCalendarYear} from '@taiga-ui/core/components/calendar';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiScrollbar} from '@taiga-ui/core/components/scrollbar';\nimport {TuiSpinButton} from '@taiga-ui/core/components/spin-button';\nimport {tuiAsAuxiliary} from '@taiga-ui/core/tokens';\nimport {TUI_CALENDAR_MONTHS} from '@taiga-ui/kit/tokens';\n\nimport {TUI_CALENDAR_MONTH_OPTIONS} from './calendar-month.options';\n\nconst TODAY = TuiDay.currentLocal();\n\n@Component({\n selector: 'tui-calendar-month',\n imports: [\n TuiCalendarYear,\n TuiHovered,\n TuiLet,\n TuiLink,\n TuiRepeatTimes,\n TuiScrollbar,\n TuiSpinButton,\n ],\n templateUrl: './calendar-month.template.html',\n styleUrl: './calendar-month.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiAsAuxiliary(TuiCalendarMonth)],\n host: {\n '[class._picking]': 'isRangePicking()',\n },\n})\nexport class TuiCalendarMonth {\n protected isYearPickerShown = false;\n protected readonly months = inject(TUI_CALENDAR_MONTHS);\n protected readonly isRangePicking = computed(\n (x = this.value()) =>\n (!this.options.rangeMode && x instanceof TuiMonthRange && x.isSingleMonth) || // TODO(v5): remove this condition\n (this.options.rangeMode && x instanceof TuiMonth),\n );\n\n @Input()\n public year: TuiYear = TODAY;\n\n @Input()\n public disabledItemHandler: TuiBooleanHandler<TuiMonth> = TUI_FALSE_HANDLER;\n\n @Input()\n public minLength: number | null = null;\n\n @Input()\n public maxLength: number | null = null;\n\n @Output()\n public readonly monthClick = new EventEmitter<TuiMonth>();\n\n @Output()\n public readonly hoveredItemChange = new EventEmitter<TuiMonth | null>();\n\n @Output()\n public readonly yearChange = new EventEmitter<TuiYear>();\n\n public options = inject(TUI_CALENDAR_MONTH_OPTIONS);\n public readonly min = signal<TuiMonth>(TUI_FIRST_DAY);\n public readonly max = signal<TuiMonth>(TUI_LAST_DAY);\n public readonly value = signal<TuiMonth | TuiMonthRange | null>(null);\n public hoveredItem: TuiMonth | null = null;\n\n // TODO(v5): use signal inputs\n @Input({alias: 'min', transform: (x: TuiMonth | null) => x ?? TUI_FIRST_DAY})\n public set minSetter(x: TuiMonth) {\n this.min.set(x);\n }\n\n // TODO(v5): use signal inputs\n @Input({alias: 'max', transform: (x: TuiMonth | null) => x ?? TUI_LAST_DAY})\n public set maxSetter(x: TuiMonth) {\n this.max.set(x);\n }\n\n // TODO(v5): use signal inputs\n @Input('value')\n public set valueSetter(x: TuiMonth | TuiMonthRange | null) {\n this.value.set(x);\n }\n\n public onNextYear(): void {\n this.updateActiveYear(this.year.append({year: 1}));\n }\n\n public onPreviousYear(): void {\n this.updateActiveYear(this.year.append({year: -1}));\n }\n\n public getItemRange(item: TuiMonth): 'active' | 'end' | 'middle' | 'start' | null {\n const value = this.value();\n const {hoveredItem} = this;\n\n if (!value) {\n return null;\n }\n\n if (!this.options.rangeMode && value instanceof TuiMonth) {\n return value?.monthSame(item) ? 'active' : null;\n }\n\n const selectedRange =\n value instanceof TuiMonth ? new TuiMonthRange(value, value) : value;\n const months = item.month + item.year * 12;\n const hovered = hoveredItem ? hoveredItem.month + hoveredItem.year * 12 : null;\n const from = selectedRange.from.month + selectedRange.from.year * 12;\n const to = selectedRange.to.month + selectedRange.to.year * 12;\n const picking = this.isRangePicking() ? hovered : null;\n const min = Math.min(from, to, picking ?? from);\n const max = Math.max(from, to, picking ?? from);\n\n if (min === max && min === months) {\n return 'active';\n }\n\n if (min === months) {\n return 'start';\n }\n\n if (max === months) {\n return 'end';\n }\n\n return min < months && months < max ? 'middle' : null;\n }\n\n protected get disabledItemHandlerWithMinMax(): TuiBooleanHandler<TuiMonth> {\n return this.calculateDisabledItemHandlerWithMinMax(\n this.disabledItemHandler,\n this.value(),\n this.isRangePicking(),\n this.min(),\n this.max(),\n this.minLength,\n this.maxLength,\n );\n }\n\n protected getTuiMonth(monthNumber: number, yearNumber: number): TuiMonth {\n return new TuiMonth(yearNumber, monthNumber);\n }\n\n protected isItemToday(item: TuiMonth): boolean {\n return TODAY.monthSame(item);\n }\n\n protected onPickerYearClick(year: number): void {\n this.isYearPickerShown = false;\n\n if (this.year.year !== year) {\n this.updateActiveYear(new TuiYear(year));\n }\n }\n\n protected onItemClick(month: TuiMonth): void {\n if (!this.disabledItemHandlerWithMinMax(month)) {\n this.monthClick.emit(month);\n }\n }\n\n protected onYearClick(): void {\n this.isYearPickerShown = true;\n }\n\n protected onItemHovered(hovered: boolean, item: TuiMonth): void {\n this.updateHoveredItem(hovered ? item : null);\n }\n\n // eslint-disable-next-line @typescript-eslint/max-params,max-params\n @tuiPure\n private calculateDisabledItemHandlerWithMinMax(\n disabledItemHandler: TuiBooleanHandler<TuiMonth>,\n value: TuiMonth | TuiMonthRange | null,\n isRangePicking: boolean,\n min: TuiMonth,\n max: TuiMonth,\n minLength: number | null,\n maxLength: number | null,\n ): TuiBooleanHandler<TuiMonth> {\n return (item) => {\n const selectedMonth = value instanceof TuiMonthRange ? value.from : value;\n const delta =\n isRangePicking && selectedMonth\n ? Math.abs(\n item.year * 12 +\n item.month -\n selectedMonth.year * 12 -\n selectedMonth.month,\n )\n : 0;\n\n const tooLong = delta && maxLength && delta > maxLength;\n const tooShort = delta && minLength && delta < minLength;\n\n return (\n tooLong ||\n tooShort ||\n item.monthBefore(min) ||\n item.monthAfter(max) ||\n disabledItemHandler(item)\n );\n };\n }\n\n private updateHoveredItem(month: TuiMonth | null): void {\n if (tuiNullableSame(this.hoveredItem, month, (a, b) => a.monthSame(b))) {\n return;\n }\n\n this.hoveredItem = month;\n this.hoveredItemChange.emit(month);\n }\n\n private updateActiveYear(year: TuiYear): void {\n this.year = year;\n this.yearChange.emit(year);\n }\n}\n","@if (isYearPickerShown) {\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-calendar-year\n [initialItem]=\"year.year\"\n [max]=\"max().year\"\n [min]=\"min().year\"\n [rangeMode]=\"options.rangeMode\"\n [value]=\"value()\"\n (yearClick)=\"onPickerYearClick($event)\"\n />\n </tui-scrollbar>\n} @else {\n <tui-spin-button\n class=\"t-spin\"\n [focusable]=\"false\"\n [leftDisabled]=\"year.yearSameOrBefore(min())\"\n [rightDisabled]=\"year.yearSameOrAfter(max())\"\n (leftClick)=\"onPreviousYear()\"\n (rightClick)=\"onNextYear()\"\n >\n <button\n automation-id=\"tui-calendar-month__active-year\"\n tabIndex=\"-1\"\n tuiLink\n type=\"button\"\n (click)=\"onYearClick()\"\n >\n {{ year.formattedYear }}\n </button>\n </tui-spin-button>\n <div\n *tuiRepeatTimes=\"let row of 3\"\n class=\"t-row\"\n >\n <ng-container *tuiRepeatTimes=\"let column of 4\">\n <div\n *tuiLet=\"getTuiMonth(row * 4 + column, year.year) as item\"\n class=\"t-cell\"\n [attr.data-range]=\"getItemRange(item)\"\n [class.t-cell_disabled]=\"disabledItemHandlerWithMinMax(item)\"\n [class.t-cell_today]=\"isItemToday(item)\"\n (click)=\"onItemClick(item)\"\n (tuiHoveredChange)=\"onItemHovered($event, item)\"\n >\n {{ months()[row * 4 + column] }}\n </div>\n </ng-container>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-kit-components-calendar-month.mjs","sources":["../../../projects/kit/components/calendar-month/calendar-month.options.ts","../../../projects/kit/components/calendar-month/calendar-month.component.ts","../../../projects/kit/components/calendar-month/calendar-month.template.html","../../../projects/kit/components/calendar-month/taiga-ui-kit-components-calendar-month.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiCalendarMonthOptions {\n rangeMode: boolean;\n}\n\nexport const TUI_CALENDAR_MONTH_DEFAULT_OPTIONS: TuiCalendarMonthOptions = {\n rangeMode: false,\n};\n\nexport const [TUI_CALENDAR_MONTH_OPTIONS, tuiCalendarMonthOptionsProvider] =\n tuiCreateOptions(TUI_CALENDAR_MONTH_DEFAULT_OPTIONS);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport {TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {\n TUI_FIRST_DAY,\n TUI_LAST_DAY,\n TuiDay,\n TuiMonth,\n TuiMonthRange,\n TuiYear,\n} from '@taiga-ui/cdk/date-time';\nimport {TuiHovered} from '@taiga-ui/cdk/directives/hovered';\nimport {TuiRepeatTimes} from '@taiga-ui/cdk/directives/repeat-times';\nimport {type TuiBooleanHandler} from '@taiga-ui/cdk/types';\nimport {tuiNullableSame, tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiCalendarYear} from '@taiga-ui/core/components/calendar';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiScrollbar} from '@taiga-ui/core/components/scrollbar';\nimport {TuiSpinButton} from '@taiga-ui/core/components/spin-button';\nimport {tuiAsAuxiliary} from '@taiga-ui/core/tokens';\nimport {TUI_CALENDAR_MONTHS} from '@taiga-ui/kit/tokens';\n\nimport {TUI_CALENDAR_MONTH_OPTIONS} from './calendar-month.options';\n\nconst TODAY = TuiDay.currentLocal();\n\n@Component({\n selector: 'tui-calendar-month',\n imports: [\n TuiCalendarYear,\n TuiHovered,\n TuiLink,\n TuiRepeatTimes,\n TuiScrollbar,\n TuiSpinButton,\n ],\n templateUrl: './calendar-month.template.html',\n styleUrl: './calendar-month.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiAsAuxiliary(TuiCalendarMonth)],\n host: {\n '[class._picking]': 'isRangePicking()',\n },\n})\nexport class TuiCalendarMonth {\n protected isYearPickerShown = false;\n protected readonly months = inject(TUI_CALENDAR_MONTHS);\n protected readonly isRangePicking = computed(\n (x = this.value()) =>\n (!this.options.rangeMode && x instanceof TuiMonthRange && x.isSingleMonth) || // TODO(v5): remove this condition\n (this.options.rangeMode && x instanceof TuiMonth),\n );\n\n @Input()\n public year: TuiYear = TODAY;\n\n @Input()\n public disabledItemHandler: TuiBooleanHandler<TuiMonth> = TUI_FALSE_HANDLER;\n\n @Input()\n public minLength: number | null = null;\n\n @Input()\n public maxLength: number | null = null;\n\n @Output()\n public readonly monthClick = new EventEmitter<TuiMonth>();\n\n @Output()\n public readonly hoveredItemChange = new EventEmitter<TuiMonth | null>();\n\n @Output()\n public readonly yearChange = new EventEmitter<TuiYear>();\n\n public options = inject(TUI_CALENDAR_MONTH_OPTIONS);\n public readonly min = signal<TuiMonth>(TUI_FIRST_DAY);\n public readonly max = signal<TuiMonth>(TUI_LAST_DAY);\n public readonly value = signal<TuiMonth | TuiMonthRange | null>(null);\n public hoveredItem: TuiMonth | null = null;\n\n // TODO(v5): use signal inputs\n @Input({alias: 'min', transform: (x: TuiMonth | null) => x ?? TUI_FIRST_DAY})\n public set minSetter(x: TuiMonth) {\n this.min.set(x);\n }\n\n // TODO(v5): use signal inputs\n @Input({alias: 'max', transform: (x: TuiMonth | null) => x ?? TUI_LAST_DAY})\n public set maxSetter(x: TuiMonth) {\n this.max.set(x);\n }\n\n // TODO(v5): use signal inputs\n @Input('value')\n public set valueSetter(x: TuiMonth | TuiMonthRange | null) {\n this.value.set(x);\n }\n\n public onNextYear(): void {\n this.updateActiveYear(this.year.append({year: 1}));\n }\n\n public onPreviousYear(): void {\n this.updateActiveYear(this.year.append({year: -1}));\n }\n\n public getItemRange(item: TuiMonth): 'active' | 'end' | 'middle' | 'start' | null {\n const value = this.value();\n const {hoveredItem} = this;\n\n if (!value) {\n return null;\n }\n\n if (!this.options.rangeMode && value instanceof TuiMonth) {\n return value?.monthSame(item) ? 'active' : null;\n }\n\n const selectedRange =\n value instanceof TuiMonth ? new TuiMonthRange(value, value) : value;\n const months = item.month + item.year * 12;\n const hovered = hoveredItem ? hoveredItem.month + hoveredItem.year * 12 : null;\n const from = selectedRange.from.month + selectedRange.from.year * 12;\n const to = selectedRange.to.month + selectedRange.to.year * 12;\n const picking = this.isRangePicking() ? hovered : null;\n const min = Math.min(from, to, picking ?? from);\n const max = Math.max(from, to, picking ?? from);\n\n if (min === max && min === months) {\n return 'active';\n }\n\n if (min === months) {\n return 'start';\n }\n\n if (max === months) {\n return 'end';\n }\n\n return min < months && months < max ? 'middle' : null;\n }\n\n protected get disabledItemHandlerWithMinMax(): TuiBooleanHandler<TuiMonth> {\n return this.calculateDisabledItemHandlerWithMinMax(\n this.disabledItemHandler,\n this.value(),\n this.isRangePicking(),\n this.min(),\n this.max(),\n this.minLength,\n this.maxLength,\n );\n }\n\n protected getTuiMonth(monthNumber: number, yearNumber: number): TuiMonth {\n return new TuiMonth(yearNumber, monthNumber);\n }\n\n protected isItemToday(item: TuiMonth): boolean {\n return TODAY.monthSame(item);\n }\n\n protected onPickerYearClick(year: number): void {\n this.isYearPickerShown = false;\n\n if (this.year.year !== year) {\n this.updateActiveYear(new TuiYear(year));\n }\n }\n\n protected onItemClick(month: TuiMonth): void {\n if (!this.disabledItemHandlerWithMinMax(month)) {\n this.monthClick.emit(month);\n }\n }\n\n protected onYearClick(): void {\n this.isYearPickerShown = true;\n }\n\n protected onItemHovered(hovered: boolean, item: TuiMonth): void {\n this.updateHoveredItem(hovered ? item : null);\n }\n\n // eslint-disable-next-line @typescript-eslint/max-params,max-params\n @tuiPure\n private calculateDisabledItemHandlerWithMinMax(\n disabledItemHandler: TuiBooleanHandler<TuiMonth>,\n value: TuiMonth | TuiMonthRange | null,\n isRangePicking: boolean,\n min: TuiMonth,\n max: TuiMonth,\n minLength: number | null,\n maxLength: number | null,\n ): TuiBooleanHandler<TuiMonth> {\n return (item) => {\n const selectedMonth = value instanceof TuiMonthRange ? value.from : value;\n const delta =\n isRangePicking && selectedMonth\n ? Math.abs(\n item.year * 12 +\n item.month -\n selectedMonth.year * 12 -\n selectedMonth.month,\n )\n : 0;\n\n const tooLong = delta && maxLength && delta > maxLength;\n const tooShort = delta && minLength && delta < minLength;\n\n return (\n tooLong ||\n tooShort ||\n item.monthBefore(min) ||\n item.monthAfter(max) ||\n disabledItemHandler(item)\n );\n };\n }\n\n private updateHoveredItem(month: TuiMonth | null): void {\n if (tuiNullableSame(this.hoveredItem, month, (a, b) => a.monthSame(b))) {\n return;\n }\n\n this.hoveredItem = month;\n this.hoveredItemChange.emit(month);\n }\n\n private updateActiveYear(year: TuiYear): void {\n this.year = year;\n this.yearChange.emit(year);\n }\n}\n","@if (isYearPickerShown) {\n <tui-scrollbar class=\"t-scrollbar\">\n <tui-calendar-year\n [initialItem]=\"year.year\"\n [max]=\"max().year\"\n [min]=\"min().year\"\n [rangeMode]=\"options.rangeMode\"\n [value]=\"value()\"\n (yearClick)=\"onPickerYearClick($event)\"\n />\n </tui-scrollbar>\n} @else {\n <tui-spin-button\n class=\"t-spin\"\n [focusable]=\"false\"\n [leftDisabled]=\"year.yearSameOrBefore(min())\"\n [rightDisabled]=\"year.yearSameOrAfter(max())\"\n (leftClick)=\"onPreviousYear()\"\n (rightClick)=\"onNextYear()\"\n >\n <button\n automation-id=\"tui-calendar-month__active-year\"\n tabIndex=\"-1\"\n tuiLink\n type=\"button\"\n (click)=\"onYearClick()\"\n >\n {{ year.formattedYear }}\n </button>\n </tui-spin-button>\n <div\n *tuiRepeatTimes=\"let row of 3\"\n class=\"t-row\"\n >\n <ng-container *tuiRepeatTimes=\"let column of 4\">\n @let item = getTuiMonth(row * 4 + column, year.year);\n <div\n class=\"t-cell\"\n [attr.data-range]=\"getItemRange(item)\"\n [class.t-cell_disabled]=\"disabledItemHandlerWithMinMax(item)\"\n [class.t-cell_today]=\"isItemToday(item)\"\n (click)=\"onItemClick(item)\"\n (tuiHoveredChange)=\"onItemHovered($event, item)\"\n >\n {{ months()[row * 4 + column] }}\n </div>\n </ng-container>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -56,7 +56,7 @@ class TuiDataListWrapperComponent {
56
56
  return items;
57
57
  }
58
58
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDataListWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
59
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiDataListWrapperComponent, isStandalone: true, selector: "tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]", inputs: { items: "items", disabledItemHandler: "disabledItemHandler", emptyContent: "emptyContent", size: "size", itemContent: "itemContent" }, outputs: { itemClick: "itemClick" }, providers: [tuiAsDataListAccessor(TuiDataListWrapperComponent)], viewQueries: [{ propertyName: "datalistSetter", first: true, predicate: TuiDataListComponent, descendants: true }, { propertyName: "legacyOptionsQuery", predicate: i0.forwardRef(() => TuiOption), descendants: true }, { propertyName: "optionsQuery", predicate: i0.forwardRef(() => TuiOptionWithValue), descendants: true }], ngImport: i0, template: "@if (items) {\n <tui-data-list\n [emptyContent]=\"emptyContent\"\n [size]=\"size\"\n >\n @if (newOptionMode) {\n @for (item of $cast(items); track item) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </button>\n }\n } @else {\n @for (item of $cast(items); track item) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <span class=\"t-content\">\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </span>\n </button>\n }\n }\n <!-- TODO(v5): delete fallback -->\n </tui-data-list>\n} @else {\n <tui-loader\n automation-id=\"tui-data-list-wrapper__loader\"\n class=\"t-loader\"\n />\n}\n", styles: [":host{display:block}.t-content{flex:1;min-inline-size:0}.t-loader{margin:.75rem 0}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i1.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptionNew, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: ["disabled"] }, { kind: "directive", type: i1.TuiOptionWithValue, selector: "button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]", inputs: ["disabled", "value"] }, { kind: "directive", type: TuiElement, selector: "[tuiElement]", exportAs: ["elementRef"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
59
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiDataListWrapperComponent, isStandalone: true, selector: "tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]", inputs: { items: "items", disabledItemHandler: "disabledItemHandler", emptyContent: "emptyContent", size: "size", itemContent: "itemContent" }, outputs: { itemClick: "itemClick" }, providers: [tuiAsDataListAccessor(TuiDataListWrapperComponent)], viewQueries: [{ propertyName: "datalistSetter", first: true, predicate: TuiDataListComponent, descendants: true }, { propertyName: "legacyOptionsQuery", predicate: i0.forwardRef(() => TuiOption), descendants: true }, { propertyName: "optionsQuery", predicate: i0.forwardRef(() => TuiOptionWithValue), descendants: true }], ngImport: i0, template: "@if (items) {\n <tui-data-list\n [emptyContent]=\"emptyContent\"\n [size]=\"size\"\n >\n @if (newOptionMode) {\n @for (item of $cast(items); track item) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </button>\n }\n } @else {\n @for (item of $cast(items); track item) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <span class=\"t-content\">\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\">\n {{ text }}\n </ng-container>\n </span>\n </button>\n }\n }\n <!-- TODO(v5): delete fallback -->\n </tui-data-list>\n} @else {\n <tui-loader\n automation-id=\"tui-data-list-wrapper__loader\"\n class=\"t-loader\"\n />\n}\n", styles: [":host{display:block}.t-content{flex:1;min-inline-size:0}.t-loader{margin:.75rem 0}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i1.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptionNew, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: ["disabled"] }, { kind: "directive", type: i1.TuiOptionWithValue, selector: "button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]", inputs: ["disabled", "value"] }, { kind: "directive", type: TuiElement, selector: "[tuiElement]", exportAs: ["elementRef"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
60
60
  }
61
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDataListWrapperComponent, decorators: [{
62
62
  type: Component,
@@ -91,7 +91,7 @@ class TuiDataListGroupWrapperComponent extends TuiDataListWrapperComponent {
91
91
  this.labels = [];
92
92
  }
93
93
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDataListGroupWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
94
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiDataListGroupWrapperComponent, isStandalone: true, selector: "tui-data-list-wrapper[labels]", inputs: { labels: "labels" }, providers: [tuiAsDataListAccessor(TuiDataListGroupWrapperComponent)], usesInheritance: true, ngImport: i0, template: "@if (items) {\n <tui-data-list\n [emptyContent]=\"emptyContent\"\n [size]=\"size\"\n >\n @for (group of items; track group) {\n @if (multi) {\n <tui-opt-group\n tuiMultiSelectGroup\n [label]=\"labels[$index] || ''\"\n >\n @if (newOptionMode) {\n @for (item of group; track $index) {\n <button\n #elementRef=\"elementRef\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n <!-- TODO(v5): delete fallback -->\n } @else {\n @for (item of group; track $index) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n }\n </tui-opt-group>\n } @else {\n <tui-opt-group [label]=\"labels[$index]\">\n @if (newOptionMode) {\n @for (item of group; track item) {\n <button\n #elementRef=\"elementRef\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n <!-- TODO(v5): delete fallback -->\n } @else {\n @for (item of group; track $index) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n }\n </tui-opt-group>\n }\n }\n </tui-data-list>\n} @else {\n <tui-loader class=\"t-loader\" />\n}\n", styles: [":host{display:block}.t-content{flex:1;min-inline-size:0}.t-loader{margin:.75rem 0}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i1.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptionNew, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: ["disabled"] }, { kind: "directive", type: i1.TuiOptionWithValue, selector: "button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptGroup, selector: "tui-opt-group", inputs: ["label"] }, { kind: "directive", type: TuiElement, selector: "[tuiElement]", exportAs: ["elementRef"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: TuiMultiSelectGroupComponent, selector: "tui-opt-group[tuiMultiSelectGroup]", inputs: ["label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiDataListGroupWrapperComponent, isStandalone: true, selector: "tui-data-list-wrapper[labels]", inputs: { labels: "labels" }, providers: [tuiAsDataListAccessor(TuiDataListGroupWrapperComponent)], usesInheritance: true, ngImport: i0, template: "@if (items) {\n <tui-data-list\n [emptyContent]=\"emptyContent\"\n [size]=\"size\"\n >\n @for (group of items; track group) {\n @if (multi) {\n <tui-opt-group\n tuiMultiSelectGroup\n [label]=\"labels[$index] || ''\"\n >\n @if (newOptionMode) {\n @for (item of group; track $index) {\n <button\n #elementRef=\"elementRef\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n <!-- TODO(v5): delete fallback -->\n } @else {\n @for (item of group; track $index) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n }\n </tui-opt-group>\n } @else {\n <tui-opt-group [label]=\"labels[$index]\">\n @if (newOptionMode) {\n @for (item of group; track item) {\n <button\n #elementRef=\"elementRef\"\n new\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click.capture)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n <!-- TODO(v5): delete fallback -->\n } @else {\n @for (item of group; track $index) {\n <button\n #elementRef=\"elementRef\"\n automation-id=\"tui-data-list-wrapper__option\"\n tuiElement\n tuiOption\n type=\"button\"\n [disabled]=\"disabledItemHandler(item)\"\n [value]=\"item\"\n (click)=\"itemClick.emit(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"itemContent as text; context: getContext(item, elementRef)\"\n >\n {{ text }}\n </ng-container>\n </button>\n }\n }\n </tui-opt-group>\n }\n }\n </tui-data-list>\n} @else {\n <tui-loader class=\"t-loader\" />\n}\n", styles: [":host{display:block}.t-content{flex:1;min-inline-size:0}.t-loader{margin:.75rem 0}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i1.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptionNew, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: ["disabled"] }, { kind: "directive", type: i1.TuiOptionWithValue, selector: "button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]", inputs: ["disabled", "value"] }, { kind: "directive", type: i1.TuiOptGroup, selector: "tui-opt-group", inputs: ["label"] }, { kind: "directive", type: TuiElement, selector: "[tuiElement]", exportAs: ["elementRef"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "component", type: TuiMultiSelectGroupComponent, selector: "tui-opt-group[tuiMultiSelectGroup]", inputs: ["label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
95
95
  }
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDataListGroupWrapperComponent, decorators: [{
97
97
  type: Component,