@flywheel-io/vision 21.3.0 → 21.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flywheel-io/vision",
3
- "version": "21.3.0",
3
+ "version": "21.4.0",
4
4
  "description": "Flywheel UI elements provided as Angular components and native web components",
5
5
  "author": "Flywheel",
6
6
  "license": "MIT",
@@ -1098,6 +1098,7 @@ interface CustomSection {
1098
1098
  description?: string | null;
1099
1099
  key: string;
1100
1100
  fields: CustomField[];
1101
+ visible?: RulesLogic[];
1101
1102
  }
1102
1103
  interface CustomForm {
1103
1104
  fields: (CustomField | CustomSection)[];
@@ -1127,10 +1128,12 @@ declare class FwFormRendererComponent {
1127
1128
  private readonly submitted;
1128
1129
  private readonly hideByKey;
1129
1130
  private readonly requiredByKey;
1131
+ private readonly hideSectionByKey;
1130
1132
  private readonly expandedSectionKeys;
1131
1133
  structuredItems: _angular_core.Signal<(CustomField | CustomSection)[]>;
1132
1134
  isHidden(field: CustomField): boolean;
1133
1135
  isRequired(field: CustomField): boolean;
1136
+ isSectionHidden(section: CustomSection): boolean;
1134
1137
  isSection(item: CustomField | CustomSection): item is CustomSection;
1135
1138
  isSectionExpanded(section: CustomSection): boolean;
1136
1139
  onSectionToggle(section: CustomSection, expanded: boolean): void;
@@ -1143,6 +1146,7 @@ declare class FwFormRendererComponent {
1143
1146
  private destroyRef;
1144
1147
  private currentKeys;
1145
1148
  private currentFields;
1149
+ private currentSections;
1146
1150
  private readonly formRebuilt$;
1147
1151
  constructor();
1148
1152
  private flattenFields;
@@ -1165,6 +1169,12 @@ declare class FwFormRendererComponent {
1165
1169
  private validateFields;
1166
1170
  private isEmpty;
1167
1171
  private evaluateRule;
1172
+ /**
1173
+ * Evaluates hide/requiredWhenVisible for every field and hide for every section. A hidden
1174
+ * section forces every one of its descendant fields hidden too, overriding whatever those
1175
+ * fields' own `visible` logic would otherwise evaluate to.
1176
+ */
1177
+ private computeVisibility;
1168
1178
  private normalizeValues;
1169
1179
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FwFormRendererComponent, never>;
1170
1180
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwFormRendererComponent, "fw-form-renderer", never, { "formData": { "alias": "formData"; "required": false; "isSignal": true; }; "sectionBorder": { "alias": "sectionBorder"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "statusChange": "statusChange"; }, never, never, true, never>;
@@ -1803,6 +1813,7 @@ declare class FwMenuContainerComponent implements AfterViewInit {
1803
1813
  readonly focusFilterOnMount: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
1804
1814
  readonly offset: _angular_core.InputSignal<string>;
1805
1815
  emptyText: _angular_core.InputSignal<string>;
1816
+ readonly disableWrapperScroll: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
1806
1817
  filteredMenuItems: FwMenuItemComponent[];
1807
1818
  filteredMenuItemChange: _angular_core.OutputEmitterRef<FwMenuItemComponent[]>;
1808
1819
  private defaultFilterFn;
@@ -1830,7 +1841,7 @@ declare class FwMenuContainerComponent implements AfterViewInit {
1830
1841
  handleFilterInput(event: Event): void;
1831
1842
  onFilterChange(filter: string): void;
1832
1843
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FwMenuContainerComponent, never>;
1833
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwMenuContainerComponent, "fw-menu-container, fw-menu-filter", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "filterText": { "alias": "filterText"; "required": false; "isSignal": true; }; "focusFilterOnMount": { "alias": "focusFilterOnMount"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "additionalMenuItems": { "alias": "additionalMenuItems"; "required": false; "isSignal": true; }; "additionalGroups": { "alias": "additionalGroups"; "required": false; "isSignal": true; }; "additionalSeparators": { "alias": "additionalSeparators"; "required": false; "isSignal": true; }; "keyHandler": { "alias": "keyHandler"; "required": false; "isSignal": true; }; }, { "filteredMenuItemChange": "filteredMenuItemChange"; "filterChanged": "filterChanged"; }, ["menu", "childMenuItems", "childSeparators", "childGroups"], [".filter-content", "*", "custom-menu-items"], true, never>;
1844
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwMenuContainerComponent, "fw-menu-container, fw-menu-filter", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "filterText": { "alias": "filterText"; "required": false; "isSignal": true; }; "focusFilterOnMount": { "alias": "focusFilterOnMount"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "disableWrapperScroll": { "alias": "disableWrapperScroll"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "additionalMenuItems": { "alias": "additionalMenuItems"; "required": false; "isSignal": true; }; "additionalGroups": { "alias": "additionalGroups"; "required": false; "isSignal": true; }; "additionalSeparators": { "alias": "additionalSeparators"; "required": false; "isSignal": true; }; "keyHandler": { "alias": "keyHandler"; "required": false; "isSignal": true; }; }, { "filteredMenuItemChange": "filteredMenuItemChange"; "filterChanged": "filterChanged"; }, ["menu", "childMenuItems", "childSeparators", "childGroups"], [".filter-content", "*", "custom-menu-items"], true, never>;
1834
1845
  }
1835
1846
 
1836
1847
  /**
@@ -2199,9 +2210,17 @@ declare class FwSelectMenuComponent implements OnInit, OnDestroy, ControlValueAc
2199
2210
  maxOptionsHeight: _angular_core.InputSignal<string>;
2200
2211
  size: _angular_core.InputSignal<"large" | "medium" | "small">;
2201
2212
  placeholder: _angular_core.InputSignal<string>;
2213
+ /**
2214
+ * Renders the `options` list in a `cdk-virtual-scroll-viewport` instead of one `fw-menu-item` per
2215
+ * option, so opening the panel stays fast with large option sets.
2216
+ * ! WARNING ! only works with the `options` input, not with content-projected menu items
2217
+ */
2218
+ virtualScroll: _angular_core.InputSignal<boolean>;
2219
+ virtualScrollItemSize: _angular_core.InputSignal<number>;
2202
2220
  trigger: CdkMenuTrigger;
2203
2221
  textInput: FwTextInputComponent;
2204
2222
  menu: _angular_core.Signal<FwMenuComponent>;
2223
+ private virtualScrollViewport;
2205
2224
  /**
2206
2225
  * The control itself, which is only as wide as `width()`. The host element is a block element and
2207
2226
  * so can be considerably wider, and a click in that gap is an outside click.
@@ -2235,6 +2254,14 @@ declare class FwSelectMenuComponent implements OnInit, OnDestroy, ControlValueAc
2235
2254
  * ! WARNING ! only works with content-projected menu items, does not work with the `options` input
2236
2255
  */
2237
2256
  filterFn: _angular_core.InputSignal<MenuFilterFn>;
2257
+ /**
2258
+ * Height of the virtual-scroll viewport. Capped at `maxOptionsHeight()`, minus the filter box's
2259
+ * height (64px) when `showFilter()` is on since the filter box sits above the viewport inside the
2260
+ * same fixed-height panel. Below that cap, the viewport sizes down to fit the actual item count
2261
+ * (via CSS `min()`, since `maxOptionsHeight()` can be any CSS length) so a short options list
2262
+ * doesn't leave empty space under it.
2263
+ */
2264
+ virtualScrollViewportHeight: _angular_core.Signal<string>;
2238
2265
  inputDisplayValue: _angular_core.Signal<string>;
2239
2266
  get value(): any;
2240
2267
  set value(newValue: any);
@@ -2242,6 +2269,10 @@ declare class FwSelectMenuComponent implements OnInit, OnDestroy, ControlValueAc
2242
2269
  constructor();
2243
2270
  ngOnInit(): void;
2244
2271
  private findRenderedMenuItem;
2272
+ trackByTrackingId: (_index: number, item: {
2273
+ trackingId: string;
2274
+ }) => string;
2275
+ private scrollOptionIntoView;
2245
2276
  selectTitle: _angular_core.WritableSignal<string>;
2246
2277
  private subscribeToMenuItems;
2247
2278
  private menuItemsWatcher;
@@ -2298,7 +2329,7 @@ declare class FwSelectMenuComponent implements OnInit, OnDestroy, ControlValueAc
2298
2329
  onFilterChanged(value: string): void;
2299
2330
  onInputChange(event: Event): void;
2300
2331
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FwSelectMenuComponent, never>;
2301
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwSelectMenuComponent, "fw-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueProperty": { "alias": "valueProperty"; "required": false; "isSignal": true; }; "useFullOptionAsValue": { "alias": "useFullOptionAsValue"; "required": false; "isSignal": true; }; "titleProperty": { "alias": "titleProperty"; "required": false; "isSignal": true; }; "iconProperty": { "alias": "iconProperty"; "required": false; "isSignal": true; }; "staticIcon": { "alias": "staticIcon"; "required": false; "isSignal": true; }; "descriptionProperty": { "alias": "descriptionProperty"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showReset": { "alias": "showReset"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errored": { "alias": "errored"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "optionsWidth": { "alias": "optionsWidth"; "required": false; "isSignal": true; }; "minOptionsHeight": { "alias": "minOptionsHeight"; "required": false; "isSignal": true; }; "maxOptionsHeight": { "alias": "maxOptionsHeight"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "valueDisplayFn": { "alias": "valueDisplayFn"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; }; }, { "disabled": "disabledChange"; "change": "change"; "filterChanged": "filterChanged"; }, ["menuItems", "menuItemGroups", "menuSeparators"], ["[fw-menu-item, fw-menu-separator, fw-menu-item-group]"], true, never>;
2332
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwSelectMenuComponent, "fw-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "valueProperty": { "alias": "valueProperty"; "required": false; "isSignal": true; }; "useFullOptionAsValue": { "alias": "useFullOptionAsValue"; "required": false; "isSignal": true; }; "titleProperty": { "alias": "titleProperty"; "required": false; "isSignal": true; }; "iconProperty": { "alias": "iconProperty"; "required": false; "isSignal": true; }; "staticIcon": { "alias": "staticIcon"; "required": false; "isSignal": true; }; "descriptionProperty": { "alias": "descriptionProperty"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showReset": { "alias": "showReset"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errored": { "alias": "errored"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "optionsWidth": { "alias": "optionsWidth"; "required": false; "isSignal": true; }; "minOptionsHeight": { "alias": "minOptionsHeight"; "required": false; "isSignal": true; }; "maxOptionsHeight": { "alias": "maxOptionsHeight"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualScrollItemSize": { "alias": "virtualScrollItemSize"; "required": false; "isSignal": true; }; "valueDisplayFn": { "alias": "valueDisplayFn"; "required": false; "isSignal": true; }; "filterFn": { "alias": "filterFn"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; }; }, { "disabled": "disabledChange"; "change": "change"; "filterChanged": "filterChanged"; }, ["menuItems", "menuItemGroups", "menuSeparators"], ["[fw-menu-item, fw-menu-separator, fw-menu-item-group]"], true, never>;
2302
2333
  }
2303
2334
 
2304
2335
  /**
@@ -2944,7 +2975,7 @@ declare class FwTextAreaInputComponent implements ControlValueAccessor {
2944
2975
  */
2945
2976
  declare class FwTextAreaInputModule {
2946
2977
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FwTextAreaInputModule, never>;
2947
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<FwTextAreaInputModule, never, [typeof i1.CommonModule, typeof i2.ReactiveFormsModule, typeof i3$1.TextFieldModule, typeof FwIconModule, typeof FwTextAreaInputComponent], [typeof FwTextAreaInputComponent]>;
2978
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<FwTextAreaInputModule, never, [typeof i1.CommonModule, typeof i2.ReactiveFormsModule, typeof i3$1.TextFieldModule, typeof FwTextAreaInputComponent], [typeof FwTextAreaInputComponent]>;
2948
2979
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<FwTextAreaInputModule>;
2949
2980
  }
2950
2981
 
@@ -3008,6 +3039,11 @@ declare class FwTypeaheadComponent implements ControlValueAccessor {
3008
3039
  loading: _angular_core.ModelSignal<boolean>;
3009
3040
  disabled: _angular_core.ModelSignal<boolean>;
3010
3041
  touched: _angular_core.WritableSignal<boolean>;
3042
+ /**
3043
+ * Text to display when there are no results to show in the dropdown. This is only shown when `allowNew` is false
3044
+ * @default "No results found"
3045
+ */
3046
+ emptyText: _angular_core.InputSignal<string>;
3011
3047
  setDisabledState(isDisabled: boolean): void;
3012
3048
  writeValue(incomingValue: string[]): void;
3013
3049
  onChange: (_: string[]) => void;
@@ -3062,7 +3098,7 @@ declare class FwTypeaheadComponent implements ControlValueAccessor {
3062
3098
  setFocusByValue(value: string): void;
3063
3099
  private moveFocused;
3064
3100
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FwTypeaheadComponent, never>;
3065
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwTypeaheadComponent, "fw-typeahead", never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "maxOptionsHeight": { "alias": "maxOptionsHeight"; "required": false; "isSignal": true; }; "minOptionsHeight": { "alias": "minOptionsHeight"; "required": false; "isSignal": true; }; "optionsWidth": { "alias": "optionsWidth"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "selectType": { "alias": "selectType"; "required": false; "isSignal": true; }; "searchValue": { "alias": "searchValue"; "required": false; "isSignal": true; }; "allowNew": { "alias": "allowNew"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "loading": "loadingChange"; "disabled": "disabledChange"; "value": "valueChange"; "searchValue": "searchValueChange"; }, never, never, true, never>;
3101
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FwTypeaheadComponent, "fw-typeahead", never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "maxOptionsHeight": { "alias": "maxOptionsHeight"; "required": false; "isSignal": true; }; "minOptionsHeight": { "alias": "minOptionsHeight"; "required": false; "isSignal": true; }; "optionsWidth": { "alias": "optionsWidth"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "selectType": { "alias": "selectType"; "required": false; "isSignal": true; }; "searchValue": { "alias": "searchValue"; "required": false; "isSignal": true; }; "allowNew": { "alias": "allowNew"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "loading": "loadingChange"; "disabled": "disabledChange"; "value": "valueChange"; "searchValue": "searchValueChange"; }, never, never, true, never>;
3066
3102
  }
3067
3103
 
3068
3104
  /**