@tft/crispr-forms 12.2.11 → 12.2.15

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 (36) hide show
  1. package/bundles/tft-crispr-forms.umd.js +57 -50
  2. package/bundles/tft-crispr-forms.umd.js.map +1 -1
  3. package/esm2015/lib/abstracts/autocomplete-field.abstract.js +4 -4
  4. package/esm2015/lib/abstracts/autocomplete-field.abstract.js.map +1 -1
  5. package/esm2015/lib/crispr-forms.module.ngfactory.js.map +1 -1
  6. package/esm2015/lib/form-group-list/form-group-list.component.js +1 -1
  7. package/esm2015/lib/form-group-list/form-group-list.component.js.map +1 -1
  8. package/esm2015/lib/form-group-list/form-group-list.component.metadata.json +1 -1
  9. package/esm2015/lib/form.helpers.js +4 -9
  10. package/esm2015/lib/form.helpers.js.map +1 -1
  11. package/esm2015/lib/form.helpers.metadata.json +1 -1
  12. package/esm2015/lib/material/autocomplete-chiplist-field/autocomplete-chiplist-field.component.js +28 -10
  13. package/esm2015/lib/material/autocomplete-chiplist-field/autocomplete-chiplist-field.component.js.map +1 -1
  14. package/esm2015/lib/material/autocomplete-chiplist-field/autocomplete-chiplist-field.component.metadata.json +1 -1
  15. package/esm2015/lib/material/autocomplete-field/autocomplete-field.component.js +7 -17
  16. package/esm2015/lib/material/autocomplete-field/autocomplete-field.component.js.map +1 -1
  17. package/esm2015/lib/material/autocomplete-field/autocomplete-field.component.metadata.json +1 -1
  18. package/esm2015/lib/material/datepicker-field/datepicker-field.component.js +9 -3
  19. package/esm2015/lib/material/datepicker-field/datepicker-field.component.js.map +1 -1
  20. package/esm2015/lib/material/datepicker-field/datepicker-field.component.metadata.json +1 -1
  21. package/esm2015/lib/material/material.module.ngfactory.js.map +1 -1
  22. package/esm2015/lib/models/autocomplete-chiplist-field.config.js.map +1 -1
  23. package/esm2015/lib/models/datepicker-field.config.js.map +1 -1
  24. package/esm2015/lib/pipes/initial-control-value.pipe.js +2 -2
  25. package/esm2015/lib/pipes/initial-control-value.pipe.js.map +1 -1
  26. package/fesm2015/tft-crispr-forms.js +51 -44
  27. package/fesm2015/tft-crispr-forms.js.map +1 -1
  28. package/lib/form.helpers.d.ts +1 -1
  29. package/lib/material/autocomplete-chiplist-field/autocomplete-chiplist-field.component.d.ts +11 -4
  30. package/lib/material/autocomplete-field/autocomplete-field.component.d.ts +0 -6
  31. package/lib/models/autocomplete-chiplist-field.config.d.ts +9 -1
  32. package/lib/models/datepicker-field.config.d.ts +4 -1
  33. package/package.json +1 -1
  34. package/tft-crispr-forms-12.2.15.tgz +0 -0
  35. package/tft-crispr-forms.metadata.json +1 -1
  36. package/tft-crispr-forms-12.2.11.tgz +0 -0
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('@angular/forms'), require('rxjs/operators'), require('@angular/core'), require('@angular/material/autocomplete'), require('@angular/cdk/portal'), require('@angular/common'), require('@angular/material/button'), require('@angular/material/button-toggle'), require('@angular/material/checkbox'), require('@angular/material/chips'), require('@angular/material/datepicker'), require('@angular/material/form-field'), require('@angular/material/icon'), require('@angular/material/input'), require('@angular/material/radio'), require('@angular/material/select'), require('@angular/material/slide-toggle'), require('@angular/material/slider'), require('@angular/material/tooltip'), require('@angular/material/divider'), require('@angular/material/progress-bar'), require('@tft/form-validation-handler'), require('@angular/material-moment-adapter')) :
3
- typeof define === 'function' && define.amd ? define('@tft/crispr-forms', ['exports', 'rxjs', '@angular/forms', 'rxjs/operators', '@angular/core', '@angular/material/autocomplete', '@angular/cdk/portal', '@angular/common', '@angular/material/button', '@angular/material/button-toggle', '@angular/material/checkbox', '@angular/material/chips', '@angular/material/datepicker', '@angular/material/form-field', '@angular/material/icon', '@angular/material/input', '@angular/material/radio', '@angular/material/select', '@angular/material/slide-toggle', '@angular/material/slider', '@angular/material/tooltip', '@angular/material/divider', '@angular/material/progress-bar', '@tft/form-validation-handler', '@angular/material-moment-adapter'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.tft = global.tft || {}, global.tft['crispr-forms'] = {}), global.rxjs, global.ng.forms, global.rxjs.operators, global.ng.core, global.ng.material.autocomplete, global.ng.cdk.portal, global.ng.common, global.ng.material.button, global.ng.material.buttonToggle, global.ng.material.checkbox, global.ng.material.chips, global.ng.material.datepicker, global.ng.material.formField, global.ng.material.icon, global.ng.material.input, global.ng.material.radio, global.ng.material.select, global.ng.material.slideToggle, global.ng.material.slider, global.ng.material.tooltip, global.ng.material.divider, global.ng.material.progressBar, global.formValidationHandler, global.ng.materialMomentAdapter));
5
- }(this, (function (exports, rxjs, forms, operators, core, autocomplete, portal, common, button, buttonToggle, checkbox, chips, datepicker, formField, icon, input, radio, select, slideToggle, slider, tooltip, divider, progressBar, formValidationHandler, materialMomentAdapter) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('@angular/forms'), require('rxjs/operators'), require('@angular/core'), require('@angular/material/autocomplete'), require('@angular/cdk/keycodes'), require('@angular/cdk/portal'), require('@angular/common'), require('@angular/material/button'), require('@angular/material/button-toggle'), require('@angular/material/checkbox'), require('@angular/material/chips'), require('@angular/material/datepicker'), require('@angular/material/form-field'), require('@angular/material/icon'), require('@angular/material/input'), require('@angular/material/radio'), require('@angular/material/select'), require('@angular/material/slide-toggle'), require('@angular/material/slider'), require('@angular/material/tooltip'), require('@angular/material/divider'), require('@angular/material/progress-bar'), require('@tft/form-validation-handler'), require('@angular/material-moment-adapter')) :
3
+ typeof define === 'function' && define.amd ? define('@tft/crispr-forms', ['exports', 'rxjs', '@angular/forms', 'rxjs/operators', '@angular/core', '@angular/material/autocomplete', '@angular/cdk/keycodes', '@angular/cdk/portal', '@angular/common', '@angular/material/button', '@angular/material/button-toggle', '@angular/material/checkbox', '@angular/material/chips', '@angular/material/datepicker', '@angular/material/form-field', '@angular/material/icon', '@angular/material/input', '@angular/material/radio', '@angular/material/select', '@angular/material/slide-toggle', '@angular/material/slider', '@angular/material/tooltip', '@angular/material/divider', '@angular/material/progress-bar', '@tft/form-validation-handler', '@angular/material-moment-adapter'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.tft = global.tft || {}, global.tft['crispr-forms'] = {}), global.rxjs, global.ng.forms, global.rxjs.operators, global.ng.core, global.ng.material.autocomplete, global.ng.cdk.keycodes, global.ng.cdk.portal, global.ng.common, global.ng.material.button, global.ng.material.buttonToggle, global.ng.material.checkbox, global.ng.material.chips, global.ng.material.datepicker, global.ng.material.formField, global.ng.material.icon, global.ng.material.input, global.ng.material.radio, global.ng.material.select, global.ng.material.slideToggle, global.ng.material.slider, global.ng.material.tooltip, global.ng.material.divider, global.ng.material.progressBar, global.formValidationHandler, global.ng.materialMomentAdapter));
5
+ }(this, (function (exports, rxjs, forms, operators, core, autocomplete, keycodes, portal, common, button, buttonToggle, checkbox, chips, datepicker, formField, icon, input, radio, select, slideToggle, slider, tooltip, divider, progressBar, formValidationHandler, materialMomentAdapter) { 'use strict';
6
6
 
7
7
  var DEFAULT_EMPTY_OPTIONS_MESSAGE = 'No Items';
8
8
 
@@ -164,7 +164,7 @@
164
164
  * @param options the options passed in from the config
165
165
  * @param emptyMessageOption the message to display when the array is empty
166
166
  */
167
- function observablifyOptions(options, parentGroup, searchString, emptyOptionsMessage) {
167
+ function observablifyOptions(options, parentGroup, searchString) {
168
168
  var calledOptions = callOptionsIfFunction(options, parentGroup, searchString);
169
169
  // if options are a promise
170
170
  return calledOptions instanceof Promise
@@ -178,13 +178,8 @@
178
178
  : rxjs.isObservable(calledOptions)
179
179
  // return it
180
180
  ? calledOptions
181
- // else return empty option
182
- : rxjs.of([
183
- {
184
- label: emptyOptionsMessage || DEFAULT_EMPTY_OPTIONS_MESSAGE,
185
- value: null
186
- }
187
- ]);
181
+ // else an empty array
182
+ : rxjs.of([]);
188
183
  }
189
184
  /**
190
185
  * Determines if the field config is for a form control (not a divider, heading or other non-control field)
@@ -621,9 +616,9 @@
621
616
  _super.prototype.ngOnInit.call(this);
622
617
  this.group.addControl(this.config.controlName, new forms.FormControl());
623
618
  // filter options by the search string using either the default filter function or one passed in through config
624
- this.options$ = this.autocompleteInputControl.valueChanges.pipe(operators.debounceTime(this.config.typeDebounceTime), operators.distinctUntilChanged(), operators.map(function (searchText) { return searchText || ''; }), operators.switchMap(function (searchText) {
625
- return observablifyOptions(_this.config.options, _this.group, searchText, _this.config.emptyOptionsMessage);
626
- }));
619
+ this.options$ = this.autocompleteInputControl.valueChanges.pipe(
620
+ // this is needed to have the options panel to open on focus
621
+ operators.startWith(''), operators.debounceTime(this.config.typeDebounceTime), operators.distinctUntilChanged(), operators.map(function (searchText) { return searchText || ''; }), operators.switchMap(function (searchText) { return observablifyOptions(_this.config.options, _this.group, searchText); }));
627
622
  };
628
623
  return AbstractAutocompleteComponent;
629
624
  }(AbstractAutocompleteFieldMixin));
@@ -705,7 +700,8 @@
705
700
 
706
701
  var defaultConfig$8 = {
707
702
  autoActiveFirstOption: true,
708
- typeDebounceTime: 500
703
+ typeDebounceTime: 500,
704
+ emptyOptionsMessage: DEFAULT_EMPTY_OPTIONS_MESSAGE
709
705
  };
710
706
  var AutocompleteFieldComponent = /** @class */ (function (_super) {
711
707
  __extends(AutocompleteFieldComponent, _super);
@@ -716,13 +712,12 @@
716
712
  }
717
713
  AutocompleteFieldComponent.prototype.ngOnInit = function () {
718
714
  _super.prototype.ngOnInit.call(this);
719
- this.setControlValue(this.value);
720
715
  };
721
716
  AutocompleteFieldComponent.prototype.setControlValue = function (value) {
722
- if (value && this.control) {
717
+ if (this.control && value) {
723
718
  // sets the initial value on the control if one is passed
724
- this.control.setValue(value.value); // value.value :)
725
- this.autocompleteInputControl.setValue(value.label);
719
+ this.control.setValue(value.value || '');
720
+ this.autocompleteInputControl.setValue(value.label || '');
726
721
  }
727
722
  };
728
723
  /**
@@ -744,23 +739,12 @@
744
739
  this.control.setValue(event.option.value);
745
740
  this.autoInputRef.nativeElement.blur();
746
741
  };
747
- /**
748
- * To follow ARIA standards we want to select the active option on blur.
749
- * We do this by selecting the MatAutoCompleteTrigger, which triggers the select event
750
- * @param event blur event that triggers the handle blur, TODO: remove this parameter if not used by 7/4/19
751
- */
752
- AutocompleteFieldComponent.prototype.handleTab = function (_event) {
753
- if (this.autoInput.activeOption) {
754
- this.autoInput.activeOption.select();
755
- this.control.setValue(this.autoInput.activeOption.value);
756
- }
757
- };
758
742
  return AutocompleteFieldComponent;
759
743
  }(AbstractAutocompleteComponent));
760
744
  AutocompleteFieldComponent.decorators = [
761
745
  { type: core.Component, args: [{
762
746
  selector: 'crispr-autocomplete-field',
763
- template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matAutocomplete]=\"auto\"\n (keydown.tab)=\"handleTab($event)\"\n role=\"textbox\"\n type=\"textbox\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput>\n\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"displayLabel(options$ | async)\">\n\n <mat-option\n *ngFor=\"let option of options$ | async\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n\n </mat-autocomplete>\n </mat-form-field>\n</crispr-field-container>\n",
747
+ template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matAutocomplete]=\"auto\"\n role=\"textbox\"\n type=\"textbox\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput>\n\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"displayLabel(options$ | async)\">\n\n <ng-container *ngIf=\"options$ | async as options; else emptyOption\">\n <ng-container *ngIf=\"options.length > 0; else emptyOption\">\n <mat-option\n *ngFor=\"let option of options$ | async\"\n [value]=\"option.value\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n </ng-container>\n\n </ng-container>\n <ng-template #emptyOption>\n <mat-option disabled=\"true\">\n {{config.emptyOptionsMessage}}\n </mat-option>\n </ng-template>\n\n </mat-autocomplete>\n </mat-form-field>\n</crispr-field-container>\n",
764
748
  changeDetection: core.ChangeDetectionStrategy.OnPush,
765
749
  styles: [""]
766
750
  },] }
@@ -773,11 +757,13 @@
773
757
  var defaultConfig$7 = {
774
758
  chipsSelectable: true,
775
759
  areChipsRemovable: true,
776
- addChipOnBlur: true,
777
- autoActiveFirstOption: true,
760
+ tabToSelect: true,
761
+ autoActiveFirstOption: false,
778
762
  imageUrlParam: 'image',
779
763
  typeDebounceTime: 500,
780
- allowDuplicates: false
764
+ allowDuplicates: false,
765
+ separatorKeyCodes: [keycodes.ENTER],
766
+ emptyOptionsMessage: DEFAULT_EMPTY_OPTIONS_MESSAGE,
781
767
  };
782
768
  var AutocompleteChiplistFieldComponent = /** @class */ (function (_super) {
783
769
  __extends(AutocompleteChiplistFieldComponent, _super);
@@ -796,11 +782,11 @@
796
782
  this.remainingOptions$ = rxjs.combineLatest([
797
783
  this.chips$,
798
784
  this.options$
799
- ]).pipe(operators.map(function (_a) {
800
- var _b = __read(_a, 2), chips = _b[0], options = _b[1];
785
+ ]).pipe(operators.map(function (_b) {
786
+ var _c = __read(_b, 2), chips = _c[0], options = _c[1];
801
787
  return _this.config.allowDuplicates
802
788
  ? options
803
- : options.filter(function (option) {
789
+ : options === null || options === void 0 ? void 0 : options.filter(function (option) {
804
790
  return !chips.some(function (chip) { return chip.value === option.value; });
805
791
  });
806
792
  }));
@@ -810,20 +796,38 @@
810
796
  this.chips$.next(value);
811
797
  }
812
798
  };
799
+ // handles mat selecting
813
800
  AutocompleteChiplistFieldComponent.prototype.handleSelect = function (event) {
801
+ var _this = this;
814
802
  var selectedOption = event.option.value;
815
803
  this.chips$.next(__spreadArray(__spreadArray([], __read(this.chips$.value)), [selectedOption]));
816
804
  this.chipInputRef.nativeElement.value = '';
817
805
  this.autocompleteInputControl.setValue('');
806
+ // setTimeout needed because the panel thinks it's still open at this point
807
+ setTimeout(function () { return _this.chipInput.openPanel(); });
818
808
  };
819
809
  /**
820
810
  * To follow ARIA standards we want to select the active option on blur.
821
- * @param event blur event that triggers the handle blur, TODO: remove this parameter if not used by 7/4/19
811
+ * matChipInputAddOnBlur should do this but it causes buggy behaviour
812
+ * @param event blur event that triggers the handle blur
822
813
  */
823
814
  AutocompleteChiplistFieldComponent.prototype.handleTab = function (_event) {
815
+ if (this.chipInput.activeOption && (this.config.tabToSelect || this.config.addChipOnBlur)) {
816
+ var chip = this.chipInput.activeOption.value;
817
+ this.chips$.next(__spreadArray(__spreadArray([], __read(this.chips$.value)), [chip]));
818
+ }
819
+ };
820
+ /**
821
+ * Handles selection via key tokens passed through separatorKeyCodes propert
822
+ * NOTE: If TAB is used focus does not move on to next component
823
+ * @param event
824
+ */
825
+ AutocompleteChiplistFieldComponent.prototype.handleTokenEnd = function (event) {
826
+ var _a;
824
827
  if (this.chipInput.activeOption) {
825
828
  this.chipInput.activeOption.select();
826
829
  }
830
+ (_a = event.chipInput) === null || _a === void 0 ? void 0 : _a.clear();
827
831
  };
828
832
  AutocompleteChiplistFieldComponent.prototype.mapToLabel = function (option) {
829
833
  return option ? option.label : '';
@@ -832,17 +836,14 @@
832
836
  var remainingChips = this.chips$.value.filter(function (chip) { return chip !== removedChip; });
833
837
  this.chips$.next(remainingChips);
834
838
  };
835
- AutocompleteChiplistFieldComponent.prototype.inputFilter = function (stringToCheck, searchString) {
836
- return stringToCheck.toLowerCase().includes(searchString.trim().toLowerCase());
837
- };
838
839
  return AutocompleteChiplistFieldComponent;
839
840
  }(AbstractAutocompleteComponent));
840
841
  AutocompleteChiplistFieldComponent.decorators = [
841
842
  { type: core.Component, args: [{
842
843
  selector: 'crispr-autocomplete-chiplist-field',
843
- template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n\n <mat-chip-list\n #chipList>\n <mat-chip\n class=\"refinement-chip\"\n *ngFor=\"let chip of controlValue$ | async\"\n [selectable]=\"config.chipsSelectable\"\n [removable]=\"config.areChipsRemovable\"\n (removed)=\"removeChip(chip)\">\n {{chip.label}}\n <mat-icon\n matChipRemove\n *ngIf=\"config.areChipsRemovable\">\n cancel\n </mat-icon>\n </mat-chip>\n\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n (keydown.tab)=\"handleTab($event)\"\n role=\"textbox\"\n type=\"text\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput/>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n </mat-chip-list>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"this.config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"mapToLabel\">\n\n <mat-option\n *ngFor=\"let option of remainingOptions$ | async\"\n [value]=\"option\">\n\n <img\n *ngIf=\"option[config.imageUrlParam]\"\n [src]=\"option[config.imageUrlParam]\"\n style=\"vertical-align:middle;\"\n aria-hidden\n height=\"25\"/>\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n\n\n </mat-form-field>\n</crispr-field-container>\n",
844
+ template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n\n <mat-chip-list\n #chipList>\n <mat-chip\n class=\"refinement-chip\"\n *ngFor=\"let chip of controlValue$ | async\"\n [selectable]=\"config.chipsSelectable\"\n [removable]=\"config.areChipsRemovable\"\n (removed)=\"removeChip(chip)\">\n <span *ngIf=\"chip.imageUrl as imageUrl\" class=\"image-container\">\n <img [src]=\"imageUrl\" alt=\"\">\n </span>\n {{chip.label}}\n <mat-icon\n matChipRemove\n *ngIf=\"config.areChipsRemovable\">\n cancel\n </mat-icon>\n </mat-chip>\n\n <input\n matInput\n [formControl]=\"autocompleteInputControl\"\n [placeholder]=\"config.placeholder\"\n [matChipInputFor]=\"chipList\"\n [matAutocomplete]=\"auto\"\n (keydown.tab)=\"handleTab($event)\"\n [matChipInputSeparatorKeyCodes]=\"config.separatorKeyCodes\"\n (matChipInputTokenEnd)=\"handleTokenEnd($event)\"\n role=\"searchbox\"\n type=\"text\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n spellcheck=\"false\"\n #autoInput/>\n <span *ngIf=\"config.fieldSuffix\" matSuffix>{{config.fieldSuffix}}</span>\n <crispr-info\n *ngIf=\"config.info\"\n matSuffix\n [info]=\"config.info \">\n </crispr-info>\n\n </mat-chip-list>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [autoActiveFirstOption]=\"this.config.autoActiveFirstOption\"\n (optionSelected)=\"handleSelect($event)\"\n [displayWith]=\"mapToLabel\">\n <ng-container *ngIf=\"remainingOptions$ | async as remainingOptions; else emptyOption\">\n <ng-container *ngIf=\"remainingOptions.length > 0; else emptyOption\">\n <mat-option\n *ngFor=\"let option of remainingOptions$ | async\"\n [value]=\"option\">\n <crispr-option [option]=\"option\"></crispr-option>\n </mat-option>\n </ng-container>\n\n </ng-container>\n <ng-template #emptyOption>\n <mat-option disabled=\"true\">\n {{config.emptyOptionsMessage}}\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n\n </mat-form-field>\n</crispr-field-container>\n",
844
845
  changeDetection: core.ChangeDetectionStrategy.OnPush,
845
- styles: [""]
846
+ styles: [".refinement-chip .image-container{width:26px;height:26px;border-radius:50%;overflow:hidden;margin:-2px 4px -2px -8px}.refinement-chip .image-container img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}"]
846
847
  },] }
847
848
  ];
848
849
  AutocompleteChiplistFieldComponent.propDecorators = {
@@ -974,6 +975,12 @@
974
975
  var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
975
976
  _this.defaultConfig = defaultConfig$3;
976
977
  return _this;
978
+ // handleSelectedChange(event, picker: MatDatepicker<unknown>) {
979
+ // console.log({event, picker})
980
+ // if(this.config.selectedChange) {
981
+ // this.config.selectedChange(event, picker);
982
+ // }
983
+ // }
977
984
  }
978
985
  DatepickerFieldComponent.prototype.ngOnInit = function () {
979
986
  var _a, _b;
@@ -987,8 +994,8 @@
987
994
  this.dateClass$ = this.config.dateClass ? (_b = this.config) === null || _b === void 0 ? void 0 : _b.dateClass(this.group) : rxjs.of(function () { return ''; });
988
995
  };
989
996
  DatepickerFieldComponent.prototype.ngAfterContentInit = function () {
990
- if (this.config.calendarFooterComponent) {
991
- this.calendarFooterPortal = new portal.ComponentPortal(this.config.calendarFooterComponent);
997
+ if (this.config.datepickerActions) {
998
+ this.calendarFooterPortal = new portal.ComponentPortal(this.config.datepickerActions);
992
999
  }
993
1000
  };
994
1001
  return DatepickerFieldComponent;
@@ -996,7 +1003,7 @@
996
1003
  DatepickerFieldComponent.decorators = [
997
1004
  { type: core.Component, args: [{
998
1005
  selector: 'crispr-datepicker-field',
999
- template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n matInput\n [formControlName]=\"config.controlName\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [matDatepicker]=\"picker\"\n [matDatepickerFilter]=\"config.datepickerFilter\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker\n [touchUi]=\"config.touchUi\"\n [startView]=\"config.startView\"\n [startAt]=\"startAt$ | async\"\n [dateClass]=\"dateClass || (dateClass$ | async)\"\n #picker>\n <mat-datepicker-actions>\n <ng-template [cdkPortalOutlet]=\"calendarFooterPortal\"></ng-template>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n </mat-form-field>\n</crispr-field-container>\n\n",
1006
+ template: "<crispr-field-container\n [config]=\"config\"\n [group]=\"group\">\n <mat-form-field\n [color]=\"config.color\"\n [appearance]=\"config.appearance\"\n [formGroup]=\"group\">\n <mat-label *ngIf=\"config.label\">\n {{config.label}}\n </mat-label>\n <input\n matInput\n [formControlName]=\"config.controlName\"\n [min]=\"config.min\"\n [max]=\"config.max\"\n [matDatepicker]=\"picker\"\n [matDatepickerFilter]=\"config.datepickerFilter\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker\n [touchUi]=\"config.touchUi\"\n [startView]=\"config.startView\"\n [startAt]=\"startAt$ | async\"\n [dateClass]=\"dateClass || (dateClass$ | async)\"\n #picker>\n <mat-datepicker-actions *ngIf=\"calendarFooterPortal\">\n <ng-template [cdkPortalOutlet]=\"calendarFooterPortal\"></ng-template>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n </mat-form-field>\n</crispr-field-container>\n\n",
1000
1007
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1001
1008
  styles: [""]
1002
1009
  },] }
@@ -1490,7 +1497,7 @@
1490
1497
  FormGroupListComponent.decorators = [
1491
1498
  { type: core.Component, args: [{
1492
1499
  selector: 'crispr-form-group-list',
1493
- template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n <!-- TODO: add sortBy function -->\n <div *ngFor=\"let control of formArray?.controls; let i = index;\">\n <!-- TODO: use content projection to allow custom item label component -->\n <span class=\"mat-h3\" *ngIf=\"config.itemLabelBuilder\"> {{ config.itemLabelBuilder(i) }} </span>\n <button\n mat-icon-button\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"deleteGroup(i)\">delete</mat-icon>\n </button>\n <div\n [formGroupName]=\"i\">\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [config]=\"field\"\n [value]=\"value | initialControlValue : field\"\n [group]=\"control\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <button\n type=\"button\"\n mat-raised-button\n (click)=\"addGroup()\">\n {{config.addItemLabel}}\n </button>\n\n</crispr-field-container>\n",
1500
+ template: "\n<crispr-field-container\n [config]=\"config\"\n [group]=\"group\"\n [formGroup]=\"group\">\n\n <div [formArrayName]=\"config.controlName\">\n <!-- TODO: add sortBy function -->\n <div *ngFor=\"let control of formArray?.controls; let i = index;\">\n <!-- TODO: use content projection to allow custom item label component -->\n <span class=\"mat-h3\" *ngIf=\"config.itemLabelBuilder\"> {{ config.itemLabelBuilder(i) }} </span>\n <button\n mat-icon-button\n *ngIf=\"i + 1 > config.minListLength\">\n <mat-icon (click)=\"deleteGroup(i)\">delete</mat-icon>\n </button>\n <div\n [formGroupName]=\"i\">\n <ng-container\n *ngFor=\"let field of config.itemConfig.fields;\"\n crisprField\n [config]=\"field\"\n [value]=\"value[i] | initialControlValue : field\"\n [group]=\"control\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <button\n type=\"button\"\n mat-raised-button\n (click)=\"addGroup()\">\n {{config.addItemLabel}}\n </button>\n\n</crispr-field-container>\n",
1494
1501
  changeDetection: core.ChangeDetectionStrategy.OnPush,
1495
1502
  styles: [""]
1496
1503
  },] }
@@ -1598,8 +1605,8 @@
1598
1605
  }
1599
1606
  // TODO: does changing any to unknown break anything?
1600
1607
  InitialControlValuePipe.prototype.transform = function (initialFormValue, fieldConfig) {
1601
- return initialFormValue && isControlConfig(fieldConfig) && initialFormValue[fieldConfig.controlName]
1602
- ? initialFormValue[fieldConfig.controlName]
1608
+ return (initialFormValue && isControlConfig(fieldConfig))
1609
+ ? initialFormValue[fieldConfig.controlName] || null
1603
1610
  : null;
1604
1611
  };
1605
1612
  return InitialControlValuePipe;