@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.
@@ -3563,18 +3563,24 @@ class FwMenuSubItemComponent {
3563
3563
  this.variant = 'default';
3564
3564
  }
3565
3565
  handleClick(evt) {
3566
- evt.stopPropagation();
3567
- if (!this.disabled) {
3568
- if (this.href) {
3569
- if (this.target) {
3570
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3571
- window.open(this.href, this.target).focus();
3572
- }
3573
- else {
3574
- window.location.href = this.href;
3575
- }
3566
+ if (this.disabled) {
3567
+ evt.stopPropagation();
3568
+ return;
3569
+ }
3570
+ if (this.href) {
3571
+ if (this.target) {
3572
+ // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3573
+ window.open(this.href, this.target).focus();
3574
+ }
3575
+ else {
3576
+ window.location.href = this.href;
3576
3577
  }
3578
+ evt.stopPropagation();
3579
+ return;
3580
+ }
3581
+ if (this.value) {
3577
3582
  this.click.emit(this.value);
3583
+ evt.stopPropagation();
3578
3584
  }
3579
3585
  }
3580
3586
  }
@@ -3766,18 +3772,24 @@ class FwMenuItemComponent {
3766
3772
  this.updateLayout();
3767
3773
  }
3768
3774
  handleClick(evt) {
3769
- evt.stopPropagation();
3770
- if (!this.disabled) {
3771
- if (this.href) {
3772
- if (this.target) {
3773
- // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3774
- window.open(this.href, this.target).focus();
3775
- }
3776
- else {
3777
- window.location.href = this.href;
3778
- }
3775
+ if (this.disabled) {
3776
+ evt.stopPropagation();
3777
+ return;
3778
+ }
3779
+ if (this.href) {
3780
+ if (this.target) {
3781
+ // eslint-disable-next-line @rx-angular/prefer-no-layout-sensitive-apis
3782
+ window.open(this.href, this.target).focus();
3783
+ }
3784
+ else {
3785
+ window.location.href = this.href;
3779
3786
  }
3787
+ evt.stopPropagation();
3788
+ return;
3789
+ }
3790
+ if (this.value) {
3780
3791
  this.click.emit(this.value);
3792
+ evt.stopPropagation();
3781
3793
  }
3782
3794
  }
3783
3795
  }
@@ -4963,6 +4975,7 @@ class FwMultiSelectMenuComponent {
4963
4975
  this.focused = 0;
4964
4976
  this.touched = false;
4965
4977
  this._isOpen = false;
4978
+ this._value = [];
4966
4979
  this.onTouched = () => {
4967
4980
  };
4968
4981
  }
@@ -4979,12 +4992,6 @@ class FwMultiSelectMenuComponent {
4979
4992
  return this._value;
4980
4993
  }
4981
4994
  set value(newValue) {
4982
- if (newValue && newValue.length > 0) {
4983
- this._valueType = typeof newValue[0];
4984
- }
4985
- else {
4986
- this._valueType = typeof newValue;
4987
- }
4988
4995
  this.updateValue(newValue);
4989
4996
  }
4990
4997
  registerOnChange(fn) {
@@ -5015,7 +5022,11 @@ class FwMultiSelectMenuComponent {
5015
5022
  if (this.options && this.options.length === 0) {
5016
5023
  this.options = [];
5017
5024
  this.menuItems.forEach(item => {
5018
- const opt = { value: item.value, label: item.title, icon: item.icon };
5025
+ const opt = {
5026
+ value: item.value,
5027
+ label: item.title,
5028
+ icon: item.icon,
5029
+ };
5019
5030
  this.options.push(opt);
5020
5031
  if (this.selectedValues.indexOf(item.value.toString()) >= 0) {
5021
5032
  this.selectedOptions.push(opt);
@@ -5031,7 +5042,7 @@ class FwMultiSelectMenuComponent {
5031
5042
  this.touched = true;
5032
5043
  }
5033
5044
  handleClose(chip) {
5034
- this.value.splice(this.value.indexOf(chip), 1);
5045
+ this.value.splice(this.value.indexOf(chip[this.valueProperty]), 1);
5035
5046
  this.updateValue(this.value);
5036
5047
  this.trigger.close();
5037
5048
  }
@@ -5071,7 +5082,6 @@ class FwMultiSelectMenuComponent {
5071
5082
  }
5072
5083
  }
5073
5084
  updateValue(value) {
5074
- this._value = value;
5075
5085
  this.selectedValues = [];
5076
5086
  this.selectedOptions = [];
5077
5087
  if (value) {
@@ -5093,6 +5103,7 @@ class FwMultiSelectMenuComponent {
5093
5103
  }
5094
5104
  });
5095
5105
  }
5106
+ this._value = this.selectedValues;
5096
5107
  this.updateFilteredItems();
5097
5108
  if (this.onChange) {
5098
5109
  this.onChange(value);
@@ -5122,49 +5133,60 @@ class FwMultiSelectMenuComponent {
5122
5133
  }
5123
5134
  }
5124
5135
  handleKeyDown(event) {
5125
- if (event.key === 'Backspace') {
5126
- if (this.value.length > 0 && event.target['value'].length === 0) {
5127
- this.value.splice(this.value.length - 1, 1);
5128
- this.updateValue(this.value);
5136
+ if (this.trigger.isOpen()) {
5137
+ if (event.key === 'ArrowDown') {
5138
+ this.moveFocused('down');
5129
5139
  }
5130
- }
5131
- else if (event.key === 'ArrowDown') {
5132
- this.moveFocused('down');
5133
- }
5134
- else if (event.key === 'ArrowUp') {
5135
- this.moveFocused('up');
5136
- }
5137
- else if (this.trigger.isOpen() && event.key === 'Tab') {
5138
- this.trigger.close();
5139
- }
5140
- else if (this.trigger.isOpen() && event.key === 'Escape') {
5141
- this.trigger.close();
5142
- }
5143
- }
5144
- handleKeyUp(event) {
5145
- if (event.key === 'Enter') {
5146
- if (this.filteredOptions.length > this.focused) {
5147
- if (!this.value.includes(this.filteredOptions[this.focused])) {
5148
- const newValue = [...this.value, this.filteredOptions[this.focused]];
5149
- this.updateValue(newValue);
5140
+ else if (event.key === 'ArrowUp') {
5141
+ this.moveFocused('up');
5142
+ }
5143
+ else if (event.key === 'Tab') {
5144
+ this.trigger.close();
5145
+ if (event.target) {
5146
+ event.target['value'] = '';
5147
+ }
5148
+ this.filteredOptions = this.options;
5149
+ }
5150
+ else if (event.key === 'Escape') {
5151
+ this.trigger.close();
5152
+ if (event.target) {
5153
+ event.target['value'] = '';
5154
+ }
5155
+ this.filteredOptions = this.options;
5156
+ }
5157
+ else if (event.key === 'Enter') {
5158
+ if (this.filteredOptions.length > this.focused) {
5159
+ if (!this.value.includes(this.filteredOptions[this.focused])) {
5160
+ const newValue = [...this.value, this.filteredOptions[this.focused][this.valueProperty]];
5161
+ if (event.target) {
5162
+ event.target['value'] = '';
5163
+ }
5164
+ this.filteredOptions = this.options;
5165
+ this.updateValue(newValue);
5166
+ if (this.closeOnSelect) {
5167
+ setTimeout(() => {
5168
+ this.trigger.close();
5169
+ }, 0);
5170
+ }
5171
+ else {
5172
+ setTimeout(() => {
5173
+ this.trigger.open();
5174
+ }, 0);
5175
+ }
5176
+ }
5150
5177
  }
5151
5178
  }
5152
- event.target['value'] = '';
5153
5179
  }
5154
5180
  else {
5155
- this.trigger.open();
5156
- setTimeout(() => {
5157
- if (this.renderedMenuItems) {
5158
- this.renderedMenuItems.forEach(rmi => {
5159
- rmi.focused = false;
5160
- });
5161
- const item = this.renderedMenuItems.get(this.focused);
5162
- if (item) {
5163
- item.focused = true;
5164
- }
5181
+ if (event.key === 'Backspace') {
5182
+ if (this.value.length > 0 && event.target['value'].length === 0) {
5183
+ this.value.splice(this.value.length - 1, 1);
5184
+ this.updateValue(this.value);
5165
5185
  }
5166
- }, 200);
5186
+ }
5167
5187
  }
5188
+ }
5189
+ handleInput(event) {
5168
5190
  if (event.target['value'].length > 0) {
5169
5191
  this.filteredOptions = this.options.filter(option => {
5170
5192
  if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
@@ -5174,14 +5196,15 @@ class FwMultiSelectMenuComponent {
5174
5196
  return false;
5175
5197
  }
5176
5198
  });
5177
- if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') {
5178
- this.moveFocused('zero');
5179
- }
5180
5199
  }
5181
5200
  else {
5182
5201
  this.filteredOptions = this.options;
5183
5202
  this.updateFilteredItems();
5184
5203
  }
5204
+ if (!this.trigger.isOpen()) {
5205
+ this.trigger.open();
5206
+ }
5207
+ this.moveFocused('zero');
5185
5208
  }
5186
5209
  }
5187
5210
  FwMultiSelectMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwMultiSelectMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -5191,7 +5214,7 @@ FwMultiSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
5191
5214
  useExisting: forwardRef(() => FwMultiSelectMenuComponent),
5192
5215
  multi: true,
5193
5216
  },
5194
- ], 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" }] });
5217
+ ], 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" }] });
5195
5218
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwMultiSelectMenuComponent, decorators: [{
5196
5219
  type: Component,
5197
5220
  args: [{ selector: 'fw-multi-select', providers: [
@@ -5200,7 +5223,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
5200
5223
  useExisting: forwardRef(() => FwMultiSelectMenuComponent),
5201
5224
  multi: true,
5202
5225
  },
5203
- ], 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"] }]
5226
+ ], 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"] }]
5204
5227
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { outsideClick: [{
5205
5228
  type: HostListener,
5206
5229
  args: ['document:click']
@@ -5406,11 +5429,21 @@ class FwSelectMenuComponent {
5406
5429
  if (this.inFocusOpen) {
5407
5430
  if (event.key === 'ArrowDown') {
5408
5431
  this.moveFocused('down');
5409
- this.updateValue(this.options[this.focused]);
5432
+ if (this._valueType === 'object') {
5433
+ this.updateValue(this.options[this.focused]);
5434
+ }
5435
+ else {
5436
+ this.updateValue(this.options[this.focused][this.valueProperty]);
5437
+ }
5410
5438
  }
5411
5439
  if (event.key === 'ArrowUp') {
5412
5440
  this.moveFocused('up');
5413
- this.updateValue(this.options[this.focused]);
5441
+ if (this._valueType === 'object') {
5442
+ this.updateValue(this.options[this.focused]);
5443
+ }
5444
+ else {
5445
+ this.updateValue(this.options[this.focused][this.valueProperty]);
5446
+ }
5414
5447
  }
5415
5448
  if (event.key === 'Tab') {
5416
5449
  this.trigger.close();
@@ -5438,6 +5471,13 @@ class FwSelectMenuComponent {
5438
5471
  this.updateValue(this.preFocusValue);
5439
5472
  }
5440
5473
  }
5474
+ else {
5475
+ if (this.showReset) {
5476
+ if (event.key === 'Escape') {
5477
+ this.handleReset();
5478
+ }
5479
+ }
5480
+ }
5441
5481
  }
5442
5482
  updateValue(value) {
5443
5483
  this._value = value;
@@ -5477,7 +5517,12 @@ class FwSelectMenuComponent {
5477
5517
  }
5478
5518
  handleReset() {
5479
5519
  if (this.showReset) {
5480
- this.updateValue('');
5520
+ if (this._valueType === 'object') {
5521
+ this.updateValue(null);
5522
+ }
5523
+ else {
5524
+ this.updateValue('');
5525
+ }
5481
5526
  }
5482
5527
  }
5483
5528
  }
@@ -7428,9 +7473,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7428
7473
  }]
7429
7474
  }] });
7430
7475
 
7476
+ class FwWrappedInputComponent {
7477
+ get classes() {
7478
+ return [
7479
+ 'fw-wrapped-input',
7480
+ ].join(' ');
7481
+ }
7482
+ ;
7483
+ }
7484
+ FwWrappedInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7485
+ 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 });
7486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputComponent, decorators: [{
7487
+ type: Component,
7488
+ 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"] }]
7489
+ }], propDecorators: { title: [{
7490
+ type: Input
7491
+ }], description: [{
7492
+ type: Input
7493
+ }], classes: [{
7494
+ type: HostBinding,
7495
+ args: ['attr.class']
7496
+ }] } });
7497
+
7498
+ class FwWrappedInputModule {
7499
+ }
7500
+ FwWrappedInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7501
+ FwWrappedInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, declarations: [FwWrappedInputComponent], imports: [CommonModule,
7502
+ FwFormHeadingModule], exports: [FwWrappedInputComponent] });
7503
+ FwWrappedInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, imports: [CommonModule,
7504
+ FwFormHeadingModule] });
7505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwWrappedInputModule, decorators: [{
7506
+ type: NgModule,
7507
+ args: [{
7508
+ imports: [
7509
+ CommonModule,
7510
+ FwFormHeadingModule,
7511
+ ],
7512
+ exports: [
7513
+ FwWrappedInputComponent,
7514
+ ],
7515
+ declarations: [
7516
+ FwWrappedInputComponent,
7517
+ ],
7518
+ }]
7519
+ }] });
7520
+
7431
7521
  /**
7432
7522
  * Generated bundle index. Do not edit.
7433
7523
  */
7434
7524
 
7435
- 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 };
7525
+ 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 };
7436
7526
  //# sourceMappingURL=flywheel-io-vision.mjs.map