@flywheel-io/vision 2.3.3 → 2.4.1

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 (39) hide show
  1. package/assets/fonts/Flywheel-Vision-Icons.svg +28 -0
  2. package/assets/fonts/Flywheel-Vision-Icons.ttf +0 -0
  3. package/assets/fonts/Flywheel-Vision-Icons.woff +0 -0
  4. package/assets/svg/archive-documents-box-big.svg +4 -0
  5. package/assets/svg/contract-vertical.svg +6 -0
  6. package/assets/svg/conversion-exchange.svg +4 -0
  7. package/assets/svg/cursor-click.svg +4 -0
  8. package/assets/svg/document-file-deleted-cross-remove-center-cancel.svg +4 -0
  9. package/assets/svg/documents-file-checkmark.svg +4 -0
  10. package/assets/svg/file-blank-search.svg +4 -0
  11. package/assets/svg/git-add-branch.svg +4 -0
  12. package/assets/svg/git-branch.svg +4 -0
  13. package/assets/svg/git-merge-draft.svg +6 -0
  14. package/assets/svg/git-merge.svg +4 -0
  15. package/assets/svg/git-pull-request-2.svg +4 -0
  16. package/assets/svg/grid-layout-9-square.svg +4 -0
  17. package/assets/svg/stretch-vertical.svg +4 -0
  18. package/components/dialog/dialog-confirm.component.d.ts +14 -4
  19. package/components/dialog/dialog-simple.component.d.ts +14 -4
  20. package/components/dialog/dialog.component.d.ts +13 -5
  21. package/components/dialog/dialog.service.d.ts +1 -0
  22. package/components/icon/icon.types.d.ts +1 -1
  23. package/components/popover/popover.component.d.ts +10 -2
  24. package/components/select-menu/multi-select-menu/multi-select-menu.component.d.ts +1 -1
  25. package/components/tooltip/tooltip.component.d.ts +5 -0
  26. package/esm2022/components/dialog/dialog-confirm.component.mjs +52 -9
  27. package/esm2022/components/dialog/dialog-simple.component.mjs +52 -9
  28. package/esm2022/components/dialog/dialog.component.mjs +47 -10
  29. package/esm2022/components/dialog/dialog.service.mjs +35 -2
  30. package/esm2022/components/icon/icon.types.mjs +15 -1
  31. package/esm2022/components/popover/popover.component.mjs +51 -4
  32. package/esm2022/components/select-menu/multi-select-menu/multi-select-menu.component.mjs +2 -1
  33. package/esm2022/components/select-menu/select-menu.component.mjs +3 -3
  34. package/esm2022/components/tooltip/tooltip.component.mjs +5 -2
  35. package/fesm2022/flywheel-io-vision.mjs +251 -30
  36. package/fesm2022/flywheel-io-vision.mjs.map +1 -1
  37. package/package.json +1 -1
  38. package/scss/icons/_icon-glyphs.scss +42 -0
  39. package/styles.css +56 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { HostBinding, Input, ChangeDetectionStrategy, Component, EventEmitter, Output, NgModule, input, model, computed, ContentChildren, ViewChild, ViewEncapsulation, Directive, forwardRef, HostListener, Optional, Inject, SkipSelf, Injectable, Pipe, ContentChild, effect, output, contentChildren, signal, Host, viewChild, ViewChildren, Self } from '@angular/core';
2
+ import { HostBinding, Input, ChangeDetectionStrategy, Component, EventEmitter, Output, NgModule, input, model, computed, ContentChildren, ViewChild, ViewEncapsulation, Directive, forwardRef, HostListener, Optional, Inject, SkipSelf, Injectable, Pipe, ContentChild, signal, effect, output, contentChildren, Host, viewChild, ViewChildren, Self } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i1 from '@angular/platform-browser';
@@ -2058,30 +2058,64 @@ var DialogWidth;
2058
2058
  DialogWidth["ExtraLarge"] = "extra-large";
2059
2059
  })(DialogWidth || (DialogWidth = {}));
2060
2060
  class FwDialogComponent {
2061
- constructor(dialogRef) {
2061
+ constructor(dialogRef, elementRef) {
2062
2062
  this.dialogRef = dialogRef;
2063
+ this.elementRef = elementRef;
2063
2064
  this.width = DialogWidth.ExtraSmall;
2064
2065
  this.iconColor = 'primary';
2065
2066
  this.showClose = true;
2066
2067
  // eslint-disable-next-line @angular-eslint/no-output-native
2067
2068
  this.close = new EventEmitter();
2069
+ this.isClosing = false;
2068
2070
  }
2069
2071
  get classes() {
2070
- return 'dialog-width-' + this.width;
2072
+ const classes = {
2073
+ [`dialog-width-${this.width}`]: true,
2074
+ 'dialog-closing': this.isClosing,
2075
+ };
2076
+ if (this.externalClasses) {
2077
+ if (typeof this.externalClasses === 'string') {
2078
+ this.externalClasses.split(' ').forEach((cls) => {
2079
+ if (cls.trim()) {
2080
+ classes[cls.trim()] = true;
2081
+ }
2082
+ });
2083
+ }
2084
+ else if (Array.isArray(this.externalClasses)) {
2085
+ this.externalClasses.forEach((cls) => {
2086
+ if (cls.trim()) {
2087
+ classes[cls.trim()] = true;
2088
+ }
2089
+ });
2090
+ }
2091
+ else {
2092
+ Object.assign(classes, this.externalClasses);
2093
+ }
2094
+ }
2095
+ return classes;
2071
2096
  }
2072
2097
  handleCloseButton() {
2073
- this.dialogRef.close();
2074
- this.close.emit();
2098
+ this.closeWithAnimation();
2075
2099
  }
2076
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogComponent, deps: [{ token: i1$2.DialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2077
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwDialogComponent, selector: "fw-dialog", inputs: { width: "width", title: "title", icon: "icon", iconColor: "iconColor", showClose: "showClose" }, outputs: { close: "close" }, host: { properties: { "attr.class": "this.classes" } }, ngImport: i0, template: "<div class=\"dialog\">\n <fw-icon-button\n *ngIf=\"showClose\"\n tabindex=\"-1\" icon=\"close\" color=\"slate\"\n (click)=\"handleCloseButton()\">\n </fw-icon-button>\n <div class=\"dialog-header\">\n <ng-content select=\"fw-dialog-header\"></ng-content>\n <div class=\"dialog-title\" *ngIf=\"title\">\n <fw-icon *ngIf=\"icon\" [color]=\"iconColor\">{{ icon }}</fw-icon>\n <h3 class=\"vision-h3\">{{ title }}</h3>\n </div>\n </div>\n <div class=\"dialog-body\">\n <ng-content select=\"fw-dialog-content\"></ng-content>\n </div>\n <div class=\"dialog-actions\">\n <ng-content select=\"fw-dialog-actions\"></ng-content>\n </div>\n</div>\n", styles: [":host{box-sizing:border-box;background-color:var(--card-background);border:1px solid var(--separations-border);border-radius:8px;display:flex;flex-direction:column;overflow:hidden}:host.dialog-width-extra-small{width:444px}:host.dialog-width-small{width:600px}:host.dialog-width-medium{width:900px}:host.dialog-width-large{width:1200px}:host.dialog-width-extra-large{width:1536px}:host .dialog{position:relative}:host .dialog fw-icon-button{position:absolute;top:4px;right:4px}:host .dialog .dialog-header{background-color:var(--card-header)}:host .dialog .dialog-header .dialog-title{display:flex;gap:8px;box-sizing:border-box;border-bottom:1px solid var(--separations-base);padding:12px 16px;height:44px;overflow:hidden;align-items:center}:host .dialog .dialog-header .dialog-title fw-icon{font-size:22px}:host .dialog .dialog-header .dialog-title h3{overflow:clip visible;min-width:0;white-space:nowrap;text-overflow:ellipsis;margin-right:30px;flex:1}:host .dialog .dialog-header h3{margin:0}:host .dialog .dialog-header:empty{display:none}:host .dialog .dialog-body{background-color:var(--card-background);border-bottom:1px solid var(--separations-base)}:host .dialog .dialog-body:empty{display:none}:host .dialog .dialog-actions{padding:16px}:host .dialog .dialog-actions:empty{display:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwIconButtonComponent, selector: "fw-icon-button", inputs: ["color", "icon", "size", "disabled", "selected"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }] }); }
2100
+ closeWithAnimation() {
2101
+ if (this.isClosing) {
2102
+ return;
2103
+ }
2104
+ this.isClosing = true;
2105
+ setTimeout(() => {
2106
+ this.dialogRef.close();
2107
+ this.close.emit();
2108
+ }, 300);
2109
+ }
2110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogComponent, deps: [{ token: i1$2.DialogRef, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2111
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwDialogComponent, selector: "fw-dialog", inputs: { width: "width", title: "title", icon: "icon", iconColor: "iconColor", showClose: "showClose", externalClasses: ["class", "externalClasses"] }, outputs: { close: "close" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<div class=\"fw-dialog\">\n <fw-icon-button\n *ngIf=\"showClose\"\n tabindex=\"-1\" icon=\"close\" color=\"slate\"\n (click)=\"handleCloseButton()\">\n </fw-icon-button>\n <div class=\"dialog-header\">\n <ng-content select=\"fw-dialog-header\"></ng-content>\n <div class=\"dialog-title\" *ngIf=\"title\">\n <fw-icon *ngIf=\"icon\" [color]=\"iconColor\">{{ icon }}</fw-icon>\n <h3 class=\"vision-h3\">{{ title }}</h3>\n </div>\n </div>\n <div class=\"dialog-body\">\n <ng-content select=\"fw-dialog-content\"></ng-content>\n </div>\n <div class=\"dialog-actions\">\n <ng-content select=\"fw-dialog-actions\"></ng-content>\n </div>\n</div>\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;background-color:var(--card-background);border:1px solid var(--separations-border);border-radius:8px;display:flex;flex-direction:column;overflow:hidden;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}:host.dialog-width-extra-small{width:444px}:host.dialog-width-small{width:600px}:host.dialog-width-medium{width:900px}:host.dialog-width-large{width:1200px}:host.dialog-width-extra-large{width:1536px}:host .fw-dialog{position:relative}:host .fw-dialog fw-icon-button{position:absolute;top:4px;right:4px}:host .fw-dialog .dialog-header{background-color:var(--card-header)}:host .fw-dialog .dialog-header .dialog-title{display:flex;gap:8px;box-sizing:border-box;border-bottom:1px solid var(--separations-base);padding:12px 16px;height:44px;overflow:hidden;align-items:center}:host .fw-dialog .dialog-header .dialog-title fw-icon{font-size:22px}:host .fw-dialog .dialog-header .dialog-title h3{overflow:clip visible;min-width:0;white-space:nowrap;text-overflow:ellipsis;margin-right:30px;flex:1}:host .fw-dialog .dialog-header h3{margin:0}:host .fw-dialog .dialog-header:empty{display:none}:host .fw-dialog .dialog-body{background-color:var(--card-background);border-bottom:1px solid var(--separations-base)}:host .fw-dialog .dialog-body:empty{display:none}:host .fw-dialog .dialog-actions{padding:16px}:host .fw-dialog .dialog-actions:empty{display:none}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwIconButtonComponent, selector: "fw-icon-button", inputs: ["color", "icon", "size", "disabled", "selected"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }] }); }
2078
2112
  }
2079
2113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogComponent, decorators: [{
2080
2114
  type: Component,
2081
- args: [{ selector: 'fw-dialog', template: "<div class=\"dialog\">\n <fw-icon-button\n *ngIf=\"showClose\"\n tabindex=\"-1\" icon=\"close\" color=\"slate\"\n (click)=\"handleCloseButton()\">\n </fw-icon-button>\n <div class=\"dialog-header\">\n <ng-content select=\"fw-dialog-header\"></ng-content>\n <div class=\"dialog-title\" *ngIf=\"title\">\n <fw-icon *ngIf=\"icon\" [color]=\"iconColor\">{{ icon }}</fw-icon>\n <h3 class=\"vision-h3\">{{ title }}</h3>\n </div>\n </div>\n <div class=\"dialog-body\">\n <ng-content select=\"fw-dialog-content\"></ng-content>\n </div>\n <div class=\"dialog-actions\">\n <ng-content select=\"fw-dialog-actions\"></ng-content>\n </div>\n</div>\n", styles: [":host{box-sizing:border-box;background-color:var(--card-background);border:1px solid var(--separations-border);border-radius:8px;display:flex;flex-direction:column;overflow:hidden}:host.dialog-width-extra-small{width:444px}:host.dialog-width-small{width:600px}:host.dialog-width-medium{width:900px}:host.dialog-width-large{width:1200px}:host.dialog-width-extra-large{width:1536px}:host .dialog{position:relative}:host .dialog fw-icon-button{position:absolute;top:4px;right:4px}:host .dialog .dialog-header{background-color:var(--card-header)}:host .dialog .dialog-header .dialog-title{display:flex;gap:8px;box-sizing:border-box;border-bottom:1px solid var(--separations-base);padding:12px 16px;height:44px;overflow:hidden;align-items:center}:host .dialog .dialog-header .dialog-title fw-icon{font-size:22px}:host .dialog .dialog-header .dialog-title h3{overflow:clip visible;min-width:0;white-space:nowrap;text-overflow:ellipsis;margin-right:30px;flex:1}:host .dialog .dialog-header h3{margin:0}:host .dialog .dialog-header:empty{display:none}:host .dialog .dialog-body{background-color:var(--card-background);border-bottom:1px solid var(--separations-base)}:host .dialog .dialog-body:empty{display:none}:host .dialog .dialog-actions{padding:16px}:host .dialog .dialog-actions:empty{display:none}\n"] }]
2115
+ args: [{ selector: 'fw-dialog', template: "<div class=\"fw-dialog\">\n <fw-icon-button\n *ngIf=\"showClose\"\n tabindex=\"-1\" icon=\"close\" color=\"slate\"\n (click)=\"handleCloseButton()\">\n </fw-icon-button>\n <div class=\"dialog-header\">\n <ng-content select=\"fw-dialog-header\"></ng-content>\n <div class=\"dialog-title\" *ngIf=\"title\">\n <fw-icon *ngIf=\"icon\" [color]=\"iconColor\">{{ icon }}</fw-icon>\n <h3 class=\"vision-h3\">{{ title }}</h3>\n </div>\n </div>\n <div class=\"dialog-body\">\n <ng-content select=\"fw-dialog-content\"></ng-content>\n </div>\n <div class=\"dialog-actions\">\n <ng-content select=\"fw-dialog-actions\"></ng-content>\n </div>\n</div>\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;background-color:var(--card-background);border:1px solid var(--separations-border);border-radius:8px;display:flex;flex-direction:column;overflow:hidden;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}:host.dialog-width-extra-small{width:444px}:host.dialog-width-small{width:600px}:host.dialog-width-medium{width:900px}:host.dialog-width-large{width:1200px}:host.dialog-width-extra-large{width:1536px}:host .fw-dialog{position:relative}:host .fw-dialog fw-icon-button{position:absolute;top:4px;right:4px}:host .fw-dialog .dialog-header{background-color:var(--card-header)}:host .fw-dialog .dialog-header .dialog-title{display:flex;gap:8px;box-sizing:border-box;border-bottom:1px solid var(--separations-base);padding:12px 16px;height:44px;overflow:hidden;align-items:center}:host .fw-dialog .dialog-header .dialog-title fw-icon{font-size:22px}:host .fw-dialog .dialog-header .dialog-title h3{overflow:clip visible;min-width:0;white-space:nowrap;text-overflow:ellipsis;margin-right:30px;flex:1}:host .fw-dialog .dialog-header h3{margin:0}:host .fw-dialog .dialog-header:empty{display:none}:host .fw-dialog .dialog-body{background-color:var(--card-background);border-bottom:1px solid var(--separations-base)}:host .fw-dialog .dialog-body:empty{display:none}:host .fw-dialog .dialog-actions{padding:16px}:host .fw-dialog .dialog-actions:empty{display:none}\n"] }]
2082
2116
  }], ctorParameters: () => [{ type: i1$2.DialogRef, decorators: [{
2083
2117
  type: Optional
2084
- }] }], propDecorators: { width: [{
2118
+ }] }, { type: i0.ElementRef }], propDecorators: { width: [{
2085
2119
  type: Input
2086
2120
  }], title: [{
2087
2121
  type: Input
@@ -2091,11 +2125,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2091
2125
  type: Input
2092
2126
  }], showClose: [{
2093
2127
  type: Input
2128
+ }], externalClasses: [{
2129
+ type: Input,
2130
+ args: ['class']
2094
2131
  }], close: [{
2095
2132
  type: Output
2096
2133
  }], classes: [{
2097
2134
  type: HostBinding,
2098
- args: ['attr.class']
2135
+ args: ['class']
2099
2136
  }] } });
2100
2137
 
2101
2138
  /* eslint-disable @typescript-eslint/no-explicit-any */
@@ -2114,9 +2151,42 @@ class FwDialogService extends Dialog {
2114
2151
  const defaultSettings = {
2115
2152
  backdropClass: 'vision-overlay',
2116
2153
  positionStrategy: this.overlay.position().global().top(topOffset ? topOffset : '10vh').centerHorizontally(),
2154
+ disableClose: true, // Disable default backdrop close to handle it manually
2117
2155
  };
2118
2156
  config = { ...config, ...defaultSettings };
2119
- return super.open(component, config);
2157
+ const dialogRef = super.open(component, config);
2158
+ // Handle backdrop clicks with animation
2159
+ if (dialogRef.overlayRef.backdropElement) {
2160
+ dialogRef.overlayRef.backdropElement.addEventListener('click', evt => {
2161
+ evt.stopPropagation();
2162
+ this.closeWithAnimation(dialogRef);
2163
+ });
2164
+ }
2165
+ // Handle ESC key with animation
2166
+ dialogRef.overlayRef.keydownEvents().subscribe(event => {
2167
+ if (event.key === 'Escape') {
2168
+ this.closeWithAnimation(dialogRef);
2169
+ }
2170
+ });
2171
+ return dialogRef;
2172
+ }
2173
+ closeWithAnimation(dialogRef) {
2174
+ const dialogElement = dialogRef.overlayRef.overlayElement?.querySelector('fw-dialog, fw-dialog-confirm, fw-dialog-simple');
2175
+ if (dialogElement && !dialogElement.classList.contains('dialog-closing')) {
2176
+ if (dialogElement.tagName.toLowerCase() !== 'fw-dialog') {
2177
+ // For fw-dialog-confirm and fw-dialog-simple, apply the class to the inner fw-dialog element
2178
+ const innerDialog = dialogElement.querySelector('fw-dialog');
2179
+ if (innerDialog) {
2180
+ innerDialog.classList.add('dialog-closing');
2181
+ }
2182
+ }
2183
+ else {
2184
+ dialogElement.classList.add('dialog-closing');
2185
+ }
2186
+ setTimeout(() => {
2187
+ dialogRef.close();
2188
+ }, 300);
2189
+ }
2120
2190
  }
2121
2191
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogService, deps: [{ token: i1$3.Overlay }, { token: i0.Injector }, { token: i0.Injector }, { token: DEFAULT_DIALOG_CONFIG, optional: true }, { token: i1$3.OverlayContainer }, { token: DIALOG_SCROLL_STRATEGY }, { token: i1$2.Dialog, optional: true, skipSelf: true }, { token: i1$2.DialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2122
2192
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogService, providedIn: 'root' }); }
@@ -2207,8 +2277,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2207
2277
  }] } });
2208
2278
 
2209
2279
  class FwDialogConfirmComponent {
2210
- constructor(dialogRef) {
2280
+ constructor(dialogRef, elementRef) {
2211
2281
  this.dialogRef = dialogRef;
2282
+ this.elementRef = elementRef;
2212
2283
  this.title = 'Confirm';
2213
2284
  this.iconColor = 'primary';
2214
2285
  this.confirmColor = 'primary';
@@ -2220,20 +2291,56 @@ class FwDialogConfirmComponent {
2220
2291
  this.close = new EventEmitter();
2221
2292
  this.confirm = new EventEmitter();
2222
2293
  this.DialogWidth = DialogWidth;
2294
+ this.isClosing = false;
2295
+ }
2296
+ get classes() {
2297
+ const classes = {};
2298
+ if (this.externalClasses) {
2299
+ if (typeof this.externalClasses === 'string') {
2300
+ this.externalClasses.split(' ').forEach((cls) => {
2301
+ if (cls.trim()) {
2302
+ classes[cls.trim()] = true;
2303
+ }
2304
+ });
2305
+ }
2306
+ else if (Array.isArray(this.externalClasses)) {
2307
+ this.externalClasses.forEach((cls) => {
2308
+ if (cls.trim()) {
2309
+ classes[cls.trim()] = true;
2310
+ }
2311
+ });
2312
+ }
2313
+ else {
2314
+ Object.assign(classes, this.externalClasses);
2315
+ }
2316
+ }
2317
+ return classes;
2318
+ }
2319
+ get dialogClasses() {
2320
+ return this.isClosing ? 'dialog-closing' : '';
2223
2321
  }
2224
2322
  handleCloseButton() {
2225
- this.dialogRef.close();
2226
- this.close.emit();
2323
+ this.closeWithAnimation();
2324
+ }
2325
+ closeWithAnimation() {
2326
+ if (this.isClosing) {
2327
+ return;
2328
+ }
2329
+ this.isClosing = true;
2330
+ setTimeout(() => {
2331
+ this.dialogRef.close();
2332
+ this.close.emit();
2333
+ }, 300);
2227
2334
  }
2228
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogConfirmComponent, deps: [{ token: i1$2.DialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2229
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwDialogConfirmComponent, selector: "fw-dialog-confirm", inputs: { title: "title", icon: "icon", iconColor: "iconColor", confirmColor: "confirmColor", confirmButtonText: "confirmButtonText", confirmButtonIcon: "confirmButtonIcon", cancelButtonText: "cancelButtonText", contentIcon: "contentIcon", contentTitle: "contentTitle", contentText: "contentText" }, outputs: { close: "close", confirm: "confirm" }, ngImport: i0, template: "<fw-dialog\n [width]=\"DialogWidth.ExtraSmall\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"false\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\" *ngIf=\"contentIcon\">\n {{ contentIcon }}\n </fw-icon>\n <p class=\"vision-p2 content-title\" *ngIf=\"contentTitle\">\n {{ contentTitle }}\n </p>\n <p class=\"vision-p2 content-text\" *ngIf=\"contentText\">\n {{ contentText }}\n </p>\n </div>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"cancelButtonText\"\n color=\"slate\"\n (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button\n variant=\"solid\"\n *ngIf=\"confirmButtonText\"\n [color]=\"confirmColor\"\n [leftIcon]=\"confirmButtonIcon\"\n (click)=\"confirm.emit()\">\n {{ confirmButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n", styles: [":host{box-sizing:border-box}.dialog-content-confirm{display:flex;flex-direction:column;padding:50px;align-items:center;justify-content:center}.dialog-content-confirm .content-title{margin-bottom:5px;font-weight:500}.dialog-content-confirm .content-text{margin:0;color:var(--typography-muted)}.dialog-content-confirm .content-icon{font-size:50px}.dialog-content-confirm .content-icon.primary{color:var(--primary-base)}.dialog-content-confirm .content-icon.secondary{color:var(--secondary-base)}.dialog-content-confirm .content-icon.slate{color:var(--slate-base)}.dialog-content-confirm .content-icon.success{color:var(--green-base)}.dialog-content-confirm .content-icon.warning{color:var(--orange-base)}.dialog-content-confirm .content-icon.danger{color:var(--red-base)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwButtonComponent, selector: "fw-button", inputs: ["color", "size", "variant", "type", "disabled", "fullWidth", "leftIcon", "rightIcon"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: FwDialogActionsComponent, selector: "fw-dialog-actions" }, { kind: "component", type: FwDialogComponent, selector: "fw-dialog", inputs: ["width", "title", "icon", "iconColor", "showClose"], outputs: ["close"] }, { kind: "component", type: FwDialogContentComponent, selector: "fw-dialog-content", inputs: ["padded"] }] }); }
2335
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogConfirmComponent, deps: [{ token: i1$2.DialogRef, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2336
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwDialogConfirmComponent, selector: "fw-dialog-confirm", inputs: { title: "title", icon: "icon", iconColor: "iconColor", confirmColor: "confirmColor", confirmButtonText: "confirmButtonText", confirmButtonIcon: "confirmButtonIcon", cancelButtonText: "cancelButtonText", contentIcon: "contentIcon", contentTitle: "contentTitle", contentText: "contentText", externalClasses: ["class", "externalClasses"] }, outputs: { close: "close", confirm: "confirm" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<fw-dialog\n [width]=\"DialogWidth.ExtraSmall\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"false\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\" *ngIf=\"contentIcon\">\n {{ contentIcon }}\n </fw-icon>\n <p class=\"vision-p2 content-title\" *ngIf=\"contentTitle\">\n {{ contentTitle }}\n </p>\n <p class=\"vision-p2 content-text\" *ngIf=\"contentText\">\n {{ contentText }}\n </p>\n </div>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"cancelButtonText\"\n color=\"slate\"\n (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button\n variant=\"solid\"\n *ngIf=\"confirmButtonText\"\n [color]=\"confirmColor\"\n [leftIcon]=\"confirmButtonIcon\"\n (click)=\"confirm.emit()\">\n {{ confirmButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}:host .fw-dialog-confirm{position:relative}.dialog-content-confirm{display:flex;flex-direction:column;padding:50px;align-items:center;justify-content:center}.dialog-content-confirm .content-title{margin-bottom:5px;font-weight:500}.dialog-content-confirm .content-text{margin:0;color:var(--typography-muted)}.dialog-content-confirm .content-icon{font-size:50px}.dialog-content-confirm .content-icon.primary{color:var(--primary-base)}.dialog-content-confirm .content-icon.secondary{color:var(--secondary-base)}.dialog-content-confirm .content-icon.slate{color:var(--slate-base)}.dialog-content-confirm .content-icon.success{color:var(--green-base)}.dialog-content-confirm .content-icon.warning{color:var(--orange-base)}.dialog-content-confirm .content-icon.danger{color:var(--red-base)}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwButtonComponent, selector: "fw-button", inputs: ["color", "size", "variant", "type", "disabled", "fullWidth", "leftIcon", "rightIcon"] }, { kind: "component", type: FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: FwDialogActionsComponent, selector: "fw-dialog-actions" }, { kind: "component", type: FwDialogComponent, selector: "fw-dialog", inputs: ["width", "title", "icon", "iconColor", "showClose", "class"], outputs: ["close"] }, { kind: "component", type: FwDialogContentComponent, selector: "fw-dialog-content", inputs: ["padded"] }] }); }
2230
2337
  }
2231
2338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogConfirmComponent, decorators: [{
2232
2339
  type: Component,
2233
- args: [{ selector: 'fw-dialog-confirm', template: "<fw-dialog\n [width]=\"DialogWidth.ExtraSmall\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"false\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\" *ngIf=\"contentIcon\">\n {{ contentIcon }}\n </fw-icon>\n <p class=\"vision-p2 content-title\" *ngIf=\"contentTitle\">\n {{ contentTitle }}\n </p>\n <p class=\"vision-p2 content-text\" *ngIf=\"contentText\">\n {{ contentText }}\n </p>\n </div>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"cancelButtonText\"\n color=\"slate\"\n (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button\n variant=\"solid\"\n *ngIf=\"confirmButtonText\"\n [color]=\"confirmColor\"\n [leftIcon]=\"confirmButtonIcon\"\n (click)=\"confirm.emit()\">\n {{ confirmButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n", styles: [":host{box-sizing:border-box}.dialog-content-confirm{display:flex;flex-direction:column;padding:50px;align-items:center;justify-content:center}.dialog-content-confirm .content-title{margin-bottom:5px;font-weight:500}.dialog-content-confirm .content-text{margin:0;color:var(--typography-muted)}.dialog-content-confirm .content-icon{font-size:50px}.dialog-content-confirm .content-icon.primary{color:var(--primary-base)}.dialog-content-confirm .content-icon.secondary{color:var(--secondary-base)}.dialog-content-confirm .content-icon.slate{color:var(--slate-base)}.dialog-content-confirm .content-icon.success{color:var(--green-base)}.dialog-content-confirm .content-icon.warning{color:var(--orange-base)}.dialog-content-confirm .content-icon.danger{color:var(--red-base)}\n"] }]
2340
+ args: [{ selector: 'fw-dialog-confirm', template: "<fw-dialog\n [width]=\"DialogWidth.ExtraSmall\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"false\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <div class=\"dialog-content-confirm\">\n <fw-icon class=\"content-icon\" [ngClass]=\"confirmColor\" *ngIf=\"contentIcon\">\n {{ contentIcon }}\n </fw-icon>\n <p class=\"vision-p2 content-title\" *ngIf=\"contentTitle\">\n {{ contentTitle }}\n </p>\n <p class=\"vision-p2 content-text\" *ngIf=\"contentText\">\n {{ contentText }}\n </p>\n </div>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"cancelButtonText\"\n color=\"slate\"\n (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button\n variant=\"solid\"\n *ngIf=\"confirmButtonText\"\n [color]=\"confirmColor\"\n [leftIcon]=\"confirmButtonIcon\"\n (click)=\"confirm.emit()\">\n {{ confirmButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}:host .fw-dialog-confirm{position:relative}.dialog-content-confirm{display:flex;flex-direction:column;padding:50px;align-items:center;justify-content:center}.dialog-content-confirm .content-title{margin-bottom:5px;font-weight:500}.dialog-content-confirm .content-text{margin:0;color:var(--typography-muted)}.dialog-content-confirm .content-icon{font-size:50px}.dialog-content-confirm .content-icon.primary{color:var(--primary-base)}.dialog-content-confirm .content-icon.secondary{color:var(--secondary-base)}.dialog-content-confirm .content-icon.slate{color:var(--slate-base)}.dialog-content-confirm .content-icon.success{color:var(--green-base)}.dialog-content-confirm .content-icon.warning{color:var(--orange-base)}.dialog-content-confirm .content-icon.danger{color:var(--red-base)}\n"] }]
2234
2341
  }], ctorParameters: () => [{ type: i1$2.DialogRef, decorators: [{
2235
2342
  type: Optional
2236
- }] }], propDecorators: { title: [{
2343
+ }] }, { type: i0.ElementRef }], propDecorators: { title: [{
2237
2344
  type: Input
2238
2345
  }], icon: [{
2239
2346
  type: Input
@@ -2253,10 +2360,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2253
2360
  type: Input
2254
2361
  }], contentText: [{
2255
2362
  type: Input
2363
+ }], externalClasses: [{
2364
+ type: Input,
2365
+ args: ['class']
2256
2366
  }], close: [{
2257
2367
  type: Output
2258
2368
  }], confirm: [{
2259
2369
  type: Output
2370
+ }], classes: [{
2371
+ type: HostBinding,
2372
+ args: ['class']
2260
2373
  }] } });
2261
2374
 
2262
2375
  class FwDialogHeaderComponent {
@@ -2292,8 +2405,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2292
2405
  }] } });
2293
2406
 
2294
2407
  class FwDialogSimpleComponent {
2295
- constructor(dialogRef) {
2408
+ constructor(dialogRef, elementRef) {
2296
2409
  this.dialogRef = dialogRef;
2410
+ this.elementRef = elementRef;
2297
2411
  this.width = DialogWidth.ExtraSmall;
2298
2412
  this.iconColor = 'primary';
2299
2413
  this.showClose = true;
@@ -2301,20 +2415,56 @@ class FwDialogSimpleComponent {
2301
2415
  this.close = new EventEmitter();
2302
2416
  this.action = new EventEmitter();
2303
2417
  this.alternateAction = new EventEmitter();
2418
+ this.isClosing = false;
2419
+ }
2420
+ get classes() {
2421
+ const classes = {};
2422
+ if (this.externalClasses) {
2423
+ if (typeof this.externalClasses === 'string') {
2424
+ this.externalClasses.split(' ').forEach((cls) => {
2425
+ if (cls.trim()) {
2426
+ classes[cls.trim()] = true;
2427
+ }
2428
+ });
2429
+ }
2430
+ else if (Array.isArray(this.externalClasses)) {
2431
+ this.externalClasses.forEach((cls) => {
2432
+ if (cls.trim()) {
2433
+ classes[cls.trim()] = true;
2434
+ }
2435
+ });
2436
+ }
2437
+ else {
2438
+ Object.assign(classes, this.externalClasses);
2439
+ }
2440
+ }
2441
+ return classes;
2442
+ }
2443
+ get dialogClasses() {
2444
+ return this.isClosing ? 'dialog-closing' : '';
2304
2445
  }
2305
2446
  handleCloseButton() {
2306
- this.dialogRef.close();
2307
- this.close.emit();
2447
+ this.closeWithAnimation();
2448
+ }
2449
+ closeWithAnimation() {
2450
+ if (this.isClosing) {
2451
+ return;
2452
+ }
2453
+ this.isClosing = true;
2454
+ setTimeout(() => {
2455
+ this.dialogRef.close();
2456
+ this.close.emit();
2457
+ }, 300);
2308
2458
  }
2309
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogSimpleComponent, deps: [{ token: i1$2.DialogRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2310
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwDialogSimpleComponent, selector: "fw-dialog-simple", inputs: { width: "width", title: "title", icon: "icon", iconColor: "iconColor", showClose: "showClose", actionButtonText: "actionButtonText", actionButtonIcon: "actionButtonIcon", cancelButtonText: "cancelButtonText", alternateButtonText: "alternateButtonText", alternateButtonIcon: "alternateButtonIcon", contentText: "contentText" }, outputs: { close: "close", action: "action", alternateAction: "alternateAction" }, ngImport: i0, template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\">\n <fw-dialog-content>\n <ng-content select=\"fw-dialog-content\"></ng-content>\n <p class=\"vision-p2 dialog-content-default\" *ngIf=\"contentText\">{{ contentText }}</p>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"alternateButtonText\"\n [leftIcon]=\"alternateButtonIcon\"\n (click)=\"alternateAction.emit()\">\n {{ alternateButtonText }}\n </fw-button>\n <div class=\"flex\"></div>\n <fw-button variant=\"outline\" *ngIf=\"cancelButtonText\" (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button variant=\"solid\" *ngIf=\"actionButtonText\" (click)=\"action.emit()\">\n {{ actionButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n", styles: [":host{box-sizing:border-box}.dialog-content-default{padding:15px;margin:0;color:var(--typography-muted)}.flex{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwButtonComponent, selector: "fw-button", inputs: ["color", "size", "variant", "type", "disabled", "fullWidth", "leftIcon", "rightIcon"] }, { kind: "component", type: FwDialogActionsComponent, selector: "fw-dialog-actions" }, { kind: "component", type: FwDialogComponent, selector: "fw-dialog", inputs: ["width", "title", "icon", "iconColor", "showClose"], outputs: ["close"] }, { kind: "component", type: FwDialogContentComponent, selector: "fw-dialog-content", inputs: ["padded"] }] }); }
2459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogSimpleComponent, deps: [{ token: i1$2.DialogRef, optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
2460
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FwDialogSimpleComponent, selector: "fw-dialog-simple", inputs: { width: "width", title: "title", icon: "icon", iconColor: "iconColor", showClose: "showClose", actionButtonText: "actionButtonText", actionButtonIcon: "actionButtonIcon", cancelButtonText: "cancelButtonText", alternateButtonText: "alternateButtonText", alternateButtonIcon: "alternateButtonIcon", contentText: "contentText", externalClasses: ["class", "externalClasses"] }, outputs: { close: "close", action: "action", alternateAction: "alternateAction" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <ng-content select=\"fw-dialog-content\"></ng-content>\n <p class=\"vision-p2 dialog-content-default\" *ngIf=\"contentText\">{{ contentText }}</p>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"alternateButtonText\"\n [leftIcon]=\"alternateButtonIcon\"\n (click)=\"alternateAction.emit()\">\n {{ alternateButtonText }}\n </fw-button>\n <div class=\"flex\"></div>\n <fw-button variant=\"outline\" *ngIf=\"cancelButtonText\" (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button variant=\"solid\" *ngIf=\"actionButtonText\" (click)=\"action.emit()\">\n {{ actionButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}.dialog-content-default{padding:15px;margin:0;color:var(--typography-muted)}.flex{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FwButtonComponent, selector: "fw-button", inputs: ["color", "size", "variant", "type", "disabled", "fullWidth", "leftIcon", "rightIcon"] }, { kind: "component", type: FwDialogActionsComponent, selector: "fw-dialog-actions" }, { kind: "component", type: FwDialogComponent, selector: "fw-dialog", inputs: ["width", "title", "icon", "iconColor", "showClose", "class"], outputs: ["close"] }, { kind: "component", type: FwDialogContentComponent, selector: "fw-dialog-content", inputs: ["padded"] }] }); }
2311
2461
  }
2312
2462
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwDialogSimpleComponent, decorators: [{
2313
2463
  type: Component,
2314
- args: [{ selector: 'fw-dialog-simple', template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\">\n <fw-dialog-content>\n <ng-content select=\"fw-dialog-content\"></ng-content>\n <p class=\"vision-p2 dialog-content-default\" *ngIf=\"contentText\">{{ contentText }}</p>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"alternateButtonText\"\n [leftIcon]=\"alternateButtonIcon\"\n (click)=\"alternateAction.emit()\">\n {{ alternateButtonText }}\n </fw-button>\n <div class=\"flex\"></div>\n <fw-button variant=\"outline\" *ngIf=\"cancelButtonText\" (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button variant=\"solid\" *ngIf=\"actionButtonText\" (click)=\"action.emit()\">\n {{ actionButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n", styles: [":host{box-sizing:border-box}.dialog-content-default{padding:15px;margin:0;color:var(--typography-muted)}.flex{flex:1}\n"] }]
2464
+ args: [{ selector: 'fw-dialog-simple', template: "<fw-dialog\n [width]=\"width\"\n [title]=\"title\"\n [icon]=\"icon\"\n [iconColor]=\"iconColor\"\n [showClose]=\"showClose\"\n [ngClass]=\"dialogClasses\">\n <fw-dialog-content>\n <ng-content select=\"fw-dialog-content\"></ng-content>\n <p class=\"vision-p2 dialog-content-default\" *ngIf=\"contentText\">{{ contentText }}</p>\n </fw-dialog-content>\n <fw-dialog-actions>\n <fw-button\n variant=\"outline\"\n *ngIf=\"alternateButtonText\"\n [leftIcon]=\"alternateButtonIcon\"\n (click)=\"alternateAction.emit()\">\n {{ alternateButtonText }}\n </fw-button>\n <div class=\"flex\"></div>\n <fw-button variant=\"outline\" *ngIf=\"cancelButtonText\" (click)=\"handleCloseButton()\">\n {{ cancelButtonText }}\n </fw-button>\n <fw-button variant=\"solid\" *ngIf=\"actionButtonText\" (click)=\"action.emit()\">\n {{ actionButtonText }}\n </fw-button>\n </fw-dialog-actions>\n</fw-dialog>\n\n", styles: ["@keyframes slide-in-from-bottom{0%{opacity:0;transform:translateY(100vh)}to{opacity:1;transform:translateY(0)}}@keyframes slide-out-to-bottom{0%{opacity:1;transform:translateY(0)}99%{opacity:0;transform:translateY(100vh)}to{opacity:0;transform:translateY(100vh)}}:host{box-sizing:border-box;animation:slide-in-from-bottom .3s ease-out}:host.dialog-closing{animation:slide-out-to-bottom .3s ease-in forwards}.dialog-content-default{padding:15px;margin:0;color:var(--typography-muted)}.flex{flex:1}\n"] }]
2315
2465
  }], ctorParameters: () => [{ type: i1$2.DialogRef, decorators: [{
2316
2466
  type: Optional
2317
- }] }], propDecorators: { width: [{
2467
+ }] }, { type: i0.ElementRef }], propDecorators: { width: [{
2318
2468
  type: Input
2319
2469
  }], title: [{
2320
2470
  type: Input
@@ -2336,12 +2486,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2336
2486
  type: Input
2337
2487
  }], contentText: [{
2338
2488
  type: Input
2489
+ }], externalClasses: [{
2490
+ type: Input,
2491
+ args: ['class']
2339
2492
  }], close: [{
2340
2493
  type: Output
2341
2494
  }], action: [{
2342
2495
  type: Output
2343
2496
  }], alternateAction: [{
2344
2497
  type: Output
2498
+ }], classes: [{
2499
+ type: HostBinding,
2500
+ args: ['class']
2345
2501
  }] } });
2346
2502
 
2347
2503
  class TranslationService {
@@ -2650,6 +2806,7 @@ const allIcons = [
2650
2806
  'ai',
2651
2807
  'apple',
2652
2808
  'apply-copy-duplicate',
2809
+ 'archive-documents-box-big',
2653
2810
  'arrange-filter-sort',
2654
2811
  'arrow-annotate',
2655
2812
  'arrow-back-collapse',
@@ -2714,11 +2871,14 @@ const allIcons = [
2714
2871
  'color-ven-design-profile-central',
2715
2872
  'column-edit',
2716
2873
  'computer-chip',
2874
+ 'contract-vertical',
2717
2875
  'contrast-photo-edit',
2876
+ 'conversion-exchange',
2718
2877
  'copy-item',
2719
2878
  'creative-commons',
2720
2879
  'crosshair',
2721
2880
  'crown-style-circle',
2881
+ 'cursor-click',
2722
2882
  'cursor-select',
2723
2883
  'curve-object-secet-cursor',
2724
2884
  'data-tree',
@@ -2727,6 +2887,7 @@ const allIcons = [
2727
2887
  'document-file-add-plus-bottom-left',
2728
2888
  'document-file-blank',
2729
2889
  'document-file-checkmark-bottom-left',
2890
+ 'document-file-deleted-cross-remove-center-cancel',
2730
2891
  'document-file-download',
2731
2892
  'document-file-list-protocol',
2732
2893
  'document-file-tar',
@@ -2734,6 +2895,7 @@ const allIcons = [
2734
2895
  'document-file-zip',
2735
2896
  'document-status-done-checkmark',
2736
2897
  'document-visible',
2898
+ 'documents-file-checkmark',
2737
2899
  'documents-file',
2738
2900
  'documents-files',
2739
2901
  'done-check-tracked',
@@ -2753,6 +2915,7 @@ const allIcons = [
2753
2915
  'expand-pathfinder-dot-square-segmentation',
2754
2916
  'facebook',
2755
2917
  'file-blank-image-load-mask',
2918
+ 'file-blank-search',
2756
2919
  'file-download',
2757
2920
  'file-text',
2758
2921
  'files-library-content',
@@ -2780,10 +2943,16 @@ const allIcons = [
2780
2943
  'free-rights',
2781
2944
  'freehand-vector-poly',
2782
2945
  'full-screen-zoom',
2946
+ 'git-add-branch',
2947
+ 'git-branch',
2948
+ 'git-merge-draft',
2949
+ 'git-merge',
2950
+ 'git-pull-request-2',
2783
2951
  'github-color-login',
2784
2952
  'gitlab',
2785
2953
  'graduate-hat',
2786
2954
  'grid-dot-square',
2955
+ 'grid-layout-9-square',
2787
2956
  'grid-layout',
2788
2957
  'hammer-legal-square',
2789
2958
  'hammer-screwdriver',
@@ -2920,6 +3089,7 @@ const allIcons = [
2920
3089
  'stars-light-sparkle',
2921
3090
  'stomach',
2922
3091
  'stop-minus',
3092
+ 'stretch-vertical',
2923
3093
  'substract-group',
2924
3094
  'switch',
2925
3095
  'target-space-object-select',
@@ -3965,6 +4135,23 @@ class FwPopoverComponent {
3965
4135
  return delayMap$1[this.delay()];
3966
4136
  });
3967
4137
  this.showCaret = input(true);
4138
+ this.activePositionPair = signal(null);
4139
+ // for mapping from the connectionPairs to a named position
4140
+ this.panelPosition = computed(() => {
4141
+ const currentPosition = this.activePositionPair()?.connectionPair;
4142
+ if (!currentPosition) {
4143
+ return this.position;
4144
+ }
4145
+ const positionNames = Object.keys(this.positionMap);
4146
+ const activePositionName = positionNames.find(positionName => {
4147
+ const pos = this.positionMap[positionName];
4148
+ return pos.originX === currentPosition.originX &&
4149
+ pos.originY === currentPosition.originY &&
4150
+ pos.overlayX === currentPosition.overlayX &&
4151
+ pos.overlayY === currentPosition.overlayY;
4152
+ });
4153
+ return (activePositionName || this.position);
4154
+ });
3968
4155
  this.positionMap = {
3969
4156
  'above': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },
3970
4157
  'above-left': { originX: 'center', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetX: 40 },
@@ -3979,6 +4166,36 @@ class FwPopoverComponent {
3979
4166
  'right-above': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'bottom', offsetY: 37 },
3980
4167
  'right-below': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'top', offsetY: -40 },
3981
4168
  };
4169
+ /**
4170
+ * Gets a list of fallback positions for the selected one
4171
+ * Preserves the primary axis i.e. which side of the origin the panel is on
4172
+ */
4173
+ this.getFallbackPositions = () => {
4174
+ const positionSplitRegex = /(?<primary>[a-z]\w+)-*(?<secondary>[a-z]\w+)*/;
4175
+ const { primary, secondary } = positionSplitRegex.exec(this.position).groups;
4176
+ // '' represents a primary axis with no secondary i.e. 'above'
4177
+ // fallbacks if no secondary position
4178
+ const primaryAxisToFallbacks = {
4179
+ 'left': ['', 'below', 'above'],
4180
+ 'right': ['', 'below', 'above'],
4181
+ 'above': ['', 'left', 'right'],
4182
+ 'below': ['', 'left', 'right'],
4183
+ };
4184
+ // preference order for fallbacks
4185
+ const secondaryPositionFallbacks = {
4186
+ 'left': ['left', '', 'right'],
4187
+ 'right': ['right', '', 'left'],
4188
+ 'above': ['above', '', 'below'],
4189
+ 'below': ['below', '', 'above'],
4190
+ };
4191
+ const secondaryOptions = secondaryPositionFallbacks[secondary] || primaryAxisToFallbacks[primary];
4192
+ const positionArray = secondaryOptions.map(secondaryOption => {
4193
+ const addDash = secondaryOption ? '-' : '';
4194
+ const parsedOptionName = primary + addDash + secondaryOption;
4195
+ return this.positionMap[parsedOptionName];
4196
+ });
4197
+ return positionArray;
4198
+ };
3982
4199
  this.registerEventListeners = effect(() => {
3983
4200
  const trigger = this.trigger();
3984
4201
  if (!this.trigger) {
@@ -4023,7 +4240,7 @@ class FwPopoverComponent {
4023
4240
  }
4024
4241
  }
4025
4242
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4026
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: FwPopoverComponent, selector: "fw-popover", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, action: { classPropertyName: "action", publicName: "action", isSignal: false, isRequired: false, transformFunction: null }, flyoutPanel: { classPropertyName: "flyoutPanel", publicName: "flyoutPanel", isSignal: false, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, showCaret: { classPropertyName: "showCaret", publicName: "showCaret", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange" }, ngImport: i0, template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger()\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"action==='click'\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"[positionMap[position]]\"\n (backdropClick)=\"backdropClick()\"\n (detach)=\"backdropClick()\">\n <fw-popover-panel\n @fadeInFadeOut\n [position]=\"position\"\n (mouseLeave)=\"handlePanelLeave()\"\n [showCaret]=\"showCaret()\">\n <ng-content></ng-content>\n </fw-popover-panel>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: FwPopoverPanelComponent, selector: "fw-popover-panel", inputs: ["position", "showCaret"], outputs: ["mouseLeave"] }], animations: [
4243
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: FwPopoverComponent, selector: "fw-popover", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, action: { classPropertyName: "action", publicName: "action", isSignal: false, isRequired: false, transformFunction: null }, flyoutPanel: { classPropertyName: "flyoutPanel", publicName: "flyoutPanel", isSignal: false, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, showCaret: { classPropertyName: "showCaret", publicName: "showCaret", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange" }, ngImport: i0, template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger()\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositionStrategy]=\"\"\n [cdkConnectedOverlayHasBackdrop]=\"action==='click'\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"getFallbackPositions()\"\n [cdkConnectedOverlayViewportMargin]=\"10\"\n (positionChange)=\"activePositionPair.set($event)\"\n (backdropClick)=\"backdropClick()\"\n (detach)=\"backdropClick()\">\n <fw-popover-panel\n @fadeInFadeOut\n [position]=\"panelPosition()\"\n (mouseLeave)=\"handlePanelLeave()\"\n [showCaret]=\"showCaret()\">\n <ng-content></ng-content>\n </fw-popover-panel>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: FwPopoverPanelComponent, selector: "fw-popover-panel", inputs: ["position", "showCaret"], outputs: ["mouseLeave"] }], animations: [
4027
4244
  trigger('fadeInFadeOut', [
4028
4245
  transition(':enter', [
4029
4246
  style({ opacity: 0 }),
@@ -4047,7 +4264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
4047
4264
  animate('200ms', style({ opacity: 0 })),
4048
4265
  ]),
4049
4266
  ]),
4050
- ], template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger()\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"action==='click'\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"[positionMap[position]]\"\n (backdropClick)=\"backdropClick()\"\n (detach)=\"backdropClick()\">\n <fw-popover-panel\n @fadeInFadeOut\n [position]=\"position\"\n (mouseLeave)=\"handlePanelLeave()\"\n [showCaret]=\"showCaret()\">\n <ng-content></ng-content>\n </fw-popover-panel>\n</ng-template>\n" }]
4267
+ ], template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger()\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositionStrategy]=\"\"\n [cdkConnectedOverlayHasBackdrop]=\"action==='click'\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayPositions]=\"getFallbackPositions()\"\n [cdkConnectedOverlayViewportMargin]=\"10\"\n (positionChange)=\"activePositionPair.set($event)\"\n (backdropClick)=\"backdropClick()\"\n (detach)=\"backdropClick()\">\n <fw-popover-panel\n @fadeInFadeOut\n [position]=\"panelPosition()\"\n (mouseLeave)=\"handlePanelLeave()\"\n [showCaret]=\"showCaret()\">\n <ng-content></ng-content>\n </fw-popover-panel>\n</ng-template>\n" }]
4051
4268
  }], propDecorators: { position: [{
4052
4269
  type: Input
4053
4270
  }], action: [{
@@ -4174,7 +4391,7 @@ class FwTooltipComponent {
4174
4391
  this.isOpen = false;
4175
4392
  }
4176
4393
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FwTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4177
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: FwTooltipComponent, selector: "fw-tooltip", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: false, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: false, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: false, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: false, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.class": "this.classes" } }, ngImport: i0, template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayPositions]=\"[positionMap[position]]\">\n <fw-tooltip-panel\n @fadeInFadeOut\n *ngIf=\"title\"\n [position]=\"position\"\n [color]=\"color\"\n [maxWidth]=\"maxWidth\">\n <h5 class=\"vision-h5\">{{ title }}</h5>\n </fw-tooltip-panel>\n</ng-template>\n<div\n [ngClass]=\"['tooltip-trigger',fullWidth?'full-width':'']\"\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\n (mouseenter)=\"handleMouseEnter($event)\" (mouseleave)=\"handleMouseLeave()\">\n <ng-content></ng-content>\n</div>\n", styles: [":host.full-width{flex:1;display:flex;width:stretch}:host.full-width button{flex:1}:host .tooltip-trigger{width:fit-content;display:inline-block}:host .tooltip-trigger.full-width{flex:1;display:flex;width:stretch}:host .tooltip-trigger.full-width button{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: FwTooltipPanelComponent, selector: "fw-tooltip-panel", inputs: ["position", "color", "maxWidth"], outputs: ["mouseLeave"] }], animations: [
4394
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: FwTooltipComponent, selector: "fw-tooltip", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: false, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: false, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: false, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: false, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: false, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.class": "this.classes", "attr.title": "this['']" } }, ngImport: i0, template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen\"\n [cdkConnectedOverlayPositions]=\"[positionMap[position]]\">\n <fw-tooltip-panel\n @fadeInFadeOut\n *ngIf=\"title\"\n [position]=\"position\"\n [color]=\"color\"\n [maxWidth]=\"maxWidth\">\n <h5 class=\"vision-h5\">{{ title }}</h5>\n </fw-tooltip-panel>\n</ng-template>\n<div\n [ngClass]=\"['tooltip-trigger',fullWidth?'full-width':'']\"\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\n (mouseenter)=\"handleMouseEnter($event)\" (mouseleave)=\"handleMouseLeave()\">\n <ng-content></ng-content>\n</div>\n", styles: [":host.full-width{flex:1;display:flex;width:stretch}:host.full-width button{flex:1}:host .tooltip-trigger{width:fit-content;display:inline-block}:host .tooltip-trigger.full-width{flex:1;display:flex;width:stretch}:host .tooltip-trigger.full-width button{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: FwTooltipPanelComponent, selector: "fw-tooltip-panel", inputs: ["position", "color", "maxWidth"], outputs: ["mouseLeave"] }], animations: [
4178
4395
  trigger('fadeInFadeOut', [
4179
4396
  transition(':enter', [
4180
4397
  style({ opacity: 0 }),
@@ -4216,6 +4433,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
4216
4433
  }], classes: [{
4217
4434
  type: HostBinding,
4218
4435
  args: ['attr.class']
4436
+ }], '': [{
4437
+ type: HostBinding,
4438
+ args: ['attr.title']
4219
4439
  }] } });
4220
4440
 
4221
4441
  class FwTooltipModule {
@@ -5191,6 +5411,7 @@ class FwMultiSelectMenuComponent {
5191
5411
  this.width = '200px';
5192
5412
  this.minHeight = '';
5193
5413
  this.maxHeight = '200px';
5414
+ this.maxOptionsHeight = '400px';
5194
5415
  this.size = 'medium';
5195
5416
  this.menuFilter = viewChild(FwMenuContainerComponent);
5196
5417
  // need this for the template
@@ -5552,9 +5773,9 @@ class FwSelectMenuComponent {
5552
5773
  const currentOptions = changes.options?.currentValue;
5553
5774
  // if the options change check if the title we should be displaying has changed
5554
5775
  if (currentOptions && currentOptions !== changes.options?.previousValue) {
5555
- const selectedOption = currentOptions.find(item => item['value']?.toString() === this.selectValue);
5776
+ const selectedOption = currentOptions.find(item => item[this.valueProperty]?.toString() === this.selectValue);
5556
5777
  if (selectedOption) {
5557
- this.selectTitle = selectedOption['title'];
5778
+ this.selectTitle = selectedOption[this.titleProperty];
5558
5779
  }
5559
5780
  }
5560
5781
  }