@taiga-ui/addon-mobile 4.52.0-canary.a59c4d0 → 4.52.0-canary.bf9131e

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 (26) hide show
  1. package/components/mobile-calendar/mobile-calendar.component.d.ts +4 -4
  2. package/components/sheet-dialog/sheet-dialog.directive.d.ts +4 -3
  3. package/components/sheet-dialog/sheet-dialog.service.d.ts +9 -4
  4. package/directives/dropdown-mobile/dropdown-mobile.component.d.ts +8 -2
  5. package/directives/dropdown-mobile/dropdown-mobile.directive.d.ts +1 -2
  6. package/directives/dropdown-sheet/dropdown-sheet.component.d.ts +14 -0
  7. package/directives/dropdown-sheet/dropdown-sheet.directive.d.ts +6 -0
  8. package/directives/dropdown-sheet/index.d.ts +2 -0
  9. package/directives/index.d.ts +1 -0
  10. package/fesm2022/taiga-ui-addon-mobile-components-bottom-sheet.mjs +2 -2
  11. package/fesm2022/taiga-ui-addon-mobile-components-bottom-sheet.mjs.map +1 -1
  12. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar.mjs +8 -8
  13. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar.mjs.map +1 -1
  14. package/fesm2022/taiga-ui-addon-mobile-components-pull-to-refresh.mjs +1 -1
  15. package/fesm2022/taiga-ui-addon-mobile-components-pull-to-refresh.mjs.map +1 -1
  16. package/fesm2022/taiga-ui-addon-mobile-components-sheet-dialog.mjs +38 -26
  17. package/fesm2022/taiga-ui-addon-mobile-components-sheet-dialog.mjs.map +1 -1
  18. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-mobile.mjs +17 -60
  19. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-mobile.mjs.map +1 -1
  20. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-sheet.mjs +83 -0
  21. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-sheet.mjs.map +1 -0
  22. package/fesm2022/taiga-ui-addon-mobile-directives.mjs +1 -0
  23. package/fesm2022/taiga-ui-addon-mobile-directives.mjs.map +1 -1
  24. package/package.json +5 -1
  25. package/styles/common/chip.less +0 -20
  26. package/directives/dropdown-mobile/dropdown-mobile-wrapper.component.d.ts +0 -20
@@ -17,11 +17,11 @@ export declare class TuiMobileCalendar implements AfterViewInit {
17
17
  protected readonly isIOS: boolean;
18
18
  protected readonly isE2E: boolean;
19
19
  protected readonly icons: import("@taiga-ui/core/tokens").TuiCommonIcons;
20
- protected readonly closeWord$: import("rxjs").Observable<string>;
21
- protected readonly cancelWord$: import("rxjs").Observable<string>;
22
- protected readonly doneWord$: import("rxjs").Observable<string>;
20
+ protected readonly closeWord: import("@angular/core").Signal<string>;
21
+ protected readonly cancelWord: import("@angular/core").Signal<string>;
22
+ protected readonly doneWord: import("@angular/core").Signal<string>;
23
23
  protected readonly unorderedWeekDays$: import("rxjs").Observable<readonly [Monday: string, Tuesday: string, Wednesday: string, Thursday: string, Friday: string, Saturday: string, Sunday: string]>;
24
- protected readonly chooseDayOrRangeTexts$: import("rxjs").Observable<readonly [choose_day: string, choose_range: string, choose_days: string]> | null;
24
+ protected readonly chooseDayOrRangeTexts: import("@angular/core").Signal<readonly [choose_day: string, choose_range: string, choose_days: string]> | null;
25
25
  protected readonly years: number[];
26
26
  protected readonly months: TuiMonth[];
27
27
  /**
@@ -1,7 +1,8 @@
1
- import { TuiPopoverDirective } from '@taiga-ui/cdk/directives/popover';
2
1
  import { type TuiSheetDialogOptions } from './sheet-dialog.options';
3
2
  import * as i0 from "@angular/core";
4
- export declare class TuiSheetDialog extends TuiPopoverDirective<TuiSheetDialogOptions> {
3
+ import * as i1 from "@taiga-ui/cdk/portals";
4
+ export declare class TuiSheetDialog {
5
+ readonly tuiSheetDialogOptions: import("@angular/core").InputSignal<Partial<TuiSheetDialogOptions<undefined>>>;
5
6
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiSheetDialog, never>;
6
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiSheetDialog, "ng-template[tuiSheetDialog]", never, { "options": { "alias": "tuiSheetDialogOptions"; "required": false; }; "open": { "alias": "tuiSheetDialog"; "required": false; }; }, { "openChange": "tuiSheetDialogChange"; }, never, never, true, never>;
7
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiSheetDialog, "ng-template[tuiSheetDialog]", never, { "tuiSheetDialogOptions": { "alias": "tuiSheetDialogOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TuiPortalDirective; inputs: { "options": "tuiSheetDialogOptions"; "open": "tuiSheetDialog"; }; outputs: { "openChange": "tuiSheetDialogChange"; }; }]>;
7
8
  }
@@ -1,10 +1,15 @@
1
- import { TuiPopoverService } from '@taiga-ui/cdk/services';
1
+ import { type TuiModal, TuiModalService } from '@taiga-ui/core/components/modal';
2
+ import { type PolymorpheusComponent } from '@taiga-ui/polymorpheus';
3
+ import { TuiSheetDialogComponent } from './sheet-dialog.component';
2
4
  import { type TuiSheetDialogOptions } from './sheet-dialog.options';
3
5
  import * as i0 from "@angular/core";
4
- export declare class TuiSheetDialogService extends TuiPopoverService<TuiSheetDialogOptions<any>> {
6
+ export declare class TuiSheetDialogService extends TuiModalService<TuiSheetDialogOptions<any>> {
5
7
  private readonly theme;
6
- private initial;
7
- protected readonly $: import("rxjs").Subscription;
8
+ private readonly initial;
9
+ private count;
10
+ protected readonly options: TuiSheetDialogOptions<undefined>;
11
+ protected readonly content: typeof TuiSheetDialogComponent;
12
+ protected add(component: PolymorpheusComponent<TuiModal<TuiSheetDialogOptions>>): () => void;
8
13
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiSheetDialogService, never>;
9
14
  static ɵprov: i0.ɵɵInjectableDeclaration<TuiSheetDialogService>;
10
15
  }
@@ -1,17 +1,23 @@
1
1
  import { type OnDestroy } from '@angular/core';
2
+ import { TuiDropdownDirective } from '@taiga-ui/core/directives/dropdown';
2
3
  import * as i0 from "@angular/core";
4
+ import * as i1 from "@taiga-ui/cdk/directives/animated";
5
+ import * as i2 from "@taiga-ui/cdk/directives/active-zone";
3
6
  export declare class TuiDropdownMobileComponent implements OnDestroy {
4
7
  private readonly el;
5
8
  private readonly keyboard;
6
9
  private readonly doc;
7
10
  private readonly scrollTop;
8
- private readonly dropdown;
9
11
  private readonly observer;
12
+ protected readonly dropdown: TuiDropdownDirective;
13
+ protected readonly context: {
14
+ $implicit: () => void;
15
+ };
10
16
  constructor();
11
17
  ngOnDestroy(): void;
12
18
  protected onClick(event: MouseEvent): void;
13
19
  protected refresh(): void;
14
20
  private get focused();
15
21
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiDropdownMobileComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<TuiDropdownMobileComponent, "tui-dropdown-mobile", never, {}, {}, never, ["*"], true, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiDropdownMobileComponent, "tui-dropdown-mobile", never, {}, {}, never, never, true, [{ directive: typeof i1.TuiAnimated; inputs: {}; outputs: {}; }, { directive: typeof i2.TuiActiveZone; inputs: {}; outputs: {}; }]>;
17
23
  }
@@ -1,8 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class TuiDropdownMobile {
3
3
  private readonly isMobile;
4
- tuiDropdownMobile: string;
5
4
  protected onMouseDown(event: MouseEvent): void;
6
5
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiDropdownMobile, never>;
7
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiDropdownMobile, "[tuiDropdownMobile]", never, { "tuiDropdownMobile": { "alias": "tuiDropdownMobile"; "required": false; }; }, {}, never, never, true, never>;
6
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiDropdownMobile, "[tuiDropdownMobile]", never, {}, {}, never, never, true, never>;
8
7
  }
@@ -0,0 +1,14 @@
1
+ import { TuiDropdownDirective } from '@taiga-ui/core/directives/dropdown';
2
+ import * as i0 from "@angular/core";
3
+ export declare class TuiDropdownSheetComponent {
4
+ private readonly content;
5
+ private readonly dialogs;
6
+ private readonly directive;
7
+ protected readonly dropdown: TuiDropdownDirective;
8
+ protected readonly context: {
9
+ $implicit: () => void;
10
+ };
11
+ protected readonly sub: import("rxjs").Subscription;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiDropdownSheetComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<TuiDropdownSheetComponent, "ng-component", never, {}, {}, never, never, true, never>;
14
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class TuiDropdownSheet {
3
+ readonly tuiDropdownSheet: import("@angular/core").InputSignal<string>;
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiDropdownSheet, never>;
5
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiDropdownSheet, "[tuiDropdownSheet]", never, { "tuiDropdownSheet": { "alias": "tuiDropdownSheet"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6
+ }
@@ -0,0 +1,2 @@
1
+ export * from './dropdown-sheet.component';
2
+ export * from './dropdown-sheet.directive';
@@ -1,4 +1,5 @@
1
1
  export * from '@taiga-ui/addon-mobile/directives/dropdown-mobile';
2
+ export * from '@taiga-ui/addon-mobile/directives/dropdown-sheet';
2
3
  export * from '@taiga-ui/addon-mobile/directives/elastic-sticky';
3
4
  export * from '@taiga-ui/addon-mobile/directives/responsive-dialog';
4
5
  export * from '@taiga-ui/addon-mobile/directives/ripple';
@@ -26,7 +26,7 @@ class TuiBottomSheet {
26
26
  this.el.animate([{ transform }], OPTIONS);
27
27
  }
28
28
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiBottomSheet, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiBottomSheet, isStandalone: true, selector: "tui-bottom-sheet", inputs: { stops: "stops" }, host: { listeners: { "scroll.zoneless": "onScroll()", "resize": "onScroll()" }, properties: { "style.--t-initial": "stops[0]", "style.scroll-snap-type": "stops.length > 1 ? \"y mandatory\" : null" } }, providers: [tuiHeaderOptionsProvider({ size: 'h5' })], viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }, { propertyName: "elements", predicate: ["stops"], descendants: true }], ngImport: i0, template: "@for (stop of stops; track stop) {\n <div\n #stops\n class=\"t-stop\"\n [style.top]=\"stop\"\n ></div>\n}\n<div\n #content\n class=\"t-content\"\n (resize)=\"onScroll()\"\n>\n <ng-content />\n</div>\n<div class=\"t-bottom\"></div>\n", styles: [":host{scrollbar-width:none;-ms-overflow-style:none;position:absolute;top:100%;left:0;right:0;display:block;block-size:calc(100% - 1rem);max-inline-size:40rem;margin:calc(-1 * var(--t-initial)) auto 0;background:var(--tui-background-elevation-1);border-top-left-radius:var(--tui-radius-l);border-top-right-radius:var(--tui-radius-l);overflow:auto;box-shadow:0 1rem var(--tui-background-elevation-1),var(--tui-shadow-medium)}:host::-webkit-scrollbar,:host::-webkit-scrollbar-thumb{display:none}:host:before{content:\"\";position:sticky;top:.625rem;left:50%;z-index:1;display:block;inset-inline-start:50%;inline-size:2rem;block-size:.25rem;margin-block-end:-.25rem;transform:translate(calc(-50% * var(--tui-inline)));background:var(--tui-background-elevation-1);box-shadow:0 0 0 20rem var(--tui-background-elevation-1),inset 0 0 0 1rem var(--tui-border-normal);border-radius:1rem;clip-path:polygon(-100vw -1rem,100vw -1rem,100vw calc(100% + .625rem),-100vw calc(100% + .625rem))}:host:after{content:\"\";position:absolute;top:calc(100% - var(--t-initial));inline-size:1rem;block-size:calc(var(--t-height) - 100% + var(--t-initial));scroll-snap-align:start;scroll-snap-stop:always}.t-content{position:sticky;top:0;padding:2.25rem 1rem 1.5rem}.t-bottom{block-size:calc(100% - var(--t-initial))}.t-stop{position:absolute;block-size:var(--t-initial);inline-size:1rem;pointer-events:none;transform:translateY(-100%);scroll-snap-align:start;scroll-snap-stop:always}.t-stop:last-child{scroll-snap-align:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiBottomSheet, isStandalone: true, selector: "tui-bottom-sheet", inputs: { stops: "stops" }, host: { listeners: { "scroll.zoneless": "onScroll()", "resize": "onScroll()" }, properties: { "style.--t-initial": "stops[0]", "style.scroll-snap-type": "stops.length > 1 ? \"y mandatory\" : null" } }, providers: [tuiHeaderOptionsProvider({ size: 'h5' })], viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }, { propertyName: "elements", predicate: ["stops"], descendants: true }], ngImport: i0, template: "@for (stop of stops; track stop) {\n <div\n #stops\n class=\"t-stop\"\n [style.inset-block-start]=\"stop\"\n ></div>\n}\n<div\n #content\n class=\"t-content\"\n (resize)=\"onScroll()\"\n>\n <ng-content />\n</div>\n<div class=\"t-bottom\"></div>\n", styles: [":host{scrollbar-width:none;-ms-overflow-style:none;position:absolute;top:100%;left:0;right:0;display:block;block-size:calc(100% - 1rem);max-inline-size:40rem;margin:calc(-1 * var(--t-initial)) auto 0;background:var(--tui-background-elevation-1);border-top-left-radius:var(--tui-radius-l);border-top-right-radius:var(--tui-radius-l);overflow:auto;box-shadow:0 1rem var(--tui-background-elevation-1),var(--tui-shadow-medium)}:host::-webkit-scrollbar,:host::-webkit-scrollbar-thumb{display:none}:host:before{content:\"\";position:sticky;top:.625rem;left:50%;z-index:1;display:block;inset-inline-start:50%;inline-size:2rem;block-size:.25rem;margin-block-end:-.25rem;transform:translate(calc(-50% * var(--tui-inline)));background:var(--tui-background-elevation-1);box-shadow:0 0 0 20rem var(--tui-background-elevation-1),inset 0 0 0 1rem var(--tui-border-normal);border-radius:1rem;clip-path:polygon(-100vw -1rem,100vw -1rem,100vw calc(100% + .625rem),-100vw calc(100% + .625rem))}:host:after{content:\"\";position:absolute;top:calc(100% - var(--t-initial));inline-size:1rem;block-size:calc(var(--t-height) - 100% + var(--t-initial));scroll-snap-align:start;scroll-snap-stop:always}.t-content{position:sticky;top:0;padding:2.25rem 1rem 1.5rem}.t-bottom{block-size:calc(100% - var(--t-initial))}.t-stop{position:absolute;block-size:var(--t-initial);inline-size:1rem;pointer-events:none;transform:translateY(-100%);scroll-snap-align:start;scroll-snap-stop:always}.t-stop:last-child{scroll-snap-align:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30
30
  }
31
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiBottomSheet, decorators: [{
32
32
  type: Component,
@@ -35,7 +35,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
35
35
  '[style.scroll-snap-type]': 'stops.length > 1 ? "y mandatory" : null',
36
36
  '(scroll.zoneless)': 'onScroll()',
37
37
  '(resize)': 'onScroll()',
38
- }, template: "@for (stop of stops; track stop) {\n <div\n #stops\n class=\"t-stop\"\n [style.top]=\"stop\"\n ></div>\n}\n<div\n #content\n class=\"t-content\"\n (resize)=\"onScroll()\"\n>\n <ng-content />\n</div>\n<div class=\"t-bottom\"></div>\n", styles: [":host{scrollbar-width:none;-ms-overflow-style:none;position:absolute;top:100%;left:0;right:0;display:block;block-size:calc(100% - 1rem);max-inline-size:40rem;margin:calc(-1 * var(--t-initial)) auto 0;background:var(--tui-background-elevation-1);border-top-left-radius:var(--tui-radius-l);border-top-right-radius:var(--tui-radius-l);overflow:auto;box-shadow:0 1rem var(--tui-background-elevation-1),var(--tui-shadow-medium)}:host::-webkit-scrollbar,:host::-webkit-scrollbar-thumb{display:none}:host:before{content:\"\";position:sticky;top:.625rem;left:50%;z-index:1;display:block;inset-inline-start:50%;inline-size:2rem;block-size:.25rem;margin-block-end:-.25rem;transform:translate(calc(-50% * var(--tui-inline)));background:var(--tui-background-elevation-1);box-shadow:0 0 0 20rem var(--tui-background-elevation-1),inset 0 0 0 1rem var(--tui-border-normal);border-radius:1rem;clip-path:polygon(-100vw -1rem,100vw -1rem,100vw calc(100% + .625rem),-100vw calc(100% + .625rem))}:host:after{content:\"\";position:absolute;top:calc(100% - var(--t-initial));inline-size:1rem;block-size:calc(var(--t-height) - 100% + var(--t-initial));scroll-snap-align:start;scroll-snap-stop:always}.t-content{position:sticky;top:0;padding:2.25rem 1rem 1.5rem}.t-bottom{block-size:calc(100% - var(--t-initial))}.t-stop{position:absolute;block-size:var(--t-initial);inline-size:1rem;pointer-events:none;transform:translateY(-100%);scroll-snap-align:start;scroll-snap-stop:always}.t-stop:last-child{scroll-snap-align:none}\n"] }]
38
+ }, template: "@for (stop of stops; track stop) {\n <div\n #stops\n class=\"t-stop\"\n [style.inset-block-start]=\"stop\"\n ></div>\n}\n<div\n #content\n class=\"t-content\"\n (resize)=\"onScroll()\"\n>\n <ng-content />\n</div>\n<div class=\"t-bottom\"></div>\n", styles: [":host{scrollbar-width:none;-ms-overflow-style:none;position:absolute;top:100%;left:0;right:0;display:block;block-size:calc(100% - 1rem);max-inline-size:40rem;margin:calc(-1 * var(--t-initial)) auto 0;background:var(--tui-background-elevation-1);border-top-left-radius:var(--tui-radius-l);border-top-right-radius:var(--tui-radius-l);overflow:auto;box-shadow:0 1rem var(--tui-background-elevation-1),var(--tui-shadow-medium)}:host::-webkit-scrollbar,:host::-webkit-scrollbar-thumb{display:none}:host:before{content:\"\";position:sticky;top:.625rem;left:50%;z-index:1;display:block;inset-inline-start:50%;inline-size:2rem;block-size:.25rem;margin-block-end:-.25rem;transform:translate(calc(-50% * var(--tui-inline)));background:var(--tui-background-elevation-1);box-shadow:0 0 0 20rem var(--tui-background-elevation-1),inset 0 0 0 1rem var(--tui-border-normal);border-radius:1rem;clip-path:polygon(-100vw -1rem,100vw -1rem,100vw calc(100% + .625rem),-100vw calc(100% + .625rem))}:host:after{content:\"\";position:absolute;top:calc(100% - var(--t-initial));inline-size:1rem;block-size:calc(var(--t-height) - 100% + var(--t-initial));scroll-snap-align:start;scroll-snap-stop:always}.t-content{position:sticky;top:0;padding:2.25rem 1rem 1.5rem}.t-bottom{block-size:calc(100% - var(--t-initial))}.t-stop{position:absolute;block-size:var(--t-initial);inline-size:1rem;pointer-events:none;transform:translateY(-100%);scroll-snap-align:start;scroll-snap-stop:always}.t-stop:last-child{scroll-snap-align:none}\n"] }]
39
39
  }], propDecorators: { elements: [{
40
40
  type: ViewChildren,
41
41
  args: ['stops']
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-addon-mobile-components-bottom-sheet.mjs","sources":["../../../projects/addon-mobile/components/bottom-sheet/bottom-sheet.component.ts","../../../projects/addon-mobile/components/bottom-sheet/bottom-sheet.template.html","../../../projects/addon-mobile/components/bottom-sheet/taiga-ui-addon-mobile-components-bottom-sheet.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n Input,\n type QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiHeaderOptionsProvider} from '@taiga-ui/core/components/header';\n\nconst OPTIONS = {\n duration: 20,\n easing: 'ease-in',\n fill: 'forwards',\n} as const;\n\n@Component({\n selector: 'tui-bottom-sheet',\n templateUrl: './bottom-sheet.template.html',\n styleUrl: './bottom-sheet.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiHeaderOptionsProvider({size: 'h5'})],\n host: {\n '[style.--t-initial]': 'stops[0]',\n '[style.scroll-snap-type]': 'stops.length > 1 ? \"y mandatory\" : null',\n '(scroll.zoneless)': 'onScroll()',\n '(resize)': 'onScroll()',\n },\n})\nexport class TuiBottomSheet {\n @ViewChildren('stops')\n private readonly elements: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n @ViewChild('content')\n private readonly content?: ElementRef<HTMLElement>;\n\n private readonly el = tuiInjectElement();\n\n @Input()\n public stops: readonly string[] = ['1.5rem'];\n\n protected onScroll(): void {\n const {clientHeight, scrollTop, scrollHeight} = this.el;\n const top = this.elements.get(0)?.nativeElement.clientHeight || 0;\n const max = this.content?.nativeElement.clientHeight || Infinity;\n const height = Math.min(clientHeight, max);\n const scrolled = Math.min(scrollTop, height - top);\n const transform = `translate3d(0, ${-1 * scrolled}px, 0)`;\n\n this.el.style.setProperty('--t-height', `${scrollHeight}px`);\n this.el.animate([{transform}], OPTIONS);\n }\n}\n","@for (stop of stops; track stop) {\n <div\n #stops\n class=\"t-stop\"\n [style.top]=\"stop\"\n ></div>\n}\n<div\n #content\n class=\"t-content\"\n (resize)=\"onScroll()\"\n>\n <ng-content />\n</div>\n<div class=\"t-bottom\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAaA,MAAM,OAAO,GAAG;AACZ,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,IAAI,EAAE,UAAU;CACV;MAeG,cAAc,CAAA;AAb3B,IAAA,WAAA,GAAA;QAeqB,IAAQ,CAAA,QAAA,GAAuC,WAAW;QAK1D,IAAE,CAAA,EAAA,GAAG,gBAAgB,EAAE;AAGjC,QAAA,IAAA,CAAA,KAAK,GAAsB,CAAC,QAAQ,CAAC;AAa/C;IAXa,QAAQ,GAAA;QACd,MAAM,EAAC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAC,GAAG,IAAI,CAAC,EAAE;AACvD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,YAAY,IAAI,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,IAAI,QAAQ;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;QAClD,MAAM,SAAS,GAAG,CAAkB,eAAA,EAAA,CAAC,CAAC,GAAG,QAAQ,QAAQ;AAEzD,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA,EAAG,YAAY,CAAA,EAAA,CAAI,CAAC;AAC5D,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAE,OAAO,CAAC;;+GArBlC,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EARZ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,wBAAwB,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBvD,iRAeA,EAAA,MAAA,EAAA,CAAA,89CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDiBa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAb1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAGX,eAAA,EAAA,uBAAuB,CAAC,MAAM,aACpC,CAAC,wBAAwB,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,EAC7C,IAAA,EAAA;AACF,wBAAA,qBAAqB,EAAE,UAAU;AACjC,wBAAA,0BAA0B,EAAE,yCAAyC;AACrE,wBAAA,mBAAmB,EAAE,YAAY;AACjC,wBAAA,UAAU,EAAE,YAAY;AAC3B,qBAAA,EAAA,QAAA,EAAA,iRAAA,EAAA,MAAA,EAAA,CAAA,89CAAA,CAAA,EAAA;8BAIgB,QAAQ,EAAA,CAAA;sBADxB,YAAY;uBAAC,OAAO;gBAIJ,OAAO,EAAA,CAAA;sBADvB,SAAS;uBAAC,SAAS;gBAMb,KAAK,EAAA,CAAA;sBADX;;;AEzCL;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-addon-mobile-components-bottom-sheet.mjs","sources":["../../../projects/addon-mobile/components/bottom-sheet/bottom-sheet.component.ts","../../../projects/addon-mobile/components/bottom-sheet/bottom-sheet.template.html","../../../projects/addon-mobile/components/bottom-sheet/taiga-ui-addon-mobile-components-bottom-sheet.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n type ElementRef,\n Input,\n type QueryList,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport {EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiHeaderOptionsProvider} from '@taiga-ui/core/components/header';\n\nconst OPTIONS = {\n duration: 20,\n easing: 'ease-in',\n fill: 'forwards',\n} as const;\n\n@Component({\n selector: 'tui-bottom-sheet',\n templateUrl: './bottom-sheet.template.html',\n styleUrl: './bottom-sheet.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiHeaderOptionsProvider({size: 'h5'})],\n host: {\n '[style.--t-initial]': 'stops[0]',\n '[style.scroll-snap-type]': 'stops.length > 1 ? \"y mandatory\" : null',\n '(scroll.zoneless)': 'onScroll()',\n '(resize)': 'onScroll()',\n },\n})\nexport class TuiBottomSheet {\n @ViewChildren('stops')\n private readonly elements: QueryList<ElementRef<HTMLElement>> = EMPTY_QUERY;\n\n @ViewChild('content')\n private readonly content?: ElementRef<HTMLElement>;\n\n private readonly el = tuiInjectElement();\n\n @Input()\n public stops: readonly string[] = ['1.5rem'];\n\n protected onScroll(): void {\n const {clientHeight, scrollTop, scrollHeight} = this.el;\n const top = this.elements.get(0)?.nativeElement.clientHeight || 0;\n const max = this.content?.nativeElement.clientHeight || Infinity;\n const height = Math.min(clientHeight, max);\n const scrolled = Math.min(scrollTop, height - top);\n const transform = `translate3d(0, ${-1 * scrolled}px, 0)`;\n\n this.el.style.setProperty('--t-height', `${scrollHeight}px`);\n this.el.animate([{transform}], OPTIONS);\n }\n}\n","@for (stop of stops; track stop) {\n <div\n #stops\n class=\"t-stop\"\n [style.inset-block-start]=\"stop\"\n ></div>\n}\n<div\n #content\n class=\"t-content\"\n (resize)=\"onScroll()\"\n>\n <ng-content />\n</div>\n<div class=\"t-bottom\"></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { VIRTUAL_SCROLL_STRATEGY, CdkFixedSizeVirtualScroll, CdkVirtualForOf, Cd
2
2
  import { DOCUMENT, AsyncPipe } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { InjectionToken, Optional, inject, DestroyRef, NgZone, EventEmitter, Input, Output, ViewChild, ChangeDetectionStrategy, Component } from '@angular/core';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
+ import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
6
6
  import { TuiMobileCalendarSheet } from '@taiga-ui/addon-mobile/components/mobile-calendar-sheet';
7
7
  import { TuiRipple, TuiTouchable } from '@taiga-ui/addon-mobile/directives';
8
8
  import { TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
@@ -211,11 +211,11 @@ class TuiMobileCalendar {
211
211
  this.isIOS = inject(TUI_IS_IOS);
212
212
  this.isE2E = inject(TUI_IS_E2E);
213
213
  this.icons = inject(TUI_COMMON_ICONS);
214
- this.closeWord$ = inject(TUI_CLOSE_WORD);
215
- this.cancelWord$ = inject(TUI_CANCEL_WORD);
216
- this.doneWord$ = inject(TUI_DONE_WORD);
217
- this.unorderedWeekDays$ = inject(TUI_SHORT_WEEK_DAYS);
218
- this.chooseDayOrRangeTexts$ = inject(TUI_CHOOSE_DAY_OR_RANGE_TEXTS, {
214
+ this.closeWord = inject(TUI_CLOSE_WORD);
215
+ this.cancelWord = inject(TUI_CANCEL_WORD);
216
+ this.doneWord = inject(TUI_DONE_WORD);
217
+ this.unorderedWeekDays$ = toObservable(inject(TUI_SHORT_WEEK_DAYS));
218
+ this.chooseDayOrRangeTexts = inject(TUI_CHOOSE_DAY_OR_RANGE_TEXTS, {
219
219
  optional: true,
220
220
  });
221
221
  this.years = Array.from({ length: RANGE }, (_, i) => i + STARTING_YEAR);
@@ -430,7 +430,7 @@ class TuiMobileCalendar {
430
430
  return (year - this.activeYear) * MONTHS_IN_YEAR;
431
431
  }
432
432
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiMobileCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
433
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiMobileCalendar, isStandalone: true, selector: "tui-mobile-calendar", inputs: { single: "single", multi: "multi", min: "min", max: "max", disabledItemHandler: "disabledItemHandler", value: "value" }, outputs: { cancel: "cancel", confirm: "confirm", valueChange: "valueChange" }, host: { listeners: { "mousedown.prevent": "0" }, properties: { "class._ios": "isIOS", "class._initialized": "initialized" } }, providers: TUI_MOBILE_CALENDAR_PROVIDERS, viewQueries: [{ propertyName: "yearsScrollRef", first: true, predicate: ["yearsScrollRef"], descendants: true }, { propertyName: "monthsScrollRef", first: true, predicate: ["monthsScrollRef"], descendants: true }], ngImport: i0, template: "@if (chooseDayOrRangeTexts$ | async; as texts) {\n <header class=\"t-header\">\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord$ | async }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord$ | async }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord$ | async }}\n </button>\n </header>\n}\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n @for (day of unorderedWeekDays$ | tuiOrderWeekDays | async; track day) {\n <div class=\"t-day\">\n {{ day }}\n </div>\n }\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n", styles: [":host{display:block;block-size:100%;font-family:-apple-system,BlinkMacSystemFont,Roboto,sans-serif;color:var(--tui-text-primary);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}:host ::ng-deep .t-cell:before,:host ::ng-deep .t-cell:after{transform:translateZ(1px)}.t-header{position:relative;display:flex;align-items:center;block-size:3.5rem;padding:0 1rem;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-header{block-size:2.75rem;border-block-end:none}.t-close{inline-size:1.5rem;block-size:1.5rem;margin-inline-end:2rem}:host._ios .t-close{display:none}.t-link{margin-inline-start:auto;flex-shrink:0;font-size:.875rem;line-height:1rem;font-weight:500;text-transform:uppercase;color:var(--tui-text-action)}.t-link_close{display:none}:host._ios .t-link{min-inline-size:3.75rem;text-align:end;font-size:.9375rem;line-height:1.125rem;font-weight:400;letter-spacing:.018125rem;text-transform:none}:host._ios .t-link_close{display:block;margin:0 auto 0 0;text-align:start}.t-label{flex-grow:1;margin:0;font-size:1.25rem;line-height:3.5rem;font-weight:500;letter-spacing:-.0125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t-label+.t-link{padding-inline-start:1rem}:host._ios .t-label{font-size:1.0625rem;font-weight:600;letter-spacing:-.025625rem;text-align:center}.t-years{scrollbar-width:none;-ms-overflow-style:none;block-size:4.0625rem;background-color:var(--tui-background-base);box-shadow:0 .5px var(--tui-border-normal)}.t-years::-webkit-scrollbar,.t-years::-webkit-scrollbar-thumb{display:none}:host._ios .t-years{background-color:transparent}.t-years-wrapper{display:flex;block-size:4.0625rem}.t-year{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;outline:none;inline-size:20vw;flex-shrink:0;font-size:.9375rem;font-weight:700;letter-spacing:.015625rem;cursor:pointer;opacity:.1;transform:scale(.73);transition:color,opacity,transform .2s}.t-year[data-state=adjacent]{transform:scale(.86);opacity:.3}.t-year[data-state=active]{color:var(--tui-text-action);opacity:1;transform:scale(1)}.t-week{display:flex;align-items:center;block-size:1.875rem;inline-size:20.75rem;max-inline-size:100%;margin:0 auto;font-size:.75rem}:host._ios .t-week{inline-size:22.625rem;font-size:.6875rem;font-weight:500;color:var(--tui-text-secondary)}.t-day{flex:1;text-align:center}.t-months{scrollbar-width:none;-ms-overflow-style:none;block-size:calc(100% - 9.5rem);box-shadow:0 -1px var(--tui-border-normal);overflow-x:hidden}.t-months::-webkit-scrollbar,.t-months::-webkit-scrollbar-thumb{display:none}:host._ios .t-months{block-size:calc(100% - 8.75rem)}.t-month-wrapper{display:flex;margin:.625rem 0 -.625rem;block-size:22.125rem;flex-direction:column}.t-month{block-size:2.75rem;inline-size:100%;line-height:2.75rem;padding-inline-start:1rem;font-size:.875rem;font-weight:500;text-transform:uppercase;margin:0 0 1.25rem;box-sizing:border-box;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-month{block-size:3.125rem;margin:0;border-block-end:none;text-transform:none;font-size:1.375rem;line-height:3.125rem;letter-spacing:.02rem;font-weight:700}.t-calendar{margin:0 auto;transition:opacity .2s}.t-week,.t-years,.t-months{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;opacity:0}:host(._initialized) .t-week,:host(._initialized) .t-years,:host(._initialized) .t-months{opacity:1}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "pipe", type: TuiMapperPipe, name: "tuiMapper" }, { kind: "component", type: TuiMobileCalendarSheet, selector: "tui-mobile-calendar-sheet" }, { kind: "pipe", type: TuiMonthPipe, name: "tuiMonth" }, { kind: "pipe", type: TuiOrderWeekDaysPipe, name: "tuiOrderWeekDays" }, { kind: "directive", type: TuiRipple, selector: "[tuiRipple]", inputs: ["tuiRipple"] }, { kind: "directive", type: TuiTouchable, selector: "[tuiTouchable]", inputs: ["tuiTouchable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
433
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiMobileCalendar, isStandalone: true, selector: "tui-mobile-calendar", inputs: { single: "single", multi: "multi", min: "min", max: "max", disabledItemHandler: "disabledItemHandler", value: "value" }, outputs: { cancel: "cancel", confirm: "confirm", valueChange: "valueChange" }, host: { listeners: { "mousedown.prevent": "0" }, properties: { "class._ios": "isIOS", "class._initialized": "initialized" } }, providers: TUI_MOBILE_CALENDAR_PROVIDERS, viewQueries: [{ propertyName: "yearsScrollRef", first: true, predicate: ["yearsScrollRef"], descendants: true }, { propertyName: "monthsScrollRef", first: true, predicate: ["monthsScrollRef"], descendants: true }], ngImport: i0, template: "@if (chooseDayOrRangeTexts?.(); as texts) {\n <header class=\"t-header\">\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord() }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord() }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord() }}\n </button>\n </header>\n}\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n @for (day of unorderedWeekDays$ | tuiOrderWeekDays | async; track day) {\n <div class=\"t-day\">\n {{ day }}\n </div>\n }\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n", styles: [":host{display:block;block-size:100%;font-family:-apple-system,BlinkMacSystemFont,Roboto,sans-serif;color:var(--tui-text-primary);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}:host ::ng-deep .t-cell:before,:host ::ng-deep .t-cell:after{transform:translateZ(1px)}.t-header{position:relative;display:flex;align-items:center;block-size:3.5rem;padding:0 1rem;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-header{block-size:2.75rem;border-block-end:none}.t-close{inline-size:1.5rem;block-size:1.5rem;margin-inline-end:2rem}:host._ios .t-close{display:none}.t-link{margin-inline-start:auto;flex-shrink:0;font-size:.875rem;line-height:1rem;font-weight:500;text-transform:uppercase;color:var(--tui-text-action)}.t-link_close{display:none}:host._ios .t-link{min-inline-size:3.75rem;text-align:end;font-size:.9375rem;line-height:1.125rem;font-weight:400;letter-spacing:.018125rem;text-transform:none}:host._ios .t-link_close{display:block;margin:0 auto 0 0;text-align:start}.t-label{flex-grow:1;margin:0;font-size:1.25rem;line-height:3.5rem;font-weight:500;letter-spacing:-.0125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t-label+.t-link{padding-inline-start:1rem}:host._ios .t-label{font-size:1.0625rem;font-weight:600;letter-spacing:-.025625rem;text-align:center}.t-years{scrollbar-width:none;-ms-overflow-style:none;block-size:4.0625rem;background-color:var(--tui-background-base);box-shadow:0 .5px var(--tui-border-normal)}.t-years::-webkit-scrollbar,.t-years::-webkit-scrollbar-thumb{display:none}:host._ios .t-years{background-color:transparent}.t-years-wrapper{display:flex;block-size:4.0625rem}.t-year{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;outline:none;inline-size:20vw;flex-shrink:0;font-size:.9375rem;font-weight:700;letter-spacing:.015625rem;cursor:pointer;opacity:.1;transform:scale(.73);transition:color,opacity,transform .2s}.t-year[data-state=adjacent]{transform:scale(.86);opacity:.3}.t-year[data-state=active]{color:var(--tui-text-action);opacity:1;transform:scale(1)}.t-week{display:flex;align-items:center;block-size:1.875rem;inline-size:20.75rem;max-inline-size:100%;margin:0 auto;font-size:.75rem}:host._ios .t-week{inline-size:22.625rem;font-size:.6875rem;font-weight:500;color:var(--tui-text-secondary)}.t-day{flex:1;text-align:center}.t-months{scrollbar-width:none;-ms-overflow-style:none;block-size:calc(100% - 9.5rem);box-shadow:0 -1px var(--tui-border-normal);overflow-x:hidden}.t-months::-webkit-scrollbar,.t-months::-webkit-scrollbar-thumb{display:none}:host._ios .t-months{block-size:calc(100% - 8.75rem)}.t-month-wrapper{display:flex;margin:.625rem 0 -.625rem;block-size:22.125rem;flex-direction:column}.t-month{block-size:2.75rem;inline-size:100%;line-height:2.75rem;padding-inline-start:1rem;font-size:.875rem;font-weight:500;text-transform:uppercase;margin:0 0 1.25rem;box-sizing:border-box;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-month{block-size:3.125rem;margin:0;border-block-end:none;text-transform:none;font-size:1.375rem;line-height:3.125rem;letter-spacing:.02rem;font-weight:700}.t-calendar{margin:0 auto;transition:opacity .2s}.t-week,.t-years,.t-months{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;opacity:0}:host(._initialized) .t-week,:host(._initialized) .t-years,:host(._initialized) .t-months{opacity:1}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "pipe", type: TuiMapperPipe, name: "tuiMapper" }, { kind: "component", type: TuiMobileCalendarSheet, selector: "tui-mobile-calendar-sheet" }, { kind: "pipe", type: TuiMonthPipe, name: "tuiMonth" }, { kind: "pipe", type: TuiOrderWeekDaysPipe, name: "tuiOrderWeekDays" }, { kind: "directive", type: TuiRipple, selector: "[tuiRipple]", inputs: ["tuiRipple"] }, { kind: "directive", type: TuiTouchable, selector: "[tuiTouchable]", inputs: ["tuiTouchable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
434
434
  }
435
435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiMobileCalendar, decorators: [{
436
436
  type: Component,
@@ -451,7 +451,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
451
451
  '[class._ios]': 'isIOS',
452
452
  '[class._initialized]': 'initialized',
453
453
  '(mousedown.prevent)': '0',
454
- }, template: "@if (chooseDayOrRangeTexts$ | async; as texts) {\n <header class=\"t-header\">\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord$ | async }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord$ | async }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord$ | async }}\n </button>\n </header>\n}\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n @for (day of unorderedWeekDays$ | tuiOrderWeekDays | async; track day) {\n <div class=\"t-day\">\n {{ day }}\n </div>\n }\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n", styles: [":host{display:block;block-size:100%;font-family:-apple-system,BlinkMacSystemFont,Roboto,sans-serif;color:var(--tui-text-primary);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}:host ::ng-deep .t-cell:before,:host ::ng-deep .t-cell:after{transform:translateZ(1px)}.t-header{position:relative;display:flex;align-items:center;block-size:3.5rem;padding:0 1rem;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-header{block-size:2.75rem;border-block-end:none}.t-close{inline-size:1.5rem;block-size:1.5rem;margin-inline-end:2rem}:host._ios .t-close{display:none}.t-link{margin-inline-start:auto;flex-shrink:0;font-size:.875rem;line-height:1rem;font-weight:500;text-transform:uppercase;color:var(--tui-text-action)}.t-link_close{display:none}:host._ios .t-link{min-inline-size:3.75rem;text-align:end;font-size:.9375rem;line-height:1.125rem;font-weight:400;letter-spacing:.018125rem;text-transform:none}:host._ios .t-link_close{display:block;margin:0 auto 0 0;text-align:start}.t-label{flex-grow:1;margin:0;font-size:1.25rem;line-height:3.5rem;font-weight:500;letter-spacing:-.0125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t-label+.t-link{padding-inline-start:1rem}:host._ios .t-label{font-size:1.0625rem;font-weight:600;letter-spacing:-.025625rem;text-align:center}.t-years{scrollbar-width:none;-ms-overflow-style:none;block-size:4.0625rem;background-color:var(--tui-background-base);box-shadow:0 .5px var(--tui-border-normal)}.t-years::-webkit-scrollbar,.t-years::-webkit-scrollbar-thumb{display:none}:host._ios .t-years{background-color:transparent}.t-years-wrapper{display:flex;block-size:4.0625rem}.t-year{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;outline:none;inline-size:20vw;flex-shrink:0;font-size:.9375rem;font-weight:700;letter-spacing:.015625rem;cursor:pointer;opacity:.1;transform:scale(.73);transition:color,opacity,transform .2s}.t-year[data-state=adjacent]{transform:scale(.86);opacity:.3}.t-year[data-state=active]{color:var(--tui-text-action);opacity:1;transform:scale(1)}.t-week{display:flex;align-items:center;block-size:1.875rem;inline-size:20.75rem;max-inline-size:100%;margin:0 auto;font-size:.75rem}:host._ios .t-week{inline-size:22.625rem;font-size:.6875rem;font-weight:500;color:var(--tui-text-secondary)}.t-day{flex:1;text-align:center}.t-months{scrollbar-width:none;-ms-overflow-style:none;block-size:calc(100% - 9.5rem);box-shadow:0 -1px var(--tui-border-normal);overflow-x:hidden}.t-months::-webkit-scrollbar,.t-months::-webkit-scrollbar-thumb{display:none}:host._ios .t-months{block-size:calc(100% - 8.75rem)}.t-month-wrapper{display:flex;margin:.625rem 0 -.625rem;block-size:22.125rem;flex-direction:column}.t-month{block-size:2.75rem;inline-size:100%;line-height:2.75rem;padding-inline-start:1rem;font-size:.875rem;font-weight:500;text-transform:uppercase;margin:0 0 1.25rem;box-sizing:border-box;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-month{block-size:3.125rem;margin:0;border-block-end:none;text-transform:none;font-size:1.375rem;line-height:3.125rem;letter-spacing:.02rem;font-weight:700}.t-calendar{margin:0 auto;transition:opacity .2s}.t-week,.t-years,.t-months{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;opacity:0}:host(._initialized) .t-week,:host(._initialized) .t-years,:host(._initialized) .t-months{opacity:1}\n"] }]
454
+ }, template: "@if (chooseDayOrRangeTexts?.(); as texts) {\n <header class=\"t-header\">\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord() }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord() }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord() }}\n </button>\n </header>\n}\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n @for (day of unorderedWeekDays$ | tuiOrderWeekDays | async; track day) {\n <div class=\"t-day\">\n {{ day }}\n </div>\n }\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n", styles: [":host{display:block;block-size:100%;font-family:-apple-system,BlinkMacSystemFont,Roboto,sans-serif;color:var(--tui-text-primary);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}:host ::ng-deep .t-cell:before,:host ::ng-deep .t-cell:after{transform:translateZ(1px)}.t-header{position:relative;display:flex;align-items:center;block-size:3.5rem;padding:0 1rem;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-header{block-size:2.75rem;border-block-end:none}.t-close{inline-size:1.5rem;block-size:1.5rem;margin-inline-end:2rem}:host._ios .t-close{display:none}.t-link{margin-inline-start:auto;flex-shrink:0;font-size:.875rem;line-height:1rem;font-weight:500;text-transform:uppercase;color:var(--tui-text-action)}.t-link_close{display:none}:host._ios .t-link{min-inline-size:3.75rem;text-align:end;font-size:.9375rem;line-height:1.125rem;font-weight:400;letter-spacing:.018125rem;text-transform:none}:host._ios .t-link_close{display:block;margin:0 auto 0 0;text-align:start}.t-label{flex-grow:1;margin:0;font-size:1.25rem;line-height:3.5rem;font-weight:500;letter-spacing:-.0125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t-label+.t-link{padding-inline-start:1rem}:host._ios .t-label{font-size:1.0625rem;font-weight:600;letter-spacing:-.025625rem;text-align:center}.t-years{scrollbar-width:none;-ms-overflow-style:none;block-size:4.0625rem;background-color:var(--tui-background-base);box-shadow:0 .5px var(--tui-border-normal)}.t-years::-webkit-scrollbar,.t-years::-webkit-scrollbar-thumb{display:none}:host._ios .t-years{background-color:transparent}.t-years-wrapper{display:flex;block-size:4.0625rem}.t-year{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;outline:none;inline-size:20vw;flex-shrink:0;font-size:.9375rem;font-weight:700;letter-spacing:.015625rem;cursor:pointer;opacity:.1;transform:scale(.73);transition:color,opacity,transform .2s}.t-year[data-state=adjacent]{transform:scale(.86);opacity:.3}.t-year[data-state=active]{color:var(--tui-text-action);opacity:1;transform:scale(1)}.t-week{display:flex;align-items:center;block-size:1.875rem;inline-size:20.75rem;max-inline-size:100%;margin:0 auto;font-size:.75rem}:host._ios .t-week{inline-size:22.625rem;font-size:.6875rem;font-weight:500;color:var(--tui-text-secondary)}.t-day{flex:1;text-align:center}.t-months{scrollbar-width:none;-ms-overflow-style:none;block-size:calc(100% - 9.5rem);box-shadow:0 -1px var(--tui-border-normal);overflow-x:hidden}.t-months::-webkit-scrollbar,.t-months::-webkit-scrollbar-thumb{display:none}:host._ios .t-months{block-size:calc(100% - 8.75rem)}.t-month-wrapper{display:flex;margin:.625rem 0 -.625rem;block-size:22.125rem;flex-direction:column}.t-month{block-size:2.75rem;inline-size:100%;line-height:2.75rem;padding-inline-start:1rem;font-size:.875rem;font-weight:500;text-transform:uppercase;margin:0 0 1.25rem;box-sizing:border-box;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-month{block-size:3.125rem;margin:0;border-block-end:none;text-transform:none;font-size:1.375rem;line-height:3.125rem;letter-spacing:.02rem;font-weight:700}.t-calendar{margin:0 auto;transition:opacity .2s}.t-week,.t-years,.t-months{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;opacity:0}:host(._initialized) .t-week,:host(._initialized) .t-years,:host(._initialized) .t-months{opacity:1}\n"] }]
455
455
  }], ctorParameters: () => [], propDecorators: { yearsScrollRef: [{
456
456
  type: ViewChild,
457
457
  args: ['yearsScrollRef']
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-addon-mobile-components-mobile-calendar.mjs","sources":["../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.const.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.strategy.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.providers.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.component.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html","../../../projects/addon-mobile/components/mobile-calendar/taiga-ui-addon-mobile-components-mobile-calendar.ts"],"sourcesContent":["import {MONTHS_IN_YEAR} from '@taiga-ui/cdk/date-time';\n\nfunction getCycle(options: {\n label: number;\n week: number;\n yearCycle: number;\n startingYear: number;\n}): ReadonlyArray<readonly number[]> {\n return Array.from({length: options.yearCycle}, (_, i) =>\n Array.from(\n {length: MONTHS_IN_YEAR},\n (_, month) =>\n options.label +\n weekCount({year: i, month, startingYear: options.startingYear}) *\n options.week,\n ),\n );\n}\n\nfunction weekCount(options: {year: number; month: number; startingYear: number}): number {\n const firstOfMonth = new Date(options.year + options.startingYear, options.month, 1);\n const lastOfMonth = new Date(\n options.year + options.startingYear,\n options.month + 1,\n 0,\n );\n const days = lastOfMonth.getDate() + (firstOfMonth.getDay() || 7) - 1;\n\n return Math.ceil(days / 7);\n}\n\nexport const SCROLL_DEBOUNCE_TIME = 80;\nexport const YEARS_IN_ROW = 5;\nexport const STARTING_YEAR = 1900;\nexport const RANGE = 196;\nexport const BUFFER = 500;\nexport const ANDROID_LABEL = 64;\nexport const ANDROID_WEEK = 48;\nexport const IOS_LABEL = 50;\nexport const IOS_WEEK = 50;\nexport const YEARLY_CYCLE = 28;\n\nexport const ANDROID_CYCLE = getCycle({\n label: ANDROID_LABEL,\n week: ANDROID_WEEK,\n yearCycle: YEARLY_CYCLE,\n startingYear: STARTING_YEAR,\n});\n\nexport const IOS_CYCLE = getCycle({\n label: IOS_LABEL,\n week: IOS_WEEK,\n yearCycle: YEARLY_CYCLE,\n startingYear: STARTING_YEAR,\n});\n","import {\n type CdkVirtualScrollViewport,\n type VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport {MONTHS_IN_YEAR} from '@taiga-ui/cdk/date-time';\nimport {type TuiScrollService} from '@taiga-ui/cdk/services';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {distinctUntilChanged, type Observable, Subject, takeUntil} from 'rxjs';\n\nimport {\n ANDROID_CYCLE,\n BUFFER,\n IOS_CYCLE,\n RANGE,\n YEARLY_CYCLE,\n} from './mobile-calendar.const';\n\nconst ANDROID_CYCLE_HEIGHT = reduceCycle(ANDROID_CYCLE);\nconst IOS_CYCLE_HEIGHT = reduceCycle(IOS_CYCLE);\n\nfunction reduceCycle(\n cycle: ReadonlyArray<readonly number[]>,\n lastYear = 28,\n lastMonth = 12,\n): number {\n return cycle.reduce(\n (total, year, yearIndex) =>\n yearIndex <= lastYear\n ? total +\n year.reduce(\n (sum, month, monthIndex) =>\n yearIndex < lastYear ||\n (yearIndex === lastYear && monthIndex < lastMonth)\n ? sum + month\n : sum,\n 0,\n )\n : total,\n 0,\n );\n}\n\n/**\n * This scroll strategy is hard wired with styles for iOS and Android.\n * It is dependent on month height on those platforms and is designed to\n * work for {@link TuiMobileCalendar} with years 1906 to 2102\n */\nexport class TuiMobileCalendarStrategy implements VirtualScrollStrategy {\n private readonly index$ = new Subject<number>();\n\n private viewport: CdkVirtualScrollViewport | null = null;\n\n private readonly destroy$ = new Subject<void>();\n\n constructor(\n private readonly isIOS: boolean,\n private readonly scrollService: TuiScrollService,\n ) {}\n\n @tuiPure\n public get scrolledIndexChange(): Observable<number> {\n return this.index$.pipe(distinctUntilChanged());\n }\n\n public attach(viewport: CdkVirtualScrollViewport): void {\n const cycle = this.isIOS ? IOS_CYCLE_HEIGHT : ANDROID_CYCLE_HEIGHT;\n\n this.viewport = viewport;\n this.viewport.setTotalContentSize(cycle * 7);\n this.updateRenderedRange(this.viewport);\n }\n\n public detach(): void {\n this.index$.complete();\n this.viewport = null;\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public onContentScrolled(): void {\n if (this.viewport) {\n this.updateRenderedRange(this.viewport);\n }\n }\n\n /** These do not matter for this case */\n public onDataLengthChanged(): void {}\n public onContentRendered(): void {}\n public onRenderedOffsetChanged(): void {}\n\n public scrollToIndex(index: number, behavior: ScrollBehavior): void {\n if (!this.viewport) {\n return;\n }\n\n const scrollTop = this.getOffsetForIndex(index);\n\n if (behavior !== 'smooth') {\n this.viewport.scrollToOffset(scrollTop, behavior);\n\n return;\n }\n\n this.scrollService\n .scroll$(this.viewport.elementRef.nativeElement, scrollTop)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n private getOffsetForIndex(index: number): number {\n const month = index % MONTHS_IN_YEAR;\n const year = (index - month) / MONTHS_IN_YEAR;\n\n return this.computeHeight(year, month);\n }\n\n private getIndexForOffset(offset: number): number {\n const cycle = this.isIOS ? IOS_CYCLE : ANDROID_CYCLE;\n const cycleHeight = this.isIOS ? IOS_CYCLE_HEIGHT : ANDROID_CYCLE_HEIGHT;\n const remainder = offset % cycleHeight;\n const years = ((offset - remainder) / cycleHeight) * YEARLY_CYCLE;\n\n let accumulator = 0;\n\n for (let year = 0; year < cycle.length; year++) {\n for (let month = 0; month < (cycle[year]?.length ?? 0); month++) {\n accumulator += cycle[year]?.[month] ?? 0;\n\n if (accumulator - (cycle[year]?.[month] ?? 0) / 2 > remainder) {\n return Math.max((years + year) * MONTHS_IN_YEAR + month, 0);\n }\n }\n }\n\n return RANGE;\n }\n\n private computeHeight(year: number, month?: number): number {\n const cycle = this.isIOS ? IOS_CYCLE : ANDROID_CYCLE;\n const remainder = year % YEARLY_CYCLE;\n const remainderHeight = reduceCycle(cycle, remainder, month);\n const fullCycles = (year - remainder) / YEARLY_CYCLE;\n const fullCyclesHeight = this.isIOS\n ? fullCycles * IOS_CYCLE_HEIGHT\n : fullCycles * ANDROID_CYCLE_HEIGHT;\n\n return fullCyclesHeight + remainderHeight;\n }\n\n private updateRenderedRange(viewport: CdkVirtualScrollViewport): void {\n const offset = viewport.measureScrollOffset();\n const {start, end} = viewport.getRenderedRange();\n const viewportSize = viewport.getViewportSize();\n const dataLength = viewport.getDataLength();\n const newRange = {start, end};\n const firstVisibleIndex = this.getIndexForOffset(offset);\n const startBuffer = offset - this.getOffsetForIndex(start);\n\n if (startBuffer < BUFFER && start !== 0) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER * 2));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER),\n );\n } else {\n const endBuffer = this.getOffsetForIndex(end) - offset - viewportSize;\n\n if (endBuffer < BUFFER && end !== dataLength) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER * 2),\n );\n }\n }\n\n viewport.setRenderedRange(newRange);\n viewport.setRenderedContentOffset(this.getOffsetForIndex(newRange.start));\n this.index$.next(firstVisibleIndex);\n }\n}\n","import {VIRTUAL_SCROLL_STRATEGY} from '@angular/cdk/scrolling';\nimport {InjectionToken, Optional, type Provider} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {type TuiDayRange} from '@taiga-ui/cdk/date-time';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {TuiScrollService} from '@taiga-ui/cdk/services';\nimport {TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {TUI_CALENDAR_DATE_STREAM} from '@taiga-ui/kit/tokens';\nimport {EMPTY, type Observable} from 'rxjs';\n\nimport {TuiMobileCalendarStrategy} from './mobile-calendar.strategy';\n\n/**\n * Stream for updating value\n */\nexport const TUI_VALUE_STREAM = new InjectionToken<Observable<TuiDayRange | null>>(\n ngDevMode ? 'TUI_VALUE_STREAM' : '',\n);\n\nexport const TUI_MOBILE_CALENDAR_PROVIDERS: Provider[] = [\n TuiScrollService,\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n deps: [TUI_IS_IOS, TuiScrollService],\n useClass: TuiMobileCalendarStrategy,\n },\n {\n provide: TUI_VALUE_STREAM,\n deps: [[new Optional(), TUI_CALENDAR_DATE_STREAM]],\n useFactory: (\n value$: Observable<TuiDayRange | null> | null,\n ): Observable<TuiDayRange | null> =>\n (value$ || EMPTY).pipe(tuiWatch(), takeUntilDestroyed()),\n },\n];\n","import {\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n} from '@angular/cdk/scrolling';\nimport {AsyncPipe, DOCUMENT} from '@angular/common';\nimport {\n type AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TuiMobileCalendarSheet} from '@taiga-ui/addon-mobile/components/mobile-calendar-sheet';\nimport {TuiRipple, TuiTouchable} from '@taiga-ui/addon-mobile/directives';\nimport {TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {\n MONTHS_IN_YEAR,\n TUI_FIRST_DAY,\n TUI_LAST_DAY,\n TuiDay,\n TuiDayRange,\n TuiMonth,\n} from '@taiga-ui/cdk/date-time';\nimport {\n tuiTypedFromEvent,\n tuiZonefree,\n tuiZonefreeScheduler,\n} from '@taiga-ui/cdk/observables';\nimport {TuiMapperPipe} from '@taiga-ui/cdk/pipes/mapper';\nimport {TUI_IS_E2E, TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {type TuiBooleanHandler, type TuiMapper} from '@taiga-ui/cdk/types';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TUI_CALENDAR_SHEET_OPTIONS} from '@taiga-ui/core/components/calendar';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiMonthPipe} from '@taiga-ui/core/pipes/month';\nimport {TuiOrderWeekDaysPipe} from '@taiga-ui/core/pipes/order-week-days';\nimport {\n TUI_ANIMATIONS_SPEED,\n TUI_CLOSE_WORD,\n TUI_COMMON_ICONS,\n TUI_SHORT_WEEK_DAYS,\n} from '@taiga-ui/core/tokens';\nimport {tuiGetDuration} from '@taiga-ui/core/utils/miscellaneous';\nimport {\n TUI_CANCEL_WORD,\n TUI_CHOOSE_DAY_OR_RANGE_TEXTS,\n TUI_DONE_WORD,\n} from '@taiga-ui/kit/tokens';\nimport {tuiToggleDay} from '@taiga-ui/kit/utils';\nimport {\n BehaviorSubject,\n debounceTime,\n delay,\n distinctUntilChanged,\n filter,\n identity,\n map,\n mergeMap,\n type MonoTypeOperatorFunction,\n race,\n skip,\n switchMap,\n take,\n takeUntil,\n timer,\n windowToggle,\n} from 'rxjs';\n\nimport {\n RANGE,\n SCROLL_DEBOUNCE_TIME,\n STARTING_YEAR,\n YEARS_IN_ROW,\n} from './mobile-calendar.const';\nimport {\n TUI_MOBILE_CALENDAR_PROVIDERS,\n TUI_VALUE_STREAM,\n} from './mobile-calendar.providers';\n\n@Component({\n selector: 'tui-mobile-calendar',\n imports: [\n AsyncPipe,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n TuiButton,\n TuiLink,\n TuiMapperPipe,\n TuiMobileCalendarSheet,\n TuiMonthPipe,\n TuiOrderWeekDaysPipe,\n TuiRipple,\n TuiTouchable,\n ],\n templateUrl: './mobile-calendar.template.html',\n styleUrl: './mobile-calendar.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: TUI_MOBILE_CALENDAR_PROVIDERS,\n host: {\n '[class._ios]': 'isIOS',\n '[class._initialized]': 'initialized',\n '(mousedown.prevent)': '0',\n },\n})\nexport class TuiMobileCalendar implements AfterViewInit {\n @ViewChild('yearsScrollRef')\n private readonly yearsScrollRef?: CdkVirtualScrollViewport;\n\n @ViewChild('monthsScrollRef')\n private readonly monthsScrollRef?: CdkVirtualScrollViewport;\n\n private readonly value$ = new BehaviorSubject<\n TuiDay | TuiDayRange | readonly TuiDay[] | null\n >(null);\n\n private readonly today = TuiDay.currentLocal();\n private activeYear = 0;\n private activeMonth = 0;\n private readonly destroyRef = inject(DestroyRef);\n private readonly doc = inject(DOCUMENT);\n private readonly speed = inject(TUI_ANIMATIONS_SPEED);\n private readonly ngZone = inject(NgZone);\n\n protected initialized = false;\n protected readonly isIOS = inject(TUI_IS_IOS);\n protected readonly isE2E = inject(TUI_IS_E2E);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly closeWord$ = inject(TUI_CLOSE_WORD);\n protected readonly cancelWord$ = inject(TUI_CANCEL_WORD);\n protected readonly doneWord$ = inject(TUI_DONE_WORD);\n protected readonly unorderedWeekDays$ = inject(TUI_SHORT_WEEK_DAYS);\n protected readonly chooseDayOrRangeTexts$ = inject(TUI_CHOOSE_DAY_OR_RANGE_TEXTS, {\n optional: true,\n });\n\n protected readonly years = Array.from({length: RANGE}, (_, i) => i + STARTING_YEAR);\n protected readonly months = Array.from(\n {length: RANGE * 12},\n (_, i) =>\n new TuiMonth(\n Math.floor(i / MONTHS_IN_YEAR) + STARTING_YEAR,\n i % MONTHS_IN_YEAR,\n ),\n );\n\n /**\n * @deprecated use static DI options instead\n * ```\n * tuiCalendarSheetOptionsProvider({rangeMode: boolean})\n * ```\n * TODO(v5): delete it\n */\n @Input()\n public single = !inject(TUI_CALENDAR_SHEET_OPTIONS).rangeMode;\n\n @Input()\n public multi = false;\n\n @Input()\n public min = TUI_FIRST_DAY;\n\n @Input()\n public max = TUI_LAST_DAY;\n\n @Input()\n public disabledItemHandler: TuiBooleanHandler<TuiDay> = TUI_FALSE_HANDLER;\n\n @Output()\n public readonly cancel = new EventEmitter<void>();\n\n @Output()\n public readonly confirm = new EventEmitter<\n TuiDay | TuiDayRange | readonly TuiDay[]\n >();\n\n @Output()\n public readonly valueChange = this.value$.pipe(\n skip(1),\n distinctUntilChanged((a, b) => a?.toString() === b?.toString()),\n map((x) => (!this.single && x instanceof TuiDay ? new TuiDayRange(x, x) : x)),\n );\n\n constructor() {\n inject(TUI_VALUE_STREAM)\n .pipe(takeUntilDestroyed())\n .subscribe((value) => {\n this.value = value;\n });\n }\n\n @Input()\n public set value(value: TuiDay | TuiDayRange | readonly TuiDay[] | null | undefined) {\n if (value !== undefined) {\n this.value$.next(value);\n }\n }\n\n public get value(): TuiDay | TuiDayRange | readonly TuiDay[] | null {\n return this.value$.value;\n }\n\n public ngAfterViewInit(): void {\n this.activeYear = this.initialYear;\n this.activeMonth = this.initialMonth;\n\n // Virtual scroll has not yet rendered items even in ngAfterViewInit\n this.waitScrolledChange();\n }\n\n public setYear(year: number): void {\n if (this.activeYear === year) {\n return;\n }\n\n this.activeMonth += this.getMonthOffset(year);\n this.activeYear = year;\n this.scrollToActiveYear('smooth');\n\n timer(0, tuiZonefreeScheduler(this.ngZone))\n .pipe(tuiZonefree(this.ngZone), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.scrollToActiveMonth());\n }\n\n protected get yearWidth(): number {\n return this.doc.documentElement.clientWidth / YEARS_IN_ROW;\n }\n\n protected onClose(): void {\n this.cancel.emit();\n }\n\n protected onConfirm(): void {\n if (this.value) {\n this.confirm.emit(this.value);\n } else {\n this.cancel.emit();\n }\n }\n\n protected onDayClick(day: TuiDay): void {\n if (this.single) {\n this.value = day;\n } else if (this.isMultiValue(this.value)) {\n this.value = tuiToggleDay(this.value, day);\n } else if (this.value instanceof TuiDay) {\n this.value = TuiDayRange.sort(this.value, day);\n } else if (this.value instanceof TuiDayRange) {\n this.value = day;\n } else if (!this.value) {\n this.value = day;\n }\n }\n\n protected getState(index: number): 'active' | 'adjacent' | null {\n if (this.isYearActive(index)) {\n return 'active';\n }\n\n if (this.isYearActive(index - 1) || this.isYearActive(index + 1)) {\n return 'adjacent';\n }\n\n return null;\n }\n\n protected onMonthChange(month: number): void {\n // Skipping initial callback where index === 0\n if (!month || this.activeMonth === month) {\n return;\n }\n\n this.activeMonth = month;\n\n const activeYear = this.monthToYear(month);\n\n if (activeYear === this.activeYear) {\n return;\n }\n\n this.activeYear = activeYear;\n this.scrollToActiveYear();\n }\n\n protected readonly disabledItemHandlerMapper: TuiMapper<\n [TuiBooleanHandler<TuiDay>, TuiDay, TuiDay],\n TuiBooleanHandler<TuiDay>\n > = (disabledItemHandler, min, max) => (item) =>\n item.dayBefore(min) ||\n (max !== null && item.dayAfter(max)) ||\n disabledItemHandler(item);\n\n private get initialYear(): number {\n if (!this.value) {\n return this.today.year;\n }\n\n if (this.value instanceof TuiDay) {\n return this.value.year;\n }\n\n if (!(this.value instanceof TuiDayRange)) {\n return this.value?.[0]?.year ?? this.today.year;\n }\n\n return this.value.to.year;\n }\n\n private get initialMonth(): number {\n if (!this.value) {\n return this.today.month + (this.today.year - STARTING_YEAR) * MONTHS_IN_YEAR;\n }\n\n if (this.value instanceof TuiDay) {\n return this.value.month + (this.value.year - STARTING_YEAR) * MONTHS_IN_YEAR;\n }\n\n if (!(this.value instanceof TuiDayRange)) {\n return (\n (this.value?.[0]?.month ?? this.today.month) +\n ((this.value?.[0]?.year ?? this.today.year) - STARTING_YEAR) *\n MONTHS_IN_YEAR\n );\n }\n\n return (\n this.value.to.month + (this.value.to.year - STARTING_YEAR) * MONTHS_IN_YEAR\n );\n }\n\n private isMultiValue(day: unknown): day is readonly TuiDay[] | undefined {\n return !(day instanceof TuiDay) && !(day instanceof TuiDayRange) && this.multi;\n }\n\n private getYearsViewportSize(): number {\n return this.yearsScrollRef?.getViewportSize() || 0;\n }\n\n private updateViewportDimension(): void {\n this.yearsScrollRef?.checkViewportSize();\n this.monthsScrollRef?.checkViewportSize();\n }\n\n private lateInit(): MonoTypeOperatorFunction<number> {\n return this.getYearsViewportSize() > 0 ? identity : delay(200);\n }\n\n private waitScrolledChange(): void {\n this.updateViewportDimension();\n\n this.monthsScrollRef?.scrolledIndexChange\n .pipe(\n delay(tuiGetDuration(this.speed)),\n this.lateInit(),\n take(1),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.initialized = true;\n this.updateViewportDimension();\n this.initYearScroll();\n this.initMonthScroll();\n this.scrollToActiveYear();\n this.scrollToActiveMonth();\n });\n }\n\n private initYearScroll(): void {\n const {yearsScrollRef} = this;\n\n if (!yearsScrollRef) {\n return;\n }\n\n const touchstart$ = tuiTypedFromEvent(\n yearsScrollRef.elementRef.nativeElement,\n 'touchstart',\n {passive: true},\n );\n const touchend$ = tuiTypedFromEvent(\n yearsScrollRef.elementRef.nativeElement,\n 'touchend',\n {passive: true},\n );\n const click$ = tuiTypedFromEvent(\n yearsScrollRef.elementRef.nativeElement,\n 'click',\n );\n\n // Refresh activeYear\n yearsScrollRef\n .elementScrolled()\n .pipe(\n // Ignore smooth scroll resulting from click on the exact year\n windowToggle(touchstart$, () => click$),\n mergeMap((x) => x),\n // Delay is required to run months scroll in the next frame to prevent flicker\n delay(0),\n map(\n () =>\n Math.round(\n yearsScrollRef.measureScrollOffset() / this.yearWidth,\n ) +\n Math.floor(YEARS_IN_ROW / 2) +\n STARTING_YEAR,\n ),\n filter((activeYear) => activeYear !== this.activeYear),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((activeYear) => {\n this.activeMonth += this.getMonthOffset(activeYear);\n this.activeYear = activeYear;\n this.scrollToActiveMonth();\n });\n\n // Smooth scroll to activeYear after scrolling is done\n touchstart$\n .pipe(\n switchMap(() => touchend$),\n switchMap(() =>\n race(\n yearsScrollRef.elementScrolled(),\n timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone)),\n ).pipe(\n debounceTime(\n SCROLL_DEBOUNCE_TIME * 2,\n tuiZonefreeScheduler(this.ngZone),\n ),\n take(1),\n takeUntil(touchstart$),\n ),\n ),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.scrollToActiveYear('smooth'));\n }\n\n private initMonthScroll(): void {\n const {monthsScrollRef} = this;\n\n if (!monthsScrollRef) {\n return;\n }\n\n const touchstart$ = tuiTypedFromEvent(\n monthsScrollRef.elementRef.nativeElement,\n 'touchstart',\n {passive: true},\n );\n const touchend$ = tuiTypedFromEvent(\n monthsScrollRef.elementRef.nativeElement,\n 'touchend',\n {passive: true},\n );\n\n // Smooth scroll to the closest month after scrolling is done\n touchstart$\n .pipe(\n switchMap(() => touchend$),\n switchMap(() =>\n race(\n monthsScrollRef.elementScrolled(),\n timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone)),\n ).pipe(\n debounceTime(\n SCROLL_DEBOUNCE_TIME * 2,\n tuiZonefreeScheduler(this.ngZone),\n ),\n take(1),\n takeUntil(touchstart$),\n ),\n ),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.scrollToActiveMonth('smooth'));\n }\n\n private scrollToActiveYear(behavior: ScrollBehavior = 'auto'): void {\n this.yearsScrollRef?.scrollToIndex(\n Math.max(this.activeYear - STARTING_YEAR - 2, 0),\n this.isE2E ? 'auto' : behavior,\n );\n }\n\n private scrollToActiveMonth(behavior: ScrollBehavior = 'auto'): void {\n this.monthsScrollRef?.scrollToIndex(\n this.activeMonth,\n this.isE2E ? 'auto' : behavior,\n );\n }\n\n private isYearActive(index: number): boolean {\n return index === this.activeYear;\n }\n\n private monthToYear(month: number): number {\n return Math.ceil((month + 1) / MONTHS_IN_YEAR) + STARTING_YEAR - 1;\n }\n\n private getMonthOffset(year: number): number {\n return (year - this.activeYear) * MONTHS_IN_YEAR;\n }\n}\n","@if (chooseDayOrRangeTexts$ | async; as texts) {\n <header class=\"t-header\">\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord$ | async }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord$ | async }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord$ | async }}\n </button>\n </header>\n}\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n @for (day of unorderedWeekDays$ | tuiOrderWeekDays | async; track day) {\n <div class=\"t-day\">\n {{ day }}\n </div>\n }\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAS,QAAQ,CAAC,OAKjB,EAAA;AACG,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAChD,KAAK,CAAC,IAAI,CACN,EAAC,MAAM,EAAE,cAAc,EAAC,EACxB,CAAC,CAAC,EAAE,KAAK,KACL,OAAO,CAAC,KAAK;AACb,QAAA,SAAS,CAAC,EAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAC,CAAC;AAC3D,YAAA,OAAO,CAAC,IAAI,CACvB,CACJ;AACL;AAEA,SAAS,SAAS,CAAC,OAA4D,EAAA;AAC3E,IAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,IAAI,IAAI,CACxB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,EACnC,OAAO,CAAC,KAAK,GAAG,CAAC,EACjB,CAAC,CACJ;AACD,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;IAErE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAC9B;AAEO,MAAM,oBAAoB,GAAG;AAC7B,MAAM,YAAY,GAAG;AACrB,MAAM,aAAa,GAAG;AACtB,MAAM,KAAK,GAAG;AACd,MAAM,MAAM,GAAG;AACf,MAAM,aAAa,GAAG;AACtB,MAAM,YAAY,GAAG;AACrB,MAAM,SAAS,GAAG;AAClB,MAAM,QAAQ,GAAG;AACjB,MAAM,YAAY,GAAG;AAErB,MAAM,aAAa,GAAG,QAAQ,CAAC;AAClC,IAAA,KAAK,EAAE,aAAa;AACpB,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,YAAY,EAAE,aAAa;AAC9B,CAAA;AAEM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC9B,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,YAAY,EAAE,aAAa;AAC9B,CAAA;;ACrCD,MAAM,oBAAoB,GAAG,WAAW,CAAC,aAAa,CAAC;AACvD,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC;AAE/C,SAAS,WAAW,CAChB,KAAuC,EACvC,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,EAAE,EAAA;AAEd,IAAA,OAAO,KAAK,CAAC,MAAM,CACf,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,KACnB,SAAS,IAAI;AACT,UAAE,KAAK;AACL,YAAA,IAAI,CAAC,MAAM,CACP,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,KACnB,SAAS,GAAG,QAAQ;AACpB,iBAAC,SAAS,KAAK,QAAQ,IAAI,UAAU,GAAG,SAAS;kBAC3C,GAAG,GAAG;AACR,kBAAE,GAAG,EACb,CAAC;AAEP,UAAE,KAAK,EACf,CAAC,CACJ;AACL;AAEA;;;;AAIG;MACU,yBAAyB,CAAA;IAOlC,WACqB,CAAA,KAAc,EACd,aAA+B,EAAA;QAD/B,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAa,CAAA,aAAA,GAAb,aAAa;AARjB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAU;QAEvC,IAAQ,CAAA,QAAA,GAAoC,IAAI;AAEvC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;AAQ/C,IAAA,IAAW,mBAAmB,GAAA;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAG5C,IAAA,MAAM,CAAC,QAAkC,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,gBAAgB,GAAG,oBAAoB;AAElE,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAGpC,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;IAGrB,iBAAiB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAKxC,IAAA,mBAAmB;AACnB,IAAA,iBAAiB;AACjB,IAAA,uBAAuB;IAEvB,aAAa,CAAC,KAAa,EAAE,QAAwB,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB;;QAGJ,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAE/C,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;YAEjD;;AAGJ,QAAA,IAAI,CAAC;aACA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS;AACzD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,EAAE;;AAGZ,IAAA,iBAAiB,CAAC,KAAa,EAAA;AACnC,QAAA,MAAM,KAAK,GAAG,KAAK,GAAG,cAAc;QACpC,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,cAAc;QAE7C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;;AAGlC,IAAA,iBAAiB,CAAC,MAAc,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,aAAa;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,gBAAgB,GAAG,oBAAoB;AACxE,QAAA,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW;AACtC,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,IAAI,WAAW,IAAI,YAAY;QAEjE,IAAI,WAAW,GAAG,CAAC;AAEnB,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC7D,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAExC,gBAAA,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE;AAC3D,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC,CAAC;;;;AAKvE,QAAA,OAAO,KAAK;;IAGR,aAAa,CAAC,IAAY,EAAE,KAAc,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,aAAa;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,YAAY;QACrC,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;QAC5D,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,SAAS,IAAI,YAAY;AACpD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;cACxB,UAAU,GAAG;AACf,cAAE,UAAU,GAAG,oBAAoB;QAEvC,OAAO,gBAAgB,GAAG,eAAe;;AAGrC,IAAA,mBAAmB,CAAC,QAAkC,EAAA;AAC1D,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,mBAAmB,EAAE;QAC7C,MAAM,EAAC,KAAK,EAAE,GAAG,EAAC,GAAG,QAAQ,CAAC,gBAAgB,EAAE;AAChD,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE;AAC/C,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE;AAC3C,QAAA,MAAM,QAAQ,GAAG,EAAC,KAAK,EAAE,GAAG,EAAC;QAC7B,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACxD,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAE1D,IAAI,WAAW,GAAG,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE;YACrC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;YACzE,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CACnB,UAAU,EACV,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC,CACzD;;aACE;AACH,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,YAAY;YAErE,IAAI,SAAS,GAAG,MAAM,IAAI,GAAG,KAAK,UAAU,EAAE;AAC1C,gBAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;gBACrE,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CACnB,UAAU,EACV,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,CAC7D;;;AAIT,QAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACnC,QAAA,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;;AAE1C;AAxHG,UAAA,CAAA;IADC;AAGA,CAAA,EAAA,yBAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,IAAA,CAAA;;AClDL;;AAEG;AACU,MAAA,gBAAgB,GAAG,IAAI,cAAc,CAC9C,SAAS,GAAG,kBAAkB,GAAG,EAAE;AAG1B,MAAA,6BAA6B,GAAe;IACrD,gBAAgB;AAChB,IAAA;AACI,QAAA,OAAO,EAAE,uBAAuB;AAChC,QAAA,IAAI,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;AACpC,QAAA,QAAQ,EAAE,yBAAyB;AACtC,KAAA;AACD,IAAA;AACI,QAAA,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAClD,QAAA,UAAU,EAAE,CACR,MAA6C,KAE7C,CAAC,MAAM,IAAI,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,kBAAkB,EAAE,CAAC;AAC/D,KAAA;;;MC+EQ,iBAAiB,CAAA;AA8E1B,IAAA,WAAA,GAAA;AAvEiB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAE3C,IAAI,CAAC;AAEU,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE;QACtC,IAAU,CAAA,UAAA,GAAG,CAAC;QACd,IAAW,CAAA,WAAA,GAAG,CAAC;AACN,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE9B,IAAW,CAAA,WAAA,GAAG,KAAK;AACV,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC;AACjC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAChD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,6BAA6B,EAAE;AAC9E,YAAA,QAAQ,EAAE,IAAI;AACjB,SAAA,CAAC;QAEiB,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,KAAK,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;AAChE,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,IAAI,CAClC,EAAC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAC,EACpB,CAAC,CAAC,EAAE,CAAC,KACD,IAAI,QAAQ,CACR,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,aAAa,EAC9C,CAAC,GAAG,cAAc,CACrB,CACR;AAED;;;;;;AAMG;QAEI,IAAM,CAAA,MAAA,GAAG,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS;QAGtD,IAAK,CAAA,KAAA,GAAG,KAAK;QAGb,IAAG,CAAA,GAAA,GAAG,aAAa;QAGnB,IAAG,CAAA,GAAA,GAAG,YAAY;QAGlB,IAAmB,CAAA,mBAAA,GAA8B,iBAAiB;AAGzD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AAGjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAEvC;AAGa,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC1C,IAAI,CAAC,CAAC,CAAC,EACP,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,EAC/D,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAChF;QAuGkB,IAAyB,CAAA,yBAAA,GAGxC,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,KACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;aAClB,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,mBAAmB,CAAC,IAAI,CAAC;QA1GzB,MAAM,CAAC,gBAAgB;aAClB,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AACtB,SAAC,CAAC;;IAGV,IACW,KAAK,CAAC,KAAkE,EAAA;AAC/E,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAI/B,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;;IAGrB,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY;;QAGpC,IAAI,CAAC,kBAAkB,EAAE;;AAGtB,IAAA,OAAO,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC1B;;QAGJ,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QAEjC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,aAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAClE,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;;AAGpD,IAAA,IAAc,SAAS,GAAA;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,GAAG,YAAY;;IAGpD,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;IAGZ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;aAC1B;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;AAIhB,IAAA,UAAU,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;;aACb,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACtC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;;AACvC,aAAA,IAAI,IAAI,CAAC,KAAK,YAAY,MAAM,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;;AAC3C,aAAA,IAAI,IAAI,CAAC,KAAK,YAAY,WAAW,EAAE;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;;AACb,aAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;;;AAId,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,QAAQ;;AAGnB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;AAC9D,YAAA,OAAO,UAAU;;AAGrB,QAAA,OAAO,IAAI;;AAGL,IAAA,aAAa,CAAC,KAAa,EAAA;;QAEjC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YACtC;;AAGJ,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAE1C,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;YAChC;;AAGJ,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,kBAAkB,EAAE;;AAW7B,IAAA,IAAY,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;;AAG1B,QAAA,IAAI,IAAI,CAAC,KAAK,YAAY,MAAM,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;;QAG1B,IAAI,EAAE,IAAI,CAAC,KAAK,YAAY,WAAW,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;;AAGnD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI;;AAG7B,IAAA,IAAY,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,aAAa,IAAI,cAAc;;AAGhF,QAAA,IAAI,IAAI,CAAC,KAAK,YAAY,MAAM,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,aAAa,IAAI,cAAc;;QAGhF,IAAI,EAAE,IAAI,CAAC,KAAK,YAAY,WAAW,CAAC,EAAE;AACtC,YAAA,QACI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK;AAC3C,gBAAA,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,aAAa;AACvD,oBAAA,cAAc;;QAI1B,QACI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,aAAa,IAAI,cAAc;;AAI3E,IAAA,YAAY,CAAC,GAAY,EAAA;AAC7B,QAAA,OAAO,EAAE,GAAG,YAAY,MAAM,CAAC,IAAI,EAAE,GAAG,YAAY,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK;;IAG1E,oBAAoB,GAAA;QACxB,OAAO,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,CAAC;;IAG9C,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE;AACxC,QAAA,IAAI,CAAC,eAAe,EAAE,iBAAiB,EAAE;;IAGrC,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;;IAG1D,kBAAkB,GAAA;QACtB,IAAI,CAAC,uBAAuB,EAAE;QAE9B,IAAI,CAAC,eAAe,EAAE;aACjB,IAAI,CACD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EACjC,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,CAAC,CAAC,EACP,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEtC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,mBAAmB,EAAE;AAC9B,SAAC,CAAC;;IAGF,cAAc,GAAA;AAClB,QAAA,MAAM,EAAC,cAAc,EAAC,GAAG,IAAI;QAE7B,IAAI,CAAC,cAAc,EAAE;YACjB;;AAGJ,QAAA,MAAM,WAAW,GAAG,iBAAiB,CACjC,cAAc,CAAC,UAAU,CAAC,aAAa,EACvC,YAAY,EACZ,EAAC,OAAO,EAAE,IAAI,EAAC,CAClB;AACD,QAAA,MAAM,SAAS,GAAG,iBAAiB,CAC/B,cAAc,CAAC,UAAU,CAAC,aAAa,EACvC,UAAU,EACV,EAAC,OAAO,EAAE,IAAI,EAAC,CAClB;AACD,QAAA,MAAM,MAAM,GAAG,iBAAiB,CAC5B,cAAc,CAAC,UAAU,CAAC,aAAa,EACvC,OAAO,CACV;;QAGD;AACK,aAAA,eAAe;aACf,IAAI;;AAED,QAAA,YAAY,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,EACvC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;QAElB,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CACC,MACI,IAAI,CAAC,KAAK,CACN,cAAc,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,SAAS,CACxD;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;YAC5B,aAAa,CACpB,EACD,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,EACtD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;YACtB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AACnD,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;YAC5B,IAAI,CAAC,mBAAmB,EAAE;AAC9B,SAAC,CAAC;;QAGN;AACK,aAAA,IAAI,CACD,SAAS,CAAC,MAAM,SAAS,CAAC,EAC1B,SAAS,CAAC,MACN,IAAI,CACA,cAAc,CAAC,eAAe,EAAE,EAChC,KAAK,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CACjE,CAAC,IAAI,CACF,YAAY,CACR,oBAAoB,GAAG,CAAC,EACxB,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CACpC,EACD,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,WAAW,CAAC,CACzB,CACJ,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEtC,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;;IAGnD,eAAe,GAAA;AACnB,QAAA,MAAM,EAAC,eAAe,EAAC,GAAG,IAAI;QAE9B,IAAI,CAAC,eAAe,EAAE;YAClB;;AAGJ,QAAA,MAAM,WAAW,GAAG,iBAAiB,CACjC,eAAe,CAAC,UAAU,CAAC,aAAa,EACxC,YAAY,EACZ,EAAC,OAAO,EAAE,IAAI,EAAC,CAClB;AACD,QAAA,MAAM,SAAS,GAAG,iBAAiB,CAC/B,eAAe,CAAC,UAAU,CAAC,aAAa,EACxC,UAAU,EACV,EAAC,OAAO,EAAE,IAAI,EAAC,CAClB;;QAGD;AACK,aAAA,IAAI,CACD,SAAS,CAAC,MAAM,SAAS,CAAC,EAC1B,SAAS,CAAC,MACN,IAAI,CACA,eAAe,CAAC,eAAe,EAAE,EACjC,KAAK,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CACjE,CAAC,IAAI,CACF,YAAY,CACR,oBAAoB,GAAG,CAAC,EACxB,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CACpC,EACD,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,WAAW,CAAC,CACzB,CACJ,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEtC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;IAGpD,kBAAkB,CAAC,WAA2B,MAAM,EAAA;AACxD,QAAA,IAAI,CAAC,cAAc,EAAE,aAAa,CAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,EAChD,IAAI,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,CACjC;;IAGG,mBAAmB,CAAC,WAA2B,MAAM,EAAA;QACzD,IAAI,CAAC,eAAe,EAAE,aAAa,CAC/B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,CACjC;;AAGG,IAAA,YAAY,CAAC,KAAa,EAAA;AAC9B,QAAA,OAAO,KAAK,KAAK,IAAI,CAAC,UAAU;;AAG5B,IAAA,WAAW,CAAC,KAAa,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,aAAa,GAAG,CAAC;;AAG9D,IAAA,cAAc,CAAC,IAAY,EAAA;QAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,cAAc;;+GA3Y3C,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,mBAAA,EAAA,GAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,EAAA,EAAA,SAAA,EAPf,6BAA6B,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzG5C,wpFA0FA,EAAA,MAAA,EAAA,CAAA,i6GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDDQ,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,yBAAyB,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,eAAe,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,wBAAwB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,SAAS,EAAA,QAAA,EAAA,uEAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,OAAO,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACP,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,sBAAsB,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACtB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,oBAAoB,EAAA,IAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAYP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA1B7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACtB,OAAA,EAAA;wBACL,SAAS;wBACT,yBAAyB;wBACzB,eAAe;wBACf,wBAAwB;wBACxB,SAAS;wBACT,OAAO;wBACP,aAAa;wBACb,sBAAsB;wBACtB,YAAY;wBACZ,oBAAoB;wBACpB,SAAS;wBACT,YAAY;AACf,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,6BAA6B,EAClC,IAAA,EAAA;AACF,wBAAA,cAAc,EAAE,OAAO;AACvB,wBAAA,sBAAsB,EAAE,aAAa;AACrC,wBAAA,qBAAqB,EAAE,GAAG;AAC7B,qBAAA,EAAA,QAAA,EAAA,wpFAAA,EAAA,MAAA,EAAA,CAAA,i6GAAA,CAAA,EAAA;wDAIgB,cAAc,EAAA,CAAA;sBAD9B,SAAS;uBAAC,gBAAgB;gBAIV,eAAe,EAAA,CAAA;sBAD/B,SAAS;uBAAC,iBAAiB;gBA6CrB,MAAM,EAAA,CAAA;sBADZ;gBAIM,KAAK,EAAA,CAAA;sBADX;gBAIM,GAAG,EAAA,CAAA;sBADT;gBAIM,GAAG,EAAA,CAAA;sBADT;gBAIM,mBAAmB,EAAA,CAAA;sBADzB;gBAIe,MAAM,EAAA,CAAA;sBADrB;gBAIe,OAAO,EAAA,CAAA;sBADtB;gBAMe,WAAW,EAAA,CAAA;sBAD1B;gBAgBU,KAAK,EAAA,CAAA;sBADf;;;AEtML;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-addon-mobile-components-mobile-calendar.mjs","sources":["../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.const.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.strategy.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.providers.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.component.ts","../../../projects/addon-mobile/components/mobile-calendar/mobile-calendar.template.html","../../../projects/addon-mobile/components/mobile-calendar/taiga-ui-addon-mobile-components-mobile-calendar.ts"],"sourcesContent":["import {MONTHS_IN_YEAR} from '@taiga-ui/cdk/date-time';\n\nfunction getCycle(options: {\n label: number;\n week: number;\n yearCycle: number;\n startingYear: number;\n}): ReadonlyArray<readonly number[]> {\n return Array.from({length: options.yearCycle}, (_, i) =>\n Array.from(\n {length: MONTHS_IN_YEAR},\n (_, month) =>\n options.label +\n weekCount({year: i, month, startingYear: options.startingYear}) *\n options.week,\n ),\n );\n}\n\nfunction weekCount(options: {year: number; month: number; startingYear: number}): number {\n const firstOfMonth = new Date(options.year + options.startingYear, options.month, 1);\n const lastOfMonth = new Date(\n options.year + options.startingYear,\n options.month + 1,\n 0,\n );\n const days = lastOfMonth.getDate() + (firstOfMonth.getDay() || 7) - 1;\n\n return Math.ceil(days / 7);\n}\n\nexport const SCROLL_DEBOUNCE_TIME = 80;\nexport const YEARS_IN_ROW = 5;\nexport const STARTING_YEAR = 1900;\nexport const RANGE = 196;\nexport const BUFFER = 500;\nexport const ANDROID_LABEL = 64;\nexport const ANDROID_WEEK = 48;\nexport const IOS_LABEL = 50;\nexport const IOS_WEEK = 50;\nexport const YEARLY_CYCLE = 28;\n\nexport const ANDROID_CYCLE = getCycle({\n label: ANDROID_LABEL,\n week: ANDROID_WEEK,\n yearCycle: YEARLY_CYCLE,\n startingYear: STARTING_YEAR,\n});\n\nexport const IOS_CYCLE = getCycle({\n label: IOS_LABEL,\n week: IOS_WEEK,\n yearCycle: YEARLY_CYCLE,\n startingYear: STARTING_YEAR,\n});\n","import {\n type CdkVirtualScrollViewport,\n type VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport {MONTHS_IN_YEAR} from '@taiga-ui/cdk/date-time';\nimport {type TuiScrollService} from '@taiga-ui/cdk/services';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {distinctUntilChanged, type Observable, Subject, takeUntil} from 'rxjs';\n\nimport {\n ANDROID_CYCLE,\n BUFFER,\n IOS_CYCLE,\n RANGE,\n YEARLY_CYCLE,\n} from './mobile-calendar.const';\n\nconst ANDROID_CYCLE_HEIGHT = reduceCycle(ANDROID_CYCLE);\nconst IOS_CYCLE_HEIGHT = reduceCycle(IOS_CYCLE);\n\nfunction reduceCycle(\n cycle: ReadonlyArray<readonly number[]>,\n lastYear = 28,\n lastMonth = 12,\n): number {\n return cycle.reduce(\n (total, year, yearIndex) =>\n yearIndex <= lastYear\n ? total +\n year.reduce(\n (sum, month, monthIndex) =>\n yearIndex < lastYear ||\n (yearIndex === lastYear && monthIndex < lastMonth)\n ? sum + month\n : sum,\n 0,\n )\n : total,\n 0,\n );\n}\n\n/**\n * This scroll strategy is hard wired with styles for iOS and Android.\n * It is dependent on month height on those platforms and is designed to\n * work for {@link TuiMobileCalendar} with years 1906 to 2102\n */\nexport class TuiMobileCalendarStrategy implements VirtualScrollStrategy {\n private readonly index$ = new Subject<number>();\n\n private viewport: CdkVirtualScrollViewport | null = null;\n\n private readonly destroy$ = new Subject<void>();\n\n constructor(\n private readonly isIOS: boolean,\n private readonly scrollService: TuiScrollService,\n ) {}\n\n @tuiPure\n public get scrolledIndexChange(): Observable<number> {\n return this.index$.pipe(distinctUntilChanged());\n }\n\n public attach(viewport: CdkVirtualScrollViewport): void {\n const cycle = this.isIOS ? IOS_CYCLE_HEIGHT : ANDROID_CYCLE_HEIGHT;\n\n this.viewport = viewport;\n this.viewport.setTotalContentSize(cycle * 7);\n this.updateRenderedRange(this.viewport);\n }\n\n public detach(): void {\n this.index$.complete();\n this.viewport = null;\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n public onContentScrolled(): void {\n if (this.viewport) {\n this.updateRenderedRange(this.viewport);\n }\n }\n\n /** These do not matter for this case */\n public onDataLengthChanged(): void {}\n public onContentRendered(): void {}\n public onRenderedOffsetChanged(): void {}\n\n public scrollToIndex(index: number, behavior: ScrollBehavior): void {\n if (!this.viewport) {\n return;\n }\n\n const scrollTop = this.getOffsetForIndex(index);\n\n if (behavior !== 'smooth') {\n this.viewport.scrollToOffset(scrollTop, behavior);\n\n return;\n }\n\n this.scrollService\n .scroll$(this.viewport.elementRef.nativeElement, scrollTop)\n .pipe(takeUntil(this.destroy$))\n .subscribe();\n }\n\n private getOffsetForIndex(index: number): number {\n const month = index % MONTHS_IN_YEAR;\n const year = (index - month) / MONTHS_IN_YEAR;\n\n return this.computeHeight(year, month);\n }\n\n private getIndexForOffset(offset: number): number {\n const cycle = this.isIOS ? IOS_CYCLE : ANDROID_CYCLE;\n const cycleHeight = this.isIOS ? IOS_CYCLE_HEIGHT : ANDROID_CYCLE_HEIGHT;\n const remainder = offset % cycleHeight;\n const years = ((offset - remainder) / cycleHeight) * YEARLY_CYCLE;\n\n let accumulator = 0;\n\n for (let year = 0; year < cycle.length; year++) {\n for (let month = 0; month < (cycle[year]?.length ?? 0); month++) {\n accumulator += cycle[year]?.[month] ?? 0;\n\n if (accumulator - (cycle[year]?.[month] ?? 0) / 2 > remainder) {\n return Math.max((years + year) * MONTHS_IN_YEAR + month, 0);\n }\n }\n }\n\n return RANGE;\n }\n\n private computeHeight(year: number, month?: number): number {\n const cycle = this.isIOS ? IOS_CYCLE : ANDROID_CYCLE;\n const remainder = year % YEARLY_CYCLE;\n const remainderHeight = reduceCycle(cycle, remainder, month);\n const fullCycles = (year - remainder) / YEARLY_CYCLE;\n const fullCyclesHeight = this.isIOS\n ? fullCycles * IOS_CYCLE_HEIGHT\n : fullCycles * ANDROID_CYCLE_HEIGHT;\n\n return fullCyclesHeight + remainderHeight;\n }\n\n private updateRenderedRange(viewport: CdkVirtualScrollViewport): void {\n const offset = viewport.measureScrollOffset();\n const {start, end} = viewport.getRenderedRange();\n const viewportSize = viewport.getViewportSize();\n const dataLength = viewport.getDataLength();\n const newRange = {start, end};\n const firstVisibleIndex = this.getIndexForOffset(offset);\n const startBuffer = offset - this.getOffsetForIndex(start);\n\n if (startBuffer < BUFFER && start !== 0) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER * 2));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER),\n );\n } else {\n const endBuffer = this.getOffsetForIndex(end) - offset - viewportSize;\n\n if (endBuffer < BUFFER && end !== dataLength) {\n newRange.start = Math.max(0, this.getIndexForOffset(offset - BUFFER));\n newRange.end = Math.min(\n dataLength,\n this.getIndexForOffset(offset + viewportSize + BUFFER * 2),\n );\n }\n }\n\n viewport.setRenderedRange(newRange);\n viewport.setRenderedContentOffset(this.getOffsetForIndex(newRange.start));\n this.index$.next(firstVisibleIndex);\n }\n}\n","import {VIRTUAL_SCROLL_STRATEGY} from '@angular/cdk/scrolling';\nimport {InjectionToken, Optional, type Provider} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {type TuiDayRange} from '@taiga-ui/cdk/date-time';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {TuiScrollService} from '@taiga-ui/cdk/services';\nimport {TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {TUI_CALENDAR_DATE_STREAM} from '@taiga-ui/kit/tokens';\nimport {EMPTY, type Observable} from 'rxjs';\n\nimport {TuiMobileCalendarStrategy} from './mobile-calendar.strategy';\n\n/**\n * Stream for updating value\n */\nexport const TUI_VALUE_STREAM = new InjectionToken<Observable<TuiDayRange | null>>(\n ngDevMode ? 'TUI_VALUE_STREAM' : '',\n);\n\nexport const TUI_MOBILE_CALENDAR_PROVIDERS: Provider[] = [\n TuiScrollService,\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n deps: [TUI_IS_IOS, TuiScrollService],\n useClass: TuiMobileCalendarStrategy,\n },\n {\n provide: TUI_VALUE_STREAM,\n deps: [[new Optional(), TUI_CALENDAR_DATE_STREAM]],\n useFactory: (\n value$: Observable<TuiDayRange | null> | null,\n ): Observable<TuiDayRange | null> =>\n (value$ || EMPTY).pipe(tuiWatch(), takeUntilDestroyed()),\n },\n];\n","import {\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n} from '@angular/cdk/scrolling';\nimport {AsyncPipe, DOCUMENT} from '@angular/common';\nimport {\n type AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n NgZone,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {TuiMobileCalendarSheet} from '@taiga-ui/addon-mobile/components/mobile-calendar-sheet';\nimport {TuiRipple, TuiTouchable} from '@taiga-ui/addon-mobile/directives';\nimport {TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {\n MONTHS_IN_YEAR,\n TUI_FIRST_DAY,\n TUI_LAST_DAY,\n TuiDay,\n TuiDayRange,\n TuiMonth,\n} from '@taiga-ui/cdk/date-time';\nimport {\n tuiTypedFromEvent,\n tuiZonefree,\n tuiZonefreeScheduler,\n} from '@taiga-ui/cdk/observables';\nimport {TuiMapperPipe} from '@taiga-ui/cdk/pipes/mapper';\nimport {TUI_IS_E2E, TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {type TuiBooleanHandler, type TuiMapper} from '@taiga-ui/cdk/types';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TUI_CALENDAR_SHEET_OPTIONS} from '@taiga-ui/core/components/calendar';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiMonthPipe} from '@taiga-ui/core/pipes/month';\nimport {TuiOrderWeekDaysPipe} from '@taiga-ui/core/pipes/order-week-days';\nimport {\n TUI_ANIMATIONS_SPEED,\n TUI_CLOSE_WORD,\n TUI_COMMON_ICONS,\n TUI_SHORT_WEEK_DAYS,\n} from '@taiga-ui/core/tokens';\nimport {tuiGetDuration} from '@taiga-ui/core/utils/miscellaneous';\nimport {\n TUI_CANCEL_WORD,\n TUI_CHOOSE_DAY_OR_RANGE_TEXTS,\n TUI_DONE_WORD,\n} from '@taiga-ui/kit/tokens';\nimport {tuiToggleDay} from '@taiga-ui/kit/utils';\nimport {\n BehaviorSubject,\n debounceTime,\n delay,\n distinctUntilChanged,\n filter,\n identity,\n map,\n mergeMap,\n type MonoTypeOperatorFunction,\n race,\n skip,\n switchMap,\n take,\n takeUntil,\n timer,\n windowToggle,\n} from 'rxjs';\n\nimport {\n RANGE,\n SCROLL_DEBOUNCE_TIME,\n STARTING_YEAR,\n YEARS_IN_ROW,\n} from './mobile-calendar.const';\nimport {\n TUI_MOBILE_CALENDAR_PROVIDERS,\n TUI_VALUE_STREAM,\n} from './mobile-calendar.providers';\n\n@Component({\n selector: 'tui-mobile-calendar',\n imports: [\n AsyncPipe,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n TuiButton,\n TuiLink,\n TuiMapperPipe,\n TuiMobileCalendarSheet,\n TuiMonthPipe,\n TuiOrderWeekDaysPipe,\n TuiRipple,\n TuiTouchable,\n ],\n templateUrl: './mobile-calendar.template.html',\n styleUrl: './mobile-calendar.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: TUI_MOBILE_CALENDAR_PROVIDERS,\n host: {\n '[class._ios]': 'isIOS',\n '[class._initialized]': 'initialized',\n '(mousedown.prevent)': '0',\n },\n})\nexport class TuiMobileCalendar implements AfterViewInit {\n @ViewChild('yearsScrollRef')\n private readonly yearsScrollRef?: CdkVirtualScrollViewport;\n\n @ViewChild('monthsScrollRef')\n private readonly monthsScrollRef?: CdkVirtualScrollViewport;\n\n private readonly value$ = new BehaviorSubject<\n TuiDay | TuiDayRange | readonly TuiDay[] | null\n >(null);\n\n private readonly today = TuiDay.currentLocal();\n private activeYear = 0;\n private activeMonth = 0;\n private readonly destroyRef = inject(DestroyRef);\n private readonly doc = inject(DOCUMENT);\n private readonly speed = inject(TUI_ANIMATIONS_SPEED);\n private readonly ngZone = inject(NgZone);\n\n protected initialized = false;\n protected readonly isIOS = inject(TUI_IS_IOS);\n protected readonly isE2E = inject(TUI_IS_E2E);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly closeWord = inject(TUI_CLOSE_WORD);\n protected readonly cancelWord = inject(TUI_CANCEL_WORD);\n protected readonly doneWord = inject(TUI_DONE_WORD);\n protected readonly unorderedWeekDays$ = toObservable(inject(TUI_SHORT_WEEK_DAYS));\n protected readonly chooseDayOrRangeTexts = inject(TUI_CHOOSE_DAY_OR_RANGE_TEXTS, {\n optional: true,\n });\n\n protected readonly years = Array.from({length: RANGE}, (_, i) => i + STARTING_YEAR);\n protected readonly months = Array.from(\n {length: RANGE * 12},\n (_, i) =>\n new TuiMonth(\n Math.floor(i / MONTHS_IN_YEAR) + STARTING_YEAR,\n i % MONTHS_IN_YEAR,\n ),\n );\n\n /**\n * @deprecated use static DI options instead\n * ```\n * tuiCalendarSheetOptionsProvider({rangeMode: boolean})\n * ```\n * TODO(v5): delete it\n */\n @Input()\n public single = !inject(TUI_CALENDAR_SHEET_OPTIONS).rangeMode;\n\n @Input()\n public multi = false;\n\n @Input()\n public min = TUI_FIRST_DAY;\n\n @Input()\n public max = TUI_LAST_DAY;\n\n @Input()\n public disabledItemHandler: TuiBooleanHandler<TuiDay> = TUI_FALSE_HANDLER;\n\n @Output()\n public readonly cancel = new EventEmitter<void>();\n\n @Output()\n public readonly confirm = new EventEmitter<\n TuiDay | TuiDayRange | readonly TuiDay[]\n >();\n\n @Output()\n public readonly valueChange = this.value$.pipe(\n skip(1),\n distinctUntilChanged((a, b) => a?.toString() === b?.toString()),\n map((x) => (!this.single && x instanceof TuiDay ? new TuiDayRange(x, x) : x)),\n );\n\n constructor() {\n inject(TUI_VALUE_STREAM)\n .pipe(takeUntilDestroyed())\n .subscribe((value) => {\n this.value = value;\n });\n }\n\n @Input()\n public set value(value: TuiDay | TuiDayRange | readonly TuiDay[] | null | undefined) {\n if (value !== undefined) {\n this.value$.next(value);\n }\n }\n\n public get value(): TuiDay | TuiDayRange | readonly TuiDay[] | null {\n return this.value$.value;\n }\n\n public ngAfterViewInit(): void {\n this.activeYear = this.initialYear;\n this.activeMonth = this.initialMonth;\n\n // Virtual scroll has not yet rendered items even in ngAfterViewInit\n this.waitScrolledChange();\n }\n\n public setYear(year: number): void {\n if (this.activeYear === year) {\n return;\n }\n\n this.activeMonth += this.getMonthOffset(year);\n this.activeYear = year;\n this.scrollToActiveYear('smooth');\n\n timer(0, tuiZonefreeScheduler(this.ngZone))\n .pipe(tuiZonefree(this.ngZone), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.scrollToActiveMonth());\n }\n\n protected get yearWidth(): number {\n return this.doc.documentElement.clientWidth / YEARS_IN_ROW;\n }\n\n protected onClose(): void {\n this.cancel.emit();\n }\n\n protected onConfirm(): void {\n if (this.value) {\n this.confirm.emit(this.value);\n } else {\n this.cancel.emit();\n }\n }\n\n protected onDayClick(day: TuiDay): void {\n if (this.single) {\n this.value = day;\n } else if (this.isMultiValue(this.value)) {\n this.value = tuiToggleDay(this.value, day);\n } else if (this.value instanceof TuiDay) {\n this.value = TuiDayRange.sort(this.value, day);\n } else if (this.value instanceof TuiDayRange) {\n this.value = day;\n } else if (!this.value) {\n this.value = day;\n }\n }\n\n protected getState(index: number): 'active' | 'adjacent' | null {\n if (this.isYearActive(index)) {\n return 'active';\n }\n\n if (this.isYearActive(index - 1) || this.isYearActive(index + 1)) {\n return 'adjacent';\n }\n\n return null;\n }\n\n protected onMonthChange(month: number): void {\n // Skipping initial callback where index === 0\n if (!month || this.activeMonth === month) {\n return;\n }\n\n this.activeMonth = month;\n\n const activeYear = this.monthToYear(month);\n\n if (activeYear === this.activeYear) {\n return;\n }\n\n this.activeYear = activeYear;\n this.scrollToActiveYear();\n }\n\n protected readonly disabledItemHandlerMapper: TuiMapper<\n [TuiBooleanHandler<TuiDay>, TuiDay, TuiDay],\n TuiBooleanHandler<TuiDay>\n > = (disabledItemHandler, min, max) => (item) =>\n item.dayBefore(min) ||\n (max !== null && item.dayAfter(max)) ||\n disabledItemHandler(item);\n\n private get initialYear(): number {\n if (!this.value) {\n return this.today.year;\n }\n\n if (this.value instanceof TuiDay) {\n return this.value.year;\n }\n\n if (!(this.value instanceof TuiDayRange)) {\n return this.value?.[0]?.year ?? this.today.year;\n }\n\n return this.value.to.year;\n }\n\n private get initialMonth(): number {\n if (!this.value) {\n return this.today.month + (this.today.year - STARTING_YEAR) * MONTHS_IN_YEAR;\n }\n\n if (this.value instanceof TuiDay) {\n return this.value.month + (this.value.year - STARTING_YEAR) * MONTHS_IN_YEAR;\n }\n\n if (!(this.value instanceof TuiDayRange)) {\n return (\n (this.value?.[0]?.month ?? this.today.month) +\n ((this.value?.[0]?.year ?? this.today.year) - STARTING_YEAR) *\n MONTHS_IN_YEAR\n );\n }\n\n return (\n this.value.to.month + (this.value.to.year - STARTING_YEAR) * MONTHS_IN_YEAR\n );\n }\n\n private isMultiValue(day: unknown): day is readonly TuiDay[] | undefined {\n return !(day instanceof TuiDay) && !(day instanceof TuiDayRange) && this.multi;\n }\n\n private getYearsViewportSize(): number {\n return this.yearsScrollRef?.getViewportSize() || 0;\n }\n\n private updateViewportDimension(): void {\n this.yearsScrollRef?.checkViewportSize();\n this.monthsScrollRef?.checkViewportSize();\n }\n\n private lateInit(): MonoTypeOperatorFunction<number> {\n return this.getYearsViewportSize() > 0 ? identity : delay(200);\n }\n\n private waitScrolledChange(): void {\n this.updateViewportDimension();\n\n this.monthsScrollRef?.scrolledIndexChange\n .pipe(\n delay(tuiGetDuration(this.speed)),\n this.lateInit(),\n take(1),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.initialized = true;\n this.updateViewportDimension();\n this.initYearScroll();\n this.initMonthScroll();\n this.scrollToActiveYear();\n this.scrollToActiveMonth();\n });\n }\n\n private initYearScroll(): void {\n const {yearsScrollRef} = this;\n\n if (!yearsScrollRef) {\n return;\n }\n\n const touchstart$ = tuiTypedFromEvent(\n yearsScrollRef.elementRef.nativeElement,\n 'touchstart',\n {passive: true},\n );\n const touchend$ = tuiTypedFromEvent(\n yearsScrollRef.elementRef.nativeElement,\n 'touchend',\n {passive: true},\n );\n const click$ = tuiTypedFromEvent(\n yearsScrollRef.elementRef.nativeElement,\n 'click',\n );\n\n // Refresh activeYear\n yearsScrollRef\n .elementScrolled()\n .pipe(\n // Ignore smooth scroll resulting from click on the exact year\n windowToggle(touchstart$, () => click$),\n mergeMap((x) => x),\n // Delay is required to run months scroll in the next frame to prevent flicker\n delay(0),\n map(\n () =>\n Math.round(\n yearsScrollRef.measureScrollOffset() / this.yearWidth,\n ) +\n Math.floor(YEARS_IN_ROW / 2) +\n STARTING_YEAR,\n ),\n filter((activeYear) => activeYear !== this.activeYear),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((activeYear) => {\n this.activeMonth += this.getMonthOffset(activeYear);\n this.activeYear = activeYear;\n this.scrollToActiveMonth();\n });\n\n // Smooth scroll to activeYear after scrolling is done\n touchstart$\n .pipe(\n switchMap(() => touchend$),\n switchMap(() =>\n race(\n yearsScrollRef.elementScrolled(),\n timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone)),\n ).pipe(\n debounceTime(\n SCROLL_DEBOUNCE_TIME * 2,\n tuiZonefreeScheduler(this.ngZone),\n ),\n take(1),\n takeUntil(touchstart$),\n ),\n ),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.scrollToActiveYear('smooth'));\n }\n\n private initMonthScroll(): void {\n const {monthsScrollRef} = this;\n\n if (!monthsScrollRef) {\n return;\n }\n\n const touchstart$ = tuiTypedFromEvent(\n monthsScrollRef.elementRef.nativeElement,\n 'touchstart',\n {passive: true},\n );\n const touchend$ = tuiTypedFromEvent(\n monthsScrollRef.elementRef.nativeElement,\n 'touchend',\n {passive: true},\n );\n\n // Smooth scroll to the closest month after scrolling is done\n touchstart$\n .pipe(\n switchMap(() => touchend$),\n switchMap(() =>\n race(\n monthsScrollRef.elementScrolled(),\n timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone)),\n ).pipe(\n debounceTime(\n SCROLL_DEBOUNCE_TIME * 2,\n tuiZonefreeScheduler(this.ngZone),\n ),\n take(1),\n takeUntil(touchstart$),\n ),\n ),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.scrollToActiveMonth('smooth'));\n }\n\n private scrollToActiveYear(behavior: ScrollBehavior = 'auto'): void {\n this.yearsScrollRef?.scrollToIndex(\n Math.max(this.activeYear - STARTING_YEAR - 2, 0),\n this.isE2E ? 'auto' : behavior,\n );\n }\n\n private scrollToActiveMonth(behavior: ScrollBehavior = 'auto'): void {\n this.monthsScrollRef?.scrollToIndex(\n this.activeMonth,\n this.isE2E ? 'auto' : behavior,\n );\n }\n\n private isYearActive(index: number): boolean {\n return index === this.activeYear;\n }\n\n private monthToYear(month: number): number {\n return Math.ceil((month + 1) / MONTHS_IN_YEAR) + STARTING_YEAR - 1;\n }\n\n private getMonthOffset(year: number): number {\n return (year - this.activeYear) * MONTHS_IN_YEAR;\n }\n}\n","@if (chooseDayOrRangeTexts?.(); as texts) {\n <header class=\"t-header\">\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord() }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord() }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord() }}\n </button>\n </header>\n}\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n @for (day of unorderedWeekDays$ | tuiOrderWeekDays | async; track day) {\n <div class=\"t-day\">\n {{ day }}\n </div>\n }\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -118,7 +118,7 @@ class TuiMobileLoaderAndroid {
118
118
  return `rotate(${rotateX} 0 0)`;
119
119
  }
120
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiMobileLoaderAndroid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiMobileLoaderAndroid, isStandalone: true, selector: "tui-mobile-android-loader", host: { properties: { "class._visible": "percent", "class._dropped": "dropped", "style.transform": "hostTransform" } }, ngImport: i0, template: "<div class=\"t-wrapper\">\n @if (percent !== 100) {\n <svg\n fill=\"none\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.transform]=\"transform\"\n [style.opacity]=\"opacity\"\n >\n <defs>\n <mask id=\"mask-1\">\n <path\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"white\"\n fill-rule=\"evenodd\"\n />\n </mask>\n </defs>\n <g mask=\"url(#mask-1)\">\n <path\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"black\"\n fill-rule=\"evenodd\"\n />\n </g>\n </svg>\n } @else {\n <tui-loader\n size=\"s\"\n class=\"t-loader\"\n [inheritColor]=\"true\"\n />\n }\n</div>\n", styles: [":host{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:sticky;top:0;z-index:1;display:block;block-size:0;opacity:0}:host._visible{opacity:1}:host._dropped{transition:transform var(--tui-duration) cubic-bezier(.4,0,.2,1),opacity var(--tui-duration) var(--tui-duration)}.t-wrapper{position:absolute;top:-2.5rem;left:50%;display:flex;box-shadow:var(--tui-shadow-medium);block-size:2.25rem;inline-size:2.25rem;background-color:var(--tui-background-neutral-1);border-radius:6.25rem;align-items:center;justify-content:center;margin-inline-start:-1.125rem}.t-loader{color:var(--tui-text-primary)}\n"], dependencies: [{ kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiMobileLoaderAndroid, isStandalone: true, selector: "tui-mobile-android-loader", host: { properties: { "class._visible": "percent", "class._dropped": "dropped", "style.transform": "hostTransform" } }, ngImport: i0, template: "<div class=\"t-wrapper\">\n @if (percent !== 100) {\n <svg\n fill=\"none\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.transform]=\"transform\"\n [style.opacity]=\"opacity\"\n >\n <defs>\n <mask id=\"mask-1\">\n <path\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"white\"\n fill-rule=\"evenodd\"\n />\n </mask>\n </defs>\n <g mask=\"url(#mask-1)\">\n <path\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"black\"\n fill-rule=\"evenodd\"\n />\n </g>\n </svg>\n } @else {\n <tui-loader\n size=\"s\"\n class=\"t-loader\"\n [inheritColor]=\"true\"\n />\n }\n</div>\n", styles: [":host{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:sticky;top:0;z-index:1;display:block;block-size:0;opacity:0}:host._visible{opacity:1}:host._dropped{transition:transform var(--tui-duration) cubic-bezier(.4,0,.2,1),opacity var(--tui-duration) var(--tui-duration)}.t-wrapper{position:absolute;top:-2.5rem;left:50%;display:flex;box-shadow:var(--tui-shadow-medium);block-size:2.25rem;inline-size:2.25rem;background-color:var(--tui-background-neutral-1);border-radius:6.25rem;align-items:center;justify-content:center;margin-inline-start:-1.125rem}.t-loader{color:var(--tui-text-primary)}\n"], dependencies: [{ kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiMobileLoaderAndroid, decorators: [{
124
124
  type: Component,