@flywheel-io/vision 1.7.2 → 1.7.3

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.
@@ -3547,18 +3547,24 @@ class FwMenuSubItemComponent {
3547
3547
  this.variant = 'default';
3548
3548
  }
3549
3549
  handleClick(evt) {
3550
- evt.stopPropagation();
3551
- if (!this.disabled) {
3552
- if (this.href) {
3553
- if (this.target) {
3554
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3555
- window.open(this.href, this.target).focus();
3556
- }
3557
- else {
3558
- window.location.href = this.href;
3559
- }
3550
+ if (this.disabled) {
3551
+ evt.stopPropagation();
3552
+ return;
3553
+ }
3554
+ if (this.href) {
3555
+ if (this.target) {
3556
+ // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3557
+ window.open(this.href, this.target).focus();
3558
+ }
3559
+ else {
3560
+ window.location.href = this.href;
3560
3561
  }
3562
+ evt.stopPropagation();
3563
+ return;
3564
+ }
3565
+ if (this.value) {
3561
3566
  this.click.emit(this.value);
3567
+ evt.stopPropagation();
3562
3568
  }
3563
3569
  }
3564
3570
  }
@@ -3750,18 +3756,24 @@ class FwMenuItemComponent {
3750
3756
  this.updateLayout();
3751
3757
  }
3752
3758
  handleClick(evt) {
3753
- evt.stopPropagation();
3754
- if (!this.disabled) {
3755
- if (this.href) {
3756
- if (this.target) {
3757
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3758
- window.open(this.href, this.target).focus();
3759
- }
3760
- else {
3761
- window.location.href = this.href;
3762
- }
3759
+ if (this.disabled) {
3760
+ evt.stopPropagation();
3761
+ return;
3762
+ }
3763
+ if (this.href) {
3764
+ if (this.target) {
3765
+ // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3766
+ window.open(this.href, this.target).focus();
3767
+ }
3768
+ else {
3769
+ window.location.href = this.href;
3763
3770
  }
3771
+ evt.stopPropagation();
3772
+ return;
3773
+ }
3774
+ if (this.value) {
3764
3775
  this.click.emit(this.value);
3776
+ evt.stopPropagation();
3765
3777
  }
3766
3778
  }
3767
3779
  }
@@ -4947,6 +4959,7 @@ class FwMultiSelectMenuComponent {
4947
4959
  this.focused = 0;
4948
4960
  this.touched = false;
4949
4961
  this._isOpen = false;
4962
+ this._value = [];
4950
4963
  this.onTouched = () => {
4951
4964
  };
4952
4965
  }
@@ -4963,12 +4976,6 @@ class FwMultiSelectMenuComponent {
4963
4976
  return this._value;
4964
4977
  }
4965
4978
  set value(newValue) {
4966
- if (newValue && newValue.length > 0) {
4967
- this._valueType = typeof newValue[0];
4968
- }
4969
- else {
4970
- this._valueType = typeof newValue;
4971
- }
4972
4979
  this.updateValue(newValue);
4973
4980
  }
4974
4981
  registerOnChange(fn) {
@@ -4999,7 +5006,11 @@ class FwMultiSelectMenuComponent {
4999
5006
  if (this.options && this.options.length === 0) {
5000
5007
  this.options = [];
5001
5008
  this.menuItems.forEach(item => {
5002
- const opt = { value: item.value, label: item.title, icon: item.icon };
5009
+ const opt = {
5010
+ value: item.value,
5011
+ label: item.title,
5012
+ icon: item.icon,
5013
+ };
5003
5014
  this.options.push(opt);
5004
5015
  if (this.selectedValues.indexOf(item.value.toString()) >= 0) {
5005
5016
  this.selectedOptions.push(opt);
@@ -5015,7 +5026,7 @@ class FwMultiSelectMenuComponent {
5015
5026
  this.touched = true;
5016
5027
  }
5017
5028
  handleClose(chip) {
5018
- this.value.splice(this.value.indexOf(chip), 1);
5029
+ this.value.splice(this.value.indexOf(chip[this.valueProperty]), 1);
5019
5030
  this.updateValue(this.value);
5020
5031
  this.trigger.close();
5021
5032
  }
@@ -5055,7 +5066,6 @@ class FwMultiSelectMenuComponent {
5055
5066
  }
5056
5067
  }
5057
5068
  updateValue(value) {
5058
- this._value = value;
5059
5069
  this.selectedValues = [];
5060
5070
  this.selectedOptions = [];
5061
5071
  if (value) {
@@ -5077,6 +5087,7 @@ class FwMultiSelectMenuComponent {
5077
5087
  }
5078
5088
  });
5079
5089
  }
5090
+ this._value = this.selectedValues;
5080
5091
  this.updateFilteredItems();
5081
5092
  if (this.onChange) {
5082
5093
  this.onChange(value);
@@ -5106,49 +5117,60 @@ class FwMultiSelectMenuComponent {
5106
5117
  }
5107
5118
  }
5108
5119
  handleKeyDown(event) {
5109
- if (event.key === 'Backspace') {
5110
- if (this.value.length > 0 && event.target['value'].length === 0) {
5111
- this.value.splice(this.value.length - 1, 1);
5112
- this.updateValue(this.value);
5120
+ if (this.trigger.isOpen()) {
5121
+ if (event.key === 'ArrowDown') {
5122
+ this.moveFocused('down');
5113
5123
  }
5114
- }
5115
- else if (event.key === 'ArrowDown') {
5116
- this.moveFocused('down');
5117
- }
5118
- else if (event.key === 'ArrowUp') {
5119
- this.moveFocused('up');
5120
- }
5121
- else if (this.trigger.isOpen() && event.key === 'Tab') {
5122
- this.trigger.close();
5123
- }
5124
- else if (this.trigger.isOpen() && event.key === 'Escape') {
5125
- this.trigger.close();
5126
- }
5127
- }
5128
- handleKeyUp(event) {
5129
- if (event.key === 'Enter') {
5130
- if (this.filteredOptions.length > this.focused) {
5131
- if (!this.value.includes(this.filteredOptions[this.focused])) {
5132
- const newValue = [...this.value, this.filteredOptions[this.focused]];
5133
- this.updateValue(newValue);
5124
+ else if (event.key === 'ArrowUp') {
5125
+ this.moveFocused('up');
5126
+ }
5127
+ else if (event.key === 'Tab') {
5128
+ this.trigger.close();
5129
+ if (event.target) {
5130
+ event.target['value'] = '';
5131
+ }
5132
+ this.filteredOptions = this.options;
5133
+ }
5134
+ else if (event.key === 'Escape') {
5135
+ this.trigger.close();
5136
+ if (event.target) {
5137
+ event.target['value'] = '';
5138
+ }
5139
+ this.filteredOptions = this.options;
5140
+ }
5141
+ else if (event.key === 'Enter') {
5142
+ if (this.filteredOptions.length > this.focused) {
5143
+ if (!this.value.includes(this.filteredOptions[this.focused])) {
5144
+ const newValue = [...this.value, this.filteredOptions[this.focused][this.valueProperty]];
5145
+ if (event.target) {
5146
+ event.target['value'] = '';
5147
+ }
5148
+ this.filteredOptions = this.options;
5149
+ this.updateValue(newValue);
5150
+ if (this.closeOnSelect) {
5151
+ setTimeout(() => {
5152
+ this.trigger.close();
5153
+ }, 0);
5154
+ }
5155
+ else {
5156
+ setTimeout(() => {
5157
+ this.trigger.open();
5158
+ }, 0);
5159
+ }
5160
+ }
5134
5161
  }
5135
5162
  }
5136
- event.target['value'] = '';
5137
5163
  }
5138
5164
  else {
5139
- this.trigger.open();
5140
- setTimeout(() => {
5141
- if (this.renderedMenuItems) {
5142
- this.renderedMenuItems.forEach(rmi => {
5143
- rmi.focused = false;
5144
- });
5145
- const item = this.renderedMenuItems.get(this.focused);
5146
- if (item) {
5147
- item.focused = true;
5148
- }
5165
+ if (event.key === 'Backspace') {
5166
+ if (this.value.length > 0 && event.target['value'].length === 0) {
5167
+ this.value.splice(this.value.length - 1, 1);
5168
+ this.updateValue(this.value);
5149
5169
  }
5150
- }, 200);
5170
+ }
5151
5171
  }
5172
+ }
5173
+ handleInput(event) {
5152
5174
  if (event.target['value'].length > 0) {
5153
5175
  this.filteredOptions = this.options.filter(option => {
5154
5176
  if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
@@ -5158,14 +5180,15 @@ class FwMultiSelectMenuComponent {
5158
5180
  return false;
5159
5181
  }
5160
5182
  });
5161
- if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') {
5162
- this.moveFocused('zero');
5163
- }
5164
5183
  }
5165
5184
  else {
5166
5185
  this.filteredOptions = this.options;
5167
5186
  this.updateFilteredItems();
5168
5187
  }
5188
+ if (!this.trigger.isOpen()) {
5189
+ this.trigger.open();
5190
+ }
5191
+ this.moveFocused('zero');
5169
5192
  }
5170
5193
  }
5171
5194
  FwMultiSelectMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwMultiSelectMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -5175,7 +5198,7 @@ FwMultiSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
5175
5198
  useExisting: forwardRef(() => FwMultiSelectMenuComponent),
5176
5199
  multi: true,
5177
5200
  },
5178
- ], queries: [{ propertyName: "menuItems", predicate: FwMenuItemComponent }], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "textInitialInput", first: true, predicate: ["textInitialInput"], descendants: true }, { propertyName: "renderedMenuItems", predicate: FwMenuItemComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"{width: width}\">\n <div\n class=\"chip-grid\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (keyup)=\"handleKeyUp($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (keyup)=\"handleKeyUp($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\">\n <fw-menu\n [multiSelect]=\"true\"\n [useCheckbox]=\"useCheckbox\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"menuItems && menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0\"\n [disabled]=\"true\" label=\"No options\">\n </fw-menu-item>\n </ng-container>\n <ng-content select=\"[fw-menu-item, fw-menu-separator]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:6px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"] }, { kind: "component", type: FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "multiSelect", "hidden", "showTooltip", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "pipe", type: i1$1.SlicePipe, name: "slice" }] });
5201
+ ], queries: [{ propertyName: "menuItems", predicate: FwMenuItemComponent }], viewQueries: [{ propertyName: "trigger", first: true, predicate: CdkMenuTrigger, descendants: true }, { propertyName: "menu", first: true, predicate: FwMenuComponent, descendants: true }, { propertyName: "textInput", first: true, predicate: ["textInput"], descendants: true }, { propertyName: "textInitialInput", first: true, predicate: ["textInitialInput"], descendants: true }, { propertyName: "renderedMenuItems", predicate: FwMenuItemComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"{width: width}\">\n <div\n class=\"chip-grid\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\">\n <fw-menu\n [multiSelect]=\"true\"\n [useCheckbox]=\"useCheckbox\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"menuItems && menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [showCheckbox]=\"useCheckbox\"\n [focused]=\"focused===$index\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0\"\n [disabled]=\"true\" label=\"No options\">\n </fw-menu-item>\n </ng-container>\n <ng-content select=\"[fw-menu-item, fw-menu-separator]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:6px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"] }, { kind: "component", type: FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "multiSelect", "hidden", "showTooltip", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "pipe", type: i1$1.SlicePipe, name: "slice" }] });
5179
5202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwMultiSelectMenuComponent, decorators: [{
5180
5203
  type: Component,
5181
5204
  args: [{ selector: 'fw-multi-select', providers: [
@@ -5184,7 +5207,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
5184
5207
  useExisting: forwardRef(() => FwMultiSelectMenuComponent),
5185
5208
  multi: true,
5186
5209
  },
5187
- ], template: "<div [ngStyle]=\"{width: width}\">\n <div\n class=\"chip-grid\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (keyup)=\"handleKeyUp($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (keyup)=\"handleKeyUp($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\">\n <fw-menu\n [multiSelect]=\"true\"\n [useCheckbox]=\"useCheckbox\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"menuItems && menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0\"\n [disabled]=\"true\" label=\"No options\">\n </fw-menu-item>\n </ng-container>\n <ng-content select=\"[fw-menu-item, fw-menu-separator]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:6px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"] }]
5210
+ ], template: "<div [ngStyle]=\"{width: width}\">\n <div\n class=\"chip-grid\"\n [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n [cdkMenuTriggerFor]=\"selectMenu\">\n <div class=\"inner-chip-grid\" *ngIf=\"value && value.length>0\">\n <fw-chip\n *ngFor=\"let chip of selectedOptions | slice:0:maxSelectedShown\"\n [title]=\"chip[titleProperty]\"\n [value]=\"chip[valueProperty]\"\n [icon]=\"chip[iconProperty]\"\n color=\"primary\"\n [showClose]=\"true\"\n (close)=\"handleClose(chip)\"\n [selectable]=\"false\">\n </fw-chip>\n <span *ngIf=\"value.length>maxSelectedShown\" class=\"max-exceeded\">+{{ value.length - maxSelectedShown }}\n more</span>\n <input\n type=\"text\" #textInput\n class=\"placeholder\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n </div>\n <input\n type=\"text\" #textInitialInput\n *ngIf=\"!value || value.length===0\"\n class=\"placeholder\" [placeholder]=\"placeholder\"\n (focus)=\"handleTouched()\"\n (keydown)=\"handleKeyDown($event)\" (input)=\"handleInput($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\">\n <fw-menu\n [multiSelect]=\"true\"\n [useCheckbox]=\"useCheckbox\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"menuItems && menuItems.length===0\">\n <fw-menu-item\n *ngFor=\"let item of filteredOptions; index as $index\"\n [title]=\"item[titleProperty]\"\n [value]=\"item[valueProperty]\"\n [icon]=\"item[iconProperty]\"\n [multiSelect]=\"true\"\n [showCheckbox]=\"useCheckbox\"\n [focused]=\"focused===$index\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0\"\n [disabled]=\"true\" label=\"No options\">\n </fw-menu-item>\n </ng-container>\n <ng-content select=\"[fw-menu-item, fw-menu-separator]\"></ng-content>\n </fw-menu>\n </fw-menu-container>\n </ng-template>\n</div>\n", styles: [":host .chip-grid{min-height:36px;box-sizing:border-box;color:var(--typography-light);background:var(--page-light);display:flex;padding:6px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid:focus-within{border-color:var(--primary-base)}:host .chip-grid .inner-chip-grid{display:flex;flex-wrap:wrap;gap:4px;overflow:hidden auto;align-items:center;flex:1}:host .chip-grid .inner-chip-grid input{display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder{padding:0 2px 0 4px;font-size:14px;color:var(--typography-base);background:var(--page-light);border:0;outline:0;display:inline-flex;width:10px;flex-grow:1}:host .chip-grid .placeholder:focus{outline:none!important}:host .chip-grid .placeholder::placeholder{color:var(--typography-light)}:host .chip-grid fw-icon{font-size:20px}:host .chip-grid fw-icon:hover{color:var(--primary-base)}:host .chip-grid .max-exceeded{font-size:12px}\n"] }]
5188
5211
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { outsideClick: [{
5189
5212
  type: HostListener,
5190
5213
  args: ['document:click']
@@ -5390,11 +5413,21 @@ class FwSelectMenuComponent {
5390
5413
  if (this.inFocusOpen) {
5391
5414
  if (event.key === 'ArrowDown') {
5392
5415
  this.moveFocused('down');
5393
- this.updateValue(this.options[this.focused]);
5416
+ if (this._valueType === 'object') {
5417
+ this.updateValue(this.options[this.focused]);
5418
+ }
5419
+ else {
5420
+ this.updateValue(this.options[this.focused][this.valueProperty]);
5421
+ }
5394
5422
  }
5395
5423
  if (event.key === 'ArrowUp') {
5396
5424
  this.moveFocused('up');
5397
- this.updateValue(this.options[this.focused]);
5425
+ if (this._valueType === 'object') {
5426
+ this.updateValue(this.options[this.focused]);
5427
+ }
5428
+ else {
5429
+ this.updateValue(this.options[this.focused][this.valueProperty]);
5430
+ }
5398
5431
  }
5399
5432
  if (event.key === 'Tab') {
5400
5433
  this.trigger.close();
@@ -5422,6 +5455,13 @@ class FwSelectMenuComponent {
5422
5455
  this.updateValue(this.preFocusValue);
5423
5456
  }
5424
5457
  }
5458
+ else {
5459
+ if (this.showReset) {
5460
+ if (event.key === 'Escape') {
5461
+ this.handleReset();
5462
+ }
5463
+ }
5464
+ }
5425
5465
  }
5426
5466
  updateValue(value) {
5427
5467
  this._value = value;
@@ -5461,7 +5501,12 @@ class FwSelectMenuComponent {
5461
5501
  }
5462
5502
  handleReset() {
5463
5503
  if (this.showReset) {
5464
- this.updateValue('');
5504
+ if (this._valueType === 'object') {
5505
+ this.updateValue(null);
5506
+ }
5507
+ else {
5508
+ this.updateValue('');
5509
+ }
5465
5510
  }
5466
5511
  }
5467
5512
  }
@@ -7409,9 +7454,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7409
7454
  }]
7410
7455
  }] });
7411
7456
 
7457
+ class FwWrappedInputComponent {
7458
+ get classes() {
7459
+ return [
7460
+ 'fw-wrapped-input',
7461
+ ].join(' ');
7462
+ }
7463
+ ;
7464
+ }
7465
+ FwWrappedInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7466
+ FwWrappedInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FwWrappedInputComponent, selector: "fw-wrapped-input", inputs: { title: "title", description: "description" }, host: { properties: { "attr.class": "this.classes" } }, ngImport: i0, template: "<label>\n <fw-form-heading *ngIf=\"title\" [title]=\"title\" [description]=\"description\"></fw-form-heading>\n <ng-content select=\"fw-form-heading\"></ng-content>\n</label>\n<div class=\"input-wrapper\">\n <ng-content\n select=\"fw-button-toggle, fw-date-input, fw-text-input, fw-phone-input, fw-textarea-input, fw-select, fw-multi-select\"></ng-content>\n</div>\n", styles: [".fw-wrapped-input{display:flex;flex-direction:column;flex:1}.fw-wrapped-input .input-wrapper{display:flex;flex-direction:row;flex:1;gap:16px}.fw-wrapped-input .input-wrapper>*{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwFormHeadingComponent, selector: "fw-form-heading", inputs: ["title", "description", "status"] }], encapsulation: i0.ViewEncapsulation.None });
7467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputComponent, decorators: [{
7468
+ type: Component,
7469
+ args: [{ selector: 'fw-wrapped-input', encapsulation: ViewEncapsulation.None, template: "<label>\n <fw-form-heading *ngIf=\"title\" [title]=\"title\" [description]=\"description\"></fw-form-heading>\n <ng-content select=\"fw-form-heading\"></ng-content>\n</label>\n<div class=\"input-wrapper\">\n <ng-content\n select=\"fw-button-toggle, fw-date-input, fw-text-input, fw-phone-input, fw-textarea-input, fw-select, fw-multi-select\"></ng-content>\n</div>\n", styles: [".fw-wrapped-input{display:flex;flex-direction:column;flex:1}.fw-wrapped-input .input-wrapper{display:flex;flex-direction:row;flex:1;gap:16px}.fw-wrapped-input .input-wrapper>*{flex:1}\n"] }]
7470
+ }], propDecorators: { title: [{
7471
+ type: Input
7472
+ }], description: [{
7473
+ type: Input
7474
+ }], classes: [{
7475
+ type: HostBinding,
7476
+ args: ['attr.class']
7477
+ }] } });
7478
+
7479
+ class FwWrappedInputModule {
7480
+ }
7481
+ FwWrappedInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7482
+ FwWrappedInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, declarations: [FwWrappedInputComponent], imports: [CommonModule,
7483
+ FwFormHeadingModule], exports: [FwWrappedInputComponent] });
7484
+ FwWrappedInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, imports: [CommonModule,
7485
+ FwFormHeadingModule] });
7486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, decorators: [{
7487
+ type: NgModule,
7488
+ args: [{
7489
+ imports: [
7490
+ CommonModule,
7491
+ FwFormHeadingModule,
7492
+ ],
7493
+ exports: [
7494
+ FwWrappedInputComponent,
7495
+ ],
7496
+ declarations: [
7497
+ FwWrappedInputComponent,
7498
+ ],
7499
+ }]
7500
+ }] });
7501
+
7412
7502
  /**
7413
7503
  * Generated bundle index. Do not edit.
7414
7504
  */
7415
7505
 
7416
- export { DialogWidth, FwAlertComponent, FwAlertModule, FwAppIconComponent, FwAppIconModule, FwAvatarComponent, FwAvatarModule, FwBackButtonComponent, FwBadgeComponent, FwBadgeModule, FwBreadcrumbsComponent, FwBreadcrumbsModule, FwButtonComponent, FwButtonDangerDirective, FwButtonDirective, FwButtonModule, FwButtonPrimaryDirective, FwButtonSecondaryDirective, FwButtonSuccessDirective, FwButtonToggleComponent, FwButtonToggleItemComponent, FwButtonToggleModule, FwCardAttributeComponent, FwCardAuthorComponent, FwCardComponent, FwCardContentComponent, FwCardFooterComponent, FwCardHeaderComponent, FwCardModule, FwChipComponent, FwChipModule, FwContainedInputComponent, FwContainedInputModule, FwCrumbComponent, FwDateInputComponent, FwDateInputModule, FwDialogActionsComponent, FwDialogComponent, FwDialogConfirmComponent, FwDialogContentComponent, FwDialogHeaderComponent, FwDialogService, FwDialogSimpleComponent, FwDialogsModule, FwFormHeadingComponent, FwFormHeadingModule, FwGridComponent, FwGridItemComponent, FwIconButtonComponent, FwIconButtonModule, FwIconComponent, FwIconModule, FwLayoutContextComponent, FwLayoutGroupComponent, FwLayoutPanelComponent, FwLayoutSidebarComponent, FwLayoutToolbarComponent, FwLayoutsModule, FwLegacyChoiceDialogComponent, FwLegacyConfirmDialogComponent, FwLegacyDialogModule, FwLegacyDialogService, FwLegacyErrorDialogComponent, FwLegacyPortalDialogComponent, FwMenuCloseTriggersDirective, FwMenuComponent, FwMenuContainerComponent, FwMenuHeaderComponent, FwMenuItemComponent, FwMenuModule, FwMenuSeparatorComponent, FwMenuSubItemComponent, FwMultiSelectMenuComponent, FwNavbarComponent, FwNavbarHeaderComponent, FwNavbarItemComponent, FwNavbarModule, FwNavbarSubItemComponent, FwNotificationComponent, FwNotificationContainerComponent, FwNotificationModule, FwNotificationService, FwNotificationType, FwPaginatorAdvancedComponent, FwPaginatorComponent, FwPaginatorModule, FwPhoneInputComponent, FwPhoneInputModule, FwPopoverComponent, FwPopoverModule, FwPopoverPanelComponent, FwProgressBarComponent, FwProgressModule, FwProgressSpinnerComponent, FwSectionHeadingComponent, FwSectionHeadingModule, FwSelectMenuComponent, FwSelectMenuModule, FwSnackbarComponent, FwSnackbarContainerComponent, FwSnackbarModule, FwSnackbarService, FwStepComponent, FwStepDecoratorComponent, FwStepperComponent, FwStepperModule, FwSubsectionHeadingComponent, FwSwitchComponent, FwSwitchModule, FwTabComponent, FwTabPanelComponent, FwTabsComponent, FwTabsModule, FwTextAreaInputComponent, FwTextAreaInputModule, FwTextInputComponent, FwTextInputModule, FwTooltipComponent, FwTooltipModule, FwTooltipPanelComponent, FwValidators, LayoutWidth, MinimalTranslationService, TranslationService, allIcons, genId, genMessageId };
7506
+ export { DialogWidth, FwAlertComponent, FwAlertModule, FwAppIconComponent, FwAppIconModule, FwAvatarComponent, FwAvatarModule, FwBackButtonComponent, FwBadgeComponent, FwBadgeModule, FwBreadcrumbsComponent, FwBreadcrumbsModule, FwButtonComponent, FwButtonDangerDirective, FwButtonDirective, FwButtonModule, FwButtonPrimaryDirective, FwButtonSecondaryDirective, FwButtonSuccessDirective, FwButtonToggleComponent, FwButtonToggleItemComponent, FwButtonToggleModule, FwCardAttributeComponent, FwCardAuthorComponent, FwCardComponent, FwCardContentComponent, FwCardFooterComponent, FwCardHeaderComponent, FwCardModule, FwChipComponent, FwChipModule, FwContainedInputComponent, FwContainedInputModule, FwCrumbComponent, FwDateInputComponent, FwDateInputModule, FwDialogActionsComponent, FwDialogComponent, FwDialogConfirmComponent, FwDialogContentComponent, FwDialogHeaderComponent, FwDialogService, FwDialogSimpleComponent, FwDialogsModule, FwFormHeadingComponent, FwFormHeadingModule, FwGridComponent, FwGridItemComponent, FwIconButtonComponent, FwIconButtonModule, FwIconComponent, FwIconModule, FwLayoutContextComponent, FwLayoutGroupComponent, FwLayoutPanelComponent, FwLayoutSidebarComponent, FwLayoutToolbarComponent, FwLayoutsModule, FwLegacyChoiceDialogComponent, FwLegacyConfirmDialogComponent, FwLegacyDialogModule, FwLegacyDialogService, FwLegacyErrorDialogComponent, FwLegacyPortalDialogComponent, FwMenuCloseTriggersDirective, FwMenuComponent, FwMenuContainerComponent, FwMenuHeaderComponent, FwMenuItemComponent, FwMenuModule, FwMenuSeparatorComponent, FwMenuSubItemComponent, FwMultiSelectMenuComponent, FwNavbarComponent, FwNavbarHeaderComponent, FwNavbarItemComponent, FwNavbarModule, FwNavbarSubItemComponent, FwNotificationComponent, FwNotificationContainerComponent, FwNotificationModule, FwNotificationService, FwNotificationType, FwPaginatorAdvancedComponent, FwPaginatorComponent, FwPaginatorModule, FwPhoneInputComponent, FwPhoneInputModule, FwPopoverComponent, FwPopoverModule, FwPopoverPanelComponent, FwProgressBarComponent, FwProgressModule, FwProgressSpinnerComponent, FwSectionHeadingComponent, FwSectionHeadingModule, FwSelectMenuComponent, FwSelectMenuModule, FwSnackbarComponent, FwSnackbarContainerComponent, FwSnackbarModule, FwSnackbarService, FwStepComponent, FwStepDecoratorComponent, FwStepperComponent, FwStepperModule, FwSubsectionHeadingComponent, FwSwitchComponent, FwSwitchModule, FwTabComponent, FwTabPanelComponent, FwTabsComponent, FwTabsModule, FwTextAreaInputComponent, FwTextAreaInputModule, FwTextInputComponent, FwTextInputModule, FwTooltipComponent, FwTooltipModule, FwTooltipPanelComponent, FwValidators, FwWrappedInputComponent, FwWrappedInputModule, LayoutWidth, MinimalTranslationService, TranslationService, allIcons, genId, genMessageId };
7417
7507
  //# sourceMappingURL=flywheel-io-vision.mjs.map