@koobiq/components 18.17.0 → 18.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actions-panel/actions-panel-config.d.ts +79 -0
- package/actions-panel/actions-panel-container.d.ts +90 -0
- package/actions-panel/actions-panel-container.scss +33 -0
- package/actions-panel/actions-panel-ref.d.ts +31 -0
- package/actions-panel/actions-panel-tokens.scss +13 -0
- package/actions-panel/actions-panel.d.ts +144 -0
- package/actions-panel/index.d.ts +5 -0
- package/actions-panel/module.d.ts +7 -0
- package/core/animation/animation.d.ts +26 -0
- package/core/form-field/form-field-ref.d.ts +4 -0
- package/core/locales/en-US.d.ts +45 -0
- package/core/locales/es-LA.d.ts +45 -0
- package/core/locales/fa-IR.d.ts +45 -0
- package/core/locales/locale-service.d.ts +315 -0
- package/core/locales/pt-BR.d.ts +45 -0
- package/core/locales/ru-RU.d.ts +45 -0
- package/core/locales/tk-TM.d.ts +45 -0
- package/core/locales/types.d.ts +6 -0
- package/core/locales/zh-CN.d.ts +45 -0
- package/core/option/option.d.ts +3 -1
- package/datepicker/calendar.component.d.ts +9 -0
- package/datepicker/datepicker-input.directive.d.ts +5 -1
- package/dl/dl.component.d.ts +3 -4
- package/dropdown/_dropdown-theme.scss +9 -10
- package/dropdown/dropdown-tokens.scss +1 -0
- package/dropdown/dropdown.component.d.ts +1 -1
- package/dropdown/dropdown.scss +5 -0
- package/dropdown/dropdown.types.d.ts +3 -1
- package/esm2022/accordion/accordion-trigger.component.mjs +1 -1
- package/esm2022/actions-panel/actions-panel-config.mjs +55 -0
- package/esm2022/actions-panel/actions-panel-container.mjs +217 -0
- package/esm2022/actions-panel/actions-panel-ref.mjs +62 -0
- package/esm2022/actions-panel/actions-panel.mjs +220 -0
- package/esm2022/actions-panel/index.mjs +6 -0
- package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +5 -0
- package/esm2022/actions-panel/module.mjs +21 -0
- package/esm2022/breadcrumbs/breadcrumbs.mjs +2 -2
- package/esm2022/code-block/code-block.mjs +1 -1
- package/esm2022/core/animation/animation.mjs +29 -1
- package/esm2022/core/common-behaviors/common-module.mjs +2 -2
- package/esm2022/core/form-field/form-field-ref.mjs +1 -1
- package/esm2022/core/locales/en-US.mjs +46 -1
- package/esm2022/core/locales/es-LA.mjs +46 -1
- package/esm2022/core/locales/fa-IR.mjs +46 -1
- package/esm2022/core/locales/pt-BR.mjs +46 -1
- package/esm2022/core/locales/ru-RU.mjs +46 -1
- package/esm2022/core/locales/tk-TM.mjs +46 -1
- package/esm2022/core/locales/types.mjs +1 -1
- package/esm2022/core/locales/zh-CN.mjs +46 -1
- package/esm2022/core/option/option.mjs +10 -3
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/datepicker/calendar-header.component.mjs +1 -1
- package/esm2022/datepicker/calendar.component.mjs +20 -2
- package/esm2022/datepicker/datepicker-input.directive.mjs +22 -11
- package/esm2022/datepicker/datepicker-toggle.component.mjs +1 -1
- package/esm2022/dl/dl.component.mjs +8 -7
- package/esm2022/dropdown/dropdown-item.component.mjs +1 -1
- package/esm2022/dropdown/dropdown-trigger.directive.mjs +6 -1
- package/esm2022/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/dropdown/dropdown.types.mjs +1 -1
- package/esm2022/file-upload/multiple-file-upload.component.mjs +1 -1
- package/esm2022/file-upload/single-file-upload.component.mjs +1 -1
- package/esm2022/filter-bar/filter-bar-button.mjs +30 -0
- package/esm2022/filter-bar/filter-bar.mjs +168 -0
- package/esm2022/filter-bar/filter-bar.module.mjs +65 -0
- package/esm2022/filter-bar/filter-bar.types.mjs +13 -0
- package/esm2022/filter-bar/filter-refresher.mjs +34 -0
- package/esm2022/filter-bar/filter-reset.mjs +38 -0
- package/esm2022/filter-bar/filter-search.mjs +132 -0
- package/esm2022/filter-bar/filters.mjs +225 -0
- package/esm2022/filter-bar/index.mjs +2 -0
- package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +5 -0
- package/esm2022/filter-bar/pipe-add.mjs +129 -0
- package/esm2022/filter-bar/pipe.directive.mjs +55 -0
- package/esm2022/filter-bar/pipes/base-pipe.mjs +106 -0
- package/esm2022/filter-bar/pipes/pipe-button.mjs +59 -0
- package/esm2022/filter-bar/pipes/pipe-date.mjs +171 -0
- package/esm2022/filter-bar/pipes/pipe-datetime.mjs +172 -0
- package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +96 -0
- package/esm2022/filter-bar/pipes/pipe-select.mjs +88 -0
- package/esm2022/filter-bar/pipes/pipe-state.mjs +45 -0
- package/esm2022/filter-bar/pipes/pipe-text.mjs +89 -0
- package/esm2022/filter-bar/pipes/pipe-title.mjs +96 -0
- package/esm2022/filter-bar/public-api.mjs +20 -0
- package/esm2022/form-field/cleaner.mjs +1 -1
- package/esm2022/form-field/form-field.mjs +13 -6
- package/esm2022/form-field/password-hint.mjs +1 -1
- package/esm2022/form-field/password-toggle.mjs +1 -1
- package/esm2022/form-field/stepper.mjs +1 -1
- package/esm2022/icon/icon-button.component.mjs +9 -9
- package/esm2022/icon/icon-item.component.mjs +10 -10
- package/esm2022/icon/icon.component.mjs +9 -12
- package/esm2022/list/list-selection.component.mjs +4 -4
- package/esm2022/modal/modal.component.mjs +1 -1
- package/esm2022/modal/modal.directive.mjs +1 -1
- package/esm2022/navbar/navbar-item.component.mjs +2 -2
- package/esm2022/overflow-items/overflow-items.mjs +151 -195
- package/esm2022/popover/popover.component.mjs +30 -10
- package/esm2022/select/select.component.mjs +3 -3
- package/esm2022/sidepanel/sidepanel-directives.mjs +2 -2
- package/esm2022/tabs/tab-header.component.mjs +1 -1
- package/esm2022/tabs/tab-nav-bar.mjs +2 -2
- package/esm2022/textarea/textarea.component.mjs +9 -5
- package/esm2022/timezone/timezone-select.component.mjs +2 -2
- package/esm2022/title/title.directive.mjs +12 -5
- package/esm2022/toast/toast.component.mjs +2 -2
- package/esm2022/tree/toggle.mjs +1 -1
- package/esm2022/tree/tree-option.component.mjs +3 -2
- package/esm2022/tree/tree-selection.component.mjs +4 -2
- package/esm2022/tree-select/tree-select.component.mjs +6 -4
- package/fesm2022/koobiq-components-accordion.mjs +1 -1
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +567 -0
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -0
- package/fesm2022/koobiq-components-breadcrumbs.mjs +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +1 -1
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +355 -5
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +40 -12
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-dl.mjs +7 -6
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +9 -4
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +2 -2
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +1596 -0
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -0
- package/fesm2022/koobiq-components-form-field.mjs +16 -9
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +23 -26
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +3 -3
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +2 -2
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +2 -2
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +152 -196
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +29 -9
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +2 -2
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +2 -2
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +8 -4
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -2
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +11 -4
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +1 -1
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +5 -3
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +6 -3
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/filter-bar/_filter-bar-theme.scss +61 -0
- package/filter-bar/filter-bar-button.d.ts +8 -0
- package/filter-bar/filter-bar.d.ts +55 -0
- package/filter-bar/filter-bar.module.d.ts +17 -0
- package/filter-bar/filter-bar.scss +60 -0
- package/filter-bar/filter-bar.types.d.ts +97 -0
- package/filter-bar/filter-refresher.d.ts +5 -0
- package/filter-bar/filter-refresher.scss +6 -0
- package/filter-bar/filter-reset.d.ts +11 -0
- package/filter-bar/filter-search.d.ts +25 -0
- package/filter-bar/filter-search.scss +14 -0
- package/filter-bar/filters.d.ts +72 -0
- package/filter-bar/filters.scss +92 -0
- package/filter-bar/index.d.ts +1 -0
- package/filter-bar/pipe-add.d.ts +18 -0
- package/filter-bar/pipe-add.scss +5 -0
- package/filter-bar/pipe.directive.d.ts +13 -0
- package/filter-bar/pipes/base-pipe.d.ts +40 -0
- package/filter-bar/pipes/base-pipe.scss +117 -0
- package/filter-bar/pipes/pipe-button.d.ts +13 -0
- package/filter-bar/pipes/pipe-button.scss +5 -0
- package/filter-bar/pipes/pipe-date.d.ts +41 -0
- package/filter-bar/pipes/pipe-date.scss +132 -0
- package/filter-bar/pipes/pipe-datetime.d.ts +41 -0
- package/filter-bar/pipes/pipe-multi-select.d.ts +22 -0
- package/filter-bar/pipes/pipe-multiselect.scss +15 -0
- package/filter-bar/pipes/pipe-select.d.ts +21 -0
- package/filter-bar/pipes/pipe-select.scss +3 -0
- package/filter-bar/pipes/pipe-state.d.ts +14 -0
- package/filter-bar/pipes/pipe-text.d.ts +19 -0
- package/filter-bar/pipes/pipe-title.d.ts +25 -0
- package/filter-bar/public-api.d.ts +19 -0
- package/form-field/form-field.d.ts +6 -1
- package/form-field/form-field.scss +1 -0
- package/icon/icon-button.component.d.ts +5 -3
- package/icon/icon-item.component.d.ts +5 -3
- package/icon/icon.component.d.ts +5 -4
- package/overflow-items/overflow-items.d.ts +68 -82
- package/package.json +18 -6
- package/popover/popover.component.d.ts +6 -1
- package/schematics/ng-add/index.js +5 -5
- package/select/_select-theme.scss +9 -1
- package/textarea/textarea.component.d.ts +2 -1
- package/title/title.directive.d.ts +2 -0
- package/tree-select/_tree-select-theme.scss +9 -1
- package/tree-select/tree-select.component.d.ts +1 -1
|
@@ -1,73 +1,106 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject,
|
|
3
|
-
import { ContentObserver } from '@angular/cdk/observers';
|
|
2
|
+
import { inject, Renderer2, ElementRef, signal, Directive, input, contentChildren, contentChild, booleanAttribute, numberAttribute, output, NgModule } from '@angular/core';
|
|
4
3
|
import { SharedResizeObserver } from '@angular/cdk/observers/private';
|
|
5
|
-
import {
|
|
6
|
-
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
|
-
import {
|
|
4
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
|
+
import { toSignal, outputToObservable, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { merge, skip, debounceTime } from 'rxjs';
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
|
-
*
|
|
9
|
+
* Manages the visibility of the element.
|
|
11
10
|
*
|
|
12
|
-
* @
|
|
11
|
+
* @docs-private
|
|
13
12
|
*/
|
|
14
|
-
class
|
|
13
|
+
class ElementVisibilityManager {
|
|
15
14
|
constructor() {
|
|
15
|
+
this.renderer = inject(Renderer2);
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Reference to the element.
|
|
18
18
|
*
|
|
19
19
|
* @docs-private
|
|
20
20
|
*/
|
|
21
|
-
this.
|
|
21
|
+
this.elementRef = inject(ElementRef);
|
|
22
|
+
/**
|
|
23
|
+
* Whether the element is hidden.
|
|
24
|
+
*
|
|
25
|
+
* @docs-private
|
|
26
|
+
*/
|
|
27
|
+
this.hidden = signal(false);
|
|
22
28
|
}
|
|
23
|
-
/**
|
|
24
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Hides the element.
|
|
31
|
+
*
|
|
32
|
+
* @docs-private
|
|
33
|
+
*/
|
|
34
|
+
hide() {
|
|
35
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'visibility', 'hidden');
|
|
36
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');
|
|
37
|
+
this.hidden.set(true);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Shows the element.
|
|
41
|
+
*
|
|
42
|
+
* @docs-private
|
|
43
|
+
*/
|
|
44
|
+
show() {
|
|
45
|
+
this.renderer.removeStyle(this.elementRef.nativeElement, 'visibility');
|
|
46
|
+
this.renderer.removeStyle(this.elementRef.nativeElement, 'position');
|
|
47
|
+
this.hidden.set(false);
|
|
48
|
+
}
|
|
49
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ElementVisibilityManager, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
50
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: ElementVisibilityManager, host: { properties: { "attr.aria-hidden": "hidden()" } }, ngImport: i0 }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ElementVisibilityManager, decorators: [{
|
|
53
|
+
type: Directive,
|
|
54
|
+
args: [{
|
|
55
|
+
host: {
|
|
56
|
+
'[attr.aria-hidden]': 'hidden()'
|
|
57
|
+
}
|
|
58
|
+
}]
|
|
59
|
+
}] });
|
|
60
|
+
/**
|
|
61
|
+
* Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.
|
|
62
|
+
*/
|
|
63
|
+
class KbqOverflowItemsResult extends ElementVisibilityManager {
|
|
64
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItemsResult, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
65
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: KbqOverflowItemsResult, isStandalone: true, selector: "[kbqOverflowItemsResult]", host: { classAttribute: "kbq-overflow-items-result" }, exportAs: ["kbqOverflowItemsResult"], usesInheritance: true, ngImport: i0 }); }
|
|
25
66
|
}
|
|
26
67
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItemsResult, decorators: [{
|
|
27
68
|
type: Directive,
|
|
28
69
|
args: [{
|
|
29
70
|
standalone: true,
|
|
30
|
-
selector: '
|
|
71
|
+
selector: '[kbqOverflowItemsResult]',
|
|
72
|
+
exportAs: 'kbqOverflowItemsResult',
|
|
73
|
+
host: { class: 'kbq-overflow-items-result' }
|
|
31
74
|
}]
|
|
32
75
|
}] });
|
|
33
76
|
/**
|
|
34
|
-
*
|
|
77
|
+
* Directive for the item that can be hidden by the `KbqOverflowItems` directive.
|
|
35
78
|
*/
|
|
36
|
-
class KbqOverflowItem {
|
|
79
|
+
class KbqOverflowItem extends ElementVisibilityManager {
|
|
37
80
|
constructor() {
|
|
81
|
+
super(...arguments);
|
|
38
82
|
/**
|
|
39
|
-
*
|
|
83
|
+
* Unique identifier for the item.
|
|
40
84
|
*/
|
|
41
85
|
this.id = input.required({ alias: 'kbqOverflowItem' });
|
|
42
|
-
/**
|
|
43
|
-
* Whether the item is hidden.
|
|
44
|
-
*
|
|
45
|
-
* @docs-private
|
|
46
|
-
*/
|
|
47
|
-
this.hidden = signal(false);
|
|
48
|
-
/**
|
|
49
|
-
* TemplateRef for the item.
|
|
50
|
-
*
|
|
51
|
-
* @docs-private
|
|
52
|
-
*/
|
|
53
|
-
this.templateRef = inject(TemplateRef);
|
|
54
86
|
}
|
|
55
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItem, deps:
|
|
56
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: KbqOverflowItem, isStandalone: true, selector: "[kbqOverflowItem]", inputs: { id: { classPropertyName: "id", publicName: "kbqOverflowItem", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
|
|
87
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItem, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
88
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: KbqOverflowItem, isStandalone: true, selector: "[kbqOverflowItem]", inputs: { id: { classPropertyName: "id", publicName: "kbqOverflowItem", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "kbq-overflow-item" }, exportAs: ["kbqOverflowItem"], usesInheritance: true, ngImport: i0 }); }
|
|
57
89
|
}
|
|
58
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItem, decorators: [{
|
|
59
91
|
type: Directive,
|
|
60
92
|
args: [{
|
|
61
93
|
standalone: true,
|
|
62
|
-
selector: '[kbqOverflowItem]'
|
|
94
|
+
selector: '[kbqOverflowItem]',
|
|
95
|
+
exportAs: 'kbqOverflowItem',
|
|
96
|
+
host: { class: 'kbq-overflow-item' }
|
|
63
97
|
}]
|
|
64
98
|
}] });
|
|
65
99
|
/**
|
|
66
|
-
*
|
|
100
|
+
* Directive for managing the visibility of items that overflow the container.
|
|
67
101
|
*/
|
|
68
102
|
class KbqOverflowItems {
|
|
69
103
|
constructor() {
|
|
70
|
-
this.itemElementRefs = viewChildren('itemRef', { read: ElementRef });
|
|
71
104
|
/**
|
|
72
105
|
* `KbqOverflowItem` directive references.
|
|
73
106
|
*
|
|
@@ -80,192 +113,115 @@ class KbqOverflowItems {
|
|
|
80
113
|
* @docs-private
|
|
81
114
|
*/
|
|
82
115
|
this.result = contentChild(KbqOverflowItemsResult);
|
|
83
|
-
this.resultElementRef = viewChild('resultRef', { read: ElementRef });
|
|
84
116
|
/**
|
|
85
|
-
*
|
|
117
|
+
* Whether the overflow order should be reversed.
|
|
86
118
|
*
|
|
87
|
-
* @
|
|
119
|
+
* @default false
|
|
88
120
|
*/
|
|
89
|
-
this.
|
|
90
|
-
const hiddenItemIDs = new Set(this.items()
|
|
91
|
-
.filter(({ hidden }) => hidden())
|
|
92
|
-
.map(({ id }) => id()));
|
|
93
|
-
return {
|
|
94
|
-
$implicit: hiddenItemIDs,
|
|
95
|
-
hiddenItemIDs: hiddenItemIDs
|
|
96
|
-
};
|
|
97
|
-
});
|
|
121
|
+
this.reverseOverflowOrder = input(false, { transform: booleanAttribute });
|
|
98
122
|
/**
|
|
99
|
-
*
|
|
123
|
+
* Debounce time for recalculating items visibility.
|
|
100
124
|
*
|
|
101
|
-
* @
|
|
125
|
+
* @default 100
|
|
102
126
|
*/
|
|
103
|
-
this.
|
|
127
|
+
this.debounceTime = input(100, { transform: numberAttribute });
|
|
104
128
|
/**
|
|
105
|
-
*
|
|
106
|
-
* Also changes the position of the `resultTemplateRef`.
|
|
107
|
-
*
|
|
108
|
-
* @default false
|
|
129
|
+
* Emits when the set of hidden items changes.
|
|
109
130
|
*/
|
|
110
|
-
this.
|
|
131
|
+
this.changes = output();
|
|
132
|
+
/**
|
|
133
|
+
* Set of hidden item IDs.
|
|
134
|
+
*/
|
|
135
|
+
this.hiddenItemIDs = toSignal(outputToObservable(this.changes), {
|
|
136
|
+
initialValue: new Set([])
|
|
137
|
+
});
|
|
111
138
|
this.elementRef = inject(ElementRef);
|
|
112
139
|
this.resizeObserver = inject(SharedResizeObserver);
|
|
113
|
-
this.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
|
|
140
|
+
this.renderer = inject(Renderer2);
|
|
141
|
+
this.document = inject(DOCUMENT);
|
|
142
|
+
/**
|
|
143
|
+
* Determines if the given item is hidden.
|
|
144
|
+
*/
|
|
145
|
+
this.isHiddenItem = ({ hidden }) => hidden();
|
|
146
|
+
this.setStyles();
|
|
147
|
+
merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), this.resizeObserver.observe(this.elementRef.nativeElement))
|
|
148
|
+
.pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())
|
|
121
149
|
.subscribe(() => {
|
|
122
|
-
this.
|
|
150
|
+
const hiddenItems = this.calculateItemsVisibility(this.items(), this.reverseOverflowOrder(), this.result(), this.elementRef.nativeElement);
|
|
151
|
+
const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));
|
|
152
|
+
this.changes.emit(hiddenItemIDs);
|
|
123
153
|
});
|
|
124
154
|
}
|
|
125
155
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* This method calculates whether items should be hidden or shown by comparing the scroll width of the container
|
|
129
|
-
* with its visible width. It determines which items are visible and which are hidden, and applies the hiding logic
|
|
130
|
-
* based on the `reverseOverflowOrder` flag.
|
|
131
|
-
*
|
|
132
|
-
* The function operates recursively to adjust the visibility of items until the overflow condition is resolved.
|
|
133
|
-
*
|
|
134
|
-
* - If the container is overflown, it hides the last visible item from the end (or start if `reverseOverflowOrder`)
|
|
135
|
-
* and checks if further adjustments are needed.
|
|
136
|
-
* - If the container is not overflown, it reveals the first hidden item from the start
|
|
137
|
-
* (or end if `reverseOverflowOrder`), ensuring it fits within the visible area.
|
|
156
|
+
* Calculates the visibility of items, based on the container width and `reverseOverflowOrder` property.
|
|
138
157
|
*/
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
hidden,
|
|
144
|
-
isFirst: index === 0,
|
|
145
|
-
isLast: index === _items.length - 1,
|
|
146
|
-
elementRef: itemElementRefs[index]
|
|
147
|
-
};
|
|
158
|
+
calculateItemsVisibility(items, reverseOverflowOrder, result, { offsetWidth: totalWidth }) {
|
|
159
|
+
result?.hide();
|
|
160
|
+
items.forEach((item) => {
|
|
161
|
+
item.show();
|
|
148
162
|
});
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
this.updateItemsVisibility();
|
|
162
|
-
}
|
|
163
|
+
let itemsWidth = items.reduce((width, { elementRef }) => width + this.getElementWidthWithMargins(elementRef), 0);
|
|
164
|
+
const startIndex = reverseOverflowOrder ? 0 : items.length - 1;
|
|
165
|
+
const endIndex = reverseOverflowOrder ? items.length : -1;
|
|
166
|
+
const step = reverseOverflowOrder ? 1 : -1;
|
|
167
|
+
const resultWidth = result ? this.getElementWidthWithMargins(result.elementRef) : 0;
|
|
168
|
+
for (let index = startIndex; index !== endIndex; index += step) {
|
|
169
|
+
const current = items[index];
|
|
170
|
+
const currentWidth = this.getElementWidthWithMargins(current.elementRef);
|
|
171
|
+
const _resultWidth = items.some(this.isHiddenItem) ? resultWidth : 0;
|
|
172
|
+
if (itemsWidth + _resultWidth > totalWidth) {
|
|
173
|
+
current.hide();
|
|
174
|
+
itemsWidth -= currentWidth;
|
|
163
175
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if (firstHiddenItem) {
|
|
171
|
-
const firstHiddenItemWidth = firstHiddenItem.elementRef.nativeElement.offsetWidth;
|
|
172
|
-
const visibleItemsTotalWidth = items
|
|
173
|
-
.filter(({ hidden }) => !hidden())
|
|
174
|
-
.reduce((width, { elementRef }) => width + elementRef.nativeElement.offsetWidth, 0);
|
|
175
|
-
const _isEdgeItem = isEdgeItem(firstHiddenItem);
|
|
176
|
-
const resultWidth = _isEdgeItem ? 0 : this.resultElementRef()?.nativeElement.offsetWidth || 0;
|
|
177
|
-
if (firstHiddenItemWidth + visibleItemsTotalWidth + resultWidth <= totalWidth) {
|
|
178
|
-
firstHiddenItem.hidden.set(false);
|
|
179
|
-
if (!_isEdgeItem) {
|
|
180
|
-
this.updateItemsVisibility();
|
|
181
|
-
}
|
|
176
|
+
else {
|
|
177
|
+
const isEdgeElement = reverseOverflowOrder ? index === 0 : index === items.length - 1;
|
|
178
|
+
const _resultWidth = isEdgeElement ? 0 : resultWidth;
|
|
179
|
+
if (itemsWidth + currentWidth + _resultWidth <= totalWidth) {
|
|
180
|
+
current.show();
|
|
181
|
+
itemsWidth += currentWidth;
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
for (let i = array.length - 1; i >= 0; i--) {
|
|
189
|
-
if (predicate(array[i], i, array)) {
|
|
190
|
-
return array[i];
|
|
191
|
-
}
|
|
185
|
+
const hiddenItems = items.filter(this.isHiddenItem);
|
|
186
|
+
if (hiddenItems.length > 0) {
|
|
187
|
+
result?.show();
|
|
192
188
|
}
|
|
193
|
-
return
|
|
189
|
+
return hiddenItems;
|
|
194
190
|
}
|
|
195
|
-
/**
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
[attr.aria-hidden]="resultHidden()"
|
|
221
|
-
[class.kbq-overflow-items__result_hidden]="resultHidden()"
|
|
222
|
-
>
|
|
223
|
-
<ng-container
|
|
224
|
-
[ngTemplateOutlet]="result()?.templateRef || null"
|
|
225
|
-
[ngTemplateOutletContext]="resultTemplateContext()"
|
|
226
|
-
/>
|
|
227
|
-
</div>
|
|
228
|
-
</ng-template>
|
|
229
|
-
`, isInline: true, styles: [":host{position:relative;display:flex;flex-grow:1;overflow:hidden;flex-wrap:nowrap;white-space:nowrap}.kbq-overflow-items__item,.kbq-overflow-items__result{display:flex;align-items:center}.kbq-overflow-items__item.kbq-overflow-items__item_hidden,.kbq-overflow-items__item.kbq-overflow-items__result_hidden,.kbq-overflow-items__result.kbq-overflow-items__item_hidden,.kbq-overflow-items__result.kbq-overflow-items__result_hidden{visibility:hidden;position:absolute}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
191
|
+
/**
|
|
192
|
+
* Returns the width of the element including margins.
|
|
193
|
+
*/
|
|
194
|
+
getElementWidthWithMargins({ nativeElement }) {
|
|
195
|
+
const { marginLeft, marginRight } = this.getWindow().getComputedStyle(nativeElement);
|
|
196
|
+
return Math.ceil(parseFloat(marginLeft) + nativeElement.offsetWidth + parseFloat(marginRight));
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* This method sets the necessary styles for the directive.
|
|
200
|
+
*/
|
|
201
|
+
setStyles() {
|
|
202
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');
|
|
203
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'flex');
|
|
204
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'flex-wrap', 'nowrap');
|
|
205
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'flex-grow', '1');
|
|
206
|
+
this.renderer.setStyle(this.elementRef.nativeElement, 'overflow', 'hidden');
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Returns the window object.
|
|
210
|
+
*/
|
|
211
|
+
getWindow() {
|
|
212
|
+
return this.document.defaultView || window;
|
|
213
|
+
}
|
|
214
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItems, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
215
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.6", type: KbqOverflowItems, isStandalone: true, selector: "[kbqOverflowItems]", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changes: "changes" }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], exportAs: ["kbqOverflowItems"], ngImport: i0 }); }
|
|
230
216
|
}
|
|
231
217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItems, decorators: [{
|
|
232
|
-
type:
|
|
233
|
-
args: [{
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
<div
|
|
240
|
-
class="kbq-overflow-items__item"
|
|
241
|
-
#itemRef
|
|
242
|
-
[attr.aria-hidden]="item.hidden()"
|
|
243
|
-
[class.kbq-overflow-items__item_hidden]="item.hidden()"
|
|
244
|
-
>
|
|
245
|
-
<ng-container [ngTemplateOutlet]="item.templateRef" />
|
|
246
|
-
</div>
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
@if (!reverseOverflowOrder()) {
|
|
250
|
-
<ng-container [ngTemplateOutlet]="template" />
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
<ng-template #template>
|
|
254
|
-
<div
|
|
255
|
-
class="kbq-overflow-items__result"
|
|
256
|
-
#resultRef
|
|
257
|
-
[attr.aria-hidden]="resultHidden()"
|
|
258
|
-
[class.kbq-overflow-items__result_hidden]="resultHidden()"
|
|
259
|
-
>
|
|
260
|
-
<ng-container
|
|
261
|
-
[ngTemplateOutlet]="result()?.templateRef || null"
|
|
262
|
-
[ngTemplateOutletContext]="resultTemplateContext()"
|
|
263
|
-
/>
|
|
264
|
-
</div>
|
|
265
|
-
</ng-template>
|
|
266
|
-
`, host: {
|
|
267
|
-
class: 'kbq-overflow-items'
|
|
268
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:relative;display:flex;flex-grow:1;overflow:hidden;flex-wrap:nowrap;white-space:nowrap}.kbq-overflow-items__item,.kbq-overflow-items__result{display:flex;align-items:center}.kbq-overflow-items__item.kbq-overflow-items__item_hidden,.kbq-overflow-items__item.kbq-overflow-items__result_hidden,.kbq-overflow-items__result.kbq-overflow-items__item_hidden,.kbq-overflow-items__result.kbq-overflow-items__result_hidden{visibility:hidden;position:absolute}\n"] }]
|
|
218
|
+
type: Directive,
|
|
219
|
+
args: [{
|
|
220
|
+
standalone: true,
|
|
221
|
+
selector: '[kbqOverflowItems]',
|
|
222
|
+
exportAs: 'kbqOverflowItems',
|
|
223
|
+
host: { class: 'kbq-overflow-items' }
|
|
224
|
+
}]
|
|
269
225
|
}], ctorParameters: () => [] });
|
|
270
226
|
|
|
271
227
|
const COMPONENTS = [
|
|
@@ -294,5 +250,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
|
|
|
294
250
|
* Generated bundle index. Do not edit.
|
|
295
251
|
*/
|
|
296
252
|
|
|
297
|
-
export { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsModule, KbqOverflowItemsResult };
|
|
253
|
+
export { ElementVisibilityManager, KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsModule, KbqOverflowItemsResult };
|
|
298
254
|
//# sourceMappingURL=koobiq-components-overflow-items.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { ContentObserver } from '@angular/cdk/observers';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n signal,\n TemplateRef,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, merge, skip } from 'rxjs';\n\n/**\n * Template context for the `KbqOverflowItemsResult` directive.\n *\n * @see `KbqOverflowItemsResult`\n */\nexport type KbqOverflowItemsResultContext = {\n /**\n * Set of hidden item ID's.\n *\n * Example:\n *\n * ```html\n * <ng-template kbqOverflowItemsResult let-hiddenItemIDs>\n * {{ hiddenItemIDs.size }}\n * </ng-template>\n * ````\n */\n $implicit: ReadonlySet<unknown>;\n /**\n * Set of hidden item ID's.\n *\n * Example:\n *\n * ```html\n * <ng-template kbqOverflowItemsResult let-hiddenItemIDs=\"hiddenItemIDs\">\n * @if (hiddenItemIDs.has(SOME_ID)) {...}\n * </ng-template>\n * ````\n */\n hiddenItemIDs: ReadonlySet<unknown>;\n};\n\n/**\n * Directive for providing `KbqOverflowItemsResultContext` to the `KbqOverflowItems` component.\n *\n * @see `KbqOverflowItemsResultContext`\n */\n@Directive({\n standalone: true,\n selector: 'ng-template[kbqOverflowItemsResult]'\n})\nexport class KbqOverflowItemsResult {\n /**\n * TemplateRef for the overflow result.\n *\n * @docs-private\n */\n readonly templateRef = inject<TemplateRef<KbqOverflowItemsResultContext>>(TemplateRef);\n}\n\n/**\n * Structure directive for providing items to the `KbqOverflowItems`.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItem]'\n})\nexport class KbqOverflowItem {\n /**\n * Identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n\n /**\n * Whether the item is hidden.\n *\n * @docs-private\n */\n readonly hidden = signal<boolean>(false);\n\n /**\n * TemplateRef for the item.\n *\n * @docs-private\n */\n readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * Component for automatically hiding elements with dynamic adaptation to the container width.\n */\n@Component({\n standalone: true,\n selector: 'kbq-overflow-items',\n imports: [NgTemplateOutlet],\n template: `\n @if (reverseOverflowOrder()) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n }\n\n @for (item of items(); track item.id()) {\n <div\n class=\"kbq-overflow-items__item\"\n #itemRef\n [attr.aria-hidden]=\"item.hidden()\"\n [class.kbq-overflow-items__item_hidden]=\"item.hidden()\"\n >\n <ng-container [ngTemplateOutlet]=\"item.templateRef\" />\n </div>\n }\n\n @if (!reverseOverflowOrder()) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n }\n\n <ng-template #template>\n <div\n class=\"kbq-overflow-items__result\"\n #resultRef\n [attr.aria-hidden]=\"resultHidden()\"\n [class.kbq-overflow-items__result_hidden]=\"resultHidden()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"result()?.templateRef || null\"\n [ngTemplateOutletContext]=\"resultTemplateContext()\"\n />\n </div>\n </ng-template>\n `,\n styleUrl: './overflow-items.scss',\n host: {\n class: 'kbq-overflow-items'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqOverflowItems {\n private readonly itemElementRefs = viewChildren<string, ElementRef<HTMLElement>>('itemRef', { read: ElementRef });\n\n /**\n * `KbqOverflowItem` directive references.\n *\n * @docs-private\n */\n protected readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n *\n * @docs-private\n */\n protected readonly result = contentChild(KbqOverflowItemsResult);\n\n private readonly resultElementRef = viewChild<string, ElementRef<HTMLElement>>('resultRef', { read: ElementRef });\n\n /**\n * Template context for the `KbqOverflowItemsResult` directive.\n *\n * @docs-private\n */\n protected readonly resultTemplateContext = computed<KbqOverflowItemsResultContext>(() => {\n const hiddenItemIDs = new Set(\n this.items()\n .filter(({ hidden }) => hidden())\n .map(({ id }) => id())\n );\n return {\n $implicit: hiddenItemIDs,\n hiddenItemIDs: hiddenItemIDs\n };\n });\n\n /**\n * Whether the overflow result is hidden.\n *\n * @docs-private\n */\n protected readonly resultHidden = computed(() => !this.items().some(({ hidden }) => hidden()));\n\n /**\n * Whether the overflow order should be reversed.\n * Also changes the position of the `resultTemplateRef`.\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly contentObserver = inject(ContentObserver);\n\n constructor() {\n toObservable(this.reverseOverflowOrder)\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe(() => {\n this.items().forEach(({ hidden }) => hidden.set(false));\n });\n\n merge(\n toObservable(this.items),\n this.resizeObserver.observe(this.elementRef.nativeElement),\n this.contentObserver.observe(this.elementRef.nativeElement).pipe(debounceTime(0))\n )\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this.updateItemsVisibility();\n });\n }\n\n /**\n * Updates the visibility of items based on the container width.\n *\n * This method calculates whether items should be hidden or shown by comparing the scroll width of the container\n * with its visible width. It determines which items are visible and which are hidden, and applies the hiding logic\n * based on the `reverseOverflowOrder` flag.\n *\n * The function operates recursively to adjust the visibility of items until the overflow condition is resolved.\n *\n * - If the container is overflown, it hides the last visible item from the end (or start if `reverseOverflowOrder`)\n * and checks if further adjustments are needed.\n * - If the container is not overflown, it reveals the first hidden item from the start\n * (or end if `reverseOverflowOrder`), ensuring it fits within the visible area.\n */\n private updateItemsVisibility(): void {\n const itemElementRefs = this.itemElementRefs();\n const items = this.items().map(({ hidden }, index, _items) => {\n return {\n hidden,\n isFirst: index === 0,\n isLast: index === _items.length - 1,\n elementRef: itemElementRefs[index]\n };\n });\n const reverseOverflowOrder = this.reverseOverflowOrder();\n const isEdgeItem = ({ isFirst, isLast }: (typeof items)[number]) => (reverseOverflowOrder ? isFirst : isLast);\n const { offsetWidth: totalWidth, scrollWidth } = this.elementRef.nativeElement;\n const isOverflown = scrollWidth > totalWidth;\n if (isOverflown) {\n const isVisibleItem = ({ hidden }: (typeof items)[number]) => !hidden();\n const lastVisibleItem = !reverseOverflowOrder\n ? this.findLast(items, isVisibleItem)\n : items.find(isVisibleItem);\n if (lastVisibleItem) {\n lastVisibleItem.hidden.set(true);\n if (!isEdgeItem(lastVisibleItem)) {\n this.updateItemsVisibility();\n }\n }\n } else {\n const isHiddenItem = ({ hidden }: (typeof items)[number]) => hidden();\n const firstHiddenItem = !reverseOverflowOrder\n ? items.find(isHiddenItem)\n : this.findLast(items, isHiddenItem);\n if (firstHiddenItem) {\n const firstHiddenItemWidth = firstHiddenItem.elementRef.nativeElement.offsetWidth;\n const visibleItemsTotalWidth = items\n .filter(({ hidden }) => !hidden())\n .reduce((width, { elementRef }) => width + elementRef.nativeElement.offsetWidth, 0);\n const _isEdgeItem = isEdgeItem(firstHiddenItem);\n const resultWidth = _isEdgeItem ? 0 : this.resultElementRef()?.nativeElement.offsetWidth || 0;\n if (firstHiddenItemWidth + visibleItemsTotalWidth + resultWidth <= totalWidth) {\n firstHiddenItem.hidden.set(false);\n if (!_isEdgeItem) {\n this.updateItemsVisibility();\n }\n }\n }\n }\n }\n\n /** @TODO Should use `Array.prototype.findLast` after migrating to ES2023 */\n private findLast<T>(array: T[], predicate: (value: T, index: number, array: T[]) => boolean): T | undefined {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i], i, array)) {\n return array[i];\n }\n }\n return undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n contentChild,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n Renderer2,\n signal\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { debounceTime, merge, skip } from 'rxjs';\n\n/**\n * Manages the visibility of the element.\n *\n * @docs-private\n */\n@Directive({\n host: {\n '[attr.aria-hidden]': 'hidden()'\n }\n})\nexport class ElementVisibilityManager {\n private readonly renderer = inject(Renderer2);\n\n /**\n * Reference to the element.\n *\n * @docs-private\n */\n readonly elementRef = inject(ElementRef);\n\n /**\n * Whether the element is hidden.\n *\n * @docs-private\n */\n readonly hidden = signal(false);\n\n /**\n * Hides the element.\n *\n * @docs-private\n */\n hide(): void {\n this.renderer.setStyle(this.elementRef.nativeElement, 'visibility', 'hidden');\n this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'absolute');\n this.hidden.set(true);\n }\n\n /**\n * Shows the element.\n *\n * @docs-private\n */\n show(): void {\n this.renderer.removeStyle(this.elementRef.nativeElement, 'visibility');\n this.renderer.removeStyle(this.elementRef.nativeElement, 'position');\n this.hidden.set(false);\n }\n}\n\n/**\n * Directive for displaying the result of hidden items by the `KbqOverflowItems` directive.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItemsResult]',\n exportAs: 'kbqOverflowItemsResult',\n host: { class: 'kbq-overflow-items-result' }\n})\nexport class KbqOverflowItemsResult extends ElementVisibilityManager {}\n\n/**\n * Directive for the item that can be hidden by the `KbqOverflowItems` directive.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItem]',\n exportAs: 'kbqOverflowItem',\n host: { class: 'kbq-overflow-item' }\n})\nexport class KbqOverflowItem extends ElementVisibilityManager {\n /**\n * Unique identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n}\n\n/**\n * Directive for managing the visibility of items that overflow the container.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItems]',\n exportAs: 'kbqOverflowItems',\n host: { class: 'kbq-overflow-items' }\n})\nexport class KbqOverflowItems {\n /**\n * `KbqOverflowItem` directive references.\n *\n * @docs-private\n */\n private readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n *\n * @docs-private\n */\n private readonly result = contentChild(KbqOverflowItemsResult);\n\n /**\n * Whether the overflow order should be reversed.\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n /**\n * Debounce time for recalculating items visibility.\n *\n * @default 100\n */\n readonly debounceTime = input(100, { transform: numberAttribute });\n\n /**\n * Emits when the set of hidden items changes.\n */\n readonly changes = output<ReadonlySet<unknown>>();\n\n /**\n * Set of hidden item IDs.\n */\n readonly hiddenItemIDs = toSignal(outputToObservable(this.changes), {\n initialValue: new Set<unknown>([]) as ReadonlySet<unknown>\n });\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly renderer = inject(Renderer2);\n private readonly document = inject(DOCUMENT);\n\n constructor() {\n this.setStyles();\n\n merge(\n toObservable(this.items),\n toObservable(this.reverseOverflowOrder).pipe(skip(1)),\n this.resizeObserver.observe(this.elementRef.nativeElement)\n )\n .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())\n .subscribe(() => {\n const hiddenItems = this.calculateItemsVisibility(\n this.items(),\n this.reverseOverflowOrder(),\n this.result(),\n this.elementRef.nativeElement\n );\n const hiddenItemIDs = new Set(hiddenItems.map(({ id }) => id()));\n this.changes.emit(hiddenItemIDs);\n });\n }\n\n /**\n * Calculates the visibility of items, based on the container width and `reverseOverflowOrder` property.\n */\n private calculateItemsVisibility(\n items: readonly KbqOverflowItem[],\n reverseOverflowOrder: boolean,\n result: KbqOverflowItemsResult | undefined,\n { offsetWidth: totalWidth }: HTMLElement\n ): KbqOverflowItem[] {\n result?.hide();\n items.forEach((item) => {\n item.show();\n });\n let itemsWidth = items.reduce(\n (width, { elementRef }) => width + this.getElementWidthWithMargins(elementRef),\n 0\n );\n const startIndex = reverseOverflowOrder ? 0 : items.length - 1;\n const endIndex = reverseOverflowOrder ? items.length : -1;\n const step = reverseOverflowOrder ? 1 : -1;\n const resultWidth = result ? this.getElementWidthWithMargins(result.elementRef) : 0;\n for (let index = startIndex; index !== endIndex; index += step) {\n const current = items[index];\n const currentWidth = this.getElementWidthWithMargins(current.elementRef);\n const _resultWidth = items.some(this.isHiddenItem) ? resultWidth : 0;\n if (itemsWidth + _resultWidth > totalWidth) {\n current.hide();\n itemsWidth -= currentWidth;\n } else {\n const isEdgeElement = reverseOverflowOrder ? index === 0 : index === items.length - 1;\n const _resultWidth = isEdgeElement ? 0 : resultWidth;\n if (itemsWidth + currentWidth + _resultWidth <= totalWidth) {\n current.show();\n itemsWidth += currentWidth;\n }\n }\n }\n const hiddenItems = items.filter(this.isHiddenItem);\n if (hiddenItems.length > 0) {\n result?.show();\n }\n return hiddenItems;\n }\n\n /**\n * Returns the width of the element including margins.\n */\n private getElementWidthWithMargins({ nativeElement }: ElementRef<HTMLElement>): number {\n const { marginLeft, marginRight } = this.getWindow().getComputedStyle(nativeElement);\n return Math.ceil(parseFloat(marginLeft) + nativeElement.offsetWidth + parseFloat(marginRight));\n }\n\n /**\n * This method sets the necessary styles for the directive.\n */\n private setStyles(): void {\n this.renderer.setStyle(this.elementRef.nativeElement, 'position', 'relative');\n this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'flex');\n this.renderer.setStyle(this.elementRef.nativeElement, 'flex-wrap', 'nowrap');\n this.renderer.setStyle(this.elementRef.nativeElement, 'flex-grow', '1');\n this.renderer.setStyle(this.elementRef.nativeElement, 'overflow', 'hidden');\n }\n\n /**\n * Determines if the given item is hidden.\n */\n private isHiddenItem = ({ hidden }: KbqOverflowItem) => hidden();\n\n /**\n * Returns the window object.\n */\n private getWindow(): Window {\n return this.document.defaultView || window;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|