@taiga-ui/experimental 5.18.0 → 5.19.0-canary.3a10024

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.
@@ -1,5 +1,5 @@
1
1
  import { AbstractTuiCalendar } from '@taiga-ui/core/components/calendar';
2
- export declare class TuiDatePickerHeader {
2
+ export declare class TuiCalendarHeader {
3
3
  protected readonly picker: AbstractTuiCalendar<import("@taiga-ui/cdk/date-time").TuiDay | import("@taiga-ui/cdk/date-time").TuiDayRange | readonly import("@taiga-ui/cdk/date-time").TuiDay[]>;
4
4
  protected readonly dropdown: import("@angular/core").ElementRef<Element> | null;
5
5
  readonly mode: import("@angular/core").InputSignal<"multi" | "range" | "single" | undefined>;
@@ -0,0 +1,24 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { TuiDay, TuiMonth } from '@taiga-ui/cdk/date-time';
3
+ import { TuiCarouselComponent } from '@taiga-ui/core/components/carousel';
4
+ import { TuiDatePicker } from './date-picker';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * @deprecated: work in progress, do not use!
8
+ */
9
+ export declare class TuiCalendarMultiComponent<T extends 'multi' | 'range' | 'single'> extends TuiDatePicker<T> {
10
+ protected readonly visible: import("@angular/core").WritableSignal<Record<string, number>>;
11
+ protected readonly carousel: import("@angular/core").Signal<TuiCarouselComponent | undefined>;
12
+ protected readonly scroll: import("@angular/core").Signal<ElementRef<any>>;
13
+ protected readonly height: import("@angular/core").Signal<number>;
14
+ protected readonly start: import("@angular/core").Signal<boolean>;
15
+ protected readonly end: import("@angular/core").Signal<boolean>;
16
+ protected readonly index: import("@angular/core").Signal<number>;
17
+ readonly months: import("@angular/core").InputSignal<3 | 2 | 1>;
18
+ protected updateMonth(day?: TuiDay | null): void;
19
+ protected getMonth(index: number): TuiMonth;
20
+ protected onSpin(step: number): void;
21
+ protected onIntersection(visible: boolean, month: TuiMonth, height: number): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiCalendarMultiComponent<any>, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiCalendarMultiComponent<any>, "tui-calendar[months]", never, { "months": { "alias": "months"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
24
+ }
@@ -0,0 +1,35 @@
1
+ import { TuiMonth } from '@taiga-ui/cdk/date-time';
2
+ import { type TuiBooleanHandler, type TuiContext } from '@taiga-ui/cdk/types';
3
+ import { TuiCarouselComponent } from '@taiga-ui/core/components/carousel';
4
+ import { type PolymorpheusContent } from '@taiga-ui/polymorpheus';
5
+ import { TuiDatePicker } from './date-picker';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * @deprecated: work in progress, do not use!
9
+ */
10
+ export declare class TuiCalendarComponent<T extends 'multi' | 'range' | 'single'> extends TuiDatePicker<T> {
11
+ protected readonly carousel: import("@angular/core").Signal<TuiCarouselComponent | undefined>;
12
+ protected readonly content: import("@angular/core").Signal<PolymorpheusContent<TuiContext<TuiMonth>>>;
13
+ protected readonly years: import("@angular/core").Signal<number[]>;
14
+ protected readonly year: import("@angular/core").Signal<TuiMonth[]>;
15
+ protected readonly months: import("@angular/core").Signal<TuiMonth[]>;
16
+ protected readonly button: import("@angular/core").Signal<string>;
17
+ protected readonly yearMin: import("@angular/core").Signal<number>;
18
+ protected readonly yearMax: import("@angular/core").Signal<number>;
19
+ protected readonly disabledMonth: import("@angular/core").Signal<TuiBooleanHandler<TuiMonth>>;
20
+ protected readonly disabledYear: import("@angular/core").Signal<(year: number) => boolean>;
21
+ protected readonly start: import("@angular/core").Signal<boolean>;
22
+ protected readonly end: import("@angular/core").Signal<boolean>;
23
+ protected readonly index: import("@angular/core").Signal<number>;
24
+ readonly view: import("@angular/core").ModelSignal<"day" | "month" | "year">;
25
+ readonly contentMonth: import("@angular/core").InputSignal<PolymorpheusContent<TuiContext<TuiMonth>>>;
26
+ readonly contentYear: import("@angular/core").InputSignal<PolymorpheusContent<TuiContext<number>>>;
27
+ readonly showAdjacent: import("@angular/core").InputSignal<boolean>;
28
+ protected getMonth(index: number): TuiMonth;
29
+ protected getItems(initial: number): readonly number[];
30
+ protected onSpin(step: number): void;
31
+ protected onYear(year: number): void;
32
+ protected onMonth(month: TuiMonth): void;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiCalendarComponent<any>, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiCalendarComponent<any>, "tui-calendar[new]", never, { "view": { "alias": "view"; "required": false; "isSignal": true; }; "contentMonth": { "alias": "contentMonth"; "required": false; "isSignal": true; }; "contentYear": { "alias": "contentYear"; "required": false; "isSignal": true; }; "showAdjacent": { "alias": "showAdjacent"; "required": false; "isSignal": true; }; }, { "view": "viewChange"; }, never, never, true, never>;
35
+ }
@@ -0,0 +1,3 @@
1
+ import { TuiCalendarComponent } from './calendar.component';
2
+ import { TuiCalendarMultiComponent } from './calendar-multi.component';
3
+ export declare const TuiCalendar: readonly [typeof TuiCalendarComponent, typeof TuiCalendarMultiComponent];
@@ -0,0 +1,24 @@
1
+ import { TuiDay, TuiDayRange } from '@taiga-ui/cdk/date-time';
2
+ import { type TuiContext } from '@taiga-ui/cdk/types';
3
+ import { AbstractTuiCalendar } from '@taiga-ui/core/components/calendar';
4
+ import { type PolymorpheusContent } from '@taiga-ui/polymorpheus';
5
+ import * as i0 from "@angular/core";
6
+ type DatePicker<T> = T extends 'single' ? TuiDay : T extends 'multi' ? readonly TuiDay[] : TuiDayRange;
7
+ export declare abstract class TuiDatePicker<T extends 'multi' | 'range' | 'single'> extends AbstractTuiCalendar<DatePicker<T>> {
8
+ protected readonly options: import("@taiga-ui/experimental/components/month").TuiMonthOptions;
9
+ protected readonly icons: import("@taiga-ui/core/tokens").TuiCommonIcons;
10
+ protected readonly dropdown: import("@angular/core").ElementRef<Element> | null;
11
+ protected readonly texts: import("@angular/core").Signal<readonly [previous: string, next: string]>;
12
+ protected readonly i18n: import("@angular/core").Signal<readonly [January: string, February: string, March: string, April: string, May: string, June: string, July: string, August: string, September: string, October: string, November: string, December: string]>;
13
+ protected readonly disabledDay: import("@angular/core").Signal<(day: TuiDay) => boolean>;
14
+ protected readonly sync: import("@angular/core").EffectRef;
15
+ readonly mode: import("@angular/core").InputSignal<T | undefined>;
16
+ readonly contentDay: import("@angular/core").InputSignal<PolymorpheusContent<TuiContext<TuiDay>>>;
17
+ readonly dayType: import("@angular/core").InputSignal<import("@taiga-ui/cdk/types").TuiHandler<TuiDay, string>>;
18
+ readonly showWeek: import("@angular/core").InputSignal<boolean>;
19
+ protected updateMonth(day?: TuiDay | null): void;
20
+ protected onDay(day: TuiDay): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiDatePicker<any>, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiDatePicker<any>, never, never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "contentDay": { "alias": "contentDay"; "required": false; "isSignal": true; }; "dayType": { "alias": "dayType"; "required": false; "isSignal": true; }; "showWeek": { "alias": "showWeek"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23
+ }
24
+ export {};
@@ -0,0 +1,5 @@
1
+ export * from './calendar';
2
+ export * from './calendar.component';
3
+ export * from './calendar-header.component';
4
+ export * from './calendar-multi.component';
5
+ export * from './date-picker';
@@ -1,5 +1,5 @@
1
+ export * from '@taiga-ui/experimental/components/calendar';
1
2
  export * from '@taiga-ui/experimental/components/data-grid';
2
- export * from '@taiga-ui/experimental/components/date-picker';
3
3
  export * from '@taiga-ui/experimental/components/file';
4
4
  export * from '@taiga-ui/experimental/components/month';
5
5
  export * from '@taiga-ui/experimental/components/popout';
@@ -0,0 +1,309 @@
1
+ import { coerceArray } from '@angular/cdk/coercion';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, input, Component, ChangeDetectionStrategy, computed, effect, untracked, Directive, viewChild, model, signal, ElementRef } from '@angular/core';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { TuiDayRange, TuiDay, TuiMonth } from '@taiga-ui/cdk/date-time';
6
+ import { TuiMapperPipe } from '@taiga-ui/cdk/pipes/mapper';
7
+ import { tuiProvide } from '@taiga-ui/cdk/utils/di';
8
+ import { TuiButton, tuiButtonOptionsProvider } from '@taiga-ui/core/components/button';
9
+ import { AbstractTuiCalendar } from '@taiga-ui/core/components/calendar';
10
+ import * as i1 from '@taiga-ui/core/components/carousel';
11
+ import { TuiCarouselComponent, TuiCarousel } from '@taiga-ui/core/components/carousel';
12
+ import { TuiLink } from '@taiga-ui/core/components/link';
13
+ import { tuiTextfieldOptionsProvider } from '@taiga-ui/core/components/textfield';
14
+ import { TUI_COMMON_ICONS, TUI_SPIN_TEXTS, TUI_MONTHS, tuiAsAuxiliary } from '@taiga-ui/core/tokens';
15
+ import { TuiDataGrid } from '@taiga-ui/experimental/components/data-grid';
16
+ import { TUI_MONTH_OPTIONS, TuiMonthComponent } from '@taiga-ui/experimental/components/month';
17
+ import { TuiChevron } from '@taiga-ui/kit/directives/chevron';
18
+ import { TuiElasticContainer } from '@taiga-ui/layout/components/elastic-container';
19
+ import { TuiSlides } from '@taiga-ui/layout/components/slides';
20
+ import { __decorate } from 'tslib';
21
+ import { TUI_DROPDOWN_HOST } from '@taiga-ui/core/portals/dropdown';
22
+ import { tuiInputDateOptionsProvider, TuiInputDate } from '@taiga-ui/kit/components/input-date';
23
+ import { TuiInputDateMulti } from '@taiga-ui/kit/components/input-date-multi';
24
+ import { TuiInputDateRange } from '@taiga-ui/kit/components/input-date-range';
25
+ import { tuiArrayToggle } from '@taiga-ui/cdk/utils/miscellaneous';
26
+ import * as i2 from '@taiga-ui/cdk/directives/item';
27
+ import { WaIntersectionObservee } from '@ng-web-apis/intersection-observer';
28
+
29
+ let TuiCalendarHeader = class TuiCalendarHeader {
30
+ constructor() {
31
+ this.picker = inject(AbstractTuiCalendar);
32
+ this.dropdown = inject(TUI_DROPDOWN_HOST, { optional: true });
33
+ this.mode = input();
34
+ }
35
+ };
36
+ TuiCalendarHeader = __decorate([
37
+ Component({
38
+ selector: 'tui-calendar-header',
39
+ imports: [FormsModule, TuiInputDate, TuiInputDateMulti, TuiInputDateRange],
40
+ template: `
41
+ @switch (mode()) {
42
+ @case ('multi') {
43
+ <tui-textfield multi>
44
+ <input
45
+ tuiInputDateMulti
46
+ [attr.aria-labelledby]="dropdown?.nativeElement?.id || null"
47
+ [max]="picker.max()"
48
+ [min]="picker.min()"
49
+ [(ngModel)]="picker.value"
50
+ />
51
+ </tui-textfield>
52
+ }
53
+ @case ('range') {
54
+ <tui-textfield>
55
+ <input
56
+ tuiInputDateRange
57
+ [attr.aria-labelledby]="dropdown?.nativeElement?.id || null"
58
+ [max]="picker.max()"
59
+ [min]="picker.min()"
60
+ [(ngModel)]="picker.value"
61
+ />
62
+ </tui-textfield>
63
+ }
64
+ @default {
65
+ <tui-textfield>
66
+ <input
67
+ tuiInputDate
68
+ [attr.aria-labelledby]="dropdown?.nativeElement?.id || null"
69
+ [max]="picker.max()"
70
+ [min]="picker.min()"
71
+ [(ngModel)]="picker.value"
72
+ />
73
+ </tui-textfield>
74
+ }
75
+ }
76
+ `,
77
+ styles: `
78
+ :host {
79
+ position: absolute;
80
+ inset: 0.125rem;
81
+ opacity: 0;
82
+ pointer-events: none;
83
+ visibility: visible;
84
+
85
+ &:focus-within {
86
+ opacity: 1;
87
+ pointer-events: auto;
88
+ }
89
+ }
90
+ `,
91
+ changeDetection: ChangeDetectionStrategy.OnPush,
92
+ providers: [tuiInputDateOptionsProvider({ icon: '' })],
93
+ })
94
+ ], TuiCalendarHeader);
95
+
96
+ class TuiDatePicker extends AbstractTuiCalendar {
97
+ constructor() {
98
+ super(...arguments);
99
+ this.options = inject(TUI_MONTH_OPTIONS);
100
+ this.icons = inject(TUI_COMMON_ICONS);
101
+ this.dropdown = inject(TUI_DROPDOWN_HOST, { optional: true });
102
+ this.texts = inject(TUI_SPIN_TEXTS);
103
+ this.i18n = inject(TUI_MONTHS);
104
+ this.disabledDay = computed(() => (day) => day < this.min() || day > this.max() || this.disabledItemHandler()(day));
105
+ this.sync = effect(() => {
106
+ const value = this.value();
107
+ const [day] = value instanceof TuiDayRange ? [value.from] : coerceArray(value);
108
+ this.min();
109
+ this.max();
110
+ if (!day || day.year < 9000) {
111
+ untracked(() => this.updateMonth(day));
112
+ }
113
+ });
114
+ this.mode = input();
115
+ this.contentDay = input();
116
+ this.dayType = input(this.options.dayType);
117
+ this.showWeek = input(this.options.showWeek);
118
+ }
119
+ updateMonth(day) {
120
+ this.month.update(({ month, year }) => (day || new TuiDay(year, month, 1)).dayLimit(this.min(), this.max()));
121
+ }
122
+ onDay(day) {
123
+ if (this.mode() === 'range') {
124
+ this.value.update((value) => value instanceof TuiDayRange && value.from === value.to
125
+ ? TuiDayRange.sort(value.to, day.append({}))
126
+ : new TuiDayRange(day, day));
127
+ }
128
+ else if (this.mode() === 'multi') {
129
+ this.value.update((value) => Array.isArray(value)
130
+ ? tuiArrayToggle(value, day, (a, b) => a.daySame(b))
131
+ : [day]);
132
+ }
133
+ else {
134
+ this.value.set(day);
135
+ }
136
+ }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiDatePicker, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
138
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.25", type: TuiDatePicker, isStandalone: true, inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, contentDay: { classPropertyName: "contentDay", publicName: "contentDay", isSignal: true, isRequired: false, transformFunction: null }, dayType: { classPropertyName: "dayType", publicName: "dayType", isSignal: true, isRequired: false, transformFunction: null }, showWeek: { classPropertyName: "showWeek", publicName: "showWeek", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
139
+ }
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiDatePicker, decorators: [{
141
+ type: Directive
142
+ }] });
143
+
144
+ /**
145
+ * @deprecated: work in progress, do not use!
146
+ */
147
+ class TuiCalendarComponent extends TuiDatePicker {
148
+ constructor() {
149
+ super(...arguments);
150
+ this.carousel = viewChild(TuiCarouselComponent);
151
+ this.content = computed(() => (c) => this.i18n()[c.$implicit.month]);
152
+ this.years = computed((value = this.value()) => value instanceof TuiDayRange
153
+ ? Array.from({ length: value.to.year - value.from.year + 1 }, (_, index) => value.from.year + index)
154
+ : Array.from(new Set(coerceArray(value ?? []).map(({ year }) => year))));
155
+ this.year = computed(() => Array.from({ length: 12 }, (_, index) => new TuiMonth(this.month().year, index)));
156
+ this.months = computed((value = this.value()) => this.year().filter((month) => value instanceof TuiDayRange
157
+ ? value.monthInRange(month)
158
+ : coerceArray(value ?? []).some((day) => day.monthSame(month))));
159
+ this.button = computed(() => this.view() === 'day'
160
+ ? `${this.i18n()[this.month().month]} ${this.month().formattedYear}`
161
+ : this.month().formattedYear);
162
+ this.yearMin = computed(() => Math.ceil((this.min().year - this.month().year - 5) / 12));
163
+ this.yearMax = computed(() => Math.floor((this.max().year - this.month().year + 6) / 12));
164
+ this.disabledMonth = computed(() => (month) => month.monthBefore(this.min()) || month.monthAfter(this.max()));
165
+ this.disabledYear = computed(() => (year) => year < this.min().year || year > this.max().year);
166
+ this.start = computed((carousel = this.carousel()) => this.view() === 'month'
167
+ ? this.month().year === this.min().year
168
+ : carousel?.index() === carousel?.min());
169
+ this.end = computed((carousel = this.carousel()) => this.view() === 'month'
170
+ ? this.month().year === this.max().year
171
+ : carousel?.index() === carousel?.max());
172
+ this.index = computed(() => this.month().year * 12 + this.month().month);
173
+ this.view = model('day');
174
+ this.contentMonth = input();
175
+ this.contentYear = input();
176
+ this.showAdjacent = input(this.options.showAdjacent);
177
+ }
178
+ getMonth(index) {
179
+ return new TuiMonth(Math.floor(index / 12), index % 12);
180
+ }
181
+ getItems(initial) {
182
+ return Array.from({ length: 12 }, (_, index) => initial + index);
183
+ }
184
+ onSpin(step) {
185
+ this.carousel()?.[step > 0 ? 'next' : 'prev']();
186
+ if (this.view() === 'month') {
187
+ this.month.update((month) => month.append({ year: step }));
188
+ }
189
+ }
190
+ onYear(year) {
191
+ this.month.update(({ month }) => new TuiMonth(year, month));
192
+ this.view.set('month');
193
+ }
194
+ onMonth(month) {
195
+ this.month.set(month);
196
+ this.view.set('day');
197
+ }
198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiCalendarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiCalendarComponent, isStandalone: true, selector: "tui-calendar[new]", inputs: { view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, contentMonth: { classPropertyName: "contentMonth", publicName: "contentMonth", isSignal: true, isRequired: false, transformFunction: null }, contentYear: { classPropertyName: "contentYear", publicName: "contentYear", isSignal: true, isRequired: false, transformFunction: null }, showAdjacent: { classPropertyName: "showAdjacent", publicName: "showAdjacent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { view: "viewChange" }, providers: [
200
+ tuiAsAuxiliary(TuiCalendarComponent),
201
+ tuiProvide(AbstractTuiCalendar, TuiCalendarComponent),
202
+ tuiButtonOptionsProvider({ size: 'xs', appearance: 'flat' }),
203
+ tuiTextfieldOptionsProvider({ size: signal('m'), cleaner: signal(false) }),
204
+ ], viewQueries: [{ propertyName: "carousel", first: true, predicate: TuiCarouselComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<header class=\"t-header\">\n @if (view() !== 'year') {\n <button\n appearance=\"\"\n tabindex=\"-1\"\n tuiLink\n type=\"button\"\n class=\"t-button\"\n [textContent]=\"button()\"\n [tuiChevron]=\"false\"\n (click)=\"view.set(view() === 'day' ? 'month' : 'year')\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n ></button>\n } @else {\n @let years = month().year + (carousel()?.index() || 0) * 12 - 6 | tuiMapper: getItems;\n <b>{{ years[0] }}-{{ years[years.length - 1] }}</b>\n }\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"start()\"\n [iconStart]=\"icons.decrement\"\n (click)=\"onSpin(-1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[0] }}\n </button>\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"end()\"\n [iconStart]=\"icons.increment\"\n (click)=\"onSpin(1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[1] }}\n </button>\n\n @if (!dropdown?.nativeElement?.matches('input')) {\n <tui-calendar-header [mode]=\"mode()\" />\n }\n</header>\n<tui-elastic-container class=\"t-slides\">\n <section tuiSlides>\n @switch (view()) {\n @case ('day') {\n <tui-carousel\n [index]=\"index()\"\n [max]=\"max().year * 12 + max().month\"\n [min]=\"min().year * 12 + min().month\"\n (indexChange)=\"month.set(getMonth($event))\"\n >\n <tui-month\n *tuiItem=\"let current\"\n class=\"t-calendar\"\n [content]=\"contentDay()\"\n [dayType]=\"dayType()\"\n [disabledItemHandler]=\"disabledDay()\"\n [month]=\"current | tuiMapper: getMonth\"\n [showAdjacent]=\"showAdjacent()\"\n [showWeek]=\"showWeek()\"\n [value]=\"value()\"\n (pick)=\"onDay($event)\"\n />\n </tui-carousel>\n }\n\n @case ('month') {\n <tui-data-grid\n class=\"t-grid\"\n [content]=\"contentMonth() ?? content()\"\n [disabledItemHandler]=\"disabledMonth()\"\n [items]=\"year()\"\n [value]=\"months()\"\n (pick)=\"onMonth($event)\"\n />\n }\n\n @case ('year') {\n <tui-carousel\n [max]=\"yearMax()\"\n [min]=\"yearMin()\"\n >\n <tui-data-grid\n *tuiItem=\"let offset\"\n class=\"t-grid\"\n [content]=\"contentYear()\"\n [disabledItemHandler]=\"disabledYear()\"\n [items]=\"month().year + offset * 12 - 6 | tuiMapper: getItems\"\n [value]=\"years()\"\n (pick)=\"onYear($event)\"\n />\n </tui-carousel>\n }\n }\n </section>\n</tui-elastic-container>\n", styles: [":host{display:block;min-inline-size:calc(20rem * var(--tui-font-scale));flex:1;box-sizing:content-box;overflow:hidden}:host-context(tui-dropdown){inline-size:calc(20rem * var(--tui-font-scale));padding-inline:.5rem}:host-context(tui-dropdown):has([tuiTitle]) .t-calendar{padding-block-end:.5rem}:host-context(tui-dropdown):not(:only-child){box-shadow:0 0 0 1px var(--tui-border-normal)}.t-header{position:relative;display:flex;gap:.25rem;align-items:center;justify-content:flex-end;min-block-size:var(--tui-height-l);padding:0 .75rem;font:var(--tui-typography-ui-l)}.t-header:focus-within{visibility:hidden}.t-header :first-child{margin-inline-end:auto}.t-button{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);font:inherit;font-weight:700;text-decoration:none}@media(hover:hover)and (pointer:fine){.t-button:hover{opacity:var(--tui-disabled-opacity)}}.t-chevron{transform:scaleX(var(--tui-inline))}.t-grid,.t-calendar{padding:0 .5rem 1rem}.t-slides{margin:0 -.5rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiCalendarHeader, selector: "tui-calendar-header", inputs: ["mode"] }, { kind: "component", type: i1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["index", "min", "max"], outputs: ["indexChange"] }, { kind: "directive", type: i2.TuiItem, selector: "[tuiItem]" }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: TuiDataGrid, selector: "tui-data-grid", inputs: ["items", "content", "value", "disabledItemHandler"], outputs: ["pick"] }, { kind: "component", type: TuiElasticContainer, selector: "tui-elastic-container" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }, { kind: "pipe", type: TuiMapperPipe, name: "tuiMapper" }, { kind: "component", type:
205
+ // eslint-disable-next-line @taiga-ui/experience-next/short-tui-imports
206
+ TuiMonthComponent, selector: "tui-month", inputs: ["month", "value", "content", "dayType", "showAdjacent", "showWeek", "disabledItemHandler"], outputs: ["pick"] }, { kind: "directive", type: TuiSlides, selector: "[tuiSlides]", inputs: ["tuiSlides"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
207
+ }
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiCalendarComponent, decorators: [{
209
+ type: Component,
210
+ args: [{ selector: 'tui-calendar[new]', imports: [
211
+ FormsModule,
212
+ TuiButton,
213
+ TuiCalendarHeader,
214
+ TuiCarousel,
215
+ TuiChevron,
216
+ TuiDataGrid,
217
+ TuiElasticContainer,
218
+ TuiLink,
219
+ TuiMapperPipe,
220
+ // eslint-disable-next-line @taiga-ui/experience-next/short-tui-imports
221
+ TuiMonthComponent,
222
+ TuiSlides,
223
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
224
+ tuiAsAuxiliary(TuiCalendarComponent),
225
+ tuiProvide(AbstractTuiCalendar, TuiCalendarComponent),
226
+ tuiButtonOptionsProvider({ size: 'xs', appearance: 'flat' }),
227
+ tuiTextfieldOptionsProvider({ size: signal('m'), cleaner: signal(false) }),
228
+ ], template: "<header class=\"t-header\">\n @if (view() !== 'year') {\n <button\n appearance=\"\"\n tabindex=\"-1\"\n tuiLink\n type=\"button\"\n class=\"t-button\"\n [textContent]=\"button()\"\n [tuiChevron]=\"false\"\n (click)=\"view.set(view() === 'day' ? 'month' : 'year')\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n ></button>\n } @else {\n @let years = month().year + (carousel()?.index() || 0) * 12 - 6 | tuiMapper: getItems;\n <b>{{ years[0] }}-{{ years[years.length - 1] }}</b>\n }\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"start()\"\n [iconStart]=\"icons.decrement\"\n (click)=\"onSpin(-1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[0] }}\n </button>\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"end()\"\n [iconStart]=\"icons.increment\"\n (click)=\"onSpin(1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[1] }}\n </button>\n\n @if (!dropdown?.nativeElement?.matches('input')) {\n <tui-calendar-header [mode]=\"mode()\" />\n }\n</header>\n<tui-elastic-container class=\"t-slides\">\n <section tuiSlides>\n @switch (view()) {\n @case ('day') {\n <tui-carousel\n [index]=\"index()\"\n [max]=\"max().year * 12 + max().month\"\n [min]=\"min().year * 12 + min().month\"\n (indexChange)=\"month.set(getMonth($event))\"\n >\n <tui-month\n *tuiItem=\"let current\"\n class=\"t-calendar\"\n [content]=\"contentDay()\"\n [dayType]=\"dayType()\"\n [disabledItemHandler]=\"disabledDay()\"\n [month]=\"current | tuiMapper: getMonth\"\n [showAdjacent]=\"showAdjacent()\"\n [showWeek]=\"showWeek()\"\n [value]=\"value()\"\n (pick)=\"onDay($event)\"\n />\n </tui-carousel>\n }\n\n @case ('month') {\n <tui-data-grid\n class=\"t-grid\"\n [content]=\"contentMonth() ?? content()\"\n [disabledItemHandler]=\"disabledMonth()\"\n [items]=\"year()\"\n [value]=\"months()\"\n (pick)=\"onMonth($event)\"\n />\n }\n\n @case ('year') {\n <tui-carousel\n [max]=\"yearMax()\"\n [min]=\"yearMin()\"\n >\n <tui-data-grid\n *tuiItem=\"let offset\"\n class=\"t-grid\"\n [content]=\"contentYear()\"\n [disabledItemHandler]=\"disabledYear()\"\n [items]=\"month().year + offset * 12 - 6 | tuiMapper: getItems\"\n [value]=\"years()\"\n (pick)=\"onYear($event)\"\n />\n </tui-carousel>\n }\n }\n </section>\n</tui-elastic-container>\n", styles: [":host{display:block;min-inline-size:calc(20rem * var(--tui-font-scale));flex:1;box-sizing:content-box;overflow:hidden}:host-context(tui-dropdown){inline-size:calc(20rem * var(--tui-font-scale));padding-inline:.5rem}:host-context(tui-dropdown):has([tuiTitle]) .t-calendar{padding-block-end:.5rem}:host-context(tui-dropdown):not(:only-child){box-shadow:0 0 0 1px var(--tui-border-normal)}.t-header{position:relative;display:flex;gap:.25rem;align-items:center;justify-content:flex-end;min-block-size:var(--tui-height-l);padding:0 .75rem;font:var(--tui-typography-ui-l)}.t-header:focus-within{visibility:hidden}.t-header :first-child{margin-inline-end:auto}.t-button{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);font:inherit;font-weight:700;text-decoration:none}@media(hover:hover)and (pointer:fine){.t-button:hover{opacity:var(--tui-disabled-opacity)}}.t-chevron{transform:scaleX(var(--tui-inline))}.t-grid,.t-calendar{padding:0 .5rem 1rem}.t-slides{margin:0 -.5rem}\n"] }]
229
+ }] });
230
+
231
+ /**
232
+ * @deprecated: work in progress, do not use!
233
+ */
234
+ class TuiCalendarMultiComponent extends TuiDatePicker {
235
+ constructor() {
236
+ super(...arguments);
237
+ this.visible = signal({});
238
+ this.carousel = viewChild(TuiCarouselComponent);
239
+ this.scroll = viewChild.required(TuiCarouselComponent, {
240
+ read: ElementRef,
241
+ });
242
+ this.height = computed(() => Math.max(...Object.values(this.visible())));
243
+ this.start = computed((carousel = this.carousel()) => carousel?.index() === carousel?.min());
244
+ this.end = computed((carousel = this.carousel()) => carousel?.index() === carousel?.max());
245
+ this.index = computed(() => this.month().year * 12 + this.month().month);
246
+ this.months = input(2);
247
+ }
248
+ updateMonth(day) {
249
+ this.month.update(({ year, month }) => {
250
+ const updated = new TuiDay(day?.year || year, day?.month || month, 1);
251
+ const limited = updated.dayLimit(this.min(), this.max());
252
+ return Object.keys(this.visible()).includes(limited.toJSON().slice(0, -3))
253
+ ? new TuiMonth(year, month)
254
+ : limited;
255
+ });
256
+ }
257
+ getMonth(index) {
258
+ return new TuiMonth(Math.floor(index / 12), index % 12);
259
+ }
260
+ onSpin(step) {
261
+ const el = this.scroll().nativeElement;
262
+ const sign = el.matches('[dir="rtl"] :scope') ? -1 : 1;
263
+ const left = el.offsetWidth / this.months();
264
+ el.scrollTo({ left: el.scrollLeft + left * sign * step, behavior: 'smooth' });
265
+ }
266
+ onIntersection(visible, month, height) {
267
+ this.visible.update((current) => {
268
+ const { [month.toJSON()]: removed, ...rest } = current;
269
+ return visible ? { ...current, [month.toJSON()]: removed || height } : rest;
270
+ });
271
+ }
272
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiCalendarMultiComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
273
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiCalendarMultiComponent, isStandalone: true, selector: "tui-calendar[months]", inputs: { months: { classPropertyName: "months", publicName: "months", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--t-months": "months()" } }, providers: [
274
+ tuiAsAuxiliary(TuiCalendarMultiComponent),
275
+ tuiProvide(AbstractTuiCalendar, TuiCalendarMultiComponent),
276
+ tuiButtonOptionsProvider({ size: 'xs', appearance: 'flat' }),
277
+ tuiTextfieldOptionsProvider({ size: signal('m'), cleaner: signal(false) }),
278
+ ], viewQueries: [{ propertyName: "carousel", first: true, predicate: TuiCarouselComponent, descendants: true, isSignal: true }, { propertyName: "scroll", first: true, predicate: TuiCarouselComponent, descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<header class=\"t-buttons\">\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"start()\"\n [iconStart]=\"icons.decrement\"\n (click)=\"onSpin(-1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[0] }}\n </button>\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"end()\"\n [iconStart]=\"icons.increment\"\n (click)=\"onSpin(1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[1] }}\n </button>\n\n @if (!dropdown?.nativeElement?.matches('input')) {\n <tui-calendar-header [mode]=\"mode()\" />\n }\n</header>\n<section\n tuiSlides\n class=\"t-slides\"\n>\n <tui-carousel\n [index]=\"index()\"\n [max]=\"max().year * 12 + max().month\"\n [min]=\"min().year * 12 + min().month\"\n [style.max-block-size.px]=\"height()\"\n (indexChange)=\"month.set(getMonth(index() + ($event - index()) * months()))\"\n >\n <ng-container *tuiItem=\"let current\">\n @for (_ of '-'.repeat(months()); track $index) {\n @let month = index() + (current - index()) * months() + $index | tuiMapper: getMonth;\n <div\n #el\n class=\"t-calendar\"\n >\n <div class=\"t-header\">{{ i18n()[month.month] }} {{ month.year }}</div>\n <tui-month\n [content]=\"contentDay()\"\n [dayType]=\"dayType()\"\n [disabledItemHandler]=\"disabledDay()\"\n [month]=\"month\"\n [showAdjacent]=\"false\"\n [showWeek]=\"showWeek()\"\n [value]=\"value()\"\n (pick)=\"onDay($event)\"\n (waIntersectionObservee)=\"onIntersection(!!$event[0]?.isIntersecting, month, el.offsetHeight)\"\n />\n </div>\n }\n </ng-container>\n </tui-carousel>\n</section>\n", styles: [":host{position:relative;display:block;inline-size:calc(20rem * var(--tui-font-scale) * var(--t-months));min-inline-size:calc(20rem * var(--tui-font-scale) * var(--t-months));flex:1;box-sizing:content-box}:host-context(tui-dropdown){padding:.5rem}:host-context(tui-dropdown):not(:only-child){box-shadow:0 0 0 1px var(--tui-border-normal)}.t-header{position:relative;display:flex;gap:.25rem;align-items:center;justify-content:center;padding:.5rem .25rem 1rem;font:var(--tui-typography-ui-l);font-weight:700}.t-chevron{transform:scaleX(var(--tui-inline))}.t-slides{margin:0 -.5rem}.t-calendar{inline-size:100%;align-self:flex-start;scroll-snap-align:start;scroll-snap-stop:always;padding:0 .5rem}.t-buttons{position:absolute;inset:0 0 auto;z-index:1;display:flex;justify-content:space-between;padding:.5rem .25rem}.t-buttons:focus-within{visibility:hidden}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiCalendarHeader, selector: "tui-calendar-header", inputs: ["mode"] }, { kind: "component", type: i1.TuiCarouselComponent, selector: "tui-carousel", inputs: ["index", "min", "max"], outputs: ["indexChange"] }, { kind: "directive", type: i2.TuiItem, selector: "[tuiItem]" }, { kind: "pipe", type: TuiMapperPipe, name: "tuiMapper" }, { kind: "component", type:
279
+ // eslint-disable-next-line @taiga-ui/experience-next/short-tui-imports
280
+ TuiMonthComponent, selector: "tui-month", inputs: ["month", "value", "content", "dayType", "showAdjacent", "showWeek", "disabledItemHandler"], outputs: ["pick"] }, { kind: "directive", type: TuiSlides, selector: "[tuiSlides]", inputs: ["tuiSlides"] }, { kind: "directive", type: WaIntersectionObservee, selector: "[waIntersectionObservee]", outputs: ["waIntersectionObservee"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
281
+ }
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiCalendarMultiComponent, decorators: [{
283
+ type: Component,
284
+ args: [{ selector: 'tui-calendar[months]', imports: [
285
+ FormsModule,
286
+ TuiButton,
287
+ TuiCalendarHeader,
288
+ TuiCarousel,
289
+ TuiMapperPipe,
290
+ // eslint-disable-next-line @taiga-ui/experience-next/short-tui-imports
291
+ TuiMonthComponent,
292
+ TuiSlides,
293
+ WaIntersectionObservee,
294
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
295
+ tuiAsAuxiliary(TuiCalendarMultiComponent),
296
+ tuiProvide(AbstractTuiCalendar, TuiCalendarMultiComponent),
297
+ tuiButtonOptionsProvider({ size: 'xs', appearance: 'flat' }),
298
+ tuiTextfieldOptionsProvider({ size: signal('m'), cleaner: signal(false) }),
299
+ ], host: { '[style.--t-months]': 'months()' }, template: "<header class=\"t-buttons\">\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"start()\"\n [iconStart]=\"icons.decrement\"\n (click)=\"onSpin(-1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[0] }}\n </button>\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"end()\"\n [iconStart]=\"icons.increment\"\n (click)=\"onSpin(1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[1] }}\n </button>\n\n @if (!dropdown?.nativeElement?.matches('input')) {\n <tui-calendar-header [mode]=\"mode()\" />\n }\n</header>\n<section\n tuiSlides\n class=\"t-slides\"\n>\n <tui-carousel\n [index]=\"index()\"\n [max]=\"max().year * 12 + max().month\"\n [min]=\"min().year * 12 + min().month\"\n [style.max-block-size.px]=\"height()\"\n (indexChange)=\"month.set(getMonth(index() + ($event - index()) * months()))\"\n >\n <ng-container *tuiItem=\"let current\">\n @for (_ of '-'.repeat(months()); track $index) {\n @let month = index() + (current - index()) * months() + $index | tuiMapper: getMonth;\n <div\n #el\n class=\"t-calendar\"\n >\n <div class=\"t-header\">{{ i18n()[month.month] }} {{ month.year }}</div>\n <tui-month\n [content]=\"contentDay()\"\n [dayType]=\"dayType()\"\n [disabledItemHandler]=\"disabledDay()\"\n [month]=\"month\"\n [showAdjacent]=\"false\"\n [showWeek]=\"showWeek()\"\n [value]=\"value()\"\n (pick)=\"onDay($event)\"\n (waIntersectionObservee)=\"onIntersection(!!$event[0]?.isIntersecting, month, el.offsetHeight)\"\n />\n </div>\n }\n </ng-container>\n </tui-carousel>\n</section>\n", styles: [":host{position:relative;display:block;inline-size:calc(20rem * var(--tui-font-scale) * var(--t-months));min-inline-size:calc(20rem * var(--tui-font-scale) * var(--t-months));flex:1;box-sizing:content-box}:host-context(tui-dropdown){padding:.5rem}:host-context(tui-dropdown):not(:only-child){box-shadow:0 0 0 1px var(--tui-border-normal)}.t-header{position:relative;display:flex;gap:.25rem;align-items:center;justify-content:center;padding:.5rem .25rem 1rem;font:var(--tui-typography-ui-l);font-weight:700}.t-chevron{transform:scaleX(var(--tui-inline))}.t-slides{margin:0 -.5rem}.t-calendar{inline-size:100%;align-self:flex-start;scroll-snap-align:start;scroll-snap-stop:always;padding:0 .5rem}.t-buttons{position:absolute;inset:0 0 auto;z-index:1;display:flex;justify-content:space-between;padding:.5rem .25rem}.t-buttons:focus-within{visibility:hidden}\n"] }]
300
+ }] });
301
+
302
+ const TuiCalendar = [TuiCalendarComponent, TuiCalendarMultiComponent];
303
+
304
+ /**
305
+ * Generated bundle index. Do not edit.
306
+ */
307
+
308
+ export { TuiCalendar, TuiCalendarComponent, TuiCalendarHeader, TuiCalendarMultiComponent, TuiDatePicker };
309
+ //# sourceMappingURL=taiga-ui-experimental-components-calendar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-experimental-components-calendar.mjs","sources":["../../../projects/experimental/components/calendar/calendar-header.component.ts","../../../projects/experimental/components/calendar/date-picker.ts","../../../projects/experimental/components/calendar/calendar.component.ts","../../../projects/experimental/components/calendar/calendar.component.html","../../../projects/experimental/components/calendar/calendar-multi.component.ts","../../../projects/experimental/components/calendar/calendar-multi.component.html","../../../projects/experimental/components/calendar/calendar.ts","../../../projects/experimental/components/calendar/taiga-ui-experimental-components-calendar.ts"],"sourcesContent":["import {ChangeDetectionStrategy, Component, inject, input} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {AbstractTuiCalendar} from '@taiga-ui/core/components/calendar';\nimport {TUI_DROPDOWN_HOST} from '@taiga-ui/core/portals/dropdown';\nimport {\n TuiInputDate,\n tuiInputDateOptionsProvider,\n} from '@taiga-ui/kit/components/input-date';\nimport {TuiInputDateMulti} from '@taiga-ui/kit/components/input-date-multi';\nimport {TuiInputDateRange} from '@taiga-ui/kit/components/input-date-range';\n\n@Component({\n selector: 'tui-calendar-header',\n imports: [FormsModule, TuiInputDate, TuiInputDateMulti, TuiInputDateRange],\n template: `\n @switch (mode()) {\n @case ('multi') {\n <tui-textfield multi>\n <input\n tuiInputDateMulti\n [attr.aria-labelledby]=\"dropdown?.nativeElement?.id || null\"\n [max]=\"picker.max()\"\n [min]=\"picker.min()\"\n [(ngModel)]=\"picker.value\"\n />\n </tui-textfield>\n }\n @case ('range') {\n <tui-textfield>\n <input\n tuiInputDateRange\n [attr.aria-labelledby]=\"dropdown?.nativeElement?.id || null\"\n [max]=\"picker.max()\"\n [min]=\"picker.min()\"\n [(ngModel)]=\"picker.value\"\n />\n </tui-textfield>\n }\n @default {\n <tui-textfield>\n <input\n tuiInputDate\n [attr.aria-labelledby]=\"dropdown?.nativeElement?.id || null\"\n [max]=\"picker.max()\"\n [min]=\"picker.min()\"\n [(ngModel)]=\"picker.value\"\n />\n </tui-textfield>\n }\n }\n `,\n styles: `\n :host {\n position: absolute;\n inset: 0.125rem;\n opacity: 0;\n pointer-events: none;\n visibility: visible;\n\n &:focus-within {\n opacity: 1;\n pointer-events: auto;\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiInputDateOptionsProvider({icon: ''})],\n})\nexport class TuiCalendarHeader {\n protected readonly picker = inject(AbstractTuiCalendar);\n protected readonly dropdown = inject(TUI_DROPDOWN_HOST, {optional: true});\n\n public readonly mode = input<'multi' | 'range' | 'single'>();\n}\n","import {coerceArray} from '@angular/cdk/coercion';\nimport {computed, Directive, effect, inject, input, untracked} from '@angular/core';\nimport {TuiDay, TuiDayRange} from '@taiga-ui/cdk/date-time';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiArrayToggle} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {AbstractTuiCalendar} from '@taiga-ui/core/components/calendar';\nimport {TUI_DROPDOWN_HOST} from '@taiga-ui/core/portals/dropdown';\nimport {TUI_COMMON_ICONS, TUI_MONTHS, TUI_SPIN_TEXTS} from '@taiga-ui/core/tokens';\nimport {TUI_MONTH_OPTIONS} from '@taiga-ui/experimental/components/month';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\ntype DatePicker<T> = T extends 'single'\n ? TuiDay\n : T extends 'multi'\n ? readonly TuiDay[]\n : TuiDayRange;\n\n@Directive()\nexport abstract class TuiDatePicker<\n T extends 'multi' | 'range' | 'single',\n> extends AbstractTuiCalendar<DatePicker<T>> {\n protected readonly options = inject(TUI_MONTH_OPTIONS);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly dropdown = inject(TUI_DROPDOWN_HOST, {optional: true});\n protected readonly texts = inject(TUI_SPIN_TEXTS);\n protected readonly i18n = inject(TUI_MONTHS);\n protected readonly disabledDay = computed(\n () => (day: TuiDay) =>\n day < this.min() || day > this.max() || this.disabledItemHandler()(day),\n );\n\n protected readonly sync = effect(() => {\n const value = this.value();\n const [day] = value instanceof TuiDayRange ? [value.from] : coerceArray(value);\n\n this.min();\n this.max();\n\n if (!day || day.year < 9000) {\n untracked(() => this.updateMonth(day));\n }\n });\n\n public readonly mode = input<T>();\n public readonly contentDay = input<PolymorpheusContent<TuiContext<TuiDay>>>();\n public readonly dayType = input(this.options.dayType);\n public readonly showWeek = input(this.options.showWeek);\n\n protected updateMonth(day?: TuiDay | null): void {\n this.month.update(({month, year}) =>\n (day || new TuiDay(year, month, 1)).dayLimit(this.min(), this.max()),\n );\n }\n\n protected onDay(day: TuiDay): void {\n if (this.mode() === 'range') {\n this.value.update((value): any =>\n value instanceof TuiDayRange && value.from === value.to\n ? TuiDayRange.sort(value.to, day.append({}))\n : new TuiDayRange(day, day),\n );\n } else if (this.mode() === 'multi') {\n this.value.update((value): any =>\n Array.isArray(value)\n ? tuiArrayToggle(value, day, (a: TuiDay, b: TuiDay) => a.daySame(b))\n : [day],\n );\n } else {\n this.value.set(day as any);\n }\n }\n}\n","import {coerceArray} from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {type TuiDay, TuiDayRange, TuiMonth} from '@taiga-ui/cdk/date-time';\nimport {TuiMapperPipe} from '@taiga-ui/cdk/pipes/mapper';\nimport {type TuiBooleanHandler, type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\nimport {TuiButton, tuiButtonOptionsProvider} from '@taiga-ui/core/components/button';\nimport {AbstractTuiCalendar} from '@taiga-ui/core/components/calendar';\nimport {TuiCarousel, TuiCarouselComponent} from '@taiga-ui/core/components/carousel';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {tuiTextfieldOptionsProvider} from '@taiga-ui/core/components/textfield';\nimport {tuiAsAuxiliary} from '@taiga-ui/core/tokens';\nimport {TuiDataGrid} from '@taiga-ui/experimental/components/data-grid';\nimport {TuiMonthComponent} from '@taiga-ui/experimental/components/month';\nimport {TuiChevron} from '@taiga-ui/kit/directives/chevron';\nimport {TuiElasticContainer} from '@taiga-ui/layout/components/elastic-container';\nimport {TuiSlides} from '@taiga-ui/layout/components/slides';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nimport {TuiCalendarHeader} from './calendar-header.component';\nimport {TuiDatePicker} from './date-picker';\n\n/**\n * @deprecated: work in progress, do not use!\n */\n@Component({\n selector: 'tui-calendar[new]',\n imports: [\n FormsModule,\n TuiButton,\n TuiCalendarHeader,\n TuiCarousel,\n TuiChevron,\n TuiDataGrid,\n TuiElasticContainer,\n TuiLink,\n TuiMapperPipe,\n // eslint-disable-next-line @taiga-ui/experience-next/short-tui-imports\n TuiMonthComponent,\n TuiSlides,\n ],\n templateUrl: './calendar.component.html',\n styleUrl: './calendar.component.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n tuiAsAuxiliary(TuiCalendarComponent),\n tuiProvide(AbstractTuiCalendar, TuiCalendarComponent),\n tuiButtonOptionsProvider({size: 'xs', appearance: 'flat'}),\n tuiTextfieldOptionsProvider({size: signal('m'), cleaner: signal(false)}),\n ],\n})\nexport class TuiCalendarComponent<\n T extends 'multi' | 'range' | 'single',\n> extends TuiDatePicker<T> {\n protected readonly carousel = viewChild(TuiCarouselComponent);\n protected readonly content = computed<PolymorpheusContent<TuiContext<TuiMonth>>>(\n () => (c) => this.i18n()[c.$implicit.month],\n );\n\n protected readonly years = computed((value = this.value()) =>\n value instanceof TuiDayRange\n ? Array.from(\n {length: value.to.year - value.from.year + 1},\n (_, index) => value.from.year + index,\n )\n : Array.from(new Set(coerceArray<TuiDay>(value ?? []).map(({year}) => year))),\n );\n\n protected readonly year = computed(() =>\n Array.from({length: 12}, (_, index) => new TuiMonth(this.month().year, index)),\n );\n\n protected readonly months = computed((value = this.value()) =>\n this.year().filter((month) =>\n value instanceof TuiDayRange\n ? value.monthInRange(month)\n : coerceArray<TuiDay>(value ?? []).some((day) => day.monthSame(month)),\n ),\n );\n\n protected readonly button = computed(() =>\n this.view() === 'day'\n ? `${this.i18n()[this.month().month]} ${this.month().formattedYear}`\n : this.month().formattedYear,\n );\n\n protected readonly yearMin = computed(() =>\n Math.ceil((this.min().year - this.month().year - 5) / 12),\n );\n\n protected readonly yearMax = computed(() =>\n Math.floor((this.max().year - this.month().year + 6) / 12),\n );\n\n protected readonly disabledMonth = computed<TuiBooleanHandler<TuiMonth>>(\n () => (month) => month.monthBefore(this.min()) || month.monthAfter(this.max()),\n );\n\n protected readonly disabledYear = computed(\n () => (year: number) => year < this.min().year || year > this.max().year,\n );\n\n protected readonly start = computed((carousel = this.carousel()) =>\n this.view() === 'month'\n ? this.month().year === this.min().year\n : carousel?.index() === carousel?.min(),\n );\n\n protected readonly end = computed((carousel = this.carousel()) =>\n this.view() === 'month'\n ? this.month().year === this.max().year\n : carousel?.index() === carousel?.max(),\n );\n\n protected readonly index = computed(\n () => this.month().year * 12 + this.month().month,\n );\n\n public readonly view = model<'day' | 'month' | 'year'>('day');\n public readonly contentMonth = input<PolymorpheusContent<TuiContext<TuiMonth>>>();\n public readonly contentYear = input<PolymorpheusContent<TuiContext<number>>>();\n public readonly showAdjacent = input(this.options.showAdjacent);\n\n protected getMonth(index: number): TuiMonth {\n return new TuiMonth(Math.floor(index / 12), index % 12);\n }\n\n protected getItems(initial: number): readonly number[] {\n return Array.from({length: 12}, (_, index) => initial + index);\n }\n\n protected onSpin(step: number): void {\n this.carousel()?.[step > 0 ? 'next' : 'prev']();\n\n if (this.view() === 'month') {\n this.month.update((month) => month.append({year: step}));\n }\n }\n\n protected onYear(year: number): void {\n this.month.update(({month}) => new TuiMonth(year, month));\n this.view.set('month');\n }\n\n protected onMonth(month: TuiMonth): void {\n this.month.set(month);\n this.view.set('day');\n }\n}\n","<header class=\"t-header\">\n @if (view() !== 'year') {\n <button\n appearance=\"\"\n tabindex=\"-1\"\n tuiLink\n type=\"button\"\n class=\"t-button\"\n [textContent]=\"button()\"\n [tuiChevron]=\"false\"\n (click)=\"view.set(view() === 'day' ? 'month' : 'year')\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n ></button>\n } @else {\n @let years = month().year + (carousel()?.index() || 0) * 12 - 6 | tuiMapper: getItems;\n <b>{{ years[0] }}-{{ years[years.length - 1] }}</b>\n }\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"start()\"\n [iconStart]=\"icons.decrement\"\n (click)=\"onSpin(-1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[0] }}\n </button>\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"end()\"\n [iconStart]=\"icons.increment\"\n (click)=\"onSpin(1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[1] }}\n </button>\n\n @if (!dropdown?.nativeElement?.matches('input')) {\n <tui-calendar-header [mode]=\"mode()\" />\n }\n</header>\n<tui-elastic-container class=\"t-slides\">\n <section tuiSlides>\n @switch (view()) {\n @case ('day') {\n <tui-carousel\n [index]=\"index()\"\n [max]=\"max().year * 12 + max().month\"\n [min]=\"min().year * 12 + min().month\"\n (indexChange)=\"month.set(getMonth($event))\"\n >\n <tui-month\n *tuiItem=\"let current\"\n class=\"t-calendar\"\n [content]=\"contentDay()\"\n [dayType]=\"dayType()\"\n [disabledItemHandler]=\"disabledDay()\"\n [month]=\"current | tuiMapper: getMonth\"\n [showAdjacent]=\"showAdjacent()\"\n [showWeek]=\"showWeek()\"\n [value]=\"value()\"\n (pick)=\"onDay($event)\"\n />\n </tui-carousel>\n }\n\n @case ('month') {\n <tui-data-grid\n class=\"t-grid\"\n [content]=\"contentMonth() ?? content()\"\n [disabledItemHandler]=\"disabledMonth()\"\n [items]=\"year()\"\n [value]=\"months()\"\n (pick)=\"onMonth($event)\"\n />\n }\n\n @case ('year') {\n <tui-carousel\n [max]=\"yearMax()\"\n [min]=\"yearMin()\"\n >\n <tui-data-grid\n *tuiItem=\"let offset\"\n class=\"t-grid\"\n [content]=\"contentYear()\"\n [disabledItemHandler]=\"disabledYear()\"\n [items]=\"month().year + offset * 12 - 6 | tuiMapper: getItems\"\n [value]=\"years()\"\n (pick)=\"onYear($event)\"\n />\n </tui-carousel>\n }\n }\n </section>\n</tui-elastic-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {WaIntersectionObservee} from '@ng-web-apis/intersection-observer';\nimport {TuiDay, TuiMonth} from '@taiga-ui/cdk/date-time';\nimport {TuiMapperPipe} from '@taiga-ui/cdk/pipes/mapper';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\nimport {TuiButton, tuiButtonOptionsProvider} from '@taiga-ui/core/components/button';\nimport {AbstractTuiCalendar} from '@taiga-ui/core/components/calendar';\nimport {TuiCarousel, TuiCarouselComponent} from '@taiga-ui/core/components/carousel';\nimport {tuiTextfieldOptionsProvider} from '@taiga-ui/core/components/textfield';\nimport {tuiAsAuxiliary} from '@taiga-ui/core/tokens';\nimport {TuiMonthComponent} from '@taiga-ui/experimental/components/month';\nimport {TuiSlides} from '@taiga-ui/layout/components/slides';\n\nimport {TuiCalendarHeader} from './calendar-header.component';\nimport {TuiDatePicker} from './date-picker';\n\n/**\n * @deprecated: work in progress, do not use!\n */\n@Component({\n selector: 'tui-calendar[months]',\n imports: [\n FormsModule,\n TuiButton,\n TuiCalendarHeader,\n TuiCarousel,\n TuiMapperPipe,\n // eslint-disable-next-line @taiga-ui/experience-next/short-tui-imports\n TuiMonthComponent,\n TuiSlides,\n WaIntersectionObservee,\n ],\n templateUrl: './calendar-multi.component.html',\n styleUrl: './calendar-multi.component.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n tuiAsAuxiliary(TuiCalendarMultiComponent),\n tuiProvide(AbstractTuiCalendar, TuiCalendarMultiComponent),\n tuiButtonOptionsProvider({size: 'xs', appearance: 'flat'}),\n tuiTextfieldOptionsProvider({size: signal('m'), cleaner: signal(false)}),\n ],\n host: {'[style.--t-months]': 'months()'},\n})\nexport class TuiCalendarMultiComponent<\n T extends 'multi' | 'range' | 'single',\n> extends TuiDatePicker<T> {\n protected readonly visible = signal<Record<string, number>>({});\n protected readonly carousel = viewChild(TuiCarouselComponent);\n protected readonly scroll = viewChild.required(TuiCarouselComponent, {\n read: ElementRef,\n });\n\n protected readonly height = computed(() =>\n Math.max(...Object.values(this.visible())),\n );\n\n protected readonly start = computed(\n (carousel = this.carousel()) => carousel?.index() === carousel?.min(),\n );\n\n protected readonly end = computed(\n (carousel = this.carousel()) => carousel?.index() === carousel?.max(),\n );\n\n protected readonly index = computed(\n () => this.month().year * 12 + this.month().month,\n );\n\n public readonly months = input<1 | 2 | 3>(2);\n\n protected override updateMonth(day?: TuiDay | null): void {\n this.month.update(({year, month}) => {\n const updated = new TuiDay(day?.year || year, day?.month || month, 1);\n const limited = updated.dayLimit(this.min(), this.max());\n\n return Object.keys(this.visible()).includes(limited.toJSON().slice(0, -3))\n ? new TuiMonth(year, month)\n : limited;\n });\n }\n\n protected getMonth(index: number): TuiMonth {\n return new TuiMonth(Math.floor(index / 12), index % 12);\n }\n\n protected onSpin(step: number): void {\n const el: HTMLElement = this.scroll().nativeElement;\n const sign = el.matches('[dir=\"rtl\"] :scope') ? -1 : 1;\n const left = el.offsetWidth / this.months();\n\n el.scrollTo({left: el.scrollLeft + left * sign * step, behavior: 'smooth'});\n }\n\n protected onIntersection(visible: boolean, month: TuiMonth, height: number): void {\n this.visible.update((current) => {\n const {[month.toJSON()]: removed, ...rest} = current;\n\n return visible ? {...current, [month.toJSON()]: removed || height} : rest;\n });\n }\n}\n","<header class=\"t-buttons\">\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"start()\"\n [iconStart]=\"icons.decrement\"\n (click)=\"onSpin(-1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[0] }}\n </button>\n <button\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-chevron\"\n [disabled]=\"end()\"\n [iconStart]=\"icons.increment\"\n (click)=\"onSpin(1)\"\n (pointerdown.zoneless.prevent)=\"(0)\"\n >\n {{ texts()[1] }}\n </button>\n\n @if (!dropdown?.nativeElement?.matches('input')) {\n <tui-calendar-header [mode]=\"mode()\" />\n }\n</header>\n<section\n tuiSlides\n class=\"t-slides\"\n>\n <tui-carousel\n [index]=\"index()\"\n [max]=\"max().year * 12 + max().month\"\n [min]=\"min().year * 12 + min().month\"\n [style.max-block-size.px]=\"height()\"\n (indexChange)=\"month.set(getMonth(index() + ($event - index()) * months()))\"\n >\n <ng-container *tuiItem=\"let current\">\n @for (_ of '-'.repeat(months()); track $index) {\n @let month = index() + (current - index()) * months() + $index | tuiMapper: getMonth;\n <div\n #el\n class=\"t-calendar\"\n >\n <div class=\"t-header\">{{ i18n()[month.month] }} {{ month.year }}</div>\n <tui-month\n [content]=\"contentDay()\"\n [dayType]=\"dayType()\"\n [disabledItemHandler]=\"disabledDay()\"\n [month]=\"month\"\n [showAdjacent]=\"false\"\n [showWeek]=\"showWeek()\"\n [value]=\"value()\"\n (pick)=\"onDay($event)\"\n (waIntersectionObservee)=\"onIntersection(!!$event[0]?.isIntersecting, month, el.offsetHeight)\"\n />\n </div>\n }\n </ng-container>\n </tui-carousel>\n</section>\n","import {TuiCalendarComponent} from './calendar.component';\nimport {TuiCalendarMultiComponent} from './calendar-multi.component';\n\nexport const TuiCalendar = [TuiCalendarComponent, TuiCalendarMultiComponent] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -16,11 +16,11 @@ class TuiDataGrid {
16
16
  this.disabledItemHandler = input(TUI_FALSE_HANDLER);
17
17
  }
18
18
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiDataGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiDataGrid, isStandalone: true, selector: "tui-data-grid", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabledItemHandler: { classPropertyName: "disabledItemHandler", publicName: "disabledItemHandler", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pick: "pick" }, ngImport: i0, template: "@for (item of items(); track item) {\n <button\n type=\"button\"\n class=\"t-item\"\n [class.t-item_active]=\"value().includes(item)\"\n [disabled]=\"disabledItemHandler()(item)\"\n (click)=\"pick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"content() || `${item}` as text; context: {$implicit: item}\">\n {{ text }}\n </ng-container>\n </button>\n}\n", styles: [":host{display:grid;inline-size:100%;grid-template-columns:repeat(3,calc(33% - .625rem));gap:1rem .5rem;place-content:center;box-sizing:border-box}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);display:block;block-size:2.5rem;min-inline-size:0;border-radius:10rem;border:none;background:var(--tui-background-neutral-1);color:var(--tui-text-primary);font:var(--tui-typography-ui-s);white-space:nowrap}.t-item ::ng-deep [tuiTitle]{gap:.125rem;text-align:center}.t-item ::ng-deep [tuiTitle] [tuiSubtitle]{color:var(--tui-text-secondary);font:var(--tui-typography-ui-xs)}.t-item:disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-item_active{background:var(--tui-background-accent-2);color:var(--tui-text-primary-on-accent-2)}.t-item_active ::ng-deep [tuiTitle] [tuiSubtitle]{color:inherit}@media(hover:hover)and (pointer:fine){.t-item:hover{background:var(--tui-background-neutral-1-hover);cursor:pointer}.t-item_active:hover{background:var(--tui-background-accent-2-hover)}}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TuiDataGrid, isStandalone: true, selector: "tui-data-grid", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabledItemHandler: { classPropertyName: "disabledItemHandler", publicName: "disabledItemHandler", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pick: "pick" }, ngImport: i0, template: "@for (item of items(); track item) {\n <button\n type=\"button\"\n class=\"t-item\"\n [class.t-item_active]=\"value().includes(item)\"\n [disabled]=\"disabledItemHandler()(item)\"\n (click)=\"pick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"content() || `${item}` as text; context: {$implicit: item}\">\n {{ text }}\n </ng-container>\n </button>\n}\n", styles: [":host{display:grid;inline-size:100%;grid-template-columns:repeat(3,calc(33% - .625rem));gap:1rem .5rem;font:var(--tui-typography-body-m);place-content:center;box-sizing:border-box}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);display:block;block-size:2.5rem;min-inline-size:0;border-radius:10rem;border:none;background:var(--tui-background-neutral-1);color:var(--tui-text-primary);font:inherit;white-space:nowrap}.t-item ::ng-deep [tuiTitle]{gap:.125rem;text-align:center}.t-item ::ng-deep [tuiTitle] [tuiSubtitle]{color:var(--tui-text-secondary);font:var(--tui-typography-ui-xs)}.t-item:disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-item_active{background:var(--tui-background-accent-2);color:var(--tui-text-primary-on-accent-2)}.t-item_active ::ng-deep [tuiTitle] [tuiSubtitle]{color:inherit}@media(hover:hover)and (pointer:fine){.t-item:hover{background:var(--tui-background-neutral-1-hover);cursor:pointer}.t-item_active:hover{background:var(--tui-background-accent-2-hover)}}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
20
20
  }
21
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiDataGrid, decorators: [{
22
22
  type: Component,
23
- args: [{ selector: 'tui-data-grid', imports: [PolymorpheusOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (item of items(); track item) {\n <button\n type=\"button\"\n class=\"t-item\"\n [class.t-item_active]=\"value().includes(item)\"\n [disabled]=\"disabledItemHandler()(item)\"\n (click)=\"pick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"content() || `${item}` as text; context: {$implicit: item}\">\n {{ text }}\n </ng-container>\n </button>\n}\n", styles: [":host{display:grid;inline-size:100%;grid-template-columns:repeat(3,calc(33% - .625rem));gap:1rem .5rem;place-content:center;box-sizing:border-box}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);display:block;block-size:2.5rem;min-inline-size:0;border-radius:10rem;border:none;background:var(--tui-background-neutral-1);color:var(--tui-text-primary);font:var(--tui-typography-ui-s);white-space:nowrap}.t-item ::ng-deep [tuiTitle]{gap:.125rem;text-align:center}.t-item ::ng-deep [tuiTitle] [tuiSubtitle]{color:var(--tui-text-secondary);font:var(--tui-typography-ui-xs)}.t-item:disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-item_active{background:var(--tui-background-accent-2);color:var(--tui-text-primary-on-accent-2)}.t-item_active ::ng-deep [tuiTitle] [tuiSubtitle]{color:inherit}@media(hover:hover)and (pointer:fine){.t-item:hover{background:var(--tui-background-neutral-1-hover);cursor:pointer}.t-item_active:hover{background:var(--tui-background-accent-2-hover)}}\n"] }]
23
+ args: [{ selector: 'tui-data-grid', imports: [PolymorpheusOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (item of items(); track item) {\n <button\n type=\"button\"\n class=\"t-item\"\n [class.t-item_active]=\"value().includes(item)\"\n [disabled]=\"disabledItemHandler()(item)\"\n (click)=\"pick.emit(item)\"\n >\n <ng-container *polymorpheusOutlet=\"content() || `${item}` as text; context: {$implicit: item}\">\n {{ text }}\n </ng-container>\n </button>\n}\n", styles: [":host{display:grid;inline-size:100%;grid-template-columns:repeat(3,calc(33% - .625rem));gap:1rem .5rem;font:var(--tui-typography-body-m);place-content:center;box-sizing:border-box}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:var(--tui-curve-productive-standard);display:block;block-size:2.5rem;min-inline-size:0;border-radius:10rem;border:none;background:var(--tui-background-neutral-1);color:var(--tui-text-primary);font:inherit;white-space:nowrap}.t-item ::ng-deep [tuiTitle]{gap:.125rem;text-align:center}.t-item ::ng-deep [tuiTitle] [tuiSubtitle]{color:var(--tui-text-secondary);font:var(--tui-typography-ui-xs)}.t-item:disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}.t-item_active{background:var(--tui-background-accent-2);color:var(--tui-text-primary-on-accent-2)}.t-item_active ::ng-deep [tuiTitle] [tuiSubtitle]{color:inherit}@media(hover:hover)and (pointer:fine){.t-item:hover{background:var(--tui-background-neutral-1-hover);cursor:pointer}.t-item_active:hover{background:var(--tui-background-accent-2-hover)}}\n"] }]
24
24
  }] });
25
25
 
26
26
  /**