@elderbyte/ngx-starter 13.6.0 → 13.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/esm2020/lib/common/utils/collection-util.mjs +4 -1
  2. package/esm2020/lib/components/select/auto/elder-auto-select-first.directive.mjs +77 -0
  3. package/esm2020/lib/components/select/auto/elder-select-first-util.mjs +62 -0
  4. package/esm2020/lib/components/select/elder-select/elder-select.component.mjs +14 -9
  5. package/esm2020/lib/components/select/elder-select-on-tab.directive.mjs +104 -0
  6. package/esm2020/lib/components/select/elder-select.module.mjs +11 -11
  7. package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +103 -39
  8. package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +13 -13
  9. package/fesm2015/elderbyte-ngx-starter.mjs +226 -144
  10. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  11. package/fesm2020/elderbyte-ngx-starter.mjs +226 -144
  12. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  13. package/lib/common/utils/collection-util.d.ts +1 -0
  14. package/lib/components/select/{auto-select-first.directive.d.ts → auto/elder-auto-select-first.directive.d.ts} +4 -13
  15. package/lib/components/select/auto/elder-select-first-util.d.ts +22 -0
  16. package/lib/components/select/elder-select/elder-select.component.d.ts +11 -1
  17. package/lib/components/select/{select-on-tab.directive.d.ts → elder-select-on-tab.directive.d.ts} +3 -3
  18. package/lib/components/select/elder-select.module.d.ts +5 -5
  19. package/lib/components/select/multi/elder-multi-select-base.d.ts +39 -15
  20. package/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.d.ts +11 -11
  21. package/package.json +1 -1
  22. package/esm2020/lib/components/select/auto-select-first.directive.mjs +0 -126
  23. package/esm2020/lib/components/select/select-on-tab.directive.mjs +0 -104
@@ -2237,6 +2237,9 @@ class CollectionUtil {
2237
2237
  }
2238
2238
  return true;
2239
2239
  }
2240
+ static hasElements(list) {
2241
+ return list !== null && list !== undefined && list.length > 0;
2242
+ }
2240
2243
  }
2241
2244
  CollectionUtil.logger = LoggerFactory.getLogger('CollectionUtil');
2242
2245
 
@@ -20495,66 +20498,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
20495
20498
  type: Input
20496
20499
  }] } });
20497
20500
 
20498
- class AutoSelectFirstDirective {
20499
- /***************************************************************************
20500
- * *
20501
- * Constructor *
20502
- * *
20503
- **************************************************************************/
20504
- constructor(elderSelect) {
20505
- this.elderSelect = elderSelect;
20506
- /***************************************************************************
20507
- * *
20508
- * Fields *
20509
- * *
20510
- **************************************************************************/
20511
- this.log = LoggerFactory.getLogger(this.constructor.name);
20512
- }
20513
- /***************************************************************************
20514
- * *
20515
- * Life Cycle *
20516
- * *
20517
- **************************************************************************/
20518
- ngAfterViewInit() {
20519
- setTimeout(() => {
20520
- this.log.info('autoSelectFirst after-view init, auto selecting value');
20521
- this.handleAutoSelectFirst();
20522
- }, 10);
20523
- }
20524
- /***************************************************************************
20525
- * *
20526
- * Properties *
20527
- * *
20528
- **************************************************************************/
20529
- /**
20530
- * After data is loaded into this select, ensure that
20531
- * a value is selected or select the first automatically.
20532
- */
20533
- set autoSelectFirstEnabled(val) {
20534
- this.enabled = coerceBooleanProperty(val);
20535
- }
20536
- set enabled(val) {
20537
- this._enabled = val;
20538
- }
20539
- get enabled() {
20540
- return this._enabled;
20541
- }
20501
+ class ElderSelectFirstUtil {
20542
20502
  /***************************************************************************
20543
20503
  * *
20544
20504
  * Public methods *
20545
20505
  * *
20546
20506
  **************************************************************************/
20547
- trySelectFirst() {
20548
- const suggestionsDc = this.elderSelect.suggestionsDc;
20507
+ static trySelectFirst(elderSelect) {
20508
+ const suggestionsDc = elderSelect.suggestionsDc;
20549
20509
  const dataContextFirstItem = (suggestionsDc === null || suggestionsDc === void 0 ? void 0 : suggestionsDc.isStarted)
20550
20510
  ? this.firstItemInDataContextSoon(suggestionsDc)
20551
20511
  : of(null);
20552
- dataContextFirstItem.pipe(takeUntil(this.elderSelect.valueChange.pipe(filter(value => !!value))), switchMap(firstItem => firstItem ? of(firstItem) : this.firstSuggestionItem())).subscribe(firstItem => {
20553
- if (firstItem && !this.elderSelect.entityId) {
20554
- this.elderSelect.updateValueByEntity(firstItem);
20512
+ dataContextFirstItem.pipe(takeUntil(elderSelect.valueChange.pipe(filter(value => !!value))), switchMap(firstItem => firstItem ? of(firstItem) : this.firstSuggestionItem(elderSelect))).subscribe(firstItem => {
20513
+ if (firstItem && !elderSelect.entityId) {
20514
+ elderSelect.updateValueByEntity(firstItem);
20555
20515
  }
20556
20516
  }, err => {
20557
- this.elderSelect.updateState(ElderSelectComponentState.error(err));
20517
+ elderSelect.updateState(ElderSelectComponentState.error(err));
20558
20518
  this.log.error('Failed to load first entity for auto-select-first flow!', err);
20559
20519
  });
20560
20520
  }
@@ -20563,54 +20523,37 @@ class AutoSelectFirstDirective {
20563
20523
  * Private methods *
20564
20524
  * *
20565
20525
  **************************************************************************/
20566
- handleAutoSelectFirst() {
20567
- if (!this.elderSelect.value) {
20568
- this.log.debug('Attempting to auto select first entity...');
20569
- this.trySelectFirst();
20570
- }
20571
- else {
20572
- this.log.warn('Conflict avoided: Aborted auto selection because value id already present!');
20573
- }
20574
- }
20575
- firstItemInDataContextSoon(dataContext) {
20526
+ static firstItemInDataContextSoon(dataContext) {
20576
20527
  return dataContext.data.pipe(filter(data => data && data.length > 0), map(data => data[0]), timeout(250), catchError(timeoutError => {
20577
20528
  this.log.warn('Gave up waiting for DataContext items, timeout reached. Falling back to sugestion lookup.', timeoutError);
20578
20529
  return of(null);
20579
20530
  }), first());
20580
20531
  }
20581
- firstSuggestionItem() {
20582
- const suggestionsDc = this.elderSelect.suggestionsDc;
20532
+ static firstSuggestionItem(elderSelect) {
20533
+ const suggestionsDc = elderSelect.suggestionsDc;
20583
20534
  const dataSource = suggestionsDc === null || suggestionsDc === void 0 ? void 0 : suggestionsDc.dataSource;
20584
20535
  if (dataSource) {
20585
- this.updateState(ElderSelectComponentState.loading());
20536
+ elderSelect.updateState(ElderSelectComponentState.loading());
20586
20537
  return DataSourceAdapter.from(dataSource)
20587
- .findFirst(this.elderSelect.filters, this.elderSelect.sorts).pipe(tap(() => this.updateState(ElderSelectComponentState.idle())), catchError(err => {
20538
+ .findFirst(elderSelect.filters, elderSelect.sorts).pipe(tap(() => elderSelect.updateState(ElderSelectComponentState.idle())), catchError(err => {
20588
20539
  this.log.error('Failed to load suggestions!', err);
20589
- this.elderSelect.updateState(ElderSelectComponentState.error(err));
20540
+ elderSelect.updateState(ElderSelectComponentState.error(err));
20590
20541
  return of(null);
20591
20542
  }));
20592
20543
  }
20593
20544
  else {
20594
20545
  this.log.warn('Failed to load first suggestion!');
20595
- this.updateState(ElderSelectComponentState.idle());
20546
+ elderSelect.updateState(ElderSelectComponentState.idle());
20596
20547
  return EMPTY;
20597
20548
  }
20598
20549
  }
20599
- updateState(state) {
20600
- this.elderSelect.updateState(state);
20601
- }
20602
20550
  }
20603
- AutoSelectFirstDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AutoSelectFirstDirective, deps: [{ token: ElderSelectComponent }], target: i0.ɵɵFactoryTarget.Directive });
20604
- AutoSelectFirstDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.1", type: AutoSelectFirstDirective, selector: "[autoSelectFirst]", inputs: { autoSelectFirstEnabled: ["autoSelectFirst", "autoSelectFirstEnabled"] }, ngImport: i0 });
20605
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: AutoSelectFirstDirective, decorators: [{
20606
- type: Directive,
20607
- args: [{
20608
- selector: '[autoSelectFirst]'
20609
- }]
20610
- }], ctorParameters: function () { return [{ type: ElderSelectComponent }]; }, propDecorators: { autoSelectFirstEnabled: [{
20611
- type: Input,
20612
- args: ['autoSelectFirst']
20613
- }] } });
20551
+ /***************************************************************************
20552
+ * *
20553
+ * Fields *
20554
+ * *
20555
+ **************************************************************************/
20556
+ ElderSelectFirstUtil.log = LoggerFactory.getLogger('ElderSelectFirstUtil');
20614
20557
 
20615
20558
  class ElderAutocompleteComponent {
20616
20559
  /***************************************************************************
@@ -20780,7 +20723,7 @@ function isElderEntityValueAccessor(object) {
20780
20723
  && vac.updateValueByEntity !== undefined;
20781
20724
  }
20782
20725
 
20783
- class SelectOnTabDirective {
20726
+ class ElderSelectOnTabDirective {
20784
20727
  /***************************************************************************
20785
20728
  * *
20786
20729
  * Constructor *
@@ -20857,9 +20800,9 @@ class SelectOnTabDirective {
20857
20800
  this.destroy$.complete();
20858
20801
  }
20859
20802
  }
20860
- SelectOnTabDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SelectOnTabDirective, deps: [{ token: i1$6.MatAutocompleteTrigger }, { token: ELDER_SELECT_BASE, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
20861
- SelectOnTabDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.1", type: SelectOnTabDirective, selector: "[elderSelectOnTab]", host: { listeners: { "keydown.tab": "onBlur()" } }, ngImport: i0 });
20862
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SelectOnTabDirective, decorators: [{
20803
+ ElderSelectOnTabDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectOnTabDirective, deps: [{ token: i1$6.MatAutocompleteTrigger }, { token: ELDER_SELECT_BASE, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
20804
+ ElderSelectOnTabDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.1", type: ElderSelectOnTabDirective, selector: "[elderSelectOnTab]", host: { listeners: { "keydown.tab": "onBlur()" } }, ngImport: i0 });
20805
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectOnTabDirective, decorators: [{
20863
20806
  type: Directive,
20864
20807
  args: [{
20865
20808
  selector: '[elderSelectOnTab]'
@@ -21026,6 +20969,8 @@ class ElderSelectComponent extends ElderSelectBase {
21026
20969
  this.entityIdChange = this.valueChange.pipe(map(v => this.entityIdFromValue(v)));
21027
20970
  this.entityChange = this.entity$.pipe(skip(1) // Skip the initial NULL value
21028
20971
  );
20972
+ this.entityIdUpdated = this.valueUpdated.pipe(map(value => this.entityIdFromValue(value)));
20973
+ this.entityUpdated = combineLatest([this.entityIdUpdated, this.entity$]).pipe(filter(([updatedId, entity]) => this.getEntityId(entity) === updatedId), map(([updatedId, entity]) => entity));
21029
20974
  this.entityWrapped$ = combineLatest([
21030
20975
  this.entity$,
21031
20976
  this.displayPropertyResolver$,
@@ -21078,7 +21023,7 @@ class ElderSelectComponent extends ElderSelectBase {
21078
21023
  * *
21079
21024
  **************************************************************************/
21080
21025
  set entity(entity) {
21081
- this.entity$.next(entity); // TODO Set entity$ when set directly via value / writeValue
21026
+ this.entity$.next(entity);
21082
21027
  this.writeValueInternal(this.entityToValue(entity));
21083
21028
  }
21084
21029
  get entity() {
@@ -21184,8 +21129,7 @@ class ElderSelectComponent extends ElderSelectBase {
21184
21129
  }
21185
21130
  forceReloadFirst() {
21186
21131
  this.value = null; // valueId is set to null automatically
21187
- const autoReloadFirst = new AutoSelectFirstDirective(this);
21188
- autoReloadFirst.trySelectFirst();
21132
+ ElderSelectFirstUtil.trySelectFirst(this);
21189
21133
  }
21190
21134
  updateValueByEntity(entity) {
21191
21135
  this.updateValue(this.entityToValue(entity));
@@ -21314,13 +21258,13 @@ class ElderSelectComponent extends ElderSelectBase {
21314
21258
  }
21315
21259
  }
21316
21260
  ElderSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
21317
- ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderSelectComponent, selector: "elder-select", inputs: { nullDisplay: "nullDisplay", autocomplete: "autocomplete", allowNull: "allowNull", entity: "entity", entityId: "entityId", hintProperty: "hintProperty", hintPropertyResolver: "hintPropertyResolver" }, outputs: { entityIdChange: "entityIdChange", entityChange: "entityChange" }, providers: [
21261
+ ElderSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderSelectComponent, selector: "elder-select", inputs: { nullDisplay: "nullDisplay", autocomplete: "autocomplete", allowNull: "allowNull", entity: "entity", entityId: "entityId", hintProperty: "hintProperty", hintPropertyResolver: "hintPropertyResolver" }, outputs: { entityIdChange: "entityIdChange", entityChange: "entityChange", entityIdUpdated: "entityIdUpdated", entityUpdated: "entityUpdated" }, providers: [
21318
21262
  {
21319
21263
  provide: ELDER_SELECT_BASE,
21320
21264
  useExisting: forwardRef(() => ElderSelectComponent)
21321
21265
  },
21322
21266
  ...buildFormIntegrationProviders(ElderSelectComponent)
21323
- ], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!autocomplete\" class=\"select-arrow noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1$5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$5.MatLabel, selector: "mat-label" }, { type: i1$5.MatPrefix, selector: "[matPrefix]" }, { type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: SelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i5$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$5.MatSuffix, selector: "[matSuffix]" }, { type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1$5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i1$2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21267
+ ], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(entityWrapped$ | async) as entityWrapper\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n <input\n matInput type=\"text\" fxFlex=\"grow\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly || !autocomplete\"\n [name]=\"name + '-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matAutocomplete] #autoTrigger=\"matAutocompleteTrigger\"\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n elderSelectOnTab\n [class.select]=\"!autocomplete\" (click)=\"onInputClicked(autoTrigger)\"\n [ngModel]=\"inputText$ | async\" [ngModelOptions]=\"{standalone: true, updateOn: 'submit'}\"\n (blur)=\"onInputBlur($event)\"\n >\n\n <!-- This breaks stuff: [displayWith]=\"displayPropertyResolver$ | async\" -->\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [enabled]=\"autocomplete\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n\n <ng-container matSuffix>\n\n <mat-icon\n *ngIf=\"!autocomplete\" class=\"select-arrow noselect\"\n (click)=\"onInputClicked(autoTrigger)\">\n arrow_drop_down\n </mat-icon>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"selectionPopup && (!entityWrapper.value || !allowNull)\"\n [disabled]=\"isLocked\"\n (click)=\"openSelectionPopup($event)\" aria-label=\"Search\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>search</mat-icon>\n </button>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"entityWrapper.value && allowNull\"\n [disabled]=\"isLocked\"\n (click)=\"clear($event)\" aria-label=\"Clear\"\n elderStopEventPropagation\n tabIndex=\"-1\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n </ng-container>\n\n <mat-hint *ngIf=\"entityWrapper.hintText\">{{entityWrapper.hintText}}</mat-hint>\n\n</mat-form-field>\n\n\n\n", styles: [".prefix-container{width:24px;height:16px}@-webkit-keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}@keyframes shrink{0%{transform:scale(1)}to{transform:scale(.75)}}.loading{animation:shrink .3s ease-in-out infinite alternate;-webkit-animation:shrink .3s ease-in-out infinite alternate}.prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}.full-width{width:100%}.select{cursor:pointer;width:162px}.select-arrow{font-size:18px;width:18px;height:18px;cursor:pointer}\n"], components: [{ type: i1$5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$5.MatLabel, selector: "mat-label" }, { type: i1$5.MatPrefix, selector: "[matPrefix]" }, { type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i5$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: ElderSelectOnTabDirective, selector: "[elderSelectOnTab]" }, { type: i5$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$5.MatSuffix, selector: "[matSuffix]" }, { type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]" }, { type: i1$5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i1$2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21324
21268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectComponent, decorators: [{
21325
21269
  type: Component,
21326
21270
  args: [{ selector: 'elder-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -21336,6 +21280,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
21336
21280
  type: Output
21337
21281
  }], entityChange: [{
21338
21282
  type: Output
21283
+ }], entityIdUpdated: [{
21284
+ type: Output
21285
+ }], entityUpdated: [{
21286
+ type: Output
21339
21287
  }], autocomplete: [{
21340
21288
  type: Input
21341
21289
  }], allowNull: [{
@@ -21415,67 +21363,123 @@ class ElderMultiSelectBase extends ElderSelectBase {
21415
21363
  * *
21416
21364
  **************************************************************************/
21417
21365
  this.logger = LoggerFactory.getLogger(this.constructor.name);
21418
- this._valueIds = null;
21419
- this.valueIdsChange = this.valueChange.pipe(map(values => {
21420
- if (values) {
21421
- return values.map(v => this.getEntityId(v));
21422
- }
21423
- else {
21424
- return null;
21425
- }
21426
- }));
21366
+ this.entities$ = new BehaviorSubject([]);
21367
+ this.entityIdsChange = this.valueChange.pipe(map(values => this.entityIdsFromValues(values)));
21368
+ this.entityIdsUpdated = this.valueUpdated.pipe(map(values => this.entityIdsFromValues(values)));
21369
+ this.entitiesUpdated = combineLatest([this.entityIdsUpdated, this.entities$]).pipe(filter(([updatedIds, entities]) => this.equalIds(this.getEntityIds(entities), updatedIds)), map(([updatedIds, entities]) => entities));
21427
21370
  }
21428
21371
  /***************************************************************************
21429
21372
  * *
21430
21373
  * Properties *
21431
21374
  * *
21432
21375
  **************************************************************************/
21433
- /**
21434
- * Select the value with the given id.
21435
- * @param ids
21436
- */
21437
- set valueIds(ids) {
21438
- if (!this.equalIds(ids, this._valueIds)) {
21439
- this._valueIds = ids;
21440
- this.selectValuesByIds(ids);
21441
- }
21376
+ set entities(entities) {
21377
+ this.entities$.next(entities);
21378
+ this.writeValueInternal(this.entitiesToValues(entities));
21442
21379
  }
21443
- get valueIds() {
21444
- if (this.value) {
21445
- return this.getValueIds(this.value);
21380
+ get entities() {
21381
+ return this.entities$.getValue();
21382
+ }
21383
+ set entityIds(ids) {
21384
+ if (this.valueAsId) {
21385
+ this.writeValueInternal(ids);
21446
21386
  }
21447
21387
  else {
21448
- return this._valueIds;
21388
+ this.selectEntitiesByIds(ids);
21449
21389
  }
21450
21390
  }
21391
+ get entityIds() {
21392
+ return this.entityIdsFromValues(this.value);
21393
+ }
21394
+ /***************************************************************************
21395
+ * *
21396
+ * Public API *
21397
+ * *
21398
+ **************************************************************************/
21399
+ updateValueByEntities(entities) {
21400
+ this.updateValue(this.entitiesToValues(entities));
21401
+ }
21451
21402
  /***************************************************************************
21452
21403
  * *
21453
21404
  * Internal Methods *
21454
21405
  * *
21455
21406
  **************************************************************************/
21456
21407
  onSuggestionsDcChanged(data) {
21457
- if (this._valueIds) {
21458
- this.selectValuesByIds(this._valueIds);
21408
+ if (this.valueAsId) {
21409
+ this.selectEntitiesByIds(this.entityIds);
21410
+ }
21411
+ }
21412
+ /**
21413
+ * This method is invoked after a value has been written to this control.
21414
+ *
21415
+ */
21416
+ writeToControl(value) {
21417
+ if (this.valueAsId) {
21418
+ const entityIds = value;
21419
+ // Value was written as entity ids, ensure we select entity by id
21420
+ this.logger.debug('writeToControl: value was written as ids: ' + entityIds, value);
21421
+ this.selectEntitiesByIds(entityIds);
21422
+ }
21423
+ else {
21424
+ // Value was written as entity, ensure entity is updated
21425
+ const currentEntities = this.entities;
21426
+ const newEntities = value;
21427
+ this.logger.debug('writeToControl: value was written as entities (size): ' + (newEntities === null || newEntities === void 0 ? void 0 : newEntities.length), value);
21428
+ if (!this.equalEntities(currentEntities, newEntities)) {
21429
+ this.entities$.next(newEntities);
21430
+ }
21431
+ else {
21432
+ this.logger.warn('Ignored written entities as they are already set to entities$!');
21433
+ }
21459
21434
  }
21435
+ super.writeToControl(value);
21460
21436
  }
21461
21437
  /***************************************************************************
21462
21438
  * *
21463
21439
  * Private Methods *
21464
21440
  * *
21465
21441
  **************************************************************************/
21466
- getValueIds(values) {
21442
+ entityIdsFromValues(values) {
21443
+ return values === null || values === void 0 ? void 0 : values.map(v => this.entityIdFromValue(v));
21444
+ }
21445
+ entityIdFromValue(value) {
21446
+ if (this.valueAsId) {
21447
+ return value;
21448
+ }
21449
+ else {
21450
+ const entity = value;
21451
+ return this.getEntityId(entity);
21452
+ }
21453
+ }
21454
+ entitiesToValues(entities) {
21455
+ return entities === null || entities === void 0 ? void 0 : entities.map(e => this.entityToValue(e));
21456
+ }
21457
+ entityToValue(entity) {
21458
+ if (this.valueAsId) {
21459
+ const id = this.getEntityId(entity);
21460
+ return id;
21461
+ }
21462
+ else {
21463
+ return entity;
21464
+ }
21465
+ }
21466
+ getEntityIds(values) {
21467
21467
  return values.map(v => this.getEntityId(v));
21468
21468
  }
21469
21469
  equalIds(idsA, idsB) {
21470
21470
  return Sets.equalContent(idsA, idsB);
21471
21471
  }
21472
- selectValuesByIds(ids) {
21473
- if (this.value && this.equalIds(this.getValueIds(this.value), ids)) {
21474
- return; // Already selected
21472
+ equalEntities(entitiesA, entitiesB) {
21473
+ return this.equalIds(this.getEntityIds(entitiesA), this.getEntityIds(entitiesB));
21474
+ }
21475
+ selectEntitiesByIds(ids) {
21476
+ const currentEntities = this.entities;
21477
+ if (currentEntities && this.equalIds(this.getEntityIds(currentEntities), ids)) {
21478
+ return; // Entities already loaded
21475
21479
  }
21476
- if (ids === null || ids === undefined || ids.length === 0) {
21477
- if (this.value !== null && this.value !== undefined && this.value.length !== 0) {
21478
- this.writeValueInternal([]); // TODO Or write empty list?? []
21480
+ if (!CollectionUtil.hasElements(ids)) {
21481
+ if (CollectionUtil.hasElements(currentEntities)) {
21482
+ this.writeValueInternal([]);
21479
21483
  }
21480
21484
  }
21481
21485
  else {
@@ -21487,8 +21491,8 @@ class ElderMultiSelectBase extends ElderSelectBase {
21487
21491
  loaded.forEach((v, k) => existing.set(k, v));
21488
21492
  return existing;
21489
21493
  }), map(allValuesMap => Array.from(allValuesMap.values())) // TODO Sort?
21490
- ).subscribe(values => {
21491
- this.writeValueInternal(values);
21494
+ ).subscribe(entities => {
21495
+ this.entities = entities;
21492
21496
  });
21493
21497
  }
21494
21498
  else {
@@ -21502,6 +21506,7 @@ class ElderMultiSelectBase extends ElderSelectBase {
21502
21506
  this.updateState(ElderSelectComponentState.error(err));
21503
21507
  return of([]);
21504
21508
  }), map(values => {
21509
+ this.logger.debug('Loaded entities by id:', values);
21505
21510
  const valueMap = new Map();
21506
21511
  values.forEach(v => valueMap.set(this.getEntityId(v), v));
21507
21512
  return valueMap;
@@ -21520,12 +21525,18 @@ class ElderMultiSelectBase extends ElderSelectBase {
21520
21525
  }
21521
21526
  }
21522
21527
  ElderMultiSelectBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderMultiSelectBase, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
21523
- ElderMultiSelectBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.1", type: ElderMultiSelectBase, inputs: { valueIds: "valueIds" }, outputs: { valueIdsChange: "valueIdsChange" }, usesInheritance: true, ngImport: i0 });
21528
+ ElderMultiSelectBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.1", type: ElderMultiSelectBase, inputs: { entities: "entities", entityIds: "entityIds" }, outputs: { entityIdsChange: "entityIdsChange", entityIdsUpdated: "entityIdsUpdated", entitiesUpdated: "entitiesUpdated" }, usesInheritance: true, ngImport: i0 });
21524
21529
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderMultiSelectBase, decorators: [{
21525
21530
  type: Directive
21526
- }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { valueIdsChange: [{
21531
+ }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { entityIdsChange: [{
21527
21532
  type: Output
21528
- }], valueIds: [{
21533
+ }], entityIdsUpdated: [{
21534
+ type: Output
21535
+ }], entitiesUpdated: [{
21536
+ type: Output
21537
+ }], entities: [{
21538
+ type: Input
21539
+ }], entityIds: [{
21529
21540
  type: Input
21530
21541
  }] } });
21531
21542
 
@@ -21544,7 +21555,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
21544
21555
  }]
21545
21556
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
21546
21557
 
21547
- class ValueChip {
21558
+ class SelectChip {
21548
21559
  constructor(value, displayText, color, removeable) {
21549
21560
  this.value = value;
21550
21561
  this.displayText = displayText;
@@ -21569,13 +21580,13 @@ class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
21569
21580
  this.chipColorResolver$ = new BehaviorSubject((value) => undefined);
21570
21581
  this.selectable = true;
21571
21582
  this.allowRemove = true;
21572
- this.valuesWrapped$ = combineLatest([
21573
- this.value$,
21583
+ this.selectChips$ = combineLatest([
21584
+ this.entities$,
21574
21585
  this.displayPropertyResolver$,
21575
21586
  this.chipColorResolver$
21576
21587
  ]).pipe(map(([values, dPR, cCR]) => {
21577
21588
  if (values) {
21578
- return values.map(v => new ValueChip(v, dPR(v), cCR(v), this.allowRemove));
21589
+ return values.map(v => new SelectChip(v, dPR(v), cCR(v), this.allowRemove));
21579
21590
  }
21580
21591
  else {
21581
21592
  return [];
@@ -21644,19 +21655,19 @@ class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
21644
21655
  }
21645
21656
  }
21646
21657
  addLabels(labels) {
21647
- const current = this.value ? this.value : [];
21658
+ const current = this.entities ? this.entities : [];
21648
21659
  this.replaceWith([...current, ...labels]);
21649
21660
  }
21650
21661
  addLabel(label) {
21651
21662
  this.addLabels([label]);
21652
21663
  }
21653
21664
  removeLabel(toRemove) {
21654
- const remaining = this.value
21665
+ const remaining = this.entities
21655
21666
  .filter(l => !this.isEqual(l, toRemove));
21656
21667
  this.replaceWith(remaining);
21657
21668
  }
21658
- replaceWith(labels) {
21659
- this.updateValue(labels);
21669
+ replaceWith(entities) {
21670
+ this.updateValueByEntities(entities);
21660
21671
  }
21661
21672
  /***************************************************************************
21662
21673
  * *
@@ -21664,8 +21675,8 @@ class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
21664
21675
  * *
21665
21676
  **************************************************************************/
21666
21677
  isAlreadyPresent(queryValue) {
21667
- if (this.value) {
21668
- return this.value.some(v => this.isEqual(v, queryValue));
21678
+ if (this.entities) {
21679
+ return this.entities.some(v => this.isEqual(v, queryValue));
21669
21680
  }
21670
21681
  else {
21671
21682
  return false;
@@ -21681,10 +21692,10 @@ class ElderMultiSelectChipsComponent extends ElderMultiSelectBase {
21681
21692
  }
21682
21693
  }
21683
21694
  ElderMultiSelectChipsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderMultiSelectChipsComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
21684
- ElderMultiSelectChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderMultiSelectChipsComponent, selector: "elder-multi-select-chips", inputs: { allowRemove: "allowRemove", chipTemplate: "chipTemplate", chipColorResolver: "chipColorResolver" }, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), queries: [{ propertyName: "chipTemplateQuery", first: true, predicate: ElderSelectChipDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "inputControl", first: true, predicate: ["chipInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(valuesWrapped$ | async) as chipValues\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n\n <mat-chip-list selectable #chips>\n <mat-chip *ngFor=\"let chipModel of chipValues\"\n class=\"noselect\"\n [color]=\"chipModel.color\" selectable selected\n [removable]=\"chipModel.removeable\"\n (removed)=\"removeLabel(chipModel.value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"chipTemplate || simpleChipTemplate; context: {$implicit: chipModel}\">\n </ng-container>\n <mat-icon matChipRemove *ngIf=\"chipModel.removeable\">cancel</mat-icon>\n </mat-chip>\n\n <input matInput type=\"text\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [name]=\"name + '-multi-chips-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matChipInputFor]=\"chips\"\n [matAutocomplete]\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n autocomplete=\"off\"\n #chipInput>\n </mat-chip-list>\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n <mat-hint *ngIf=\"hint\">{{hint | translate}}</mat-hint>\n\n</mat-form-field>\n\n\n<ng-template #simpleChipTemplate let-chipModel>\n {{chipModel.displayText}}\n</ng-template>\n\n", styles: [".prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}\n"], components: [{ type: i1$5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2$1.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$5.MatLabel, selector: "mat-label" }, { type: i1$5.MatPrefix, selector: "[matPrefix]" }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2$1.MatChipRemove, selector: "[matChipRemove]" }, { type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i1$5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i1$2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21695
+ ElderMultiSelectChipsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: ElderMultiSelectChipsComponent, selector: "elder-multi-select-chips", inputs: { allowRemove: "allowRemove", chipTemplate: "chipTemplate", chipColorResolver: "chipColorResolver" }, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), queries: [{ propertyName: "chipTemplateQuery", first: true, predicate: ElderSelectChipDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "inputControl", first: true, predicate: ["chipInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-form-field *ngIf=\"(selectChips$ | async) as chipValues\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n\n <mat-chip-list selectable #chips>\n <mat-chip *ngFor=\"let chipModel of chipValues\"\n class=\"noselect\"\n [color]=\"chipModel.color\" selectable selected\n [removable]=\"chipModel.removeable\"\n (removed)=\"removeLabel(chipModel.value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"chipTemplate || simpleChipTemplate; context: {$implicit: chipModel}\">\n </ng-container>\n <mat-icon matChipRemove *ngIf=\"chipModel.removeable\">cancel</mat-icon>\n </mat-chip>\n\n <input matInput type=\"text\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [name]=\"name + '-multi-chips-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matChipInputFor]=\"chips\"\n [matAutocomplete]\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n autocomplete=\"off\"\n #chipInput>\n </mat-chip-list>\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n <mat-hint *ngIf=\"hint\">{{hint | translate}}</mat-hint>\n\n</mat-form-field>\n\n\n<ng-template #simpleChipTemplate let-chipModel>\n {{chipModel.displayText}}\n</ng-template>\n\n", styles: [".prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}\n"], components: [{ type: i1$5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2$1.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: ElderAutocompleteComponent, selector: "elder-autocomplete", inputs: ["isOptionDisabledFn", "isOptionHiddenFn", "enabled", "valueTemplate", "suggestionsDc", "displayPropertyResolver"], outputs: ["optionSelected"], exportAs: ["elderAutocomplete"] }], directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i1$5.MatLabel, selector: "mat-label" }, { type: i1$5.MatPrefix, selector: "[matPrefix]" }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2$1.MatChipRemove, selector: "[matChipRemove]" }, { type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: ElderAutocompleteDirective, selector: "[elderElderAutocomplete]", inputs: ["queryFilter", "filters", "sorts", "elderElderAutocomplete"] }, { type: i1$5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "async": i3$1.AsyncPipe, "translate": i1$2.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
21685
21696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderMultiSelectChipsComponent, decorators: [{
21686
21697
  type: Component,
21687
- args: [{ selector: 'elder-multi-select-chips', changeDetection: ChangeDetectionStrategy.OnPush, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), template: "<mat-form-field *ngIf=\"(valuesWrapped$ | async) as chipValues\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n\n <mat-chip-list selectable #chips>\n <mat-chip *ngFor=\"let chipModel of chipValues\"\n class=\"noselect\"\n [color]=\"chipModel.color\" selectable selected\n [removable]=\"chipModel.removeable\"\n (removed)=\"removeLabel(chipModel.value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"chipTemplate || simpleChipTemplate; context: {$implicit: chipModel}\">\n </ng-container>\n <mat-icon matChipRemove *ngIf=\"chipModel.removeable\">cancel</mat-icon>\n </mat-chip>\n\n <input matInput type=\"text\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [name]=\"name + '-multi-chips-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matChipInputFor]=\"chips\"\n [matAutocomplete]\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n autocomplete=\"off\"\n #chipInput>\n </mat-chip-list>\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n <mat-hint *ngIf=\"hint\">{{hint | translate}}</mat-hint>\n\n</mat-form-field>\n\n\n<ng-template #simpleChipTemplate let-chipModel>\n {{chipModel.displayText}}\n</ng-template>\n\n", styles: [".prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}\n"] }]
21698
+ args: [{ selector: 'elder-multi-select-chips', changeDetection: ChangeDetectionStrategy.OnPush, providers: buildFormIntegrationProviders(ElderMultiSelectChipsComponent), template: "<mat-form-field *ngIf=\"(selectChips$ | async) as chipValues\" fxFlex\n class=\"elder-std-form-field\"\n [appearance]=\"appearance\"\n [floatLabel]=\"floatLabel\"\n [color]=\"color\"\n>\n\n <mat-label *ngIf=\"label\">{{label | translate}}</mat-label>\n\n\n <ng-container matPrefix *ngIf=\"(mergedState$ | async) as state\">\n\n <mat-icon *ngIf=\"icon\" disabled\n class=\"leading-icon prefix-padding noselect\"\n [class.loading]=\"state.loading\"\n [color]=\"state?.error ? 'warn' : color\">\n {{icon}}\n </mat-icon>\n\n\n <mat-icon *ngIf=\"!icon && state?.error\"\n class=\"leading-icon prefix-padding noselect\"\n color=\"warn\">\n warning\n </mat-icon>\n </ng-container>\n\n <!-- A dynamic input -->\n\n <mat-chip-list selectable #chips>\n <mat-chip *ngFor=\"let chipModel of chipValues\"\n class=\"noselect\"\n [color]=\"chipModel.color\" selectable selected\n [removable]=\"chipModel.removeable\"\n (removed)=\"removeLabel(chipModel.value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"chipTemplate || simpleChipTemplate; context: {$implicit: chipModel}\">\n </ng-container>\n <mat-icon matChipRemove *ngIf=\"chipModel.removeable\">cancel</mat-icon>\n </mat-chip>\n\n <input matInput type=\"text\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [name]=\"name + '-multi-chips-inner-input'\"\n [placeholder]=\"placeholder | translate\"\n [matChipInputFor]=\"chips\"\n [matAutocomplete]\n [elderElderAutocomplete]=\"elderAuto\" [queryFilter]=\"queryFilter\" [filters]=\"filters\" [sorts]=\"sorts\"\n autocomplete=\"off\"\n #chipInput>\n </mat-chip-list>\n\n <elder-autocomplete\n #elderAuto=\"elderAutocomplete\"\n [suggestionsDc]=\"suggestionsDc$ | async\"\n [valueTemplate]=\"valueTemplate\"\n [displayPropertyResolver]=\"displayPropertyResolver$ | async\"\n [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n (optionSelected)=\"onOptionSelected($any($event))\"\n ></elder-autocomplete>\n\n <mat-hint *ngIf=\"hint\">{{hint | translate}}</mat-hint>\n\n</mat-form-field>\n\n\n<ng-template #simpleChipTemplate let-chipModel>\n {{chipModel.displayText}}\n</ng-template>\n\n", styles: [".prefix-padding{padding-right:4px}.leading-icon{font-size:16px;width:16px;height:16px}\n"] }]
21688
21699
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { allowRemove: [{
21689
21700
  type: Input
21690
21701
  }], inputControl: [{
@@ -21699,6 +21710,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
21699
21710
  type: Input
21700
21711
  }] } });
21701
21712
 
21713
+ class ElderAutoSelectFirstDirective {
21714
+ /***************************************************************************
21715
+ * *
21716
+ * Constructor *
21717
+ * *
21718
+ **************************************************************************/
21719
+ constructor(elderSelect) {
21720
+ this.elderSelect = elderSelect;
21721
+ /***************************************************************************
21722
+ * *
21723
+ * Fields *
21724
+ * *
21725
+ **************************************************************************/
21726
+ this.log = LoggerFactory.getLogger(this.constructor.name);
21727
+ }
21728
+ /***************************************************************************
21729
+ * *
21730
+ * Life Cycle *
21731
+ * *
21732
+ **************************************************************************/
21733
+ ngAfterViewInit() {
21734
+ setTimeout(() => {
21735
+ this.log.info('autoSelectFirst after-view init, auto selecting value');
21736
+ this.handleAutoSelectFirst();
21737
+ }, 10);
21738
+ }
21739
+ /***************************************************************************
21740
+ * *
21741
+ * Properties *
21742
+ * *
21743
+ **************************************************************************/
21744
+ /**
21745
+ * After data is loaded into this select, ensure that
21746
+ * a value is selected or select the first automatically.
21747
+ */
21748
+ set autoSelectFirstEnabled(val) {
21749
+ this.enabled = coerceBooleanProperty(val);
21750
+ }
21751
+ set enabled(val) {
21752
+ this._enabled = val;
21753
+ }
21754
+ get enabled() {
21755
+ return this._enabled;
21756
+ }
21757
+ /***************************************************************************
21758
+ * *
21759
+ * Private methods *
21760
+ * *
21761
+ **************************************************************************/
21762
+ handleAutoSelectFirst() {
21763
+ if (!this.elderSelect.value) {
21764
+ this.log.debug('Attempting to auto select first entity...');
21765
+ ElderSelectFirstUtil.trySelectFirst(this.elderSelect);
21766
+ }
21767
+ else {
21768
+ this.log.warn('Conflict avoided: Aborted auto selection because value id already present!');
21769
+ }
21770
+ }
21771
+ }
21772
+ ElderAutoSelectFirstDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderAutoSelectFirstDirective, deps: [{ token: ElderSelectComponent }], target: i0.ɵɵFactoryTarget.Directive });
21773
+ ElderAutoSelectFirstDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.1", type: ElderAutoSelectFirstDirective, selector: "[autoSelectFirst]", inputs: { autoSelectFirstEnabled: ["autoSelectFirst", "autoSelectFirstEnabled"] }, ngImport: i0 });
21774
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderAutoSelectFirstDirective, decorators: [{
21775
+ type: Directive,
21776
+ args: [{
21777
+ selector: '[autoSelectFirst]'
21778
+ }]
21779
+ }], ctorParameters: function () { return [{ type: ElderSelectComponent }]; }, propDecorators: { autoSelectFirstEnabled: [{
21780
+ type: Input,
21781
+ args: ['autoSelectFirst']
21782
+ }] } });
21783
+
21702
21784
  class ElderSelectModule {
21703
21785
  }
21704
21786
  ElderSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -21706,10 +21788,10 @@ ElderSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
21706
21788
  ElderSelectValueDirective,
21707
21789
  TemplatedSelectionDialogComponent,
21708
21790
  SelectionModelPopupDirective,
21709
- SelectOnTabDirective,
21791
+ ElderSelectOnTabDirective,
21710
21792
  ElderMultiSelectChipsComponent,
21711
21793
  ElderSelectChipDirective,
21712
- AutoSelectFirstDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule,
21794
+ ElderAutoSelectFirstDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule,
21713
21795
  MatFormFieldModule,
21714
21796
  MatIconModule,
21715
21797
  MatSelectModule,
@@ -21724,7 +21806,7 @@ ElderSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versi
21724
21806
  SelectionModelPopupDirective,
21725
21807
  ElderMultiSelectChipsComponent,
21726
21808
  ElderSelectChipDirective,
21727
- AutoSelectFirstDirective] });
21809
+ ElderAutoSelectFirstDirective] });
21728
21810
  ElderSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: ElderSelectModule, imports: [[
21729
21811
  CommonModule, FormsModule, ReactiveFormsModule,
21730
21812
  MatFormFieldModule,
@@ -21757,10 +21839,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
21757
21839
  ElderSelectValueDirective,
21758
21840
  TemplatedSelectionDialogComponent,
21759
21841
  SelectionModelPopupDirective,
21760
- SelectOnTabDirective,
21842
+ ElderSelectOnTabDirective,
21761
21843
  ElderMultiSelectChipsComponent,
21762
21844
  ElderSelectChipDirective,
21763
- AutoSelectFirstDirective
21845
+ ElderAutoSelectFirstDirective
21764
21846
  ],
21765
21847
  exports: [
21766
21848
  ElderSelectComponent,
@@ -21769,7 +21851,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
21769
21851
  SelectionModelPopupDirective,
21770
21852
  ElderMultiSelectChipsComponent,
21771
21853
  ElderSelectChipDirective,
21772
- AutoSelectFirstDirective
21854
+ ElderAutoSelectFirstDirective
21773
21855
  ]
21774
21856
  }]
21775
21857
  }] });
@@ -25119,5 +25201,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
25119
25201
  * Generated bundle index. Do not edit.
25120
25202
  */
25121
25203
 
25122
- export { AuditedEntity, AutoSelectFirstDirective, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceAutoReloader, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, EbsCommonDialogService, EbsToastService, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipListSelectComponent, ElderChipListSelectModule, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewBaseModule, ElderDataViewSelectionMode, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDatesModule, ElderDelayedFocusDirective, ElderDialogConfig, ElderDialogModule, ElderDialogService, ElderDimensionsInputComponent, ElderDurationInputComponent, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollLegacyDirective, ElderInfiniteScrollModule, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMaxDirective, ElderMeasuresModule, ElderMinDirective, ElderMultiAutoCompleteModule, ElderMultiAutocompleteComponent, ElderMultiSelectBase, ElderMultiSelectChipsComponent, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderPlugParentFormDirectiveLegacy, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityInputComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredIgnoreZeroValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSelectChipDirective, ElderSelectComponent, ElderSelectListComponent, ElderSelectListItemComponent, ElderSelectListModule, ElderSelectModule, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderStopEventPropagationDirectiveLegacy, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderTimeModule, ElderToastModule, ElderToastService, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTouchedDirectiveLegacy, ElderTripleStateCheckboxDirective, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileUploadClient, Filter, FilterContext, FilterUtil, FormFieldBaseComponent, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownLocaleType, LazyBehaviorSubject, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveMap, RefreshingEntity, ReplacementResult, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectOnTabDirective, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, TextRange, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToastService, ToastType, TokenChunkRequest, ToolbarHeader, TranslatedEnumValue, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, WordPositionFinder, alphaNumStringComparator, buildFormIntegrationProviders, existingOrNewElderTableModel, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isListDataSource, isPagedDataSource, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone };
25204
+ export { AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceAutoReloader, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, EbsCommonDialogService, EbsToastService, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipListSelectComponent, ElderChipListSelectModule, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewBaseModule, ElderDataViewSelectionMode, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDatesModule, ElderDelayedFocusDirective, ElderDialogConfig, ElderDialogModule, ElderDialogService, ElderDimensionsInputComponent, ElderDurationInputComponent, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollLegacyDirective, ElderInfiniteScrollModule, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMaxDirective, ElderMeasuresModule, ElderMinDirective, ElderMultiAutoCompleteModule, ElderMultiAutocompleteComponent, ElderMultiSelectBase, ElderMultiSelectChipsComponent, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderPlugParentFormDirectiveLegacy, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityInputComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredIgnoreZeroValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSelectChipDirective, ElderSelectComponent, ElderSelectListComponent, ElderSelectListItemComponent, ElderSelectListModule, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderStopEventPropagationDirectiveLegacy, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderTimeModule, ElderToastModule, ElderToastService, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTouchedDirectiveLegacy, ElderTripleStateCheckboxDirective, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileUploadClient, Filter, FilterContext, FilterUtil, FormFieldBaseComponent, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownLocaleType, LazyBehaviorSubject, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveMap, RefreshingEntity, ReplacementResult, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, TextRange, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToastService, ToastType, TokenChunkRequest, ToolbarHeader, TranslatedEnumValue, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, WordPositionFinder, alphaNumStringComparator, buildFormIntegrationProviders, existingOrNewElderTableModel, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isListDataSource, isPagedDataSource, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone };
25123
25205
  //# sourceMappingURL=elderbyte-ngx-starter.mjs.map