@cute-widgets/base 20.0.5 → 21.0.0
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.
- package/CHANGELOG.md +7 -0
- package/fesm2022/cute-widgets-base-abstract.mjs +15 -15
- package/fesm2022/cute-widgets-base-abstract.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-alert.mjs +10 -10
- package/fesm2022/cute-widgets-base-alert.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-autocomplete.mjs +14 -14
- package/fesm2022/cute-widgets-base-autocomplete.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-badge.mjs +46 -14
- package/fesm2022/cute-widgets-base-badge.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-bottom-sheet.mjs +11 -11
- package/fesm2022/cute-widgets-base-bottom-sheet.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-button-toggle.mjs +29 -12
- package/fesm2022/cute-widgets-base-button-toggle.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-button.mjs +20 -20
- package/fesm2022/cute-widgets-base-button.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-card.mjs +40 -40
- package/fesm2022/cute-widgets-base-card.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-checkbox.mjs +28 -28
- package/fesm2022/cute-widgets-base-checkbox.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-chips.mjs +49 -49
- package/fesm2022/cute-widgets-base-chips.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-collapse.mjs +14 -14
- package/fesm2022/cute-widgets-base-collapse.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-datetime.mjs +11 -11
- package/fesm2022/cute-widgets-base-core-datetime.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-directives.mjs +21 -21
- package/fesm2022/cute-widgets-base-core-directives.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-error.mjs +6 -6
- package/fesm2022/cute-widgets-base-core-error.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-line.mjs +7 -7
- package/fesm2022/cute-widgets-base-core-line.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-nav.mjs +30 -28
- package/fesm2022/cute-widgets-base-core-nav.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-observers.mjs +16 -16
- package/fesm2022/cute-widgets-base-core-observers.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-option.mjs +10 -10
- package/fesm2022/cute-widgets-base-core-option.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-pipes.mjs +6 -6
- package/fesm2022/cute-widgets-base-core-pipes.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-ripple.mjs +3 -3
- package/fesm2022/cute-widgets-base-core-ripple.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-theming.mjs +6 -6
- package/fesm2022/cute-widgets-base-core-theming.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-utils.mjs +3 -3
- package/fesm2022/cute-widgets-base-core-utils.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core.mjs +36 -36
- package/fesm2022/cute-widgets-base-core.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-datepicker.mjs +100 -99
- package/fesm2022/cute-widgets-base-datepicker.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-dialog.mjs +31 -31
- package/fesm2022/cute-widgets-base-dialog.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-divider.mjs +7 -7
- package/fesm2022/cute-widgets-base-divider.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-expansion.mjs +27 -27
- package/fesm2022/cute-widgets-base-expansion.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-form-field.mjs +28 -28
- package/fesm2022/cute-widgets-base-form-field.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-grid-list.mjs +22 -22
- package/fesm2022/cute-widgets-base-grid-list.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-icon.mjs +10 -10
- package/fesm2022/cute-widgets-base-icon.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-input.mjs +7 -7
- package/fesm2022/cute-widgets-base-input.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-layout-container.mjs +10 -10
- package/fesm2022/cute-widgets-base-layout-container.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-layout-stack.mjs +13 -13
- package/fesm2022/cute-widgets-base-layout-stack.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-layout.mjs +23 -23
- package/fesm2022/cute-widgets-base-layout.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-list.mjs +56 -56
- package/fesm2022/cute-widgets-base-list.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-menu.mjs +579 -364
- package/fesm2022/cute-widgets-base-menu.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-navbar.mjs +27 -27
- package/fesm2022/cute-widgets-base-navbar.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-paginator.mjs +11 -11
- package/fesm2022/cute-widgets-base-paginator.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-progress.mjs +10 -10
- package/fesm2022/cute-widgets-base-progress.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-radio.mjs +11 -11
- package/fesm2022/cute-widgets-base-radio.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-select.mjs +11 -11
- package/fesm2022/cute-widgets-base-select.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-sidenav.mjs +26 -26
- package/fesm2022/cute-widgets-base-sidenav.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-slider.mjs +10 -10
- package/fesm2022/cute-widgets-base-slider.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-snack-bar.mjs +28 -28
- package/fesm2022/cute-widgets-base-snack-bar.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-sort.mjs +13 -13
- package/fesm2022/cute-widgets-base-sort.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-spinner.mjs +8 -8
- package/fesm2022/cute-widgets-base-spinner.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-stepper.mjs +40 -40
- package/fesm2022/cute-widgets-base-stepper.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-table.mjs +58 -66
- package/fesm2022/cute-widgets-base-table.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-tabs.mjs +16 -16
- package/fesm2022/cute-widgets-base-tabs.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-timepicker.mjs +34 -63
- package/fesm2022/cute-widgets-base-timepicker.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-toolbar.mjs +13 -13
- package/fesm2022/cute-widgets-base-toolbar.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-tooltip.mjs +10 -10
- package/fesm2022/cute-widgets-base-tooltip.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-tree.mjs +25 -25
- package/fesm2022/cute-widgets-base-tree.mjs.map +1 -1
- package/fesm2022/cute-widgets-base.mjs +4 -4
- package/package.json +118 -118
- package/{abstract/index.d.ts → types/cute-widgets-base-abstract.d.ts} +1 -1
- package/{autocomplete/index.d.ts → types/cute-widgets-base-autocomplete.d.ts} +2 -2
- package/{badge/index.d.ts → types/cute-widgets-base-badge.d.ts} +6 -5
- package/{bottom-sheet/index.d.ts → types/cute-widgets-base-bottom-sheet.d.ts} +1 -1
- package/{button-toggle/index.d.ts → types/cute-widgets-base-button-toggle.d.ts} +7 -1
- package/{button/index.d.ts → types/cute-widgets-base-button.d.ts} +1 -1
- package/{checkbox/index.d.ts → types/cute-widgets-base-checkbox.d.ts} +1 -1
- package/{chips/index.d.ts → types/cute-widgets-base-chips.d.ts} +1 -1
- package/{core/nav/index.d.ts → types/cute-widgets-base-core-nav.d.ts} +2 -1
- package/{core/observers/index.d.ts → types/cute-widgets-base-core-observers.d.ts} +1 -1
- package/{core/option/index.d.ts → types/cute-widgets-base-core-option.d.ts} +1 -1
- package/{datepicker/index.d.ts → types/cute-widgets-base-datepicker.d.ts} +2 -2
- package/{expansion/index.d.ts → types/cute-widgets-base-expansion.d.ts} +4 -14
- package/{form-field/index.d.ts → types/cute-widgets-base-form-field.d.ts} +1 -1
- package/{icon/index.d.ts → types/cute-widgets-base-icon.d.ts} +1 -1
- package/{input/index.d.ts → types/cute-widgets-base-input.d.ts} +1 -1
- package/{menu/index.d.ts → types/cute-widgets-base-menu.d.ts} +202 -121
- package/{progress/index.d.ts → types/cute-widgets-base-progress.d.ts} +1 -1
- package/{radio/index.d.ts → types/cute-widgets-base-radio.d.ts} +2 -2
- package/{sidenav/index.d.ts → types/cute-widgets-base-sidenav.d.ts} +1 -1
- package/{snack-bar/index.d.ts → types/cute-widgets-base-snack-bar.d.ts} +1 -1
- package/{sort/index.d.ts → types/cute-widgets-base-sort.d.ts} +1 -1
- package/{table/index.d.ts → types/cute-widgets-base-table.d.ts} +1 -1
- package/{tree/index.d.ts → types/cute-widgets-base-tree.d.ts} +2 -2
- /package/{alert/index.d.ts → types/cute-widgets-base-alert.d.ts} +0 -0
- /package/{card/index.d.ts → types/cute-widgets-base-card.d.ts} +0 -0
- /package/{collapse/index.d.ts → types/cute-widgets-base-collapse.d.ts} +0 -0
- /package/{core/animation/index.d.ts → types/cute-widgets-base-core-animation.d.ts} +0 -0
- /package/{core/datetime/index.d.ts → types/cute-widgets-base-core-datetime.d.ts} +0 -0
- /package/{core/directives/index.d.ts → types/cute-widgets-base-core-directives.d.ts} +0 -0
- /package/{core/error/index.d.ts → types/cute-widgets-base-core-error.d.ts} +0 -0
- /package/{core/interfaces/index.d.ts → types/cute-widgets-base-core-interfaces.d.ts} +0 -0
- /package/{core/layout/index.d.ts → types/cute-widgets-base-core-layout.d.ts} +0 -0
- /package/{core/line/index.d.ts → types/cute-widgets-base-core-line.d.ts} +0 -0
- /package/{core/pipes/index.d.ts → types/cute-widgets-base-core-pipes.d.ts} +0 -0
- /package/{core/ripple/index.d.ts → types/cute-widgets-base-core-ripple.d.ts} +0 -0
- /package/{core/testing/index.d.ts → types/cute-widgets-base-core-testing.d.ts} +0 -0
- /package/{core/theming/index.d.ts → types/cute-widgets-base-core-theming.d.ts} +0 -0
- /package/{core/types/index.d.ts → types/cute-widgets-base-core-types.d.ts} +0 -0
- /package/{core/utils/index.d.ts → types/cute-widgets-base-core-utils.d.ts} +0 -0
- /package/{core/index.d.ts → types/cute-widgets-base-core.d.ts} +0 -0
- /package/{dialog/index.d.ts → types/cute-widgets-base-dialog.d.ts} +0 -0
- /package/{divider/index.d.ts → types/cute-widgets-base-divider.d.ts} +0 -0
- /package/{grid-list/index.d.ts → types/cute-widgets-base-grid-list.d.ts} +0 -0
- /package/{layout/container/index.d.ts → types/cute-widgets-base-layout-container.d.ts} +0 -0
- /package/{layout/stack/index.d.ts → types/cute-widgets-base-layout-stack.d.ts} +0 -0
- /package/{layout/index.d.ts → types/cute-widgets-base-layout.d.ts} +0 -0
- /package/{list/index.d.ts → types/cute-widgets-base-list.d.ts} +0 -0
- /package/{navbar/index.d.ts → types/cute-widgets-base-navbar.d.ts} +0 -0
- /package/{paginator/index.d.ts → types/cute-widgets-base-paginator.d.ts} +0 -0
- /package/{select/index.d.ts → types/cute-widgets-base-select.d.ts} +0 -0
- /package/{slider/index.d.ts → types/cute-widgets-base-slider.d.ts} +0 -0
- /package/{spinner/index.d.ts → types/cute-widgets-base-spinner.d.ts} +0 -0
- /package/{stepper/index.d.ts → types/cute-widgets-base-stepper.d.ts} +0 -0
- /package/{tabs/index.d.ts → types/cute-widgets-base-tabs.d.ts} +0 -0
- /package/{timepicker/index.d.ts → types/cute-widgets-base-timepicker.d.ts} +0 -0
- /package/{toolbar/index.d.ts → types/cute-widgets-base-toolbar.d.ts} +0 -0
- /package/{tooltip/index.d.ts → types/cute-widgets-base-tooltip.d.ts} +0 -0
- /package/{index.d.ts → types/cute-widgets-base.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cute-widgets-base-tabs.mjs","sources":["../../../../projects/cute-widgets/base/tabs/src/tab-label.directive.ts","../../../../projects/cute-widgets/base/tabs/src/tab-content.directive.ts","../../../../projects/cute-widgets/base/tabs/src/tab-group.component.ts","../../../../projects/cute-widgets/base/tabs/src/tab-group.component.html","../../../../projects/cute-widgets/base/tabs/src/tab.component.ts","../../../../projects/cute-widgets/base/tabs/src/tab.component.html","../../../../projects/cute-widgets/base/tabs/src/tabs.module.ts","../../../../projects/cute-widgets/base/tabs/cute-widgets-base-tabs.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {Directive, InjectionToken, inject} from '@angular/core';\r\nimport {CUTE_TAB} from \"./tab.component\";\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteTabLabel`. It serves as\r\n * alternative token to the actual `CuteTabLabel` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const CUTE_TAB_LABEL = new InjectionToken<CuteTabLabel>('CuteTabLabel');\r\n\r\n/** Used to flag tab labels for use with the portal directive */\r\n@Directive({\r\n selector: 'ng-template[cute-tab-label], ng-template[cuteTabLabel]',\r\n exportAs: 'cuteTabLabel',\r\n providers: [{provide: CUTE_TAB_LABEL, useExisting: CuteTabLabel}],\r\n})\r\nexport class CuteTabLabel {\r\n _closestTab = inject(CUTE_TAB, {optional: true});\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {Directive, InjectionToken, TemplateRef, inject} from '@angular/core';\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteTabContent`. It serves as\r\n * alternative token to the actual `CuteTabContent` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const CUTE_TAB_CONTENT = new InjectionToken<CuteTabContent>('CuteTabContent');\r\n\r\n/** Decorates the `ng-template` tags and reads out the template from it. */\r\n@Directive({\r\n selector: 'ng-template[cute-tab-content], ng-template[cuteTabContent]',\r\n providers: [{provide: CUTE_TAB_CONTENT, useExisting: CuteTabContent}],\r\n})\r\nexport class CuteTabContent {\r\n template = inject<TemplateRef<any>>(TemplateRef);\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {\r\n Component,\r\n Input,\r\n Output,\r\n ContentChildren,\r\n QueryList,\r\n ViewChildren,\r\n EventEmitter,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n InjectionToken,\r\n numberAttribute,\r\n booleanAttribute, ViewContainerRef, ViewChild, ComponentRef, ElementRef, inject, DestroyRef\r\n} from '@angular/core';\r\nimport {CuteTab} from './tab.component';\r\nimport {CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray} from '@angular/cdk/drag-drop';\r\nimport {NgTemplateOutlet} from \"@angular/common\";\r\nimport {CuteLayoutControl} from \"@cute-widgets/base/abstract\";\r\nimport {\r\n CuteNavChangeEvent,\r\n CuteNavChangingEvent,\r\n CuteNavLink,\r\n CuteNavModule,\r\n CuteNavStretch\r\n} from \"@cute-widgets/base/core/nav\";\r\nimport {FocusOrigin} from \"@angular/cdk/a11y\";\r\nimport {ContentAlignment, Scheduler, ViewportEdge} from \"@cute-widgets/base/core\";\r\nimport {CuteButtonModule} from \"@cute-widgets/base/button\";\r\nimport {debounceTime, fromEvent} from \"rxjs\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CuteObserveVisibility} from \"@cute-widgets/base/core/observers\";\r\n\r\nlet nextId: number = 0;\r\n\r\n/**\r\n * Used to provide a tab group to a tab without causing a circular dependency.\r\n */\r\nexport const CUTE_TAB_GROUP = new InjectionToken<CuteTabGroup>('CUTE_TAB_GROUP');\r\n\r\n/** Cancelable event emitted when the `cute-tab` selection is about to change. */\r\nexport class CuteTabChangingEvent extends Event {\r\n constructor(\r\n /** Index of the currently-selected tab. */\r\n readonly index : number,\r\n /** Reference to the currently-selected tab. */\r\n readonly tab: CuteTab,\r\n /** Index of the previously-selected tab. */\r\n readonly fromIndex: number | null,\r\n /** Reference to the previously-selected tab. */\r\n readonly fromTab: CuteTab | null,\r\n /** How the tab was focused. */\r\n readonly origin: FocusOrigin,\r\n ) {\r\n super(\"tabChanging\", {cancelable: true});\r\n }\r\n}\r\n\r\n/** A simple change event emitted on focus or selection changes. */\r\nexport class CuteTabChangeEvent extends Event {\r\n constructor(\r\n /** Index of the currently-selected tab. */\r\n readonly index : number,\r\n /** Reference to the currently-selected tab. */\r\n readonly tab: CuteTab,\r\n /** Index of the previously-selected tab. */\r\n readonly fromIndex: number | null,\r\n /** Reference to the previously-selected tab. */\r\n readonly fromTab: CuteTab | null,\r\n /** How the tab was focused. */\r\n readonly origin: FocusOrigin,\r\n ) {\r\n super(\"tabChange\");\r\n }\r\n}\r\n\r\n/**\r\n * A flexible, feature-rich tab component for Angular applications with Bootstrap integration.\r\n */\r\n@Component({\r\n selector: 'cute-tab-group',\r\n templateUrl: './tab-group.component.html',\r\n styleUrls: ['./tab-group.component.scss'],\r\n exportAs: \"cuteTabGroup\",\r\n host: {\r\n \"class\": \"cute-tab-group\",\r\n \"[class.tabs-top]\": \"headerPosition === 'top'\",\r\n \"[class.tabs-bottom]\": \"headerPosition === 'bottom'\",\r\n \"[class.tabs-left]\": \"headerPosition === 'left'\",\r\n \"[class.tabs-right]\": \"headerPosition === 'right'\",\r\n \"[class.tabs-end]\": \"headerPosition === 'end'\",\r\n \"[class.tabs-start]\": \"headerPosition === 'start'\",\r\n \"[attr.cute-align-tabs]\": \"alignTabs\",\r\n \"[style.--cute-tab-animation-duration]\": \"animationDuration\",\r\n },\r\n imports: [\r\n CdkDropList,\r\n CdkDrag,\r\n NgTemplateOutlet,\r\n CuteNavModule,\r\n CuteButtonModule,\r\n CuteObserveVisibility,\r\n ],\r\n providers: [\r\n {provide: CUTE_TAB_GROUP, useExisting: CuteTabGroup},\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CuteTabGroup extends CuteLayoutControl {\r\n private _indexToChange: number | null = null;\r\n private _scrollDebounce: number | undefined;\r\n private _resizeObserver: ResizeObserver | undefined;\r\n\r\n protected showScrollButtons = false;\r\n protected canScrollLeft = false;\r\n protected canScrollRight = false;\r\n /** Number of pixels to scroll left or right */\r\n protected scrollAmount: number = 200;\r\n protected dynamicTabs: ComponentRef<CuteTab>[] = [];\r\n\r\n protected destroyRef = inject(DestroyRef);\r\n\r\n @ContentChildren(CuteTab)\r\n protected tabs: QueryList<CuteTab> | undefined;\r\n\r\n @ViewChildren('tabLink', {read: CuteNavLink})\r\n protected tabLinks: QueryList<CuteNavLink> | undefined;\r\n\r\n @ViewChild('dynamicTabs', {read: ViewContainerRef, static: true})\r\n protected dynamicTabsContainer: ViewContainerRef | undefined;\r\n\r\n @ViewChild('headerContainer', {static: true})\r\n headerContainer!: ElementRef<HTMLElement>;\r\n\r\n @ViewChild('headerScroll', {static: true})\r\n headerScroll!: ElementRef<HTMLElement>;\r\n\r\n /** The index of the active tab. */\r\n @Input({transform: numberAttribute})\r\n get selectedIndex(): number|undefined {return this._selectedIndex;}\r\n set selectedIndex(value: number) {\r\n if (value !== this._selectedIndex) {\r\n this._indexToChange = value;\r\n Promise.resolve().then(()=> this.selectTab(value));\r\n }\r\n }\r\n private _selectedIndex: number | undefined;\r\n\r\n /**\r\n * Alignment for tabs.\r\n * @default start\r\n */\r\n @Input({ alias: 'cute-align-tabs' })\r\n alignTabs: ContentAlignment = \"start\";\r\n\r\n /**\r\n * The style a `cute-tab`’s content extends the full available width, proportionately (**fill**) or equal-width (**justified**).\r\n * The width is determined by the longest `cute-tab-label`'s content. By default, stretching of items is not used (**none**).\r\n */\r\n @Input({alias: 'cute-stretch-tabs'})\r\n get stretchTabs(): CuteNavStretch { return this._stretchTabs; }\r\n set stretchTabs(value: CuteNavStretch|boolean|\"false\"|\"true\"|undefined) {\r\n if (value) {\r\n if (typeof value===\"boolean\" || value===\"true\" || value===\"false\") {\r\n this._stretchTabs = Boolean(value) ? \"justified\" : \"none\";\r\n } else {\r\n this._stretchTabs = value;\r\n }\r\n } else {\r\n this._stretchTabs = \"none\";\r\n }\r\n }\r\n private _stretchTabs: CuteNavStretch = \"none\";\r\n\r\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\r\n @Input()\r\n get animationDuration(): string { return this._animationDuration; }\r\n set animationDuration(value: string | number) {\r\n const stringValue = value + '';\r\n this._animationDuration = /^\\d+$/.test(stringValue) ? value + 'ms' : stringValue;\r\n }\r\n private _animationDuration: string = \"\";\r\n\r\n /**\r\n * By default, tabs remove their lazy content from the DOM while it's off-screen. Setting this to _true_ will keep it in the DOM,\r\n * which will prevent elements like `iframe` and `video` from reloading next time it comes back into the view.\r\n */\r\n @Input({ transform: booleanAttribute })\r\n preserveContent: boolean | undefined;\r\n\r\n /** Whether the tab group will change its height to the height of the currently active tab. */\r\n @Input({transform: booleanAttribute})\r\n dynamicHeight: boolean = false;\r\n\r\n /**\r\n * Possible position for the tab header.\r\n * @default top\r\n */\r\n @Input()\r\n get headerPosition(): ViewportEdge {return this._headerPosition;}\r\n set headerPosition(newPosition: ViewportEdge) {\r\n if (newPosition !== this._headerPosition) {\r\n this._headerPosition = newPosition;\r\n Promise.resolve().then(() => this.scrollToTab());\r\n this.headerPositionChange.emit(newPosition);\r\n }\r\n }\r\n private _headerPosition: ViewportEdge = 'top';\r\n\r\n /** Use `underline` style for horizontal tabs. */\r\n @Input({transform: booleanAttribute})\r\n underlineTabs: boolean = false;\r\n\r\n /**\r\n * Whether tabs can be draggable.\r\n * @default false\r\n */\r\n @Input({transform: booleanAttribute})\r\n dragEnabled = false;\r\n\r\n /**\r\n * Defines the horizontal alignment when scrolling the tabs.\r\n * @default center\r\n */\r\n @Input()\r\n tabScrollingAlignment: ScrollLogicalPosition = \"center\";\r\n\r\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\r\n @Output() selectedIndexChange = new EventEmitter<number>();\r\n\r\n /** Event emitted when the active tab selection is about to change. */\r\n @Output() selectedTabChanging = new EventEmitter<CuteTabChangingEvent>();\r\n\r\n /** Event emitted when the tab selection has been changed. */\r\n @Output() selectedTabChange = new EventEmitter<CuteTabChangeEvent>();\r\n\r\n /** Event emitted when focus has changed within a tab group. */\r\n @Output() focusChange = new EventEmitter<CuteTabChangeEvent>();\r\n\r\n /** Event emitted when the position of tabs header has been changed. */\r\n @Output() headerPositionChange = new EventEmitter<ViewportEdge>();\r\n\r\n /** Event emitted after the new tab was added. */\r\n @Output() tabAdded = new EventEmitter<void>();\r\n\r\n /** Event emitted after the closable tab was removed. */\r\n @Output() tabRemoved = new EventEmitter<number>();\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n /** Whether the tab group currently has a horizontal layout */\r\n get isHorizontal(): boolean {\r\n return this.headerPosition === 'top' || this.headerPosition === 'bottom';\r\n }\r\n\r\n /** The active tab. */\r\n get selectedTab(): CuteTab | undefined {\r\n return this.tabs?.get(this.selectedIndex ?? NaN);\r\n }\r\n\r\n /** The number of tabs in the tab group. */\r\n get tabCount(): number {\r\n return this.tabs?.length || 0;\r\n }\r\n\r\n /**\r\n * Returns the first element in the array of tabs that satisfies the provided testing function.\r\n * Otherwise, _undefined_ is returned.\r\n * @param predicate Testing function\r\n * @returns `CuteTab` object or _undefined_ if there are no tabs with the specified condition.\r\n */\r\n findTab(predicate: (tab: CuteTab, index: number) => boolean): CuteTab | undefined {\r\n return this.tabs?.find(predicate);\r\n }\r\n\r\n protected override generateId(): string {\r\n return `cute-tab-group-${nextId++}`;\r\n }\r\n\r\n private checkScrollButtons() {\r\n const el = this.headerScroll.nativeElement;\r\n this.showScrollButtons = el.scrollWidth > el.clientWidth;\r\n this.canScrollLeft = el.scrollLeft > 0;\r\n this.canScrollRight = el.scrollLeft < el.scrollWidth - el.clientWidth - 1;\r\n //this._changeDetectorRef.detectChanges();\r\n this.markForCheck();\r\n }\r\n\r\n private setupScrollListener() {\r\n fromEvent(this.headerScroll.nativeElement, 'scroll')\r\n .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.checkScrollButtons());\r\n\r\n this._resizeObserver = new ResizeObserver(() => {\r\n this.checkScrollButtons();\r\n //setTimeout(()=>this.scrollToTab( this.selectedIndex ));\r\n });\r\n this._resizeObserver.observe(this.headerContainer.nativeElement);\r\n }\r\n\r\n protected scrollHeader(direction: number) {\r\n const el = this.headerScroll.nativeElement;\r\n\r\n clearTimeout(this._scrollDebounce);\r\n el.scrollBy({\r\n left: direction * this.scrollAmount,\r\n behavior: 'smooth'\r\n });\r\n\r\n this._scrollDebounce = setTimeout(() => {\r\n this.checkScrollButtons();\r\n }, 300);\r\n }\r\n\r\n /**\r\n * Activates tab with the specified index.\r\n * @param index Tab index\r\n * @param origin (optional) Focus origin\r\n * @returns A promise of a \"logical\" result, where _true_ means a successful change of the active tab, and _false_ otherwise.\r\n * @async\r\n */\r\n async selectTab(index: number, origin: FocusOrigin=\"program\"): Promise<boolean> {\r\n if (!this.tabs) return false;\r\n if (index < 0 || index >= this.tabs.length) return false;\r\n if (index === this.selectedIndex) return true;\r\n const tabsArray = this.tabs.toArray();\r\n if (tabsArray[index].disabled) return false;\r\n\r\n this._indexToChange = null;\r\n this._selectedIndex = index;\r\n\r\n this.tabs.forEach((tab, i) => {\r\n //tab.active = (i === index);\r\n tab.active = false;\r\n });\r\n\r\n tabsArray[index].active = true;\r\n\r\n await Scheduler.postTask(() => {\r\n if (tabsArray[index].scrollNeeded) {\r\n this.scrollToTab(index);\r\n }\r\n }, {delay: 100});\r\n\r\n this.selectedIndexChange.emit(index);\r\n\r\n this.markForCheck();\r\n\r\n return true;\r\n }\r\n\r\n private _createChangeEvent(event: CuteNavChangeEvent): CuteTabChangeEvent {\r\n const tabsArray = this.tabs?.toArray() ?? [];\r\n return new CuteTabChangeEvent(event.index,\r\n tabsArray[event.index],\r\n event.fromIndex,\r\n event.fromIndex ? tabsArray[event.fromIndex] : null,\r\n event.origin\r\n );\r\n }\r\n\r\n private _createChangingEvent(event: CuteNavChangingEvent): CuteTabChangingEvent {\r\n const tabsArray = this.tabs?.toArray() ?? [];\r\n return new CuteTabChangeEvent(event.index,\r\n tabsArray[event.index],\r\n event.fromIndex,\r\n event.fromIndex ? tabsArray[event.fromIndex] : null,\r\n event.origin\r\n );\r\n }\r\n\r\n protected onNavFocusChange(event: CuteNavChangeEvent) {\r\n this.focusChange.emit( this._createChangeEvent(event) );\r\n }\r\n\r\n protected onNavLinkChange(event: CuteNavChangeEvent) {\r\n this.selectedTabChange.emit( this._createChangeEvent(event) );\r\n }\r\n\r\n protected onNavLinkChanging(event: CuteNavChangingEvent) {\r\n const ev = this._createChangingEvent(event);\r\n this.selectedTabChanging.emit( ev );\r\n if (ev.defaultPrevented) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected getLabelContext(tab: CuteTab, index: number) {\r\n return {...tab.getContentContext(), index};\r\n }\r\n\r\n /** Gets the current index of the specified tab object. */\r\n getTabIndex(tab: CuteTab): number | undefined {\r\n return this.tabs?.toArray().indexOf(tab);\r\n }\r\n\r\n private scrollToTab(index?: number) {\r\n index = index ?? this.selectedIndex;\r\n if (index != null) {\r\n const tabElement = this.tabLinks?.toArray()[index]?.element.nativeElement;\r\n if (tabElement) {\r\n tabElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'nearest',\r\n inline: this.tabScrollingAlignment\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** Drop event */\r\n protected onDrop(event: CdkDragDrop<CuteTab[]>): void {\r\n if (event.previousIndex === event.currentIndex) return;\r\n if (!this.tabs) return;\r\n\r\n const tabsArray = this.tabs.toArray();\r\n moveItemInArray(tabsArray, event.previousIndex, event.currentIndex);\r\n\r\n // Refresh QueryList\r\n this.tabs.reset(tabsArray);\r\n\r\n this._adjustActiveIndex(event.previousIndex, event.currentIndex);\r\n\r\n this.tabs.notifyOnChanges();\r\n }\r\n\r\n /** Sets a new active index after the dragging tabs */\r\n private _adjustActiveIndex(prevIndex: number, newIndex: number) {\r\n if (this.selectedIndex === prevIndex) {\r\n this.selectedIndex = newIndex;\r\n } else if (this.selectedIndex !== undefined) {\r\n const min = Math.min(prevIndex, newIndex);\r\n const max = Math.max(prevIndex, newIndex);\r\n if (this.selectedIndex >= min && this.selectedIndex <= max) {\r\n this.selectedIndex += (prevIndex < newIndex ? -1 : 1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds a new tab to the end of `tab-group` dynamically.\r\n *\r\n * @param label Tab label\r\n * @param content Tab template reference\r\n * @param context (optional) Template context object\r\n * @param closable (optional) Whether the tab is closable. Default is _true_.\r\n * @returns `ComponentRef` object of the new Tab.\r\n */\r\n async addTab(label: string, content: TemplateRef<any>, context?: any, closable?: boolean): Promise<ComponentRef<CuteTab>> {\r\n const componentRef = this.dynamicTabsContainer!.createComponent(CuteTab);\r\n const newTab = componentRef.instance;\r\n newTab.textLabel = label || `Tab ${(this.tabs?.length??0) + 1}`;\r\n newTab.contentTemplate = content;\r\n newTab.contentContext = context;\r\n newTab.active = true; // !this.tabs || this.tabs.length === 0;\r\n newTab._isDynamic = true;\r\n //componentRef.setInput(\"closable\", true);\r\n newTab.closable = closable ?? true;\r\n componentRef.changeDetectorRef.detectChanges();\r\n this.dynamicTabs.push(componentRef);\r\n\r\n const tabsArray = this.tabs?.toArray() || [];\r\n tabsArray.push(newTab);\r\n this.tabs?.reset( tabsArray );\r\n\r\n if (newTab.active) {\r\n const newIndex = tabsArray.length - 1;\r\n if (await this.selectTab(newIndex)) {\r\n this.scrollToTab(newIndex);\r\n }\r\n }\r\n\r\n this.tabAdded.emit();\r\n\r\n return componentRef;\r\n }\r\n\r\n /**\r\n * Removes the tab with specified index.\r\n * @param index Tab index\r\n */\r\n async removeTab(index: number) {\r\n if (!this.tabs) return;\r\n if (index < 0 || index >= this.tabs.length) return;\r\n\r\n const tab = this.tabs.get(index)!;\r\n const wasActive = tab.active;\r\n\r\n const dynIndex = this.dynamicTabs.findIndex(cref => cref.instance == tab);\r\n if (dynIndex >= 0) {\r\n this.dynamicTabsContainer?.remove(dynIndex);\r\n this.dynamicTabs.splice(dynIndex, 1);\r\n }\r\n\r\n const tabsArray = this.tabs.filter((_, i) => i !== index);\r\n this.tabs.reset( tabsArray );\r\n this.tabs.notifyOnChanges();\r\n\r\n this.tabRemoved.emit(index);\r\n\r\n if (wasActive && this.tabs.length > 0) {\r\n const newIndex = Math.min(index, this.tabs.length - 1);\r\n if (newIndex == index) {\r\n // To bypass verification\r\n this._selectedIndex = undefined;\r\n }\r\n this.selectedIndex = newIndex;\r\n this.tabs.get(newIndex)?.link?.focus();\r\n }\r\n\r\n this.checkScrollButtons();\r\n\r\n //this.markForCheck();\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n\r\n this.checkScrollButtons();\r\n this.setupScrollListener();\r\n }\r\n\r\n override ngAfterContentInit() {\r\n super.ngAfterContentInit();\r\n if (this.tabs) {\r\n const tabsArray = this.tabs.toArray();\r\n if (this._indexToChange == null) {\r\n this.selectedIndex = Math.max( tabsArray.findIndex(t => !t.disabled), 0);\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._resizeObserver?.disconnect();\r\n }\r\n\r\n}\r\n","<div class=\"tab-header-wrapper\" #headerContainer>\r\n <div class=\"tab-header-scroll\" #headerScroll\r\n cdkDropList\r\n [cdkDropListOrientation]=\"isHorizontal ? 'horizontal' : 'vertical'\"\r\n (cdkDropListDropped)=\"onDrop($event)\">\r\n <nav [cuteNav]=\"isHorizontal ? (underlineTabs ? 'underline' : 'tabs') : 'pills'\"\r\n [selectedIndex]=\"selectedIndex\"\r\n [alignment]=\"alignTabs\"\r\n [stretchItems]=\"stretchTabs\"\r\n [preserveTabContent]=\"preserveContent\"\r\n [color]=\"color\"\r\n [class.flex-column]=\"!isHorizontal\"\r\n (selectedIndexChange)=\"selectTab($event)\"\r\n (selectedLinkChanging)=\"onNavLinkChanging($event)\"\r\n (selectedLinkChange)=\"onNavLinkChange($event)\"\r\n (focusChange)=\"onNavFocusChange($event)\">\r\n @for (tab of tabs; track tab.id; let i = $index) {\r\n <li cute-nav-item\r\n cdkDrag\r\n [cdkDragDisabled]=\"!dragEnabled || tabCount <= 1\"\r\n [cdkDragData]=\"tab\">\r\n <a href=\"#\" cute-nav-link\r\n [cuteObserveVisibility]=\"1\"\r\n [cuteObserveVisibilityRoot]=\"headerScroll\"\r\n (cuteObserveVisibility)=\"tab._visibilityChanged($event)\"\r\n [active]=\"tab.active\"\r\n [disabled]=\"tab.disabled\"\r\n [id]=\"tab.ariaLabelledby || undefined\"\r\n [attr.aria-disabled]=\"tab.disabled\"\r\n [attr.aria-controls]=\"tab.id\"\r\n [attr.tabindex]=\"tab.active && !tab.disabled ? 0 : -1\"\r\n role=\"tab\"\r\n #tabLink>\r\n\r\n @if (tab._templateLabel) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tab._templateLabel; context: getLabelContext(tab, i)\">\r\n </ng-container>\r\n } @else {\r\n <!-- <ng-container>-->\r\n <!-- @if (dragEnabled && tabCount > 1) {-->\r\n <!-- <span cdkDragHandle>☰</span>-->\r\n <!-- }-->\r\n {{ tab.textLabel || 'Tab '+i }}\r\n <!-- </ng-container>-->\r\n }\r\n\r\n @if (tab.closable && tab._isDynamic) {\r\n <button cuteButton=\"close-button\"\r\n magnitude=\"smallest\"\r\n tabIndex=\"-1\"\r\n (click)=\"removeTab(i); $event.preventDefault();\"\r\n aria-label=\"Close tab\">\r\n </button>\r\n }\r\n\r\n </a>\r\n </li>\r\n }\r\n </nav>\r\n\r\n </div>\r\n\r\n @if (showScrollButtons) {\r\n <button cuteButton class=\"scroll-button left\"\r\n tabindex=\"-1\"\r\n magnitude=\"smallest\"\r\n visuallyHiddenLabel=\"Prev\"\r\n aria-hidden=\"true\"\r\n (click)=\"scrollHeader(-1)\"\r\n [disabled]=\"!canScrollLeft\">\r\n <!--\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"currentColor\" class=\"bi bi-chevron-left\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0\"/>\r\n </svg>\r\n -->\r\n </button>\r\n <button cuteButton class=\"scroll-button right\"\r\n tabindex=\"-1\"\r\n magnitude=\"smallest\"\r\n visuallyHiddenLabel=\"Next\"\r\n aria-hidden=\"true\"\r\n (click)=\"scrollHeader(1)\"\r\n [disabled]=\"!canScrollRight\">\r\n <!--\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"currentColor\" class=\"bi bi-chevron-right\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\r\n </svg>\r\n -->\r\n </button>\r\n <!--\r\n <div class=\"scroll-indicator\"\r\n [class.active]=\"showScrollButtons\"\r\n [class.left-visible]=\"canScrollLeft\"\r\n [class.right-visible]=\"canScrollRight\">\r\n </div>\r\n -->\r\n }\r\n\r\n</div>\r\n\r\n<div class=\"tab-content-wrapper\">\r\n<!-- <div class=\"tab-content\">-->\r\n <ng-content></ng-content>\r\n <ng-container #dynamicTabs></ng-container>\r\n<!-- </div>-->\r\n</div>\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n SimpleChanges,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n InjectionToken,\r\n signal,\r\n ContentChild,\r\n booleanAttribute,\r\n inject,\r\n} from '@angular/core';\r\nimport {NgTemplateOutlet} from \"@angular/common\";\r\nimport {CuteTabLabel} from \"./tab-label.directive\";\r\nimport {CuteTabContent} from \"./tab-content.directive\";\r\nimport {CuteFocusableControl} from \"@cute-widgets/base/abstract\";\r\nimport {Subject} from \"rxjs\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CUTE_TAB_GROUP} from \"./tab-group.component\";\r\nimport {CuteNavLink} from \"@cute-widgets/base/core/nav\";\r\nimport {_animationsDisabled} from '@cute-widgets/base/core';\r\n\r\n/**\r\n * Used to provide a tab label to a tab without causing a circular dependency.\r\n * @docs-private\r\n */\r\nexport const CUTE_TAB = new InjectionToken<CuteTab>('CUTE_TAB');\r\n\r\nlet nextId: number = 0;\r\n\r\n@Component({\r\n selector: 'cute-tab',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n host: {\r\n \"class\": \"cute-tab tab-pane\",\r\n \"[class.fade]\": \"_animationEnabled\",\r\n // \"[class.show]\": \"active\",\r\n \"[class.active]\": \"active\",\r\n '[attr.tabindex]': 'active && !disabled ? 0 : -1',\r\n '[attr.aria-labelledby]': 'ariaLabelledby || null',\r\n '[attr.id]': 'id || null',\r\n \"role\": \"tabpanel\",\r\n },\r\n providers: [{provide: CUTE_TAB, useExisting: CuteTab}],\r\n imports: [\r\n NgTemplateOutlet,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CuteTab extends CuteFocusableControl {\r\n private _intersectionRatio: number = NaN;\r\n protected _closestTabGroup = inject(CUTE_TAB_GROUP, {optional: true});\r\n protected _animationEnabled = !_animationsDisabled();\r\n\r\n /** Plain text label for the tab, used when there is no template label. */\r\n @Input(\"label\") textLabel: string = \"\";\r\n\r\n //@Input() titleTemplate: TemplateRef<any> | undefined;\r\n\r\n /** Explicit reference to the external content template. */\r\n @Input() contentTemplate: TemplateRef<any> | undefined;\r\n\r\n /** Lazy loading label's outlet context. */\r\n @Input() labelContext: any = {};\r\n\r\n /** Lazy loading content's outlet context. */\r\n @Input() contentContext: any = {};\r\n\r\n /** Whether the tab is closable. */\r\n @Input({transform: booleanAttribute}) closable = false;\r\n\r\n /** Whether the tab preserves lazing content. */\r\n @Input({ transform: booleanAttribute })\r\n preserveContent: boolean | undefined;\r\n\r\n /** Content for the tab label given by `<ng-template cute-tab-label>`. */\r\n @ContentChild(CuteTabLabel, {read: TemplateRef, static: true})\r\n public readonly _templateLabel: TemplateRef<any>|undefined;\r\n\r\n /**\r\n * Template provided in the tab content by <ng-template cute-tab-content>, used to enable lazy-loading\r\n */\r\n @ContentChild(CuteTabContent, {read: TemplateRef, static: true})\r\n private _explicitContent: TemplateRef<any> | undefined;\r\n\r\n /** Reference to `<cute-nav-link>` element. */\r\n @ContentChild(CuteNavLink, {descendants: true})\r\n readonly link: CuteNavLink | undefined;\r\n\r\n /** Whether the tab is currently active. */\r\n get active(): boolean {return this._active;}\r\n set active(value: boolean) {\r\n if (value !== this._active) {\r\n this._active = value;\r\n\r\n if (this._animationEnabled) {\r\n setTimeout(() => this.toggleClass(\"show\", value), 150);\r\n } else {\r\n this.toggleClass(\"show\", value);\r\n }\r\n\r\n this._stateChanges.next();\r\n }\r\n }\r\n private _active: boolean = false;\r\n\r\n /** Whether the tab is intersected the containing box and needs to scroll to display its full size */\r\n get scrollNeeded(): boolean {\r\n return this._intersectionRatio < 1;\r\n }\r\n\r\n /** Whether the tab was added dynamically */\r\n public _isDynamic: boolean = false;\r\n\r\n protected isPreserveContent(): boolean {\r\n return this.preserveContent ?? this._closestTabGroup?.preserveContent ?? false;\r\n }\r\n\r\n /** Tab content defined by <ng-template cute-tab-content> or directly referenced where the latter has more priority. */\r\n protected get explicitContent(): TemplateRef<any> | undefined {\r\n return this.contentTemplate || this._explicitContent;\r\n }\r\n\r\n /** Emits whenever the internal state of the tab changes. */\r\n readonly _stateChanges = new Subject<void>();\r\n\r\n /** Whether the tab content was loaded */\r\n loaded = signal<boolean>(false);\r\n\r\n /** Template inside the CuteTab view that contains an `<ng-content>`. */\r\n // @ViewChild(TemplateRef, {static: true}) _implicitContent: TemplateRef<any> | undefined;\r\n\r\n constructor() {\r\n super();\r\n this._stateChanges.pipe(takeUntilDestroyed()).subscribe(()=> {\r\n this.markForCheck();\r\n });\r\n }\r\n\r\n protected override generateId(): string {\r\n return `cute-tab-${nextId++}`;\r\n }\r\n\r\n /** Gets the content template's context object */\r\n getContentContext(): any {\r\n return {...this.contentContext,\r\n $implicit: this,\r\n index: this._closestTabGroup?.getTabIndex(this),\r\n active: this.active,\r\n tab: this\r\n };\r\n }\r\n\r\n /**\r\n * Removes this tab from the tab group.\r\n */\r\n async remove() {\r\n if (this._closestTabGroup) {\r\n const index = this._closestTabGroup.getTabIndex(this);\r\n if (index != null) {\r\n return this._closestTabGroup.removeTab( index );\r\n }\r\n }\r\n return;\r\n }\r\n\r\n _visibilityChanged(entries: IntersectionObserverEntry[]) {\r\n if (entries.length) {\r\n //this._intersectionRatio = entries[0].intersectionRatio;\r\n this._intersectionRatio = entries.at(-1)!.intersectionRatio;\r\n }\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n\r\n this.ariaLabelledby = this.id+\"-link\";\r\n }\r\n\r\n override ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n if (changes['textLabel'] || changes['disabled'] || changes['closable']) {\r\n this._stateChanges.next();\r\n }\r\n if (changes[\"active\"] && changes[\"active\"].currentValue) {\r\n this.loaded.set(true);\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._stateChanges.complete();\r\n }\r\n}\r\n","@if (active || isPreserveContent()) {\r\n\r\n <ng-content></ng-content>\r\n\r\n @if (explicitContent) {\r\n <ng-container [ngTemplateOutlet]=\"explicitContent\"\r\n [ngTemplateOutletContext]=\"getContentContext()\">\r\n </ng-container>\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {NgModule, Type} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {CuteTab} from \"./tab.component\";\r\nimport {CuteTabGroup} from \"./tab-group.component\";\r\nimport {CuteTabLabel} from \"./tab-label.directive\";\r\nimport {CuteTabContent} from \"./tab-content.directive\";\r\n\r\nconst TYPES: (any | Type<any>)[] = [\r\n CuteTab,\r\n CuteTabGroup,\r\n CuteTabLabel,\r\n CuteTabContent,\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, ...TYPES],\r\n exports: TYPES,\r\n declarations: [],\r\n})\r\nexport class CuteTabsModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cute-widgets-base-tabs.mjs","sources":["../../../../projects/cute-widgets/base/tabs/src/tab-label.directive.ts","../../../../projects/cute-widgets/base/tabs/src/tab-content.directive.ts","../../../../projects/cute-widgets/base/tabs/src/tab-group.component.ts","../../../../projects/cute-widgets/base/tabs/src/tab-group.component.html","../../../../projects/cute-widgets/base/tabs/src/tab.component.ts","../../../../projects/cute-widgets/base/tabs/src/tab.component.html","../../../../projects/cute-widgets/base/tabs/src/tabs.module.ts","../../../../projects/cute-widgets/base/tabs/cute-widgets-base-tabs.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {Directive, InjectionToken, inject} from '@angular/core';\r\nimport {CUTE_TAB} from \"./tab.component\";\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteTabLabel`. It serves as\r\n * alternative token to the actual `CuteTabLabel` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const CUTE_TAB_LABEL = new InjectionToken<CuteTabLabel>('CuteTabLabel');\r\n\r\n/** Used to flag tab labels for use with the portal directive */\r\n@Directive({\r\n selector: 'ng-template[cute-tab-label], ng-template[cuteTabLabel]',\r\n exportAs: 'cuteTabLabel',\r\n providers: [{provide: CUTE_TAB_LABEL, useExisting: CuteTabLabel}],\r\n})\r\nexport class CuteTabLabel {\r\n _closestTab = inject(CUTE_TAB, {optional: true});\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {Directive, InjectionToken, TemplateRef, inject} from '@angular/core';\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteTabContent`. It serves as\r\n * alternative token to the actual `CuteTabContent` class which could cause unnecessary\r\n * retention of the class and its directive metadata.\r\n */\r\nexport const CUTE_TAB_CONTENT = new InjectionToken<CuteTabContent>('CuteTabContent');\r\n\r\n/** Decorates the `ng-template` tags and reads out the template from it. */\r\n@Directive({\r\n selector: 'ng-template[cute-tab-content], ng-template[cuteTabContent]',\r\n providers: [{provide: CUTE_TAB_CONTENT, useExisting: CuteTabContent}],\r\n})\r\nexport class CuteTabContent {\r\n template = inject<TemplateRef<any>>(TemplateRef);\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {\r\n Component,\r\n Input,\r\n Output,\r\n ContentChildren,\r\n QueryList,\r\n ViewChildren,\r\n EventEmitter,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n InjectionToken,\r\n numberAttribute,\r\n booleanAttribute, ViewContainerRef, ViewChild, ComponentRef, ElementRef, inject, DestroyRef\r\n} from '@angular/core';\r\nimport {CuteTab} from './tab.component';\r\nimport {CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray} from '@angular/cdk/drag-drop';\r\nimport {NgTemplateOutlet} from \"@angular/common\";\r\nimport {CuteLayoutControl} from \"@cute-widgets/base/abstract\";\r\nimport {\r\n CuteNavChangeEvent,\r\n CuteNavChangingEvent,\r\n CuteNavLink,\r\n CuteNavModule,\r\n CuteNavStretch\r\n} from \"@cute-widgets/base/core/nav\";\r\nimport {FocusOrigin} from \"@angular/cdk/a11y\";\r\nimport {ContentAlignment, Scheduler, ViewportEdge} from \"@cute-widgets/base/core\";\r\nimport {CuteButtonModule} from \"@cute-widgets/base/button\";\r\nimport {debounceTime, fromEvent} from \"rxjs\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CuteObserveVisibility} from \"@cute-widgets/base/core/observers\";\r\n\r\nlet nextId: number = 0;\r\n\r\n/**\r\n * Used to provide a tab group to a tab without causing a circular dependency.\r\n */\r\nexport const CUTE_TAB_GROUP = new InjectionToken<CuteTabGroup>('CUTE_TAB_GROUP');\r\n\r\n/** Cancelable event emitted when the `cute-tab` selection is about to change. */\r\nexport class CuteTabChangingEvent extends Event {\r\n constructor(\r\n /** Index of the currently-selected tab. */\r\n readonly index : number,\r\n /** Reference to the currently-selected tab. */\r\n readonly tab: CuteTab,\r\n /** Index of the previously-selected tab. */\r\n readonly fromIndex: number | null,\r\n /** Reference to the previously-selected tab. */\r\n readonly fromTab: CuteTab | null,\r\n /** How the tab was focused. */\r\n readonly origin: FocusOrigin,\r\n ) {\r\n super(\"tabChanging\", {cancelable: true});\r\n }\r\n}\r\n\r\n/** A simple change event emitted on focus or selection changes. */\r\nexport class CuteTabChangeEvent extends Event {\r\n constructor(\r\n /** Index of the currently-selected tab. */\r\n readonly index : number,\r\n /** Reference to the currently-selected tab. */\r\n readonly tab: CuteTab,\r\n /** Index of the previously-selected tab. */\r\n readonly fromIndex: number | null,\r\n /** Reference to the previously-selected tab. */\r\n readonly fromTab: CuteTab | null,\r\n /** How the tab was focused. */\r\n readonly origin: FocusOrigin,\r\n ) {\r\n super(\"tabChange\");\r\n }\r\n}\r\n\r\n/**\r\n * A flexible, feature-rich tab component for Angular applications with Bootstrap integration.\r\n */\r\n@Component({\r\n selector: 'cute-tab-group',\r\n templateUrl: './tab-group.component.html',\r\n styleUrls: ['./tab-group.component.scss'],\r\n exportAs: \"cuteTabGroup\",\r\n host: {\r\n \"class\": \"cute-tab-group\",\r\n \"[class.tabs-top]\": \"headerPosition === 'top'\",\r\n \"[class.tabs-bottom]\": \"headerPosition === 'bottom'\",\r\n \"[class.tabs-left]\": \"headerPosition === 'left'\",\r\n \"[class.tabs-right]\": \"headerPosition === 'right'\",\r\n \"[class.tabs-end]\": \"headerPosition === 'end'\",\r\n \"[class.tabs-start]\": \"headerPosition === 'start'\",\r\n \"[attr.cute-align-tabs]\": \"alignTabs\",\r\n \"[style.--cute-tab-animation-duration]\": \"animationDuration\",\r\n },\r\n imports: [\r\n CdkDropList,\r\n CdkDrag,\r\n NgTemplateOutlet,\r\n CuteNavModule,\r\n CuteButtonModule,\r\n CuteObserveVisibility,\r\n ],\r\n providers: [\r\n {provide: CUTE_TAB_GROUP, useExisting: CuteTabGroup},\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CuteTabGroup extends CuteLayoutControl {\r\n private _indexToChange: number | null = null;\r\n private _scrollDebounce: number | undefined;\r\n private _resizeObserver: ResizeObserver | undefined;\r\n\r\n protected showScrollButtons = false;\r\n protected canScrollLeft = false;\r\n protected canScrollRight = false;\r\n /** Number of pixels to scroll left or right */\r\n protected scrollAmount: number = 200;\r\n protected dynamicTabs: ComponentRef<CuteTab>[] = [];\r\n\r\n protected destroyRef = inject(DestroyRef);\r\n\r\n @ContentChildren(CuteTab)\r\n protected tabs: QueryList<CuteTab> | undefined;\r\n\r\n @ViewChildren('tabLink', {read: CuteNavLink})\r\n protected tabLinks: QueryList<CuteNavLink> | undefined;\r\n\r\n @ViewChild('dynamicTabs', {read: ViewContainerRef, static: true})\r\n protected dynamicTabsContainer: ViewContainerRef | undefined;\r\n\r\n @ViewChild('headerContainer', {static: true})\r\n headerContainer!: ElementRef<HTMLElement>;\r\n\r\n @ViewChild('headerScroll', {static: true})\r\n headerScroll!: ElementRef<HTMLElement>;\r\n\r\n /** The index of the active tab. */\r\n @Input({transform: numberAttribute})\r\n get selectedIndex(): number|undefined {return this._selectedIndex;}\r\n set selectedIndex(value: number) {\r\n if (value !== this._selectedIndex) {\r\n this._indexToChange = value;\r\n Promise.resolve().then(()=> this.selectTab(value));\r\n }\r\n }\r\n private _selectedIndex: number | undefined;\r\n\r\n /**\r\n * Alignment for tabs.\r\n * @default start\r\n */\r\n @Input({ alias: 'cute-align-tabs' })\r\n alignTabs: ContentAlignment = \"start\";\r\n\r\n /**\r\n * The style a `cute-tab`’s content extends the full available width, proportionately (**fill**) or equal-width (**justified**).\r\n * The width is determined by the longest `cute-tab-label`'s content. By default, stretching of items is not used (**none**).\r\n */\r\n @Input({alias: 'cute-stretch-tabs'})\r\n get stretchTabs(): CuteNavStretch { return this._stretchTabs; }\r\n set stretchTabs(value: CuteNavStretch|boolean|\"false\"|\"true\"|undefined) {\r\n if (value) {\r\n if (typeof value===\"boolean\" || value===\"true\" || value===\"false\") {\r\n this._stretchTabs = Boolean(value) ? \"justified\" : \"none\";\r\n } else {\r\n this._stretchTabs = value;\r\n }\r\n } else {\r\n this._stretchTabs = \"none\";\r\n }\r\n }\r\n private _stretchTabs: CuteNavStretch = \"none\";\r\n\r\n /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */\r\n @Input()\r\n get animationDuration(): string { return this._animationDuration; }\r\n set animationDuration(value: string | number) {\r\n const stringValue = value + '';\r\n this._animationDuration = /^\\d+$/.test(stringValue) ? value + 'ms' : stringValue;\r\n }\r\n private _animationDuration: string = \"\";\r\n\r\n /**\r\n * By default, tabs remove their lazy content from the DOM while it's off-screen. Setting this to _true_ will keep it in the DOM,\r\n * which will prevent elements like `iframe` and `video` from reloading next time it comes back into the view.\r\n */\r\n @Input({ transform: booleanAttribute })\r\n preserveContent: boolean | undefined;\r\n\r\n /** Whether the tab group will change its height to the height of the currently active tab. */\r\n @Input({transform: booleanAttribute})\r\n dynamicHeight: boolean = false;\r\n\r\n /**\r\n * Possible position for the tab header.\r\n * @default top\r\n */\r\n @Input()\r\n get headerPosition(): ViewportEdge {return this._headerPosition;}\r\n set headerPosition(newPosition: ViewportEdge) {\r\n if (newPosition !== this._headerPosition) {\r\n this._headerPosition = newPosition;\r\n Promise.resolve().then(() => this.scrollToTab());\r\n this.headerPositionChange.emit(newPosition);\r\n }\r\n }\r\n private _headerPosition: ViewportEdge = 'top';\r\n\r\n /** Use `underline` style for horizontal tabs. */\r\n @Input({transform: booleanAttribute})\r\n underlineTabs: boolean = false;\r\n\r\n /**\r\n * Whether tabs can be draggable.\r\n * @default false\r\n */\r\n @Input({transform: booleanAttribute})\r\n dragEnabled = false;\r\n\r\n /**\r\n * Defines the horizontal alignment when scrolling the tabs.\r\n * @default center\r\n */\r\n @Input()\r\n tabScrollingAlignment: ScrollLogicalPosition = \"center\";\r\n\r\n /** Output to enable support for two-way binding on `[(selectedIndex)]` */\r\n @Output() selectedIndexChange = new EventEmitter<number>();\r\n\r\n /** Event emitted when the active tab selection is about to change. */\r\n @Output() selectedTabChanging = new EventEmitter<CuteTabChangingEvent>();\r\n\r\n /** Event emitted when the tab selection has been changed. */\r\n @Output() selectedTabChange = new EventEmitter<CuteTabChangeEvent>();\r\n\r\n /** Event emitted when focus has changed within a tab group. */\r\n @Output() focusChange = new EventEmitter<CuteTabChangeEvent>();\r\n\r\n /** Event emitted when the position of tabs header has been changed. */\r\n @Output() headerPositionChange = new EventEmitter<ViewportEdge>();\r\n\r\n /** Event emitted after the new tab was added. */\r\n @Output() tabAdded = new EventEmitter<void>();\r\n\r\n /** Event emitted after the closable tab was removed. */\r\n @Output() tabRemoved = new EventEmitter<number>();\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n /** Whether the tab group currently has a horizontal layout */\r\n get isHorizontal(): boolean {\r\n return this.headerPosition === 'top' || this.headerPosition === 'bottom';\r\n }\r\n\r\n /** The active tab. */\r\n get selectedTab(): CuteTab | undefined {\r\n return this.tabs?.get(this.selectedIndex ?? NaN);\r\n }\r\n\r\n /** The number of tabs in the tab group. */\r\n get tabCount(): number {\r\n return this.tabs?.length || 0;\r\n }\r\n\r\n /**\r\n * Returns the first element in the array of tabs that satisfies the provided testing function.\r\n * Otherwise, _undefined_ is returned.\r\n * @param predicate Testing function\r\n * @returns `CuteTab` object or _undefined_ if there are no tabs with the specified condition.\r\n */\r\n findTab(predicate: (tab: CuteTab, index: number) => boolean): CuteTab | undefined {\r\n return this.tabs?.find(predicate);\r\n }\r\n\r\n protected override generateId(): string {\r\n return `cute-tab-group-${nextId++}`;\r\n }\r\n\r\n private checkScrollButtons() {\r\n const el = this.headerScroll.nativeElement;\r\n this.showScrollButtons = el.scrollWidth > el.clientWidth;\r\n this.canScrollLeft = el.scrollLeft > 0;\r\n this.canScrollRight = el.scrollLeft < el.scrollWidth - el.clientWidth - 1;\r\n //this._changeDetectorRef.detectChanges();\r\n this.markForCheck();\r\n }\r\n\r\n private setupScrollListener() {\r\n fromEvent(this.headerScroll.nativeElement, 'scroll')\r\n .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.checkScrollButtons());\r\n\r\n this._resizeObserver = new ResizeObserver(() => {\r\n this.checkScrollButtons();\r\n //setTimeout(()=>this.scrollToTab( this.selectedIndex ));\r\n });\r\n this._resizeObserver.observe(this.headerContainer.nativeElement);\r\n }\r\n\r\n protected scrollHeader(direction: number) {\r\n const el = this.headerScroll.nativeElement;\r\n\r\n clearTimeout(this._scrollDebounce);\r\n el.scrollBy({\r\n left: direction * this.scrollAmount,\r\n behavior: 'smooth'\r\n });\r\n\r\n this._scrollDebounce = setTimeout(() => {\r\n this.checkScrollButtons();\r\n }, 300);\r\n }\r\n\r\n /**\r\n * Activates tab with the specified index.\r\n * @param index Tab index\r\n * @param origin (optional) Focus origin\r\n * @returns A promise of a \"logical\" result, where _true_ means a successful change of the active tab, and _false_ otherwise.\r\n * @async\r\n */\r\n async selectTab(index: number, origin: FocusOrigin=\"program\"): Promise<boolean> {\r\n if (!this.tabs) return false;\r\n if (index < 0 || index >= this.tabs.length) return false;\r\n if (index === this.selectedIndex) return true;\r\n const tabsArray = this.tabs.toArray();\r\n if (tabsArray[index].disabled) return false;\r\n\r\n this._indexToChange = null;\r\n this._selectedIndex = index;\r\n\r\n this.tabs.forEach((tab, i) => {\r\n //tab.active = (i === index);\r\n tab.active = false;\r\n });\r\n\r\n tabsArray[index].active = true;\r\n\r\n await Scheduler.postTask(() => {\r\n if (tabsArray[index].scrollNeeded) {\r\n this.scrollToTab(index);\r\n }\r\n }, {delay: 100});\r\n\r\n this.selectedIndexChange.emit(index);\r\n\r\n this.markForCheck();\r\n\r\n return true;\r\n }\r\n\r\n private _createChangeEvent(event: CuteNavChangeEvent): CuteTabChangeEvent {\r\n const tabsArray = this.tabs?.toArray() ?? [];\r\n return new CuteTabChangeEvent(event.index,\r\n tabsArray[event.index],\r\n event.fromIndex,\r\n event.fromIndex ? tabsArray[event.fromIndex] : null,\r\n event.origin\r\n );\r\n }\r\n\r\n private _createChangingEvent(event: CuteNavChangingEvent): CuteTabChangingEvent {\r\n const tabsArray = this.tabs?.toArray() ?? [];\r\n return new CuteTabChangeEvent(event.index,\r\n tabsArray[event.index],\r\n event.fromIndex,\r\n event.fromIndex ? tabsArray[event.fromIndex] : null,\r\n event.origin\r\n );\r\n }\r\n\r\n protected onNavFocusChange(event: CuteNavChangeEvent) {\r\n this.focusChange.emit( this._createChangeEvent(event) );\r\n }\r\n\r\n protected onNavLinkChange(event: CuteNavChangeEvent) {\r\n this.selectedTabChange.emit( this._createChangeEvent(event) );\r\n }\r\n\r\n protected onNavLinkChanging(event: CuteNavChangingEvent) {\r\n const ev = this._createChangingEvent(event);\r\n this.selectedTabChanging.emit( ev );\r\n if (ev.defaultPrevented) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected getLabelContext(tab: CuteTab, index: number) {\r\n return {...tab.getContentContext(), index};\r\n }\r\n\r\n /** Gets the current index of the specified tab object. */\r\n getTabIndex(tab: CuteTab): number | undefined {\r\n return this.tabs?.toArray().indexOf(tab);\r\n }\r\n\r\n private scrollToTab(index?: number) {\r\n index = index ?? this.selectedIndex;\r\n if (index != null) {\r\n const tabElement = this.tabLinks?.toArray()[index]?.element.nativeElement;\r\n if (tabElement) {\r\n tabElement.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'nearest',\r\n inline: this.tabScrollingAlignment\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** Drop event */\r\n protected onDrop(event: CdkDragDrop<CuteTab[]>): void {\r\n if (event.previousIndex === event.currentIndex) return;\r\n if (!this.tabs) return;\r\n\r\n const tabsArray = this.tabs.toArray();\r\n moveItemInArray(tabsArray, event.previousIndex, event.currentIndex);\r\n\r\n // Refresh QueryList\r\n this.tabs.reset(tabsArray);\r\n\r\n this._adjustActiveIndex(event.previousIndex, event.currentIndex);\r\n\r\n this.tabs.notifyOnChanges();\r\n }\r\n\r\n /** Sets a new active index after the dragging tabs */\r\n private _adjustActiveIndex(prevIndex: number, newIndex: number) {\r\n if (this.selectedIndex === prevIndex) {\r\n this.selectedIndex = newIndex;\r\n } else if (this.selectedIndex !== undefined) {\r\n const min = Math.min(prevIndex, newIndex);\r\n const max = Math.max(prevIndex, newIndex);\r\n if (this.selectedIndex >= min && this.selectedIndex <= max) {\r\n this.selectedIndex += (prevIndex < newIndex ? -1 : 1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds a new tab to the end of `tab-group` dynamically.\r\n *\r\n * @param label Tab label\r\n * @param content Tab template reference\r\n * @param context (optional) Template context object\r\n * @param closable (optional) Whether the tab is closable. Default is _true_.\r\n * @returns `ComponentRef` object of the new Tab.\r\n */\r\n async addTab(label: string, content: TemplateRef<any>, context?: any, closable?: boolean): Promise<ComponentRef<CuteTab>> {\r\n const componentRef = this.dynamicTabsContainer!.createComponent(CuteTab);\r\n const newTab = componentRef.instance;\r\n newTab.textLabel = label || `Tab ${(this.tabs?.length??0) + 1}`;\r\n newTab.contentTemplate = content;\r\n newTab.contentContext = context;\r\n newTab.active = true; // !this.tabs || this.tabs.length === 0;\r\n newTab._isDynamic = true;\r\n //componentRef.setInput(\"closable\", true);\r\n newTab.closable = closable ?? true;\r\n componentRef.changeDetectorRef.detectChanges();\r\n this.dynamicTabs.push(componentRef);\r\n\r\n const tabsArray = this.tabs?.toArray() || [];\r\n tabsArray.push(newTab);\r\n this.tabs?.reset( tabsArray );\r\n\r\n if (newTab.active) {\r\n const newIndex = tabsArray.length - 1;\r\n if (await this.selectTab(newIndex)) {\r\n this.scrollToTab(newIndex);\r\n }\r\n }\r\n\r\n this.tabAdded.emit();\r\n\r\n return componentRef;\r\n }\r\n\r\n /**\r\n * Removes the tab with specified index.\r\n * @param index Tab index\r\n */\r\n async removeTab(index: number) {\r\n if (!this.tabs) return;\r\n if (index < 0 || index >= this.tabs.length) return;\r\n\r\n const tab = this.tabs.get(index)!;\r\n const wasActive = tab.active;\r\n\r\n const dynIndex = this.dynamicTabs.findIndex(cref => cref.instance == tab);\r\n if (dynIndex >= 0) {\r\n this.dynamicTabsContainer?.remove(dynIndex);\r\n this.dynamicTabs.splice(dynIndex, 1);\r\n }\r\n\r\n const tabsArray = this.tabs.filter((_, i) => i !== index);\r\n this.tabs.reset( tabsArray );\r\n this.tabs.notifyOnChanges();\r\n\r\n this.tabRemoved.emit(index);\r\n\r\n if (wasActive && this.tabs.length > 0) {\r\n const newIndex = Math.min(index, this.tabs.length - 1);\r\n if (newIndex == index) {\r\n // To bypass verification\r\n this._selectedIndex = undefined;\r\n }\r\n this.selectedIndex = newIndex;\r\n this.tabs.get(newIndex)?.link?.focus();\r\n }\r\n\r\n this.checkScrollButtons();\r\n\r\n //this.markForCheck();\r\n }\r\n\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n\r\n this.checkScrollButtons();\r\n this.setupScrollListener();\r\n }\r\n\r\n override ngAfterContentInit() {\r\n super.ngAfterContentInit();\r\n if (this.tabs) {\r\n const tabsArray = this.tabs.toArray();\r\n if (this._indexToChange == null) {\r\n this.selectedIndex = Math.max( tabsArray.findIndex(t => !t.disabled), 0);\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._resizeObserver?.disconnect();\r\n }\r\n\r\n}\r\n","<div class=\"tab-header-wrapper\" #headerContainer>\r\n <div class=\"tab-header-scroll\" #headerScroll\r\n cdkDropList\r\n [cdkDropListOrientation]=\"isHorizontal ? 'horizontal' : 'vertical'\"\r\n (cdkDropListDropped)=\"onDrop($event)\">\r\n <nav [cuteNav]=\"isHorizontal ? (underlineTabs ? 'underline' : 'tabs') : 'pills'\"\r\n [selectedIndex]=\"selectedIndex\"\r\n [alignment]=\"alignTabs\"\r\n [stretchItems]=\"stretchTabs\"\r\n [preserveTabContent]=\"preserveContent\"\r\n [color]=\"color\"\r\n [class.flex-column]=\"!isHorizontal\"\r\n (selectedIndexChange)=\"selectTab($event)\"\r\n (selectedLinkChanging)=\"onNavLinkChanging($event)\"\r\n (selectedLinkChange)=\"onNavLinkChange($event)\"\r\n (focusChange)=\"onNavFocusChange($event)\">\r\n @for (tab of tabs; track tab.id; let i = $index) {\r\n <li cute-nav-item\r\n cdkDrag\r\n [cdkDragDisabled]=\"!dragEnabled || tabCount <= 1\"\r\n [cdkDragData]=\"tab\">\r\n <a href=\"#\" cute-nav-link\r\n [cuteObserveVisibility]=\"1\"\r\n [cuteObserveVisibilityRoot]=\"headerScroll\"\r\n (cuteObserveVisibility)=\"tab._visibilityChanged($event)\"\r\n [active]=\"tab.active\"\r\n [disabled]=\"tab.disabled\"\r\n [id]=\"tab.ariaLabelledby || undefined\"\r\n [attr.aria-disabled]=\"tab.disabled\"\r\n [attr.aria-controls]=\"tab.id\"\r\n [attr.tabindex]=\"tab.active && !tab.disabled ? 0 : -1\"\r\n role=\"tab\"\r\n #tabLink>\r\n\r\n @if (tab._templateLabel) {\r\n <ng-container\r\n *ngTemplateOutlet=\"tab._templateLabel; context: getLabelContext(tab, i)\">\r\n </ng-container>\r\n } @else {\r\n <!-- <ng-container>-->\r\n <!-- @if (dragEnabled && tabCount > 1) {-->\r\n <!-- <span cdkDragHandle>☰</span>-->\r\n <!-- }-->\r\n {{ tab.textLabel || 'Tab '+i }}\r\n <!-- </ng-container>-->\r\n }\r\n\r\n @if (tab.closable && tab._isDynamic) {\r\n <button cuteButton=\"close-button\"\r\n magnitude=\"smallest\"\r\n tabIndex=\"-1\"\r\n (click)=\"removeTab(i); $event.preventDefault();\"\r\n aria-label=\"Close tab\">\r\n </button>\r\n }\r\n\r\n </a>\r\n </li>\r\n }\r\n </nav>\r\n\r\n </div>\r\n\r\n @if (showScrollButtons) {\r\n <button cuteButton class=\"scroll-button left\"\r\n tabindex=\"-1\"\r\n magnitude=\"smallest\"\r\n visuallyHiddenLabel=\"Prev\"\r\n aria-hidden=\"true\"\r\n (click)=\"scrollHeader(-1)\"\r\n [disabled]=\"!canScrollLeft\">\r\n <!--\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"currentColor\" class=\"bi bi-chevron-left\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0\"/>\r\n </svg>\r\n -->\r\n </button>\r\n <button cuteButton class=\"scroll-button right\"\r\n tabindex=\"-1\"\r\n magnitude=\"smallest\"\r\n visuallyHiddenLabel=\"Next\"\r\n aria-hidden=\"true\"\r\n (click)=\"scrollHeader(1)\"\r\n [disabled]=\"!canScrollRight\">\r\n <!--\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"currentColor\" class=\"bi bi-chevron-right\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\r\n </svg>\r\n -->\r\n </button>\r\n <!--\r\n <div class=\"scroll-indicator\"\r\n [class.active]=\"showScrollButtons\"\r\n [class.left-visible]=\"canScrollLeft\"\r\n [class.right-visible]=\"canScrollRight\">\r\n </div>\r\n -->\r\n }\r\n\r\n</div>\r\n\r\n<div class=\"tab-content-wrapper\">\r\n<!-- <div class=\"tab-content\">-->\r\n <ng-content></ng-content>\r\n <ng-container #dynamicTabs></ng-container>\r\n<!-- </div>-->\r\n</div>\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n SimpleChanges,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n InjectionToken,\r\n signal,\r\n ContentChild,\r\n booleanAttribute,\r\n inject,\r\n} from '@angular/core';\r\nimport {NgTemplateOutlet} from \"@angular/common\";\r\nimport {CuteTabLabel} from \"./tab-label.directive\";\r\nimport {CuteTabContent} from \"./tab-content.directive\";\r\nimport {CuteFocusableControl} from \"@cute-widgets/base/abstract\";\r\nimport {Subject} from \"rxjs\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CUTE_TAB_GROUP} from \"./tab-group.component\";\r\nimport {CuteNavLink} from \"@cute-widgets/base/core/nav\";\r\nimport {_animationsDisabled} from '@cute-widgets/base/core';\r\n\r\n/**\r\n * Used to provide a tab label to a tab without causing a circular dependency.\r\n * @docs-private\r\n */\r\nexport const CUTE_TAB = new InjectionToken<CuteTab>('CUTE_TAB');\r\n\r\nlet nextId: number = 0;\r\n\r\n@Component({\r\n selector: 'cute-tab',\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n host: {\r\n \"class\": \"cute-tab tab-pane\",\r\n \"[class.fade]\": \"_animationEnabled\",\r\n // \"[class.show]\": \"active\",\r\n \"[class.active]\": \"active\",\r\n '[attr.tabindex]': 'active && !disabled ? 0 : -1',\r\n '[attr.aria-labelledby]': 'ariaLabelledby || null',\r\n '[attr.id]': 'id || null',\r\n \"role\": \"tabpanel\",\r\n },\r\n providers: [{provide: CUTE_TAB, useExisting: CuteTab}],\r\n imports: [\r\n NgTemplateOutlet,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CuteTab extends CuteFocusableControl {\r\n private _intersectionRatio: number = NaN;\r\n protected _closestTabGroup = inject(CUTE_TAB_GROUP, {optional: true});\r\n protected _animationEnabled = !_animationsDisabled();\r\n\r\n /** Plain text label for the tab, used when there is no template label. */\r\n @Input(\"label\") textLabel: string = \"\";\r\n\r\n //@Input() titleTemplate: TemplateRef<any> | undefined;\r\n\r\n /** Explicit reference to the external content template. */\r\n @Input() contentTemplate: TemplateRef<any> | undefined;\r\n\r\n /** Lazy loading label's outlet context. */\r\n @Input() labelContext: any = {};\r\n\r\n /** Lazy loading content's outlet context. */\r\n @Input() contentContext: any = {};\r\n\r\n /** Whether the tab is closable. */\r\n @Input({transform: booleanAttribute}) closable = false;\r\n\r\n /** Whether the tab preserves lazing content. */\r\n @Input({ transform: booleanAttribute })\r\n preserveContent: boolean | undefined;\r\n\r\n /** Content for the tab label given by `<ng-template cute-tab-label>`. */\r\n @ContentChild(CuteTabLabel, {read: TemplateRef, static: true})\r\n public readonly _templateLabel: TemplateRef<any>|undefined;\r\n\r\n /**\r\n * Template provided in the tab content by <ng-template cute-tab-content>, used to enable lazy-loading\r\n */\r\n @ContentChild(CuteTabContent, {read: TemplateRef, static: true})\r\n private _explicitContent: TemplateRef<any> | undefined;\r\n\r\n /** Reference to `<cute-nav-link>` element. */\r\n @ContentChild(CuteNavLink, {descendants: true})\r\n readonly link: CuteNavLink | undefined;\r\n\r\n /** Whether the tab is currently active. */\r\n get active(): boolean {return this._active;}\r\n set active(value: boolean) {\r\n if (value !== this._active) {\r\n this._active = value;\r\n\r\n if (this._animationEnabled) {\r\n setTimeout(() => this.toggleClass(\"show\", value), 150);\r\n } else {\r\n this.toggleClass(\"show\", value);\r\n }\r\n\r\n this._stateChanges.next();\r\n }\r\n }\r\n private _active: boolean = false;\r\n\r\n /** Whether the tab is intersected the containing box and needs to scroll to display its full size */\r\n get scrollNeeded(): boolean {\r\n return this._intersectionRatio < 1;\r\n }\r\n\r\n /** Whether the tab was added dynamically */\r\n public _isDynamic: boolean = false;\r\n\r\n protected isPreserveContent(): boolean {\r\n return this.preserveContent ?? this._closestTabGroup?.preserveContent ?? false;\r\n }\r\n\r\n /** Tab content defined by <ng-template cute-tab-content> or directly referenced where the latter has more priority. */\r\n protected get explicitContent(): TemplateRef<any> | undefined {\r\n return this.contentTemplate || this._explicitContent;\r\n }\r\n\r\n /** Emits whenever the internal state of the tab changes. */\r\n readonly _stateChanges = new Subject<void>();\r\n\r\n /** Whether the tab content was loaded */\r\n loaded = signal<boolean>(false);\r\n\r\n /** Template inside the CuteTab view that contains an `<ng-content>`. */\r\n // @ViewChild(TemplateRef, {static: true}) _implicitContent: TemplateRef<any> | undefined;\r\n\r\n constructor() {\r\n super();\r\n this._stateChanges.pipe(takeUntilDestroyed()).subscribe(()=> {\r\n this.markForCheck();\r\n });\r\n }\r\n\r\n protected override generateId(): string {\r\n return `cute-tab-${nextId++}`;\r\n }\r\n\r\n /** Gets the content template's context object */\r\n getContentContext(): any {\r\n return {...this.contentContext,\r\n $implicit: this,\r\n index: this._closestTabGroup?.getTabIndex(this),\r\n active: this.active,\r\n tab: this\r\n };\r\n }\r\n\r\n /**\r\n * Removes this tab from the tab group.\r\n */\r\n async remove() {\r\n if (this._closestTabGroup) {\r\n const index = this._closestTabGroup.getTabIndex(this);\r\n if (index != null) {\r\n return this._closestTabGroup.removeTab( index );\r\n }\r\n }\r\n return;\r\n }\r\n\r\n _visibilityChanged(entries: IntersectionObserverEntry[]) {\r\n if (entries.length) {\r\n //this._intersectionRatio = entries[0].intersectionRatio;\r\n this._intersectionRatio = entries.at(-1)!.intersectionRatio;\r\n }\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n\r\n this.ariaLabelledby = this.id+\"-link\";\r\n }\r\n\r\n override ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n if (changes['textLabel'] || changes['disabled'] || changes['closable']) {\r\n this._stateChanges.next();\r\n }\r\n if (changes[\"active\"] && changes[\"active\"].currentValue) {\r\n this.loaded.set(true);\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._stateChanges.complete();\r\n }\r\n}\r\n","@if (active || isPreserveContent()) {\r\n\r\n <ng-content></ng-content>\r\n\r\n @if (explicitContent) {\r\n <ng-container [ngTemplateOutlet]=\"explicitContent\"\r\n [ngTemplateOutletContext]=\"getContentContext()\">\r\n </ng-container>\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {NgModule, Type} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {CuteTab} from \"./tab.component\";\r\nimport {CuteTabGroup} from \"./tab-group.component\";\r\nimport {CuteTabLabel} from \"./tab-label.directive\";\r\nimport {CuteTabContent} from \"./tab-content.directive\";\r\n\r\nconst TYPES: (any | Type<any>)[] = [\r\n CuteTab,\r\n CuteTabGroup,\r\n CuteTabLabel,\r\n CuteTabContent,\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, ...TYPES],\r\n exports: TYPES,\r\n declarations: [],\r\n})\r\nexport class CuteTabsModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId"],"mappings":"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"}
|
|
@@ -156,7 +156,7 @@ class CuteTimepicker {
|
|
|
156
156
|
* seconds (e.g. 90) or a number with a unit (e.g. 45m). Supported units are `s` for seconds,
|
|
157
157
|
* `m` for minutes or `h` for hours.
|
|
158
158
|
*/
|
|
159
|
-
this.interval = input(parseInterval(this._defaultConfig?.interval || null), ...(ngDevMode ?
|
|
159
|
+
this.interval = input(parseInterval(this._defaultConfig?.interval || null), { ...(ngDevMode ? { debugName: "interval" } : {}), transform: parseInterval });
|
|
160
160
|
/**
|
|
161
161
|
* Array of pre-defined options that the user can select from, as an alternative to using the
|
|
162
162
|
* `interval` input. An error will be thrown if both `options` and `interval` are specified.
|
|
@@ -175,17 +175,11 @@ class CuteTimepicker {
|
|
|
175
175
|
/** Unique ID of the timepicker's panel */
|
|
176
176
|
this.panelId = inject(_IdGenerator).getId('cute-timepicker-panel-');
|
|
177
177
|
/** Whether ripples within the timepicker should be disabled. */
|
|
178
|
-
this.disableRipple = input(this._defaultConfig?.disableRipple ?? false, ...(ngDevMode ?
|
|
179
|
-
transform: booleanAttribute,
|
|
180
|
-
}]));
|
|
178
|
+
this.disableRipple = input(this._defaultConfig?.disableRipple ?? false, { ...(ngDevMode ? { debugName: "disableRipple" } : {}), transform: booleanAttribute });
|
|
181
179
|
/** ARIA label for the timepicker panel. */
|
|
182
|
-
this.ariaLabel = input(null, ...(ngDevMode ?
|
|
183
|
-
alias: 'aria-label',
|
|
184
|
-
}]));
|
|
180
|
+
this.ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
|
|
185
181
|
/** ID of the label element for the timepicker panel. */
|
|
186
|
-
this.ariaLabelledby = input(null, ...(ngDevMode ?
|
|
187
|
-
alias: 'aria-labelledby',
|
|
188
|
-
}]));
|
|
182
|
+
this.ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : {}), alias: 'aria-labelledby' });
|
|
189
183
|
/** Whether the timepicker is currently disabled. */
|
|
190
184
|
this.disabled = computed(() => !!this._input()?.disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
191
185
|
if (isDevMode()) {
|
|
@@ -444,22 +438,22 @@ class CuteTimepicker {
|
|
|
444
438
|
}
|
|
445
439
|
});
|
|
446
440
|
}
|
|
447
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
448
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
441
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepicker, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
442
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: CuteTimepicker, isStandalone: true, selector: "cute-timepicker", inputs: { interval: { classPropertyName: "interval", publicName: "interval", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected", opened: "opened", closed: "closed" }, providers: [
|
|
449
443
|
{
|
|
450
444
|
provide: CUTE_OPTION_PARENT_COMPONENT,
|
|
451
445
|
useExisting: CuteTimepicker,
|
|
452
446
|
},
|
|
453
|
-
], viewQueries: [{ propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }, { propertyName: "_options", predicate: CuteOption, descendants: true, isSignal: true }], exportAs: ["cuteTimepicker"], ngImport: i0, template: "<ng-template #panelTemplate>\r\n <div\r\n role=\"listbox\"\r\n class=\"cute-timepicker-panel shadow\"\r\n [class.cute-timepicker-panel-animations-enabled]=\"!_animationsDisabled\"\r\n [class.cute-timepicker-panel-exit]=\"!isOpen()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\r\n [id]=\"panelId\"\r\n (animationend)=\"_handleAnimationEnd($event)\">\r\n <div class=\"cute-timepicker-options\">\r\n @for (option of _timeOptions; track option.value) {\r\n <cute-option\r\n [value]=\"option.value\"\r\n (onSelectionChange)=\"_selectValue($event.source)\">{{option.label}}</cute-option>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["@keyframes _cute-timepicker-enter{0%{opacity:0;transform:scaleY(.8)}to{opacity:1;transform:none}}@keyframes _cute-timepicker-exit{0%{opacity:1}to{opacity:0}}cute-timepicker{display:none}.cute-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:hidden;padding:.25rem 0;box-sizing:border-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-color:var(--bs-tertiary-bg)}@media
|
|
447
|
+
], viewQueries: [{ propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }, { propertyName: "_options", predicate: CuteOption, descendants: true, isSignal: true }], exportAs: ["cuteTimepicker"], ngImport: i0, template: "<ng-template #panelTemplate>\r\n <div\r\n role=\"listbox\"\r\n class=\"cute-timepicker-panel shadow\"\r\n [class.cute-timepicker-panel-animations-enabled]=\"!_animationsDisabled\"\r\n [class.cute-timepicker-panel-exit]=\"!isOpen()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\r\n [id]=\"panelId\"\r\n (animationend)=\"_handleAnimationEnd($event)\">\r\n <div class=\"cute-timepicker-options\">\r\n @for (option of _timeOptions; track option.value) {\r\n <cute-option\r\n [value]=\"option.value\"\r\n (onSelectionChange)=\"_selectValue($event.source)\">{{option.label}}</cute-option>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["@keyframes _cute-timepicker-enter{0%{opacity:0;transform:scaleY(.8)}to{opacity:1;transform:none}}@keyframes _cute-timepicker-exit{0%{opacity:1}to{opacity:0}}cute-timepicker{display:none}.cute-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:hidden;padding:.25rem 0;box-sizing:border-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-color:var(--bs-tertiary-bg)}@media(forced-colors:active){.cute-timepicker-panel{outline:solid 1px}}.cute-timepicker-panel .cute-timepicker-options{padding:.25rem;overflow:auto;height:100%}.cute-timepicker-above .cute-timepicker-panel{border-radius:var(--bs-border-radius)}.cute-timepicker-panel-animations-enabled{animation:_cute-timepicker-enter .12s cubic-bezier(0,0,.2,1)}.cute-timepicker-panel-animations-enabled.cute-timepicker-panel-exit{animation:_cute-timepicker-exit .1s linear}.cute-timepicker-input[readonly]{cursor:pointer}@media(forced-colors:active){.cute-timepicker-toggle-default-icon{color:CanvasText}}\n"], dependencies: [{ kind: "component", type: CuteOption, selector: "cute-option", inputs: ["value"], outputs: ["onSelectionChange"], exportAs: ["cuteOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
454
448
|
}
|
|
455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepicker, decorators: [{
|
|
456
450
|
type: Component,
|
|
457
451
|
args: [{ selector: 'cute-timepicker', exportAs: 'cuteTimepicker', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [CuteOption], providers: [
|
|
458
452
|
{
|
|
459
453
|
provide: CUTE_OPTION_PARENT_COMPONENT,
|
|
460
454
|
useExisting: CuteTimepicker,
|
|
461
455
|
},
|
|
462
|
-
], template: "<ng-template #panelTemplate>\r\n <div\r\n role=\"listbox\"\r\n class=\"cute-timepicker-panel shadow\"\r\n [class.cute-timepicker-panel-animations-enabled]=\"!_animationsDisabled\"\r\n [class.cute-timepicker-panel-exit]=\"!isOpen()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\r\n [id]=\"panelId\"\r\n (animationend)=\"_handleAnimationEnd($event)\">\r\n <div class=\"cute-timepicker-options\">\r\n @for (option of _timeOptions; track option.value) {\r\n <cute-option\r\n [value]=\"option.value\"\r\n (onSelectionChange)=\"_selectValue($event.source)\">{{option.label}}</cute-option>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["@keyframes _cute-timepicker-enter{0%{opacity:0;transform:scaleY(.8)}to{opacity:1;transform:none}}@keyframes _cute-timepicker-exit{0%{opacity:1}to{opacity:0}}cute-timepicker{display:none}.cute-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:hidden;padding:.25rem 0;box-sizing:border-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-color:var(--bs-tertiary-bg)}@media
|
|
456
|
+
], template: "<ng-template #panelTemplate>\r\n <div\r\n role=\"listbox\"\r\n class=\"cute-timepicker-panel shadow\"\r\n [class.cute-timepicker-panel-animations-enabled]=\"!_animationsDisabled\"\r\n [class.cute-timepicker-panel-exit]=\"!isOpen()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\r\n [id]=\"panelId\"\r\n (animationend)=\"_handleAnimationEnd($event)\">\r\n <div class=\"cute-timepicker-options\">\r\n @for (option of _timeOptions; track option.value) {\r\n <cute-option\r\n [value]=\"option.value\"\r\n (onSelectionChange)=\"_selectValue($event.source)\">{{option.label}}</cute-option>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["@keyframes _cute-timepicker-enter{0%{opacity:0;transform:scaleY(.8)}to{opacity:1;transform:none}}@keyframes _cute-timepicker-exit{0%{opacity:1}to{opacity:0}}cute-timepicker{display:none}.cute-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:hidden;padding:.25rem 0;box-sizing:border-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);background-color:var(--bs-tertiary-bg)}@media(forced-colors:active){.cute-timepicker-panel{outline:solid 1px}}.cute-timepicker-panel .cute-timepicker-options{padding:.25rem;overflow:auto;height:100%}.cute-timepicker-above .cute-timepicker-panel{border-radius:var(--bs-border-radius)}.cute-timepicker-panel-animations-enabled{animation:_cute-timepicker-enter .12s cubic-bezier(0,0,.2,1)}.cute-timepicker-panel-animations-enabled.cute-timepicker-panel-exit{animation:_cute-timepicker-exit .1s linear}.cute-timepicker-input[readonly]{cursor:pointer}@media(forced-colors:active){.cute-timepicker-toggle-default-icon{color:CanvasText}}\n"] }]
|
|
463
457
|
}], ctorParameters: () => [], propDecorators: { _panelTemplate: [{ type: i0.ViewChild, args: ['panelTemplate', { isSignal: true }] }], _options: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => CuteOption), { isSignal: true }] }], interval: [{ type: i0.Input, args: [{ isSignal: true, alias: "interval", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }], disableRipple: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRipple", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }] } });
|
|
464
458
|
/**
|
|
465
459
|
* Scrolls an option into view.
|
|
@@ -512,48 +506,34 @@ class CuteTimepickerInput {
|
|
|
512
506
|
/** Current value of the input. */
|
|
513
507
|
this.value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
514
508
|
/** Timepicker that the input is associated with. */
|
|
515
|
-
this.timepicker = input.required(...(ngDevMode ?
|
|
516
|
-
alias: 'cuteTimepicker',
|
|
517
|
-
}]));
|
|
509
|
+
this.timepicker = input.required({ ...(ngDevMode ? { debugName: "timepicker" } : {}), alias: 'cuteTimepicker' });
|
|
518
510
|
/**
|
|
519
511
|
* Minimum time that can be selected or typed in. Can be either
|
|
520
512
|
* a date object (only time will be used) or a valid time string.
|
|
521
513
|
*/
|
|
522
|
-
this.min = input(null, ...(ngDevMode ?
|
|
523
|
-
|
|
524
|
-
alias: 'cuteTimepickerMin',
|
|
525
|
-
transform: (value) => this._transformDateInput(value),
|
|
526
|
-
}]));
|
|
514
|
+
this.min = input(null, { ...(ngDevMode ? { debugName: "min" } : {}), alias: 'cuteTimepickerMin',
|
|
515
|
+
transform: (value) => this._transformDateInput(value) });
|
|
527
516
|
/**
|
|
528
517
|
* Maximum time that can be selected or typed in. Can be either
|
|
529
518
|
* a date object (only time will be used) or a valid time string.
|
|
530
519
|
*/
|
|
531
|
-
this.max = input(null, ...(ngDevMode ?
|
|
532
|
-
|
|
533
|
-
alias: 'cuteTimepickerMax',
|
|
534
|
-
transform: (value) => this._transformDateInput(value),
|
|
535
|
-
}]));
|
|
520
|
+
this.max = input(null, { ...(ngDevMode ? { debugName: "max" } : {}), alias: 'cuteTimepickerMax',
|
|
521
|
+
transform: (value) => this._transformDateInput(value) });
|
|
536
522
|
/**
|
|
537
523
|
* Whether to open the timepicker overlay when clicking on the input. Enabled by default.
|
|
538
524
|
* Note that when disabling this option, you'll have to provide your own logic for opening
|
|
539
525
|
* the overlay.
|
|
540
526
|
*/
|
|
541
|
-
this.openOnClick = input(true, ...(ngDevMode ?
|
|
542
|
-
|
|
543
|
-
alias: 'cuteTimepickerOpenOnClick',
|
|
544
|
-
transform: booleanAttribute,
|
|
545
|
-
}]));
|
|
527
|
+
this.openOnClick = input(true, { ...(ngDevMode ? { debugName: "openOnClick" } : {}), alias: 'cuteTimepickerOpenOnClick',
|
|
528
|
+
transform: booleanAttribute });
|
|
546
529
|
/** Whether the input is disabled. */
|
|
547
530
|
this.disabled = computed(() => this.disabledInput() || this._accessorDisabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
548
531
|
/**
|
|
549
532
|
* Whether the input should be disabled through the template.
|
|
550
533
|
* @docs-private
|
|
551
534
|
*/
|
|
552
|
-
this.disabledInput = input(false, ...(ngDevMode ?
|
|
553
|
-
|
|
554
|
-
transform: booleanAttribute,
|
|
555
|
-
alias: 'disabled',
|
|
556
|
-
}]));
|
|
535
|
+
this.disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), transform: booleanAttribute,
|
|
536
|
+
alias: 'disabled' });
|
|
557
537
|
/** Handles clicks on the input or the containing form field. */
|
|
558
538
|
this._handleClick = (event) => {
|
|
559
539
|
if (this.disabled() || !this.openOnClick()) {
|
|
@@ -802,8 +782,8 @@ class CuteTimepickerInput {
|
|
|
802
782
|
},
|
|
803
783
|
]);
|
|
804
784
|
}
|
|
805
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
806
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
785
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
786
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: CuteTimepickerInput, isStandalone: true, selector: "input[cuteTimepicker]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, timepicker: { classPropertyName: "timepicker", publicName: "cuteTimepicker", isSignal: true, isRequired: true, transformFunction: null }, min: { classPropertyName: "min", publicName: "cuteTimepickerMin", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "cuteTimepickerMax", isSignal: true, isRequired: false, transformFunction: null }, openOnClick: { classPropertyName: "openOnClick", publicName: "cuteTimepickerOpenOnClick", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "combobox", "type": "text", "aria-haspopup": "listbox" }, listeners: { "blur": "_handleBlur()", "input": "_handleInput($event)", "keydown": "_handleKeydown($event)" }, properties: { "attr.aria-activedescendant": "_ariaActiveDescendant()", "attr.aria-expanded": "_ariaExpanded()", "attr.aria-controls": "_ariaControls()", "attr.cute-timepicker-id": "timepicker()?.panelId", "disabled": "disabled()" }, classAttribute: "cute-timepicker-input" }, providers: [
|
|
807
787
|
{
|
|
808
788
|
provide: NG_VALUE_ACCESSOR,
|
|
809
789
|
useExisting: CuteTimepickerInput,
|
|
@@ -820,7 +800,7 @@ class CuteTimepickerInput {
|
|
|
820
800
|
},
|
|
821
801
|
], exportAs: ["cuteTimepickerInput"], ngImport: i0 }); }
|
|
822
802
|
}
|
|
823
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
803
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerInput, decorators: [{
|
|
824
804
|
type: Directive,
|
|
825
805
|
args: [{
|
|
826
806
|
selector: 'input[cuteTimepicker]',
|
|
@@ -883,29 +863,20 @@ class CuteTimepickerToggle {
|
|
|
883
863
|
return this.disabled() || timepicker.disabled();
|
|
884
864
|
}, ...(ngDevMode ? [{ debugName: "_isDisabled" }] : []));
|
|
885
865
|
/** Timepicker instance that the button will toggle. */
|
|
886
|
-
this.timepicker = input.required(...(ngDevMode ?
|
|
887
|
-
alias: 'for',
|
|
888
|
-
}]));
|
|
866
|
+
this.timepicker = input.required({ ...(ngDevMode ? { debugName: "timepicker" } : {}), alias: 'for' });
|
|
889
867
|
/** Screen-reader label for the button. */
|
|
890
|
-
this.ariaLabel = input(undefined, ...(ngDevMode ?
|
|
891
|
-
alias: 'aria-label',
|
|
892
|
-
}]));
|
|
868
|
+
this.ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
|
|
893
869
|
/** Screen-reader labelled by id for the button. */
|
|
894
|
-
this.ariaLabelledby = input(undefined, ...(ngDevMode ?
|
|
895
|
-
alias: 'aria-labelledby',
|
|
896
|
-
}]));
|
|
870
|
+
this.ariaLabelledby = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : {}), alias: 'aria-labelledby' });
|
|
897
871
|
/** Default aria-label for the toggle if none is provided. */
|
|
898
872
|
this._defaultAriaLabel = 'Open timepicker options';
|
|
899
873
|
/** Whether the toggle button is disabled. */
|
|
900
|
-
this.disabled = input(false, ...(ngDevMode ?
|
|
901
|
-
|
|
902
|
-
transform: booleanAttribute,
|
|
903
|
-
alias: 'disabled',
|
|
904
|
-
}]));
|
|
874
|
+
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute,
|
|
875
|
+
alias: 'disabled' });
|
|
905
876
|
/** Tabindex for the toggle. */
|
|
906
877
|
this.tabIndex = input(this._defaultTabIndex, ...(ngDevMode ? [{ debugName: "tabIndex" }] : []));
|
|
907
878
|
/** Whether ripples on the toggle should be disabled. */
|
|
908
|
-
this.disableRipple = input(this._defaultConfig?.disableRipple ?? false, ...(ngDevMode ?
|
|
879
|
+
this.disableRipple = input(this._defaultConfig?.disableRipple ?? false, { ...(ngDevMode ? { debugName: "disableRipple" } : {}), transform: booleanAttribute });
|
|
909
880
|
}
|
|
910
881
|
/** Opens the connected timepicker. */
|
|
911
882
|
_open(event) {
|
|
@@ -921,10 +892,10 @@ class CuteTimepickerToggle {
|
|
|
921
892
|
getAriaLabel() {
|
|
922
893
|
return this.ariaLabelledby() ? null : this.ariaLabel() || this._defaultAriaLabel;
|
|
923
894
|
}
|
|
924
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
925
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
895
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
896
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: CuteTimepickerToggle, isStandalone: true, selector: "cute-timepicker-toggle", inputs: { timepicker: { classPropertyName: "timepicker", publicName: "for", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null" }, classAttribute: "cute-timepicker-toggle" }, exportAs: ["cuteTimepickerToggle"], ngImport: i0, template: "<button\r\n cuteButton=\"icon-button\"\r\n type=\"button\"\r\n magnitude=\"smaller\"\r\n aria-haspopup=\"listbox\"\r\n [attr.aria-label]=\"getAriaLabel()\"\r\n [attr.aria-labelledby]=\"ariaLabelledby()\"\r\n [attr.aria-expanded]=\"timepicker().isOpen()\"\r\n [tabIndex]=\"_isDisabled() ? -1 : tabIndex()\"\r\n [disabled]=\"_isDisabled()\"\r\n [disableRipple]=\"disableRipple()\">\r\n\r\n <ng-content select=\"[cuteTimepickerToggleIcon]\">\r\n <svg\r\n class=\"cute-timepicker-toggle-default-icon\"\r\n height=\"24px\"\r\n width=\"24px\"\r\n viewBox=\"0 -960 960 960\"\r\n fill=\"currentColor\"\r\n focusable=\"false\"\r\n aria-hidden=\"true\">\r\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\r\n </svg>\r\n </ng-content>\r\n</button>\r\n", dependencies: [{ kind: "component", type: CuteButton, selector: "button[cuteButton], button[cute-button], a[cuteButton], a[cute-button], ", exportAs: ["cuteButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
926
897
|
}
|
|
927
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
898
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerToggle, decorators: [{
|
|
928
899
|
type: Component,
|
|
929
900
|
args: [{ selector: 'cute-timepicker-toggle', host: {
|
|
930
901
|
'class': 'cute-timepicker-toggle',
|
|
@@ -945,11 +916,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
945
916
|
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
946
917
|
*/
|
|
947
918
|
class CuteTimepickerModule {
|
|
948
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
949
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
950
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
919
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
920
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerModule, imports: [CuteTimepicker, CuteTimepickerInput, CuteTimepickerToggle], exports: [CdkScrollableModule, CuteTimepicker, CuteTimepickerInput, CuteTimepickerToggle] }); }
|
|
921
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerModule, imports: [CuteTimepicker, CuteTimepickerToggle, CdkScrollableModule] }); }
|
|
951
922
|
}
|
|
952
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
923
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteTimepickerModule, decorators: [{
|
|
953
924
|
type: NgModule,
|
|
954
925
|
args: [{
|
|
955
926
|
imports: [CuteTimepicker, CuteTimepickerInput, CuteTimepickerToggle],
|