@cuby-ui/core 0.0.325 → 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.
Files changed (57) hide show
  1. package/components/index.d.ts +1 -0
  2. package/components/tab/index.d.ts +1 -0
  3. package/components/tab/tab.component.d.ts +15 -0
  4. package/components/tabs/index.d.ts +2 -3
  5. package/components/tabs/services/index.d.ts +1 -0
  6. package/components/tabs/services/tabs.service.d.ts +14 -0
  7. package/components/tabs/tabs.component.d.ts +12 -13
  8. package/components/tabs/tabs.options.d.ts +21 -0
  9. package/esm2022/components/index.mjs +2 -1
  10. package/esm2022/components/tab/index.mjs +2 -0
  11. package/esm2022/components/tab/tab.component.mjs +36 -0
  12. package/esm2022/components/tabs/index.mjs +3 -4
  13. package/esm2022/components/tabs/services/index.mjs +2 -0
  14. package/esm2022/components/tabs/services/tabs.service.mjs +27 -0
  15. package/esm2022/components/tabs/tabs.component.mjs +32 -37
  16. package/esm2022/components/tabs/tabs.options.mjs +5 -0
  17. package/esm2022/widgets/index.mjs +3 -1
  18. package/esm2022/widgets/select-modal/components/index.mjs +3 -0
  19. package/esm2022/widgets/select-modal/components/select-modal-folder/index.mjs +2 -0
  20. package/esm2022/widgets/select-modal/components/select-modal-folder/select-modal-folder.component.mjs +21 -0
  21. package/esm2022/widgets/select-modal/components/select-modal-search/index.mjs +2 -0
  22. package/esm2022/widgets/select-modal/components/select-modal-search/select-modal-search.component.mjs +22 -0
  23. package/esm2022/widgets/select-modal/index.mjs +4 -0
  24. package/esm2022/widgets/select-modal/select-modal.component.mjs +35 -0
  25. package/esm2022/widgets/select-modal/select-modal.interfaces.mjs +2 -0
  26. package/esm2022/widgets/select-modal/select-modal.service.mjs +23 -0
  27. package/esm2022/widgets/storage-list/components/index.mjs +2 -0
  28. package/esm2022/widgets/storage-list/components/storage-list-item/index.mjs +2 -0
  29. package/esm2022/widgets/storage-list/components/storage-list-item/storage-list-item.component.mjs +70 -0
  30. package/esm2022/widgets/storage-list/index.mjs +3 -0
  31. package/esm2022/widgets/storage-list/storage-list.component.mjs +17 -0
  32. package/esm2022/widgets/storage-list/storage-list.options.mjs +3 -0
  33. package/fesm2022/cuby-ui-core.mjs +234 -63
  34. package/fesm2022/cuby-ui-core.mjs.map +1 -1
  35. package/package.json +4 -4
  36. package/widgets/index.d.ts +2 -0
  37. package/widgets/select-modal/components/index.d.ts +2 -0
  38. package/widgets/select-modal/components/select-modal-folder/index.d.ts +1 -0
  39. package/widgets/select-modal/components/select-modal-folder/select-modal-folder.component.d.ts +10 -0
  40. package/widgets/select-modal/components/select-modal-search/index.d.ts +1 -0
  41. package/widgets/select-modal/components/select-modal-search/select-modal-search.component.d.ts +7 -0
  42. package/widgets/select-modal/index.d.ts +3 -0
  43. package/widgets/select-modal/select-modal.component.d.ts +13 -0
  44. package/widgets/select-modal/select-modal.interfaces.d.ts +15 -0
  45. package/widgets/select-modal/select-modal.service.d.ts +13 -0
  46. package/widgets/storage-list/components/index.d.ts +1 -0
  47. package/widgets/storage-list/components/storage-list-item/index.d.ts +1 -0
  48. package/widgets/storage-list/components/storage-list-item/storage-list-item.component.d.ts +24 -0
  49. package/widgets/storage-list/index.d.ts +2 -0
  50. package/widgets/storage-list/storage-list.component.d.ts +10 -0
  51. package/widgets/storage-list/storage-list.options.d.ts +16 -0
  52. package/components/tabs/tab/index.d.ts +0 -1
  53. package/components/tabs/tab/tab.component.d.ts +0 -8
  54. package/components/tabs/tabs.module.d.ts +0 -8
  55. package/esm2022/components/tabs/tab/index.mjs +0 -2
  56. package/esm2022/components/tabs/tab/tab.component.mjs +0 -21
  57. package/esm2022/components/tabs/tabs.module.mjs +0 -18
@@ -0,0 +1,70 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, computed, effect, forwardRef, inject, input, signal, untracked } from '@angular/core';
3
+ import { CuiLetDirective } from '@cuby-ui/cdk';
4
+ import { finalize } from 'rxjs';
5
+ import { CuiSvgModule } from '../../../../components/svg';
6
+ import { CuiStorageListComponent } from '../..';
7
+ import { CUI_STORAGE_LIST_SERVICE_TOKEN } from '../../storage-list.options';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../../components/svg/svg.component";
10
+ export class CuiStorageListItemComponent {
11
+ constructor() {
12
+ this.storageListService = inject(CUI_STORAGE_LIST_SERVICE_TOKEN);
13
+ this.isLoadingChildren = false;
14
+ this.isLoadingElements = false;
15
+ this.storageChildren = signal([]);
16
+ this.storageElements = signal([]);
17
+ this.areContentOpened = signal(false);
18
+ this.openCloseButtonIcon = computed(() => this.areContentOpened() ? 'cuiIconChevronDown' : 'cuiIconChevronRight');
19
+ this.hasContent = computed(() => this.storage().children.length || this.storageChildren().length || this.storageElements().length);
20
+ this.storage = input.required();
21
+ this.elementSlot = input();
22
+ this.itemSlot = input();
23
+ this.initStorageChildrenEffect();
24
+ this.initStorageElementsEffect();
25
+ }
26
+ onToggleChildren(event) {
27
+ event.preventDefault();
28
+ this.areContentOpened.update((prevAreChildrenOpened) => !prevAreChildrenOpened);
29
+ }
30
+ initStorageChildrenEffect() {
31
+ effect(() => {
32
+ const storage = this.storage();
33
+ this.areContentOpened();
34
+ untracked(this.setChildren.bind(this, storage));
35
+ });
36
+ }
37
+ initStorageElementsEffect() {
38
+ effect(() => {
39
+ const storage = this.storage();
40
+ untracked(this.setElements.bind(this, storage));
41
+ });
42
+ }
43
+ setChildren(storage) {
44
+ if (this.isLoadingChildren || !this.areContentOpened() || this.storageChildren().length) {
45
+ return;
46
+ }
47
+ this.isLoadingChildren = true;
48
+ this.storageListService
49
+ .getChildren?.(storage, this.storageChildren())
50
+ .pipe(finalize(() => (this.isLoadingChildren = false)))
51
+ .subscribe((response) => this.storageChildren.set(response));
52
+ }
53
+ setElements(storage) {
54
+ if (this.isLoadingElements || this.storageElements().length) {
55
+ return;
56
+ }
57
+ this.isLoadingElements = true;
58
+ this.storageListService
59
+ .getElements?.(storage, this.storageElements())
60
+ .pipe(finalize(() => (this.isLoadingElements = false)))
61
+ .subscribe((response) => this.storageElements.set(response));
62
+ }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiStorageListItemComponent, isStandalone: true, selector: "li[cuiStorageListItem]", inputs: { storage: { classPropertyName: "storage", publicName: "storage", isSignal: true, isRequired: true, transformFunction: null }, elementSlot: { classPropertyName: "elementSlot", publicName: "elementSlot", isSignal: true, isRequired: false, transformFunction: null }, itemSlot: { classPropertyName: "itemSlot", publicName: "itemSlot", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container *cuiLet=\"storage() as storage\">\n <div class=\"wrapper\">\n <ng-template #openCloseButton>\n @if (hasContent()) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n }\n </ng-template>\n\n @if (itemSlot(); as item) {\n <ng-container\n *ngTemplateOutlet=\"\n item;\n context: {\n $implicit: storage,\n openCloseButton,\n areContentOpened: areContentOpened(),\n hasContent: hasContent()\n }\n \"\n />\n }\n\n <div\n class=\"content\"\n [class.content_hidden]=\"!areContentOpened()\"\n >\n <div class=\"lists\">\n @if (storageChildren().length) {\n <cui-storage-list\n [storages]=\"storageChildren()\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n />\n }\n @if (storageElements().length && elementSlot()) {\n <ul class=\"list\">\n @for (element of storageElements(); track element.id) {\n <li class=\"item\">\n <ng-container\n *ngTemplateOutlet=\"\n elementSlot()!;\n context: { $implicit: element, storage: storage }\n \"\n />\n </li>\n }\n </ul>\n }\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".button{padding:2px;display:flex;border-radius:4px}@media (hover: hover){.button:hover{background:var(--cui-base-200)}}.button :active{background:var(--cui-base-200)}.icon{padding:2px}.wrapper{display:flex;flex-direction:column;gap:8px}.content{padding-left:20px}.content_hidden{display:none}.lists{display:flex;flex-direction:column;gap:8px;position:relative}.lists>*{z-index:1}.lists:has(>:nth-child(2)):before{content:\"\";position:absolute;top:0;bottom:0;left:8px;width:1px;background:var(--cui-base-200)}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => CuiLetDirective), selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiSvgModule) }, { kind: "component", type: i0.forwardRef(() => i1.CuiSvgComponent), selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => CuiStorageListComponent), selector: "cui-storage-list", inputs: ["storages", "elementSlot", "itemSlot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListItemComponent, decorators: [{
67
+ type: Component,
68
+ args: [{ selector: 'li[cuiStorageListItem]', imports: [CuiLetDirective, CuiSvgModule, NgTemplateOutlet, forwardRef(() => CuiStorageListComponent)], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *cuiLet=\"storage() as storage\">\n <div class=\"wrapper\">\n <ng-template #openCloseButton>\n @if (hasContent()) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n }\n </ng-template>\n\n @if (itemSlot(); as item) {\n <ng-container\n *ngTemplateOutlet=\"\n item;\n context: {\n $implicit: storage,\n openCloseButton,\n areContentOpened: areContentOpened(),\n hasContent: hasContent()\n }\n \"\n />\n }\n\n <div\n class=\"content\"\n [class.content_hidden]=\"!areContentOpened()\"\n >\n <div class=\"lists\">\n @if (storageChildren().length) {\n <cui-storage-list\n [storages]=\"storageChildren()\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n />\n }\n @if (storageElements().length && elementSlot()) {\n <ul class=\"list\">\n @for (element of storageElements(); track element.id) {\n <li class=\"item\">\n <ng-container\n *ngTemplateOutlet=\"\n elementSlot()!;\n context: { $implicit: element, storage: storage }\n \"\n />\n </li>\n }\n </ul>\n }\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".button{padding:2px;display:flex;border-radius:4px}@media (hover: hover){.button:hover{background:var(--cui-base-200)}}.button :active{background:var(--cui-base-200)}.icon{padding:2px}.wrapper{display:flex;flex-direction:column;gap:8px}.content{padding-left:20px}.content_hidden{display:none}.lists{display:flex;flex-direction:column;gap:8px;position:relative}.lists>*{z-index:1}.lists:has(>:nth-child(2)):before{content:\"\";position:absolute;top:0;bottom:0;left:8px;width:1px;background:var(--cui-base-200)}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"] }]
69
+ }], ctorParameters: () => [] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS93aWRnZXRzL3N0b3JhZ2UtbGlzdC9jb21wb25lbnRzL3N0b3JhZ2UtbGlzdC1pdGVtL3N0b3JhZ2UtbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy9zdG9yYWdlLWxpc3QvY29tcG9uZW50cy9zdG9yYWdlLWxpc3QtaXRlbS9zdG9yYWdlLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVuRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQVU1RSxNQUFNLE9BQU8sMkJBQTJCO0lBb0JwQztRQW5CaUIsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFckUsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUVmLG9CQUFlLEdBQUcsTUFBTSxDQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLG9CQUFlLEdBQUcsTUFBTSxDQUFtQixFQUFFLENBQUMsQ0FBQztRQUMvQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsd0JBQW1CLEdBQUcsUUFBUSxDQUFVLEdBQUcsRUFBRSxDQUM1RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUN6RSxDQUFDO1FBQ2lCLGVBQVUsR0FBRyxRQUFRLENBQ3BDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FDekcsQ0FBQztRQUVjLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpQixDQUFDO1FBQzFDLGdCQUFXLEdBQUcsS0FBSyxFQUF3QixDQUFDO1FBQzVDLGFBQVEsR0FBRyxLQUFLLEVBQXdCLENBQUM7UUFHckQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVTLGdCQUFnQixDQUFDLEtBQWlCO1FBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8seUJBQXlCO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFnQyxDQUFDO1lBRTdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5QkFBeUI7UUFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQWdDLENBQUM7WUFFN0QsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUFtQztRQUNuRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQjthQUNsQixXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN0RCxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLFdBQVcsQ0FBQyxPQUFtQztRQUNuRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUQsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0I7YUFDbEIsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDdEQsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7K0dBdEVRLDJCQUEyQjttR0FBM0IsMkJBQTJCLHNlQzlCeEMsNG9FQTZEQSxreUJEckNjLGVBQWUsNkZBQUUsWUFBWSxrTkFBRSxnQkFBZ0IseUtBQW1CLHVCQUF1Qjs7NEZBTTFGLDJCQUEyQjtrQkFSdkMsU0FBUzsrQkFDSSx3QkFBd0IsV0FDekIsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLGNBR3pGLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdWlMZXREaXJlY3RpdmUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHR5cGUgeyBDdWlJY29uIH0gZnJvbSAnQGN1YnktdWkvaWNvbnMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ3VpU3ZnTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9zdmcnO1xuaW1wb3J0IHsgQ3VpU3RvcmFnZUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgdHlwZSB7IEN1aVN0b3JhZ2UsIEN1aVN0b3JhZ2VCYXNlIH0gZnJvbSAnLi4vLi4vc3RvcmFnZS1saXN0Lm9wdGlvbnMnO1xuaW1wb3J0IHsgQ1VJX1NUT1JBR0VfTElTVF9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vc3RvcmFnZS1saXN0Lm9wdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpW2N1aVN0b3JhZ2VMaXN0SXRlbV0nLFxuICAgIGltcG9ydHM6IFtDdWlMZXREaXJlY3RpdmUsIEN1aVN2Z01vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCwgZm9yd2FyZFJlZigoKSA9PiBDdWlTdG9yYWdlTGlzdENvbXBvbmVudCldLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdG9yYWdlLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3N0b3JhZ2UtbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN1aVN0b3JhZ2VMaXN0SXRlbUNvbXBvbmVudDxUID0gQ3VpU3RvcmFnZUJhc2U+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VMaXN0U2VydmljZSA9IGluamVjdChDVUlfU1RPUkFHRV9MSVNUX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgcHJpdmF0ZSBpc0xvYWRpbmdDaGlsZHJlbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNMb2FkaW5nRWxlbWVudHMgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlQ2hpbGRyZW4gPSBzaWduYWw8Q3VpU3RvcmFnZVtdPihbXSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JhZ2VFbGVtZW50cyA9IHNpZ25hbDxDdWlTdG9yYWdlQmFzZVtdPihbXSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFyZUNvbnRlbnRPcGVuZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcGVuQ2xvc2VCdXR0b25JY29uID0gY29tcHV0ZWQ8Q3VpSWNvbj4oKCkgPT5cbiAgICAgICAgdGhpcy5hcmVDb250ZW50T3BlbmVkKCkgPyAnY3VpSWNvbkNoZXZyb25Eb3duJyA6ICdjdWlJY29uQ2hldnJvblJpZ2h0J1xuICAgICk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0NvbnRlbnQgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy5zdG9yYWdlKCkuY2hpbGRyZW4ubGVuZ3RoIHx8IHRoaXMuc3RvcmFnZUNoaWxkcmVuKCkubGVuZ3RoIHx8IHRoaXMuc3RvcmFnZUVsZW1lbnRzKCkubGVuZ3RoXG4gICAgKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBzdG9yYWdlID0gaW5wdXQucmVxdWlyZWQ8Q3VpU3RvcmFnZTxUPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFNsb3QgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXRlbVNsb3QgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRTdG9yYWdlQ2hpbGRyZW5FZmZlY3QoKTtcbiAgICAgICAgdGhpcy5pbml0U3RvcmFnZUVsZW1lbnRzRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVG9nZ2xlQ2hpbGRyZW4oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLmFyZUNvbnRlbnRPcGVuZWQudXBkYXRlKChwcmV2QXJlQ2hpbGRyZW5PcGVuZWQpID0+ICFwcmV2QXJlQ2hpbGRyZW5PcGVuZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFN0b3JhZ2VDaGlsZHJlbkVmZmVjdCgpOiB2b2lkIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2UoKSBhcyBDdWlTdG9yYWdlPEN1aVN0b3JhZ2VCYXNlPjtcblxuICAgICAgICAgICAgdGhpcy5hcmVDb250ZW50T3BlbmVkKCk7XG4gICAgICAgICAgICB1bnRyYWNrZWQodGhpcy5zZXRDaGlsZHJlbi5iaW5kKHRoaXMsIHN0b3JhZ2UpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U3RvcmFnZUVsZW1lbnRzRWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuc3RvcmFnZSgpIGFzIEN1aVN0b3JhZ2U8Q3VpU3RvcmFnZUJhc2U+O1xuXG4gICAgICAgICAgICB1bnRyYWNrZWQodGhpcy5zZXRFbGVtZW50cy5iaW5kKHRoaXMsIHN0b3JhZ2UpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDaGlsZHJlbihzdG9yYWdlOiBDdWlTdG9yYWdlPEN1aVN0b3JhZ2VCYXNlPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmdDaGlsZHJlbiB8fCAhdGhpcy5hcmVDb250ZW50T3BlbmVkKCkgfHwgdGhpcy5zdG9yYWdlQ2hpbGRyZW4oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3JhZ2VMaXN0U2VydmljZVxuICAgICAgICAgICAgLmdldENoaWxkcmVuPy4oc3RvcmFnZSwgdGhpcy5zdG9yYWdlQ2hpbGRyZW4oKSlcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmlzTG9hZGluZ0NoaWxkcmVuID0gZmFsc2UpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB0aGlzLnN0b3JhZ2VDaGlsZHJlbi5zZXQocmVzcG9uc2UpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVsZW1lbnRzKHN0b3JhZ2U6IEN1aVN0b3JhZ2U8Q3VpU3RvcmFnZUJhc2U+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZ0VsZW1lbnRzIHx8IHRoaXMuc3RvcmFnZUVsZW1lbnRzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTG9hZGluZ0VsZW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9yYWdlTGlzdFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRFbGVtZW50cz8uKHN0b3JhZ2UsIHRoaXMuc3RvcmFnZUVsZW1lbnRzKCkpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmdFbGVtZW50cyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4gdGhpcy5zdG9yYWdlRWxlbWVudHMuc2V0KHJlc3BvbnNlKSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqY3VpTGV0PVwic3RvcmFnZSgpIGFzIHN0b3JhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI29wZW5DbG9zZUJ1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQ29udGVudCgpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVDaGlsZHJlbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxjdWktc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJvcGVuQ2xvc2VCdXR0b25JY29uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJ2YXIoLS1jdWktYmFzZS01MDApXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICBAaWYgKGl0ZW1TbG90KCk7IGFzIGl0ZW0pIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBpdGVtO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuQ2xvc2VCdXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmVDb250ZW50T3BlbmVkOiBhcmVDb250ZW50T3BlbmVkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDb250ZW50OiBoYXNDb250ZW50KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5jb250ZW50X2hpZGRlbl09XCIhYXJlQ29udGVudE9wZW5lZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RzXCI+XG4gICAgICAgICAgICAgICAgQGlmIChzdG9yYWdlQ2hpbGRyZW4oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGN1aS1zdG9yYWdlLWxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdG9yYWdlc109XCJzdG9yYWdlQ2hpbGRyZW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFNsb3RdPVwiZWxlbWVudFNsb3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNsb3RdPVwiaXRlbVNsb3QoKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoc3RvcmFnZUVsZW1lbnRzKCkubGVuZ3RoICYmIGVsZW1lbnRTbG90KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZWxlbWVudCBvZiBzdG9yYWdlRWxlbWVudHMoKTsgdHJhY2sgZWxlbWVudC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2xvdCgpITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogZWxlbWVudCwgc3RvcmFnZTogc3RvcmFnZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export { CuiStorageListComponent } from './storage-list.component';
2
+ export * from './storage-list.options';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3dpZGdldHMvc3RvcmFnZS1saXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDdWlTdG9yYWdlTGlzdENvbXBvbmVudCB9IGZyb20gJy4vc3RvcmFnZS1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2UtbGlzdC5vcHRpb25zJztcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
+ import { CuiStorageListItemComponent } from './components';
3
+ import * as i0 from "@angular/core";
4
+ export class CuiStorageListComponent {
5
+ constructor() {
6
+ this.storages = input.required();
7
+ this.elementSlot = input();
8
+ this.itemSlot = input();
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiStorageListComponent, isStandalone: true, selector: "cui-storage-list", inputs: { storages: { classPropertyName: "storages", publicName: "storages", isSignal: true, isRequired: true, transformFunction: null }, elementSlot: { classPropertyName: "elementSlot", publicName: "elementSlot", isSignal: true, isRequired: false, transformFunction: null }, itemSlot: { classPropertyName: "itemSlot", publicName: "itemSlot", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ul class=\"list\">\n @for (storage of storages(); track storage.id) {\n <li\n cuiStorageListItem\n [storage]=\"storage\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n class=\"item\"\n ></li>\n }\n</ul>\n", styles: [":host{display:block}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative;z-index:0}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"], dependencies: [{ kind: "component", type: CuiStorageListItemComponent, selector: "li[cuiStorageListItem]", inputs: ["storage", "elementSlot", "itemSlot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'cui-storage-list', imports: [CuiStorageListItemComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"list\">\n @for (storage of storages(); track storage.id) {\n <li\n cuiStorageListItem\n [storage]=\"storage\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n class=\"item\"\n ></li>\n }\n</ul>\n", styles: [":host{display:block}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative;z-index:0}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"] }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy9zdG9yYWdlLWxpc3Qvc3RvcmFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy9zdG9yYWdlLWxpc3Qvc3RvcmFnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFXM0QsTUFBTSxPQUFPLHVCQUF1QjtJQVJwQztRQVNvQixhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUM3QyxnQkFBVyxHQUFHLEtBQUssRUFBd0IsQ0FBQztRQUM1QyxhQUFRLEdBQUcsS0FBSyxFQUF3QixDQUFDO0tBQzVEOytHQUpZLHVCQUF1QjttR0FBdkIsdUJBQXVCLG1lQ2RwQywyU0FXQSwrU0RIYywyQkFBMkI7OzRGQU01Qix1QkFBdUI7a0JBUm5DLFNBQVM7K0JBQ0ksa0JBQWtCLFdBQ25CLENBQUMsMkJBQTJCLENBQUMsY0FHMUIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ3VpU3RvcmFnZUxpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB0eXBlIHsgQ3VpU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS1saXN0Lm9wdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2N1aS1zdG9yYWdlLWxpc3QnLFxuICAgIGltcG9ydHM6IFtDdWlTdG9yYWdlTGlzdEl0ZW1Db21wb25lbnRdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdG9yYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zdG9yYWdlLWxpc3QuY29tcG9uZW50LnNjc3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ3VpU3RvcmFnZUxpc3RDb21wb25lbnQ8VD4ge1xuICAgIHB1YmxpYyByZWFkb25seSBzdG9yYWdlcyA9IGlucHV0LnJlcXVpcmVkPEN1aVN0b3JhZ2U8VD5bXT4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFNsb3QgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXRlbVNsb3QgPSBpbnB1dDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbn1cbiIsIjx1bCBjbGFzcz1cImxpc3RcIj5cbiAgICBAZm9yIChzdG9yYWdlIG9mIHN0b3JhZ2VzKCk7IHRyYWNrIHN0b3JhZ2UuaWQpIHtcbiAgICAgICAgPGxpXG4gICAgICAgICAgICBjdWlTdG9yYWdlTGlzdEl0ZW1cbiAgICAgICAgICAgIFtzdG9yYWdlXT1cInN0b3JhZ2VcIlxuICAgICAgICAgICAgW2VsZW1lbnRTbG90XT1cImVsZW1lbnRTbG90KClcIlxuICAgICAgICAgICAgW2l0ZW1TbG90XT1cIml0ZW1TbG90KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJpdGVtXCJcbiAgICAgICAgPjwvbGk+XG4gICAgfVxuPC91bD5cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const CUI_STORAGE_LIST_SERVICE_TOKEN = new InjectionToken('STORAGE_LIST_SERVICE_TOKEN');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1saXN0Lm9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3dpZGdldHMvc3RvcmFnZS1saXN0L3N0b3JhZ2UtbGlzdC5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQXdCLDRCQUE0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBDVUlfU1RPUkFHRV9MSVNUX1NFUlZJQ0VfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q3VpU3RvcmFnZUxpc3RTZXJ2aWNlPignU1RPUkFHRV9MSVNUX1NFUlZJQ0VfVE9LRU4nKTtcblxuZXhwb3J0IGludGVyZmFjZSBDdWlTdG9yYWdlTGlzdFNlcnZpY2U8VCA9IEN1aVN0b3JhZ2VCYXNlPiB7XG4gICAgZ2V0Q2hpbGRyZW4/KGNoaWxkcmVuOiBDdWlTdG9yYWdlPFQ+LCBwcmV2Q2hpbGRyZW5zOiBDdWlTdG9yYWdlPFQ+W10pOiBPYnNlcnZhYmxlPEN1aVN0b3JhZ2U8VD5bXT47XG4gICAgZ2V0RWxlbWVudHM/KGVsZW1lbnQ6IEN1aVN0b3JhZ2U8VD4sIHByZXZFbGVtZW50czogVFtdKTogT2JzZXJ2YWJsZTxUW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1aVN0b3JhZ2VCYXNlIHtcbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VpU3RvcmFnZTxUID0gQ3VpU3RvcmFnZUJhc2U+IGV4dGVuZHMgQ3VpU3RvcmFnZUJhc2Uge1xuICAgIHJlYWRvbmx5IGVsZW1lbnRzPzogVFtdO1xuICAgIHJlYWRvbmx5IGNoaWxkcmVuOiBDdWlTdG9yYWdlPFQ+W10gfCBzdHJpbmdbXTtcbn1cbiJdfQ==
@@ -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 });
4077
4091
  }
4078
- onClick() {
4079
- this.element.dispatchEvent(new CustomEvent(CUI_TAB_ACTIVATE, { bubbles: true }));
4092
+ addTab(button, content) {
4093
+ this.tabsService.addTab({ id: this.tabId, button, content, data: untracked(this.data) });
4080
4094
  }
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 }); }
4095
+ removeTab() {
4096
+ this.tabsService.removeTab(this.tabId);
4097
+ }
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() {
@@ -9993,9 +10013,160 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
9993
10013
  ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [CuiSelectedCategoryService], template: "<div\n class=\"wrapper\"\n *transloco=\"let t\"\n>\n <div\n #scrollContent\n class=\"content content_scrollable\"\n >\n <div class=\"category\">\n <cui-form-field>\n <label\n cuiLabel\n [for]=\"categoryId\"\n [isRequired]=\"true\"\n >\n {{ t('SELECT_CATEGORY') }}\n </label>\n <cui-categories\n [buttonId]=\"categoryId\"\n [treeStructType]=\"TYPE\"\n >\n <div class=\"select\">\n <span [style.color]=\"labelColor()\">\n {{ selectTitle() }}\n </span>\n\n <cui-svg icon=\"cuiIconChevronDown\" />\n </div>\n </cui-categories>\n </cui-form-field>\n </div>\n\n @let criterionData = criterion();\n @let editorConfigData = editorConfig();\n\n @if (editorConfigData && criterionData) {\n <cui-criterion-info-form\n [config]=\"editorConfigData\"\n [baseResourceUrl]=\"editorResourceUrl()\"\n [title]=\"criterionData.storageElement.title\"\n [framerId]=\"criterionData.storageElement.framerCriterionId\"\n class=\"utility\"\n (isFormValidChanged)=\"onFormValidationChanged($event)\"\n (formChanged)=\"onFormChanged($event, criterionData.id)\"\n />\n }\n </div>\n</div>\n", styles: [".wrapper{display:flex;flex-direction:column;height:100%}.content{height:calc(100vh - 109px)}.content_scrollable{overflow:auto}.category{padding-top:16px;padding-right:23px;padding-left:23px}.select{padding:7px 13px;font-weight:400;font-size:14px;line-height:20px;display:flex;justify-content:space-between;height:36px;border-radius:8px;border:1px solid var(--cui-base-200);color:var(--cui-base-900);background:var(--cui-input)}.utility{--editor-height: none}\n"] }]
9994
10014
  }], ctorParameters: () => [] });
9995
10015
 
10016
+ class CuiSelectModalFolderComponent {
10017
+ constructor() {
10018
+ this.icon = computed(() => (this.isOpen() ? 'cuiIconFolderOpen' : 'cuiIconFolder'));
10019
+ this.title = input.required();
10020
+ this.buttonSlot = input.required();
10021
+ this.isOpen = input(false);
10022
+ }
10023
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalFolderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10024
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CuiSelectModalFolderComponent, isStandalone: true, selector: "cui-select-modal-folder", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, buttonSlot: { classPropertyName: "buttonSlot", publicName: "buttonSlot", isSignal: true, isRequired: true, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<cui-card-wrapper class=\"wrapper\">\n <ng-container [ngTemplateOutlet]=\"buttonSlot()\" />\n\n <cui-svg\n [icon]=\"icon()\"\n class=\"icon\"\n />\n\n <span class=\"title\">{{ title() }}</span>\n</cui-card-wrapper>\n", styles: [":host{--border-color: var(--cui-base-200);--padding-horizontal: 8px;--padding-vertical: 8px}:host .wrapper{--border: var(--border-color);padding:var(--padding-vertical) var(--padding-horizontal)}.title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon{padding:2px}\n"], dependencies: [{ kind: "ngmodule", type: CuiSvgModule }, { kind: "component", type: CuiSvgComponent, selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "component", type: CuiCardWrapperComponent, selector: "cui-card-wrapper, [cuiCardWrapper]", inputs: ["withBorder"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10025
+ }
10026
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalFolderComponent, decorators: [{
10027
+ type: Component,
10028
+ args: [{ selector: 'cui-select-modal-folder', imports: [CuiSvgModule, CuiCardWrapperComponent, NgTemplateOutlet], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<cui-card-wrapper class=\"wrapper\">\n <ng-container [ngTemplateOutlet]=\"buttonSlot()\" />\n\n <cui-svg\n [icon]=\"icon()\"\n class=\"icon\"\n />\n\n <span class=\"title\">{{ title() }}</span>\n</cui-card-wrapper>\n", styles: [":host{--border-color: var(--cui-base-200);--padding-horizontal: 8px;--padding-vertical: 8px}:host .wrapper{--border: var(--border-color);padding:var(--padding-vertical) var(--padding-horizontal)}.title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon{padding:2px}\n"] }]
10029
+ }] });
10030
+
10031
+ class CuiSelectModalSearchComponent {
10032
+ constructor() {
10033
+ this.searchControl = new FormControl('');
10034
+ }
10035
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10036
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CuiSelectModalSearchComponent, isStandalone: true, selector: "cui-select-modal-search", ngImport: i0, template: "<cui-input-text\n cuiTextFieldPlaceholder=\"Search...\"\n cuiTextFieldIconLeft=\"cuiIconSearch\"\n [formControl]=\"searchControl\"\n class=\"search\"\n/>\n<button\n class=\"filters\"\n type=\"button\"\n cuiIconButton\n icon=\"cuiIconFiltersLines\"\n></button>\n", styles: [":host{padding-right:15px;display:flex;align-items:center;gap:4px}.search{width:100%}.filters{padding:4px;width:auto;height:auto}\n"], dependencies: [{ kind: "ngmodule", type: CuiInputModule }, { kind: "component", type: CuiInputTextComponent, selector: "cui-input-text" }, { kind: "directive", type: CuiTextFieldIconLeftDirective, selector: "[cuiTextFieldIconLeft]", inputs: ["cuiTextFieldIconLeft"] }, { kind: "directive", type: CuiTextFieldPlaceholderDirective, selector: "[cuiTextFieldPlaceholder]", inputs: ["cuiTextFieldPlaceholder"] }, { kind: "ngmodule", type: CuiIconButtonModule }, { kind: "component", type: CuiIconButtonComponent, selector: "button[cuiIconButton][icon], a[cuiIconButton][icon]", inputs: ["icon", "color", "hoverColor"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10037
+ }
10038
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalSearchComponent, decorators: [{
10039
+ type: Component,
10040
+ args: [{ selector: 'cui-select-modal-search', imports: [CuiInputModule, CuiIconButtonModule, ReactiveFormsModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<cui-input-text\n cuiTextFieldPlaceholder=\"Search...\"\n cuiTextFieldIconLeft=\"cuiIconSearch\"\n [formControl]=\"searchControl\"\n class=\"search\"\n/>\n<button\n class=\"filters\"\n type=\"button\"\n cuiIconButton\n icon=\"cuiIconFiltersLines\"\n></button>\n", styles: [":host{padding-right:15px;display:flex;align-items:center;gap:4px}.search{width:100%}.filters{padding:4px;width:auto;height:auto}\n"] }]
10041
+ }] });
10042
+
10043
+ class CuiSelectModalComponent {
10044
+ constructor() {
10045
+ this.context = inject(CUI_DIALOG_CONTEXT);
10046
+ this.data = this.context.data;
10047
+ this.heading = this.data.heading;
10048
+ this.leftData = this.data.leftData;
10049
+ this.rightData = this.data.rightData;
10050
+ }
10051
+ onCancel() {
10052
+ this.context.completeWith();
10053
+ }
10054
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10055
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiSelectModalComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div class=\"content\">\n <header\n class=\"header\"\n cuiDialogHeader\n [heading]=\"heading\"\n (closed)=\"onCancel()\"\n ></header>\n <div class=\"wrapper\">\n <div class=\"left-block\">\n @if (leftData) {\n <ng-container\n [ngComponentOutlet]=\"leftData.component\"\n [ngComponentOutletInputs]=\"leftData.inputs\"\n />\n }\n </div>\n <div class=\"right-block\">\n @if (rightData) {\n <ng-container\n [ngComponentOutlet]=\"rightData.component\"\n [ngComponentOutletInputs]=\"rightData.inputs\"\n />\n }\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".header{padding-right:16px;padding-left:16px}.content{display:flex;flex-direction:column;height:calc(100vh - 180px)}.wrapper{display:flex;flex-direction:row;flex-grow:1;border-top:1px solid var(--cui-base-200);width:100%;min-height:400px;overflow-y:hidden}.left-block{padding-left:16px;padding-top:19px;flex-shrink:0;display:flex;flex-direction:column;gap:16px;width:50%;border-right:1px solid var(--cui-base-200)}.right-block{position:relative;width:50%;overflow:hidden}.right-block__head{padding:16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--cui-base-200)}.right-block__title{font-weight:500;font-size:14px;line-height:20px;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.right-block__subtitle{font-weight:400;font-size:14px;line-height:20px;margin-bottom:16px;text-transform:uppercase;color:var(--cui-base-500)}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "ngmodule", type: CuiDialogModule }, { kind: "component", type: CuiDialogHeaderComponent, selector: "header[cuiDialogHeader][heading]", inputs: ["heading", "headingContext", "subheading"], outputs: ["closed"] }, { kind: "ngmodule", type: CuiIconButtonModule }, { kind: "ngmodule", type: CuiInputModule }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10056
+ }
10057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalComponent, decorators: [{
10058
+ type: Component,
10059
+ args: [{ imports: [
10060
+ CuiButtonModule,
10061
+ CuiDialogModule,
10062
+ CuiIconButtonModule,
10063
+ CuiInputModule,
10064
+ NgComponentOutlet,
10065
+ TranslocoDirective
10066
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\n <div class=\"content\">\n <header\n class=\"header\"\n cuiDialogHeader\n [heading]=\"heading\"\n (closed)=\"onCancel()\"\n ></header>\n <div class=\"wrapper\">\n <div class=\"left-block\">\n @if (leftData) {\n <ng-container\n [ngComponentOutlet]=\"leftData.component\"\n [ngComponentOutletInputs]=\"leftData.inputs\"\n />\n }\n </div>\n <div class=\"right-block\">\n @if (rightData) {\n <ng-container\n [ngComponentOutlet]=\"rightData.component\"\n [ngComponentOutletInputs]=\"rightData.inputs\"\n />\n }\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".header{padding-right:16px;padding-left:16px}.content{display:flex;flex-direction:column;height:calc(100vh - 180px)}.wrapper{display:flex;flex-direction:row;flex-grow:1;border-top:1px solid var(--cui-base-200);width:100%;min-height:400px;overflow-y:hidden}.left-block{padding-left:16px;padding-top:19px;flex-shrink:0;display:flex;flex-direction:column;gap:16px;width:50%;border-right:1px solid var(--cui-base-200)}.right-block{position:relative;width:50%;overflow:hidden}.right-block__head{padding:16px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--cui-base-200)}.right-block__title{font-weight:500;font-size:14px;line-height:20px;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.right-block__subtitle{font-weight:400;font-size:14px;line-height:20px;margin-bottom:16px;text-transform:uppercase;color:var(--cui-base-500)}\n"] }]
10067
+ }] });
10068
+
10069
+ class CuiSelectModalService {
10070
+ constructor() {
10071
+ this.selectedElementSignal = signal(null);
10072
+ this.selectedElement = this.selectedElementSignal.asReadonly();
10073
+ }
10074
+ getSelectedData() {
10075
+ return this.selectedElementSignal.asReadonly();
10076
+ }
10077
+ set(element) {
10078
+ this.selectedElementSignal.set(element);
10079
+ }
10080
+ delete() {
10081
+ this.selectedElementSignal.set(null);
10082
+ }
10083
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
10084
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalService }); }
10085
+ }
10086
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiSelectModalService, decorators: [{
10087
+ type: Injectable
10088
+ }] });
10089
+
10090
+ const CUI_STORAGE_LIST_SERVICE_TOKEN = new InjectionToken('STORAGE_LIST_SERVICE_TOKEN');
10091
+
10092
+ class CuiStorageListItemComponent {
10093
+ constructor() {
10094
+ this.storageListService = inject(CUI_STORAGE_LIST_SERVICE_TOKEN);
10095
+ this.isLoadingChildren = false;
10096
+ this.isLoadingElements = false;
10097
+ this.storageChildren = signal([]);
10098
+ this.storageElements = signal([]);
10099
+ this.areContentOpened = signal(false);
10100
+ this.openCloseButtonIcon = computed(() => this.areContentOpened() ? 'cuiIconChevronDown' : 'cuiIconChevronRight');
10101
+ this.hasContent = computed(() => this.storage().children.length || this.storageChildren().length || this.storageElements().length);
10102
+ this.storage = input.required();
10103
+ this.elementSlot = input();
10104
+ this.itemSlot = input();
10105
+ this.initStorageChildrenEffect();
10106
+ this.initStorageElementsEffect();
10107
+ }
10108
+ onToggleChildren(event) {
10109
+ event.preventDefault();
10110
+ this.areContentOpened.update((prevAreChildrenOpened) => !prevAreChildrenOpened);
10111
+ }
10112
+ initStorageChildrenEffect() {
10113
+ effect(() => {
10114
+ const storage = this.storage();
10115
+ this.areContentOpened();
10116
+ untracked(this.setChildren.bind(this, storage));
10117
+ });
10118
+ }
10119
+ initStorageElementsEffect() {
10120
+ effect(() => {
10121
+ const storage = this.storage();
10122
+ untracked(this.setElements.bind(this, storage));
10123
+ });
10124
+ }
10125
+ setChildren(storage) {
10126
+ if (this.isLoadingChildren || !this.areContentOpened() || this.storageChildren().length) {
10127
+ return;
10128
+ }
10129
+ this.isLoadingChildren = true;
10130
+ this.storageListService
10131
+ .getChildren?.(storage, this.storageChildren())
10132
+ .pipe(finalize(() => (this.isLoadingChildren = false)))
10133
+ .subscribe((response) => this.storageChildren.set(response));
10134
+ }
10135
+ setElements(storage) {
10136
+ if (this.isLoadingElements || this.storageElements().length) {
10137
+ return;
10138
+ }
10139
+ this.isLoadingElements = true;
10140
+ this.storageListService
10141
+ .getElements?.(storage, this.storageElements())
10142
+ .pipe(finalize(() => (this.isLoadingElements = false)))
10143
+ .subscribe((response) => this.storageElements.set(response));
10144
+ }
10145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiStorageListItemComponent, isStandalone: true, selector: "li[cuiStorageListItem]", inputs: { storage: { classPropertyName: "storage", publicName: "storage", isSignal: true, isRequired: true, transformFunction: null }, elementSlot: { classPropertyName: "elementSlot", publicName: "elementSlot", isSignal: true, isRequired: false, transformFunction: null }, itemSlot: { classPropertyName: "itemSlot", publicName: "itemSlot", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-container *cuiLet=\"storage() as storage\">\n <div class=\"wrapper\">\n <ng-template #openCloseButton>\n @if (hasContent()) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n }\n </ng-template>\n\n @if (itemSlot(); as item) {\n <ng-container\n *ngTemplateOutlet=\"\n item;\n context: {\n $implicit: storage,\n openCloseButton,\n areContentOpened: areContentOpened(),\n hasContent: hasContent()\n }\n \"\n />\n }\n\n <div\n class=\"content\"\n [class.content_hidden]=\"!areContentOpened()\"\n >\n <div class=\"lists\">\n @if (storageChildren().length) {\n <cui-storage-list\n [storages]=\"storageChildren()\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n />\n }\n @if (storageElements().length && elementSlot()) {\n <ul class=\"list\">\n @for (element of storageElements(); track element.id) {\n <li class=\"item\">\n <ng-container\n *ngTemplateOutlet=\"\n elementSlot()!;\n context: { $implicit: element, storage: storage }\n \"\n />\n </li>\n }\n </ul>\n }\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".button{padding:2px;display:flex;border-radius:4px}@media (hover: hover){.button:hover{background:var(--cui-base-200)}}.button :active{background:var(--cui-base-200)}.icon{padding:2px}.wrapper{display:flex;flex-direction:column;gap:8px}.content{padding-left:20px}.content_hidden{display:none}.lists{display:flex;flex-direction:column;gap:8px;position:relative}.lists>*{z-index:1}.lists:has(>:nth-child(2)):before{content:\"\";position:absolute;top:0;bottom:0;left:8px;width:1px;background:var(--cui-base-200)}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => CuiLetDirective), selector: "[cuiLet]", inputs: ["cuiLet"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiSvgModule) }, { kind: "component", type: i0.forwardRef(() => CuiSvgComponent), selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }, { kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i0.forwardRef(() => CuiStorageListComponent), selector: "cui-storage-list", inputs: ["storages", "elementSlot", "itemSlot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10147
+ }
10148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListItemComponent, decorators: [{
10149
+ type: Component,
10150
+ args: [{ selector: 'li[cuiStorageListItem]', imports: [CuiLetDirective, CuiSvgModule, NgTemplateOutlet, forwardRef(() => CuiStorageListComponent)], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *cuiLet=\"storage() as storage\">\n <div class=\"wrapper\">\n <ng-template #openCloseButton>\n @if (hasContent()) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onToggleChildren($event)\"\n >\n <cui-svg\n [icon]=\"openCloseButtonIcon()\"\n color=\"var(--cui-base-500)\"\n />\n </button>\n }\n </ng-template>\n\n @if (itemSlot(); as item) {\n <ng-container\n *ngTemplateOutlet=\"\n item;\n context: {\n $implicit: storage,\n openCloseButton,\n areContentOpened: areContentOpened(),\n hasContent: hasContent()\n }\n \"\n />\n }\n\n <div\n class=\"content\"\n [class.content_hidden]=\"!areContentOpened()\"\n >\n <div class=\"lists\">\n @if (storageChildren().length) {\n <cui-storage-list\n [storages]=\"storageChildren()\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n />\n }\n @if (storageElements().length && elementSlot()) {\n <ul class=\"list\">\n @for (element of storageElements(); track element.id) {\n <li class=\"item\">\n <ng-container\n *ngTemplateOutlet=\"\n elementSlot()!;\n context: { $implicit: element, storage: storage }\n \"\n />\n </li>\n }\n </ul>\n }\n </div>\n </div>\n </div>\n</ng-container>\n", styles: [".button{padding:2px;display:flex;border-radius:4px}@media (hover: hover){.button:hover{background:var(--cui-base-200)}}.button :active{background:var(--cui-base-200)}.icon{padding:2px}.wrapper{display:flex;flex-direction:column;gap:8px}.content{padding-left:20px}.content_hidden{display:none}.lists{display:flex;flex-direction:column;gap:8px;position:relative}.lists>*{z-index:1}.lists:has(>:nth-child(2)):before{content:\"\";position:absolute;top:0;bottom:0;left:8px;width:1px;background:var(--cui-base-200)}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"] }]
10151
+ }], ctorParameters: () => [] });
10152
+
10153
+ class CuiStorageListComponent {
10154
+ constructor() {
10155
+ this.storages = input.required();
10156
+ this.elementSlot = input();
10157
+ this.itemSlot = input();
10158
+ }
10159
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10160
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiStorageListComponent, isStandalone: true, selector: "cui-storage-list", inputs: { storages: { classPropertyName: "storages", publicName: "storages", isSignal: true, isRequired: true, transformFunction: null }, elementSlot: { classPropertyName: "elementSlot", publicName: "elementSlot", isSignal: true, isRequired: false, transformFunction: null }, itemSlot: { classPropertyName: "itemSlot", publicName: "itemSlot", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ul class=\"list\">\n @for (storage of storages(); track storage.id) {\n <li\n cuiStorageListItem\n [storage]=\"storage\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n class=\"item\"\n ></li>\n }\n</ul>\n", styles: [":host{display:block}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative;z-index:0}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"], dependencies: [{ kind: "component", type: CuiStorageListItemComponent, selector: "li[cuiStorageListItem]", inputs: ["storage", "elementSlot", "itemSlot"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10161
+ }
10162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiStorageListComponent, decorators: [{
10163
+ type: Component,
10164
+ args: [{ selector: 'cui-storage-list', imports: [CuiStorageListItemComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"list\">\n @for (storage of storages(); track storage.id) {\n <li\n cuiStorageListItem\n [storage]=\"storage\"\n [elementSlot]=\"elementSlot()\"\n [itemSlot]=\"itemSlot()\"\n class=\"item\"\n ></li>\n }\n</ul>\n", styles: [":host{display:block}.list{display:flex;flex-direction:column;gap:8px}.item{position:relative;z-index:0}.item:not(:last-child):before{content:\"\";position:absolute;top:0;left:8px;bottom:-8px;z-index:-1;width:1px;background:var(--cui-base-200)}\n"] }]
10165
+ }] });
10166
+
9996
10167
  /**
9997
10168
  * Generated bundle index. Do not edit.
9998
10169
  */
9999
10170
 
10000
- 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_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, CuiSelectModule, CuiSelectedCategoryService, CuiSidebarContainerComponent, CuiSidebarHeaderComponent, CuiSidebarNavigationComponent, CuiSidebarNavigationContainerComponent, CuiSidebarNavigationItemComponent, CuiSidebarService, 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 };
10001
10172
  //# sourceMappingURL=cuby-ui-core.mjs.map