@updevs/components 1.0.0-alpha.87 → 1.0.0-alpha.89
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/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +1 -1
- package/esm2022/form-controls/select/components/single/select.component.mjs +51 -42
- package/esm2022/paginator/paginator.component.mjs +1 -1
- package/esm2022/table/components/filter-row/filter-row.component.mjs +1 -1
- package/fesm2022/updevs-components-form-controls-select.mjs +50 -41
- package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -1
- package/fesm2022/updevs-components-form.mjs +1 -1
- package/fesm2022/updevs-components-form.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-table.mjs +1 -1
- package/fesm2022/updevs-components-table.mjs.map +1 -1
- package/form-controls/select/components/single/select.component.d.ts +3 -2
- package/package.json +13 -13
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { viewChild, ElementRef, output, input, computed, signal, inject, Renderer2, NgZone, Injector, effect, afterNextRender, RendererStyleFlags2, HostBinding, Directive, ViewEncapsulation, Component, EventEmitter, Output, NgModule } from '@angular/core';
|
|
2
|
+
import { viewChild, ElementRef, output, input, computed, signal, inject, Renderer2, NgZone, Injector, effect, afterNextRender, RendererStyleFlags2, HostBinding, Directive, model, ViewEncapsulation, Component, EventEmitter, Output, 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';
|
|
@@ -275,34 +275,31 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
275
275
|
this.shouldShowClearButton = input(true);
|
|
276
276
|
this.shouldTruncateSelectedText = input(true);
|
|
277
277
|
this.isCompact = input(false);
|
|
278
|
-
this.value =
|
|
278
|
+
this.value = model();
|
|
279
279
|
this.shouldShowHintWithoutLabel = computed(() => !this.labelText && (!!this.hintText || !!this.hintTemplate()));
|
|
280
280
|
/**
|
|
281
281
|
* Triggered when an item is selected.
|
|
282
282
|
*/
|
|
283
283
|
this.selectedItem = output();
|
|
284
|
+
this.isFetchingMissingItem = false;
|
|
285
|
+
// This effect is the single source of truth for syncing the value with the selection.
|
|
284
286
|
effect(() => {
|
|
285
287
|
const val = this.value();
|
|
286
288
|
const items = this.localItems();
|
|
287
289
|
const getItemFn = this.getItemById();
|
|
288
290
|
// eslint-disable-next-line no-null/no-null
|
|
289
|
-
if (val
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
else if (!!getItemFn) {
|
|
304
|
-
this.fetchMissingItem(val, getItemFn);
|
|
305
|
-
}
|
|
291
|
+
if (val === undefined || val === null) {
|
|
292
|
+
this.currentSelection = undefined;
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
// eslint-disable-next-line eqeqeq
|
|
296
|
+
const item = items.find(i => i.value == val);
|
|
297
|
+
if (!!item) {
|
|
298
|
+
this.currentSelection = item;
|
|
299
|
+
this.isFetchingMissingItem = false;
|
|
300
|
+
}
|
|
301
|
+
else if (!!getItemFn) {
|
|
302
|
+
this.fetchMissingItem(val, getItemFn);
|
|
306
303
|
}
|
|
307
304
|
else {
|
|
308
305
|
this.currentSelection = undefined;
|
|
@@ -314,7 +311,7 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
314
311
|
const val = this.value();
|
|
315
312
|
// eslint-disable-next-line eqeqeq
|
|
316
313
|
const hasCurrent = val !== undefined && this.localItems().some(i => i.value == val);
|
|
317
|
-
if (!!parentId && !!loader && !hasCurrent) {
|
|
314
|
+
if (!!parentId && !!loader && !hasCurrent && !this.isFetchingMissingItem) {
|
|
318
315
|
this.loadDependentData(parentId, loader);
|
|
319
316
|
}
|
|
320
317
|
else if (!parentId && !!loader) {
|
|
@@ -325,22 +322,24 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
325
322
|
onSelectItem(item) {
|
|
326
323
|
this._currentTerm = item.text;
|
|
327
324
|
this.isDropdownOpen = false;
|
|
325
|
+
let selectedItem;
|
|
328
326
|
for (const localBackupItem of this._localBackupItems) {
|
|
329
327
|
if ((localBackupItem.children?.length || 0) > 0) {
|
|
330
328
|
// eslint-disable-next-line eqeqeq
|
|
331
|
-
|
|
332
|
-
if (!!
|
|
329
|
+
selectedItem = localBackupItem.children?.find(c => c.value == item.id);
|
|
330
|
+
if (!!selectedItem) {
|
|
333
331
|
break;
|
|
334
332
|
}
|
|
335
333
|
// eslint-disable-next-line eqeqeq
|
|
336
334
|
}
|
|
337
335
|
else if (localBackupItem.value == item.id) {
|
|
338
|
-
|
|
336
|
+
selectedItem = localBackupItem;
|
|
339
337
|
break;
|
|
340
338
|
}
|
|
341
339
|
}
|
|
342
|
-
this.
|
|
343
|
-
this.
|
|
340
|
+
this.value.set(selectedItem?.value);
|
|
341
|
+
this.selectedItem.emit(selectedItem);
|
|
342
|
+
this._updateFormControl(selectedItem?.value, true);
|
|
344
343
|
}
|
|
345
344
|
search(term) {
|
|
346
345
|
const parentId = this.parentSelectedId();
|
|
@@ -353,33 +352,33 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
353
352
|
}
|
|
354
353
|
}
|
|
355
354
|
clearSelection() {
|
|
356
|
-
this.currentSelection = undefined;
|
|
357
355
|
this._currentTerm = undefined;
|
|
356
|
+
this.value.set(undefined);
|
|
358
357
|
this.selectedItem.emit(undefined);
|
|
359
358
|
this._updateFormControl(undefined, true);
|
|
360
359
|
}
|
|
361
360
|
onSystemSelect(event) {
|
|
362
361
|
// eslint-disable-next-line eqeqeq
|
|
363
|
-
|
|
364
|
-
this.
|
|
362
|
+
const selectedItem = this.localItems().find(c => c.value == event.target.value);
|
|
363
|
+
this.value.set(selectedItem?.value);
|
|
364
|
+
this.selectedItem.emit(selectedItem);
|
|
365
|
+
this._updateFormControl(selectedItem?.value, true);
|
|
365
366
|
}
|
|
366
367
|
_getValue() {
|
|
367
|
-
return this.
|
|
368
|
+
return this.value();
|
|
368
369
|
}
|
|
369
370
|
_updateValue(value) {
|
|
370
|
-
|
|
371
|
-
if (value === undefined || value === null) {
|
|
372
|
-
this.currentSelection = undefined;
|
|
373
|
-
return;
|
|
374
|
-
}
|
|
375
|
-
// eslint-disable-next-line eqeqeq
|
|
376
|
-
this.currentSelection = this.localItems().find(i => i.value == value);
|
|
371
|
+
this.value.set(value);
|
|
377
372
|
}
|
|
378
373
|
loadDependentData(parentId, loader, term) {
|
|
379
374
|
loader(parentId, term).subscribe({
|
|
380
375
|
next: (items) => {
|
|
381
376
|
this._setupLocalItems(items);
|
|
382
|
-
this.
|
|
377
|
+
const val = this.value();
|
|
378
|
+
// eslint-disable-next-line eqeqeq
|
|
379
|
+
if (val !== undefined && !items.some(i => i.value == val) && !this.getItemById()) {
|
|
380
|
+
this.clearSelection();
|
|
381
|
+
}
|
|
383
382
|
},
|
|
384
383
|
error: () => {
|
|
385
384
|
this._setupLocalItems([]);
|
|
@@ -392,28 +391,38 @@ class SelectComponent extends BaseSelectComponent {
|
|
|
392
391
|
this.clearSelection();
|
|
393
392
|
}
|
|
394
393
|
fetchMissingItem(id, getItemFn) {
|
|
394
|
+
this.isFetchingMissingItem = true;
|
|
395
395
|
getItemFn(id).subscribe({
|
|
396
396
|
next: (item) => {
|
|
397
397
|
if (!!item) {
|
|
398
|
-
|
|
398
|
+
// eslint-disable-next-line eqeqeq
|
|
399
|
+
if (this.value() == id) {
|
|
400
|
+
this.currentSelection = item;
|
|
401
|
+
}
|
|
399
402
|
const currentItems = this.localItems();
|
|
400
403
|
// eslint-disable-next-line eqeqeq
|
|
401
404
|
if (!currentItems.find(i => i.value == item.value)) {
|
|
402
405
|
this._setupLocalItems([...currentItems, item]);
|
|
403
406
|
}
|
|
407
|
+
// eslint-disable-next-line eqeqeq
|
|
404
408
|
}
|
|
405
|
-
else {
|
|
409
|
+
else if (this.value() == id) {
|
|
406
410
|
this.currentSelection = undefined;
|
|
407
411
|
}
|
|
412
|
+
this.isFetchingMissingItem = false;
|
|
408
413
|
this.selectedItem.emit(this.currentSelection);
|
|
409
414
|
},
|
|
410
415
|
error: () => {
|
|
411
|
-
|
|
416
|
+
// eslint-disable-next-line eqeqeq
|
|
417
|
+
if (this.value() == id) {
|
|
418
|
+
this.currentSelection = undefined;
|
|
419
|
+
}
|
|
420
|
+
this.isFetchingMissingItem = false;
|
|
412
421
|
}
|
|
413
422
|
});
|
|
414
423
|
}
|
|
415
424
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
416
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SelectComponent, selector: "upd-select", inputs: { useSystemStyle: { classPropertyName: "useSystemStyle", publicName: "useSystemStyle", isSignal: true, isRequired: false, transformFunction: null }, shouldShowClearButton: { classPropertyName: "shouldShowClearButton", publicName: "shouldShowClearButton", isSignal: true, isRequired: false, transformFunction: null }, shouldTruncateSelectedText: { classPropertyName: "shouldTruncateSelectedText", publicName: "shouldTruncateSelectedText", isSignal: true, isRequired: false, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, 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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\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 [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\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 [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\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>", 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 }); }
|
|
425
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SelectComponent, selector: "upd-select", inputs: { useSystemStyle: { classPropertyName: "useSystemStyle", publicName: "useSystemStyle", isSignal: true, isRequired: false, transformFunction: null }, shouldShowClearButton: { classPropertyName: "shouldShowClearButton", publicName: "shouldShowClearButton", isSignal: true, isRequired: false, transformFunction: null }, shouldTruncateSelectedText: { classPropertyName: "shouldTruncateSelectedText", publicName: "shouldTruncateSelectedText", isSignal: true, isRequired: false, transformFunction: null }, isCompact: { classPropertyName: "isCompact", publicName: "isCompact", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", 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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\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 [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\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 [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\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>", 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 }); }
|
|
417
426
|
}
|
|
418
427
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SelectComponent, decorators: [{
|
|
419
428
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updevs-components-form-controls-select.mjs","sources":["../../../../libs/components/form-controls/select/src/models/defaults.ts","../../../../libs/components/form-controls/select/src/models/abstractions/base-select.component.ts","../../../../libs/components/form-controls/select/src/components/single/select.component.ts","../../../../libs/components/form-controls/select/src/components/single/select.component.html","../../../../libs/components/form-controls/select/src/components/multiple/select-multiple.component.ts","../../../../libs/components/form-controls/select/src/components/multiple/select-multiple.component.html","../../../../libs/components/form-controls/select/src/upd-select.module.ts","../../../../libs/components/form-controls/select/src/updevs-components-form-controls-select.ts"],"sourcesContent":["import { HorizontalVerticalType } from '@updevs/components';\n\nexport class Defaults {\n static dropdownMaxHeight = 300;\n static typeaheadDebounce = 200;\n static shouldAutoSearch = true;\n static shouldCloseOnOutsideClick = true;\n static layout: HorizontalVerticalType = 'vertical';\n}\n","import {\n Directive,\n HostBinding,\n ElementRef,\n OnInit,\n inject,\n NgZone,\n Renderer2,\n RendererStyleFlags2,\n input,\n viewChild,\n computed,\n effect,\n afterNextRender,\n Injector,\n output,\n signal\n} from '@angular/core';\nimport { DomEventsService, PositioningService, ComputePositionResult } from '@updevs/sdk/layout';\nimport { Tools } from '@updevs/sdk/core';\nimport { BaseSearchStore, ObservableSearchType } from '@updevs/sdk/stores';\nimport { HorizontalVerticalType, ColumnSizeHelper } from '@updevs/components';\nimport { ListItem } from '@updevs/components/list';\nimport { BaseControl } from '@updevs/components/form-controls/abstractions';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { tap, debounceTime, Subject } from 'rxjs';\n\nimport { SelectItem } from '../select-item';\nimport { Defaults } from '../defaults';\nimport { GetItemByIdType, ParentLoaderType } from '../types';\n\nimport Utils = Tools.Utils;\n\n@Directive()\nexport abstract class BaseSelectComponent extends BaseControl implements OnInit {\n @HostBinding('class') get wrapperClasses() {\n return this.hostWrapperClasses();\n }\n\n readonly componentBox = viewChild('componentBox', { read: ElementRef });\n readonly searchBox = viewChild('searchBox', { read: ElementRef });\n readonly searchBoxChild = viewChild('searchBoxChild', { read: ElementRef });\n readonly list = viewChild('list', { read: ElementRef });\n\n readonly dropdownOpenStatusChange = output<boolean>();\n /**\n * Select items.\n * If provided, the select will be considered static.\n */\n readonly items = input<SelectItem[]>();\n /**\n * Store used to load/filter the items.\n */\n readonly store = input<BaseSearchStore>();\n /**\n * Observable used to load/filter the items.\n */\n readonly observable = input<ObservableSearchType>();\n /**\n * Name of the property in the object that represents the ID/key of the option.\n * **Note:** used only for remote data.\n */\n readonly itemKey = input<string>();\n /**\n * Name of the property in the object that represents the value/description of the option.\n * **Note:** used only for remote data.\n */\n readonly itemValue = input<string>();\n /**\n * Maximum height of the dropdown.\n */\n readonly dropdownMaxHeight = input(Defaults.dropdownMaxHeight);\n readonly typeaheadDebounce = input(Defaults.typeaheadDebounce);\n readonly shouldAutoSearch = input(Defaults.shouldAutoSearch);\n readonly shouldCloseOnOutsideClick = input(Defaults.shouldCloseOnOutsideClick);\n readonly layout = input<HorizontalVerticalType>(Defaults.layout);\n /**\n * Value coming from a parent field when the rule `AttachmentTypeEnum.ParentLoad` is active.\n * `upd-select` can use it to fetch the dependent list.\n */\n readonly parentValue = input();\n readonly parentSelectedId = input<OptionalType<any>>();\n readonly parentDependentLoader = input<ParentLoaderType>();\n readonly getItemById = input<GetItemByIdType>();\n\n layoutClasses = computed(() => this.layout() === 'horizontal' ? ['col', 'align-self-center'] : []);\n isLoading = false;\n localItems = signal<SelectItem[]>([]);\n listItems: ListItem[] = [];\n dropdownClasses = 'select-dropdown-content remove-top-radius';\n get isDropdownOpen(): boolean {\n return this._isDropdownOpen;\n }\n set isDropdownOpen(value: boolean) {\n this._isDropdownOpen = value;\n\n this.dropdownOpenStatusChange.emit(value);\n\n if (value) {\n this.dropdownClasses += ' select-dropdown-content-open';\n } else {\n this.dropdownClasses = this.dropdownClasses.replace(' select-dropdown-content-open', '');\n }\n }\n get labelSizeClasses(): string {\n if (this.layout() !== 'horizontal') {\n return 'form-label';\n }\n\n return ColumnSizeHelper.getClasses(\n 'col-form-label',\n ColumnSizeHelper.getSizeClasses(this.labelColSize(), 3)\n );\n }\n\n protected _currentTerm?: string;\n protected _localBackupItems: SelectItem[] = [];\n\n private hasInternalList = false;\n private _isDropdownOpen = false;\n private hostWrapperClasses = computed(() => this.layout() === 'horizontal' ? 'row' : '');\n private previousParentValue?: any;\n private readonly searchInputSubject = new Subject<string>();\n private readonly renderer = inject(Renderer2);\n private readonly ngZone = inject(NgZone);\n private readonly domEventsService = inject(DomEventsService);\n private readonly positioningService = inject(PositioningService);\n private readonly injector = inject(Injector);\n\n protected constructor() {\n super();\n\n effect(() => {\n if (!!this.items()) {\n this._setupLocalItems(this.items()!);\n }\n\n if (this.parentValue() !== this.previousParentValue) {\n this.previousParentValue = this.parentValue();\n\n this.clearSelection();\n this.search();\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n this.hasInternalList = !this.observable() && !this.store() && !this.parentDependentLoader();\n\n if (this.shouldAutoSearch()) {\n if (this.hasInternalList) {\n this._setupLocalItems(this.items()!);\n } else {\n this.searchExternal();\n }\n }\n\n if (this.hasInternalList) {\n return;\n }\n\n const typeaheadSubscription = this.searchInputSubject\n .pipe(\n tap(value => this._currentTerm = value),\n debounceTime(this.typeaheadDebounce())\n )\n .subscribe(() => this.searchExternal());\n\n this.addSubscriptions(typeaheadSubscription);\n }\n\n openDropdown(): void {\n this.isDropdownOpen = true;\n\n if (this.shouldCloseOnOutsideClick()) {\n const outsideClickSub = this.domEventsService.startOutsideClickListener(\n () => this.ngZone.run(() => this.isDropdownOpen = false),\n this.list()?.nativeElement,\n true,\n this.componentBox()?.nativeElement,\n this.searchBox()?.nativeElement\n );\n this.addSubscriptions(outsideClickSub);\n }\n\n afterNextRender(() => {\n this.ngZone.runOutsideAngular(() =>\n this.positioningService\n .computePosition(this.componentBox()!, this.list()!, { placement: 'bottom' })\n .subscribe(resp => this.updatePosition(resp))\n );\n }, { injector: this.injector });\n }\n\n search(term?: string): void {\n if (this.hasInternalList) {\n this._currentTerm = term;\n this.searchLocal();\n } else {\n this.searchInputSubject.next(term || '');\n }\n }\n\n protected _setupLocalItems(items: SelectItem[]): void {\n const copiedItems: SelectItem[] = Utils.deepCopy(items);\n\n this.localItems.set(copiedItems);\n\n this._localBackupItems = Utils.deepCopy(items);\n const tempItems: ListItem[] = [];\n\n for (const item of this._localBackupItems) {\n const listItem = this.getListItem(item);\n item.listItem = Object.assign(listItem, {});\n\n tempItems.push(listItem);\n }\n\n this.listItems = [...tempItems];\n this.isLoading = false;\n }\n\n private searchLocal(): void {\n if (!this._currentTerm) {\n this.listItems = Utils.deepCopy(this._localBackupItems.map(li => li.listItem!));\n this.localItems.set(Utils.deepCopy(this._localBackupItems));\n\n return;\n }\n\n this.ngZone.run(() =>\n this.listItems = Utils\n .deepCopy<SelectItem[]>(this._localBackupItems)\n .filter(si => {\n let hasChildrenInSearch = false;\n\n if ((si.children?.length || 0) > 0) {\n hasChildrenInSearch = si.children!.filter(\n ci => ci.text!.toLowerCase().includes(this._currentTerm!.toLowerCase())\n ).length > 0;\n }\n\n return si.text!.toLowerCase().includes(this._currentTerm!.toLowerCase()) || hasChildrenInSearch;\n })\n .map(si => {\n const bkpItem = this._localBackupItems.find(lbi => lbi.value === si.value);\n\n if ((bkpItem?.children?.length || 0) > 0) {\n si.children = [...bkpItem!.children!].filter(\n ci => ci.text!.toLowerCase().includes(this._currentTerm!.toLowerCase())\n );\n }\n\n return this.getListItem(si);\n })\n );\n }\n\n private searchExternal(): void {\n this.isLoading = true;\n const request = { description: this._currentTerm };\n const parentLoader = this.parentDependentLoader();\n const parentId = this.parentSelectedId() ?? this.parentValue();\n\n if (!!parentLoader && !!parentId) {\n parentLoader(parentId, this._currentTerm).subscribe({\n next: (items: SelectItem[]) => this._setupLocalItems(items),\n error: () => this._setupLocalItems([])\n });\n return;\n }\n\n const observable = !!this.observable()\n ? this.observable()!(request, this.parentValue())\n : this.store()!.search(request, this.parentValue());\n\n observable.subscribe(r => {\n const items: SelectItem[] = [];\n\n r.records.forEach(item => {\n items.push({\n value: item[this.itemKey()!],\n text: item[this.itemValue()!],\n objectData: item\n });\n });\n this._setupLocalItems(items);\n });\n }\n\n private getListItem(item: SelectItem): ListItem {\n let listItem: ListItem;\n\n if (!!item.listItem) {\n listItem = item.listItem;\n listItem.id = item.value;\n listItem.text = item.text;\n } else {\n listItem = {\n id: item.value,\n text: item.text\n };\n }\n\n if ((item.children?.length || 0) > 0) {\n listItem.children = [...item.children!].map(c => this.getListItem(c));\n }\n\n return listItem;\n }\n\n private updatePosition(result: ComputePositionResult): void {\n const componentBox = this.componentBox()!.nativeElement.getBoundingClientRect();\n const searchBoxChildElement = this.searchBoxChild()?.nativeElement;\n const ddElement = this.list()!.nativeElement;\n\n this.renderer.setStyle(searchBoxChildElement, 'width', `${Math.abs(componentBox.width)}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'top', `${result.y + searchBoxChildElement.scrollHeight}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'left', 0, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'width', `${Math.abs(componentBox.width)}px`, RendererStyleFlags2.Important);\n }\n\n abstract clearSelection(): void;\n abstract onSelectItem(item: ListItem): void;\n}\n","import { Component, ViewEncapsulation, computed, effect, input, output } from '@angular/core';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { ListItem } from '@updevs/components/list';\nimport { Observable } from 'rxjs';\n\nimport { BaseSelectComponent } from '../../models/abstractions/base-select.component';\nimport { SelectItem } from '../../models/select-item';\nimport { ParentLoaderType } from '../../models/types';\n\n@Component({\n selector: 'upd-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent extends BaseSelectComponent {\n /**\n * If true, it'll use the default style of the OS, no search capabilities.\n */\n readonly useSystemStyle = input(false);\n readonly shouldShowClearButton = input(true);\n readonly shouldTruncateSelectedText = input<OptionalType<boolean>>(true);\n readonly isCompact = input(false);\n readonly value = input<any>();\n\n readonly shouldShowHintWithoutLabel = computed(() => !this.labelText && (!!this.hintText || !!this.hintTemplate()));\n\n /**\n * Triggered when an item is selected.\n */\n readonly selectedItem = output<OptionalType<SelectItem>>();\n\n currentSelection?: SelectItem;\n get canTruncateText(): boolean {\n return this.shouldTruncateSelectedText() === true || this.shouldTruncateSelectedText() === undefined;\n }\n\n constructor() {\n super();\n\n effect(() => {\n const val = this.value();\n const items = this.localItems();\n const getItemFn = this.getItemById();\n\n // eslint-disable-next-line no-null/no-null\n if (val !== undefined && val !== null) {\n if (items.length > 0) {\n // eslint-disable-next-line eqeqeq\n const item = items.find(i => i.value == val);\n\n if (!!item) {\n this.currentSelection = item;\n } else if (!!getItemFn) {\n this.fetchMissingItem(val, getItemFn);\n } else {\n this.currentSelection = undefined;\n }\n } else if (!!getItemFn) {\n this.fetchMissingItem(val, getItemFn);\n }\n } else {\n this.currentSelection = undefined;\n }\n });\n\n effect(() => {\n const parentId = this.parentSelectedId();\n const loader = this.parentDependentLoader();\n const val = this.value();\n // eslint-disable-next-line eqeqeq\n const hasCurrent = val !== undefined && this.localItems().some(i => i.value == val);\n\n if (!!parentId && !!loader && !hasCurrent) {\n this.loadDependentData(parentId, loader);\n } else if (!parentId && !!loader) {\n this.clearData();\n }\n });\n }\n\n override onSelectItem(item: ListItem): void {\n this._currentTerm = item.text;\n this.isDropdownOpen = false;\n\n for (const localBackupItem of this._localBackupItems) {\n if ((localBackupItem.children?.length || 0) > 0) {\n // eslint-disable-next-line eqeqeq\n this.currentSelection = localBackupItem.children?.find(c => c.value == item.id);\n\n if (!!this.currentSelection) {\n break;\n }\n // eslint-disable-next-line eqeqeq\n } else if (localBackupItem.value == item.id) {\n this.currentSelection = localBackupItem;\n break;\n }\n }\n\n this.selectedItem.emit(this.currentSelection);\n this._updateFormControl(this.currentSelection?.value, true);\n }\n\n override search(term?: string): void {\n const parentId = this.parentSelectedId();\n const loader = this.parentDependentLoader();\n\n if (!!parentId && !!loader) {\n this.loadDependentData(parentId, loader, term);\n } else {\n super.search(term);\n }\n }\n\n override clearSelection(): void {\n this.currentSelection = undefined;\n this._currentTerm = undefined;\n\n this.selectedItem.emit(undefined);\n this._updateFormControl(undefined, true);\n }\n\n onSystemSelect(event: any): void {\n // eslint-disable-next-line eqeqeq\n this.currentSelection = this.localItems().find(c => c.value == event.target.value);\n this.selectedItem.emit(this.currentSelection);\n }\n\n protected _getValue(): any {\n return this.currentSelection?.value;\n }\n\n protected _updateValue(value: any): void {\n // eslint-disable-next-line no-null/no-null\n if (value === undefined || value === null) {\n this.currentSelection = undefined;\n return;\n }\n\n // eslint-disable-next-line eqeqeq\n this.currentSelection = this.localItems().find(i => i.value == value);\n }\n\n private loadDependentData(parentId: any, loader: ParentLoaderType, term?: string): void {\n loader(parentId, term).subscribe({\n next: (items) => {\n this._setupLocalItems(items);\n this.clearSelection();\n },\n error: () => {\n this._setupLocalItems([]);\n this.clearSelection();\n }\n });\n }\n\n private clearData(): void {\n this._setupLocalItems([]);\n this.clearSelection();\n }\n\n private fetchMissingItem(id: any, getItemFn: (id: any) => Observable<SelectItem>): void {\n getItemFn(id).subscribe({\n next: (item) => {\n if (!!item) {\n this.currentSelection = item;\n const currentItems = this.localItems();\n\n // eslint-disable-next-line eqeqeq\n if (!currentItems.find(i => i.value == item.value)) {\n this._setupLocalItems([...currentItems, item]);\n }\n } else {\n this.currentSelection = undefined;\n }\n\n this.selectedItem.emit(this.currentSelection);\n },\n error: () => {\n this.currentSelection = undefined;\n }\n });\n }\n}\n","@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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\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 [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\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 [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\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>","import { Component, ViewEncapsulation, EventEmitter, Output, input, effect } from '@angular/core';\nimport { ListItem } from '@updevs/components/list';\n\nimport { BaseSelectComponent } from '../../models/abstractions/base-select.component';\nimport { SelectItem } from '../../models/select-item';\n\n@Component({\n selector: 'upd-select-multiple',\n templateUrl: './select-multiple.component.html',\n styleUrls: ['./select-multiple.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectMultipleComponent extends BaseSelectComponent {\n /**\n * Returns the selected items.\n * Triggered when items are selected.\n */\n @Output() readonly selectedItems = new EventEmitter<SelectItem[]>();\n /**\n * Returns the selected Ids.\n * Triggered when items are selected.\n */\n @Output() readonly selectedIds = new EventEmitter<any[]>();\n\n /**\n * An array of primitive values to set the selection programmatically.\n */\n readonly selectedValues = input<SelectItem[]>();\n\n currentSelection: SelectItem[] = [];\n\n constructor() {\n super();\n\n effect(() => {\n const values = this.selectedValues();\n\n if (!!values && values.length > 0) {\n this.currentSelection = this._localBackupItems.filter(item => values.includes(item.value));\n this.updateActiveItemsOnList();\n }\n });\n }\n\n clearSelection(): void {\n this.currentSelection = [];\n this._currentTerm = undefined;\n\n this.updateActiveItemsOnList();\n this._updateFormControl([], true);\n }\n\n onSelectItem(item: ListItem): void {\n // eslint-disable-next-line eqeqeq\n const selectedItem = this.currentSelection.find(cs => cs.value == item.id);\n\n if (!!selectedItem) {\n this.onRemoveItem(selectedItem);\n return;\n }\n\n for (const localBackupItem of this._localBackupItems) {\n if ((localBackupItem.children?.length || 0) > 0) {\n // eslint-disable-next-line eqeqeq\n const child = localBackupItem.children?.find(c => c.value == item.id);\n\n if (!!child) {\n this.currentSelection.push(child);\n break;\n }\n // eslint-disable-next-line eqeqeq\n } else if (localBackupItem.value == item.id) {\n this.currentSelection.push(localBackupItem);\n break;\n }\n }\n\n this.updateActiveItemsOnList();\n\n const currentSelectedIds = this.currentSelection.map(cs => cs.value);\n\n this.selectedItems.emit(this.currentSelection);\n this.selectedIds.emit(currentSelectedIds);\n this._updateFormControl(currentSelectedIds, true);\n }\n\n onRemoveItem(item: SelectItem): void {\n // eslint-disable-next-line eqeqeq\n const idx = this.currentSelection.findIndex(cs => cs.value == item.value);\n\n this.currentSelection.splice(idx, 1);\n this.updateActiveItemsOnList();\n this._updateFormControl(this.currentSelection.map(cs => cs.value), true);\n }\n\n protected _getValue(): any {\n return this.currentSelection.map(item => item.value);\n }\n\n protected _updateValue(value: any): void {\n if (!Array.isArray(value)) {\n this.currentSelection = [];\n return;\n }\n\n this.currentSelection = this._localBackupItems.filter(item => value.includes(item.value));\n this.updateActiveItemsOnList();\n }\n\n private updateActiveItemsOnList(): void {\n for (const backupItem of this._localBackupItems) {\n // eslint-disable-next-line eqeqeq\n const selectedItem = this.currentSelection.find(cs => cs.value == backupItem.value);\n\n if (!!backupItem.listItem) {\n backupItem.listItem.isActive = !!selectedItem;\n }\n }\n\n this._setupLocalItems(this._localBackupItems);\n }\n}\n","@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<div class=\"dropdown\" [attr.id]=\"name()\">\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 @for (sel of currentSelection; track sel) {\n <span class=\"badge bg-primary select-multiple-value\">{{ sel.text }}\n <upd-button [isIcon]=\"true\" [shouldIgnoreBtnClass]=\"true\" (clicked)=\"onRemoveItem(sel)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-button></span> \n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (currentSelection.length > 0) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\">\n <upd-icon 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 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 <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","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdCoreLayoutModule } from '@updevs/sdk/layout';\nimport { UpdListModule } from '@updevs/components/list';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdInputModule } from '@updevs/components/form-controls/input';\nimport { UpdPopoverModule } from '@updevs/components/popover';\n\nimport { SelectComponent } from './components/single/select.component';\nimport { SelectMultipleComponent } from './components/multiple/select-multiple.component';\n\n@NgModule({\n imports: [\n CommonModule,\n UpdCoreLayoutModule,\n UpdListModule,\n UpdInputModule,\n UpdIconsModule,\n UpdButtonModule,\n UpdPopoverModule,\n TranslocoModule\n ],\n declarations: [\n SelectComponent,\n SelectMultipleComponent\n ],\n exports: [\n SelectComponent,\n SelectMultipleComponent\n ]\n})\nexport class UpdSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;MAEa,QAAQ,CAAA;aACV,IAAiB,CAAA,iBAAA,GAAG,GAAG,CAAC;aACxB,IAAiB,CAAA,iBAAA,GAAG,GAAG,CAAC;aACxB,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;aACxB,IAAyB,CAAA,yBAAA,GAAG,IAAI,CAAC;aACjC,IAAM,CAAA,MAAA,GAA2B,UAAU,CAAC;;;ACwBvD,IAAO,KAAK,GAAG,KAAK,CAAC,KAAK;AAGpB,MAAgB,mBAAoB,SAAQ,WAAW,CAAA;AACzD,IAAA,IAA0B,cAAc,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;;AAsDpC,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,eAAe;;IAE/B,IAAI,cAAc,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAE5B,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;QAEzC,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,eAAe,IAAI,+BAA+B;;aACpD;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;;;AAGhG,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,YAAY,EAAE;AAChC,YAAA,OAAO,YAAY;;AAGvB,QAAA,OAAO,gBAAgB,CAAC,UAAU,CAC9B,gBAAgB,EAChB,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAC1D;;AAiBL,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QA3FF,IAAY,CAAA,YAAA,GAAG,SAAS,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC9D,IAAS,CAAA,SAAA,GAAG,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACxD,IAAc,CAAA,cAAA,GAAG,SAAS,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAClE,IAAI,CAAA,IAAA,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAE9C,IAAwB,CAAA,wBAAA,GAAG,MAAM,EAAW;AACrD;;;AAGG;QACM,IAAK,CAAA,KAAA,GAAG,KAAK,EAAgB;AACtC;;AAEG;QACM,IAAK,CAAA,KAAA,GAAG,KAAK,EAAmB;AACzC;;AAEG;QACM,IAAU,CAAA,UAAA,GAAG,KAAK,EAAwB;AACnD;;;AAGG;QACM,IAAO,CAAA,OAAA,GAAG,KAAK,EAAU;AAClC;;;AAGG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,EAAU;AACpC;;AAEG;AACM,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACrD,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACnD,QAAA,IAAA,CAAA,yBAAyB,GAAG,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC;AACrE,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAyB,QAAQ,CAAC,MAAM,CAAC;AAChE;;;AAGG;QACM,IAAW,CAAA,WAAA,GAAG,KAAK,EAAE;QACrB,IAAgB,CAAA,gBAAA,GAAG,KAAK,EAAqB;QAC7C,IAAqB,CAAA,qBAAA,GAAG,KAAK,EAAoB;QACjD,IAAW,CAAA,WAAA,GAAG,KAAK,EAAmB;QAE/C,IAAa,CAAA,aAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,GAAG,EAAE,CAAC;QAClG,IAAS,CAAA,SAAA,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAe,EAAE,CAAC;QACrC,IAAS,CAAA,SAAA,GAAe,EAAE;QAC1B,IAAe,CAAA,eAAA,GAAG,2CAA2C;QA2BnD,IAAiB,CAAA,iBAAA,GAAiB,EAAE;QAEtC,IAAe,CAAA,eAAA,GAAG,KAAK;QACvB,IAAe,CAAA,eAAA,GAAG,KAAK;QACvB,IAAkB,CAAA,kBAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,YAAY,GAAG,KAAK,GAAG,EAAE,CAAC;AAEvE,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAU;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAKxC,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC;;YAGxC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,mBAAmB,EAAE;AACjD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,EAAE;gBAE7C,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,MAAM,EAAE;;AAErB,SAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;;IAGnC,QAAQ,GAAA;QACJ,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAE3F,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC;;iBACjC;gBACH,IAAI,CAAC,cAAc,EAAE;;;AAI7B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB;;AAGJ,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC;aAC9B,IAAI,CACD,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EACvC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAEzC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAE3C,QAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC;;IAGhD,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE,EAAE;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CACnE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,EACxD,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa,EAC1B,IAAI,EACJ,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,EAClC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAClC;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;;QAG1C,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAC1B,IAAI,CAAC;AACA,iBAAA,eAAe,CAAC,IAAI,CAAC,YAAY,EAAG,EAAE,IAAI,CAAC,IAAI,EAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;AAC3E,iBAAA,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CACpD;SACJ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAGnC,IAAA,MAAM,CAAC,IAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,WAAW,EAAE;;aACf;YACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;;;AAItC,IAAA,gBAAgB,CAAC,KAAmB,EAAA;QAC1C,MAAM,WAAW,GAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAEvD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;QAEhC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC9C,MAAM,SAAS,GAAe,EAAE;AAEhC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AAE3C,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAG5B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;IAGlB,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,QAAS,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE3D;;AAGJ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MACZ,IAAI,CAAC,SAAS,GAAG;AACZ,aAAA,QAAQ,CAAe,IAAI,CAAC,iBAAiB;aAC7C,MAAM,CAAC,EAAE,IAAG;YACT,IAAI,mBAAmB,GAAG,KAAK;AAE/B,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,mBAAmB,GAAG,EAAE,CAAC,QAAS,CAAC,MAAM,CACrC,EAAE,IAAI,EAAE,CAAC,IAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,WAAW,EAAE,CAAC,CAC1E,CAAC,MAAM,GAAG,CAAC;;AAGhB,YAAA,OAAO,EAAE,CAAC,IAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,WAAW,EAAE,CAAC,IAAI,mBAAmB;AACnG,SAAC;aACA,GAAG,CAAC,EAAE,IAAG;YACN,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;AAE1E,YAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;AACtC,gBAAA,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,OAAQ,CAAC,QAAS,CAAC,CAAC,MAAM,CACxC,EAAE,IAAI,EAAE,CAAC,IAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAa,CAAC,WAAW,EAAE,CAAC,CAC1E;;AAGL,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;SAC9B,CAAC,CACT;;IAGG,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,MAAM,OAAO,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE;AAClD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;QAE9D,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,QAAQ,EAAE;YAC9B,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;gBAChD,IAAI,EAAE,CAAC,KAAmB,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBAC3D,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACxC,aAAA,CAAC;YACF;;AAGJ,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU;AAChC,cAAE,IAAI,CAAC,UAAU,EAAG,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;AAChD,cAAE,IAAI,CAAC,KAAK,EAAG,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAEvD,QAAA,UAAU,CAAC,SAAS,CAAC,CAAC,IAAG;YACrB,MAAM,KAAK,GAAiB,EAAE;AAE9B,YAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAG;gBACrB,KAAK,CAAC,IAAI,CAAC;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAG,CAAC;AAC5B,oBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAG,CAAC;AAC7B,oBAAA,UAAU,EAAE;AACf,iBAAA,CAAC;AACN,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAChC,SAAC,CAAC;;AAGE,IAAA,WAAW,CAAC,IAAgB,EAAA;AAChC,QAAA,IAAI,QAAkB;AAEtB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACxB,YAAA,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK;AACxB,YAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;;aACtB;AACH,YAAA,QAAQ,GAAG;gBACP,EAAE,EAAE,IAAI,CAAC,KAAK;gBACd,IAAI,EAAE,IAAI,CAAC;aACd;;AAGL,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;YAClC,QAAQ,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;AAGzE,QAAA,OAAO,QAAQ;;AAGX,IAAA,cAAc,CAAC,MAA6B,EAAA;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAG,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC/E,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAG,CAAC,aAAa;QAE5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA,EAAA,CAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC;QAC1H,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,CAAG,EAAA,MAAM,CAAC,CAAC,GAAG,qBAAqB,CAAC,YAAY,CAAA,EAAA,CAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC;AAC7H,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA,EAAA,CAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC;;8GA7RhG,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,0sEAKqB,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAChB,UAAU,EACA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,uGAC9B,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FARlC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC;wDAE6B,cAAc,EAAA,CAAA;sBAAvC,WAAW;uBAAC,OAAO;;;ACpBlB,MAAO,eAAgB,SAAQ,mBAAmB,CAAA;AAkBpD,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,0BAA0B,EAAE,KAAK,SAAS;;AAGxG,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAtBX;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC;AACnC,QAAA,IAAA,CAAA,0BAA0B,GAAG,KAAK,CAAwB,IAAI,CAAC;AAC/D,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,IAAK,CAAA,KAAA,GAAG,KAAK,EAAO;QAEpB,IAA0B,CAAA,0BAAA,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAEnH;;AAEG;QACM,IAAY,CAAA,YAAA,GAAG,MAAM,EAA4B;QAUtD,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;;YAGpC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;AACnC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAElB,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;AAE5C,oBAAA,IAAI,CAAC,CAAC,IAAI,EAAE;AACR,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;AACzB,yBAAA,IAAI,CAAC,CAAC,SAAS,EAAE;AACpB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC;;yBAClC;AACH,wBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;;AAElC,qBAAA,IAAI,CAAC,CAAC,SAAS,EAAE;AACpB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC;;;iBAEtC;AACH,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;AAEzC,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC3C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;;YAExB,MAAM,UAAU,GAAG,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;YAEnF,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;AACvC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC;;AACrC,iBAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE;gBAC9B,IAAI,CAAC,SAAS,EAAE;;AAExB,SAAC,CAAC;;AAGG,IAAA,YAAY,CAAC,IAAc,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,QAAA,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAClD,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;;gBAE7C,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;AAE/E,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBACzB;;;;iBAGD,IAAI,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE;AACzC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;gBACvC;;;QAIR,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC7C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC;;AAGtD,IAAA,MAAM,CAAC,IAAa,EAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAE3C,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,EAAE;YACxB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;;aAC3C;AACH,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;;;IAIjB,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAE7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC;;AAG5C,IAAA,cAAc,CAAC,KAAU,EAAA;;QAErB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;;IAGvC,SAAS,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK;;AAG7B,IAAA,YAAY,CAAC,KAAU,EAAA;;QAE7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACvC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;YACjC;;;QAIJ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC;;AAGjE,IAAA,iBAAiB,CAAC,QAAa,EAAE,MAAwB,EAAE,IAAa,EAAA;AAC5E,QAAA,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,cAAc,EAAE;aACxB;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,EAAE;;AAE5B,SAAA,CAAC;;IAGE,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE;;IAGjB,gBAAgB,CAAC,EAAO,EAAE,SAA8C,EAAA;AAC5E,QAAA,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AACpB,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACX,gBAAA,IAAI,CAAC,CAAC,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;;AAGtC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;wBAChD,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;;;qBAE/C;AACH,oBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;gBAGrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;aAChD;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;AAExC,SAAA,CAAC;;8GAvKG,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,82BCf5B,w7KAoHc,EAAA,MAAA,EAAA,CAAA,25BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDrGD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACI,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,w7KAAA,EAAA,MAAA,EAAA,CAAA,25BAAA,CAAA,EAAA;;;AEDnC,MAAO,uBAAwB,SAAQ,mBAAmB,CAAA;AAmB5D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAnBX;;;AAGG;AACgB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAgB;AACnE;;;AAGG;AACgB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAS;AAE1D;;AAEG;QACM,IAAc,CAAA,cAAA,GAAG,KAAK,EAAgB;QAE/C,IAAgB,CAAA,gBAAA,GAAiB,EAAE;QAK/B,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;YAEpC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1F,IAAI,CAAC,uBAAuB,EAAE;;AAEtC,SAAC,CAAC;;IAGN,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QAE7B,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC;;AAGrC,IAAA,YAAY,CAAC,IAAc,EAAA;;QAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;AAE1E,QAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC/B;;AAGJ,QAAA,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAClD,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;;gBAE7C,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;AAErE,gBAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;oBACjC;;;;iBAGD,IAAI,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE;AACzC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;gBAC3C;;;QAIR,IAAI,CAAC,uBAAuB,EAAE;AAE9B,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC;QAEpE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,IAAI,CAAC;;AAGrD,IAAA,YAAY,CAAC,IAAgB,EAAA;;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAEzE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,uBAAuB,EAAE;QAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;;IAGlE,SAAS,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;;AAG9C,IAAA,YAAY,CAAC,KAAU,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;YAC1B;;QAGJ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,uBAAuB,EAAE;;IAG1B,uBAAuB,GAAA;AAC3B,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,iBAAiB,EAAE;;YAE7C,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;AAEnF,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACvB,UAAU,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,YAAY;;;AAIrD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC;;8GA3GxC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,0TCZpC,0kGA6DA,EAAA,MAAA,EAAA,CAAA,64BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDjDa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACI,qBAAqB,EAAA,aAAA,EAGhB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,0kGAAA,EAAA,MAAA,EAAA,CAAA,64BAAA,CAAA,EAAA;wDAOlB,aAAa,EAAA,CAAA;sBAA/B;gBAKkB,WAAW,EAAA,CAAA;sBAA7B;;;MEWQ,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBARpB,eAAe;AACf,YAAA,uBAAuB,aAXvB,YAAY;YACZ,mBAAmB;YACnB,aAAa;YACb,cAAc;YACd,cAAc;YACd,eAAe;YACf,gBAAgB;AAChB,YAAA,eAAe,aAOf,eAAe;YACf,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAGlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAlBpB,YAAY;YACZ,mBAAmB;YACnB,aAAa;YACb,cAAc;YACd,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAWV,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,aAAa;wBACb,cAAc;wBACd,cAAc;wBACd,eAAe;wBACf,gBAAgB;wBAChB;AACH,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACV,eAAe;wBACf;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACL,eAAe;wBACf;AACH;AACJ,iBAAA;;;AChCD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"updevs-components-form-controls-select.mjs","sources":["../../../../libs/components/form-controls/select/src/models/defaults.ts","../../../../libs/components/form-controls/select/src/models/abstractions/base-select.component.ts","../../../../libs/components/form-controls/select/src/components/single/select.component.ts","../../../../libs/components/form-controls/select/src/components/single/select.component.html","../../../../libs/components/form-controls/select/src/components/multiple/select-multiple.component.ts","../../../../libs/components/form-controls/select/src/components/multiple/select-multiple.component.html","../../../../libs/components/form-controls/select/src/upd-select.module.ts","../../../../libs/components/form-controls/select/src/updevs-components-form-controls-select.ts"],"sourcesContent":["import { HorizontalVerticalType } from '@updevs/components';\n\nexport class Defaults {\n static dropdownMaxHeight = 300;\n static typeaheadDebounce = 200;\n static shouldAutoSearch = true;\n static shouldCloseOnOutsideClick = true;\n static layout: HorizontalVerticalType = 'vertical';\n}\n","import {\n Directive,\n HostBinding,\n ElementRef,\n OnInit,\n inject,\n NgZone,\n Renderer2,\n RendererStyleFlags2,\n input,\n viewChild,\n computed,\n effect,\n afterNextRender,\n Injector,\n output,\n signal\n} from '@angular/core';\nimport { DomEventsService, PositioningService, ComputePositionResult } from '@updevs/sdk/layout';\nimport { Tools } from '@updevs/sdk/core';\nimport { BaseSearchStore, ObservableSearchType } from '@updevs/sdk/stores';\nimport { HorizontalVerticalType, ColumnSizeHelper } from '@updevs/components';\nimport { ListItem } from '@updevs/components/list';\nimport { BaseControl } from '@updevs/components/form-controls/abstractions';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { tap, debounceTime, Subject } from 'rxjs';\n\nimport { SelectItem } from '../select-item';\nimport { Defaults } from '../defaults';\nimport { GetItemByIdType, ParentLoaderType } from '../types';\n\nimport Utils = Tools.Utils;\n\n@Directive()\nexport abstract class BaseSelectComponent extends BaseControl implements OnInit {\n @HostBinding('class') get wrapperClasses() {\n return this.hostWrapperClasses();\n }\n\n readonly componentBox = viewChild('componentBox', { read: ElementRef });\n readonly searchBox = viewChild('searchBox', { read: ElementRef });\n readonly searchBoxChild = viewChild('searchBoxChild', { read: ElementRef });\n readonly list = viewChild('list', { read: ElementRef });\n\n readonly dropdownOpenStatusChange = output<boolean>();\n /**\n * Select items.\n * If provided, the select will be considered static.\n */\n readonly items = input<SelectItem[]>();\n /**\n * Store used to load/filter the items.\n */\n readonly store = input<BaseSearchStore>();\n /**\n * Observable used to load/filter the items.\n */\n readonly observable = input<ObservableSearchType>();\n /**\n * Name of the property in the object that represents the ID/key of the option.\n * **Note:** used only for remote data.\n */\n readonly itemKey = input<string>();\n /**\n * Name of the property in the object that represents the value/description of the option.\n * **Note:** used only for remote data.\n */\n readonly itemValue = input<string>();\n /**\n * Maximum height of the dropdown.\n */\n readonly dropdownMaxHeight = input(Defaults.dropdownMaxHeight);\n readonly typeaheadDebounce = input(Defaults.typeaheadDebounce);\n readonly shouldAutoSearch = input(Defaults.shouldAutoSearch);\n readonly shouldCloseOnOutsideClick = input(Defaults.shouldCloseOnOutsideClick);\n readonly layout = input<HorizontalVerticalType>(Defaults.layout);\n /**\n * Value coming from a parent field when the rule `AttachmentTypeEnum.ParentLoad` is active.\n * `upd-select` can use it to fetch the dependent list.\n */\n readonly parentValue = input();\n readonly parentSelectedId = input<OptionalType<any>>();\n readonly parentDependentLoader = input<ParentLoaderType>();\n readonly getItemById = input<GetItemByIdType>();\n\n layoutClasses = computed(() => this.layout() === 'horizontal' ? ['col', 'align-self-center'] : []);\n isLoading = false;\n localItems = signal<SelectItem[]>([]);\n listItems: ListItem[] = [];\n dropdownClasses = 'select-dropdown-content remove-top-radius';\n get isDropdownOpen(): boolean {\n return this._isDropdownOpen;\n }\n set isDropdownOpen(value: boolean) {\n this._isDropdownOpen = value;\n\n this.dropdownOpenStatusChange.emit(value);\n\n if (value) {\n this.dropdownClasses += ' select-dropdown-content-open';\n } else {\n this.dropdownClasses = this.dropdownClasses.replace(' select-dropdown-content-open', '');\n }\n }\n get labelSizeClasses(): string {\n if (this.layout() !== 'horizontal') {\n return 'form-label';\n }\n\n return ColumnSizeHelper.getClasses(\n 'col-form-label',\n ColumnSizeHelper.getSizeClasses(this.labelColSize(), 3)\n );\n }\n\n protected _currentTerm?: string;\n protected _localBackupItems: SelectItem[] = [];\n\n private hasInternalList = false;\n private _isDropdownOpen = false;\n private hostWrapperClasses = computed(() => this.layout() === 'horizontal' ? 'row' : '');\n private previousParentValue?: any;\n private readonly searchInputSubject = new Subject<string>();\n private readonly renderer = inject(Renderer2);\n private readonly ngZone = inject(NgZone);\n private readonly domEventsService = inject(DomEventsService);\n private readonly positioningService = inject(PositioningService);\n private readonly injector = inject(Injector);\n\n protected constructor() {\n super();\n\n effect(() => {\n if (!!this.items()) {\n this._setupLocalItems(this.items()!);\n }\n\n if (this.parentValue() !== this.previousParentValue) {\n this.previousParentValue = this.parentValue();\n\n this.clearSelection();\n this.search();\n }\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n this.hasInternalList = !this.observable() && !this.store() && !this.parentDependentLoader();\n\n if (this.shouldAutoSearch()) {\n if (this.hasInternalList) {\n this._setupLocalItems(this.items()!);\n } else {\n this.searchExternal();\n }\n }\n\n if (this.hasInternalList) {\n return;\n }\n\n const typeaheadSubscription = this.searchInputSubject\n .pipe(\n tap(value => this._currentTerm = value),\n debounceTime(this.typeaheadDebounce())\n )\n .subscribe(() => this.searchExternal());\n\n this.addSubscriptions(typeaheadSubscription);\n }\n\n openDropdown(): void {\n this.isDropdownOpen = true;\n\n if (this.shouldCloseOnOutsideClick()) {\n const outsideClickSub = this.domEventsService.startOutsideClickListener(\n () => this.ngZone.run(() => this.isDropdownOpen = false),\n this.list()?.nativeElement,\n true,\n this.componentBox()?.nativeElement,\n this.searchBox()?.nativeElement\n );\n this.addSubscriptions(outsideClickSub);\n }\n\n afterNextRender(() => {\n this.ngZone.runOutsideAngular(() =>\n this.positioningService\n .computePosition(this.componentBox()!, this.list()!, { placement: 'bottom' })\n .subscribe(resp => this.updatePosition(resp))\n );\n }, { injector: this.injector });\n }\n\n search(term?: string): void {\n if (this.hasInternalList) {\n this._currentTerm = term;\n this.searchLocal();\n } else {\n this.searchInputSubject.next(term || '');\n }\n }\n\n protected _setupLocalItems(items: SelectItem[]): void {\n const copiedItems: SelectItem[] = Utils.deepCopy(items);\n\n this.localItems.set(copiedItems);\n\n this._localBackupItems = Utils.deepCopy(items);\n const tempItems: ListItem[] = [];\n\n for (const item of this._localBackupItems) {\n const listItem = this.getListItem(item);\n item.listItem = Object.assign(listItem, {});\n\n tempItems.push(listItem);\n }\n\n this.listItems = [...tempItems];\n this.isLoading = false;\n }\n\n private searchLocal(): void {\n if (!this._currentTerm) {\n this.listItems = Utils.deepCopy(this._localBackupItems.map(li => li.listItem!));\n this.localItems.set(Utils.deepCopy(this._localBackupItems));\n\n return;\n }\n\n this.ngZone.run(() =>\n this.listItems = Utils\n .deepCopy<SelectItem[]>(this._localBackupItems)\n .filter(si => {\n let hasChildrenInSearch = false;\n\n if ((si.children?.length || 0) > 0) {\n hasChildrenInSearch = si.children!.filter(\n ci => ci.text!.toLowerCase().includes(this._currentTerm!.toLowerCase())\n ).length > 0;\n }\n\n return si.text!.toLowerCase().includes(this._currentTerm!.toLowerCase()) || hasChildrenInSearch;\n })\n .map(si => {\n const bkpItem = this._localBackupItems.find(lbi => lbi.value === si.value);\n\n if ((bkpItem?.children?.length || 0) > 0) {\n si.children = [...bkpItem!.children!].filter(\n ci => ci.text!.toLowerCase().includes(this._currentTerm!.toLowerCase())\n );\n }\n\n return this.getListItem(si);\n })\n );\n }\n\n private searchExternal(): void {\n this.isLoading = true;\n const request = { description: this._currentTerm };\n const parentLoader = this.parentDependentLoader();\n const parentId = this.parentSelectedId() ?? this.parentValue();\n\n if (!!parentLoader && !!parentId) {\n parentLoader(parentId, this._currentTerm).subscribe({\n next: (items: SelectItem[]) => this._setupLocalItems(items),\n error: () => this._setupLocalItems([])\n });\n return;\n }\n\n const observable = !!this.observable()\n ? this.observable()!(request, this.parentValue())\n : this.store()!.search(request, this.parentValue());\n\n observable.subscribe(r => {\n const items: SelectItem[] = [];\n\n r.records.forEach(item => {\n items.push({\n value: item[this.itemKey()!],\n text: item[this.itemValue()!],\n objectData: item\n });\n });\n this._setupLocalItems(items);\n });\n }\n\n private getListItem(item: SelectItem): ListItem {\n let listItem: ListItem;\n\n if (!!item.listItem) {\n listItem = item.listItem;\n listItem.id = item.value;\n listItem.text = item.text;\n } else {\n listItem = {\n id: item.value,\n text: item.text\n };\n }\n\n if ((item.children?.length || 0) > 0) {\n listItem.children = [...item.children!].map(c => this.getListItem(c));\n }\n\n return listItem;\n }\n\n private updatePosition(result: ComputePositionResult): void {\n const componentBox = this.componentBox()!.nativeElement.getBoundingClientRect();\n const searchBoxChildElement = this.searchBoxChild()?.nativeElement;\n const ddElement = this.list()!.nativeElement;\n\n this.renderer.setStyle(searchBoxChildElement, 'width', `${Math.abs(componentBox.width)}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'top', `${result.y + searchBoxChildElement.scrollHeight}px`, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'left', 0, RendererStyleFlags2.Important);\n this.renderer.setStyle(ddElement, 'width', `${Math.abs(componentBox.width)}px`, RendererStyleFlags2.Important);\n }\n\n abstract clearSelection(): void;\n abstract onSelectItem(item: ListItem): void;\n}\n","import { Component, ViewEncapsulation, computed, effect, input, model, output } from '@angular/core';\nimport { OptionalType } from '@updevs/sdk/types';\nimport { ListItem } from '@updevs/components/list';\nimport { Observable } from 'rxjs';\n\nimport { BaseSelectComponent } from '../../models/abstractions/base-select.component';\nimport { SelectItem } from '../../models/select-item';\nimport { ParentLoaderType } from '../../models/types';\n\n@Component({\n selector: 'upd-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectComponent extends BaseSelectComponent {\n /**\n * If true, it'll use the default style of the OS, no search capabilities.\n */\n readonly useSystemStyle = input(false);\n readonly shouldShowClearButton = input(true);\n readonly shouldTruncateSelectedText = input<OptionalType<boolean>>(true);\n readonly isCompact = input(false);\n readonly value = model<any>();\n\n readonly shouldShowHintWithoutLabel = computed(() => !this.labelText && (!!this.hintText || !!this.hintTemplate()));\n\n /**\n * Triggered when an item is selected.\n */\n readonly selectedItem = output<OptionalType<SelectItem>>();\n\n currentSelection?: SelectItem;\n get canTruncateText(): boolean {\n return this.shouldTruncateSelectedText() === true || this.shouldTruncateSelectedText() === undefined;\n }\n\n private isFetchingMissingItem = false;\n\n constructor() {\n super();\n\n // This effect is the single source of truth for syncing the value with the selection.\n effect(() => {\n const val = this.value();\n const items = this.localItems();\n const getItemFn = this.getItemById();\n\n // eslint-disable-next-line no-null/no-null\n if (val === undefined || val === null) {\n this.currentSelection = undefined;\n return;\n }\n\n // eslint-disable-next-line eqeqeq\n const item = items.find(i => i.value == val);\n\n if (!!item) {\n this.currentSelection = item;\n this.isFetchingMissingItem = false;\n } else if (!!getItemFn) {\n this.fetchMissingItem(val, getItemFn);\n } else {\n this.currentSelection = undefined;\n }\n });\n\n effect(() => {\n const parentId = this.parentSelectedId();\n const loader = this.parentDependentLoader();\n const val = this.value();\n // eslint-disable-next-line eqeqeq\n const hasCurrent = val !== undefined && this.localItems().some(i => i.value == val);\n\n if (!!parentId && !!loader && !hasCurrent && !this.isFetchingMissingItem) {\n this.loadDependentData(parentId, loader);\n } else if (!parentId && !!loader) {\n this.clearData();\n }\n });\n }\n\n override onSelectItem(item: ListItem): void {\n this._currentTerm = item.text;\n this.isDropdownOpen = false;\n let selectedItem: OptionalType<SelectItem>;\n\n for (const localBackupItem of this._localBackupItems) {\n if ((localBackupItem.children?.length || 0) > 0) {\n // eslint-disable-next-line eqeqeq\n selectedItem = localBackupItem.children?.find(c => c.value == item.id);\n\n if (!!selectedItem) {\n break;\n }\n // eslint-disable-next-line eqeqeq\n } else if (localBackupItem.value == item.id) {\n selectedItem = localBackupItem;\n break;\n }\n }\n\n this.value.set(selectedItem?.value);\n this.selectedItem.emit(selectedItem);\n this._updateFormControl(selectedItem?.value, true);\n }\n\n override search(term?: string): void {\n const parentId = this.parentSelectedId();\n const loader = this.parentDependentLoader();\n\n if (!!parentId && !!loader) {\n this.loadDependentData(parentId, loader, term);\n } else {\n super.search(term);\n }\n }\n\n override clearSelection(): void {\n this._currentTerm = undefined;\n\n this.value.set(undefined);\n this.selectedItem.emit(undefined);\n this._updateFormControl(undefined, true);\n }\n\n onSystemSelect(event: any): void {\n // eslint-disable-next-line eqeqeq\n const selectedItem = this.localItems().find(c => c.value == event.target.value);\n\n this.value.set(selectedItem?.value);\n this.selectedItem.emit(selectedItem);\n this._updateFormControl(selectedItem?.value, true);\n }\n\n protected _getValue(): any {\n return this.value();\n }\n\n protected _updateValue(value: any): void {\n this.value.set(value);\n }\n\n private loadDependentData(parentId: any, loader: ParentLoaderType, term?: string): void {\n loader(parentId, term).subscribe({\n next: (items) => {\n this._setupLocalItems(items);\n const val = this.value();\n\n // eslint-disable-next-line eqeqeq\n if (val !== undefined && !items.some(i => i.value == val) && !this.getItemById()) {\n this.clearSelection();\n }\n },\n error: () => {\n this._setupLocalItems([]);\n this.clearSelection();\n }\n });\n }\n\n private clearData(): void {\n this._setupLocalItems([]);\n this.clearSelection();\n }\n\n private fetchMissingItem(id: any, getItemFn: (id: any) => Observable<SelectItem>): void {\n this.isFetchingMissingItem = true;\n getItemFn(id).subscribe({\n next: (item) => {\n if (!!item) {\n // eslint-disable-next-line eqeqeq\n if (this.value() == id) {\n this.currentSelection = item;\n }\n\n const currentItems = this.localItems();\n\n // eslint-disable-next-line eqeqeq\n if (!currentItems.find(i => i.value == item.value)) {\n this._setupLocalItems([...currentItems, item]);\n }\n // eslint-disable-next-line eqeqeq\n } else if (this.value() == id) {\n this.currentSelection = undefined;\n }\n\n this.isFetchingMissingItem = false;\n this.selectedItem.emit(this.currentSelection);\n },\n error: () => {\n // eslint-disable-next-line eqeqeq\n if (this.value() == id) {\n this.currentSelection = undefined;\n }\n\n this.isFetchingMissingItem = false;\n }\n });\n }\n}\n","@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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\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 (shouldShowHintWithoutLabel()) {\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 <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentDefaultStyleTpl\"></ng-template>\n }\n}\n\n<ng-template #hintTpl>\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n</ng-template>\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 [iconModel]=\"{tablerIcon:'x', tablerIconSize: 16}\">\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 [iconModel]=\"{tablerIcon:'chevron-down', tablerIconSize: 16}\">\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>","import { Component, ViewEncapsulation, EventEmitter, Output, input, effect } from '@angular/core';\nimport { ListItem } from '@updevs/components/list';\n\nimport { BaseSelectComponent } from '../../models/abstractions/base-select.component';\nimport { SelectItem } from '../../models/select-item';\n\n@Component({\n selector: 'upd-select-multiple',\n templateUrl: './select-multiple.component.html',\n styleUrls: ['./select-multiple.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class SelectMultipleComponent extends BaseSelectComponent {\n /**\n * Returns the selected items.\n * Triggered when items are selected.\n */\n @Output() readonly selectedItems = new EventEmitter<SelectItem[]>();\n /**\n * Returns the selected Ids.\n * Triggered when items are selected.\n */\n @Output() readonly selectedIds = new EventEmitter<any[]>();\n\n /**\n * An array of primitive values to set the selection programmatically.\n */\n readonly selectedValues = input<SelectItem[]>();\n\n currentSelection: SelectItem[] = [];\n\n constructor() {\n super();\n\n effect(() => {\n const values = this.selectedValues();\n\n if (!!values && values.length > 0) {\n this.currentSelection = this._localBackupItems.filter(item => values.includes(item.value));\n this.updateActiveItemsOnList();\n }\n });\n }\n\n clearSelection(): void {\n this.currentSelection = [];\n this._currentTerm = undefined;\n\n this.updateActiveItemsOnList();\n this._updateFormControl([], true);\n }\n\n onSelectItem(item: ListItem): void {\n // eslint-disable-next-line eqeqeq\n const selectedItem = this.currentSelection.find(cs => cs.value == item.id);\n\n if (!!selectedItem) {\n this.onRemoveItem(selectedItem);\n return;\n }\n\n for (const localBackupItem of this._localBackupItems) {\n if ((localBackupItem.children?.length || 0) > 0) {\n // eslint-disable-next-line eqeqeq\n const child = localBackupItem.children?.find(c => c.value == item.id);\n\n if (!!child) {\n this.currentSelection.push(child);\n break;\n }\n // eslint-disable-next-line eqeqeq\n } else if (localBackupItem.value == item.id) {\n this.currentSelection.push(localBackupItem);\n break;\n }\n }\n\n this.updateActiveItemsOnList();\n\n const currentSelectedIds = this.currentSelection.map(cs => cs.value);\n\n this.selectedItems.emit(this.currentSelection);\n this.selectedIds.emit(currentSelectedIds);\n this._updateFormControl(currentSelectedIds, true);\n }\n\n onRemoveItem(item: SelectItem): void {\n // eslint-disable-next-line eqeqeq\n const idx = this.currentSelection.findIndex(cs => cs.value == item.value);\n\n this.currentSelection.splice(idx, 1);\n this.updateActiveItemsOnList();\n this._updateFormControl(this.currentSelection.map(cs => cs.value), true);\n }\n\n protected _getValue(): any {\n return this.currentSelection.map(item => item.value);\n }\n\n protected _updateValue(value: any): void {\n if (!Array.isArray(value)) {\n this.currentSelection = [];\n return;\n }\n\n this.currentSelection = this._localBackupItems.filter(item => value.includes(item.value));\n this.updateActiveItemsOnList();\n }\n\n private updateActiveItemsOnList(): void {\n for (const backupItem of this._localBackupItems) {\n // eslint-disable-next-line eqeqeq\n const selectedItem = this.currentSelection.find(cs => cs.value == backupItem.value);\n\n if (!!backupItem.listItem) {\n backupItem.listItem.isActive = !!selectedItem;\n }\n }\n\n this._setupLocalItems(this._localBackupItems);\n }\n}\n","@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<div class=\"dropdown\" [attr.id]=\"name()\">\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 @for (sel of currentSelection; track sel) {\n <span class=\"badge bg-primary select-multiple-value\">{{ sel.text }}\n <upd-button [isIcon]=\"true\" [shouldIgnoreBtnClass]=\"true\" (clicked)=\"onRemoveItem(sel)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-button></span> \n }\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (currentSelection.length > 0) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" [isDisabled]=\"isDisabled()\" (clicked)=\"clearSelection()\"\n customClasses=\"link-secondary\">\n <upd-icon 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 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 <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","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { UpdIconsModule } from '@updevs/icons';\nimport { UpdCoreLayoutModule } from '@updevs/sdk/layout';\nimport { UpdListModule } from '@updevs/components/list';\nimport { UpdButtonModule } from '@updevs/components/button';\nimport { UpdInputModule } from '@updevs/components/form-controls/input';\nimport { UpdPopoverModule } from '@updevs/components/popover';\n\nimport { SelectComponent } from './components/single/select.component';\nimport { SelectMultipleComponent } from './components/multiple/select-multiple.component';\n\n@NgModule({\n imports: [\n CommonModule,\n UpdCoreLayoutModule,\n UpdListModule,\n UpdInputModule,\n UpdIconsModule,\n UpdButtonModule,\n UpdPopoverModule,\n TranslocoModule\n ],\n declarations: [\n SelectComponent,\n SelectMultipleComponent\n ],\n exports: [\n SelectComponent,\n SelectMultipleComponent\n ]\n})\nexport class UpdSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -260,7 +260,7 @@ class DynamicFieldComponent extends BaseComponent {
|
|
|
260
260
|
}
|
|
261
261
|
}
|
|
262
262
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DynamicFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
263
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DynamicFieldComponent, selector: "upd-dynamic-field", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submitForm: "submitForm" }, host: { properties: { "class": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: "@switch (field().type) {\n @case (DynamicFieldType.Input) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\" [isDisabled]=\"field().isDisabled || false\"\n [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\" [value]=\"formControl.value\"\n (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\" (focus)=\"onFocus()\"\n (input)=\"onInput($event)\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Checkbox) {\n <upd-checkbox [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isDisabled]=\"field().isDisabled || false\" [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n [isSwitch]=\"checkboxField.isSwitch || false\" (changed)=\"setControlValue($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"></upd-checkbox>\n }\n @case (DynamicFieldType.CheckboxGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of checkboxGroupOptionsKeys; track option) {\n <upd-checkbox [name]=\"field().name\" [label]=\"getOptionDescription(option, 'checkbox')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\" [isSwitch]=\"checkboxField.isSwitch || false\"\n (changed)=\"setControlValue(option)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"></upd-checkbox>\n }\n }\n @case (DynamicFieldType.Radio) {\n <upd-radio [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isChecked]=\"formControl.value\" [isDisabled]=\"field().isDisabled || false\" [isInline]=\"radioField.isInline || false\"\n (selected)=\"setControlValue($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\n </upd-radio>\n }\n @case (DynamicFieldType.RadioGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of radioGroupOptionsKeys; track option) {\n <upd-radio [name]=\"field().name\" [label]=\"getOptionDescription(option, 'radio')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n (selected)=\"setControlValue(option)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"></upd-radio>\n }\n }\n @case (DynamicFieldType.Select) {\n <upd-select [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\"\n [useSystemStyle]=\"singleSelectField.useSystemStyle || false\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [shouldTruncateSelectedText]=\"selectField.shouldTruncateSelectedText\" [parentValue]=\"selectField.parentValue\"\n [value]=\"formControl.value\" (selectedItem)=\"setControlValue($event?.value)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"></upd-select>\n }\n @case (DynamicFieldType.SelectMultiple) {\n <upd-select-multiple [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\" [parentValue]=\"selectField.parentValue\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [selectedValues]=\"formControl.value\" (selectedIds)=\"setControlValue($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"></upd-select-multiple>\n }\n @case (DynamicFieldType.Label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n @case (DynamicFieldType.TextArea) {\n <upd-textarea [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [value]=\"formControl.value\" [customClasses]=\"textareaField.customClasses\" [wrapperClasses]=\"textareaField.wrapperClasses\"\n [maxLength]=\"textareaField.maxLength\" [rows]=\"textareaField.rows\"\n [displayCharactersCount]=\"textareaField.displayCharactersCount || false\" (valueChange)=\"setControlValue($event)\"\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" (input)=\"onInput($event)\" (keydown.enter)=\"onInputEnter()\">\n </upd-textarea>\n }\n @case (DynamicFieldType.FileUpload) {\n <upd-file-upload [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [isDisabled]=\"field().isDisabled || false\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [fileName]=\"fileNameControl?.value\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [allowFilesDrop]=\"fileUploadField.allowFilesDrop || false\"\n [title]=\"fileUploadField.title\" [labelColSize]=\"field().labelColSize\" [minFileSize]=\"fileUploadField.minFileSize\"\n [isMultiple]=\"fileUploadField.isMultiple || false\" [allowedExtensions]=\"fileUploadField.allowedExtensions || '*'\"\n [maxFileSize]=\"fileUploadField.maxFileSize\" [layout]=\"layout()\" (fileChanged)=\"handleFileSelected($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"></upd-file-upload>\n }\n @case (DynamicFieldType.MaskedInput) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [mask]=\"maskedField.mask\"\n [maskConfig]=\"maskedField.maskConfig\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\"\n [isDisabled]=\"field().isDisabled || false\" [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\"\n [value]=\"formControl.value\" (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\"\n (focus)=\"onFocus()\" (input)=\"onInput($event)\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Button) {\n <upd-button [text]=\"field().label\" [isDisabled]=\"field().isDisabled || false\" [model]=\"buttonField.model\" />\n }\n @case (DynamicFieldType.ButtonGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n <div class=\"btn-group\" role=\"group\">\n @for (btn of buttonGroupField.buttons; track btn) {\n <upd-button [model]=\"btn\" [isDisabled]=\"field().isDisabled || false\" />\n }\n </div>\n }\n}\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: "directive", type: i2.InputAppendDirective, selector: "ng-template[updInputAppend]" }, { kind: "directive", type: i2.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i3.CheckboxComponent, selector: "upd-checkbox", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline", "isSwitch", "isIndeterminate"], outputs: ["changed", "isCheckedChange", "isIndeterminateChange"] }, { kind: "component", type: i4.RadioComponent, selector: "upd-radio", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline"], outputs: ["selected"] }, { kind: "component", type: i5.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "shouldTruncateSelectedText", "isCompact", "value"], outputs: ["selectedItem"] }, { kind: "component", type: i5.SelectMultipleComponent, selector: "upd-select-multiple", inputs: ["selectedValues"], outputs: ["selectedItems", "selectedIds"] }, { kind: "component", type: i6.TextareaComponent, selector: "upd-textarea", inputs: ["value", "customClasses", "wrapperClasses", "maxLength", "rows", "displayCharactersCount"], outputs: ["valueChange"] }, { kind: "component", type: i7.FileUploadComponent, selector: "upd-file-upload", inputs: ["fileName", "title", "allowFilesDrop", "isMultiple", "allowedExtensions", "minFileSize", "maxFileSize", "layout"], outputs: ["fileChanged"] }] }); }
|
|
263
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DynamicFieldComponent, selector: "upd-dynamic-field", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { submitForm: "submitForm" }, host: { properties: { "class": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: "@switch (field().type) {\n @case (DynamicFieldType.Input) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\" [isDisabled]=\"field().isDisabled || false\"\n [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\" [value]=\"formControl.value\"\n (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\" (focus)=\"onFocus()\"\n (input)=\"onInput($event)\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Checkbox) {\n <upd-checkbox [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isDisabled]=\"field().isDisabled || false\" [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n [isSwitch]=\"checkboxField.isSwitch || false\" (changed)=\"setControlValue($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"></upd-checkbox>\n }\n @case (DynamicFieldType.CheckboxGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of checkboxGroupOptionsKeys; track option) {\n <upd-checkbox [name]=\"field().name\" [label]=\"getOptionDescription(option, 'checkbox')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\" [isSwitch]=\"checkboxField.isSwitch || false\"\n (changed)=\"setControlValue(option)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"></upd-checkbox>\n }\n }\n @case (DynamicFieldType.Radio) {\n <upd-radio [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"true\"\n [isChecked]=\"formControl.value\" [isDisabled]=\"field().isDisabled || false\" [isInline]=\"radioField.isInline || false\"\n (selected)=\"setControlValue($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\">\n </upd-radio>\n }\n @case (DynamicFieldType.RadioGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n @for (option of radioGroupOptionsKeys; track option) {\n <upd-radio [name]=\"field().name\" [label]=\"getOptionDescription(option, 'radio')\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [value]=\"option\" [isDisabled]=\"field().isDisabled || false\"\n [isChecked]=\"formControl.value\" [isInline]=\"checkboxField.isInline || false\"\n (selected)=\"setControlValue(option)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"></upd-radio>\n }\n }\n @case (DynamicFieldType.Select) {\n <upd-select [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [hintAsTooltip]=\"field().hintAsTooltip || false\"\n [validationStatus]=\"validationStatus\" [validationStatusDescriptions]=\"validationStatusDescriptions\"\n [useSystemStyle]=\"singleSelectField.useSystemStyle || false\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [shouldTruncateSelectedText]=\"selectField.shouldTruncateSelectedText\" [parentValue]=\"selectField.parentValue\"\n [value]=\"formControl.value\" (selectedItem)=\"setControlValue($event?.value)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"></upd-select>\n }\n @case (DynamicFieldType.SelectMultiple) {\n <upd-select-multiple [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [items]=\"selectField.items\" [layout]=\"layout()\" [labelColSize]=\"field().labelColSize\" [store]=\"selectField.store!\"\n [observable]=\"selectField.observable\" [itemKey]=\"selectField.itemKey\" [itemValue]=\"selectField.itemValue\"\n [dropdownMaxHeight]=\"selectField.dropdownMaxHeight || SelectDefaults.dropdownMaxHeight\"\n [typeaheadDebounce]=\"selectField.typeaheadDebounce || SelectDefaults.typeaheadDebounce\"\n [shouldAutoSearch]=\"selectField.shouldAutoSearch || SelectDefaults.shouldAutoSearch\" [parentValue]=\"selectField.parentValue\"\n [shouldCloseOnOutsideClick]=\"selectField.shouldCloseOnOutsideClick || SelectDefaults.shouldCloseOnOutsideClick\"\n [selectedValues]=\"formControl.value\" (selectedIds)=\"setControlValue($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"></upd-select-multiple>\n }\n @case (DynamicFieldType.Label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n @case (DynamicFieldType.TextArea) {\n <upd-textarea [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [isDisabled]=\"field().isDisabled || false\"\n [value]=\"formControl.value\" [customClasses]=\"textareaField.customClasses\" [wrapperClasses]=\"textareaField.wrapperClasses\"\n [maxLength]=\"textareaField.maxLength\" [rows]=\"textareaField.rows\"\n [displayCharactersCount]=\"textareaField.displayCharactersCount || false\" (valueChange)=\"setControlValue($event)\"\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" (input)=\"onInput($event)\" (keydown.enter)=\"onInputEnter()\">\n </upd-textarea>\n }\n @case (DynamicFieldType.FileUpload) {\n <upd-file-upload [name]=\"field().name\" [label]=\"field().label\" [hint]=\"field().hint\" [isDisabled]=\"field().isDisabled || false\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [fileName]=\"fileNameControl?.value\"\n [validationStatusDescriptions]=\"validationStatusDescriptions\" [allowFilesDrop]=\"fileUploadField.allowFilesDrop || false\"\n [title]=\"fileUploadField.title\" [labelColSize]=\"field().labelColSize\" [minFileSize]=\"fileUploadField.minFileSize\"\n [isMultiple]=\"fileUploadField.isMultiple || false\" [allowedExtensions]=\"fileUploadField.allowedExtensions || '*'\"\n [maxFileSize]=\"fileUploadField.maxFileSize\" [layout]=\"layout()\" (fileChanged)=\"handleFileSelected($event)\" (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"></upd-file-upload>\n }\n @case (DynamicFieldType.MaskedInput) {\n <upd-input [name]=\"field().name\" [label]=\"field().label\" [placeholder]=\"field().placeholder\" [hint]=\"field().hint\"\n [hintAsTooltip]=\"field().hintAsTooltip || false\" [validationStatus]=\"validationStatus\" [mask]=\"maskedField.mask\"\n [maskConfig]=\"maskedField.maskConfig\" [validationStatusDescriptions]=\"validationStatusDescriptions\" [layout]=\"layout()\"\n [isDisabled]=\"field().isDisabled || false\" [type]=\"inputField.inputType || 'text'\" [labelColSize]=\"field().labelColSize\"\n [value]=\"formControl.value\" (valueChange)=\"setControlValue($event)\" (blurred)=\"onBlur()\" (keyUpEnter)=\"onInputEnter()\"\n (focus)=\"onFocus()\" (input)=\"onInput($event)\">\n @if (!!inputField.prefix) {\n <ng-template updInputPrepend>\n {{ textService.getText(inputField.prefix) }}\n </ng-template>\n }\n\n @if (!!inputField.suffix) {\n <ng-template updInputAppend>\n {{ textService.getText(inputField.suffix) }}\n </ng-template>\n }\n </upd-input>\n }\n @case (DynamicFieldType.Button) {\n <upd-button [text]=\"field().label\" [isDisabled]=\"field().isDisabled || false\" [model]=\"buttonField.model\" />\n }\n @case (DynamicFieldType.ButtonGroup) {\n @if (!!field().label) {\n <label class=\"form-label\">{{ getText(field().label) }}</label>\n }\n\n <div class=\"btn-group\" role=\"group\">\n @for (btn of buttonGroupField.buttons; track btn) {\n <upd-button [model]=\"btn\" [isDisabled]=\"field().isDisabled || false\" />\n }\n </div>\n }\n}\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: "directive", type: i2.InputAppendDirective, selector: "ng-template[updInputAppend]" }, { kind: "directive", type: i2.InputPrependDirective, selector: "ng-template[updInputPrepend]" }, { kind: "component", type: i3.CheckboxComponent, selector: "upd-checkbox", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline", "isSwitch", "isIndeterminate"], outputs: ["changed", "isCheckedChange", "isIndeterminateChange"] }, { kind: "component", type: i4.RadioComponent, selector: "upd-radio", inputs: ["wrapperClasses", "value", "customClasses", "isChecked", "isInline"], outputs: ["selected"] }, { kind: "component", type: i5.SelectComponent, selector: "upd-select", inputs: ["useSystemStyle", "shouldShowClearButton", "shouldTruncateSelectedText", "isCompact", "value"], outputs: ["valueChange", "selectedItem"] }, { kind: "component", type: i5.SelectMultipleComponent, selector: "upd-select-multiple", inputs: ["selectedValues"], outputs: ["selectedItems", "selectedIds"] }, { kind: "component", type: i6.TextareaComponent, selector: "upd-textarea", inputs: ["value", "customClasses", "wrapperClasses", "maxLength", "rows", "displayCharactersCount"], outputs: ["valueChange"] }, { kind: "component", type: i7.FileUploadComponent, selector: "upd-file-upload", inputs: ["fileName", "title", "allowFilesDrop", "isMultiple", "allowedExtensions", "minFileSize", "maxFileSize", "layout"], outputs: ["fileChanged"] }] }); }
|
|
264
264
|
}
|
|
265
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DynamicFieldComponent, decorators: [{
|
|
266
266
|
type: Component,
|