@cuby-ui/core 0.0.327 → 0.0.328

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.
@@ -29,6 +29,7 @@ export * from './sidebar';
29
29
  export * from './card-wrapper';
30
30
  export * from './layout';
31
31
  export * from './svg';
32
+ export * from './tab';
32
33
  export * from './tabs';
33
34
  export * from './textarea';
34
35
  export * from './toggle';
@@ -0,0 +1 @@
1
+ export { CuiTabDirective } from './tab.component';
@@ -0,0 +1,15 @@
1
+ import type { TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CuiTabDirective {
4
+ private readonly tabsService;
5
+ private readonly tabId;
6
+ readonly buttonSlot: import("@angular/core").InputSignal<TemplateRef<unknown>>;
7
+ readonly contentSlot: import("@angular/core").InputSignal<TemplateRef<unknown>>;
8
+ readonly data: import("@angular/core").InputSignal<unknown>;
9
+ constructor();
10
+ private initTabEffect;
11
+ private addTab;
12
+ private removeTab;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<CuiTabDirective, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CuiTabDirective, "cui-tab, [cuiTab]", never, { "buttonSlot": { "alias": "buttonSlot"; "required": true; "isSignal": true; }; "contentSlot": { "alias": "contentSlot"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
+ }
@@ -1,3 +1,2 @@
1
- export * from './tab';
2
- export * from './tabs.component';
3
- export * from './tabs.module';
1
+ export { CuiTabsComponent } from './tabs.component';
2
+ export { CuiTabOptions, CuiTabsService, CUI_TABS_SERVICE_TOKEN } from './tabs.options';
@@ -0,0 +1 @@
1
+ export { CuiTabsServiceImpl } from './tabs.service';
@@ -0,0 +1,14 @@
1
+ import type { CuiNullable } from '@cuby-ui/cdk';
2
+ import { CuiAbstractTabsService, CuiTabOptions } from '../tabs.options';
3
+ import * as i0 from "@angular/core";
4
+ export declare class CuiTabsServiceImpl extends CuiAbstractTabsService {
5
+ private readonly tabsSignal;
6
+ private readonly activeTabSignal;
7
+ readonly tabs: import("@angular/core").Signal<CuiTabOptions[]>;
8
+ readonly activeTab: import("@angular/core").Signal<CuiNullable<CuiTabOptions>>;
9
+ set(tab: CuiTabOptions): void;
10
+ addTab(tab: CuiTabOptions): void;
11
+ removeTab(tabId: string): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<CuiTabsServiceImpl, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<CuiTabsServiceImpl>;
14
+ }
@@ -1,16 +1,15 @@
1
- import type { AfterViewChecked } from '@angular/core';
2
- import { EventEmitter } from '@angular/core';
1
+ import type { TemplateRef } from '@angular/core';
2
+ import { type CuiTabOptions } from './tabs.options';
3
3
  import * as i0 from "@angular/core";
4
- export declare class CuiTabsComponent implements AfterViewChecked {
5
- private readonly element;
6
- private readonly activeElementClass;
7
- protected get tabs(): readonly HTMLElement[];
8
- get activeElement(): HTMLElement | null;
9
- ngAfterViewChecked(): void;
10
- activeItemIndex: number;
11
- readonly activeItemIndexChange: EventEmitter<number>;
12
- protected onActivate(event: CustomEvent): void;
13
- private changeActiveItem;
4
+ export declare class CuiTabsComponent {
5
+ private readonly tabsService;
6
+ protected readonly tabs: import("@angular/core").Signal<CuiTabOptions[]>;
7
+ protected readonly activeTab: import("@angular/core").Signal<import("@cuby-ui/cdk").CuiNullable<CuiTabOptions>>;
8
+ readonly headerSlot: import("@angular/core").InputSignal<TemplateRef<unknown> | undefined>;
9
+ readonly selectedIndex: import("@angular/core").InputSignal<number>;
10
+ constructor();
11
+ protected onSelectTab(event: Event, tab: CuiTabOptions): void;
12
+ private initSelectedTabEffect;
14
13
  static ɵfac: i0.ɵɵFactoryDeclaration<CuiTabsComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<CuiTabsComponent, "cui-tabs", never, { "activeItemIndex": { "alias": "activeItemIndex"; "required": false; }; }, { "activeItemIndexChange": "activeItemIndexChange"; }, never, ["[cuiTab]"], false, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<CuiTabsComponent, "cui-tabs", never, { "headerSlot": { "alias": "headerSlot"; "required": false; "isSignal": true; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16
15
  }
@@ -0,0 +1,21 @@
1
+ import { InjectionToken, Signal, type TemplateRef } from '@angular/core';
2
+ import { CuiNullable } from '@cuby-ui/cdk';
3
+ export declare const CUI_TABS_SERVICE_TOKEN: InjectionToken<CuiAbstractTabsService>;
4
+ export declare abstract class CuiAbstractTabsService implements CuiTabsService {
5
+ readonly abstract tabs: Signal<CuiTabOptions[]>;
6
+ readonly abstract activeTab: Signal<CuiNullable<CuiTabOptions>>;
7
+ abstract set(tab: CuiTabOptions): void;
8
+ abstract addTab(tab: CuiTabOptions): void;
9
+ abstract removeTab(tabId: string): void;
10
+ }
11
+ export interface CuiTabsService {
12
+ set(tab: CuiTabOptions): void;
13
+ addTab(tab: CuiTabOptions): void;
14
+ removeTab(tabId: string): void;
15
+ }
16
+ export interface CuiTabOptions {
17
+ readonly id: string;
18
+ readonly button: TemplateRef<unknown>;
19
+ readonly content: TemplateRef<unknown>;
20
+ readonly data?: unknown;
21
+ }
@@ -29,8 +29,9 @@ export * from './sidebar';
29
29
  export * from './card-wrapper';
30
30
  export * from './layout';
31
31
  export * from './svg';
32
+ export * from './tab';
32
33
  export * from './tabs';
33
34
  export * from './textarea';
34
35
  export * from './toggle';
35
36
  export * from './render-dynamic-components';
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY2NvcmRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9hbGVydCc7XG5leHBvcnQgKiBmcm9tICcuL2JhZGdlJztcbmV4cG9ydCAqIGZyb20gJy4vYmFubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYnMnO1xuZXhwb3J0ICogZnJvbSAnLi9idXR0b24nO1xuZXhwb3J0ICogZnJvbSAnLi9idXR0b24tZ3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGVja2JveCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQtbWVudSc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZCc7XG5leHBvcnQgKiBmcm9tICcuL2hpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29uLWJ1dHRvbic7XG5leHBvcnQgKiBmcm9tICcuL2lucHV0LW51bWJlcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRlbnQtd3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2dob3N0LWlucHV0JztcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQtcGFzc3dvcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnB1dC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQtdGltZSc7XG5leHBvcnQgKiBmcm9tICcuL2xhYmVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGV0dGVyLWJveCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JhZGlvJztcbmV4cG9ydCAqIGZyb20gJy4vcm9vdCc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL2VtcHR5LXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vc2lkZWJhcic7XG5leHBvcnQgKiBmcm9tICcuL2NhcmQtd3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL3N2Zyc7XG5leHBvcnQgKiBmcm9tICcuL3RhYnMnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0YXJlYSc7XG5leHBvcnQgKiBmcm9tICcuL3RvZ2dsZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlbmRlci1keW5hbWljLWNvbXBvbmVudHMnO1xuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY2NvcmRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9hbGVydCc7XG5leHBvcnQgKiBmcm9tICcuL2JhZGdlJztcbmV4cG9ydCAqIGZyb20gJy4vYmFubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vYnJlYWRjcnVtYnMnO1xuZXhwb3J0ICogZnJvbSAnLi9idXR0b24nO1xuZXhwb3J0ICogZnJvbSAnLi9idXR0b24tZ3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGVja2JveCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQtbWVudSc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZCc7XG5leHBvcnQgKiBmcm9tICcuL2hpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29uLWJ1dHRvbic7XG5leHBvcnQgKiBmcm9tICcuL2lucHV0LW51bWJlcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRlbnQtd3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2dob3N0LWlucHV0JztcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQtcGFzc3dvcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnB1dC10ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQtdGltZSc7XG5leHBvcnQgKiBmcm9tICcuL2xhYmVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGV0dGVyLWJveCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JhZGlvJztcbmV4cG9ydCAqIGZyb20gJy4vcm9vdCc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL2VtcHR5LXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vc2lkZWJhcic7XG5leHBvcnQgKiBmcm9tICcuL2NhcmQtd3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL3N2Zyc7XG5leHBvcnQgKiBmcm9tICcuL3RhYic7XG5leHBvcnQgKiBmcm9tICcuL3RhYnMnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0YXJlYSc7XG5leHBvcnQgKiBmcm9tICcuL3RvZ2dsZSc7XG5leHBvcnQgKiBmcm9tICcuL3JlbmRlci1keW5hbWljLWNvbXBvbmVudHMnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export { CuiTabDirective } from './tab.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvdGFiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEN1aVRhYkRpcmVjdGl2ZSB9IGZyb20gJy4vdGFiLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { Directive, effect, inject, input, untracked } from '@angular/core';
2
+ import { CuiIdService } from '@cuby-ui/cdk';
3
+ import { CUI_TABS_SERVICE_TOKEN } from '../tabs/tabs.options';
4
+ import * as i0 from "@angular/core";
5
+ export class CuiTabDirective {
6
+ constructor() {
7
+ this.tabsService = inject(CUI_TABS_SERVICE_TOKEN);
8
+ this.tabId = inject(CuiIdService).generate();
9
+ this.buttonSlot = input.required();
10
+ this.contentSlot = input.required();
11
+ this.data = input();
12
+ this.initTabEffect();
13
+ }
14
+ initTabEffect() {
15
+ effect((onCleanup) => {
16
+ this.addTab(this.buttonSlot(), this.contentSlot());
17
+ onCleanup(this.removeTab.bind(this));
18
+ }, { allowSignalWrites: true });
19
+ }
20
+ addTab(button, content) {
21
+ this.tabsService.addTab({ id: this.tabId, button, content, data: untracked(this.data) });
22
+ }
23
+ removeTab() {
24
+ this.tabsService.removeTab(this.tabId);
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
27
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: CuiTabDirective, isStandalone: true, selector: "cui-tab, [cuiTab]", inputs: { buttonSlot: { classPropertyName: "buttonSlot", publicName: "buttonSlot", isSignal: true, isRequired: true, transformFunction: null }, contentSlot: { classPropertyName: "contentSlot", publicName: "contentSlot", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ selector: 'cui-tab, [cuiTab]',
33
+ standalone: true,
34
+ }]
35
+ }], ctorParameters: () => [] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy90YWIvdGFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU05RCxNQUFNLE9BQU8sZUFBZTtJQVF4QjtRQVBpQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDLFVBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFekMsZUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXdCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF3QixDQUFDO1FBQ3JELFNBQUksR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUdwQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFFbkQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sTUFBTSxDQUFDLE1BQTRCLEVBQUUsT0FBNkI7UUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU8sU0FBUztRQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxQyxDQUFDOytHQTFCUSxlQUFlO21HQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3VpSWRTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcblxuaW1wb3J0IHsgQ1VJX1RBQlNfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uL3RhYnMvdGFicy5vcHRpb25zJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdjdWktdGFiLCBbY3VpVGFiXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ3VpVGFiRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhYnNTZXJ2aWNlID0gaW5qZWN0KENVSV9UQUJTX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFiSWQgPSBpbmplY3QoQ3VpSWRTZXJ2aWNlKS5nZW5lcmF0ZSgpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGJ1dHRvblNsb3QgPSBpbnB1dC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udGVudFNsb3QgPSBpbnB1dC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YSA9IGlucHV0PHVua25vd24+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0VGFiRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VGFiRWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUYWIodGhpcy5idXR0b25TbG90KCksIHRoaXMuY29udGVudFNsb3QoKSk7XG5cbiAgICAgICAgICAgIG9uQ2xlYW51cCh0aGlzLnJlbW92ZVRhYi5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRhYihidXR0b246IFRlbXBsYXRlUmVmPHVua25vd24+LCBjb250ZW50OiBUZW1wbGF0ZVJlZjx1bmtub3duPik6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYnNTZXJ2aWNlLmFkZFRhYih7IGlkOiB0aGlzLnRhYklkLCBidXR0b24sIGNvbnRlbnQsIGRhdGE6IHVudHJhY2tlZCh0aGlzLmRhdGEpIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlVGFiKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYnNTZXJ2aWNlLnJlbW92ZVRhYih0aGlzLnRhYklkKVxuICAgIH1cbn1cbiJdfQ==
@@ -1,4 +1,3 @@
1
- export * from './tab';
2
- export * from './tabs.component';
3
- export * from './tabs.module';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvdGFicy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWInO1xuZXhwb3J0ICogZnJvbSAnLi90YWJzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYnMubW9kdWxlJztcbiJdfQ==
1
+ export { CuiTabsComponent } from './tabs.component';
2
+ export { CUI_TABS_SERVICE_TOKEN } from './tabs.options';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvdGFicy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQWlDLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDdWlUYWJzQ29tcG9uZW50IH0gZnJvbSAnLi90YWJzLmNvbXBvbmVudCc7XG5leHBvcnQgeyBDdWlUYWJPcHRpb25zLCBDdWlUYWJzU2VydmljZSwgQ1VJX1RBQlNfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4vdGFicy5vcHRpb25zJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { CuiTabsServiceImpl } from './tabs.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvdGFicy9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEN1aVRhYnNTZXJ2aWNlSW1wbCB9IGZyb20gJy4vdGFicy5zZXJ2aWNlJztcbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { computed, Injectable, signal } from '@angular/core';
2
+ import { CuiAbstractTabsService } from '../tabs.options';
3
+ import * as i0 from "@angular/core";
4
+ export class CuiTabsServiceImpl extends CuiAbstractTabsService {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.tabsSignal = signal([]);
8
+ this.activeTabSignal = computed(() => signal(this.tabsSignal()[0]));
9
+ this.tabs = this.tabsSignal.asReadonly();
10
+ this.activeTab = computed(() => this.activeTabSignal()());
11
+ }
12
+ set(tab) {
13
+ this.activeTabSignal().set(tab);
14
+ }
15
+ addTab(tab) {
16
+ this.tabsSignal.update((prev) => [...prev, tab]);
17
+ }
18
+ removeTab(tabId) {
19
+ this.tabsSignal.update((prev) => prev.filter((tab) => tab.id !== tabId));
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsServiceImpl }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsServiceImpl, decorators: [{
25
+ type: Injectable
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jb21wb25lbnRzL3RhYnMvc2VydmljZXMvdGFicy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFpQixNQUFNLGlCQUFpQixDQUFDOztBQUd4RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsc0JBQXNCO0lBRDlEOztRQUVxQixlQUFVLEdBQUcsTUFBTSxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFHLFFBQVEsQ0FBNkMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUcsU0FBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBYXhFO0lBWFUsR0FBRyxDQUFDLEdBQWtCO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSxTQUFTLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7K0dBakJRLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuXG5pbXBvcnQgeyBDdWlBYnN0cmFjdFRhYnNTZXJ2aWNlLCBDdWlUYWJPcHRpb25zIH0gZnJvbSAnLi4vdGFicy5vcHRpb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEN1aVRhYnNTZXJ2aWNlSW1wbCBleHRlbmRzIEN1aUFic3RyYWN0VGFic1NlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFic1NpZ25hbCA9IHNpZ25hbDxDdWlUYWJPcHRpb25zW10+KFtdKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVRhYlNpZ25hbCA9IGNvbXB1dGVkPFdyaXRhYmxlU2lnbmFsPEN1aU51bGxhYmxlPEN1aVRhYk9wdGlvbnM+Pj4oKCkgPT4gc2lnbmFsKHRoaXMudGFic1NpZ25hbCgpWzBdKSk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFicyA9IHRoaXMudGFic1NpZ25hbC5hc1JlYWRvbmx5KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZVRhYiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aXZlVGFiU2lnbmFsKCkoKSk7XG5cbiAgICBwdWJsaWMgc2V0KHRhYjogQ3VpVGFiT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYlNpZ25hbCgpLnNldCh0YWIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUYWIodGFiOiBDdWlUYWJPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFic1NpZ25hbC51cGRhdGUoKHByZXYpID0+IFsuLi5wcmV2LCB0YWJdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlVGFiKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJzU2lnbmFsLnVwZGF0ZSgocHJldikgPT4gcHJldi5maWx0ZXIoKHRhYikgPT4gdGFiLmlkICE9PSB0YWJJZCkpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,49 +1,44 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';
2
- import { CUI_TAB_ACTIVATE } from './tab';
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, effect, inject, input } from '@angular/core';
3
+ import { CuiTabsServiceImpl } from './services';
4
+ import { CUI_TABS_SERVICE_TOKEN } from './tabs.options';
3
5
  import * as i0 from "@angular/core";
4
6
  export class CuiTabsComponent {
5
7
  constructor() {
6
- this.element = inject(ElementRef).nativeElement;
7
- this.activeElementClass = '_active';
8
- this.activeItemIndex = 0;
9
- this.activeItemIndexChange = new EventEmitter();
8
+ this.tabsService = inject(CUI_TABS_SERVICE_TOKEN);
9
+ this.tabs = this.tabsService.tabs;
10
+ this.activeTab = this.tabsService.activeTab;
11
+ this.headerSlot = input();
12
+ this.selectedIndex = input(0);
13
+ this.initSelectedTabEffect();
10
14
  }
11
- get tabs() {
12
- return Array.from(this.element.querySelectorAll('[cuiTab]'));
13
- }
14
- get activeElement() {
15
- return this.tabs[this.activeItemIndex] || null;
16
- }
17
- ngAfterViewChecked() {
18
- this.changeActiveItem();
19
- }
20
- onActivate(event) {
21
- event.stopPropagation();
22
- const index = this.tabs.findIndex((tab) => tab === event.target);
23
- if (index === this.activeItemIndex) {
15
+ onSelectTab(event, tab) {
16
+ if (event.defaultPrevented) {
24
17
  return;
25
18
  }
26
- this.activeItemIndexChange.emit(index);
27
- this.activeItemIndex = index;
19
+ this.tabsService.set(tab);
28
20
  }
29
- changeActiveItem() {
30
- this.tabs.forEach(nativeElement => {
31
- const active = nativeElement === this.activeElement;
32
- nativeElement.classList.toggle(this.activeElementClass, active);
33
- });
21
+ initSelectedTabEffect() {
22
+ effect(() => {
23
+ const index = this.selectedIndex();
24
+ const length = this.tabs().length;
25
+ if (index === undefined) {
26
+ return;
27
+ }
28
+ if (!length) {
29
+ throw new Error('No tab selected');
30
+ }
31
+ if (index < 0 || index >= length) {
32
+ throw new Error('Invalid tab index');
33
+ }
34
+ this.tabsService.set(this.tabs()[index]);
35
+ }, { allowSignalWrites: true });
34
36
  }
35
37
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CuiTabsComponent, selector: "cui-tabs", inputs: { activeItemIndex: "activeItemIndex" }, outputs: { activeItemIndexChange: "activeItemIndexChange" }, host: { listeners: { "cui-tab-activate": "onActivate($event)" } }, ngImport: i0, template: "<ng-content select=\"[cuiTab]\" />\n", styles: [":host{display:flex;border-radius:8px;gap:32px}:host ::ng-deep>[cuiTab]{padding:8px 12px;font-weight:500;font-size:14px;line-height:20px;color:var(--cui-base-500);border-radius:6px}@media (hover: hover){:host ::ng-deep>[cuiTab]:hover{color:var(--cui-base-900);background:var(--cui-base-50)}}:host ::ng-deep>[cuiTab]:active{color:var(--cui-base-900);background:var(--cui-base-50)}:host ::ng-deep>[cuiTab]._active{color:var(--cui-light-blue-600);background:var(--cui-base-50)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiTabsComponent, isStandalone: true, selector: "cui-tabs", inputs: { headerSlot: { classPropertyName: "headerSlot", publicName: "headerSlot", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: CUI_TABS_SERVICE_TOKEN, useClass: CuiTabsServiceImpl }], ngImport: i0, template: "@if (headerSlot(); as header) {\n <ng-container\n [ngTemplateOutlet]=\"header\"\n [ngTemplateOutletContext]=\"{ $implicit: buttons }\"\n />\n} @else {\n <header class=\"header\">\n <ng-container [ngTemplateOutlet]=\"buttons\" />\n </header>\n}\n\n<ng-template #buttons>\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onSelectTab($event, tab)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"tab.button\"\n [ngTemplateOutletContext]=\"{ $implicit: tab.data, isActive: tab.id === activeTab()?.id }\"\n />\n </button>\n }\n</ng-template>\n\n@if (activeTab()?.content; as content) {\n <ng-container\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{ $implicit: activeTab()?.data }\"\n />\n}\n", styles: [":host{display:flex;flex-direction:column}.header{display:flex}.button{display:contents}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37
39
  }
38
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsComponent, decorators: [{
39
41
  type: Component,
40
- args: [{ selector: 'cui-tabs', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"[cuiTab]\" />\n", styles: [":host{display:flex;border-radius:8px;gap:32px}:host ::ng-deep>[cuiTab]{padding:8px 12px;font-weight:500;font-size:14px;line-height:20px;color:var(--cui-base-500);border-radius:6px}@media (hover: hover){:host ::ng-deep>[cuiTab]:hover{color:var(--cui-base-900);background:var(--cui-base-50)}}:host ::ng-deep>[cuiTab]:active{color:var(--cui-base-900);background:var(--cui-base-50)}:host ::ng-deep>[cuiTab]._active{color:var(--cui-light-blue-600);background:var(--cui-base-50)}\n"] }]
41
- }], propDecorators: { activeItemIndex: [{
42
- type: Input
43
- }], activeItemIndexChange: [{
44
- type: Output
45
- }], onActivate: [{
46
- type: HostListener,
47
- args: [CUI_TAB_ACTIVATE, ['$event']]
48
- }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvdGFicy90YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy90YWJzL3RhYnMudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBUXpDLE1BQU0sT0FBTyxnQkFBZ0I7SUFON0I7UUFPbUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUE0QixDQUFDO1FBRTFELHVCQUFrQixHQUFHLFNBQVMsQ0FBQztRQWV6QyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUdYLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0F1QnBFO0lBdkNDLElBQWMsSUFBSTtRQUNoQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBYyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBU1MsVUFBVSxDQUFDLEtBQWtCO1FBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDaEMsTUFBTSxNQUFNLEdBQUcsYUFBYSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7WUFFcEQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EzQ1UsZ0JBQWdCO21HQUFoQixnQkFBZ0IsZ09DcEI3QixzQ0FDQTs7NEZEbUJhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxVQUFVLG1CQUdILHVCQUF1QixDQUFDLE1BQU07OEJBb0J4QyxlQUFlO3NCQURyQixLQUFLO2dCQUlVLHFCQUFxQjtzQkFEcEMsTUFBTTtnQkFJRyxVQUFVO3NCQURuQixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBZnRlclZpZXdDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDVUlfVEFCX0FDVElWQVRFIH0gZnJvbSAnLi90YWInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdWktdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLnRlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJzLnN0eWxlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ3VpVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZUVsZW1lbnRDbGFzcyA9ICdfYWN0aXZlJztcblxuICBwcm90ZWN0ZWQgZ2V0IHRhYnMoKTogcmVhZG9ubHkgSFRNTEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbY3VpVGFiXScpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRhYnNbdGhpcy5hY3RpdmVJdGVtSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlQWN0aXZlSXRlbSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFjdGl2ZUl0ZW1JbmRleCA9IDA7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBhY3RpdmVJdGVtSW5kZXhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBASG9zdExpc3RlbmVyKENVSV9UQUJfQUNUSVZBVEUsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbkFjdGl2YXRlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYiA9PT0gZXZlbnQudGFyZ2V0KTtcblxuICAgIGlmIChpbmRleCA9PT0gdGhpcy5hY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZUl0ZW1JbmRleENoYW5nZS5lbWl0KGluZGV4KTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VBY3RpdmVJdGVtKCk6IHZvaWQge1xuICAgIHRoaXMudGFicy5mb3JFYWNoKG5hdGl2ZUVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlID0gbmF0aXZlRWxlbWVudCA9PT0gdGhpcy5hY3RpdmVFbGVtZW50O1xuXG4gICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5hY3RpdmVFbGVtZW50Q2xhc3MsIGFjdGl2ZSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltjdWlUYWJdXCIgLz5cbiJdfQ==
42
+ args: [{ selector: 'cui-tabs', imports: [NgTemplateOutlet], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: CUI_TABS_SERVICE_TOKEN, useClass: CuiTabsServiceImpl }], template: "@if (headerSlot(); as header) {\n <ng-container\n [ngTemplateOutlet]=\"header\"\n [ngTemplateOutletContext]=\"{ $implicit: buttons }\"\n />\n} @else {\n <header class=\"header\">\n <ng-container [ngTemplateOutlet]=\"buttons\" />\n </header>\n}\n\n<ng-template #buttons>\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onSelectTab($event, tab)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"tab.button\"\n [ngTemplateOutletContext]=\"{ $implicit: tab.data, isActive: tab.id === activeTab()?.id }\"\n />\n </button>\n }\n</ng-template>\n\n@if (activeTab()?.content; as content) {\n <ng-container\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{ $implicit: activeTab()?.data }\"\n />\n}\n", styles: [":host{display:flex;flex-direction:column}.header{display:flex}.button{display:contents}\n"] }]
43
+ }], ctorParameters: () => [] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvdGFicy90YWJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy90YWJzL3RhYnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFzQixNQUFNLGdCQUFnQixDQUFDOztBQVc1RSxNQUFNLE9BQU8sZ0JBQWdCO0lBU3pCO1FBUmlCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFM0MsU0FBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzdCLGNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUUxQyxlQUFVLEdBQUcsS0FBSyxFQUF3QixDQUFDO1FBQzNDLGtCQUFhLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRzdDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFUyxXQUFXLENBQUMsS0FBWSxFQUFFLEdBQWtCO1FBQ2xELElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUVsQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsT0FBTztZQUNYLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0F4Q1EsZ0JBQWdCO21HQUFoQixnQkFBZ0IsMFZBRmQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQywwQkNkbEYsbzVCQWdDQSxtSkR2QmMsZ0JBQWdCOzs0RkFPakIsZ0JBQWdCO2tCQVQ1QixTQUFTOytCQUNJLFVBQVUsV0FDWCxDQUFDLGdCQUFnQixDQUFDLGNBQ2YsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDdWlUYWJzU2VydmljZUltcGwgfSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7IENVSV9UQUJTX1NFUlZJQ0VfVE9LRU4sIHR5cGUgQ3VpVGFiT3B0aW9ucyB9IGZyb20gJy4vdGFicy5vcHRpb25zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktdGFicycsXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXRdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICd0YWJzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJ3RhYnMuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ1VJX1RBQlNfU0VSVklDRV9UT0tFTiwgdXNlQ2xhc3M6IEN1aVRhYnNTZXJ2aWNlSW1wbCB9XVxufSlcbmV4cG9ydCBjbGFzcyBDdWlUYWJzQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhYnNTZXJ2aWNlID0gaW5qZWN0KENVSV9UQUJTX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYnMgPSB0aGlzLnRhYnNTZXJ2aWNlLnRhYnM7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGl2ZVRhYiA9IHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGhlYWRlclNsb3QgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJbmRleCA9IGlucHV0PG51bWJlcj4oMCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0U2VsZWN0ZWRUYWJFZmZlY3QoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25TZWxlY3RUYWIoZXZlbnQ6IEV2ZW50LCB0YWI6IEN1aVRhYk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFic1NlcnZpY2Uuc2V0KHRhYik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2VsZWN0ZWRUYWJFZmZlY3QoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy50YWJzKCkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhYiBzZWxlY3RlZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YWIgaW5kZXgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50YWJzU2VydmljZS5zZXQodGhpcy50YWJzKClbaW5kZXhdKTtcbiAgICAgICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgICB9XG59XG4iLCJAaWYgKGhlYWRlclNsb3QoKTsgYXMgaGVhZGVyKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGJ1dHRvbnMgfVwiXG4gICAgLz5cbn0gQGVsc2Uge1xuICAgIDxoZWFkZXIgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25zXCIgLz5cbiAgICA8L2hlYWRlcj5cbn1cblxuPG5nLXRlbXBsYXRlICNidXR0b25zPlxuICAgIEBmb3IgKHRhYiBvZiB0YWJzKCk7IHRyYWNrIHRhYi5pZCkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdFRhYigkZXZlbnQsIHRhYilcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0YWIuZGF0YSwgaXNBY3RpdmU6IHRhYi5pZCA9PT0gYWN0aXZlVGFiKCk/LmlkIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuQGlmIChhY3RpdmVUYWIoKT8uY29udGVudDsgYXMgY29udGVudCkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYWN0aXZlVGFiKCk/LmRhdGEgfVwiXG4gICAgLz5cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const CUI_TABS_SERVICE_TOKEN = new InjectionToken('CUI_TABS_SERVICE');
3
+ export class CuiAbstractTabsService {
4
+ }
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jb21wb25lbnRzL3RhYnMvdGFicy5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBR3pFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUF5QixrQkFBa0IsQ0FBQyxDQUFDO0FBRXJHLE1BQU0sT0FBZ0Isc0JBQXNCO0NBTzNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFNpZ25hbCwgdHlwZSBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuXG5leHBvcnQgY29uc3QgQ1VJX1RBQlNfU0VSVklDRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDdWlBYnN0cmFjdFRhYnNTZXJ2aWNlPignQ1VJX1RBQlNfU0VSVklDRScpO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3VpQWJzdHJhY3RUYWJzU2VydmljZSBpbXBsZW1lbnRzIEN1aVRhYnNTZXJ2aWNlIHtcbiAgICByZWFkb25seSBhYnN0cmFjdCB0YWJzOiBTaWduYWw8Q3VpVGFiT3B0aW9uc1tdPjtcbiAgICByZWFkb25seSBhYnN0cmFjdCBhY3RpdmVUYWI6IFNpZ25hbDxDdWlOdWxsYWJsZTxDdWlUYWJPcHRpb25zPj47XG5cbiAgICBhYnN0cmFjdCBzZXQodGFiOiBDdWlUYWJPcHRpb25zKTogdm9pZDtcbiAgICBhYnN0cmFjdCBhZGRUYWIodGFiOiBDdWlUYWJPcHRpb25zKTogdm9pZDtcbiAgICBhYnN0cmFjdCByZW1vdmVUYWIodGFiSWQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VpVGFic1NlcnZpY2Uge1xuICAgIHNldCh0YWI6IEN1aVRhYk9wdGlvbnMpOiB2b2lkO1xuICAgIGFkZFRhYih0YWI6IEN1aVRhYk9wdGlvbnMpOiB2b2lkO1xuICAgIHJlbW92ZVRhYih0YWJJZDogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdWlUYWJPcHRpb25zIHtcbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGJ1dHRvbjogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgcmVhZG9ubHkgY29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gICAgcmVhZG9ubHkgZGF0YT86IHVua25vd247XG59XG4iXX0=
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ChangeDetectionStrategy, inject, Renderer2, input, model, effect, Directive, InjectionToken, Input, HostBinding, ChangeDetectorRef, ElementRef, ViewChild, EventEmitter, Output, NgModule, Injector, Injectable, SkipSelf, Optional, DestroyRef, NgZone, signal, TemplateRef, ContentChildren, HostListener, Self, INJECTOR, forwardRef, ViewContainerRef, booleanAttribute, computed, Pipe, APP_INITIALIZER, viewChild, afterRender, output, makeEnvironmentProviders, untracked } from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, inject, Renderer2, input, model, effect, Directive, InjectionToken, Input, HostBinding, ChangeDetectorRef, ElementRef, ViewChild, EventEmitter, Output, NgModule, Injector, Injectable, SkipSelf, Optional, DestroyRef, NgZone, signal, TemplateRef, ContentChildren, HostListener, Self, INJECTOR, forwardRef, ViewContainerRef, booleanAttribute, computed, untracked, Pipe, APP_INITIALIZER, viewChild, afterRender, output, makeEnvironmentProviders } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT, NgForOf, NgIf, NgComponentOutlet, NgTemplateOutlet, NgFor, UpperCasePipe, NgClass, Location } from '@angular/common';
5
5
  import * as i1$1 from '@cuby-ui/cdk';
6
- import { CUI_WINDOW, cuiCreateToken, cuiCreateTokenFromFactory, CuiDestroyService, CuiFilterPipe, CuiLetDirective, CuiPopoverService, cuiProvide, CUI_ANIMATION_FRAME, cuiZonefree, EMPTY_CLIENT_RECT, cuiInjectElement, CUI_LOCAL_STORAGE, CUI_IS_WEBKIT, CuiItemDirective, CuiActiveZone, CuiFocusTrapDirective, cuiGetElementObscures, CUI_IS_MOBILE, CuiHoveredService, cuiPure, cuiPointToClientRect, cuiClamp, cuiPx, cuiIfMap, cuiIsPresent, cuiTypedFromEvent, cuiZonefreeScheduler, cuiZoneOptimized, cuiIsNativeFocused, CuiClickOutsideDirective, CuiTargetDirective, cuiGetClosestFocusable, CuiTime, CuiDimensionsObserverDirective, CuiAutoResizingDirective, CuiIdService, CuiElementDirective, CuiDragPointerDirective, CuiDragDropDirective, CuiDragListDirective, CuiHandleScrollDirective, FilesUploader, takeCaptureFromVideo } from '@cuby-ui/cdk';
6
+ import { CUI_WINDOW, cuiCreateToken, cuiCreateTokenFromFactory, CuiDestroyService, CuiFilterPipe, CuiLetDirective, CuiPopoverService, cuiProvide, CUI_ANIMATION_FRAME, cuiZonefree, EMPTY_CLIENT_RECT, cuiInjectElement, CUI_LOCAL_STORAGE, CUI_IS_WEBKIT, CuiItemDirective, CuiActiveZone, CuiFocusTrapDirective, cuiGetElementObscures, CUI_IS_MOBILE, CuiHoveredService, cuiPure, cuiPointToClientRect, cuiClamp, cuiPx, cuiIfMap, cuiIsPresent, cuiTypedFromEvent, cuiZonefreeScheduler, cuiZoneOptimized, cuiIsNativeFocused, CuiClickOutsideDirective, CuiTargetDirective, cuiGetClosestFocusable, CuiTime, CuiDimensionsObserverDirective, CuiIdService, CuiAutoResizingDirective, CuiElementDirective, CuiDragPointerDirective, CuiDragDropDirective, CuiDragListDirective, CuiHandleScrollDirective, FilesUploader, takeCaptureFromVideo } from '@cuby-ui/cdk';
7
7
  import { DomSanitizer } from '@angular/platform-browser';
8
8
  import { cuiIsIcon, CUI_ICONS } from '@cuby-ui/icons';
9
9
  import { BehaviorSubject, takeUntil, Observable, merge, distinctUntilChanged, startWith, map, finalize, switchMap, tap, catchError, throwError, of, from, filter, timer, Subject, delay, repeat, takeWhile, fromEvent, debounce, skip, take, forkJoin, throttleTime, concatMap, toArray, debounceTime, pairwise } from 'rxjs';
@@ -4070,84 +4070,104 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4070
4070
  }, template: "<div class=\"content\">\n <ng-content />\n</div>\n", styles: [":host{--maxWidth: 1320px;--horizontalPadding: 24px;--verticalPadding: 0;position:relative;display:block;min-height:100vh}:host .content{padding:var(--verticalPadding) var(--horizontalPadding);margin:0 auto;max-width:var(--maxWidth)}\n"] }]
4071
4071
  }] });
4072
4072
 
4073
- const CUI_TAB_ACTIVATE = 'cui-tab-activate';
4074
- class CuiTabComponent {
4073
+ const CUI_TABS_SERVICE_TOKEN = new InjectionToken('CUI_TABS_SERVICE');
4074
+ class CuiAbstractTabsService {
4075
+ }
4076
+
4077
+ class CuiTabDirective {
4075
4078
  constructor() {
4076
- this.element = inject(ElementRef).nativeElement;
4079
+ this.tabsService = inject(CUI_TABS_SERVICE_TOKEN);
4080
+ this.tabId = inject(CuiIdService).generate();
4081
+ this.buttonSlot = input.required();
4082
+ this.contentSlot = input.required();
4083
+ this.data = input();
4084
+ this.initTabEffect();
4085
+ }
4086
+ initTabEffect() {
4087
+ effect((onCleanup) => {
4088
+ this.addTab(this.buttonSlot(), this.contentSlot());
4089
+ onCleanup(this.removeTab.bind(this));
4090
+ }, { allowSignalWrites: true });
4091
+ }
4092
+ addTab(button, content) {
4093
+ this.tabsService.addTab({ id: this.tabId, button, content, data: untracked(this.data) });
4077
4094
  }
4078
- onClick() {
4079
- this.element.dispatchEvent(new CustomEvent(CUI_TAB_ACTIVATE, { bubbles: true }));
4095
+ removeTab() {
4096
+ this.tabsService.removeTab(this.tabId);
4080
4097
  }
4081
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4082
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CuiTabComponent, selector: "button[cuiTab]", host: { listeners: { "click": "onClick()" } }, ngImport: i0, template: "<ng-content />\n", styles: [":host{padding:0;border:0;flex-shrink:0;outline:none;cursor:pointer;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;font-family:var(--cui-main-font)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4098
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4099
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: CuiTabDirective, isStandalone: true, selector: "cui-tab, [cuiTab]", inputs: { buttonSlot: { classPropertyName: "buttonSlot", publicName: "buttonSlot", isSignal: true, isRequired: true, transformFunction: null }, contentSlot: { classPropertyName: "contentSlot", publicName: "contentSlot", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
4083
4100
  }
4084
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabComponent, decorators: [{
4085
- type: Component,
4086
- args: [{ selector: 'button[cuiTab]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content />\n", styles: [":host{padding:0;border:0;flex-shrink:0;outline:none;cursor:pointer;appearance:none;color:inherit;font:inherit;background:inherit;text-decoration:none;-webkit-tap-highlight-color:transparent;font-family:var(--cui-main-font)}\n"] }]
4087
- }], propDecorators: { onClick: [{
4088
- type: HostListener,
4089
- args: ['click']
4090
- }] } });
4101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabDirective, decorators: [{
4102
+ type: Directive,
4103
+ args: [{
4104
+ selector: 'cui-tab, [cuiTab]',
4105
+ standalone: true,
4106
+ }]
4107
+ }], ctorParameters: () => [] });
4091
4108
 
4092
- class CuiTabsComponent {
4109
+ class CuiTabsServiceImpl extends CuiAbstractTabsService {
4093
4110
  constructor() {
4094
- this.element = inject(ElementRef).nativeElement;
4095
- this.activeElementClass = '_active';
4096
- this.activeItemIndex = 0;
4097
- this.activeItemIndexChange = new EventEmitter();
4111
+ super(...arguments);
4112
+ this.tabsSignal = signal([]);
4113
+ this.activeTabSignal = computed(() => signal(this.tabsSignal()[0]));
4114
+ this.tabs = this.tabsSignal.asReadonly();
4115
+ this.activeTab = computed(() => this.activeTabSignal()());
4098
4116
  }
4099
- get tabs() {
4100
- return Array.from(this.element.querySelectorAll('[cuiTab]'));
4117
+ set(tab) {
4118
+ this.activeTabSignal().set(tab);
4101
4119
  }
4102
- get activeElement() {
4103
- return this.tabs[this.activeItemIndex] || null;
4120
+ addTab(tab) {
4121
+ this.tabsSignal.update((prev) => [...prev, tab]);
4104
4122
  }
4105
- ngAfterViewChecked() {
4106
- this.changeActiveItem();
4123
+ removeTab(tabId) {
4124
+ this.tabsSignal.update((prev) => prev.filter((tab) => tab.id !== tabId));
4107
4125
  }
4108
- onActivate(event) {
4109
- event.stopPropagation();
4110
- const index = this.tabs.findIndex((tab) => tab === event.target);
4111
- if (index === this.activeItemIndex) {
4126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4127
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsServiceImpl }); }
4128
+ }
4129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsServiceImpl, decorators: [{
4130
+ type: Injectable
4131
+ }] });
4132
+
4133
+ class CuiTabsComponent {
4134
+ constructor() {
4135
+ this.tabsService = inject(CUI_TABS_SERVICE_TOKEN);
4136
+ this.tabs = this.tabsService.tabs;
4137
+ this.activeTab = this.tabsService.activeTab;
4138
+ this.headerSlot = input();
4139
+ this.selectedIndex = input(0);
4140
+ this.initSelectedTabEffect();
4141
+ }
4142
+ onSelectTab(event, tab) {
4143
+ if (event.defaultPrevented) {
4112
4144
  return;
4113
4145
  }
4114
- this.activeItemIndexChange.emit(index);
4115
- this.activeItemIndex = index;
4146
+ this.tabsService.set(tab);
4116
4147
  }
4117
- changeActiveItem() {
4118
- this.tabs.forEach(nativeElement => {
4119
- const active = nativeElement === this.activeElement;
4120
- nativeElement.classList.toggle(this.activeElementClass, active);
4121
- });
4148
+ initSelectedTabEffect() {
4149
+ effect(() => {
4150
+ const index = this.selectedIndex();
4151
+ const length = this.tabs().length;
4152
+ if (index === undefined) {
4153
+ return;
4154
+ }
4155
+ if (!length) {
4156
+ throw new Error('No tab selected');
4157
+ }
4158
+ if (index < 0 || index >= length) {
4159
+ throw new Error('Invalid tab index');
4160
+ }
4161
+ this.tabsService.set(this.tabs()[index]);
4162
+ }, { allowSignalWrites: true });
4122
4163
  }
4123
4164
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4124
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CuiTabsComponent, selector: "cui-tabs", inputs: { activeItemIndex: "activeItemIndex" }, outputs: { activeItemIndexChange: "activeItemIndexChange" }, host: { listeners: { "cui-tab-activate": "onActivate($event)" } }, ngImport: i0, template: "<ng-content select=\"[cuiTab]\" />\n", styles: [":host{display:flex;border-radius:8px;gap:32px}:host ::ng-deep>[cuiTab]{padding:8px 12px;font-weight:500;font-size:14px;line-height:20px;color:var(--cui-base-500);border-radius:6px}@media (hover: hover){:host ::ng-deep>[cuiTab]:hover{color:var(--cui-base-900);background:var(--cui-base-50)}}:host ::ng-deep>[cuiTab]:active{color:var(--cui-base-900);background:var(--cui-base-50)}:host ::ng-deep>[cuiTab]._active{color:var(--cui-light-blue-600);background:var(--cui-base-50)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiTabsComponent, isStandalone: true, selector: "cui-tabs", inputs: { headerSlot: { classPropertyName: "headerSlot", publicName: "headerSlot", isSignal: true, isRequired: false, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: CUI_TABS_SERVICE_TOKEN, useClass: CuiTabsServiceImpl }], ngImport: i0, template: "@if (headerSlot(); as header) {\n <ng-container\n [ngTemplateOutlet]=\"header\"\n [ngTemplateOutletContext]=\"{ $implicit: buttons }\"\n />\n} @else {\n <header class=\"header\">\n <ng-container [ngTemplateOutlet]=\"buttons\" />\n </header>\n}\n\n<ng-template #buttons>\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onSelectTab($event, tab)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"tab.button\"\n [ngTemplateOutletContext]=\"{ $implicit: tab.data, isActive: tab.id === activeTab()?.id }\"\n />\n </button>\n }\n</ng-template>\n\n@if (activeTab()?.content; as content) {\n <ng-container\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{ $implicit: activeTab()?.data }\"\n />\n}\n", styles: [":host{display:flex;flex-direction:column}.header{display:flex}.button{display:contents}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4125
4166
  }
4126
4167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsComponent, decorators: [{
4127
4168
  type: Component,
4128
- args: [{ selector: 'cui-tabs', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content select=\"[cuiTab]\" />\n", styles: [":host{display:flex;border-radius:8px;gap:32px}:host ::ng-deep>[cuiTab]{padding:8px 12px;font-weight:500;font-size:14px;line-height:20px;color:var(--cui-base-500);border-radius:6px}@media (hover: hover){:host ::ng-deep>[cuiTab]:hover{color:var(--cui-base-900);background:var(--cui-base-50)}}:host ::ng-deep>[cuiTab]:active{color:var(--cui-base-900);background:var(--cui-base-50)}:host ::ng-deep>[cuiTab]._active{color:var(--cui-light-blue-600);background:var(--cui-base-50)}\n"] }]
4129
- }], propDecorators: { activeItemIndex: [{
4130
- type: Input
4131
- }], activeItemIndexChange: [{
4132
- type: Output
4133
- }], onActivate: [{
4134
- type: HostListener,
4135
- args: [CUI_TAB_ACTIVATE, ['$event']]
4136
- }] } });
4137
-
4138
- class CuiTabsModule {
4139
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4140
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsModule, declarations: [CuiTabsComponent, CuiTabComponent], exports: [CuiTabsComponent, CuiTabComponent] }); }
4141
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsModule }); }
4142
- }
4143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiTabsModule, decorators: [{
4144
- type: NgModule,
4145
- args: [{
4146
- imports: [],
4147
- declarations: [CuiTabsComponent, CuiTabComponent],
4148
- exports: [CuiTabsComponent, CuiTabComponent]
4149
- }]
4150
- }] });
4169
+ args: [{ selector: 'cui-tabs', imports: [NgTemplateOutlet], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: CUI_TABS_SERVICE_TOKEN, useClass: CuiTabsServiceImpl }], template: "@if (headerSlot(); as header) {\n <ng-container\n [ngTemplateOutlet]=\"header\"\n [ngTemplateOutletContext]=\"{ $implicit: buttons }\"\n />\n} @else {\n <header class=\"header\">\n <ng-container [ngTemplateOutlet]=\"buttons\" />\n </header>\n}\n\n<ng-template #buttons>\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onSelectTab($event, tab)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"tab.button\"\n [ngTemplateOutletContext]=\"{ $implicit: tab.data, isActive: tab.id === activeTab()?.id }\"\n />\n </button>\n }\n</ng-template>\n\n@if (activeTab()?.content; as content) {\n <ng-container\n [ngTemplateOutlet]=\"content\"\n [ngTemplateOutletContext]=\"{ $implicit: activeTab()?.data }\"\n />\n}\n", styles: [":host{display:flex;flex-direction:column}.header{display:flex}.button{display:contents}\n"] }]
4170
+ }], ctorParameters: () => [] });
4151
4171
 
4152
4172
  class CuiTextareaComponent {
4153
4173
  constructor() {
@@ -10148,5 +10168,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
10148
10168
  * Generated bundle index. Do not edit.
10149
10169
  */
10150
10170
 
10151
- export { AngularOutsideLoaderService, CUI_ALERTS, CUI_ALERT_CONTEXT, CUI_ALERT_DEFAULT_OPTIONS, CUI_ALERT_OPTIONS, CUI_ANIMATIONS_DEFAULT_DURATION, CUI_BANNER_DEFAULT_OPTIONS, CUI_BANNER_OPTIONS, CUI_BUTTON_DEFAULT_OPTIONS, CUI_BUTTON_OPTIONS, CUI_DEFAULT_THEME, CUI_DIALOGS, CUI_DIALOG_CONTEXT, CUI_DIALOG_DEFAULT_OPTIONS, CUI_DIALOG_OPTIONS, CUI_INPUT_TIME_DEFAULT_OPTIONS, CUI_INPUT_TIME_OPTIONS, CUI_NOTIFICATION_DEFAULT_OPTIONS, CUI_NOTIFICATION_ICONS, CUI_NOTIFICATION_ICON_OPTIONS, CUI_NOTIFICATION_ICON_OPTIONS_DEFAULT_MODE, CUI_NOTIFICATION_ICON_OPTIONS_LIGHT_MODE, CUI_NOTIFICATION_OPTIONS, CUI_ROOT_SELECTOR, CUI_STORAGE_LIST_SERVICE_TOKEN, CUI_TAB_ACTIVATE, CUI_TEXT_FIELD_CONTROLLER, CUI_TEXT_FIELD_ICON_LEFT, CUI_TEXT_FIELD_ID, CUI_TEXT_FIELD_IS_ERROR, CUI_TEXT_FIELD_PLACEHOLDER, CUI_TEXT_FIELD_SIZE, CUI_TEXT_FILED_CONTROLLER_PROVIDER, CUI_THEME, CUI_THEME_STORAGE_DEFAULT_KEY, CUI_THEME_STORAGE_KEY, CUI_TOOLTIP_COMPONENT, CUI_TOOLTIP_DEFAULT_OPTIONS, CUI_TOOLTIP_DIRECTIONS, CUI_TOOLTIP_OPTIONS, CUI_TOOLTIP_PROVIDERS, CuiAccordionComponent, CuiAccordionDirective, CuiAccordionItemComponent, CuiAccordionModule, CuiAlertComponent, CuiAlertModule, CuiAlertService, CuiAlertsComponent, CuiAttachesTool, CuiAuthBase, CuiAuthService, CuiBadgeComponent, CuiBadgeModule, CuiBannerComponent, CuiBannerModule, CuiBreadcrumbComponent, CuiBreadcrumbsComponent, CuiBreadcrumbsModule, CuiButtonComponent, CuiButtonGroupComponent, CuiButtonGroupModule, CuiButtonModule, CuiCardWrapperComponent, CuiCategoriesComponent, CuiCheckboxComponent, CuiCheckboxModule, CuiChecklistBlockComponent, CuiContentWrapperComponent, CuiContextMenuComponent, CuiContextMenuModule, CuiCriterionInfoComponent, CuiCriterionModalCreateComponent, CuiCriterionReadonlyInfoComponent, CuiDeleteModalComponent, CuiDialogActionsComponent, CuiDialogComponent, CuiDialogHeaderComponent, CuiDialogModule, CuiDialogService, CuiDialogsComponent, CuiDropdownDirective, CuiDropdownWrapperComponent, CuiEditorBlockComponent, CuiEditorComponent, CuiEditorModalComponent, CuiEditorReadonlyComponent, CuiEditorTranslations, CuiEmptyStateComponent, CuiFileUploaderStatus, CuiFormFieldComponent, CuiFormFieldModule, CuiGeneralControlErrorHintComponent, CuiGhostInputComponent, CuiHeaderTool, CuiHintComponent, CuiHintModule, CuiIconButtonComponent, CuiIconButtonModule, CuiImageTool, CuiInputModule, CuiInputNumberComponent, CuiInputNumberModule, CuiInputPasswordComponent, CuiInputPasswordModule, CuiInputTextComponent, CuiInputTimeComponent, CuiInputTimeModule, CuiInstructionInfoComponent, CuiInstructionModalCreateComponent, CuiInstructionReadonlyInfoComponent, CuiLabelComponent, CuiLabelModule, CuiLayoutComponent, CuiLetterBoxComponent, CuiLinkMarker, CuiListTool, CuiLoaderComponent, CuiLoaderService, CuiLoadingState, CuiNotificationComponent, CuiNotificationModule, CuiPositionService, CuiRadioComponent, CuiRadioModule, CuiReadonlyCriterionModalComponent, CuiReadonlyInstructionModalComponent, CuiRenderDynamicComponentsComponent, CuiRenderDynamicComponentsService, CuiRoleMarker, CuiRootComponent, CuiRootModule, CuiSelectComponent, CuiSelectModalComponent, CuiSelectModalFolderComponent, CuiSelectModalSearchComponent, CuiSelectModalService, CuiSelectModule, CuiSelectedCategoryService, CuiSidebarContainerComponent, CuiSidebarHeaderComponent, CuiSidebarNavigationComponent, CuiSidebarNavigationContainerComponent, CuiSidebarNavigationItemComponent, CuiSidebarService, CuiStorageListComponent, CuiSvgComponent, CuiSvgModule, CuiTabComponent, CuiTabsComponent, CuiTabsModule, CuiTextFieldController, CuiTextFieldControllerModule, CuiTextFieldIconLeftDirective, CuiTextFieldIdDirective, CuiTextFieldIsErrorDirective, CuiTextFieldPlaceholderDirective, CuiTextFieldSizeDirective, CuiTextareaComponent, CuiTextareaModule, CuiThemeService, CuiToggleComponent, CuiToggleModule, CuiToolMarker, CuiTooltip, CuiTooltipComponent, CuiTooltipDescribe, CuiTooltipDirective, CuiTooltipDriver, CuiTooltipHost, CuiTooltipHover, CuiTooltipManual, CuiTooltipOptionsDirective, CuiTooltipOverflow, CuiTooltipPointer, CuiTooltipPosition, CuiTooltipService, CuiTooltipUnstyled, CuiTooltipUnstyledComponent, CuiTooltips, CuiUtilityModalComponent, CuiVideoTool, CuiVisualViewportService, UTILITY_MODAL_SERVICE_TOKEN, cuiAuthInterceptor, cuiCreateDefaultValidators, cuiErrorHandlerInterceptor, cuiGetDuration, cuiIsObscured, cuiLoaderInterceptor, cuiOverrideOptions, cuiProvideEditor, cuiRemoveSpaces, cuiReplace, cuiToAnimationOptions, cuiTooltipOptionsProvider, cuiXNdjsonInterceptor, provideCuiAuth };
10171
+ export { AngularOutsideLoaderService, CUI_ALERTS, CUI_ALERT_CONTEXT, CUI_ALERT_DEFAULT_OPTIONS, CUI_ALERT_OPTIONS, CUI_ANIMATIONS_DEFAULT_DURATION, CUI_BANNER_DEFAULT_OPTIONS, CUI_BANNER_OPTIONS, CUI_BUTTON_DEFAULT_OPTIONS, CUI_BUTTON_OPTIONS, CUI_DEFAULT_THEME, CUI_DIALOGS, CUI_DIALOG_CONTEXT, CUI_DIALOG_DEFAULT_OPTIONS, CUI_DIALOG_OPTIONS, CUI_INPUT_TIME_DEFAULT_OPTIONS, CUI_INPUT_TIME_OPTIONS, CUI_NOTIFICATION_DEFAULT_OPTIONS, CUI_NOTIFICATION_ICONS, CUI_NOTIFICATION_ICON_OPTIONS, CUI_NOTIFICATION_ICON_OPTIONS_DEFAULT_MODE, CUI_NOTIFICATION_ICON_OPTIONS_LIGHT_MODE, CUI_NOTIFICATION_OPTIONS, CUI_ROOT_SELECTOR, CUI_STORAGE_LIST_SERVICE_TOKEN, CUI_TABS_SERVICE_TOKEN, CUI_TEXT_FIELD_CONTROLLER, CUI_TEXT_FIELD_ICON_LEFT, CUI_TEXT_FIELD_ID, CUI_TEXT_FIELD_IS_ERROR, CUI_TEXT_FIELD_PLACEHOLDER, CUI_TEXT_FIELD_SIZE, CUI_TEXT_FILED_CONTROLLER_PROVIDER, CUI_THEME, CUI_THEME_STORAGE_DEFAULT_KEY, CUI_THEME_STORAGE_KEY, CUI_TOOLTIP_COMPONENT, CUI_TOOLTIP_DEFAULT_OPTIONS, CUI_TOOLTIP_DIRECTIONS, CUI_TOOLTIP_OPTIONS, CUI_TOOLTIP_PROVIDERS, CuiAccordionComponent, CuiAccordionDirective, CuiAccordionItemComponent, CuiAccordionModule, CuiAlertComponent, CuiAlertModule, CuiAlertService, CuiAlertsComponent, CuiAttachesTool, CuiAuthBase, CuiAuthService, CuiBadgeComponent, CuiBadgeModule, CuiBannerComponent, CuiBannerModule, CuiBreadcrumbComponent, CuiBreadcrumbsComponent, CuiBreadcrumbsModule, CuiButtonComponent, CuiButtonGroupComponent, CuiButtonGroupModule, CuiButtonModule, CuiCardWrapperComponent, CuiCategoriesComponent, CuiCheckboxComponent, CuiCheckboxModule, CuiChecklistBlockComponent, CuiContentWrapperComponent, CuiContextMenuComponent, CuiContextMenuModule, CuiCriterionInfoComponent, CuiCriterionModalCreateComponent, CuiCriterionReadonlyInfoComponent, CuiDeleteModalComponent, CuiDialogActionsComponent, CuiDialogComponent, CuiDialogHeaderComponent, CuiDialogModule, CuiDialogService, CuiDialogsComponent, CuiDropdownDirective, CuiDropdownWrapperComponent, CuiEditorBlockComponent, CuiEditorComponent, CuiEditorModalComponent, CuiEditorReadonlyComponent, CuiEditorTranslations, CuiEmptyStateComponent, CuiFileUploaderStatus, CuiFormFieldComponent, CuiFormFieldModule, CuiGeneralControlErrorHintComponent, CuiGhostInputComponent, CuiHeaderTool, CuiHintComponent, CuiHintModule, CuiIconButtonComponent, CuiIconButtonModule, CuiImageTool, CuiInputModule, CuiInputNumberComponent, CuiInputNumberModule, CuiInputPasswordComponent, CuiInputPasswordModule, CuiInputTextComponent, CuiInputTimeComponent, CuiInputTimeModule, CuiInstructionInfoComponent, CuiInstructionModalCreateComponent, CuiInstructionReadonlyInfoComponent, CuiLabelComponent, CuiLabelModule, CuiLayoutComponent, CuiLetterBoxComponent, CuiLinkMarker, CuiListTool, CuiLoaderComponent, CuiLoaderService, CuiLoadingState, CuiNotificationComponent, CuiNotificationModule, CuiPositionService, CuiRadioComponent, CuiRadioModule, CuiReadonlyCriterionModalComponent, CuiReadonlyInstructionModalComponent, CuiRenderDynamicComponentsComponent, CuiRenderDynamicComponentsService, CuiRoleMarker, CuiRootComponent, CuiRootModule, CuiSelectComponent, CuiSelectModalComponent, CuiSelectModalFolderComponent, CuiSelectModalSearchComponent, CuiSelectModalService, CuiSelectModule, CuiSelectedCategoryService, CuiSidebarContainerComponent, CuiSidebarHeaderComponent, CuiSidebarNavigationComponent, CuiSidebarNavigationContainerComponent, CuiSidebarNavigationItemComponent, CuiSidebarService, CuiStorageListComponent, CuiSvgComponent, CuiSvgModule, CuiTabDirective, CuiTabsComponent, CuiTextFieldController, CuiTextFieldControllerModule, CuiTextFieldIconLeftDirective, CuiTextFieldIdDirective, CuiTextFieldIsErrorDirective, CuiTextFieldPlaceholderDirective, CuiTextFieldSizeDirective, CuiTextareaComponent, CuiTextareaModule, CuiThemeService, CuiToggleComponent, CuiToggleModule, CuiToolMarker, CuiTooltip, CuiTooltipComponent, CuiTooltipDescribe, CuiTooltipDirective, CuiTooltipDriver, CuiTooltipHost, CuiTooltipHover, CuiTooltipManual, CuiTooltipOptionsDirective, CuiTooltipOverflow, CuiTooltipPointer, CuiTooltipPosition, CuiTooltipService, CuiTooltipUnstyled, CuiTooltipUnstyledComponent, CuiTooltips, CuiUtilityModalComponent, CuiVideoTool, CuiVisualViewportService, UTILITY_MODAL_SERVICE_TOKEN, cuiAuthInterceptor, cuiCreateDefaultValidators, cuiErrorHandlerInterceptor, cuiGetDuration, cuiIsObscured, cuiLoaderInterceptor, cuiOverrideOptions, cuiProvideEditor, cuiRemoveSpaces, cuiReplace, cuiToAnimationOptions, cuiTooltipOptionsProvider, cuiXNdjsonInterceptor, provideCuiAuth };
10152
10172
  //# sourceMappingURL=cuby-ui-core.mjs.map