@flywheel-io/vision 1.18.0 → 1.19.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.
@@ -48,7 +48,7 @@ export class FwProgressBarComponent {
48
48
  }
49
49
  }
50
50
  FwProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwProgressBarComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
51
- FwProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FwProgressBarComponent, selector: "fw-progress-bar", inputs: { mode: "mode", color: "color", showValue: "showValue", value: "value", bufferValue: "bufferValue" }, host: { attributes: { "role": "progressbar", "tabindex": "-1" }, properties: { "class.progress-indeterminate": "mode === \"indeterminate\"", "class.progress-show-value": "this.showValue", "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-valuenow": "_isIndeterminate() ? null : value", "attr.mode": "mode" }, classAttribute: "fw-progress-bar progress progress-animation-ready" }, viewQueries: [{ propertyName: "_determinateCircle", first: true, predicate: ["determinateSpinner"], descendants: true }], ngImport: i0, template: "<div class=\"progress-wrapper\">\n <div class=\"progress-buffer\" aria-hidden=\"true\">\n <div\n class=\"progress-buffer-bar\"\n [style.flex-basis]=\"_getBufferBarFlexBasis()\"></div>\n <div class=\"progress-buffer-dots\" *ngIf=\"mode === 'buffer'\"></div>\n </div>\n <div\n class=\"progress-bar progress-primary-bar\"\n aria-hidden=\"true\"\n [style.transform]=\"_getPrimaryBarTransform()\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n <div class=\"progress-bar progress-secondary-bar\" aria-hidden=\"true\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n</div>\n<p [ngClass]=\"['progress-label', 'mode-'+mode]\" *ngIf=\"showValue\">{{ value }}%</p>\n", styles: [".fw-progress-bar{display:block;text-align:start}.fw-progress-bar[mode=query]{transform:scaleX(-1)}.progress{position:relative;width:100%}.progress.progress-show-value{display:flex;align-items:center;height:14px}.progress.progress-show-value .progress-label{font-size:12px;color:var(--typography-muted);margin:0 0 0 8px}.progress-wrapper{position:relative;width:100%;transform:translateZ(0);outline:1px solid transparent;overflow-x:hidden;transition:opacity .25s 0ms cubic-bezier(.4,0,.6,1);height:4px;border-radius:4px}.progress-bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform .25s 0ms cubic-bezier(.4,0,.6,1)}.progress-indeterminate .progress-bar{transition:none}[dir=rtl] .progress-bar{right:0;transform-origin:center right}.progress-bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-top-width:4px;border-radius:4px}.progress-bar-inner.primary{border-color:var(--primary-base)}.progress-bar-inner.secondary{border-color:var(--secondary-base)}.progress-bar-inner.orange{border-color:var(--orange-base)}.progress-bar-inner.red{border-color:var(--red-base)}.progress-bar-inner.green{border-color:var(--green-base)}.progress-buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:4px;border-radius:4px}.progress-buffer-dots{mask-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 10 4' xml:space='preserve' viewBox='0 0 10 4' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='2' cy='2' r='2'/%3E%3C/svg%3E\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:progress-buffering .25s infinite linear;background-color:var(--separations-divider)}[dir=rtl] .progress-buffer-dots{animation:progress-buffering-reverse .25s infinite linear;transform:rotate(0)}.progress-buffer-bar{flex:0 1 100%;transition:flex-basis .25s 0ms cubic-bezier(.4,0,.6,1);background-color:var(--separations-divider);border-radius:4px}.progress-primary-bar{transform:scaleX(0)}.progress-indeterminate .progress-primary-bar{left:-145.1666%}.progress-indeterminate.progress-animation-ready .progress-primary-bar{animation:progress-primary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-primary-bar>.progress-bar-inner{animation:progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-primary-bar{animation-name:progress-primary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-primary-bar{right:-145.1666%;left:auto}.progress-secondary-bar{display:none}.progress-indeterminate .progress-secondary-bar{left:-54.8889%;display:block}.progress-indeterminate.progress-animation-ready .progress-secondary-bar{animation:progress-secondary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-secondary-bar>.progress-bar-inner{animation:progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-secondary-bar{animation-name:progress-secondary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-secondary-bar{right:-54.8889%;left:auto}@keyframes progress-buffering{0%{transform:rotate(180deg) translate(-10px)}}@keyframes progress-primary-indeterminate-translate{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3813,.55,.9563);transform:translate(83.6714%)}to{transform:translate(200.611%)}}@keyframes progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.3347,.1248,.7858,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.6614)}to{transform:scaleX(.08)}}@keyframes progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.31,.284,.8,.7337);transform:translate(37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(84.3862%)}to{transform:translate(160.2778%)}}@keyframes progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.205,.0571,.5766,.4539);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.1523,.1964,.6483,1.0043);transform:scaleX(.4571)}44.15%{animation-timing-function:cubic-bezier(.2578,-.0032,.2118,1.3818);transform:scaleX(.7279)}to{transform:scaleX(.08)}}@keyframes progress-primary-indeterminate-translate-reverse{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3814,.55,.9563);transform:translate(-83.6714%)}to{transform:translate(-200.611%)}}@keyframes progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.3103,.284,.8,.7337);transform:translate(-37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(-84.3861%)}to{transform:translate(-160.2778%)}}@keyframes progress-buffering-reverse{0%{transform:translate(-10px)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
51
+ FwProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FwProgressBarComponent, selector: "fw-progress-bar", inputs: { mode: "mode", color: "color", showValue: "showValue", value: "value", bufferValue: "bufferValue" }, host: { attributes: { "role": "progressbar", "tabindex": "-1" }, properties: { "class.progress-indeterminate": "mode === \"indeterminate\"", "class.progress-show-value": "this.showValue", "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-valuenow": "_isIndeterminate() ? null : value", "attr.mode": "mode" }, classAttribute: "fw-progress-bar progress progress-animation-ready" }, viewQueries: [{ propertyName: "_determinateCircle", first: true, predicate: ["determinateSpinner"], descendants: true }], ngImport: i0, template: "<div class=\"progress-wrapper\">\n <div class=\"progress-buffer\" aria-hidden=\"true\">\n <div\n class=\"progress-buffer-bar\"\n [style.flex-basis]=\"_getBufferBarFlexBasis()\"></div>\n <div class=\"progress-buffer-dots\" *ngIf=\"mode === 'buffer'\"></div>\n </div>\n <div\n class=\"progress-bar progress-primary-bar\"\n aria-hidden=\"true\"\n [style.transform]=\"_getPrimaryBarTransform()\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n <div class=\"progress-bar progress-secondary-bar\" aria-hidden=\"true\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n</div>\n<p [ngClass]=\"['progress-label', 'mode-'+mode]\" *ngIf=\"showValue\">{{ value }}%</p>\n", styles: [".fw-progress-bar{display:block;text-align:start}.fw-progress-bar[mode=query]{transform:scaleX(-1)}.progress{position:relative;width:100%}.progress.progress-show-value{display:flex;align-items:center;height:14px}.progress.progress-show-value .progress-label{font-size:12px;color:var(--typography-muted);margin:0 0 0 8px}.progress-wrapper{position:relative;width:100%;transform:translateZ(0);outline:1px solid transparent;overflow-x:hidden;transition:opacity .25s 0ms cubic-bezier(.4,0,.6,1);height:4px;border-radius:4px}.progress-bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform .25s 0ms cubic-bezier(.4,0,.6,1)}.progress-indeterminate .progress-bar{transition:none}[dir=rtl] .progress-bar{right:0;transform-origin:center right}.progress-bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-top-width:4px;border-radius:4px}.progress-bar-inner.primary{border-color:var(--primary-base)}.progress-bar-inner.secondary{border-color:var(--secondary-base)}.progress-bar-inner.orange{border-color:var(--orange-base)}.progress-bar-inner.red{border-color:var(--red-base)}.progress-bar-inner.green{border-color:var(--green-base)}.progress-buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:4px;border-radius:4px}.progress-buffer-dots{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 10 4' xml:space='preserve' viewBox='0 0 10 4' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='2' cy='2' r='2'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 10 4' xml:space='preserve' viewBox='0 0 10 4' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='2' cy='2' r='2'/%3E%3C/svg%3E\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:progress-buffering .25s infinite linear;background-color:var(--separations-divider)}[dir=rtl] .progress-buffer-dots{animation:progress-buffering-reverse .25s infinite linear;transform:rotate(0)}.progress-buffer-bar{flex:0 1 100%;transition:flex-basis .25s 0ms cubic-bezier(.4,0,.6,1);background-color:var(--separations-divider);border-radius:4px}.progress-primary-bar{transform:scaleX(0)}.progress-indeterminate .progress-primary-bar{left:-145.1666%}.progress-indeterminate.progress-animation-ready .progress-primary-bar{animation:progress-primary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-primary-bar>.progress-bar-inner{animation:progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-primary-bar{animation-name:progress-primary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-primary-bar{right:-145.1666%;left:auto}.progress-secondary-bar{display:none}.progress-indeterminate .progress-secondary-bar{left:-54.8889%;display:block}.progress-indeterminate.progress-animation-ready .progress-secondary-bar{animation:progress-secondary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-secondary-bar>.progress-bar-inner{animation:progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-secondary-bar{animation-name:progress-secondary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-secondary-bar{right:-54.8889%;left:auto}@keyframes progress-buffering{0%{transform:rotate(180deg) translate(-10px)}}@keyframes progress-primary-indeterminate-translate{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3813,.55,.9563);transform:translate(83.6714%)}to{transform:translate(200.611%)}}@keyframes progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.3347,.1248,.7858,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.6614)}to{transform:scaleX(.08)}}@keyframes progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.31,.284,.8,.7337);transform:translate(37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(84.3862%)}to{transform:translate(160.2778%)}}@keyframes progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.205,.0571,.5766,.4539);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.1523,.1964,.6483,1.0043);transform:scaleX(.4571)}44.15%{animation-timing-function:cubic-bezier(.2578,-.0032,.2118,1.3818);transform:scaleX(.7279)}to{transform:scaleX(.08)}}@keyframes progress-primary-indeterminate-translate-reverse{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3814,.55,.9563);transform:translate(-83.6714%)}to{transform:translate(-200.611%)}}@keyframes progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.3103,.284,.8,.7337);transform:translate(-37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(-84.3861%)}to{transform:translate(-160.2778%)}}@keyframes progress-buffering-reverse{0%{transform:translate(-10px)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
52
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwProgressBarComponent, decorators: [{
53
53
  type: Component,
54
54
  args: [{ selector: 'fw-progress-bar', host: {
@@ -61,7 +61,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
61
61
  '[attr.aria-valuemax]': '100',
62
62
  '[attr.aria-valuenow]': '_isIndeterminate() ? null : value',
63
63
  '[attr.mode]': 'mode',
64
- }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"progress-wrapper\">\n <div class=\"progress-buffer\" aria-hidden=\"true\">\n <div\n class=\"progress-buffer-bar\"\n [style.flex-basis]=\"_getBufferBarFlexBasis()\"></div>\n <div class=\"progress-buffer-dots\" *ngIf=\"mode === 'buffer'\"></div>\n </div>\n <div\n class=\"progress-bar progress-primary-bar\"\n aria-hidden=\"true\"\n [style.transform]=\"_getPrimaryBarTransform()\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n <div class=\"progress-bar progress-secondary-bar\" aria-hidden=\"true\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n</div>\n<p [ngClass]=\"['progress-label', 'mode-'+mode]\" *ngIf=\"showValue\">{{ value }}%</p>\n", styles: [".fw-progress-bar{display:block;text-align:start}.fw-progress-bar[mode=query]{transform:scaleX(-1)}.progress{position:relative;width:100%}.progress.progress-show-value{display:flex;align-items:center;height:14px}.progress.progress-show-value .progress-label{font-size:12px;color:var(--typography-muted);margin:0 0 0 8px}.progress-wrapper{position:relative;width:100%;transform:translateZ(0);outline:1px solid transparent;overflow-x:hidden;transition:opacity .25s 0ms cubic-bezier(.4,0,.6,1);height:4px;border-radius:4px}.progress-bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform .25s 0ms cubic-bezier(.4,0,.6,1)}.progress-indeterminate .progress-bar{transition:none}[dir=rtl] .progress-bar{right:0;transform-origin:center right}.progress-bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-top-width:4px;border-radius:4px}.progress-bar-inner.primary{border-color:var(--primary-base)}.progress-bar-inner.secondary{border-color:var(--secondary-base)}.progress-bar-inner.orange{border-color:var(--orange-base)}.progress-bar-inner.red{border-color:var(--red-base)}.progress-bar-inner.green{border-color:var(--green-base)}.progress-buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:4px;border-radius:4px}.progress-buffer-dots{mask-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 10 4' xml:space='preserve' viewBox='0 0 10 4' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='2' cy='2' r='2'/%3E%3C/svg%3E\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:progress-buffering .25s infinite linear;background-color:var(--separations-divider)}[dir=rtl] .progress-buffer-dots{animation:progress-buffering-reverse .25s infinite linear;transform:rotate(0)}.progress-buffer-bar{flex:0 1 100%;transition:flex-basis .25s 0ms cubic-bezier(.4,0,.6,1);background-color:var(--separations-divider);border-radius:4px}.progress-primary-bar{transform:scaleX(0)}.progress-indeterminate .progress-primary-bar{left:-145.1666%}.progress-indeterminate.progress-animation-ready .progress-primary-bar{animation:progress-primary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-primary-bar>.progress-bar-inner{animation:progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-primary-bar{animation-name:progress-primary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-primary-bar{right:-145.1666%;left:auto}.progress-secondary-bar{display:none}.progress-indeterminate .progress-secondary-bar{left:-54.8889%;display:block}.progress-indeterminate.progress-animation-ready .progress-secondary-bar{animation:progress-secondary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-secondary-bar>.progress-bar-inner{animation:progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-secondary-bar{animation-name:progress-secondary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-secondary-bar{right:-54.8889%;left:auto}@keyframes progress-buffering{0%{transform:rotate(180deg) translate(-10px)}}@keyframes progress-primary-indeterminate-translate{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3813,.55,.9563);transform:translate(83.6714%)}to{transform:translate(200.611%)}}@keyframes progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.3347,.1248,.7858,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.6614)}to{transform:scaleX(.08)}}@keyframes progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.31,.284,.8,.7337);transform:translate(37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(84.3862%)}to{transform:translate(160.2778%)}}@keyframes progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.205,.0571,.5766,.4539);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.1523,.1964,.6483,1.0043);transform:scaleX(.4571)}44.15%{animation-timing-function:cubic-bezier(.2578,-.0032,.2118,1.3818);transform:scaleX(.7279)}to{transform:scaleX(.08)}}@keyframes progress-primary-indeterminate-translate-reverse{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3814,.55,.9563);transform:translate(-83.6714%)}to{transform:translate(-200.611%)}}@keyframes progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.3103,.284,.8,.7337);transform:translate(-37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(-84.3861%)}to{transform:translate(-160.2778%)}}@keyframes progress-buffering-reverse{0%{transform:translate(-10px)}}\n"] }]
64
+ }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"progress-wrapper\">\n <div class=\"progress-buffer\" aria-hidden=\"true\">\n <div\n class=\"progress-buffer-bar\"\n [style.flex-basis]=\"_getBufferBarFlexBasis()\"></div>\n <div class=\"progress-buffer-dots\" *ngIf=\"mode === 'buffer'\"></div>\n </div>\n <div\n class=\"progress-bar progress-primary-bar\"\n aria-hidden=\"true\"\n [style.transform]=\"_getPrimaryBarTransform()\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n <div class=\"progress-bar progress-secondary-bar\" aria-hidden=\"true\">\n <span class=\"progress-bar-inner {{color}}\"></span>\n </div>\n</div>\n<p [ngClass]=\"['progress-label', 'mode-'+mode]\" *ngIf=\"showValue\">{{ value }}%</p>\n", styles: [".fw-progress-bar{display:block;text-align:start}.fw-progress-bar[mode=query]{transform:scaleX(-1)}.progress{position:relative;width:100%}.progress.progress-show-value{display:flex;align-items:center;height:14px}.progress.progress-show-value .progress-label{font-size:12px;color:var(--typography-muted);margin:0 0 0 8px}.progress-wrapper{position:relative;width:100%;transform:translateZ(0);outline:1px solid transparent;overflow-x:hidden;transition:opacity .25s 0ms cubic-bezier(.4,0,.6,1);height:4px;border-radius:4px}.progress-bar{position:absolute;top:0;bottom:0;margin:auto 0;width:100%;animation:none;transform-origin:top left;transition:transform .25s 0ms cubic-bezier(.4,0,.6,1)}.progress-indeterminate .progress-bar{transition:none}[dir=rtl] .progress-bar{right:0;transform-origin:center right}.progress-bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid;border-top-width:4px;border-radius:4px}.progress-bar-inner.primary{border-color:var(--primary-base)}.progress-bar-inner.secondary{border-color:var(--secondary-base)}.progress-bar-inner.orange{border-color:var(--orange-base)}.progress-bar-inner.red{border-color:var(--red-base)}.progress-bar-inner.green{border-color:var(--green-base)}.progress-buffer{display:flex;position:absolute;top:0;bottom:0;margin:auto 0;width:100%;overflow:hidden;height:4px;border-radius:4px}.progress-buffer-dots{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 10 4' xml:space='preserve' viewBox='0 0 10 4' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='2' cy='2' r='2'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 10 4' xml:space='preserve' viewBox='0 0 10 4' preserveAspectRatio='xMinYMin slice'%3E%3Ccircle cx='2' cy='2' r='2'/%3E%3C/svg%3E\");background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:progress-buffering .25s infinite linear;background-color:var(--separations-divider)}[dir=rtl] .progress-buffer-dots{animation:progress-buffering-reverse .25s infinite linear;transform:rotate(0)}.progress-buffer-bar{flex:0 1 100%;transition:flex-basis .25s 0ms cubic-bezier(.4,0,.6,1);background-color:var(--separations-divider);border-radius:4px}.progress-primary-bar{transform:scaleX(0)}.progress-indeterminate .progress-primary-bar{left:-145.1666%}.progress-indeterminate.progress-animation-ready .progress-primary-bar{animation:progress-primary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-primary-bar>.progress-bar-inner{animation:progress-primary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-primary-bar{animation-name:progress-primary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-primary-bar{right:-145.1666%;left:auto}.progress-secondary-bar{display:none}.progress-indeterminate .progress-secondary-bar{left:-54.8889%;display:block}.progress-indeterminate.progress-animation-ready .progress-secondary-bar{animation:progress-secondary-indeterminate-translate 2s infinite linear}.progress-indeterminate.progress-animation-ready .progress-secondary-bar>.progress-bar-inner{animation:progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .progress.progress-animation-ready .progress-secondary-bar{animation-name:progress-secondary-indeterminate-translate-reverse}[dir=rtl] .progress.progress-indeterminate .progress-secondary-bar{right:-54.8889%;left:auto}@keyframes progress-buffering{0%{transform:rotate(180deg) translate(-10px)}}@keyframes progress-primary-indeterminate-translate{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3813,.55,.9563);transform:translate(83.6714%)}to{transform:translate(200.611%)}}@keyframes progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{animation-timing-function:cubic-bezier(.3347,.1248,.7858,1);transform:scaleX(.08)}69.15%{animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.6614)}to{transform:scaleX(.08)}}@keyframes progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.31,.284,.8,.7337);transform:translate(37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(84.3862%)}to{transform:translate(160.2778%)}}@keyframes progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(.205,.0571,.5766,.4539);transform:scaleX(.08)}19.15%{animation-timing-function:cubic-bezier(.1523,.1964,.6483,1.0043);transform:scaleX(.4571)}44.15%{animation-timing-function:cubic-bezier(.2578,-.0032,.2118,1.3818);transform:scaleX(.7279)}to{transform:scaleX(.08)}}@keyframes progress-primary-indeterminate-translate-reverse{0%{transform:translate(0)}20%{animation-timing-function:cubic-bezier(.5,0,.7017,.4958);transform:translate(0)}59.15%{animation-timing-function:cubic-bezier(.3024,.3814,.55,.9563);transform:translate(-83.6714%)}to{transform:translate(-200.611%)}}@keyframes progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(.15,0,.515,.4096);transform:translate(0)}25%{animation-timing-function:cubic-bezier(.3103,.284,.8,.7337);transform:translate(-37.6519%)}48.35%{animation-timing-function:cubic-bezier(.4,.627,.6,.902);transform:translate(-84.3861%)}to{transform:translate(-160.2778%)}}@keyframes progress-buffering-reverse{0%{transform:translate(-10px)}}\n"] }]
65
65
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { _determinateCircle: [{
66
66
  type: ViewChild,
67
67
  args: ['determinateSpinner']
@@ -25,10 +25,10 @@ export class FwRadioComponent {
25
25
  }
26
26
  }
27
27
  FwRadioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
- FwRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FwRadioComponent, selector: "fw-radio-button", inputs: { checked: "checked", value: "value", group: "group", disabled: "disabled", size: "size", color: "color", title: "title", focused: "focused" }, outputs: { change: "change" }, ngImport: i0, template: "<div [ngClass]=\"['fw-radio-wrapper', disabled?'disabled':'']\">\n <div [ngClass]=\"radioStyles\">\n <input\n type=\"radio\"\n class=\"fw-radio\"\n [id]=\"group+value\"\n [value]=\"value\"\n [checked]=\"checked\"\n [name]=\"group\"\n [disabled]=\"disabled\"\n (change)=\"handleChange($event)\"\n (focusout)=\"focused=false\"\n (focusin)=\"focused=true\"\n />\n </div>\n <label *ngIf=\"title\" [htmlFor]=\"group+value\" class=\"vision-h4\">{{ title }}\n <ng-content></ng-content>\n </label>\n</div>\n", styles: [":host .fw-radio-wrapper{display:flex;align-items:center;width:fit-content;cursor:pointer}:host .fw-radio-wrapper label{margin:0 6px 0 0;color:var(--typography-base)}:host .fw-radio-wrapper label:empty{display:none}:host .fw-radio-wrapper .fw-radio{height:36px;width:36px;display:flex;align-items:center;justify-content:center;border-radius:50%}:host .fw-radio-wrapper .fw-radio:hover{background-color:var(--slate-hover)}:host .fw-radio-wrapper .fw-radio.focused{background-color:var(--slate-focus)}:host .fw-radio-wrapper .fw-radio input[type=radio]{appearance:none;display:inline-block;width:20px;height:20px;margin:6px;background-clip:content-box;border:2px solid var(--typography-light);background-color:transparent;border-radius:50%;cursor:pointer}:host .fw-radio-wrapper .fw-radio input[type=radio]:checked{width:16px;height:16px;background-color:var(--typography-light);outline:2px solid var(--typography-light);border:2px solid white;margin:8px}:host .fw-radio-wrapper .fw-radio.primary.focused{background-color:var(--primary-focus)}:host .fw-radio-wrapper .fw-radio.primary.focused input[type=radio]{border:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.primary input[type=radio]:checked{border:2px solid white;background-color:var(--primary-base);outline:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.secondary.focused{background-color:var(--secondary-focus)}:host .fw-radio-wrapper .fw-radio.secondary.focused input[type=radio]{border:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.secondary input[type=radio]:checked{border:2px solid white;background-color:var(--secondary-base);outline:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.disabled{cursor:not-allowed}:host .fw-radio-wrapper .fw-radio.disabled input[type=radio]:checked{border:2px solid white;background-color:var(--typography-light);outline:2px solid var(--typography-light)}:host .fw-radio-wrapper .fw-radio.compact{width:30px;height:30px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]{width:18px;height:18px;margin:5px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]:checked{width:14px;height:14px;margin:7px}:host .fw-radio-wrapper.disabled{cursor:not-allowed;opacity:.4}:host .fw-radio-wrapper.disabled label{color:var(--typography-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
28
+ FwRadioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FwRadioComponent, selector: "fw-radio-button", inputs: { checked: "checked", value: "value", group: "group", disabled: "disabled", size: "size", color: "color", title: "title", focused: "focused" }, outputs: { change: "change" }, ngImport: i0, template: "<div [ngClass]=\"['fw-radio-wrapper', disabled?'disabled':'']\">\n <div [ngClass]=\"radioStyles\">\n <input\n type=\"radio\"\n class=\"fw-radio\"\n [id]=\"group+value\"\n [value]=\"value\"\n [checked]=\"checked\"\n [name]=\"group\"\n [disabled]=\"disabled\"\n (change)=\"handleChange($event)\"\n (focusout)=\"focused=false\"\n (focusin)=\"focused=true\"\n />\n </div>\n <label *ngIf=\"title\" [htmlFor]=\"group+value\" class=\"vision-h4\">{{ title }}\n <ng-content></ng-content>\n </label>\n</div>\n", styles: [":host .fw-radio-wrapper{display:flex;align-items:center;width:-webkit-fit-content;width:fit-content;cursor:pointer}:host .fw-radio-wrapper label{margin:0 6px 0 0;color:var(--typography-base)}:host .fw-radio-wrapper label:empty{display:none}:host .fw-radio-wrapper .fw-radio{height:36px;width:36px;display:flex;align-items:center;justify-content:center;border-radius:50%}:host .fw-radio-wrapper .fw-radio:hover{background-color:var(--slate-hover)}:host .fw-radio-wrapper .fw-radio.focused{background-color:var(--slate-focus)}:host .fw-radio-wrapper .fw-radio input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:20px;height:20px;margin:6px;background-clip:content-box;border:2px solid var(--typography-light);background-color:transparent;border-radius:50%;cursor:pointer}:host .fw-radio-wrapper .fw-radio input[type=radio]:checked{width:16px;height:16px;background-color:var(--typography-light);outline:2px solid var(--typography-light);border:2px solid white;margin:8px}:host .fw-radio-wrapper .fw-radio.primary.focused{background-color:var(--primary-focus)}:host .fw-radio-wrapper .fw-radio.primary.focused input[type=radio]{border:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.primary input[type=radio]:checked{border:2px solid white;background-color:var(--primary-base);outline:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.secondary.focused{background-color:var(--secondary-focus)}:host .fw-radio-wrapper .fw-radio.secondary.focused input[type=radio]{border:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.secondary input[type=radio]:checked{border:2px solid white;background-color:var(--secondary-base);outline:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.disabled{cursor:not-allowed}:host .fw-radio-wrapper .fw-radio.disabled input[type=radio]:checked{border:2px solid white;background-color:var(--typography-light);outline:2px solid var(--typography-light)}:host .fw-radio-wrapper .fw-radio.compact{width:30px;height:30px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]{width:18px;height:18px;margin:5px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]:checked{width:14px;height:14px;margin:7px}:host .fw-radio-wrapper.disabled{cursor:not-allowed;opacity:.4}:host .fw-radio-wrapper.disabled label{color:var(--typography-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwRadioComponent, decorators: [{
30
30
  type: Component,
31
- args: [{ selector: 'fw-radio-button', template: "<div [ngClass]=\"['fw-radio-wrapper', disabled?'disabled':'']\">\n <div [ngClass]=\"radioStyles\">\n <input\n type=\"radio\"\n class=\"fw-radio\"\n [id]=\"group+value\"\n [value]=\"value\"\n [checked]=\"checked\"\n [name]=\"group\"\n [disabled]=\"disabled\"\n (change)=\"handleChange($event)\"\n (focusout)=\"focused=false\"\n (focusin)=\"focused=true\"\n />\n </div>\n <label *ngIf=\"title\" [htmlFor]=\"group+value\" class=\"vision-h4\">{{ title }}\n <ng-content></ng-content>\n </label>\n</div>\n", styles: [":host .fw-radio-wrapper{display:flex;align-items:center;width:fit-content;cursor:pointer}:host .fw-radio-wrapper label{margin:0 6px 0 0;color:var(--typography-base)}:host .fw-radio-wrapper label:empty{display:none}:host .fw-radio-wrapper .fw-radio{height:36px;width:36px;display:flex;align-items:center;justify-content:center;border-radius:50%}:host .fw-radio-wrapper .fw-radio:hover{background-color:var(--slate-hover)}:host .fw-radio-wrapper .fw-radio.focused{background-color:var(--slate-focus)}:host .fw-radio-wrapper .fw-radio input[type=radio]{appearance:none;display:inline-block;width:20px;height:20px;margin:6px;background-clip:content-box;border:2px solid var(--typography-light);background-color:transparent;border-radius:50%;cursor:pointer}:host .fw-radio-wrapper .fw-radio input[type=radio]:checked{width:16px;height:16px;background-color:var(--typography-light);outline:2px solid var(--typography-light);border:2px solid white;margin:8px}:host .fw-radio-wrapper .fw-radio.primary.focused{background-color:var(--primary-focus)}:host .fw-radio-wrapper .fw-radio.primary.focused input[type=radio]{border:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.primary input[type=radio]:checked{border:2px solid white;background-color:var(--primary-base);outline:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.secondary.focused{background-color:var(--secondary-focus)}:host .fw-radio-wrapper .fw-radio.secondary.focused input[type=radio]{border:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.secondary input[type=radio]:checked{border:2px solid white;background-color:var(--secondary-base);outline:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.disabled{cursor:not-allowed}:host .fw-radio-wrapper .fw-radio.disabled input[type=radio]:checked{border:2px solid white;background-color:var(--typography-light);outline:2px solid var(--typography-light)}:host .fw-radio-wrapper .fw-radio.compact{width:30px;height:30px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]{width:18px;height:18px;margin:5px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]:checked{width:14px;height:14px;margin:7px}:host .fw-radio-wrapper.disabled{cursor:not-allowed;opacity:.4}:host .fw-radio-wrapper.disabled label{color:var(--typography-light)}\n"] }]
31
+ args: [{ selector: 'fw-radio-button', template: "<div [ngClass]=\"['fw-radio-wrapper', disabled?'disabled':'']\">\n <div [ngClass]=\"radioStyles\">\n <input\n type=\"radio\"\n class=\"fw-radio\"\n [id]=\"group+value\"\n [value]=\"value\"\n [checked]=\"checked\"\n [name]=\"group\"\n [disabled]=\"disabled\"\n (change)=\"handleChange($event)\"\n (focusout)=\"focused=false\"\n (focusin)=\"focused=true\"\n />\n </div>\n <label *ngIf=\"title\" [htmlFor]=\"group+value\" class=\"vision-h4\">{{ title }}\n <ng-content></ng-content>\n </label>\n</div>\n", styles: [":host .fw-radio-wrapper{display:flex;align-items:center;width:-webkit-fit-content;width:fit-content;cursor:pointer}:host .fw-radio-wrapper label{margin:0 6px 0 0;color:var(--typography-base)}:host .fw-radio-wrapper label:empty{display:none}:host .fw-radio-wrapper .fw-radio{height:36px;width:36px;display:flex;align-items:center;justify-content:center;border-radius:50%}:host .fw-radio-wrapper .fw-radio:hover{background-color:var(--slate-hover)}:host .fw-radio-wrapper .fw-radio.focused{background-color:var(--slate-focus)}:host .fw-radio-wrapper .fw-radio input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:20px;height:20px;margin:6px;background-clip:content-box;border:2px solid var(--typography-light);background-color:transparent;border-radius:50%;cursor:pointer}:host .fw-radio-wrapper .fw-radio input[type=radio]:checked{width:16px;height:16px;background-color:var(--typography-light);outline:2px solid var(--typography-light);border:2px solid white;margin:8px}:host .fw-radio-wrapper .fw-radio.primary.focused{background-color:var(--primary-focus)}:host .fw-radio-wrapper .fw-radio.primary.focused input[type=radio]{border:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.primary input[type=radio]:checked{border:2px solid white;background-color:var(--primary-base);outline:2px solid var(--primary-base)}:host .fw-radio-wrapper .fw-radio.secondary.focused{background-color:var(--secondary-focus)}:host .fw-radio-wrapper .fw-radio.secondary.focused input[type=radio]{border:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.secondary input[type=radio]:checked{border:2px solid white;background-color:var(--secondary-base);outline:2px solid var(--secondary-base)}:host .fw-radio-wrapper .fw-radio.disabled{cursor:not-allowed}:host .fw-radio-wrapper .fw-radio.disabled input[type=radio]:checked{border:2px solid white;background-color:var(--typography-light);outline:2px solid var(--typography-light)}:host .fw-radio-wrapper .fw-radio.compact{width:30px;height:30px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]{width:18px;height:18px;margin:5px}:host .fw-radio-wrapper .fw-radio.compact input[type=radio]:checked{width:14px;height:14px;margin:7px}:host .fw-radio-wrapper.disabled{cursor:not-allowed;opacity:.4}:host .fw-radio-wrapper.disabled label{color:var(--typography-light)}\n"] }]
32
32
  }], propDecorators: { checked: [{
33
33
  type: Input
34
34
  }], value: [{
@@ -83,32 +83,37 @@ export class FwMultiSelectMenuComponent {
83
83
  }
84
84
  }
85
85
  ngAfterContentInit() {
86
- if (this.menuItems && this.menuItems.length > 0) {
87
- if (this.options && this.options.length === 0) {
88
- this.options = [];
89
- this.menuItems.forEach(item => {
90
- const opt = {
91
- value: item.value,
92
- label: item.title,
93
- icon: item.icon,
94
- };
95
- this.options.push(opt);
96
- if (this.selectedValues.indexOf(item.value.toString()) >= 0) {
97
- this.selectedOptions.push(opt);
98
- }
99
- const sub = item.click.subscribe(value => this.menu.writeValue(value));
100
- this.subscriptions.push(sub);
101
- });
102
- this.updateFilteredItems();
103
- }
104
- }
86
+ this.registerCustomMenuItems();
87
+ this.customMenuItems.changes.subscribe(() => {
88
+ this.registerCustomMenuItems();
89
+ });
90
+ }
91
+ registerCustomMenuItems() {
92
+ // first filter any menuItems we've already registered as options
93
+ const newMenuItems = this.customMenuItems.filter(menuItem => !this.options.find(option => menuItem.value === option.value));
94
+ newMenuItems.forEach((newMenuItem) => {
95
+ const newOption = {
96
+ value: newMenuItem.value,
97
+ title: newMenuItem.title,
98
+ icon: newMenuItem.icon,
99
+ };
100
+ this.options.push(newOption);
101
+ const sub = newMenuItem.click.subscribe(value => {
102
+ this.updateValue([value], true);
103
+ if (this.closeOnSelect) {
104
+ this.trigger.close();
105
+ }
106
+ });
107
+ this.subscriptions.push(sub);
108
+ });
109
+ this.updateFilteredItems();
105
110
  }
106
111
  handleTouched() {
107
112
  this.touched = true;
108
113
  }
109
114
  handleClose(chip) {
110
- this.value.splice(this.value.indexOf(chip[this.valueProperty]), 1);
111
- this.updateValue(this.value);
115
+ const newValues = this.value.filter(val => val !== chip[this.valueProperty]);
116
+ this.updateValue(newValues);
112
117
  this.trigger.close();
113
118
  }
114
119
  handleChange(e) {
@@ -125,6 +130,16 @@ export class FwMultiSelectMenuComponent {
125
130
  if (this.filterItemsOnSelect && this.options && this.value) {
126
131
  this.filteredOptions = this.options.filter(i => !this.value.includes(i[this.valueProperty]));
127
132
  }
133
+ if (this.customMenuItems && this.filterItemsOnSelect) {
134
+ this.customMenuItems.forEach(item => {
135
+ if (this.value.includes(item.value)) {
136
+ item.hidden = true;
137
+ }
138
+ else {
139
+ item.hidden = false;
140
+ }
141
+ });
142
+ }
128
143
  if (this.value) {
129
144
  if (this.value.length === 0) {
130
145
  setTimeout(() => {
@@ -146,34 +161,31 @@ export class FwMultiSelectMenuComponent {
146
161
  }
147
162
  }
148
163
  }
149
- updateValue(value) {
150
- this.selectedValues = [];
151
- this.selectedOptions = [];
152
- if (value) {
153
- value.forEach(val => {
154
- if (typeof val === 'object') {
155
- this.selectedValues.push(val[this.valueProperty]);
156
- this.selectedOptions.push(val);
157
- }
158
- else {
159
- this.selectedValues.push(val);
160
- if (this.options && this.options.length) {
161
- this.selectedOptions = [];
162
- this.options.forEach(opt => {
163
- if (value.indexOf(opt[this.valueProperty]) >= 0) {
164
- this.selectedOptions.push(opt);
165
- }
166
- });
167
- }
168
- }
169
- });
164
+ updateValue(incomingValues, additive = false) {
165
+ if (!incomingValues) {
166
+ return;
167
+ }
168
+ if (!additive) {
169
+ this.selectedValues = [];
170
+ this.selectedOptions = [];
170
171
  }
172
+ incomingValues.forEach(incoming => {
173
+ if (typeof incoming === 'object') {
174
+ this.selectedValues.push(incoming[this.valueProperty]);
175
+ this.selectedOptions.push(incoming);
176
+ }
177
+ else {
178
+ this.selectedValues.push(incoming);
179
+ const incomingMappedToOption = this.options.find(opt => opt[this.valueProperty] === incoming);
180
+ this.selectedOptions.push(incomingMappedToOption);
181
+ }
182
+ });
171
183
  this._value = this.selectedValues;
172
184
  this.updateFilteredItems();
173
185
  if (this.onChange) {
174
- this.onChange(value);
186
+ this.onChange(this._value);
175
187
  }
176
- this.change.emit(value);
188
+ this.change.emit(this._value);
177
189
  if (this.textInput && this.textInput.nativeElement) {
178
190
  this.textInput.nativeElement.value = '';
179
191
  }
@@ -254,24 +266,31 @@ export class FwMultiSelectMenuComponent {
254
266
  }
255
267
  }
256
268
  }
257
- handleInput(event) {
258
- if (event.target['value'].length > 0) {
259
- this.filteredOptions = this.options.filter(option => {
260
- if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
261
- return !this.value.includes(option);
262
- }
263
- else {
264
- return false;
265
- }
266
- });
269
+ handleFilterChange(event) {
270
+ if (!this.trigger.isOpen()) {
271
+ this.trigger.open();
267
272
  }
268
- else {
273
+ const newFilterValue = event.target['value'];
274
+ // empty filter guard
275
+ if (!newFilterValue) {
269
276
  this.filteredOptions = this.options;
270
277
  this.updateFilteredItems();
278
+ return;
271
279
  }
272
- if (!this.trigger.isOpen()) {
273
- this.trigger.open();
280
+ // hide custom items
281
+ if (this.customMenuItems) {
282
+ const filteredCustomItems = this.customMenuItems.filter(item => !item.title.toLowerCase().includes(newFilterValue.toLowerCase()));
283
+ filteredCustomItems.forEach(item => item.hidden = true);
274
284
  }
285
+ // decide what to render if we're using options
286
+ this.filteredOptions = this.options.filter(option => {
287
+ if (option[this.titleProperty].toLowerCase().includes(event.target['value'].toLowerCase())) {
288
+ return !this.value.includes(option);
289
+ }
290
+ else {
291
+ return false;
292
+ }
293
+ });
275
294
  this.moveFocused('zero');
276
295
  }
277
296
  }
@@ -282,7 +301,7 @@ FwMultiSelectMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
282
301
  useExisting: forwardRef(() => FwMultiSelectMenuComponent),
283
302
  multi: true,
284
303
  },
285
- ], 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 fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\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\n [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\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 (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\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:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}: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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i3.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: i4.FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: i5.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: i6.FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"], outputs: ["filterChanged"] }, { kind: "component", type: i7.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "directive", type: i8.MenuRegisterDirective, selector: "[fwMenuRegister]" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] });
304
+ ], queries: [{ propertyName: "customMenuItems", predicate: FwMenuItemComponent, descendants: true }], 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}\" #wrapper>\n <div\n fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\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)=\"handleFilterChange($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)=\"handleFilterChange($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container\n [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"customMenuItems.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 (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n </ng-container>\n <fw-menu-item\n *ngIf=\"filteredOptions.length === 0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\n </fw-menu-item>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]\"></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:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}: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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "component", type: i3.FwChipComponent, selector: "fw-chip", inputs: ["value", "variant", "color", "icon", "title", "description", "showClose", "disabled", "selected", "selectable"], outputs: ["close", "select"] }, { kind: "component", type: i4.FwIconComponent, selector: "fw-icon", inputs: ["size", "color"] }, { kind: "component", type: i5.FwMenuComponent, selector: "fw-menu", inputs: ["disabled", "size", "multiSelect", "useCheckbox", "value", "variant", "collapsed", "collapsedWidth", "openWidth"], outputs: ["change", "filteredItemsChange"] }, { kind: "component", type: i6.FwMenuContainerComponent, selector: "fw-menu-container", inputs: ["width", "maxHeight", "minHeight", "border", "shadow", "showFilter", "filterText", "offset", "collapsed"], outputs: ["filterChanged"] }, { kind: "component", type: i7.FwMenuItemComponent, selector: "fw-menu-item", inputs: ["value", "size", "title", "description", "icon", "iconColor", "disabled", "showCheckbox", "checkboxColor", "multiSelect", "hidden", "collapsed", "href", "target", "subItemsOpen", "focused", "selected", "variant"], outputs: ["click"] }, { kind: "directive", type: i8.MenuRegisterDirective, selector: "[fwMenuRegister]" }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }] });
286
305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwMultiSelectMenuComponent, decorators: [{
287
306
  type: Component,
288
307
  args: [{ selector: 'fw-multi-select', providers: [
@@ -291,7 +310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
291
310
  useExisting: forwardRef(() => FwMultiSelectMenuComponent),
292
311
  multi: true,
293
312
  },
294
- ], template: "<div [ngStyle]=\"{width: width}\">\n <div\n fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\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\n [width]=\"optionsWidth || width\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\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 (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n <fw-menu-item\n *ngIf=\"filteredOptions && filteredOptions.length===0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\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:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}: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"] }]
313
+ ], template: "<div [ngStyle]=\"{width: width}\" #wrapper>\n <div\n fwMenuRegister\n [ngClass]=\"['chip-grid', size]\"\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)=\"handleFilterChange($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)=\"handleFilterChange($event)\">\n <fw-icon>chevron-down</fw-icon>\n </div>\n <ng-template #selectMenu>\n <fw-menu-container\n [width]=\"optionsWidth || wrapper.offsetWidth + 'px'\" [maxHeight]=\"maxOptionsHeight\" [minHeight]=\"minOptionsHeight\"\n *ngIf=\"emptyText.length > 0 || (filteredOptions && filteredOptions.length > 0)\">\n <fw-menu\n [multiSelect]=\"true\"\n [disabled]=\"disabled || (filteredOptions && filteredOptions.length===0)\"\n [value]=\"selectedValues\"\n (change)=\"handleChange($event)\">\n <ng-container *ngIf=\"customMenuItems.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 (mouseover)=\"focused=$index\"\n >\n </fw-menu-item>\n </ng-container>\n <fw-menu-item\n *ngIf=\"filteredOptions.length === 0 && emptyText\" [showCheckbox]=\"false\"\n [disabled]=\"true\" [title]=\"emptyText\">\n </fw-menu-item>\n <ng-content select=\"[fw-menu-item, fw-menu-separator, fw-menu-item-group, fw-menu-header]\"></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:4px;align-items:center;border-radius:6px;border:1px solid var(--separations-input);cursor:pointer;font-family:Inter,sans-serif}:host .chip-grid.small{min-height:30px;padding:2px}:host .chip-grid.large{min-height:40px;padding:6px}: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"] }]
295
314
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { outsideClick: [{
296
315
  type: HostListener,
297
316
  args: ['document:click']
@@ -340,9 +359,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
340
359
  }], renderedMenuItems: [{
341
360
  type: ViewChildren,
342
361
  args: [FwMenuItemComponent]
343
- }], menuItems: [{
362
+ }], customMenuItems: [{
344
363
  type: ContentChildren,
345
- args: [FwMenuItemComponent]
364
+ args: [FwMenuItemComponent, { descendants: true }]
346
365
  }], textInput: [{
347
366
  type: ViewChild,
348
367
  args: ['textInput']
@@ -354,4 +373,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
354
373
  }], value: [{
355
374
  type: Input
356
375
  }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7OztBQWMvRSxNQUFNLE9BQU8sMEJBQTBCO0lBd0RyQyxZQUFzQixrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTdDbEQsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxpQkFBWSxHQUFZLE1BQU0sQ0FBQztRQUMvQixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQWEsS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQWEsSUFBSSxDQUFDO1FBQy9CLHdCQUFtQixHQUFhLElB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Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ3FCLE9BQU87c0JBQWpDLFNBQVM7dUJBQUMsY0FBYztnQkFDRyxJQUFJO3NCQUEvQixTQUFTO3VCQUFDLGVBQWU7Z0JBQ1MsaUJBQWlCO3NCQUFuRCxZQUFZO3VCQUFDLG1CQUFtQjtnQkFDSyxTQUFTO3NCQUE5QyxlQUFlO3VCQUFDLG1CQUFtQjtnQkFLWixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFbkIsTUFBTTtzQkFBZixNQUFNO2dCQU1ILEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDZGtNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9tZW51JztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3TWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJykgb3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaWdnZXIgJiYgdGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIEBJbnB1dCgpIHZhbHVlUHJvcGVydHk/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSB0aXRsZVByb3BlcnR5Pzogc3RyaW5nID0gJ3RpdGxlJztcbiAgQElucHV0KCkgaWNvblByb3BlcnR5Pzogc3RyaW5nID0gJ2ljb24nO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ2hlY2tib3g/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZmlsdGVySXRlbXNPblNlbGVjdD86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtYXhTZWxlY3RlZFNob3duOiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMjAwcHgnO1xuICBASW5wdXQoKSBtaW5IZWlnaHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIG9wdGlvbnNXaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgbWluT3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgbWF4T3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3Qgc29tZXRoaW5nLi4uJztcbiAgQElucHV0KCkgZW1wdHlUZXh0OiBzdHJpbmcgPSAnTm8gbWF0Y2hlcyBmb3VuZC4uLic7XG4gIEBWaWV3Q2hpbGQoQ2RrTWVudVRyaWdnZXIpIHRyaWdnZXI6IENka01lbnVUcmlnZ2VyO1xuICBAVmlld0NoaWxkKEZ3TWVudUNvbXBvbmVudCkgbWVudTogRndNZW51Q29tcG9uZW50O1xuICBAVmlld0NoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQpIHJlbmRlcmVkTWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZE9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIGZpbHRlcmVkT3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBAVmlld0NoaWxkKCd0ZXh0SW5wdXQnKSB0ZXh0SW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3RleHRJbml0aWFsSW5wdXQnKSB0ZXh0SW5pdGlhbElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBmb2N1c2VkID0gMDtcbiAgcHJpdmF0ZSB0b3VjaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuXG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55W10pID0+IHZvaWQ7XG4gIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHtcbiAgfTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcbiAgICAvLyB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVudUl0ZW1zICYmIHRoaXMubWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBvcHQgPSB7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLnRpdGxlLFxuICAgICAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0KTtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlcy5pbmRleE9mKGl0ZW0udmFsdWUudG9TdHJpbmcoKSkgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdWIgPSBpdGVtLmNsaWNrLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLm1lbnUud3JpdGVWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkSXRlbXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVDbG9zZShjaGlwOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLnNwbGljZSh0aGlzLnZhbHVlLmluZGV4T2YoY2hpcFt0aGlzLnZhbHVlUHJvcGVydHldKSwgMSk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBpZiAoZS50b1N0cmluZygpICE9PSB0aGlzLnNlbGVjdGVkVmFsdWVzLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmVkSXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVySXRlbXNPblNlbGVjdCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGkgPT4gIXRoaXMudmFsdWUuaW5jbHVkZXMoaVt0aGlzLnZhbHVlUHJvcGVydHldKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzIG5lZWRzIHRvIGJlIGRlbGF5ZWQgdG8gZ2l2ZSB0aW1lIGZvciBlbGVtZW50IHN3YXAgdG8gaGFwcGVuXG4gICAgICAgICAgaWYgKHRoaXMudGV4dEluaXRpYWxJbnB1dCAmJiB0aGlzLnRleHRJbml0aWFsSW5wdXQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzXG4gICAgICAgICAgICB0aGlzLnRleHRJbml0aWFsSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHRoaXMgbmVlZHMgdG8gYmUgZGVsYXllZCB0byBnaXZlIHRpbWUgZm9yIGVsZW1lbnQgc3dhcCB0byBoYXBwZW5cbiAgICAgICAgICBpZiAodGhpcy50ZXh0SW5wdXQgJiYgdGhpcy50ZXh0SW5wdXQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnRvdWNoZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAcngtYW5ndWxhci9wcmVmZXItbm8tbGF5b3V0LXNlbnNpdGl2ZS1hcGlzXG4gICAgICAgICAgICB0aGlzLnRleHRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2godmFsW3RoaXMudmFsdWVQcm9wZXJ0eV0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZihvcHRbdGhpcy52YWx1ZVByb3BlcnR5XSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2gob3B0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMudGV4dElucHV0ICYmIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBtb3ZlRm9jdXNlZChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdkb3duJzoge1xuICAgICAgICB0aGlzLmZvY3VzZWQrKztcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCA+PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndXAnOiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZC0tO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkIDwgMCkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICB0aGlzLm1vdmVGb2N1c2VkKCdkb3duJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ3VwJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICBldmVudC50YXJnZXRbJ3ZhbHVlJ10gPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldFsndmFsdWUnXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmZvY3VzZWRdKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5mb2N1c2VkXVt0aGlzLnZhbHVlUHJvcGVydHldXTtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0Wyd2YWx1ZSddID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIGV2ZW50LnRhcmdldFsndmFsdWUnXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZSh0aGlzLnZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0Wyd2YWx1ZSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihvcHRpb24gPT4ge1xuICAgICAgICBpZiAob3B0aW9uW3RoaXMudGl0bGVQcm9wZXJ0eV0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50YXJnZXRbJ3ZhbHVlJ10udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJpZ2dlci5pc09wZW4oKSkge1xuICAgICAgdGhpcy50cmlnZ2VyLm9wZW4oKTtcbiAgICB9XG4gICAgdGhpcy5tb3ZlRm9jdXNlZCgnemVybycpO1xuICB9XG59XG4iLCI8ZGl2IFtuZ1N0eWxlXT1cInt3aWR0aDogd2lkdGh9XCI+XG4gIDxkaXZcbiAgICBmd01lbnVSZWdpc3RlclxuICAgIFtuZ0NsYXNzXT1cIlsnY2hpcC1ncmlkJywgc2l6ZV1cIlxuICAgIFtuZ1N0eWxlXT1cInttaW5IZWlnaHQ6IG1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHR9XCJcbiAgICBbY2RrTWVudVRyaWdnZXJGb3JdPVwic2VsZWN0TWVudVwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lci1jaGlwLWdyaWRcIiAqbmdJZj1cInZhbHVlICYmIHZhbHVlLmxlbmd0aD4wXCI+XG4gICAgICA8ZnctY2hpcFxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBzZWxlY3RlZE9wdGlvbnMgfCBzbGljZTowOm1heFNlbGVjdGVkU2hvd25cIlxuICAgICAgICBbdGl0bGVdPVwiY2hpcFt0aXRsZVByb3BlcnR5XVwiXG4gICAgICAgIFt2YWx1ZV09XCJjaGlwW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgW2ljb25dPVwiY2hpcFtpY29uUHJvcGVydHldXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3Nob3dDbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKGNoaXApXCJcbiAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIj5cbiAgICAgIDwvZnctY2hpcD5cbiAgICAgIDxzcGFuICpuZ0lmPVwidmFsdWUubGVuZ3RoPm1heFNlbGVjdGVkU2hvd25cIiBjbGFzcz1cIm1heC1leGNlZWRlZFwiPit7eyB2YWx1ZS5sZW5ndGggLSBtYXhTZWxlY3RlZFNob3duIH19XG4gICAgICAgIG1vcmU8L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIiAjdGV4dElucHV0XG4gICAgICAgIGNsYXNzPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJGV2ZW50KVwiPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIiAjdGV4dEluaXRpYWxJbnB1dFxuICAgICAgKm5nSWY9XCIhdmFsdWUgfHwgdmFsdWUubGVuZ3RoPT09MFwiXG4gICAgICBjbGFzcz1cInBsYWNlaG9sZGVyXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIChmb2N1cyk9XCJoYW5kbGVUb3VjaGVkKClcIlxuICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3NlbGVjdE1lbnU+XG4gICAgPGZ3LW1lbnUtY29udGFpbmVyXG4gICAgICBbd2lkdGhdPVwib3B0aW9uc1dpZHRoIHx8IHdpZHRoXCIgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCIgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0XCJcbiAgICAgICpuZ0lmPVwiZW1wdHlUZXh0Lmxlbmd0aCA+IDAgfHwgKGZpbHRlcmVkT3B0aW9ucyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxmdy1tZW51XG4gICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IChmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTApXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW1zICYmIG1lbnVJdGVtcy5sZW5ndGg9PT0wXCI+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zOyBpbmRleCBhcyAkaW5kZXhcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1bdGl0bGVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1bdmFsdWVQcm9wZXJ0eV1cIlxuICAgICAgICAgICAgW2ljb25dPVwiaXRlbVtpY29uUHJvcGVydHldXCJcbiAgICAgICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaG93Q2hlY2tib3hdPVwidXNlQ2hlY2tib3hcIlxuICAgICAgICAgICAgW2ZvY3VzZWRdPVwiZm9jdXNlZD09PSRpbmRleFwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cImZvY3VzZWQ9JGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9mdy1tZW51LWl0ZW0+XG4gICAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTAgJiYgZW1wdHlUZXh0XCIgW3Nob3dDaGVja2JveF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiIFt0aXRsZV09XCJlbXB0eVRleHRcIj5cbiAgICAgICAgICA8L2Z3LW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmdy1tZW51LWl0ZW0sIGZ3LW1lbnUtc2VwYXJhdG9yXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZnctbWVudT5cbiAgICA8L2Z3LW1lbnUtY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUvbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7OztBQWMvRSxNQUFNLE9BQU8sMEJBQTBCO0lBd0RyQyxZQUFzQixrQkFBcUM7UUFBckMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTdDbEQsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxrQkFBYSxHQUFZLE9BQU8sQ0FBQztRQUNqQyxpQkFBWSxHQUFZLE1BQU0sQ0FBQztRQUMvQixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBQzNCLGdCQUFXLEdBQWEsS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQWEsSUFBSSxDQUFDO1FBQy9CLHdCQUFtQixHQUFhLElB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Q0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNxQixPQUFPO3NCQUFqQyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csSUFBSTtzQkFBL0IsU0FBUzt1QkFBQyxlQUFlO2dCQUNTLGlCQUFpQjtzQkFBbkQsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBQzRCLGVBQWU7c0JBQTNFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUtuQyxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFbkIsTUFBTTtzQkFBZixNQUFNO2dCQU1ILEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDZGtNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9tZW51JztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEZ3TWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51L21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnctbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktc2VsZWN0LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGd011bHRpU2VsZWN0TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJykgb3V0c2lkZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaWdnZXIgJiYgdGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLl9pc09wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIG9wdGlvbnM6IG9iamVjdFtdID0gW107XG4gIEBJbnB1dCgpIHZhbHVlUHJvcGVydHk/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBASW5wdXQoKSB0aXRsZVByb3BlcnR5Pzogc3RyaW5nID0gJ3RpdGxlJztcbiAgQElucHV0KCkgaWNvblByb3BlcnR5Pzogc3RyaW5nID0gJ2ljb24nO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ2hlY2tib3g/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZmlsdGVySXRlbXNPblNlbGVjdD86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBtYXhTZWxlY3RlZFNob3duOiBudW1iZXIgPSAxMDA7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMjAwcHgnO1xuICBASW5wdXQoKSBtaW5IZWlnaHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIG9wdGlvbnNXaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgbWluT3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgbWF4T3B0aW9uc0hlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgPSAnbWVkaXVtJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3Qgc29tZXRoaW5nLi4uJztcbiAgQElucHV0KCkgZW1wdHlUZXh0OiBzdHJpbmcgPSAnTm8gbWF0Y2hlcyBmb3VuZC4uLic7XG4gIEBWaWV3Q2hpbGQoQ2RrTWVudVRyaWdnZXIpIHRyaWdnZXI6IENka01lbnVUcmlnZ2VyO1xuICBAVmlld0NoaWxkKEZ3TWVudUNvbXBvbmVudCkgbWVudTogRndNZW51Q29tcG9uZW50O1xuICBAVmlld0NoaWxkcmVuKEZ3TWVudUl0ZW1Db21wb25lbnQpIHJlbmRlcmVkTWVudUl0ZW1zOiBRdWVyeUxpc3Q8RndNZW51SXRlbUNvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oRndNZW51SXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBjdXN0b21NZW51SXRlbXM6IFF1ZXJ5TGlzdDxGd01lbnVJdGVtQ29tcG9uZW50PjtcbiAgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkT3B0aW9uczogb2JqZWN0W10gPSBbXTtcbiAgZmlsdGVyZWRPcHRpb25zOiBvYmplY3RbXSA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3RleHRJbnB1dCcpIHRleHRJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndGV4dEluaXRpYWxJbnB1dCcpIHRleHRJbml0aWFsSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGZvY3VzZWQgPSAwO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy51cGRhdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF92YWx1ZTogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cblxuICBvbkNoYW5nZTogKHZhbHVlOiBhbnlbXSkgPT4gdm9pZDtcbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2lzdGVyQ3VzdG9tTWVudUl0ZW1zKClcblxuICAgIHRoaXMuY3VzdG9tTWVudUl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJDdXN0b21NZW51SXRlbXMoKTtcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXJDdXN0b21NZW51SXRlbXMoKTogdm9pZCB7XG4gICAgLy8gZmlyc3QgZmlsdGVyIGFueSBtZW51SXRlbXMgd2UndmUgYWxyZWFkeSByZWdpc3RlcmVkIGFzIG9wdGlvbnNcbiAgICBjb25zdCBuZXdNZW51SXRlbXMgPSB0aGlzLmN1c3RvbU1lbnVJdGVtcy5maWx0ZXIoXG4gICAgICBtZW51SXRlbSA9PiAhdGhpcy5vcHRpb25zLmZpbmQob3B0aW9uID0+IG1lbnVJdGVtLnZhbHVlID09PSAob3B0aW9uIGFzIGFueSkudmFsdWUpLFxuICAgIClcblxuICAgIG5ld01lbnVJdGVtcy5mb3JFYWNoKChuZXdNZW51SXRlbSkgPT4ge1xuXG4gICAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICAgIHZhbHVlOiBuZXdNZW51SXRlbS52YWx1ZSxcbiAgICAgICAgdGl0bGU6IG5ld01lbnVJdGVtLnRpdGxlLFxuICAgICAgICBpY29uOiBuZXdNZW51SXRlbS5pY29uLFxuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuXG4gICAgICBjb25zdCBzdWIgPSBuZXdNZW51SXRlbS5jbGljay5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKFt2YWx1ZV0sIHRydWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xuICAgIH0pXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gIH1cblxuICBoYW5kbGVUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVDbG9zZShjaGlwOiBvYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSB0aGlzLnZhbHVlLmZpbHRlcih2YWwgPT4gdmFsICE9PSBjaGlwW3RoaXMudmFsdWVQcm9wZXJ0eV0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWVzKTtcbiAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBpZiAoZS50b1N0cmluZygpICE9PSB0aGlzLnNlbGVjdGVkVmFsdWVzLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmVkSXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVySXRlbXNPblNlbGVjdCAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGkgPT4gIXRoaXMudmFsdWUuaW5jbHVkZXMoaVt0aGlzLnZhbHVlUHJvcGVydHldKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VzdG9tTWVudUl0ZW1zICYmIHRoaXMuZmlsdGVySXRlbXNPblNlbGVjdCkge1xuXG4gICAgICB0aGlzLmN1c3RvbU1lbnVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyhpdGVtLnZhbHVlKSkge1xuICAgICAgICAgIGl0ZW0uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gdGhpcyBuZWVkcyB0byBiZSBkZWxheWVkIHRvIGdpdmUgdGltZSBmb3IgZWxlbWVudCBzd2FwIHRvIGhhcHBlblxuICAgICAgICAgIGlmICh0aGlzLnRleHRJbml0aWFsSW5wdXQgJiYgdGhpcy50ZXh0SW5pdGlhbElucHV0Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5pdGlhbElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzIG5lZWRzIHRvIGJlIGRlbGF5ZWQgdG8gZ2l2ZSB0aW1lIGZvciBlbGVtZW50IHN3YXAgdG8gaGFwcGVuXG4gICAgICAgICAgaWYgKHRoaXMudGV4dElucHV0ICYmIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy50b3VjaGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHJ4LWFuZ3VsYXIvcHJlZmVyLW5vLWxheW91dC1zZW5zaXRpdmUtYXBpc1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVWYWx1ZShpbmNvbWluZ1ZhbHVlczogYW55W10sIGFkZGl0aXZlID0gZmFsc2UpOiB2b2lkIHtcblxuICAgIGlmICghaW5jb21pbmdWYWx1ZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFkZGl0aXZlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIGluY29taW5nVmFsdWVzLmZvckVhY2goaW5jb21pbmcgPT4ge1xuXG4gICAgICBpZiAodHlwZW9mIGluY29taW5nID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2goaW5jb21pbmdbdGhpcy52YWx1ZVByb3BlcnR5XSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaW5jb21pbmcpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaChpbmNvbWluZyk7XG5cbiAgICAgICAgY29uc3QgaW5jb21pbmdNYXBwZWRUb09wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKG9wdCA9PiBvcHRbdGhpcy52YWx1ZVByb3BlcnR5XSA9PT0gaW5jb21pbmcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKGluY29taW5nTWFwcGVkVG9PcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRJdGVtcygpO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgaWYgKHRoaXMudGV4dElucHV0ICYmIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMudGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBtb3ZlRm9jdXNlZChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdkb3duJzoge1xuICAgICAgICB0aGlzLmZvY3VzZWQrKztcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCA+PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndXAnOiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZC0tO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkIDwgMCkge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmlnZ2VyLmlzT3BlbigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICB0aGlzLm1vdmVGb2N1c2VkKCdkb3duJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIHRoaXMubW92ZUZvY3VzZWQoJ3VwJyk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyLmNsb3NlKCk7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICBldmVudC50YXJnZXRbJ3ZhbHVlJ10gPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldFsndmFsdWUnXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5pbmNsdWRlcyh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmZvY3VzZWRdKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5mb2N1c2VkXVt0aGlzLnZhbHVlUHJvcGVydHldXTtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0Wyd2YWx1ZSddID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIub3BlbigpO1xuICAgICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwICYmIGV2ZW50LnRhcmdldFsndmFsdWUnXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZSh0aGlzLnZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVGaWx0ZXJDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMudHJpZ2dlci5pc09wZW4oKSkge1xuICAgICAgdGhpcy50cmlnZ2VyLm9wZW4oKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGV2ZW50LnRhcmdldFsndmFsdWUnXTtcblxuICAgIC8vIGVtcHR5IGZpbHRlciBndWFyZFxuICAgIGlmICghbmV3RmlsdGVyVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZEl0ZW1zKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaGlkZSBjdXN0b20gaXRlbXNcbiAgICBpZiAodGhpcy5jdXN0b21NZW51SXRlbXMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ3VzdG9tSXRlbXMgPSB0aGlzLmN1c3RvbU1lbnVJdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5ld0ZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGZpbHRlcmVkQ3VzdG9tSXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaGlkZGVuID0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyIGlmIHdlJ3JlIHVzaW5nIG9wdGlvbnNcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb25bdGhpcy50aXRsZVByb3BlcnR5XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRhcmdldFsndmFsdWUnXS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubW92ZUZvY3VzZWQoJ3plcm8nKTtcbiAgfVxufVxuIiwiPGRpdiBbbmdTdHlsZV09XCJ7d2lkdGg6IHdpZHRofVwiICN3cmFwcGVyPlxuICA8ZGl2XG4gICAgZndNZW51UmVnaXN0ZXJcbiAgICBbbmdDbGFzc109XCJbJ2NoaXAtZ3JpZCcsIHNpemVdXCJcbiAgICBbbmdTdHlsZV09XCJ7bWluSGVpZ2h0OiBtaW5IZWlnaHQsIG1heEhlaWdodDogbWF4SGVpZ2h0fVwiXG4gICAgW2Nka01lbnVUcmlnZ2VyRm9yXT1cInNlbGVjdE1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXItY2hpcC1ncmlkXCIgKm5nSWY9XCJ2YWx1ZSAmJiB2YWx1ZS5sZW5ndGg+MFwiPlxuICAgICAgPGZ3LWNoaXBcbiAgICAgICAgKm5nRm9yPVwibGV0IGNoaXAgb2Ygc2VsZWN0ZWRPcHRpb25zIHwgc2xpY2U6MDptYXhTZWxlY3RlZFNob3duXCJcbiAgICAgICAgW3RpdGxlXT1cImNoaXBbdGl0bGVQcm9wZXJ0eV1cIlxuICAgICAgICBbdmFsdWVdPVwiY2hpcFt2YWx1ZVByb3BlcnR5XVwiXG4gICAgICAgIFtpY29uXT1cImNoaXBbaWNvblByb3BlcnR5XVwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtzaG93Q2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgIChjbG9zZSk9XCJoYW5kbGVDbG9zZShjaGlwKVwiXG4gICAgICAgIFtzZWxlY3RhYmxlXT1cImZhbHNlXCI+XG4gICAgICA8L2Z3LWNoaXA+XG4gICAgICA8c3BhbiAqbmdJZj1cInZhbHVlLmxlbmd0aD5tYXhTZWxlY3RlZFNob3duXCIgY2xhc3M9XCJtYXgtZXhjZWVkZWRcIj4re3sgdmFsdWUubGVuZ3RoIC0gbWF4U2VsZWN0ZWRTaG93biB9fVxuICAgICAgICBtb3JlPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCIgI3RleHRJbnB1dFxuICAgICAgICBjbGFzcz1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGlucHV0KT1cImhhbmRsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwidGV4dFwiICN0ZXh0SW5pdGlhbElucHV0XG4gICAgICAqbmdJZj1cIiF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGg9PT0wXCJcbiAgICAgIGNsYXNzPVwicGxhY2Vob2xkZXJcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgKGZvY3VzKT1cImhhbmRsZVRvdWNoZWQoKVwiXG4gICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIiAoaW5wdXQpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIj5cbiAgICA8ZnctaWNvbj5jaGV2cm9uLWRvd248L2Z3LWljb24+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3NlbGVjdE1lbnU+XG4gICAgPGZ3LW1lbnUtY29udGFpbmVyXG4gICAgICBbd2lkdGhdPVwib3B0aW9uc1dpZHRoIHx8IHdyYXBwZXIub2Zmc2V0V2lkdGggKyAncHgnXCIgW21heEhlaWdodF09XCJtYXhPcHRpb25zSGVpZ2h0XCIgW21pbkhlaWdodF09XCJtaW5PcHRpb25zSGVpZ2h0XCJcbiAgICAgICpuZ0lmPVwiZW1wdHlUZXh0Lmxlbmd0aCA+IDAgfHwgKGZpbHRlcmVkT3B0aW9ucyAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMClcIj5cbiAgICAgIDxmdy1tZW51XG4gICAgICAgIFttdWx0aVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IChmaWx0ZXJlZE9wdGlvbnMgJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aD09PTApXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVzXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tTWVudUl0ZW1zLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxmdy1tZW51LWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkT3B0aW9uczsgaW5kZXggYXMgJGluZGV4XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtW3RpdGxlUHJvcGVydHldXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtW3ZhbHVlUHJvcGVydHldXCJcbiAgICAgICAgICAgIFtpY29uXT1cIml0ZW1baWNvblByb3BlcnR5XVwiXG4gICAgICAgICAgICBbbXVsdGlTZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2hvd0NoZWNrYm94XT1cInVzZUNoZWNrYm94XCJcbiAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWQ9PT0kaW5kZXhcIlxuICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJmb2N1c2VkPSRpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvZnctbWVudS1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGZ3LW1lbnUtaXRlbVxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBlbXB0eVRleHRcIiBbc2hvd0NoZWNrYm94XT1cImZhbHNlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiIFt0aXRsZV09XCJlbXB0eVRleHRcIj5cbiAgICAgICAgPC9mdy1tZW51LWl0ZW0+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmdy1tZW51LWl0ZW0sIGZ3LW1lbnUtc2VwYXJhdG9yLCBmdy1tZW51LWl0ZW0tZ3JvdXAsIGZ3LW1lbnUtaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZnctbWVudT5cbiAgICA8L2Z3LW1lbnUtY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -21,7 +21,7 @@ FwTableDenseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
21
21
  { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
22
22
  // Prevent nested tables from seeing this table's StickyPositioningListener.
23
23
  { provide: STICKY_POSITIONING_LISTENER, useValue: null },
24
- ], exportAs: ["fwTableDense"], usesInheritance: true, ngImport: i0, template: "<ng-container headerRowOutlet></ng-container>\n<ng-container rowOutlet></ng-container>\n<ng-container noDataRowOutlet></ng-container>\n<ng-container footerRowOutlet></ng-container>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\";.vision-h1{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:22px}.vision-h2{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:18px}.vision-h3{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:16px}.vision-h4,.fw-table-dense .fw-footer-row .fw-footer-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:14px}.vision-h5,.fw-table-dense .fw-header-row .fw-header-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:12px;line-height:130%}.vision-p1{font-size:18px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p2{font-size:14px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p3,.fw-table-dense .fw-row .fw-cell{font-size:12px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p4{font-size:10px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-link{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link:hover{text-decoration:none}.vision-link:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link:visited{color:var(--secondary-base)}.vision-link-inherited{text-decoration:underline;color:var(--primary-base);cursor:pointer;color:inherit}.vision-link-inherited:hover{text-decoration:none}.vision-link-inherited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-inherited:visited{color:var(--secondary-base)}.vision-link-inherited:visited{color:inherit}.vision-link-no-visited{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link-no-visited:hover{text-decoration:none}.vision-link-no-visited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-no-visited:visited{color:var(--secondary-base)}.vision-link-no-visited:visited{color:var(--primary-base)}.fw-table-dense{background-color:var(--card-background);max-height:100%;width:100%;overflow:auto;border-collapse:separate;border-spacing:0;display:block;position:relative}.fw-table-dense .fw-cell-div{display:flex;align-items:center;gap:8px}.fw-table-dense .fw-cell-div fw-avatar{margin:-10px 0}.fw-table-dense .fw-cell-div fw-checkbox{margin:-10px 0}.fw-table-dense .fw-header-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-header-row .fw-header-cell{display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;border-bottom:1px solid var(--separations-base);height:36px;overflow:hidden}.fw-table-dense .fw-header-row .fw-header-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-header-row.fw-table-sticky{position:sticky;top:0;background:inherit;z-index:100}.fw-table-dense .fw-footer-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-footer-row .fw-footer-cell{border-top:1px solid var(--separations-base);display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;height:32px;margin-top:-1px;overflow:hidden}.fw-table-dense .fw-footer-row .fw-footer-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-footer-row.fw-table-sticky{position:sticky;bottom:0;background:inherit;z-index:100}.fw-table-dense .fw-row{min-width:100%;display:flex;align-items:center;color:var(--typography-muted)}.fw-table-dense .fw-row:hover{background-color:var(--slate-hover)}.fw-table-dense .fw-row.selected{background-color:var(--primary-hover)}.fw-table-dense .fw-row .fw-cell{display:flex;align-items:center;flex:1;color:var(--typography-muted);border-bottom:1px solid var(--separations-base);border-top:1px solid transparent;cursor:pointer;padding:6px 8px 6px 16px;box-sizing:border-box;height:32px;overflow:hidden}.fw-table-dense .fw-row .fw-cell.no-wrap{white-space:nowrap}.fw-table-dense .fw-row .fw-cell.flex-cell{flex:1}.fw-table-dense .fw-row .fw-cell p{align-items:center;color:var(--typography-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fw-table-dense .fw-row .fw-cell .link{color:var(--primary-base);display:block;align-items:center}.fw-table-dense .fw-row .fw-cell fw-avatar{margin-right:8px}table.fw-table-dense{display:table}table.fw-table-dense tr.fw-header-row{display:table-row}table.fw-table-dense tr.fw-header-row th.fw-header-cell{display:table-cell}table.fw-table-dense tr.fw-row{display:table-row}table.fw-table-dense tr.fw-row td.fw-cell{display:table-cell}table.fw-table-dense tr.fw-footer-row{display:table-row}table.fw-table-dense tr.fw-footer-row td.fw-footer-cell{display:table-cell}\n"], dependencies: [{ kind: "directive", type: i1.DataRowOutlet, selector: "[rowOutlet]" }, { kind: "directive", type: i1.HeaderRowOutlet, selector: "[headerRowOutlet]" }, { kind: "directive", type: i1.FooterRowOutlet, selector: "[footerRowOutlet]" }, { kind: "directive", type: i1.NoDataRowOutlet, selector: "[noDataRowOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
24
+ ], exportAs: ["fwTableDense"], usesInheritance: true, ngImport: i0, template: "<ng-container headerRowOutlet></ng-container>\n<ng-container rowOutlet></ng-container>\n<ng-container noDataRowOutlet></ng-container>\n<ng-container footerRowOutlet></ng-container>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\";.vision-h1{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:22px}.vision-h2{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:18px}.vision-h3{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:16px}.vision-h4,.fw-table-dense .fw-footer-row .fw-footer-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:14px}.vision-h5,.fw-table-dense .fw-header-row .fw-header-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:12px;line-height:130%}.vision-p1{font-size:18px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p2{font-size:14px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p3,.fw-table-dense .fw-row .fw-cell{font-size:12px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p4{font-size:10px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-link{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link:hover{text-decoration:none}.vision-link:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link:visited{color:var(--secondary-base)}.vision-link-inherited{text-decoration:underline;color:var(--primary-base);cursor:pointer;color:inherit}.vision-link-inherited:hover{text-decoration:none}.vision-link-inherited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-inherited:visited{color:var(--secondary-base)}.vision-link-inherited:visited{color:inherit}.vision-link-no-visited{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link-no-visited:hover{text-decoration:none}.vision-link-no-visited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-no-visited:visited{color:var(--secondary-base)}.vision-link-no-visited:visited{color:var(--primary-base)}.fw-table-dense{background-color:var(--card-background);max-height:100%;width:100%;overflow:auto;border-collapse:separate;border-spacing:0;display:block;position:relative}.fw-table-dense .fw-cell-div{display:flex;align-items:center;gap:8px}.fw-table-dense .fw-cell-div fw-avatar{margin:-10px 0}.fw-table-dense .fw-cell-div fw-checkbox{margin:-10px 0}.fw-table-dense .fw-header-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-header-row .fw-header-cell{display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;border-bottom:1px solid var(--separations-base);height:36px;overflow:hidden}.fw-table-dense .fw-header-row .fw-header-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-header-row.fw-table-sticky{position:-webkit-sticky;position:sticky;top:0;background:inherit;z-index:100}.fw-table-dense .fw-footer-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-footer-row .fw-footer-cell{border-top:1px solid var(--separations-base);display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;height:32px;margin-top:-1px;overflow:hidden}.fw-table-dense .fw-footer-row .fw-footer-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-footer-row.fw-table-sticky{position:-webkit-sticky;position:sticky;bottom:0;background:inherit;z-index:100}.fw-table-dense .fw-row{min-width:100%;display:flex;align-items:center;color:var(--typography-muted)}.fw-table-dense .fw-row:hover{background-color:var(--slate-hover)}.fw-table-dense .fw-row.selected{background-color:var(--primary-hover)}.fw-table-dense .fw-row .fw-cell{display:flex;align-items:center;flex:1;color:var(--typography-muted);border-bottom:1px solid var(--separations-base);border-top:1px solid transparent;cursor:pointer;padding:6px 8px 6px 16px;box-sizing:border-box;height:32px;overflow:hidden}.fw-table-dense .fw-row .fw-cell.no-wrap{white-space:nowrap}.fw-table-dense .fw-row .fw-cell.flex-cell{flex:1}.fw-table-dense .fw-row .fw-cell p{align-items:center;color:var(--typography-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fw-table-dense .fw-row .fw-cell .link{color:var(--primary-base);display:block;align-items:center}.fw-table-dense .fw-row .fw-cell fw-avatar{margin-right:8px}table.fw-table-dense{display:table}table.fw-table-dense tr.fw-header-row{display:table-row}table.fw-table-dense tr.fw-header-row th.fw-header-cell{display:table-cell}table.fw-table-dense tr.fw-row{display:table-row}table.fw-table-dense tr.fw-row td.fw-cell{display:table-cell}table.fw-table-dense tr.fw-footer-row{display:table-row}table.fw-table-dense tr.fw-footer-row td.fw-footer-cell{display:table-cell}\n"], dependencies: [{ kind: "directive", type: i1.DataRowOutlet, selector: "[rowOutlet]" }, { kind: "directive", type: i1.HeaderRowOutlet, selector: "[headerRowOutlet]" }, { kind: "directive", type: i1.FooterRowOutlet, selector: "[footerRowOutlet]" }, { kind: "directive", type: i1.NoDataRowOutlet, selector: "[noDataRowOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FwTableDenseComponent, decorators: [{
26
26
  type: Component,
27
27
  args: [{ selector: 'fw-table-dense, table[fw-table-dense]', exportAs: 'fwTableDense', providers: [
@@ -31,7 +31,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
31
31
  { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
32
32
  // Prevent nested tables from seeing this table's StickyPositioningListener.
33
33
  { provide: STICKY_POSITIONING_LISTENER, useValue: null },
34
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<ng-container headerRowOutlet></ng-container>\n<ng-container rowOutlet></ng-container>\n<ng-container noDataRowOutlet></ng-container>\n<ng-container footerRowOutlet></ng-container>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\";.vision-h1{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:22px}.vision-h2{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:18px}.vision-h3{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:16px}.vision-h4,.fw-table-dense .fw-footer-row .fw-footer-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:14px}.vision-h5,.fw-table-dense .fw-header-row .fw-header-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:12px;line-height:130%}.vision-p1{font-size:18px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p2{font-size:14px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p3,.fw-table-dense .fw-row .fw-cell{font-size:12px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p4{font-size:10px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-link{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link:hover{text-decoration:none}.vision-link:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link:visited{color:var(--secondary-base)}.vision-link-inherited{text-decoration:underline;color:var(--primary-base);cursor:pointer;color:inherit}.vision-link-inherited:hover{text-decoration:none}.vision-link-inherited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-inherited:visited{color:var(--secondary-base)}.vision-link-inherited:visited{color:inherit}.vision-link-no-visited{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link-no-visited:hover{text-decoration:none}.vision-link-no-visited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-no-visited:visited{color:var(--secondary-base)}.vision-link-no-visited:visited{color:var(--primary-base)}.fw-table-dense{background-color:var(--card-background);max-height:100%;width:100%;overflow:auto;border-collapse:separate;border-spacing:0;display:block;position:relative}.fw-table-dense .fw-cell-div{display:flex;align-items:center;gap:8px}.fw-table-dense .fw-cell-div fw-avatar{margin:-10px 0}.fw-table-dense .fw-cell-div fw-checkbox{margin:-10px 0}.fw-table-dense .fw-header-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-header-row .fw-header-cell{display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;border-bottom:1px solid var(--separations-base);height:36px;overflow:hidden}.fw-table-dense .fw-header-row .fw-header-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-header-row.fw-table-sticky{position:sticky;top:0;background:inherit;z-index:100}.fw-table-dense .fw-footer-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-footer-row .fw-footer-cell{border-top:1px solid var(--separations-base);display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;height:32px;margin-top:-1px;overflow:hidden}.fw-table-dense .fw-footer-row .fw-footer-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-footer-row.fw-table-sticky{position:sticky;bottom:0;background:inherit;z-index:100}.fw-table-dense .fw-row{min-width:100%;display:flex;align-items:center;color:var(--typography-muted)}.fw-table-dense .fw-row:hover{background-color:var(--slate-hover)}.fw-table-dense .fw-row.selected{background-color:var(--primary-hover)}.fw-table-dense .fw-row .fw-cell{display:flex;align-items:center;flex:1;color:var(--typography-muted);border-bottom:1px solid var(--separations-base);border-top:1px solid transparent;cursor:pointer;padding:6px 8px 6px 16px;box-sizing:border-box;height:32px;overflow:hidden}.fw-table-dense .fw-row .fw-cell.no-wrap{white-space:nowrap}.fw-table-dense .fw-row .fw-cell.flex-cell{flex:1}.fw-table-dense .fw-row .fw-cell p{align-items:center;color:var(--typography-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fw-table-dense .fw-row .fw-cell .link{color:var(--primary-base);display:block;align-items:center}.fw-table-dense .fw-row .fw-cell fw-avatar{margin-right:8px}table.fw-table-dense{display:table}table.fw-table-dense tr.fw-header-row{display:table-row}table.fw-table-dense tr.fw-header-row th.fw-header-cell{display:table-cell}table.fw-table-dense tr.fw-row{display:table-row}table.fw-table-dense tr.fw-row td.fw-cell{display:table-cell}table.fw-table-dense tr.fw-footer-row{display:table-row}table.fw-table-dense tr.fw-footer-row td.fw-footer-cell{display:table-cell}\n"] }]
34
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<ng-container headerRowOutlet></ng-container>\n<ng-container rowOutlet></ng-container>\n<ng-container noDataRowOutlet></ng-container>\n<ng-container footerRowOutlet></ng-container>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\";.vision-h1{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:22px}.vision-h2{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:18px}.vision-h3{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:16px}.vision-h4,.fw-table-dense .fw-footer-row .fw-footer-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:14px}.vision-h5,.fw-table-dense .fw-header-row .fw-header-cell{font-family:Inter,sans-serif;color:var(--typography-base);font-weight:500;font-size:12px;line-height:130%}.vision-p1{font-size:18px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p2{font-size:14px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p3,.fw-table-dense .fw-row .fw-cell{font-size:12px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-p4{font-size:10px;font-family:Inter,sans-serif;color:var(--typography-base);font-weight:400}.vision-link{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link:hover{text-decoration:none}.vision-link:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link:visited{color:var(--secondary-base)}.vision-link-inherited{text-decoration:underline;color:var(--primary-base);cursor:pointer;color:inherit}.vision-link-inherited:hover{text-decoration:none}.vision-link-inherited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-inherited:visited{color:var(--secondary-base)}.vision-link-inherited:visited{color:inherit}.vision-link-no-visited{text-decoration:underline;color:var(--primary-base);cursor:pointer}.vision-link-no-visited:hover{text-decoration:none}.vision-link-no-visited:active{text-decoration:none;outline:2px solid var(--primary-dark);border-radius:4px}.vision-link-no-visited:visited{color:var(--secondary-base)}.vision-link-no-visited:visited{color:var(--primary-base)}.fw-table-dense{background-color:var(--card-background);max-height:100%;width:100%;overflow:auto;border-collapse:separate;border-spacing:0;display:block;position:relative}.fw-table-dense .fw-cell-div{display:flex;align-items:center;gap:8px}.fw-table-dense .fw-cell-div fw-avatar{margin:-10px 0}.fw-table-dense .fw-cell-div fw-checkbox{margin:-10px 0}.fw-table-dense .fw-header-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-header-row .fw-header-cell{display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;border-bottom:1px solid var(--separations-base);height:36px;overflow:hidden}.fw-table-dense .fw-header-row .fw-header-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-header-row.fw-table-sticky{position:-webkit-sticky;position:sticky;top:0;background:inherit;z-index:100}.fw-table-dense .fw-footer-row{min-width:100%;display:flex;align-items:center}.fw-table-dense .fw-footer-row .fw-footer-cell{border-top:1px solid var(--separations-base);display:flex;align-items:center;flex:1;box-sizing:border-box;padding:6px 8px 6px 16px;text-align:left;height:32px;margin-top:-1px;overflow:hidden}.fw-table-dense .fw-footer-row .fw-footer-cell fw-icon{font-size:16px;color:var(--typography-light)}.fw-table-dense .fw-footer-row.fw-table-sticky{position:-webkit-sticky;position:sticky;bottom:0;background:inherit;z-index:100}.fw-table-dense .fw-row{min-width:100%;display:flex;align-items:center;color:var(--typography-muted)}.fw-table-dense .fw-row:hover{background-color:var(--slate-hover)}.fw-table-dense .fw-row.selected{background-color:var(--primary-hover)}.fw-table-dense .fw-row .fw-cell{display:flex;align-items:center;flex:1;color:var(--typography-muted);border-bottom:1px solid var(--separations-base);border-top:1px solid transparent;cursor:pointer;padding:6px 8px 6px 16px;box-sizing:border-box;height:32px;overflow:hidden}.fw-table-dense .fw-row .fw-cell.no-wrap{white-space:nowrap}.fw-table-dense .fw-row .fw-cell.flex-cell{flex:1}.fw-table-dense .fw-row .fw-cell p{align-items:center;color:var(--typography-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.fw-table-dense .fw-row .fw-cell .link{color:var(--primary-base);display:block;align-items:center}.fw-table-dense .fw-row .fw-cell fw-avatar{margin-right:8px}table.fw-table-dense{display:table}table.fw-table-dense tr.fw-header-row{display:table-row}table.fw-table-dense tr.fw-header-row th.fw-header-cell{display:table-cell}table.fw-table-dense tr.fw-row{display:table-row}table.fw-table-dense tr.fw-row td.fw-cell{display:table-cell}table.fw-table-dense tr.fw-footer-row{display:table-row}table.fw-table-dense tr.fw-footer-row td.fw-footer-cell{display:table-cell}\n"] }]
35
35
  }], propDecorators: { class: [{
36
36
  type: HostBinding
37
37
  }] } });