@updevs/components 1.0.0-alpha.51 → 1.0.0-alpha.53
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/dropdown/dropdown.component.d.ts +1 -0
- package/esm2022/dropdown/dropdown.component.mjs +11 -6
- package/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +3 -3
- package/esm2022/form/models/select-field.model.mjs +1 -1
- package/esm2022/form-controls/select/components/single/select.component.mjs +9 -3
- package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +8 -5
- package/esm2022/list/list.component.mjs +4 -3
- package/esm2022/list/models/list-item.mjs +1 -1
- package/esm2022/list/models/list-item.model.mjs +7 -2
- package/esm2022/paginator/paginator.component.mjs +1 -1
- package/esm2022/popover/popover.directive.mjs +7 -5
- package/esm2022/table/components/filter-row/filter-row.component.mjs +1 -1
- package/fesm2022/updevs-components-dropdown.mjs +10 -5
- package/fesm2022/updevs-components-dropdown.mjs.map +1 -1
- package/fesm2022/updevs-components-form-controls-select.mjs +15 -6
- package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -1
- package/fesm2022/updevs-components-form.mjs +2 -2
- package/fesm2022/updevs-components-form.mjs.map +1 -1
- package/fesm2022/updevs-components-list.mjs +9 -3
- package/fesm2022/updevs-components-list.mjs.map +1 -1
- package/fesm2022/updevs-components-paginator.mjs +1 -1
- package/fesm2022/updevs-components-paginator.mjs.map +1 -1
- package/fesm2022/updevs-components-popover.mjs +6 -4
- package/fesm2022/updevs-components-popover.mjs.map +1 -1
- package/fesm2022/updevs-components-table.mjs +1 -1
- package/fesm2022/updevs-components-table.mjs.map +1 -1
- package/form/models/select-field.model.d.ts +2 -1
- package/form-controls/select/components/single/select.component.d.ts +3 -1
- package/form-controls/select/models/abstractions/base-select.component.d.ts +1 -0
- package/list/models/list-item.d.ts +1 -0
- package/list/models/list-item.model.d.ts +1 -0
- package/package.json +30 -30
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Directive, Input, TemplateRef, ViewContainerRef, Renderer2, ElementRef, Injector, NgZone, HostListener, inject } from '@angular/core';
|
|
1
|
+
import { Directive, Input, TemplateRef, ViewContainerRef, Renderer2, ElementRef, Injector, NgZone, HostListener, inject, afterNextRender } from '@angular/core';
|
|
2
2
|
import { PositioningService, DynamicComponentLoaderService } from '@updevs/sdk/layout';
|
|
3
3
|
import { PopoverComponent } from './popover.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -43,9 +43,11 @@ export class PopoverDirective {
|
|
|
43
43
|
this.popoverComponentRef.instance.setVisible(true);
|
|
44
44
|
this.popoverComponentRef.changeDetectorRef.detectChanges();
|
|
45
45
|
const arrowElement = this.popoverComponentRef.location.nativeElement.querySelector('.popover-arrow');
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
afterNextRender(() => {
|
|
47
|
+
this.ngZone.runOutsideAngular(() => this.positioningService
|
|
48
|
+
.computePosition(this.elementRef, this.popoverComponentRef.location, { placement: this.placement }, arrowElement)
|
|
49
|
+
.subscribe(resp => this.updatePosition(resp)));
|
|
50
|
+
}, { injector: this.injector });
|
|
49
51
|
}
|
|
50
52
|
disposePopover() {
|
|
51
53
|
this.viewContainerRef.clear();
|
|
@@ -115,4 +117,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
115
117
|
type: HostListener,
|
|
116
118
|
args: ['click']
|
|
117
119
|
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBRU4sWUFBWSxFQUFFLE1BQU0sRUFDdkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUF5Qiw2QkFBNkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUt2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBVWtDLGNBQVMsR0FBMkIsS0FBSyxDQUFDO1FBRXhFOzs7V0FHRztRQUM4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUlyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELGtDQUE2QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0tBNEUxRjtJQXpFRyxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lB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QTlDLEtBQUs7dUJBQUMseUJBQXlCO2dCQUtDLFlBQVk7c0JBQTVDLEtBQUs7dUJBQUMsd0JBQXdCO2dCQWEvQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWTtnQkFRMUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVk7Z0JBUTFCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBSZW5kZXJlcjIsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3RvcixcbiAgICBOZ1pvbmUsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lciwgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9wQm90dG9tTGVmdFJpZ2h0VHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL3R5cGVzJztcbmltcG9ydCB7IFBvc2l0aW9uaW5nU2VydmljZSwgQ29tcHV0ZVBvc2l0aW9uUmVzdWx0LCBEeW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5cbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdXBkUG9wb3Zlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJEaXJlY3RpdmUge1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlcicpIHRleHQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCd1cGRQb3BvdmVyVGl0bGUnKSB0aXRsZT86IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgndXBkUG9wb3ZlclRpdGxlVGVtcGxhdGUnKSBwb3BvdmVyVGl0bGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJUZW1wbGF0ZScpIHBvcG92ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCd1cGRQb3BvdmVyUGxhY2VtZW50JykgcGxhY2VtZW50OiBUb3BCb3R0b21MZWZ0UmlnaHRUeXBlID0gJ3RvcCc7XG4gICAgQElucHV0KCd1cGRQb3BvdmVyQ3VzdG9tQ2xhc3NlcycpIGN1c3RvbUNsYXNzZXM/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhpcyBtYWtlcyB0aGUgcG9wb3ZlciBiZWhhdmUgbGlrZSBhIHRvb2x0aXAuXG4gICAgICogSXQgbWVhbnMgaXQnbGwgc2hvdy9oaWRlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBtb3VzZSBpcyBvdmVyIG9yIG5vdCB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJBY3RBc1Rvb2x0aXAnKSBhY3RBc1Rvb2x0aXAgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcG9wb3ZlckNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxQb3BvdmVyQ29tcG9uZW50PjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3NpdGlvbmluZ1NlcnZpY2UgPSBpbmplY3QoUG9zaXRpb25pbmdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGR5bmFtaWNDb21wb25lbnRMb2FkZXJTZXJ2aWNlID0gaW5qZWN0KER5bmFtaWNDb21wb25lbnRMb2FkZXJTZXJ2aWNlKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICAgIG9uTW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0QXNUb29sdGlwKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdEFzVG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RBc1Rvb2x0aXApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcG92ZXJDb21wb25lbnRSZWY/Lmluc3RhbmNlLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UG9wb3ZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0UG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXR1cFBvcG92ZXIoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5zZXRWaXNpYmxlKHRydWUpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnBvcG92ZXItYXJyb3cnKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbmluZ1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuY29tcHV0ZVBvc2l0aW9uKHRoaXMuZWxlbWVudFJlZiwgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5sb2NhdGlvbiwgeyBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50IH0sIGFycm93RWxlbWVudClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4gdGhpcy51cGRhdGVQb3NpdGlvbihyZXNwKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc3Bvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5zZXRWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50TG9hZGVyU2VydmljZS5sb2FkKFBvcG92ZXJDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgdGhpcy5pbmplY3Rvcik7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGl0bGUgPSB0aGlzLnRpdGxlO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnRleHQgPSB0aGlzLnRleHQ7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGl0bGVUZW1wbGF0ZSA9IHRoaXMucG9wb3ZlclRpdGxlVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UudGVtcGxhdGUgPSB0aGlzLnBvcG92ZXJUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5wbGFjZW1lbnQgPSB0aGlzLnBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS5jdXN0b21DbGFzc2VzID0gdGhpcy5jdXN0b21DbGFzc2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUG9zaXRpb24ocmVzdWx0OiBDb21wdXRlUG9zaXRpb25SZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYXJyb3dFbGVtZW50ID0gbmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnBvcG92ZXItYXJyb3cnKTtcblxuICAgICAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQb3BvdmVyIGFycm93IGVsZW1lbnQgbm90IGZvdW5kLiBQb3NpdGlvbmluZyBtYXkgYmUgaW5jb3JyZWN0LicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShuYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke3Jlc3VsdC54fXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3Jlc3VsdC55fXB4YCk7XG5cbiAgICAgICAgaWYgKGFycm93RWxlbWVudCAmJiByZXN1bHQubWlkZGxld2FyZURhdGEuYXJyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgeDogYXJyb3dYLCB5OiBhcnJvd1kgfSA9IHJlc3VsdC5taWRkbGV3YXJlRGF0YS5hcnJvdztcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYXJyb3dFbGVtZW50LCAnbGVmdCcsIGFycm93WCAhPT0gdW5kZWZpbmVkID8gYCR7YXJyb3dYfXB4YCA6ICcnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYXJyb3dFbGVtZW50LCAndG9wJywgYXJyb3dZICE9PSB1bmRlZmluZWQgPyBgJHthcnJvd1l9cHhgIDogJycpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBRU4sWUFBWSxFQUFFLE1BQU0sRUFDcEIsZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLDZCQUE2QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBS3ZELE1BQU0sT0FBTyxnQkFBZ0I7SUFIN0I7UUFVa0MsY0FBUyxHQUEyQixLQUFLLENBQUM7UUFFeEU7OztXQUdHO1FBQzhCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBSXJDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsa0NBQTZCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7S0E4RTFGO0lBM0VHLFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsQ0FBQztJ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O3VCQUFDLHlCQUF5QjtnQkFFSCxlQUFlO3NCQUEzQyxLQUFLO3VCQUFDLG9CQUFvQjtnQkFDRyxTQUFTO3NCQUF0QyxLQUFLO3VCQUFDLHFCQUFxQjtnQkFDTSxhQUFhO3NCQUE5QyxLQUFLO3VCQUFDLHlCQUF5QjtnQkFLQyxZQUFZO3NCQUE1QyxLQUFLO3VCQUFDLHdCQUF3QjtnQkFhL0IsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVk7Z0JBUTFCLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQVExQixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIElucHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgUmVuZGVyZXIyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBIb3N0TGlzdGVuZXIsIGluamVjdCxcbiAgICBhZnRlck5leHRSZW5kZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb3BCb3R0b21MZWZ0UmlnaHRUeXBlIH0gZnJvbSAnQHVwZGV2cy9zZGsvdHlwZXMnO1xuaW1wb3J0IHsgUG9zaXRpb25pbmdTZXJ2aWNlLCBDb21wdXRlUG9zaXRpb25SZXN1bHQsIER5bmFtaWNDb21wb25lbnRMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsvbGF5b3V0JztcblxuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t1cGRQb3BvdmVyXSdcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckRpcmVjdGl2ZSB7XG4gICAgQElucHV0KCd1cGRQb3BvdmVyJykgdGV4dD86IHN0cmluZztcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJUaXRsZScpIHRpdGxlPzogc3RyaW5nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCd1cGRQb3BvdmVyVGl0bGVUZW1wbGF0ZScpIHBvcG92ZXJUaXRsZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgndXBkUG9wb3ZlclRlbXBsYXRlJykgcG9wb3ZlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFRvcEJvdHRvbUxlZnRSaWdodFR5cGUgPSAndG9wJztcbiAgICBASW5wdXQoJ3VwZFBvcG92ZXJDdXN0b21DbGFzc2VzJykgY3VzdG9tQ2xhc3Nlcz86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGlzIG1ha2VzIHRoZSBwb3BvdmVyIGJlaGF2ZSBsaWtlIGEgdG9vbHRpcC5cbiAgICAgKiBJdCBtZWFucyBpdCdsbCBzaG93L2hpZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG1vdXNlIGlzIG92ZXIgb3Igbm90IHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgndXBkUG9wb3ZlckFjdEFzVG9vbHRpcCcpIGFjdEFzVG9vbHRpcCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPFBvcG92ZXJDb21wb25lbnQ+O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvc2l0aW9uaW5nU2VydmljZSA9IGluamVjdChQb3NpdGlvbmluZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHluYW1pY0NvbXBvbmVudExvYWRlclNlcnZpY2UgPSBpbmplY3QoRHluYW1pY0NvbXBvbmVudExvYWRlclNlcnZpY2UpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gICAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RBc1Rvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnKVxuICAgIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0QXNUb29sdGlwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdEFzVG9vbHRpcCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZj8uaW5zdGFuY2UuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlUG9wb3ZlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRQb3BvdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRQb3BvdmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHVwUG9wb3ZlcigpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnNldFZpc2libGUodHJ1ZSk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGNvbnN0IGFycm93RWxlbWVudCA9IHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEubG9jYXRpb24ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucG9wb3Zlci1hcnJvdycpO1xuXG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25pbmdTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5jb21wdXRlUG9zaXRpb24odGhpcy5lbGVtZW50UmVmLCB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmxvY2F0aW9uLCB7IHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSwgYXJyb3dFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4gdGhpcy51cGRhdGVQb3NpdGlvbihyZXNwKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sIHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNwb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2Uuc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudExvYWRlclNlcnZpY2UubG9hZChQb3BvdmVyQ29tcG9uZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnRpdGxlID0gdGhpcy50aXRsZTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmIS5pbnN0YW5jZS50ZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnRpdGxlVGVtcGxhdGUgPSB0aGlzLnBvcG92ZXJUaXRsZVRlbXBsYXRlO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmluc3RhbmNlLnRlbXBsYXRlID0gdGhpcy5wb3BvdmVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UucGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnQ7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiEuaW5zdGFuY2UuY3VzdG9tQ2xhc3NlcyA9IHRoaXMuY3VzdG9tQ2xhc3NlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBvc2l0aW9uKHJlc3VsdDogQ29tcHV0ZVBvc2l0aW9uUmVzdWx0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYhLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGFycm93RWxlbWVudCA9IG5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWFycm93Jyk7XG5cbiAgICAgICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUG9wb3ZlciBhcnJvdyBlbGVtZW50IG5vdCBmb3VuZC4gUG9zaXRpb25pbmcgbWF5IGJlIGluY29ycmVjdC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUobmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHtyZXN1bHQueH1weGApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG5hdGl2ZUVsZW1lbnQsICd0b3AnLCBgJHtyZXN1bHQueX1weGApO1xuXG4gICAgICAgIGlmIChhcnJvd0VsZW1lbnQgJiYgcmVzdWx0Lm1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG4gICAgICAgICAgICBjb25zdCB7IHg6IGFycm93WCwgeTogYXJyb3dZIH0gPSByZXN1bHQubWlkZGxld2FyZURhdGEuYXJyb3c7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGFycm93RWxlbWVudCwgJ2xlZnQnLCBhcnJvd1ggIT09IHVuZGVmaW5lZCA/IGAke2Fycm93WH1weGAgOiAnJyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGFycm93RWxlbWVudCwgJ3RvcCcsIGFycm93WSAhPT0gdW5kZWZpbmVkID8gYCR7YXJyb3dZfXB4YCA6ICcnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -100,7 +100,7 @@ export class FilterRowComponent extends BaseComponent {
|
|
|
100
100
|
this.removed.emit();
|
|
101
101
|
}
|
|
102
102
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilterRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: FilterRowComponent, selector: "upd-filter-row", inputs: { activeFilters: { classPropertyName: "activeFilters", publicName: "activeFilters", isSignal: true, isRequired: true, transformFunction: null }, rowIndex: { classPropertyName: "rowIndex", publicName: "rowIndex", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: true, transformFunction: null }, store: { classPropertyName: "store", publicName: "store", isSignal: true, isRequired: false, transformFunction: null }, currentFilter: { classPropertyName: "currentFilter", publicName: "currentFilter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed", activeFilters: "activeFiltersChange" }, host: { properties: { "class": "this.wrapperClasses" } }, usesInheritance: true, ngImport: i0, template: "<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldsOptions()\" (selectedItem)=\"onSelectField($event)\"\n [selected]=\"selectedField\">\n</upd-select>\n<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"comparisonOperatorOptions()\" (selectedItem)=\"onSelectOperand($event)\"\n [selected]=\"selectedOperand\">\n</upd-select>\n\n@if (isValueSectionEnabled()) {\n @switch (fieldType) {\n @case (DataTypeEnum.Number) {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"number\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n @case (DataTypeEnum.Date) {\n\n }\n @default {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"text\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n }\n} @else {\n <div class=\"w-100\">\n <input type=\"text\" class=\"form-control h-100\" disabled>\n </div>\n}\n\n<upd-button class=\"flex-shrink-1\" colorStyle=\"danger\" [isDisabled]=\"isDisabled()\" [isOutline]=\"true\" [isIcon]=\"true\"\n [iconModel]=\"{tablerIcon:'x'}\" (clicked)=\"removeFilterItem()\"></upd-button>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i2.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "component", type: i3.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "isCompact", "selected"], outputs: ["selectedItem"] }] }); }
|
|
103
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: FilterRowComponent, selector: "upd-filter-row", inputs: { activeFilters: { classPropertyName: "activeFilters", publicName: "activeFilters", isSignal: true, isRequired: true, transformFunction: null }, rowIndex: { classPropertyName: "rowIndex", publicName: "rowIndex", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: true, transformFunction: null }, store: { classPropertyName: "store", publicName: "store", isSignal: true, isRequired: false, transformFunction: null }, currentFilter: { classPropertyName: "currentFilter", publicName: "currentFilter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed", activeFilters: "activeFiltersChange" }, host: { properties: { "class": "this.wrapperClasses" } }, usesInheritance: true, ngImport: i0, template: "<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"fieldsOptions()\" (selectedItem)=\"onSelectField($event)\"\n [selected]=\"selectedField\">\n</upd-select>\n<upd-select class=\"w-100\" [isDisabled]=\"isDisabled()\" [items]=\"comparisonOperatorOptions()\" (selectedItem)=\"onSelectOperand($event)\"\n [selected]=\"selectedOperand\">\n</upd-select>\n\n@if (isValueSectionEnabled()) {\n @switch (fieldType) {\n @case (DataTypeEnum.Number) {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"number\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n @case (DataTypeEnum.Date) {\n\n }\n @default {\n <upd-input wrapperClasses=\"w-100\" customClasses=\"h-100\" type=\"text\" (valueChange)=\"updateValue($event)\"\n [value]=\"selectedValue\"></upd-input>\n }\n }\n} @else {\n <div class=\"w-100\">\n <input type=\"text\" class=\"form-control h-100\" disabled>\n </div>\n}\n\n<upd-button class=\"flex-shrink-1\" colorStyle=\"danger\" [isDisabled]=\"isDisabled()\" [isOutline]=\"true\" [isIcon]=\"true\"\n [iconModel]=\"{tablerIcon:'x'}\" (clicked)=\"removeFilterItem()\"></upd-button>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i2.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "component", type: i3.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "shouldTruncateSelectedText", "isCompact", "selected"], outputs: ["selectedItem"] }] }); }
|
|
104
104
|
}
|
|
105
105
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FilterRowComponent, decorators: [{
|
|
106
106
|
type: Component,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, input, inject, NgZone, ElementRef, Renderer2, RendererStyleFlags2, Output, Input, HostBinding, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
2
|
+
import { EventEmitter, input, inject, NgZone, ElementRef, Renderer2, Injector, RendererStyleFlags2, afterNextRender, Output, Input, HostBinding, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
3
3
|
import { BaseComponent, PositioningService, DomEventsService } from '@updevs/sdk/layout';
|
|
4
4
|
import { TextService } from '@updevs/sdk';
|
|
5
5
|
import * as i1 from '@angular/common';
|
|
@@ -57,6 +57,7 @@ class DropdownComponent extends BaseComponent {
|
|
|
57
57
|
this.renderer = inject(Renderer2);
|
|
58
58
|
this.positioningService = inject(PositioningService);
|
|
59
59
|
this.domEventsService = inject(DomEventsService);
|
|
60
|
+
this.injector = inject(Injector);
|
|
60
61
|
this.dropdownElement = this.elementRef.nativeElement;
|
|
61
62
|
}
|
|
62
63
|
ngOnInit() {
|
|
@@ -113,7 +114,9 @@ class DropdownComponent extends BaseComponent {
|
|
|
113
114
|
updateStyle() {
|
|
114
115
|
this.updateWrapperClasses();
|
|
115
116
|
this.updateMaxHeight();
|
|
116
|
-
this.
|
|
117
|
+
if (this.isOpen) {
|
|
118
|
+
this.startPositionUpdate();
|
|
119
|
+
}
|
|
117
120
|
}
|
|
118
121
|
updateWrapperClasses() {
|
|
119
122
|
this.localWrapperClasses = this.baseWrapperClasses + ' ' + this.wrapperClasses;
|
|
@@ -138,9 +141,11 @@ class DropdownComponent extends BaseComponent {
|
|
|
138
141
|
if (!this.dropdownReference) {
|
|
139
142
|
return;
|
|
140
143
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
+
afterNextRender(() => {
|
|
145
|
+
this.ngZone.runOutsideAngular(() => this.positioningService
|
|
146
|
+
.computePosition(this.dropdownReference, this.elementRef, { placement: this.dropdownReferencePosition }, undefined, undefined, true)
|
|
147
|
+
.subscribe(resp => this.updatePosition(resp)));
|
|
148
|
+
}, { injector: this.injector });
|
|
144
149
|
}
|
|
145
150
|
updatePosition(result) {
|
|
146
151
|
const reference = this.dropdownReference.nativeElement.getBoundingClientRect();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updevs-components-dropdown.mjs","sources":["../../../../libs/components/dropdown/src/dropdown.component.ts","../../../../libs/components/dropdown/src/dropdown.component.html","../../../../libs/components/dropdown/src/upd-dropdown.module.ts","../../../../libs/components/dropdown/src/updevs-components-dropdown.ts"],"sourcesContent":["import {\n Component,\n HostBinding,\n ViewEncapsulation,\n Input,\n OnInit,\n OnChanges,\n Output,\n EventEmitter,\n NgZone,\n ElementRef,\n Renderer2,\n RendererStyleFlags2,\n inject, input\n} from '@angular/core';\nimport { BaseComponent, PositioningService, ComputePositionResult, DomEventsService, ButtonModel } from '@updevs/sdk/layout';\nimport { TopBottomLeftRightType, LeftRightType, OverflowStrategyType } from '@updevs/sdk/types';\nimport { TextService } from '@updevs/sdk';\nimport { Subscription } from 'rxjs';\n\nimport { DropdownItem } from './models/dropdown-item';\nimport { DropdownActionClickedModel } from './models/dropdown-action-clicked.model';\n\n@Component({\n selector: 'upd-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class DropdownComponent extends BaseComponent implements OnInit, OnChanges {\n @HostBinding('class') localWrapperClasses = '';\n\n @Input() items: DropdownItem[] = [];\n @Input() header?: string;\n\n @Input()\n set isOpen(value: boolean) {\n this.updateOpenState(value);\n\n if (this.shouldCloseOnOutsideClick) {\n this.closeOnOutsideClick();\n }\n }\n\n @Input() shouldCloseOnOutsideClick = false;\n @Input() arrowType?: LeftRightType;\n @Input() wrapperClasses = '';\n /**\n * Elements that won't trigger the close of the dropdown if clicked upon.\n * Only works when `shouldCloseOnOutsideClick` is set to true.\n */\n @Input() elementsExcludedFromOutsideClick?: HTMLElement[];\n /**\n * Minimum height of the component.\n */\n @Input() minHeight?: number;\n /**\n * Maximum height of the component.\n * If set, scroll bars will be used when the content's size is bigger than the component's.\n */\n @Input() maxHeight?: number;\n /**\n * Minimum width of the component.\n */\n @Input() minWidth?: number;\n /**\n * Maximum width of the component.\n * If set, scroll bars will be used when the content's size is bigger than the component's.\n */\n @Input() maxWidth?: number;\n /**\n * If set, the position of the dropdown will be set according to this element.\n */\n @Input() dropdownReference?: ElementRef;\n /**\n * If a reference is provided, this will be the position of the dropdown in relation to that reference.\n */\n @Input() dropdownReferencePosition: TopBottomLeftRightType = 'bottom';\n\n @Output() readonly isOpenChange = new EventEmitter<boolean>();\n @Output() readonly selectedItem = new EventEmitter<DropdownItem>();\n @Output() readonly checkboxChanged = new EventEmitter<DropdownItem>();\n\n textOverflowStrategy = input<OverflowStrategyType>('wrap');\n\n readonly textService = inject(TextService);\n\n get isOpen(): boolean {\n return this._isOpen;\n }\n\n get overflowClass(): string {\n switch (this.textOverflowStrategy()) {\n case 'no-wrap':\n return 'text-nowrap';\n case 'wrap':\n return 'text-wrap';\n case 'word-break':\n return 'text-break';\n default:\n return 'text-truncate';\n }\n }\n\n private baseWrapperClasses = 'dropdown-menu';\n private _isOpen = false;\n private dropdownOutsideClickSub?: Subscription;\n private readonly dropdownElement: HTMLElement;\n private readonly ngZone = inject(NgZone);\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly positioningService = inject(PositioningService);\n private readonly domEventsService = inject(DomEventsService);\n\n constructor() {\n super();\n this.dropdownElement = this.elementRef.nativeElement;\n }\n\n ngOnInit(): void {\n this.updateStyle();\n }\n\n ngOnChanges(): void {\n this.updateStyle();\n }\n\n onSelect(item: DropdownItem): void {\n this.selectedItem.emit(item);\n }\n\n onCheckboxChange(item: DropdownItem, isChecked: boolean): void {\n item.isChecked = isChecked;\n this.checkboxChanged.emit(item);\n }\n\n adaptAction(btn: ButtonModel, item: DropdownItem): ButtonModel {\n const defaultFunction = btn.clickFunction;\n btn.clickFunction = (evt) => {\n evt.event?.preventDefault();\n evt.event?.stopPropagation();\n\n if (!!defaultFunction) {\n defaultFunction({ event: evt.event, data: { item, button: btn } as DropdownActionClickedModel });\n }\n };\n\n return btn;\n }\n\n trackByItemId(index: number, item: DropdownItem): any {\n return item.id ?? index;\n }\n\n getButtonClasses(item: DropdownItem): string {\n const classes = ['dropdown-item'];\n\n if (item.isDisabled) {\n classes.push('disabled');\n }\n\n if (item.isActive) {\n classes.push('active');\n }\n\n return classes.join(' ');\n }\n\n private closeOnOutsideClick(): void {\n if (!!this.dropdownOutsideClickSub) {\n this.dropdownOutsideClickSub.unsubscribe();\n }\n\n const excludedElements = [this.dropdownElement];\n\n if (!!this.dropdownReference) {\n excludedElements.push(this.dropdownReference.nativeElement);\n }\n\n this.dropdownOutsideClickSub = this.domEventsService.startOutsideClickListener(\n () => this.ngZone.run(() => {\n this.updateOpenState(false);\n this.updateWrapperClasses();\n }),\n this.dropdownElement,\n true,\n ...excludedElements\n );\n this.addSubscriptions(this.dropdownOutsideClickSub);\n }\n\n private updateStyle(): void {\n this.updateWrapperClasses();\n this.updateMaxHeight();\n this.startPositionUpdate();\n }\n\n private updateWrapperClasses(): void {\n this.localWrapperClasses = this.baseWrapperClasses + ' ' + this.wrapperClasses;\n\n if (this.isOpen) {\n this.localWrapperClasses += ' dropdown-show';\n }\n\n if (!!this.arrowType) {\n this.localWrapperClasses += ' dropdown-menu-arrow' + (this.arrowType === 'right' ? ' dropdown-menu-end' : '');\n }\n\n if (!!this.maxHeight) {\n this.localWrapperClasses += ' dropdown-overflow';\n }\n }\n\n private updateOpenState(isOpen: boolean): void {\n this._isOpen = isOpen;\n this.isOpenChange.emit(isOpen);\n }\n\n private updateMaxHeight(): void {\n this.renderer.setStyle(this.dropdownElement, 'max-height', `${this.maxHeight}px`, RendererStyleFlags2.Important);\n }\n\n private startPositionUpdate(): void {\n if (!this.dropdownReference) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() =>\n this.positioningService\n .computePosition(\n this.dropdownReference!,\n this.elementRef,\n { placement: this.dropdownReferencePosition },\n undefined,\n undefined,\n true\n )\n .subscribe(resp => this.updatePosition(resp))\n );\n }\n\n private updatePosition(result: ComputePositionResult): void {\n const reference = this.dropdownReference!.nativeElement.getBoundingClientRect();\n const ddElement = this.dropdownElement;\n const width = Math.abs(reference.width);\n let widthOffset = 0;\n\n if (!!this.maxWidth) {\n this.renderer.setStyle(ddElement, 'max-width', `${this.maxWidth}px`, RendererStyleFlags2.Important);\n }\n\n if (!!this.minWidth) {\n this.renderer.setStyle(ddElement, 'min-width', `${this.minWidth}px`, RendererStyleFlags2.Important);\n widthOffset = (this.minWidth > width ? this.minWidth - width : 0) / 2; // TODO: check logic\n }\n\n this.renderer.setStyle(ddElement, 'position', result.strategy, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'width', `${width}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'left', `${result.x - widthOffset}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'top', `${result.y}px`, RendererStyleFlags2.Important);\n }\n}\n","@if (!!header) {\n <h6 class=\"dropdown-header\">{{ header }}</h6>\n}\n\n@for (item of items; track trackByItemId($index, item)) {\n @switch (item.type) {\n @case ('divider') {\n <div class=\"dropdown-divider\"></div>\n }\n @case ('default') {\n <upd-button [customClasses]=\"getButtonClasses(item)\"\n [shouldIgnoreBtnClass]=\"true\" (clicked)=\"onSelect(item)\">\n @if (!!item.icon) {\n <upd-icon [model]=\"item.icon\" customClasses=\"dropdown-item-icon\"></upd-icon>\n }\n\n @if (!!item.leftBoxText || !!item.leftBoxImage) {\n <span style=\"background-image: url({{item.leftBoxImage}})\"\n class=\"avatar avatar-xs rounded me-2\">{{ item.leftBoxText }}</span>\n }\n\n {{ textService.getText(item.text) }}\n\n @if (!!item.badgeColor) {\n <span class=\"badge bg-{{item.badgeColor}} ms-auto\">{{ item.badgeText }}</span>\n }\n </upd-button>\n }\n @case ('radio') {\n <upd-radio (selected)=\"onSelect(item)\" [label]=\"item.text\" [isChecked]=\"item.isChecked || false\"\n [wrapperClasses]=\"'dropdown-item' + (item.isDisabled ? ' disabled' : '') + (item.isActive ? ' active' : '')\"></upd-radio>\n }\n @case ('checkbox') {\n <upd-checkbox (changed)=\"onCheckboxChange(item, $event)\" [label]=\"item.text\" [isChecked]=\"item.isChecked || false\"\n [isSwitch]=\"item.isSwitch || false\"\n [wrapperClasses]=\"'dropdown-item' + (item.isDisabled ? ' disabled' : '') + (item.isActive ? ' active' : '')\"></upd-checkbox>\n }\n @case ('with-toolbar') {\n <div class=\"dropdown-item\" [class.disabled]=\"item.isDisabled\" [class.active]=\"item.isActive\" (click)=\"onSelect(item)\">\n @if (!!item.icon) {\n <upd-icon [model]=\"item.icon\" customClasses=\"dropdown-item-icon\"></upd-icon>\n }\n\n @if (!!item.leftBoxText || !!item.leftBoxImage) {\n <span style=\"background-image: url({{item.leftBoxImage}})\"\n class=\"avatar avatar-xs rounded me-2\">{{ item.leftBoxText }}</span>\n }\n\n <span [ngClass]=\"overflowClass\">\n {{ textService.getText(item.text) }}\n </span>\n\n @if ((item.actionButtons?.length || 0) > 0) {\n <div class=\"ms-auto d-flex\" [class.btn-group]=\"item.toolbarType === 'grouped'\"\n [class.gap-1]=\"item.toolbarType === 'spaced'\">\n @for (btn of item.actionButtons; track btn) {\n <upd-button [model]=\"adaptAction(btn, item)\"></upd-button>\n }\n </div>\n }\n\n @if (!!item.badgeColor) {\n <span class=\"badge bg-{{item.badgeColor}} ms-auto\">{{ item.badgeText }}</span>\n }\n </div>\n }\n }\n}\n\n<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdRadioModule } from '@updevs/components/form-controls/radio';\nimport { UpdCheckboxModule } from '@updevs/components/form-controls/checkbox';\n\nimport { DropdownComponent } from './dropdown.component';\n\n@NgModule({\n imports: [\n CommonModule,\n UpdIconsModule,\n UpdRadioModule,\n UpdCheckboxModule,\n UpdButtonModule\n ],\n declarations: [\n DropdownComponent\n ],\n exports: [\n DropdownComponent\n ]\n})\nexport class UpdDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"updevs-components-dropdown.mjs","sources":["../../../../libs/components/dropdown/src/dropdown.component.ts","../../../../libs/components/dropdown/src/dropdown.component.html","../../../../libs/components/dropdown/src/upd-dropdown.module.ts","../../../../libs/components/dropdown/src/updevs-components-dropdown.ts"],"sourcesContent":["import {\n Component,\n HostBinding,\n ViewEncapsulation,\n Input,\n OnInit,\n OnChanges,\n Output,\n EventEmitter,\n NgZone,\n ElementRef,\n Renderer2,\n RendererStyleFlags2,\n inject, input,\n Injector,\n afterNextRender\n} from '@angular/core';\nimport { BaseComponent, PositioningService, ComputePositionResult, DomEventsService, ButtonModel } from '@updevs/sdk/layout';\nimport { TopBottomLeftRightType, LeftRightType, OverflowStrategyType } from '@updevs/sdk/types';\nimport { TextService } from '@updevs/sdk';\nimport { Subscription } from 'rxjs';\n\nimport { DropdownItem } from './models/dropdown-item';\nimport { DropdownActionClickedModel } from './models/dropdown-action-clicked.model';\n\n@Component({\n selector: 'upd-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class DropdownComponent extends BaseComponent implements OnInit, OnChanges {\n @HostBinding('class') localWrapperClasses = '';\n\n @Input() items: DropdownItem[] = [];\n @Input() header?: string;\n\n @Input()\n set isOpen(value: boolean) {\n this.updateOpenState(value);\n\n if (this.shouldCloseOnOutsideClick) {\n this.closeOnOutsideClick();\n }\n }\n\n @Input() shouldCloseOnOutsideClick = false;\n @Input() arrowType?: LeftRightType;\n @Input() wrapperClasses = '';\n /**\n * Elements that won't trigger the close of the dropdown if clicked upon.\n * Only works when `shouldCloseOnOutsideClick` is set to true.\n */\n @Input() elementsExcludedFromOutsideClick?: HTMLElement[];\n /**\n * Minimum height of the component.\n */\n @Input() minHeight?: number;\n /**\n * Maximum height of the component.\n * If set, scroll bars will be used when the content's size is bigger than the component's.\n */\n @Input() maxHeight?: number;\n /**\n * Minimum width of the component.\n */\n @Input() minWidth?: number;\n /**\n * Maximum width of the component.\n * If set, scroll bars will be used when the content's size is bigger than the component's.\n */\n @Input() maxWidth?: number;\n /**\n * If set, the position of the dropdown will be set according to this element.\n */\n @Input() dropdownReference?: ElementRef;\n /**\n * If a reference is provided, this will be the position of the dropdown in relation to that reference.\n */\n @Input() dropdownReferencePosition: TopBottomLeftRightType = 'bottom';\n\n @Output() readonly isOpenChange = new EventEmitter<boolean>();\n @Output() readonly selectedItem = new EventEmitter<DropdownItem>();\n @Output() readonly checkboxChanged = new EventEmitter<DropdownItem>();\n\n textOverflowStrategy = input<OverflowStrategyType>('wrap');\n\n readonly textService = inject(TextService);\n\n get isOpen(): boolean {\n return this._isOpen;\n }\n\n get overflowClass(): string {\n switch (this.textOverflowStrategy()) {\n case 'no-wrap':\n return 'text-nowrap';\n case 'wrap':\n return 'text-wrap';\n case 'word-break':\n return 'text-break';\n default:\n return 'text-truncate';\n }\n }\n\n private baseWrapperClasses = 'dropdown-menu';\n private _isOpen = false;\n private dropdownOutsideClickSub?: Subscription;\n private readonly dropdownElement: HTMLElement;\n private readonly ngZone = inject(NgZone);\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly positioningService = inject(PositioningService);\n private readonly domEventsService = inject(DomEventsService);\n private readonly injector = inject(Injector);\n\n constructor() {\n super();\n this.dropdownElement = this.elementRef.nativeElement;\n }\n\n ngOnInit(): void {\n this.updateStyle();\n }\n\n ngOnChanges(): void {\n this.updateStyle();\n }\n\n onSelect(item: DropdownItem): void {\n this.selectedItem.emit(item);\n }\n\n onCheckboxChange(item: DropdownItem, isChecked: boolean): void {\n item.isChecked = isChecked;\n this.checkboxChanged.emit(item);\n }\n\n adaptAction(btn: ButtonModel, item: DropdownItem): ButtonModel {\n const defaultFunction = btn.clickFunction;\n btn.clickFunction = (evt) => {\n evt.event?.preventDefault();\n evt.event?.stopPropagation();\n\n if (!!defaultFunction) {\n defaultFunction({ event: evt.event, data: { item, button: btn } as DropdownActionClickedModel });\n }\n };\n\n return btn;\n }\n\n trackByItemId(index: number, item: DropdownItem): any {\n return item.id ?? index;\n }\n\n getButtonClasses(item: DropdownItem): string {\n const classes = ['dropdown-item'];\n\n if (item.isDisabled) {\n classes.push('disabled');\n }\n\n if (item.isActive) {\n classes.push('active');\n }\n\n return classes.join(' ');\n }\n\n private closeOnOutsideClick(): void {\n if (!!this.dropdownOutsideClickSub) {\n this.dropdownOutsideClickSub.unsubscribe();\n }\n\n const excludedElements = [this.dropdownElement];\n\n if (!!this.dropdownReference) {\n excludedElements.push(this.dropdownReference.nativeElement);\n }\n\n this.dropdownOutsideClickSub = this.domEventsService.startOutsideClickListener(\n () => this.ngZone.run(() => {\n this.updateOpenState(false);\n this.updateWrapperClasses();\n }),\n this.dropdownElement,\n true,\n ...excludedElements\n );\n this.addSubscriptions(this.dropdownOutsideClickSub);\n }\n\n private updateStyle(): void {\n this.updateWrapperClasses();\n this.updateMaxHeight();\n\n if (this.isOpen) {\n this.startPositionUpdate();\n }\n }\n\n private updateWrapperClasses(): void {\n this.localWrapperClasses = this.baseWrapperClasses + ' ' + this.wrapperClasses;\n\n if (this.isOpen) {\n this.localWrapperClasses += ' dropdown-show';\n }\n\n if (!!this.arrowType) {\n this.localWrapperClasses += ' dropdown-menu-arrow' + (this.arrowType === 'right' ? ' dropdown-menu-end' : '');\n }\n\n if (!!this.maxHeight) {\n this.localWrapperClasses += ' dropdown-overflow';\n }\n }\n\n private updateOpenState(isOpen: boolean): void {\n this._isOpen = isOpen;\n this.isOpenChange.emit(isOpen);\n }\n\n private updateMaxHeight(): void {\n this.renderer.setStyle(this.dropdownElement, 'max-height', `${this.maxHeight}px`, RendererStyleFlags2.Important);\n }\n\n private startPositionUpdate(): void {\n if (!this.dropdownReference) {\n return;\n }\n\n afterNextRender(() => {\n this.ngZone.runOutsideAngular(() =>\n this.positioningService\n .computePosition(\n this.dropdownReference!,\n this.elementRef,\n { placement: this.dropdownReferencePosition },\n undefined,\n undefined,\n true\n )\n .subscribe(resp => this.updatePosition(resp))\n );\n }, { injector: this.injector });\n }\n\n private updatePosition(result: ComputePositionResult): void {\n const reference = this.dropdownReference!.nativeElement.getBoundingClientRect();\n const ddElement = this.dropdownElement;\n const width = Math.abs(reference.width);\n let widthOffset = 0;\n\n if (!!this.maxWidth) {\n this.renderer.setStyle(ddElement, 'max-width', `${this.maxWidth}px`, RendererStyleFlags2.Important);\n }\n\n if (!!this.minWidth) {\n this.renderer.setStyle(ddElement, 'min-width', `${this.minWidth}px`, RendererStyleFlags2.Important);\n widthOffset = (this.minWidth > width ? this.minWidth - width : 0) / 2; // TODO: check logic\n }\n\n this.renderer.setStyle(ddElement, 'position', result.strategy, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'width', `${width}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'left', `${result.x - widthOffset}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'top', `${result.y}px`, RendererStyleFlags2.Important);\n }\n}\n","@if (!!header) {\n <h6 class=\"dropdown-header\">{{ header }}</h6>\n}\n\n@for (item of items; track trackByItemId($index, item)) {\n @switch (item.type) {\n @case ('divider') {\n <div class=\"dropdown-divider\"></div>\n }\n @case ('default') {\n <upd-button [customClasses]=\"getButtonClasses(item)\"\n [shouldIgnoreBtnClass]=\"true\" (clicked)=\"onSelect(item)\">\n @if (!!item.icon) {\n <upd-icon [model]=\"item.icon\" customClasses=\"dropdown-item-icon\"></upd-icon>\n }\n\n @if (!!item.leftBoxText || !!item.leftBoxImage) {\n <span style=\"background-image: url({{item.leftBoxImage}})\"\n class=\"avatar avatar-xs rounded me-2\">{{ item.leftBoxText }}</span>\n }\n\n {{ textService.getText(item.text) }}\n\n @if (!!item.badgeColor) {\n <span class=\"badge bg-{{item.badgeColor}} ms-auto\">{{ item.badgeText }}</span>\n }\n </upd-button>\n }\n @case ('radio') {\n <upd-radio (selected)=\"onSelect(item)\" [label]=\"item.text\" [isChecked]=\"item.isChecked || false\"\n [wrapperClasses]=\"'dropdown-item' + (item.isDisabled ? ' disabled' : '') + (item.isActive ? ' active' : '')\"></upd-radio>\n }\n @case ('checkbox') {\n <upd-checkbox (changed)=\"onCheckboxChange(item, $event)\" [label]=\"item.text\" [isChecked]=\"item.isChecked || false\"\n [isSwitch]=\"item.isSwitch || false\"\n [wrapperClasses]=\"'dropdown-item' + (item.isDisabled ? ' disabled' : '') + (item.isActive ? ' active' : '')\"></upd-checkbox>\n }\n @case ('with-toolbar') {\n <div class=\"dropdown-item\" [class.disabled]=\"item.isDisabled\" [class.active]=\"item.isActive\" (click)=\"onSelect(item)\">\n @if (!!item.icon) {\n <upd-icon [model]=\"item.icon\" customClasses=\"dropdown-item-icon\"></upd-icon>\n }\n\n @if (!!item.leftBoxText || !!item.leftBoxImage) {\n <span style=\"background-image: url({{item.leftBoxImage}})\"\n class=\"avatar avatar-xs rounded me-2\">{{ item.leftBoxText }}</span>\n }\n\n <span [ngClass]=\"overflowClass\">\n {{ textService.getText(item.text) }}\n </span>\n\n @if ((item.actionButtons?.length || 0) > 0) {\n <div class=\"ms-auto d-flex\" [class.btn-group]=\"item.toolbarType === 'grouped'\"\n [class.gap-1]=\"item.toolbarType === 'spaced'\">\n @for (btn of item.actionButtons; track btn) {\n <upd-button [model]=\"adaptAction(btn, item)\"></upd-button>\n }\n </div>\n }\n\n @if (!!item.badgeColor) {\n <span class=\"badge bg-{{item.badgeColor}} ms-auto\">{{ item.badgeText }}</span>\n }\n </div>\n }\n }\n}\n\n<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdRadioModule } from '@updevs/components/form-controls/radio';\nimport { UpdCheckboxModule } from '@updevs/components/form-controls/checkbox';\n\nimport { DropdownComponent } from './dropdown.component';\n\n@NgModule({\n imports: [\n CommonModule,\n UpdIconsModule,\n UpdRadioModule,\n UpdCheckboxModule,\n UpdButtonModule\n ],\n declarations: [\n DropdownComponent\n ],\n exports: [\n DropdownComponent\n ]\n})\nexport class UpdDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, viewChild, ElementRef, input, computed, inject, Renderer2, NgZone, effect, RendererStyleFlags2, Output, HostBinding, Directive, Input, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
2
|
+
import { EventEmitter, viewChild, ElementRef, input, computed, inject, Renderer2, NgZone, Injector, effect, afterNextRender, RendererStyleFlags2, Output, HostBinding, Directive, Input, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
3
3
|
import { DomEventsService, PositioningService, UpdCoreLayoutModule } from '@updevs/sdk/layout';
|
|
4
4
|
import { Tools } from '@updevs/sdk/core';
|
|
5
5
|
import { ColumnSizeHelper } from '@updevs/components';
|
|
@@ -103,6 +103,7 @@ class BaseSelectComponent extends BaseControl {
|
|
|
103
103
|
this.ngZone = inject(NgZone);
|
|
104
104
|
this.domEventsService = inject(DomEventsService);
|
|
105
105
|
this.positioningService = inject(PositioningService);
|
|
106
|
+
this.injector = inject(Injector);
|
|
106
107
|
effect(() => {
|
|
107
108
|
if (!!this.items()) {
|
|
108
109
|
this._setupLocalItems(this.items());
|
|
@@ -133,9 +134,11 @@ class BaseSelectComponent extends BaseControl {
|
|
|
133
134
|
const outsideClickSub = this.domEventsService.startOutsideClickListener(() => this.ngZone.run(() => this.isDropdownOpen = false), this.list()?.nativeElement, true, this.componentBox()?.nativeElement, this.searchBox()?.nativeElement);
|
|
134
135
|
this.addSubscriptions(outsideClickSub);
|
|
135
136
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
afterNextRender(() => {
|
|
138
|
+
this.ngZone.runOutsideAngular(() => this.positioningService
|
|
139
|
+
.computePosition(this.componentBox(), this.list(), { placement: 'bottom' })
|
|
140
|
+
.subscribe(resp => this.updatePosition(resp)));
|
|
141
|
+
}, { injector: this.injector });
|
|
139
142
|
}
|
|
140
143
|
search(term) {
|
|
141
144
|
if (this.hasExternalList) {
|
|
@@ -238,6 +241,9 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
238
241
|
set selected(item) {
|
|
239
242
|
this.currentSelection = item;
|
|
240
243
|
}
|
|
244
|
+
get canTruncateText() {
|
|
245
|
+
return this.shouldTruncateSelectedText === true || this.shouldTruncateSelectedText === undefined;
|
|
246
|
+
}
|
|
241
247
|
constructor() {
|
|
242
248
|
super();
|
|
243
249
|
/**
|
|
@@ -245,6 +251,7 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
245
251
|
*/
|
|
246
252
|
this.useSystemStyle = false;
|
|
247
253
|
this.shouldShowClearButton = true;
|
|
254
|
+
this.shouldTruncateSelectedText = true;
|
|
248
255
|
this.isCompact = false;
|
|
249
256
|
/**
|
|
250
257
|
* Triggered when an item is selected.
|
|
@@ -280,15 +287,17 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
280
287
|
this.selectedItem.emit(undefined);
|
|
281
288
|
}
|
|
282
289
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
283
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SelectComponent, selector: "upd-select", inputs: { useSystemStyle: "useSystemStyle", shouldShowClearButton: "shouldShowClearButton", isCompact: "isCompact", selected: "selected" }, outputs: { selectedItem: "selectedItem" }, usesInheritance: true, ngImport: i0, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span>{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\">\n <upd-icon [model]=\"{tablerIcon:'x'}\"></upd-icon>\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\">\n <upd-icon [model]=\"{tablerIcon:'chevron-down'}\"></upd-icon>\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"
|
|
290
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SelectComponent, selector: "upd-select", inputs: { useSystemStyle: "useSystemStyle", shouldShowClearButton: "shouldShowClearButton", shouldTruncateSelectedText: "shouldTruncateSelectedText", isCompact: "isCompact", selected: "selected" }, outputs: { selectedItem: "selectedItem" }, usesInheritance: true, ngImport: i0, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [class.select-cursor-default]=\"!isDisabled()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span [ngClass]=\"canTruncateText ? 'd-block text-truncate' : ''\">{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\" [class.select-cursor-pointer]=\"!isDisabled()\">\n <upd-icon [model]=\"{tablerIcon:'x'}\"></upd-icon>\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\" [class.select-cursor-pointer]=\"!isDisabled()\">\n <upd-icon [model]=\"{tablerIcon:'chevron-down'}\"></upd-icon>\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [class.select-cursor-pointer]=\"!isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"\n (change)=\"onSystemSelect($event)\">\n @for (item of localItems; track item) {\n @if ((item.children?.length || 0) > 0) {\n <optgroup [label]=\"item.text\">\n @for (child of item.children; track child) {\n <option [attr.selected]=\"!!currentSelection && child.value === currentSelection.value ? true : undefined\"\n [value]=\"child.value\">\n {{ child.text }}\n </option>\n }\n </optgroup>\n } @else {\n <option [attr.selected]=\"!!currentSelection && item.value === currentSelection.value ? true : undefined\"\n [value]=\"item.value\">\n {{ item.text }}\n </option>\n }\n }\n </select>\n</ng-template>\n", styles: [".select-dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e}.select-dropdown-content-open{display:block!important}.select-loader-wrapper{height:24px}.select-loader-wrapper .select-loader{height:24px;width:24px}.select-search-box{position:absolute;z-index:1;padding:.5rem;margin-top:-1px;background:var(--upd-body-bg);border:var(--upd-border-width) var(--upd-border-style) var(--upd-border-color)}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}.compact{padding:.25rem 2rem .25rem .75rem!important}.select-cursor-default{cursor:default}.select-cursor-pointer{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ListComponent, selector: "upd-list", inputs: ["items", "shouldOverflow", "isFlush", "isVisible", "isHoverable", "shouldDisplayItemsCounter", "wrapperClasses", "maxHeight"], outputs: ["checkboxChanged", "selectedItem"] }, { kind: "component", type: i3.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }, { kind: "directive", type: i3.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i4.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i5.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "directive", type: i6.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
284
291
|
}
|
|
285
292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectComponent, decorators: [{
|
|
286
293
|
type: Component,
|
|
287
|
-
args: [{ selector: 'upd-select', encapsulation: ViewEncapsulation.None, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span>{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\">\n <upd-icon [model]=\"{tablerIcon:'x'}\"></upd-icon>\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\">\n <upd-icon [model]=\"{tablerIcon:'chevron-down'}\"></upd-icon>\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"
|
|
294
|
+
args: [{ selector: 'upd-select', encapsulation: ViewEncapsulation.None, template: "@if (!!labelText) {\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n </div>\n <div class=\"col-auto\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <label [ngClass]=\"labelSizeClasses\">{{ labelText }}</label>\n }\n}\n\n@if (!useSystemStyle) {\n <div class=\"dropdown\" [attr.id]=\"name()\" [ngClass]=\"layoutClasses()\">\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n\n <div #searchBox>\n <div #searchBoxChild [style.visibility]=\"isDropdownOpen ? 'visible' : 'hidden'\" class=\"select-search-box\">\n <upd-input [placeholder]=\"placeholder()\" [isInputGroupFlat]=\"true\" (valueChange)=\"search($event)\">\n <ng-template updInputPrepend>\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </ng-template>\n </upd-input>\n </div>\n </div>\n <upd-list #list [items]=\"listItems\" [maxHeight]=\"dropdownMaxHeight() + 'px'\" (selectedItem)=\"onSelectItem($event)\"\n [wrapperClasses]=\"dropdownClasses\" [isVisible]=\"isDropdownOpen\" [shouldOverflow]=\"true\" [shouldDisplayItemsCounter]=\"true\">\n </upd-list>\n </div>\n} @else {\n @if (!labelText && (!!hintText || !!hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #contentTpl>\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\" [class.disabled]=\"isDisabled()\"\n [class.pe-none]=\"isDisabled()\" [class.select-cursor-default]=\"!isDisabled()\"\n [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\" (click)=\"openDropdown()\">\n @if (!!currentSelection) {\n <span [ngClass]=\"canTruncateText ? 'd-block text-truncate' : ''\">{{ currentSelection.text }}</span>\n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (!!currentSelection && shouldShowClearButton) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\" [class.select-cursor-pointer]=\"!isDisabled()\">\n <upd-icon [model]=\"{tablerIcon:'x'}\"></upd-icon>\n </upd-button>\n }\n @if (!isLoading) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"openDropdown()\"\n customClasses=\"link-secondary ms-2\" [class.select-cursor-pointer]=\"!isDisabled()\">\n <upd-icon [model]=\"{tablerIcon:'chevron-down'}\"></upd-icon>\n </upd-button>\n } @else {\n <div class=\"select-loader-wrapper\">\n <div class=\"spinner-border spinner-border-sm text-muted select-loader\" role=\"status\"></div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #contentDefaultStyleTpl>\n <select class=\"form-select\" [class.compact]=\"isCompact\" [attr.placeholder]=\"placeholder()\" [attr.name]=\"name()\"\n [class.select-cursor-pointer]=\"!isDisabled()\" [attr.disabled]=\"isDisabled() ? 'disabled' : undefined\"\n (change)=\"onSystemSelect($event)\">\n @for (item of localItems; track item) {\n @if ((item.children?.length || 0) > 0) {\n <optgroup [label]=\"item.text\">\n @for (child of item.children; track child) {\n <option [attr.selected]=\"!!currentSelection && child.value === currentSelection.value ? true : undefined\"\n [value]=\"child.value\">\n {{ child.text }}\n </option>\n }\n </optgroup>\n } @else {\n <option [attr.selected]=\"!!currentSelection && item.value === currentSelection.value ? true : undefined\"\n [value]=\"item.value\">\n {{ item.text }}\n </option>\n }\n }\n </select>\n</ng-template>\n", styles: [".select-dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e}.select-dropdown-content-open{display:block!important}.select-loader-wrapper{height:24px}.select-loader-wrapper .select-loader{height:24px;width:24px}.select-search-box{position:absolute;z-index:1;padding:.5rem;margin-top:-1px;background:var(--upd-body-bg);border:var(--upd-border-width) var(--upd-border-style) var(--upd-border-color)}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}.compact{padding:.25rem 2rem .25rem .75rem!important}.select-cursor-default{cursor:default}.select-cursor-pointer{cursor:pointer}\n"] }]
|
|
288
295
|
}], ctorParameters: () => [], propDecorators: { useSystemStyle: [{
|
|
289
296
|
type: Input
|
|
290
297
|
}], shouldShowClearButton: [{
|
|
291
298
|
type: Input
|
|
299
|
+
}], shouldTruncateSelectedText: [{
|
|
300
|
+
type: Input
|
|
292
301
|
}], isCompact: [{
|
|
293
302
|
type: Input
|
|
294
303
|
}], selected: [{
|