@sarasanalytics-com/design-system 0.0.136 → 0.0.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/esm2022/interfaces/button-interface.mjs +1 -1
  2. package/esm2022/interfaces/chip-interface.mjs +1 -1
  3. package/esm2022/interfaces/form-layout.interface.mjs +2 -0
  4. package/esm2022/interfaces/grid-interface.mjs +1 -1
  5. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  6. package/esm2022/lib/categories-nav/categories-nav.component.mjs +27 -0
  7. package/esm2022/lib/chips/chips.component.mjs +3 -3
  8. package/esm2022/lib/data-grid/data-grid.component.mjs +135 -0
  9. package/esm2022/lib/dialog/dialog.component.mjs +43 -3
  10. package/esm2022/lib/filter/filter.component.mjs +232 -0
  11. package/esm2022/lib/form-input/form-input.component.mjs +71 -7
  12. package/esm2022/lib/form-select/form-select.component.mjs +187 -5
  13. package/esm2022/lib/grid-cell/grid-cell.component.mjs +173 -25
  14. package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
  15. package/esm2022/lib/menu/menu.component.mjs +3 -3
  16. package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +256 -7
  17. package/esm2022/lib/query-builder/query-builder-demo.component.mjs +134 -0
  18. package/esm2022/lib/query-builder/query-builder.component.mjs +275 -0
  19. package/esm2022/lib/query-builder/query-builder.service.mjs +107 -0
  20. package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +130 -0
  21. package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +805 -0
  22. package/esm2022/lib/tool-tip/tool-tip.component.mjs +8 -3
  23. package/esm2022/public-api.mjs +10 -1
  24. package/fesm2022/sarasanalytics-com-design-system.mjs +3042 -587
  25. package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
  26. package/interfaces/button-interface.d.ts +1 -0
  27. package/interfaces/form-layout.interface.d.ts +59 -0
  28. package/interfaces/grid-interface.d.ts +11 -4
  29. package/lib/categories-nav/categories-nav.component.d.ts +15 -0
  30. package/lib/data-grid/data-grid.component.d.ts +33 -0
  31. package/lib/dialog/dialog.component.d.ts +13 -0
  32. package/lib/filter/filter.component.d.ts +83 -0
  33. package/lib/form-input/form-input.component.d.ts +11 -1
  34. package/lib/form-select/form-select.component.d.ts +8 -0
  35. package/lib/grid-cell/grid-cell.component.d.ts +51 -10
  36. package/lib/message-banner-v2/message-banner-v2.component.d.ts +34 -2
  37. package/lib/query-builder/query-builder-demo.component.d.ts +14 -0
  38. package/lib/query-builder/query-builder.component.d.ts +90 -0
  39. package/lib/query-builder/query-builder.service.d.ts +39 -0
  40. package/lib/query-builder-textarea/query-builder-textarea-demo.component.d.ts +9 -0
  41. package/lib/query-builder-textarea/query-builder-textarea.component.d.ts +143 -0
  42. package/lib/tool-tip/tool-tip.component.d.ts +2 -1
  43. package/package.json +1 -1
  44. package/public-api.d.ts +9 -0
@@ -1,25 +1,116 @@
1
- import { Component, EventEmitter } from '@angular/core';
2
- import { Output } from '@angular/core';
3
- import { AvatarComponent } from '../avatar/avatar.component';
1
+ import { Component, Output, EventEmitter, ViewChild, HostListener } from '@angular/core';
4
2
  import { ChipsComponent } from '../chips/chips.component';
5
3
  import { ButtonComponent } from '../button/button.component';
6
- import { NgFor } from '@angular/common';
4
+ import { AvatarComponent } from '../avatar/avatar.component';
5
+ import { ToolTipComponent } from '../tool-tip/tool-tip.component';
6
+ import { CommonModule, NgFor, NgIf } from '@angular/common';
7
+ import { TemplatePortal } from '@angular/cdk/portal';
7
8
  import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/cdk/overlay";
8
10
  export class GridCellComponent {
9
- constructor() {
11
+ constructor(cdr, overlay, viewContainerRef) {
12
+ this.cdr = cdr;
13
+ this.overlay = overlay;
14
+ this.viewContainerRef = viewContainerRef;
15
+ this.showDropdown = false;
16
+ this.MAX_VISIBLE_CHIPS = 1;
17
+ this.displayedChips = [];
18
+ this.remainingChipsCount = 0;
19
+ this.rowNum = 0;
10
20
  this.onClickButtonEvent = new EventEmitter();
11
21
  this.onClickChipEvent = new EventEmitter();
12
22
  this.onClickLinkEvent = new EventEmitter();
13
23
  this.onClickAvatarEvent = new EventEmitter();
24
+ this.hoveredChip = null;
25
+ this.tooltipComponentRef = null;
26
+ }
27
+ agInit(params) {
28
+ this.rowNum = params.rowIndex;
29
+ // Check for direct field value first, then fallback to _cellParams
30
+ let cellData = params.value;
31
+ if (!cellData && params.data && params.colDef?.field) {
32
+ const cellParamsKey = `${params.colDef.field}_cellParams`;
33
+ cellData = params.data[cellParamsKey];
34
+ }
35
+ this.params = {
36
+ ...params,
37
+ ...(cellData ?? {})
38
+ };
39
+ if (this.params.chipConfig && Array.isArray(this.params.chipConfig)) {
40
+ this.displayedChips = this.params.chipConfig.slice(0, this.MAX_VISIBLE_CHIPS);
41
+ this.remainingChipsCount = Math.max(0, this.params.chipConfig.length - this.MAX_VISIBLE_CHIPS);
42
+ }
43
+ else {
44
+ this.displayedChips = this.params.chipConfig;
45
+ this.remainingChipsCount = 0;
46
+ }
47
+ }
48
+ refresh(params) {
49
+ this.agInit(params);
50
+ return true;
14
51
  }
15
- buttonClicked(evt) {
52
+ typeOf(value) {
53
+ return typeof value;
54
+ }
55
+ buttonClicked(event) {
56
+ if (this.params.buttonConfig?.onClick) {
57
+ this.params.buttonConfig.onClick(event);
58
+ }
16
59
  this.params.buttonClicked && this.params.buttonClicked({
17
- ...evt,
60
+ ...event,
18
61
  rowId: this.rowNum
19
62
  });
20
- this.onClickButtonEvent.emit({ ...evt, rowId: this.rowNum }); // this event isn't caught by anything.
63
+ this.onClickButtonEvent.emit({ ...event, rowId: this.rowNum });
64
+ }
65
+ toggleDropdown(element) {
66
+ if (this.overlayRef) {
67
+ this.overlayRef.dispose();
68
+ return;
69
+ }
70
+ const positionStrategy = this.overlay.position()
71
+ .flexibleConnectedTo(element)
72
+ .withPush(true)
73
+ .withFlexibleDimensions(true)
74
+ .withViewportMargin(8)
75
+ .withPositions([
76
+ {
77
+ originX: 'end',
78
+ originY: 'bottom',
79
+ overlayX: 'end',
80
+ overlayY: 'top',
81
+ offsetY: 4,
82
+ },
83
+ {
84
+ originX: 'start',
85
+ originY: 'bottom',
86
+ overlayX: 'start',
87
+ overlayY: 'top',
88
+ offsetY: 4,
89
+ }
90
+ ]);
91
+ this.overlayRef = this.overlay.create({
92
+ positionStrategy,
93
+ hasBackdrop: true,
94
+ backdropClass: 'cdk-overlay-transparent-backdrop',
95
+ panelClass: 'actions-dropdown-panel',
96
+ scrollStrategy: this.overlay.scrollStrategies.reposition()
97
+ });
98
+ const portal = new TemplatePortal(this.dropdownTemplate, this.viewContainerRef);
99
+ this.overlayRef.attach(portal);
100
+ this.overlayRef.backdropClick().subscribe(() => this.overlayRef.dispose());
101
+ }
102
+ handleActionClick(action, event) {
103
+ event.stopPropagation();
104
+ this.showDropdown = false;
105
+ if (action.onClick) {
106
+ action.onClick();
107
+ }
108
+ }
109
+ onDocumentClick(event) {
110
+ if (this.actionsContainer && !this.actionsContainer.nativeElement.contains(event.target)) {
111
+ this.showDropdown = false;
112
+ }
21
113
  }
22
- // above function behavior is same for all functions in this class
23
114
  chipClicked(evt) {
24
115
  this.params.chipClicked && this.params.chipClicked({
25
116
  ...evt,
@@ -48,31 +139,85 @@ export class GridCellComponent {
48
139
  ...evt,
49
140
  rowId: this.rowNum
50
141
  });
51
- this.onClickChipEvent.emit({ ...evt, rowId: this.rowNum });
142
+ this.onClickAvatarEvent.emit({ ...evt, rowId: this.rowNum });
52
143
  }
53
- agInit(inParams) {
54
- this.rowNum = inParams.rowIndex;
55
- this.params = inParams.value; // inParams.value exists when gridCell is rendered as cell, `cellRenderer: GridCellComponent`
56
- if (inParams.value == undefined) { // inParams.value is undefined when gridCell is rendered as header, `headerComponent: GridCellComponent`,
57
- this.params = inParams;
144
+ showTooltip(config, event) {
145
+ this.hoveredChip = config;
146
+ if (event && event.currentTarget) {
147
+ const chipContainer = event.currentTarget;
148
+ const chipElement = chipContainer.querySelector('sa-chip');
149
+ if (chipElement) {
150
+ const rect = chipElement.getBoundingClientRect();
151
+ const topPosition = rect.bottom + 8;
152
+ const leftPosition = rect.left + rect.width / 2;
153
+ this.createTooltipComponent(topPosition, leftPosition);
154
+ }
58
155
  }
59
- // console.log(this.params);
60
156
  }
61
- refresh(params) {
62
- return false; // not sure what this return value does.
157
+ hideTooltip() {
158
+ this.hoveredChip = null;
159
+ this.destroyTooltipComponent();
160
+ }
161
+ createTooltipComponent(top, left) {
162
+ this.destroyTooltipComponent();
163
+ this.tooltipComponentRef = this.viewContainerRef.createComponent(ToolTipComponent);
164
+ this.tooltipComponentRef.instance.messages = this.getTooltipText();
165
+ this.tooltipComponentRef.instance.simpleMode = true;
166
+ this.tooltipComponentRef.instance.pointerPosition = 'top';
167
+ const tooltipElement = this.tooltipComponentRef.location.nativeElement;
168
+ tooltipElement.style.cssText = `
169
+ position: fixed;
170
+ top: ${top}px;
171
+ left: ${left}px;
172
+ z-index: 99999;
173
+ transform: translateX(-50%);
174
+ pointer-events: none;
175
+ `;
176
+ document.body.appendChild(tooltipElement);
177
+ this.tooltipComponentRef.changeDetectorRef.detectChanges();
178
+ }
179
+ destroyTooltipComponent() {
180
+ if (this.tooltipComponentRef) {
181
+ const tooltipElement = this.tooltipComponentRef.location.nativeElement;
182
+ if (tooltipElement.parentNode) {
183
+ tooltipElement.parentNode.removeChild(tooltipElement);
184
+ }
185
+ this.tooltipComponentRef.destroy();
186
+ this.tooltipComponentRef = null;
187
+ }
188
+ }
189
+ getTooltipText() {
190
+ if (!this.params?.chipConfig)
191
+ return [];
192
+ return this.params.chipConfig.map(chip => chip.text);
193
+ }
194
+ ngOnDestroy() {
195
+ this.hideTooltip();
196
+ if (this.overlayRef) {
197
+ this.overlayRef.dispose();
198
+ }
63
199
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GridCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: GridCellComponent, isStandalone: true, selector: "lib-grid-cell", outputs: { onClickButtonEvent: "onClickButtonEvent", onClickChipEvent: "onClickChipEvent", onClickLinkEvent: "onClickLinkEvent", onClickAvatarEvent: "onClickAvatarEvent" }, ngImport: i0, template: "<div class=\"grid-cell {{params.cellType}}\">\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewLeadingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n <sa-avatar [id]=\"params.avatarConfig?.id\" [altText]=\"params.avatarConfig?.altText\"\r\n [imagePath]=\"params.avatarConfig?.imagePath\" [size]=\"params.avatarConfig?.size\"\r\n [style.display]=\"(params.viewAvatar) ? 'block' : 'none'\" (onClickEvent)=\"avatarClicked($event)\">\r\n </sa-avatar>\r\n\r\n <div class=\"grid-text\" [style.display]=\"(params.viewText) ? 'block' : 'none'\">\r\n <div [style.display]=\"(params.text) ? 'block' : 'none'\" (click)=\"linkClicked()\" class=\"main-text\">{{params.text}}\r\n </div>\r\n\r\n <div [style.display]=\"(params.subText) ? 'block' : 'none'\" class=\"sub-text\">{{params.subText}}</div>\r\n </div>\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewTrailingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n\r\n <sa-chip *ngFor=\"let config of params.chipConfig, let i = index\" [id]=\"config.id\" [filling]=\"config.filling\"\r\n id=\"chip_{{rowNum}}_{{config.id}}\" [iconPath]=\"config.iconPath\" [iconPosition]=\"config.iconPosition\"\r\n [largeStateIcon]=\"config.largeStateIcon\" [state]=\"config.state\" [type]=\"config.type\" [text]=\"config.text\"\r\n [style.display]=\"(params.viewChip) ? 'block' : 'none'\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n\r\n <sa-button [iconPosition]=\"params.buttonConfig?.iconPosition\" [ImagePath]=\"params.buttonConfig?.imagePath\"\r\n [id]=\"params.buttonConfig?.id\" [size]=\"params.buttonConfig?.size\" [state]=\"params.buttonConfig?.state\"\r\n [type]=\"params.buttonConfig?.type\" [text]=\"params.buttonConfig?.text\" [href]=\"params.buttonConfig?.href\"\r\n [hrefTarget]=\"params.buttonConfig?.hrefTarget\" [style.display]=\"(params.viewButton) ? 'block' : 'none'\"\r\n (onClickEvent)=\"buttonClicked($event)\"></sa-button>\r\n\r\n</div>\r\n", styles: [".header{--bg: var(--primary-50);--color: var(--text-highemphasis);--border: none;--flex-direction: left}.header:hover{cursor:pointer}.row{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: left}.numeric{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: right}.interactive{--color: var(--primary-500);--cursor: pointer;--border: var(--grey-50);--flex-direction: left}.grid-cell{display:flex;height:48px;padding:var(--small-12px);justify-content:var(--flex-direction);align-items:center;gap:var(--small-8px);flex-shrink:0;font-family:var(--font);box-sizing:border-box;border-bottom:1px solid var(--border);width:calc(100% - 20px);background-color:var(--bg)}.grid-text{display:flex;flex-direction:column}.main-text{color:var(--color);font-size:14px;font-weight:400;height:20px;line-height:20px}.main-text:hover{cursor:var(--cursor)}.sub-text{font-size:11px;font-weight:400;height:16px;line-height:16px;color:var(--text-mediumemphasis)}.icons{width:var(--medium-20px);height:var(--medium-20px)}\n"], dependencies: [{ kind: "component", type: AvatarComponent, selector: "sa-avatar", inputs: ["id", "imagePath", "altText", "size"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
200
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GridCellComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
201
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: GridCellComponent, isStandalone: true, selector: "sa-grid-cell", outputs: { onClickButtonEvent: "onClickButtonEvent", onClickChipEvent: "onClickChipEvent", onClickLinkEvent: "onClickLinkEvent", onClickAvatarEvent: "onClickAvatarEvent" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true }, { propertyName: "actionsContainer", first: true, predicate: ["actionsContainer"], descendants: true }], ngImport: i0, template: "<div class=\"grid-cell {{params.cellType}}\">\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewLeadingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n <sa-avatar [id]=\"params.avatarConfig?.id\" [altText]=\"params.avatarConfig?.altText\"\r\n [imagePath]=\"params.avatarConfig?.imagePath\" [size]=\"params.avatarConfig?.size\"\r\n [style.display]=\"(params.viewAvatar) ? 'block' : 'none'\" (onClickEvent)=\"avatarClicked($event)\">\r\n </sa-avatar>\r\n\r\n <div class=\"grid-text\" [style.display]=\"(params.viewText) ? 'block' : 'none'\">\r\n <div [style.display]=\"(params.text) ? 'block' : 'none'\" (click)=\"linkClicked()\" class=\"main-text\">{{params.text}}\r\n </div>\r\n\r\n <div [style.display]=\"(params.subText) ? 'block' : 'none'\" class=\"sub-text\">{{params.subText}}</div>\r\n </div>\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewTrailingIcon) ? 'block' : 'none'\" alt=\"\">\r\n <div class=\"chips-container\" [style.display]=\"(params.viewChip) ? 'flex' : 'none'\">\r\n\r\n <div *ngFor=\"let config of displayedChips\">\r\n <sa-chip [id]=\"config.id\" [filling]=\"config.filling\" id=\"chip_{{rowNum}}_{{config.id}}\" [iconPath]=\"config.iconPath\"\r\n [iconPosition]=\"config.iconPosition\" [largeStateIcon]=\"config.largeStateIcon\" [state]=\"config.state\"\r\n [type]=\"config.type\" [text]=\"config.text\" [class.small]=\"config.type === 'small'\"\r\n [class.neutral]=\"config.state === 'neutral'\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n </div>\r\n <div class=\"chip-tooltip-container\" *ngIf=\"remainingChipsCount > 0\" style=\"position: relative;\"\r\n (mouseenter)=\"showTooltip(remainingChipsCount, $event)\" (mouseleave)=\"hideTooltip()\">\r\n <sa-chip [id]=\"'chip_' + rowNum + '_more'\" [text]=\"'+' + remainingChipsCount\" [filling]=\"displayedChips[0]?.filling\"\r\n [type]=\"displayedChips[0]?.type\" [state]=\"displayedChips[0]?.state\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n</div>\r\n\r\n <sa-button [iconPosition]=\"params.buttonConfig?.iconPosition\" [ImagePath]=\"params.buttonConfig?.imagePath\"\r\n [id]=\"params.buttonConfig?.id\" [size]=\"params.buttonConfig?.size\" [state]=\"params.buttonConfig?.state\"\r\n [type]=\"params.buttonConfig?.type\" [text]=\"params.buttonConfig?.text\" [href]=\"params.buttonConfig?.href\"\r\n [hrefTarget]=\"params.buttonConfig?.hrefTarget\" [style.display]=\"(params.viewButton) ? 'block' : 'none'\"\r\n (onClickEvent)=\"buttonClicked($event)\"></sa-button>\r\n\r\n</div>\r\n\r\n <div *ngIf=\"params.cellType === 'actions'\" class=\"actions-container\">\r\n <img [src]=\"params.buttonConfig?.imagePath\" alt=\"actions\" class=\"actions-icon\" (click)=\"toggleDropdown(actionsButton)\"\r\n #actionsButton />\r\n \r\n <ng-template #dropdownTemplate>\r\n <div class=\"actions-dropdown\">\r\n <div *ngFor=\"let action of params.actions\" class=\"action-item\" (click)=\"handleActionClick(action, $event)\">\r\n <img *ngIf=\"action.icon\" [src]=\"action.icon\" class=\"action-icon\" />\r\n <span class=\"action-label\">{{action.label}}</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: [".header{--bg: var(--primary-50);--color: var(--text-highemphasis);--border: none;--flex-direction: left}.header:hover{cursor:pointer}.row{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: left}.numeric{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: right}.interactive{--color: var(--primary-500);--cursor: pointer;--border: var(--grey-50);--flex-direction: left}.grid-cell{display:flex;height:48px;padding:var(--small-12px);justify-content:var(--flex-direction);align-items:center;gap:var(--small-8px);flex-shrink:0;font-family:var(--font);box-sizing:border-box;border-bottom:1px solid var(--border);width:calc(100% - 20px);background-color:var(--bg)}.grid-text{display:flex;flex-direction:column}.main-text{color:var(--color);font-size:14px;font-weight:400;height:20px;line-height:20px}.main-text:hover{cursor:var(--cursor)}.sub-text{font-size:11px;font-weight:400;height:16px;line-height:16px;color:var(--text-mediumemphasis)}.icons{width:var(--medium-20px);height:var(--medium-20px)}.grid-chip{display:flex;height:24px;padding:var(--Small-4px, 4px) var(--Small-8px, 8px);justify-content:center;align-items:center;gap:var(--Small-4px, 4px);border-radius:4px;background:var(--Grey-100, #EAECF0);color:var(--Text-Medium-Emphasis, #6D6979);font-family:var(--font-family, Roboto);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px}.grid-cell,.chips-container{overflow:visible!important;position:relative}.chip-tooltip-container{position:relative;display:inline-flex;overflow:visible!important}.chip-tooltip-container sa-tool-tip{display:none}.chips-container{display:flex;gap:var(--Small-4px, 4px);align-items:center}.actions-container{position:relative;display:flex;width:32px;height:32px;justify-content:center;align-items:center;cursor:pointer}.actions-icon{width:20px;height:20px;cursor:pointer!important}.actions-dropdown{position:absolute;right:0;min-width:150px;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.action-item{display:flex;height:40px;padding:12px;align-items:center;gap:8px;align-self:stretch;cursor:pointer;transition:background-color .2s}.action-item:hover{background-color:#f5f5f5}.action-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.actions-container.clicked{border-radius:64px;background:var(--Primary-50, #F4EBFF);padding:8px}.chips-container{overflow:visible!important;position:relative}.chip-tooltip-container{position:relative;display:inline-flex;overflow:visible}\n"], dependencies: [{ kind: "component", type: AvatarComponent, selector: "sa-avatar", inputs: ["id", "imagePath", "altText", "size"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "component", type: ButtonComponent, selector: "sa-button", inputs: ["id", "type", "state", "size", "text", "ImagePath", "icon", "iconPosition", "href", "hrefTarget", "width", "isSubmit", "buttonIconSize", "showSpinner"], outputs: ["onClickEvent", "onMouseInEvent", "onMouseOutEvent"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: CommonModule }] }); }
66
202
  }
67
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GridCellComponent, decorators: [{
68
204
  type: Component,
69
- args: [{ selector: 'lib-grid-cell', standalone: true, imports: [
205
+ args: [{ selector: 'sa-grid-cell', standalone: true, imports: [
70
206
  AvatarComponent,
71
207
  ChipsComponent,
72
208
  ButtonComponent,
73
- NgFor
74
- ], template: "<div class=\"grid-cell {{params.cellType}}\">\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewLeadingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n <sa-avatar [id]=\"params.avatarConfig?.id\" [altText]=\"params.avatarConfig?.altText\"\r\n [imagePath]=\"params.avatarConfig?.imagePath\" [size]=\"params.avatarConfig?.size\"\r\n [style.display]=\"(params.viewAvatar) ? 'block' : 'none'\" (onClickEvent)=\"avatarClicked($event)\">\r\n </sa-avatar>\r\n\r\n <div class=\"grid-text\" [style.display]=\"(params.viewText) ? 'block' : 'none'\">\r\n <div [style.display]=\"(params.text) ? 'block' : 'none'\" (click)=\"linkClicked()\" class=\"main-text\">{{params.text}}\r\n </div>\r\n\r\n <div [style.display]=\"(params.subText) ? 'block' : 'none'\" class=\"sub-text\">{{params.subText}}</div>\r\n </div>\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewTrailingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n\r\n <sa-chip *ngFor=\"let config of params.chipConfig, let i = index\" [id]=\"config.id\" [filling]=\"config.filling\"\r\n id=\"chip_{{rowNum}}_{{config.id}}\" [iconPath]=\"config.iconPath\" [iconPosition]=\"config.iconPosition\"\r\n [largeStateIcon]=\"config.largeStateIcon\" [state]=\"config.state\" [type]=\"config.type\" [text]=\"config.text\"\r\n [style.display]=\"(params.viewChip) ? 'block' : 'none'\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n\r\n <sa-button [iconPosition]=\"params.buttonConfig?.iconPosition\" [ImagePath]=\"params.buttonConfig?.imagePath\"\r\n [id]=\"params.buttonConfig?.id\" [size]=\"params.buttonConfig?.size\" [state]=\"params.buttonConfig?.state\"\r\n [type]=\"params.buttonConfig?.type\" [text]=\"params.buttonConfig?.text\" [href]=\"params.buttonConfig?.href\"\r\n [hrefTarget]=\"params.buttonConfig?.hrefTarget\" [style.display]=\"(params.viewButton) ? 'block' : 'none'\"\r\n (onClickEvent)=\"buttonClicked($event)\"></sa-button>\r\n\r\n</div>\r\n", styles: [".header{--bg: var(--primary-50);--color: var(--text-highemphasis);--border: none;--flex-direction: left}.header:hover{cursor:pointer}.row{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: left}.numeric{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: right}.interactive{--color: var(--primary-500);--cursor: pointer;--border: var(--grey-50);--flex-direction: left}.grid-cell{display:flex;height:48px;padding:var(--small-12px);justify-content:var(--flex-direction);align-items:center;gap:var(--small-8px);flex-shrink:0;font-family:var(--font);box-sizing:border-box;border-bottom:1px solid var(--border);width:calc(100% - 20px);background-color:var(--bg)}.grid-text{display:flex;flex-direction:column}.main-text{color:var(--color);font-size:14px;font-weight:400;height:20px;line-height:20px}.main-text:hover{cursor:var(--cursor)}.sub-text{font-size:11px;font-weight:400;height:16px;line-height:16px;color:var(--text-mediumemphasis)}.icons{width:var(--medium-20px);height:var(--medium-20px)}\n"] }]
75
- }], propDecorators: { onClickButtonEvent: [{
209
+ NgFor,
210
+ NgIf,
211
+ ToolTipComponent,
212
+ CommonModule
213
+ ], template: "<div class=\"grid-cell {{params.cellType}}\">\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewLeadingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n <sa-avatar [id]=\"params.avatarConfig?.id\" [altText]=\"params.avatarConfig?.altText\"\r\n [imagePath]=\"params.avatarConfig?.imagePath\" [size]=\"params.avatarConfig?.size\"\r\n [style.display]=\"(params.viewAvatar) ? 'block' : 'none'\" (onClickEvent)=\"avatarClicked($event)\">\r\n </sa-avatar>\r\n\r\n <div class=\"grid-text\" [style.display]=\"(params.viewText) ? 'block' : 'none'\">\r\n <div [style.display]=\"(params.text) ? 'block' : 'none'\" (click)=\"linkClicked()\" class=\"main-text\">{{params.text}}\r\n </div>\r\n\r\n <div [style.display]=\"(params.subText) ? 'block' : 'none'\" class=\"sub-text\">{{params.subText}}</div>\r\n </div>\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewTrailingIcon) ? 'block' : 'none'\" alt=\"\">\r\n <div class=\"chips-container\" [style.display]=\"(params.viewChip) ? 'flex' : 'none'\">\r\n\r\n <div *ngFor=\"let config of displayedChips\">\r\n <sa-chip [id]=\"config.id\" [filling]=\"config.filling\" id=\"chip_{{rowNum}}_{{config.id}}\" [iconPath]=\"config.iconPath\"\r\n [iconPosition]=\"config.iconPosition\" [largeStateIcon]=\"config.largeStateIcon\" [state]=\"config.state\"\r\n [type]=\"config.type\" [text]=\"config.text\" [class.small]=\"config.type === 'small'\"\r\n [class.neutral]=\"config.state === 'neutral'\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n </div>\r\n <div class=\"chip-tooltip-container\" *ngIf=\"remainingChipsCount > 0\" style=\"position: relative;\"\r\n (mouseenter)=\"showTooltip(remainingChipsCount, $event)\" (mouseleave)=\"hideTooltip()\">\r\n <sa-chip [id]=\"'chip_' + rowNum + '_more'\" [text]=\"'+' + remainingChipsCount\" [filling]=\"displayedChips[0]?.filling\"\r\n [type]=\"displayedChips[0]?.type\" [state]=\"displayedChips[0]?.state\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n</div>\r\n\r\n <sa-button [iconPosition]=\"params.buttonConfig?.iconPosition\" [ImagePath]=\"params.buttonConfig?.imagePath\"\r\n [id]=\"params.buttonConfig?.id\" [size]=\"params.buttonConfig?.size\" [state]=\"params.buttonConfig?.state\"\r\n [type]=\"params.buttonConfig?.type\" [text]=\"params.buttonConfig?.text\" [href]=\"params.buttonConfig?.href\"\r\n [hrefTarget]=\"params.buttonConfig?.hrefTarget\" [style.display]=\"(params.viewButton) ? 'block' : 'none'\"\r\n (onClickEvent)=\"buttonClicked($event)\"></sa-button>\r\n\r\n</div>\r\n\r\n <div *ngIf=\"params.cellType === 'actions'\" class=\"actions-container\">\r\n <img [src]=\"params.buttonConfig?.imagePath\" alt=\"actions\" class=\"actions-icon\" (click)=\"toggleDropdown(actionsButton)\"\r\n #actionsButton />\r\n \r\n <ng-template #dropdownTemplate>\r\n <div class=\"actions-dropdown\">\r\n <div *ngFor=\"let action of params.actions\" class=\"action-item\" (click)=\"handleActionClick(action, $event)\">\r\n <img *ngIf=\"action.icon\" [src]=\"action.icon\" class=\"action-icon\" />\r\n <span class=\"action-label\">{{action.label}}</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n", styles: [".header{--bg: var(--primary-50);--color: var(--text-highemphasis);--border: none;--flex-direction: left}.header:hover{cursor:pointer}.row{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: left}.numeric{--color: var(--text-highemphasis);--cursor: default;--border: var(--grey-50);--flex-direction: right}.interactive{--color: var(--primary-500);--cursor: pointer;--border: var(--grey-50);--flex-direction: left}.grid-cell{display:flex;height:48px;padding:var(--small-12px);justify-content:var(--flex-direction);align-items:center;gap:var(--small-8px);flex-shrink:0;font-family:var(--font);box-sizing:border-box;border-bottom:1px solid var(--border);width:calc(100% - 20px);background-color:var(--bg)}.grid-text{display:flex;flex-direction:column}.main-text{color:var(--color);font-size:14px;font-weight:400;height:20px;line-height:20px}.main-text:hover{cursor:var(--cursor)}.sub-text{font-size:11px;font-weight:400;height:16px;line-height:16px;color:var(--text-mediumemphasis)}.icons{width:var(--medium-20px);height:var(--medium-20px)}.grid-chip{display:flex;height:24px;padding:var(--Small-4px, 4px) var(--Small-8px, 8px);justify-content:center;align-items:center;gap:var(--Small-4px, 4px);border-radius:4px;background:var(--Grey-100, #EAECF0);color:var(--Text-Medium-Emphasis, #6D6979);font-family:var(--font-family, Roboto);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px}.grid-cell,.chips-container{overflow:visible!important;position:relative}.chip-tooltip-container{position:relative;display:inline-flex;overflow:visible!important}.chip-tooltip-container sa-tool-tip{display:none}.chips-container{display:flex;gap:var(--Small-4px, 4px);align-items:center}.actions-container{position:relative;display:flex;width:32px;height:32px;justify-content:center;align-items:center;cursor:pointer}.actions-icon{width:20px;height:20px;cursor:pointer!important}.actions-dropdown{position:absolute;right:0;min-width:150px;z-index:1000;border-radius:4px;border:1px solid var(--Grey-100, #EAECF0);background:var(--Structural-White, #FFF);box-shadow:0 1px 2px #0000004d}.action-item{display:flex;height:40px;padding:12px;align-items:center;gap:8px;align-self:stretch;cursor:pointer;transition:background-color .2s}.action-item:hover{background-color:#f5f5f5}.action-label{color:var(--text-highemphasis, #1C1B20);font-family:var(--font-roboto, Roboto);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px}.actions-container.clicked{border-radius:64px;background:var(--Primary-50, #F4EBFF);padding:8px}.chips-container{overflow:visible!important;position:relative}.chip-tooltip-container{position:relative;display:inline-flex;overflow:visible}\n"] }]
214
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }], propDecorators: { dropdownTemplate: [{
215
+ type: ViewChild,
216
+ args: ['dropdownTemplate']
217
+ }], actionsContainer: [{
218
+ type: ViewChild,
219
+ args: ['actionsContainer']
220
+ }], onClickButtonEvent: [{
76
221
  type: Output
77
222
  }], onClickChipEvent: [{
78
223
  type: Output
@@ -80,5 +225,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
80
225
  type: Output
81
226
  }], onClickAvatarEvent: [{
82
227
  type: Output
228
+ }], onDocumentClick: [{
229
+ type: HostListener,
230
+ args: ['document:click', ['$event']]
83
231
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZ3JpZC1jZWxsL2dyaWQtY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2dyaWQtY2VsbC9ncmlkLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZ0J4QyxNQUFNLE9BQU8saUJBQWlCO0lBWjlCO1FBZ0JZLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7S0E0RG5EO0lBMURDLGFBQWEsQ0FBQyxHQUFVO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ3JELEdBQUcsR0FBRztZQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFB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QUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcCwgSUhlYWRlckFuZ3VsYXJDb21wIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcclxuaW1wb3J0IHsgR3JpZEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZ3JpZC1pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ3JpZC1jZWxsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEF2YXRhckNvbXBvbmVudCxcclxuICAgIENoaXBzQ29tcG9uZW50LFxyXG4gICAgQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTmdGb3JcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWNlbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ncmlkLWNlbGwuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgSUNlbGxSZW5kZXJlckFuZ3VsYXJDb21wLCBJSGVhZGVyQW5ndWxhckNvbXAge1xyXG4gIHBhcmFtczogR3JpZEludGVyZmFjZTtcclxuICByb3dOdW06IG51bWJlcjtcclxuXHJcbiAgQE91dHB1dCgpIG9uQ2xpY2tCdXR0b25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DbGlja0NoaXBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DbGlja0xpbmtFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DbGlja0F2YXRhckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBidXR0b25DbGlja2VkKGV2dDogRXZlbnQpIHtcclxuICAgIHRoaXMucGFyYW1zLmJ1dHRvbkNsaWNrZWQgJiYgdGhpcy5wYXJhbXMuYnV0dG9uQ2xpY2tlZCh7ICAgICAgICAgICAgLy8gY2FsbHMgdGhlIGZ1bmN0aW9uIHBhc3NlZCB2aWEgcGFyYW1zIGluIGdyaWRJbnRlcmZhY2UuXHJcbiAgICAgIC4uLmV2dCxcclxuICAgICAgcm93SWQ6IHRoaXMucm93TnVtXHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DbGlja0J1dHRvbkV2ZW50LmVtaXQoeyAuLi5ldnQsIHJvd0lkOiB0aGlzLnJvd051bSB9KTsgICAgICAvLyB0aGlzIGV2ZW50IGlzbid0IGNhdWdodCBieSBhbnl0aGluZy4gXHJcbiAgfVxyXG5cclxuICAvLyBhYm92ZSBmdW5jdGlvbiBiZWhhdmlvciBpcyBzYW1lIGZvciBhbGwgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3NcclxuXHJcbiAgY2hpcENsaWNrZWQoZXZ0OiBFdmVudCkge1xyXG4gICAgdGhpcy5wYXJhbXMuY2hpcENsaWNrZWQgJiYgdGhpcy5wYXJhbXMuY2hpcENsaWNrZWQoe1xyXG4gICAgICAuLi5ldnQsXHJcbiAgICAgIHJvd0lkOiB0aGlzLnJvd051bVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uQ2xpY2tDaGlwRXZlbnQuZW1pdCh7IC4uLmV2dCwgcm93SWQ6IHRoaXMucm93TnVtIH0pO1xyXG4gIH1cclxuXHJcbiAgbGlua0NsaWNrZWQoKSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMuY2VsbFR5cGUgIT0gXCJpbnRlcmFjdGl2ZVwiKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5wYXJhbXMubGlua0NsaWNrZWQgJiYgdGhpcy5wYXJhbXMubGlua0NsaWNrZWQoeyAgICAgICAgIC8vY2FsbGluZyBmdW5jdGlvbiBwYXNzZWQgaW4gcGFyYW1zIHdpdGggcm93SWQgb2JqZWN0IGluIGFyZ3VtZW50c1xyXG4gICAgICByb3dJZDogdGhpcy5yb3dOdW1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnBhcmFtcy5pbnRlcmFjdGl2ZUxpbmsgIT0gXCJcIikge1xyXG4gICAgICBpZiAodGhpcy5wYXJhbXMuaW50ZXJhY3RpdmVMaW5rVGFyZ2V0ID09IFwiYmxhbmtcIikge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucGFyYW1zLmludGVyYWN0aXZlTGluaykhO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMucGFyYW1zLmludGVyYWN0aXZlTGlua1RhcmdldCA9PSBcInNlbGZcIikge1xyXG4gICAgICAgIGxvY2F0aW9uLmhyZWYgPSB0aGlzLnBhcmFtcy5pbnRlcmFjdGl2ZUxpbmshO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2xpY2tMaW5rRXZlbnQuZW1pdCh7IHJvd0lkOiB0aGlzLnJvd051bSB9KTtcclxuICB9XHJcblxyXG4gIGF2YXRhckNsaWNrZWQoZXZ0OiBFdmVudCkge1xyXG4gICAgdGhpcy5wYXJhbXMuYXZhdGFyQ2xpY2tlZCAmJiB0aGlzLnBhcmFtcy5hdmF0YXJDbGlja2VkKHtcclxuICAgICAgLi4uZXZ0LFxyXG4gICAgICByb3dJZDogdGhpcy5yb3dOdW1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNsaWNrQ2hpcEV2ZW50LmVtaXQoeyAuLi5ldnQsIHJvd0lkOiB0aGlzLnJvd051bSB9KTtcclxuICB9XHJcblxyXG4gIGFnSW5pdChpblBhcmFtczogYW55KTogdm9pZCB7ICAgICAgICAgIC8vIG11c3QgZXhpc3Qgd2hlbiBjbGFzcyBpbXBsZW1lbnRzIElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcCAvIElIZWFkZXJBbmd1bGFyQ29tcFxyXG5cclxuICAgIHRoaXMucm93TnVtID0gaW5QYXJhbXMucm93SW5kZXg7XHJcbiAgICB0aGlzLnBhcmFtcyA9IGluUGFyYW1zLnZhbHVlOyAgICAgICAvLyBpblBhcmFtcy52YWx1ZSBleGlzdHMgd2hlbiBncmlkQ2VsbCBpcyByZW5kZXJlZCBhcyBjZWxsLCBgY2VsbFJlbmRlcmVyOiBHcmlkQ2VsbENvbXBvbmVudGBcclxuICAgIGlmIChpblBhcmFtcy52YWx1ZSA9PSB1bmRlZmluZWQpIHsgICAgLy8gaW5QYXJhbXMudmFsdWUgaXMgdW5kZWZpbmVkIHdoZW4gZ3JpZENlbGwgaXMgcmVuZGVyZWQgYXMgaGVhZGVyLCBgaGVhZGVyQ29tcG9uZW50OiBHcmlkQ2VsbENvbXBvbmVudGAsIFxyXG4gICAgICB0aGlzLnBhcmFtcyA9IGluUGFyYW1zXHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKHBhcmFtczogYW55KSB7ICAgICAvLyBtdXN0IGV4aXN0IHdoZW4gY2xhc3MgaW1wbGVtZW50cyBJQ2VsbFJlbmRlcmVyQW5ndWxhckNvbXAgLyBJSGVhZGVyQW5ndWxhckNvbXBcclxuICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgIC8vIG5vdCBzdXJlIHdoYXQgdGhpcyByZXR1cm4gdmFsdWUgZG9lcy5cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkLWNlbGwge3twYXJhbXMuY2VsbFR5cGV9fVwiPlxyXG5cclxuICA8aW1nIGNsYXNzPVwiaWNvbnNcIiBzcmM9e3twYXJhbXMuaWNvblBhdGh9fSBbc3R5bGUuZGlzcGxheV09XCIocGFyYW1zLnZpZXdMZWFkaW5nSWNvbikgPyAnYmxvY2snIDogJ25vbmUnXCIgYWx0PVwiXCI+XHJcblxyXG4gIDxzYS1hdmF0YXIgW2lkXT1cInBhcmFtcy5hdmF0YXJDb25maWc/LmlkXCIgW2FsdFRleHRdPVwicGFyYW1zLmF2YXRhckNvbmZpZz8uYWx0VGV4dFwiXHJcbiAgICBbaW1hZ2VQYXRoXT1cInBhcmFtcy5hdmF0YXJDb25maWc/LmltYWdlUGF0aFwiIFtzaXplXT1cInBhcmFtcy5hdmF0YXJDb25maWc/LnNpemVcIlxyXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiKHBhcmFtcy52aWV3QXZhdGFyKSA/ICdibG9jaycgOiAnbm9uZSdcIiAob25DbGlja0V2ZW50KT1cImF2YXRhckNsaWNrZWQoJGV2ZW50KVwiPlxyXG4gIDwvc2EtYXZhdGFyPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZ3JpZC10ZXh0XCIgW3N0eWxlLmRpc3BsYXldPVwiKHBhcmFtcy52aWV3VGV4dCkgPyAnYmxvY2snIDogJ25vbmUnXCI+XHJcbiAgICA8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cIihwYXJhbXMudGV4dCkgPyAnYmxvY2snIDogJ25vbmUnXCIgKGNsaWNrKT1cImxpbmtDbGlja2VkKClcIiBjbGFzcz1cIm1haW4tdGV4dFwiPnt7cGFyYW1zLnRleHR9fVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCIocGFyYW1zLnN1YlRleHQpID8gJ2Jsb2NrJyA6ICdub25lJ1wiIGNsYXNzPVwic3ViLXRleHRcIj57e3BhcmFtcy5zdWJUZXh0fX08L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGltZyBjbGFzcz1cImljb25zXCIgc3JjPXt7cGFyYW1zLmljb25QYXRofX0gW3N0eWxlLmRpc3BsYXldPVwiKHBhcmFtcy52aWV3VHJhaWxpbmdJY29uKSA/ICdibG9jaycgOiAnbm9uZSdcIiBhbHQ9XCJcIj5cclxuXHJcblxyXG4gIDxzYS1jaGlwICpuZ0Zvcj1cImxldCBjb25maWcgb2YgcGFyYW1zLmNoaXBDb25maWcsIGxldCBpID0gaW5kZXhcIiBbaWRdPVwiY29uZmlnLmlkXCIgW2ZpbGxpbmddPVwiY29uZmlnLmZpbGxpbmdcIlxyXG4gICAgaWQ9XCJjaGlwX3t7cm93TnVtfX1fe3tjb25maWcuaWR9fVwiIFtpY29uUGF0aF09XCJjb25maWcuaWNvblBhdGhcIiBbaWNvblBvc2l0aW9uXT1cImNvbmZpZy5pY29uUG9zaXRpb25cIlxyXG4gICAgW2xhcmdlU3RhdGVJY29uXT1cImNvbmZpZy5sYXJnZVN0YXRlSWNvblwiIFtzdGF0ZV09XCJjb25maWcuc3RhdGVcIiBbdHlwZV09XCJjb25maWcudHlwZVwiIFt0ZXh0XT1cImNvbmZpZy50ZXh0XCJcclxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIihwYXJhbXMudmlld0NoaXApID8gJ2Jsb2NrJyA6ICdub25lJ1wiIChvbkNsaWNrRXZlbnQpPVwiY2hpcENsaWNrZWQoJGV2ZW50KVwiPjwvc2EtY2hpcD5cclxuXHJcbiAgPHNhLWJ1dHRvbiBbaWNvblBvc2l0aW9uXT1cInBhcmFtcy5idXR0b25Db25maWc/Lmljb25Qb3NpdGlvblwiIFtJbWFnZVBhdGhdPVwicGFyYW1zLmJ1dHRvbkNvbmZpZz8uaW1hZ2VQYXRoXCJcclxuICAgIFtpZF09XCJwYXJhbXMuYnV0dG9uQ29uZmlnPy5pZFwiIFtzaXplXT1cInBhcmFtcy5idXR0b25Db25maWc/LnNpemVcIiBbc3RhdGVdPVwicGFyYW1zLmJ1dHRvbkNvbmZpZz8uc3RhdGVcIlxyXG4gICAgW3R5cGVdPVwicGFyYW1zLmJ1dHRvbkNvbmZpZz8udHlwZVwiIFt0ZXh0XT1cInBhcmFtcy5idXR0b25Db25maWc/LnRleHRcIiBbaHJlZl09XCJwYXJhbXMuYnV0dG9uQ29uZmlnPy5ocmVmXCJcclxuICAgIFtocmVmVGFyZ2V0XT1cInBhcmFtcy5idXR0b25Db25maWc/LmhyZWZUYXJnZXRcIiBbc3R5bGUuZGlzcGxheV09XCIocGFyYW1zLnZpZXdCdXR0b24pID8gJ2Jsb2NrJyA6ICdub25lJ1wiXHJcbiAgICAob25DbGlja0V2ZW50KT1cImJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiPjwvc2EtYnV0dG9uPlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvZ3JpZC1jZWxsL2dyaWQtY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2dyaWQtY2VsbC9ncmlkLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQyxTQUFTLEVBQUUsWUFBWSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ25JLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBd0JyRCxNQUFNLE9BQU8saUJBQWlCO0lBZ0I1QixZQUFvQixHQUFzQixFQUFVLE9BQWdCLEVBQVUsZ0JBQWtDO1FBQTVGLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFaaEgsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDWixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDL0IsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBQ3JDLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUV4QixXQUFN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QUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBdUdQLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJQ2VsbFJlbmRlcmVyQW5ndWxhckNvbXAsIElIZWFkZXJBbmd1bGFyQ29tcCB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XHJcbmltcG9ydCB7IEdyaWRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2dyaWQtaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sVGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbC10aXAvdG9vbC10aXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hpcEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hpcC1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IElDZWxsUmVuZGVyZXJQYXJhbXMgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcblxyXG5pbnRlcmZhY2UgQ2VsbFBhcmFtcyBleHRlbmRzIElDZWxsUmVuZGVyZXJQYXJhbXMge1xyXG4gIHJvd0luZGV4OiBudW1iZXI7XHJcbiAgdmFsdWU6IGFueTtcclxuICBkYXRhOiB7IHlvdT86IGJvb2xlYW4gfTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYS1ncmlkLWNlbGwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQXZhdGFyQ29tcG9uZW50LFxyXG4gICAgQ2hpcHNDb21wb25lbnQsXHJcbiAgICBCdXR0b25Db21wb25lbnQsXHJcbiAgICBOZ0ZvcixcclxuICAgIE5nSWYsXHJcbiAgICBUb29sVGlwQ29tcG9uZW50LFxyXG4gICAgQ29tbW9uTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZ3JpZC1jZWxsLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdkcm9wZG93blRlbXBsYXRlJykgZHJvcGRvd25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZiE6IE92ZXJsYXlSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYWN0aW9uc0NvbnRhaW5lcicpIGFjdGlvbnNDb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gIHJlYWRvbmx5IE1BWF9WSVNJQkxFX0NISVBTID0gMTsgXHJcbiAgZGlzcGxheWVkQ2hpcHM6IENoaXBJbnRlcmZhY2VbXSA9IFtdO1xyXG4gIHJlbWFpbmluZ0NoaXBzQ291bnQgPSAwO1xyXG4gIHBhcmFtcyE6IEdyaWRJbnRlcmZhY2U7XHJcbiAgcm93TnVtID0gMDtcclxuXHJcbiAgQE91dHB1dCgpIG9uQ2xpY2tCdXR0b25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyByb3dJZDogbnVtYmVyIH0+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2xpY2tDaGlwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm93SWQ6IG51bWJlciB9PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrTGlua0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkNsaWNrQXZhdGFyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm93SWQ6IG51bWJlciB9PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxyXG5cclxuICBob3ZlcmVkQ2hpcDogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIHRvb2x0aXBDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUb29sVGlwQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBhZ0luaXQocGFyYW1zOiBDZWxsUGFyYW1zKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvd051bSA9IHBhcmFtcy5yb3dJbmRleDtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgZm9yIGRpcmVjdCBmaWVsZCB2YWx1ZSBmaXJzdCwgdGhlbiBmYWxsYmFjayB0byBfY2VsbFBhcmFtc1xyXG4gICAgbGV0IGNlbGxEYXRhID0gcGFyYW1zLnZhbHVlO1xyXG4gICAgaWYgKCFjZWxsRGF0YSAmJiBwYXJhbXMuZGF0YSAmJiBwYXJhbXMuY29sRGVmPy5maWVsZCkge1xyXG4gICAgICBjb25zdCBjZWxsUGFyYW1zS2V5ID0gYCR7cGFyYW1zLmNvbERlZi5maWVsZH1fY2VsbFBhcmFtc2A7XHJcbiAgICAgIGNlbGxEYXRhID0gcGFyYW1zLmRhdGFbY2VsbFBhcmFtc0tleV07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGFyYW1zID0ge1xyXG4gICAgICAuLi5wYXJhbXMsXHJcbiAgICAgIC4uLihjZWxsRGF0YSA/PyB7fSlcclxuICAgIH07XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnBhcmFtcy5jaGlwQ29uZmlnICYmIEFycmF5LmlzQXJyYXkodGhpcy5wYXJhbXMuY2hpcENvbmZpZykpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDaGlwcyA9IHRoaXMucGFyYW1zLmNoaXBDb25maWcuc2xpY2UoMCwgdGhpcy5NQVhfVklTSUJMRV9DSElQUyk7XHJcbiAgICAgIHRoaXMucmVtYWluaW5nQ2hpcHNDb3VudCA9IE1hdGgubWF4KDAsIHRoaXMucGFyYW1zLmNoaXBDb25maWcubGVuZ3RoIC0gdGhpcy5NQVhfVklTSUJMRV9DSElQUyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgIHRoaXMuZGlzcGxheWVkQ2hpcHMgPSB0aGlzLnBhcmFtcy5jaGlwQ29uZmlnO1xyXG4gICAgICAgdGhpcy5yZW1haW5pbmdDaGlwc0NvdW50ID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2gocGFyYW1zOiBDZWxsUGFyYW1zKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmFnSW5pdChwYXJhbXMpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB0eXBlT2YodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcclxuICB9XHJcbiAgXHJcbiAgYnV0dG9uQ2xpY2tlZChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5wYXJhbXMuYnV0dG9uQ29uZmlnPy5vbkNsaWNrKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmJ1dHRvbkNvbmZpZy5vbkNsaWNrKGV2ZW50KTtcclxuICAgIH1cclxuICAgIHRoaXMucGFyYW1zLmJ1dHRvbkNsaWNrZWQgJiYgdGhpcy5wYXJhbXMuYnV0dG9uQ2xpY2tlZCh7ICAgICAgICAgICAgXHJcbiAgICAgIC4uLmV2ZW50LFxyXG4gICAgICByb3dJZDogdGhpcy5yb3dOdW1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNsaWNrQnV0dG9uRXZlbnQuZW1pdCh7IC4uLmV2ZW50LCByb3dJZDogdGhpcy5yb3dOdW0gfSk7ICAgICAgXHJcbiAgfVxyXG5cclxuICB0b2dnbGVEcm9wZG93bihlbGVtZW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheS5wb3NpdGlvbigpXHJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKGVsZW1lbnQpXHJcbiAgICAgIC53aXRoUHVzaCh0cnVlKSBcclxuICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnModHJ1ZSkgXHJcbiAgICAgIC53aXRoVmlld3BvcnRNYXJnaW4oOCkgXHJcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgb2Zmc2V0WTogNCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgb2Zmc2V0WTogNCxcclxuICAgICAgICB9XHJcbiAgICAgIF0pO1xyXG5cclxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3BDbGFzczogJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJyxcclxuICAgICAgcGFuZWxDbGFzczogJ2FjdGlvbnMtZHJvcGRvd24tcGFuZWwnLFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpIFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd25UZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUFjdGlvbkNsaWNrKGFjdGlvbjogYW55LCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIGlmIChhY3Rpb24ub25DbGljaykge1xyXG4gICAgICBhY3Rpb24ub25DbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmFjdGlvbnNDb250YWluZXIgJiYgIXRoaXMuYWN0aW9uc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoaXBDbGlja2VkKGV2dDogRXZlbnQpIHtcclxuICAgIHRoaXMucGFyYW1zLmNoaXBDbGlja2VkICYmIHRoaXMucGFyYW1zLmNoaXBDbGlja2VkKHtcclxuICAgICAgLi4uZXZ0LFxyXG4gICAgICByb3dJZDogdGhpcy5yb3dOdW1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNsaWNrQ2hpcEV2ZW50LmVtaXQoeyAuLi5ldnQsIHJvd0lkOiB0aGlzLnJvd051bSB9KTtcclxuICB9XHJcblxyXG4gIGxpbmtDbGlja2VkKCkge1xyXG4gICAgaWYgKHRoaXMucGFyYW1zLmNlbGxUeXBlICE9IFwiaW50ZXJhY3RpdmVcIikgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMucGFyYW1zLmxpbmtDbGlja2VkICYmIHRoaXMucGFyYW1zLmxpbmtDbGlja2VkKHsgICAgICAgICBcclxuICAgICAgcm93SWQ6IHRoaXMucm93TnVtXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5wYXJhbXMuaW50ZXJhY3RpdmVMaW5rICE9IFwiXCIpIHtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLmludGVyYWN0aXZlTGlua1RhcmdldCA9PSBcImJsYW5rXCIpIHtcclxuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnBhcmFtcy5pbnRlcmFjdGl2ZUxpbmspITtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnBhcmFtcy5pbnRlcmFjdGl2ZUxpbmtUYXJnZXQgPT0gXCJzZWxmXCIpIHtcclxuICAgICAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5wYXJhbXMuaW50ZXJhY3RpdmVMaW5rITtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNsaWNrTGlua0V2ZW50LmVtaXQoeyByb3dJZDogdGhpcy5yb3dOdW0gfSk7XHJcbiAgfVxyXG5cclxuICBhdmF0YXJDbGlja2VkKGV2dDogRXZlbnQpIHtcclxuICAgIHRoaXMucGFyYW1zLmF2YXRhckNsaWNrZWQgJiYgdGhpcy5wYXJhbXMuYXZhdGFyQ2xpY2tlZCh7XHJcbiAgICAgIC4uLmV2dCxcclxuICAgICAgcm93SWQ6IHRoaXMucm93TnVtXHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DbGlja0F2YXRhckV2ZW50LmVtaXQoeyAuLi5ldnQsIHJvd0lkOiB0aGlzLnJvd051bSB9KTtcclxuICB9XHJcblxyXG4gIHNob3dUb29sdGlwKGNvbmZpZzogYW55LCBldmVudD86IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuaG92ZXJlZENoaXAgPSBjb25maWc7IFxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgY29uc3QgY2hpcENvbnRhaW5lciA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGNoaXBFbGVtZW50ID0gY2hpcENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzYS1jaGlwJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmIChjaGlwRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSBjaGlwRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCB0b3BQb3NpdGlvbiA9IHJlY3QuYm90dG9tICsgODtcclxuICAgICAgICBjb25zdCBsZWZ0UG9zaXRpb24gPSByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjtcclxuICAgICAgICB0aGlzLmNyZWF0ZVRvb2x0aXBDb21wb25lbnQodG9wUG9zaXRpb24sIGxlZnRQb3NpdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVUb29sdGlwKCkge1xyXG4gICAgdGhpcy5ob3ZlcmVkQ2hpcCA9IG51bGw7XHJcbiAgICB0aGlzLmRlc3Ryb3lUb29sdGlwQ29tcG9uZW50KCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUb29sdGlwQ29tcG9uZW50KHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGVzdHJveVRvb2x0aXBDb21wb25lbnQoKTtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoVG9vbFRpcENvbXBvbmVudCk7ICAgIFxyXG4gICAgdGhpcy50b29sdGlwQ29tcG9uZW50UmVmLmluc3RhbmNlLm1lc3NhZ2VzID0gdGhpcy5nZXRUb29sdGlwVGV4dCgpOyBcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5pbnN0YW5jZS5zaW1wbGVNb2RlID0gdHJ1ZTtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5pbnN0YW5jZS5wb2ludGVyUG9zaXRpb24gPSAndG9wJztcclxuICAgIFxyXG4gICAgY29uc3QgdG9vbHRpcEVsZW1lbnQgPSB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcclxuICAgIHRvb2x0aXBFbGVtZW50LnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgdG9wOiAke3RvcH1weDtcclxuICAgICAgbGVmdDogJHtsZWZ0fXB4O1xyXG4gICAgICB6LWluZGV4OiA5OTk5OTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xyXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcclxuICAgIGA7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtZW50KTtcclxuICAgIHRoaXMudG9vbHRpcENvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95VG9vbHRpcENvbXBvbmVudCgpIHtcclxuICAgIGlmICh0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYpIHtcclxuICAgICAgY29uc3QgdG9vbHRpcEVsZW1lbnQgPSB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcclxuICAgICAgaWYgKHRvb2x0aXBFbGVtZW50LnBhcmVudE5vZGUpIHtcclxuICAgICAgICB0b29sdGlwRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRvb2x0aXBFbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLnRvb2x0aXBDb21wb25lbnRSZWYgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VG9vbHRpcFRleHQoKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKCF0aGlzLnBhcmFtcz8uY2hpcENvbmZpZykgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLmNoaXBDb25maWcubWFwKGNoaXAgPT4gY2hpcC50ZXh0KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jZWxsIHt7cGFyYW1zLmNlbGxUeXBlfX1cIj5cclxuXHJcbiAgPGltZyBjbGFzcz1cImljb25zXCIgc3JjPXt7cGFyYW1zLmljb25QYXRofX0gW3N0eWxlLmRpc3BsYXldPVwiKHBhcmFtcy52aWV3TGVhZGluZ0ljb24pID8gJ2Jsb2NrJyA6ICdub25lJ1wiIGFsdD1cIlwiPlxyXG5cclxuICA8c2EtYXZhdGFyIFtpZF09XCJwYXJhbXMuYXZhdGFyQ29uZmlnPy5pZFwiIFthbHRUZXh0XT1cInBhcmFtcy5hdmF0YXJDb25maWc/LmFsdFRleHRcIlxyXG4gICAgW2ltYWdlUGF0aF09XCJwYXJhbXMuYXZhdGFyQ29uZmlnPy5pbWFnZVBhdGhcIiBbc2l6ZV09XCJwYXJhbXMuYXZhdGFyQ29uZmlnPy5zaXplXCJcclxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIihwYXJhbXMudmlld0F2YXRhcikgPyAnYmxvY2snIDogJ25vbmUnXCIgKG9uQ2xpY2tFdmVudCk9XCJhdmF0YXJDbGlja2VkKCRldmVudClcIj5cclxuICA8L3NhLWF2YXRhcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImdyaWQtdGV4dFwiIFtzdHlsZS5kaXNwbGF5XT1cIihwYXJhbXMudmlld1RleHQpID8gJ2Jsb2NrJyA6ICdub25lJ1wiPlxyXG4gICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCIocGFyYW1zLnRleHQpID8gJ2Jsb2NrJyA6ICdub25lJ1wiIChjbGljayk9XCJsaW5rQ2xpY2tlZCgpXCIgY2xhc3M9XCJtYWluLXRleHRcIj57e3BhcmFtcy50ZXh0fX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiKHBhcmFtcy5zdWJUZXh0KSA/ICdibG9jaycgOiAnbm9uZSdcIiBjbGFzcz1cInN1Yi10ZXh0XCI+e3twYXJhbXMuc3ViVGV4dH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxpbWcgY2xhc3M9XCJpY29uc1wiIHNyYz17e3BhcmFtcy5pY29uUGF0aH19IFtzdHlsZS5kaXNwbGF5XT1cIihwYXJhbXMudmlld1RyYWlsaW5nSWNvbikgPyAnYmxvY2snIDogJ25vbmUnXCIgYWx0PVwiXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNoaXBzLWNvbnRhaW5lclwiIFtzdHlsZS5kaXNwbGF5XT1cIihwYXJhbXMudmlld0NoaXApID8gJ2ZsZXgnIDogJ25vbmUnXCI+XHJcblxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBkaXNwbGF5ZWRDaGlwc1wiPlxyXG4gICAgPHNhLWNoaXAgW2lkXT1cImNvbmZpZy5pZFwiIFtmaWxsaW5nXT1cImNvbmZpZy5maWxsaW5nXCIgaWQ9XCJjaGlwX3t7cm93TnVtfX1fe3tjb25maWcuaWR9fVwiIFtpY29uUGF0aF09XCJjb25maWcuaWNvblBhdGhcIlxyXG4gICAgICBbaWNvblBvc2l0aW9uXT1cImNvbmZpZy5pY29uUG9zaXRpb25cIiBbbGFyZ2VTdGF0ZUljb25dPVwiY29uZmlnLmxhcmdlU3RhdGVJY29uXCIgW3N0YXRlXT1cImNvbmZpZy5zdGF0ZVwiXHJcbiAgICAgIFt0eXBlXT1cImNvbmZpZy50eXBlXCIgW3RleHRdPVwiY29uZmlnLnRleHRcIiBbY2xhc3Muc21hbGxdPVwiY29uZmlnLnR5cGUgPT09ICdzbWFsbCdcIlxyXG4gICAgICBbY2xhc3MubmV1dHJhbF09XCJjb25maWcuc3RhdGUgPT09ICduZXV0cmFsJ1wiIChvbkNsaWNrRXZlbnQpPVwiY2hpcENsaWNrZWQoJGV2ZW50KVwiPjwvc2EtY2hpcD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY2hpcC10b29sdGlwLWNvbnRhaW5lclwiICpuZ0lmPVwicmVtYWluaW5nQ2hpcHNDb3VudCA+IDBcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwic2hvd1Rvb2x0aXAocmVtYWluaW5nQ2hpcHNDb3VudCwgJGV2ZW50KVwiIChtb3VzZWxlYXZlKT1cImhpZGVUb29sdGlwKClcIj5cclxuICAgIDxzYS1jaGlwIFtpZF09XCInY2hpcF8nICsgcm93TnVtICsgJ19tb3JlJ1wiIFt0ZXh0XT1cIicrJyArIHJlbWFpbmluZ0NoaXBzQ291bnRcIiBbZmlsbGluZ109XCJkaXNwbGF5ZWRDaGlwc1swXT8uZmlsbGluZ1wiXHJcbiAgICAgIFt0eXBlXT1cImRpc3BsYXllZENoaXBzWzBdPy50eXBlXCIgW3N0YXRlXT1cImRpc3BsYXllZENoaXBzWzBdPy5zdGF0ZVwiIChvbkNsaWNrRXZlbnQpPVwiY2hpcENsaWNrZWQoJGV2ZW50KVwiPjwvc2EtY2hpcD5cclxuPC9kaXY+XHJcblxyXG4gIDxzYS1idXR0b24gW2ljb25Qb3NpdGlvbl09XCJwYXJhbXMuYnV0dG9uQ29uZmlnPy5pY29uUG9zaXRpb25cIiBbSW1hZ2VQYXRoXT1cInBhcmFtcy5idXR0b25Db25maWc/LmltYWdlUGF0aFwiXHJcbiAgICBbaWRdPVwicGFyYW1zLmJ1dHRvbkNvbmZpZz8uaWRcIiBbc2l6ZV09XCJwYXJhbXMuYnV0dG9uQ29uZmlnPy5zaXplXCIgW3N0YXRlXT1cInBhcmFtcy5idXR0b25Db25maWc/LnN0YXRlXCJcclxuICAgIFt0eXBlXT1cInBhcmFtcy5idXR0b25Db25maWc/LnR5cGVcIiBbdGV4dF09XCJwYXJhbXMuYnV0dG9uQ29uZmlnPy50ZXh0XCIgW2hyZWZdPVwicGFyYW1zLmJ1dHRvbkNvbmZpZz8uaHJlZlwiXHJcbiAgICBbaHJlZlRhcmdldF09XCJwYXJhbXMuYnV0dG9uQ29uZmlnPy5ocmVmVGFyZ2V0XCIgW3N0eWxlLmRpc3BsYXldPVwiKHBhcmFtcy52aWV3QnV0dG9uKSA/ICdibG9jaycgOiAnbm9uZSdcIlxyXG4gICAgKG9uQ2xpY2tFdmVudCk9XCJidXR0b25DbGlja2VkKCRldmVudClcIj48L3NhLWJ1dHRvbj5cclxuXHJcbjwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwicGFyYW1zLmNlbGxUeXBlID09PSAnYWN0aW9ucydcIiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgICA8aW1nIFtzcmNdPVwicGFyYW1zLmJ1dHRvbkNvbmZpZz8uaW1hZ2VQYXRoXCIgYWx0PVwiYWN0aW9uc1wiIGNsYXNzPVwiYWN0aW9ucy1pY29uXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKGFjdGlvbnNCdXR0b24pXCJcclxuICAgICAgI2FjdGlvbnNCdXR0b24gLz5cclxuICBcclxuICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25UZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd25cIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcGFyYW1zLmFjdGlvbnNcIiBjbGFzcz1cImFjdGlvbi1pdGVtXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKGFjdGlvbiwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGltZyAqbmdJZj1cImFjdGlvbi5pY29uXCIgW3NyY109XCJhY3Rpb24uaWNvblwiIGNsYXNzPVwiYWN0aW9uLWljb25cIiAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tbGFiZWxcIj57e2FjdGlvbi5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -24,13 +24,13 @@ export class SAMenuItemComponent {
24
24
  this.onEvent.emit({ type: 'click', item });
25
25
  }
26
26
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SAMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: SAMenuItemComponent, isStandalone: true, selector: "sa-menu-item", inputs: { item: "item", showRound: "showRound" }, outputs: { onEvent: "onEvent" }, providers: [IconService], viewQueries: [{ propertyName: "menuDirective", first: true, predicate: i0.forwardRef(() => MenuDirective), descendants: true }], ngImport: i0, template: "<!-- <div mat-menu-item class=\"sa-menu-item\">\r\n <span>{{item.label}}</span>\r\n</div> -->\r\n\r\n<div class=\"section-item {{item?.sepratorPosition}}\" [ngStyle]=\"{ 'border-radius': showRound ? '5px' : '0' }\" [ngClass]=\"item.isSelected ? 'selected' : ''\" (click)=\"optionClicked(item)\">\r\n <div class=\"status\" [saMenu]=\"item?.subMenu\">\r\n <sa-status-dot *ngIf=\"item.statusDot\" [config]=\"item?.statusDot\"></sa-status-dot>\r\n <sa-icon class=\"flex\" *ngIf=\"item.icon\" [icon]=\"item?.icon?.icon\" [iconPath]=\"item['icon']?.iconPath\" [iconUrl]=\"item['icon']?.iconUrl\" [size]=\"item['icon']?.size\" [customClass]=\"item['icon']?.customClass\"></sa-icon>\r\n <span class=\"sa-groupItem-lable\" >{{item.label}}</span>\r\n <div *ngIf=\"item?.subMenu\">\r\n <sa-icon [icon]=\"'rightChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n </div>\r\n <!-- Section for showing chips if chips are available in object -->\r\n <div *ngIf=\"item.chips\" class=\"tags\">\r\n @for (itm of item.chips; track $index) {\r\n <sa-chip *ngIf=\"itm.text\" [type]=\"itm.type\" [state]=\"itm.state\" [filling]=\"itm.filling\"\r\n [text]=\"itm.text\"></sa-chip>\r\n <!-- <span [ngClass]=\"itm.status == 'active' ? 'tag-active' : 'tag-inactive'\" class=\"\">{{itm.label}}</span> -->\r\n }\r\n </div>\r\n</div>\r\n", styles: [".sa-menu-item{padding:12px}.sa-menu-item:hover{background-color:var(--primary-500)}.sa-menu-item:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.sa-menu-item:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.section-item{display:flex;justify-content:space-between;align-items:center;padding:10px}.section-item:hover{background-color:var(--primary-500)}.section-item:hover span{font-weight:500}.selected{background-color:var(--primary-500)}.section-item .tags{display:flex;gap:.25rem}.tag{background-color:#6b46c1;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-active{background-color:#6b46c1!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-inactive{background-color:#d27f2b!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.status{display:flex;align-items:center;gap:.6rem}.status-dot{width:.5rem;height:.5rem;border-radius:50%}.status-active{background-color:#48bb78}.status-inactive{background-color:#f19e4f}hr{border:0;border-top:1px solid #718096;margin-bottom:1rem}.sa-groupItem-lable{cursor:pointer;font-size:14px;font-weight:400}.flex{display:flex}.top{border-top:1px solid #475467}.bottom{border-bottom:1px solid #475467}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i0.forwardRef(() => ChipsComponent), selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: i0.forwardRef(() => HttpClientModule) }, { kind: "component", type: i0.forwardRef(() => IconComponent), selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget"], outputs: ["onClickEvent"] }, { kind: "component", type: i0.forwardRef(() => StatusDotComponent), selector: "sa-status-dot", inputs: ["config"] }, { kind: "directive", type: i0.forwardRef(() => MenuDirective), selector: "[saMenu]", inputs: ["saMenuRef", "saMenu", "saManuPosition"], outputs: ["onMenuEvent", "onEvent", "onAttached", "onDetached"] }] }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: SAMenuItemComponent, isStandalone: true, selector: "sa-menu-item", inputs: { item: "item", showRound: "showRound" }, outputs: { onEvent: "onEvent" }, providers: [IconService], viewQueries: [{ propertyName: "menuDirective", first: true, predicate: i0.forwardRef(() => MenuDirective), descendants: true }], ngImport: i0, template: "<!-- <div mat-menu-item class=\"sa-menu-item\">\r\n <span>{{item.label}}</span>\r\n</div> -->\r\n\r\n<div class=\"section-item {{item?.sepratorPosition}}\" [ngStyle]=\"{ 'border-radius': showRound ? '5px' : '0' }\" [ngClass]=\"item.isSelected ? 'selected' : ''\" (click)=\"optionClicked(item)\">\r\n <div class=\"status {{item['className']}}\" [saMenu]=\"item?.subMenu\">\r\n <sa-status-dot *ngIf=\"item.statusDot\" [config]=\"item?.statusDot\"></sa-status-dot>\r\n <sa-icon class=\"flex\" *ngIf=\"item.icon\" [icon]=\"item?.icon?.icon\" [iconPath]=\"item['icon']?.iconPath\" [iconUrl]=\"item['icon']?.iconUrl\" [size]=\"item['icon']?.size\" [customClass]=\"item['icon']?.customClass\"></sa-icon>\r\n <span class=\"sa-groupItem-lable\" >{{item.label}}</span>\r\n <div *ngIf=\"item?.subMenu\" class=\"flex ml-auto\">\r\n <sa-icon [icon]=\"'rightChevronOutlined'\" class=\"flex\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n </div>\r\n <!-- Section for showing chips if chips are available in object -->\r\n <div *ngIf=\"item.chips\" class=\"tags\">\r\n @for (itm of item.chips; track $index) {\r\n <sa-chip *ngIf=\"itm.text\" [type]=\"itm.type\" [state]=\"itm.state\" [filling]=\"itm.filling\"\r\n [text]=\"itm.text\"></sa-chip>\r\n <!-- <span [ngClass]=\"itm.status == 'active' ? 'tag-active' : 'tag-inactive'\" class=\"\">{{itm.label}}</span> -->\r\n }\r\n </div>\r\n</div>\r\n", styles: [".sa-menu-item{padding:12px}.sa-menu-item:hover{background-color:var(--primary-500)}.sa-menu-item:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.sa-menu-item:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.section-item{display:flex;justify-content:space-between;align-items:center}.section-item .status{padding:.75rem}.section-item:hover{background-color:var(--primary-500)}.section-item:hover span{font-weight:500}.selected{background-color:var(--primary-500)}.section-item .tags{display:flex;gap:.25rem}.tag{background-color:#6b46c1;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-active{background-color:#6b46c1!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-inactive{background-color:#d27f2b!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.status{display:flex;align-items:center;gap:.6rem}.status-dot{width:.5rem;height:.5rem;border-radius:50%}.status-active{background-color:#48bb78}.status-inactive{background-color:#f19e4f}hr{border:0;border-top:1px solid #718096;margin-bottom:1rem}.sa-groupItem-lable{cursor:pointer;font-size:14px;font-weight:400}.flex{display:flex}.top{border-top:1px solid #475467}.bottom{border-bottom:1px solid #475467}.ml-auto{margin-left:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i0.forwardRef(() => ChipsComponent), selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: i0.forwardRef(() => HttpClientModule) }, { kind: "component", type: i0.forwardRef(() => IconComponent), selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget"], outputs: ["onClickEvent"] }, { kind: "component", type: i0.forwardRef(() => StatusDotComponent), selector: "sa-status-dot", inputs: ["config"] }, { kind: "directive", type: i0.forwardRef(() => MenuDirective), selector: "[saMenu]", inputs: ["saMenuRef", "saMenu", "saManuPosition"], outputs: ["onMenuEvent", "onEvent", "onAttached", "onDetached"] }] }); }
28
28
  }
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SAMenuItemComponent, decorators: [{
30
30
  type: Component,
31
31
  args: [{ selector: 'sa-menu-item', standalone: true, imports: [CommonModule, ChipsComponent, HttpClientModule, IconComponent, StatusDotComponent,
32
32
  forwardRef(() => MenuDirective)
33
- ], providers: [IconService], template: "<!-- <div mat-menu-item class=\"sa-menu-item\">\r\n <span>{{item.label}}</span>\r\n</div> -->\r\n\r\n<div class=\"section-item {{item?.sepratorPosition}}\" [ngStyle]=\"{ 'border-radius': showRound ? '5px' : '0' }\" [ngClass]=\"item.isSelected ? 'selected' : ''\" (click)=\"optionClicked(item)\">\r\n <div class=\"status\" [saMenu]=\"item?.subMenu\">\r\n <sa-status-dot *ngIf=\"item.statusDot\" [config]=\"item?.statusDot\"></sa-status-dot>\r\n <sa-icon class=\"flex\" *ngIf=\"item.icon\" [icon]=\"item?.icon?.icon\" [iconPath]=\"item['icon']?.iconPath\" [iconUrl]=\"item['icon']?.iconUrl\" [size]=\"item['icon']?.size\" [customClass]=\"item['icon']?.customClass\"></sa-icon>\r\n <span class=\"sa-groupItem-lable\" >{{item.label}}</span>\r\n <div *ngIf=\"item?.subMenu\">\r\n <sa-icon [icon]=\"'rightChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n </div>\r\n <!-- Section for showing chips if chips are available in object -->\r\n <div *ngIf=\"item.chips\" class=\"tags\">\r\n @for (itm of item.chips; track $index) {\r\n <sa-chip *ngIf=\"itm.text\" [type]=\"itm.type\" [state]=\"itm.state\" [filling]=\"itm.filling\"\r\n [text]=\"itm.text\"></sa-chip>\r\n <!-- <span [ngClass]=\"itm.status == 'active' ? 'tag-active' : 'tag-inactive'\" class=\"\">{{itm.label}}</span> -->\r\n }\r\n </div>\r\n</div>\r\n", styles: [".sa-menu-item{padding:12px}.sa-menu-item:hover{background-color:var(--primary-500)}.sa-menu-item:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.sa-menu-item:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.section-item{display:flex;justify-content:space-between;align-items:center;padding:10px}.section-item:hover{background-color:var(--primary-500)}.section-item:hover span{font-weight:500}.selected{background-color:var(--primary-500)}.section-item .tags{display:flex;gap:.25rem}.tag{background-color:#6b46c1;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-active{background-color:#6b46c1!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-inactive{background-color:#d27f2b!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.status{display:flex;align-items:center;gap:.6rem}.status-dot{width:.5rem;height:.5rem;border-radius:50%}.status-active{background-color:#48bb78}.status-inactive{background-color:#f19e4f}hr{border:0;border-top:1px solid #718096;margin-bottom:1rem}.sa-groupItem-lable{cursor:pointer;font-size:14px;font-weight:400}.flex{display:flex}.top{border-top:1px solid #475467}.bottom{border-bottom:1px solid #475467}\n"] }]
33
+ ], providers: [IconService], template: "<!-- <div mat-menu-item class=\"sa-menu-item\">\r\n <span>{{item.label}}</span>\r\n</div> -->\r\n\r\n<div class=\"section-item {{item?.sepratorPosition}}\" [ngStyle]=\"{ 'border-radius': showRound ? '5px' : '0' }\" [ngClass]=\"item.isSelected ? 'selected' : ''\" (click)=\"optionClicked(item)\">\r\n <div class=\"status {{item['className']}}\" [saMenu]=\"item?.subMenu\">\r\n <sa-status-dot *ngIf=\"item.statusDot\" [config]=\"item?.statusDot\"></sa-status-dot>\r\n <sa-icon class=\"flex\" *ngIf=\"item.icon\" [icon]=\"item?.icon?.icon\" [iconPath]=\"item['icon']?.iconPath\" [iconUrl]=\"item['icon']?.iconUrl\" [size]=\"item['icon']?.size\" [customClass]=\"item['icon']?.customClass\"></sa-icon>\r\n <span class=\"sa-groupItem-lable\" >{{item.label}}</span>\r\n <div *ngIf=\"item?.subMenu\" class=\"flex ml-auto\">\r\n <sa-icon [icon]=\"'rightChevronOutlined'\" class=\"flex\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n </div>\r\n <!-- Section for showing chips if chips are available in object -->\r\n <div *ngIf=\"item.chips\" class=\"tags\">\r\n @for (itm of item.chips; track $index) {\r\n <sa-chip *ngIf=\"itm.text\" [type]=\"itm.type\" [state]=\"itm.state\" [filling]=\"itm.filling\"\r\n [text]=\"itm.text\"></sa-chip>\r\n <!-- <span [ngClass]=\"itm.status == 'active' ? 'tag-active' : 'tag-inactive'\" class=\"\">{{itm.label}}</span> -->\r\n }\r\n </div>\r\n</div>\r\n", styles: [".sa-menu-item{padding:12px}.sa-menu-item:hover{background-color:var(--primary-500)}.sa-menu-item:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.sa-menu-item:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.section-item{display:flex;justify-content:space-between;align-items:center}.section-item .status{padding:.75rem}.section-item:hover{background-color:var(--primary-500)}.section-item:hover span{font-weight:500}.selected{background-color:var(--primary-500)}.section-item .tags{display:flex;gap:.25rem}.tag{background-color:#6b46c1;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-active{background-color:#6b46c1!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.tag-inactive{background-color:#d27f2b!important;font-size:.2rem;padding:.25rem .5rem;border-radius:.25rem}.status{display:flex;align-items:center;gap:.6rem}.status-dot{width:.5rem;height:.5rem;border-radius:50%}.status-active{background-color:#48bb78}.status-inactive{background-color:#f19e4f}hr{border:0;border-top:1px solid #718096;margin-bottom:1rem}.sa-groupItem-lable{cursor:pointer;font-size:14px;font-weight:400}.flex{display:flex}.top{border-top:1px solid #475467}.bottom{border-bottom:1px solid #475467}.ml-auto{margin-left:auto}\n"] }]
34
34
  }], propDecorators: { item: [{
35
35
  type: Input,
36
36
  args: ['item']
@@ -43,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
43
43
  type: ViewChild,
44
44
  args: [forwardRef(() => MenuDirective)]
45
45
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvbWVudS9tZW51LWxpc3QvbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvbWVudS9tZW51LWxpc3QvbWVudS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVl0RCxNQUFNLE9BQU8sbUJBQW1CO0lBVmhDO1FBYVksWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0tBZTNEO0lBYkMsMkRBQTJEO0lBRTNELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7WUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFlO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7OEdBakJVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhJQUpuQixDQUFDLFdBQVcsQ0FBQyw2RkFRSSxhQUFhLGlEQ3hCM0MsODRDQXNCQSwreENEVFksWUFBWSwwWUFBRSxjQUFjLCtPQUFDLGdCQUFnQixvREFBRSxhQUFhLDBNQUFFLGtCQUFrQixtR0FDdkUsYUFBYTs7MkZBTXJCLG1CQUFtQjtrQkFWL0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCO3dCQUN4RixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO3FCQUNoQyxhQUNVLENBQUMsV0FBVyxDQUFDOzhCQUtULElBQUk7c0JBQWxCLEtBQUs7dUJBQUMsTUFBTTtnQkFDTyxTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBQ1IsT0FBTztzQkFBaEIsTUFBTTtnQkFDcUMsYUFBYTtzQkFBeEQsU0FBUzt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElNZW51SXRlbSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvbWVudS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNEb3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zdGF0dXMtZG90L3N0YXR1cy1kb3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudURpcmVjdGl2ZSB9IGZyb20gJy4uL21lbnUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLW1lbnUtaXRlbScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGlwc0NvbXBvbmVudCxIdHRwQ2xpZW50TW9kdWxlLCBJY29uQ29tcG9uZW50LCBTdGF0dXNEb3RDb21wb25lbnQsXHJcbiAgICBmb3J3YXJkUmVmKCgpID0+IE1lbnVEaXJlY3RpdmUpIFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbSWNvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZW51LWl0ZW0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNBTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoJ2l0ZW0nKSBpdGVtOiBJTWVudUl0ZW07XHJcbiAgQElucHV0KCdzaG93Um91bmQnKSBzaG93Um91bmQ6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIG9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBNZW51RGlyZWN0aXZlKSkgbWVudURpcmVjdGl2ZTogTWVudURpcmVjdGl2ZTtcclxuICAvLyBAVmlld0NoaWxkKE1lbnVEaXJlY3RpdmUpIG1lbnVEaXJlY3RpdmU/OiBNZW51RGlyZWN0aXZlO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tZW51RGlyZWN0aXZlKSB7XHJcbiAgICAgIHRoaXMubWVudURpcmVjdGl2ZS5vbkV2ZW50LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uRXZlbnQuZW1pdChldmVudCk7IC8vIOKchSByZS1lbWl0IHRvIFNBTWVudUNvbXBvbmVudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wdGlvbkNsaWNrZWQoaXRlbTogSU1lbnVJdGVtKSB7XHJcbiAgICB0aGlzLm9uRXZlbnQuZW1pdCh7IHR5cGU6ICdjbGljaycsIGl0ZW0gfSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPGRpdiBtYXQtbWVudS1pdGVtIGNsYXNzPVwic2EtbWVudS1pdGVtXCI+XHJcbiAgICA8c3Bhbj57e2l0ZW0ubGFiZWx9fTwvc3Bhbj5cclxuPC9kaXY+IC0tPlxyXG5cclxuPGRpdiBjbGFzcz1cInNlY3Rpb24taXRlbSB7e2l0ZW0/LnNlcHJhdG9yUG9zaXRpb259fVwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlci1yYWRpdXMnOiBzaG93Um91bmQgPyAnNXB4JyA6ICcwJyB9XCIgW25nQ2xhc3NdPVwiaXRlbS5pc1NlbGVjdGVkID8gJ3NlbGVjdGVkJyA6ICcnXCIgKGNsaWNrKT1cIm9wdGlvbkNsaWNrZWQoaXRlbSlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXNcIiBbc2FNZW51XT1cIml0ZW0/LnN1Yk1lbnVcIj5cclxuICAgICAgICA8c2Etc3RhdHVzLWRvdCAqbmdJZj1cIml0ZW0uc3RhdHVzRG90XCIgW2NvbmZpZ109XCJpdGVtPy5zdGF0dXNEb3RcIj48L3NhLXN0YXR1cy1kb3Q+XHJcbiAgICAgICAgPHNhLWljb24gY2xhc3M9XCJmbGV4XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbaWNvbl09XCJpdGVtPy5pY29uPy5pY29uXCIgIFtpY29uUGF0aF09XCJpdGVtWydpY29uJ10/Lmljb25QYXRoXCIgW2ljb25VcmxdPVwiaXRlbVsnaWNvbiddPy5pY29uVXJsXCIgW3NpemVdPVwiaXRlbVsnaWNvbiddPy5zaXplXCIgW2N1c3RvbUNsYXNzXT1cIml0ZW1bJ2ljb24nXT8uY3VzdG9tQ2xhc3NcIj48L3NhLWljb24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYS1ncm91cEl0ZW0tbGFibGVcIiA+e3tpdGVtLmxhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnN1Yk1lbnVcIj5cclxuICAgICAgICAgICAgPHNhLWljb24gW2ljb25dPVwiJ3JpZ2h0Q2hldnJvbk91dGxpbmVkJ1wiIFtzaXplXT1cIicyMCdcIj48L3NhLWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gU2VjdGlvbiBmb3Igc2hvd2luZyBjaGlwcyBpZiBjaGlwcyBhcmUgYXZhaWxhYmxlIGluIG9iamVjdCAgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlwc1wiIGNsYXNzPVwidGFnc1wiPlxyXG4gICAgICAgIEBmb3IgKGl0bSBvZiBpdGVtLmNoaXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8c2EtY2hpcCAqbmdJZj1cIml0bS50ZXh0XCIgW3R5cGVdPVwiaXRtLnR5cGVcIiBbc3RhdGVdPVwiaXRtLnN0YXRlXCIgW2ZpbGxpbmddPVwiaXRtLmZpbGxpbmdcIlxyXG4gICAgICAgICAgICBbdGV4dF09XCJpdG0udGV4dFwiPjwvc2EtY2hpcD5cclxuICAgICAgICA8IS0tIDxzcGFuIFtuZ0NsYXNzXT1cIml0bS5zdGF0dXMgPT0gJ2FjdGl2ZScgPyAndGFnLWFjdGl2ZScgOiAndGFnLWluYWN0aXZlJ1wiIGNsYXNzPVwiXCI+e3tpdG0ubGFiZWx9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvbWVudS9tZW51LWxpc3QvbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudC1saWJyYXJ5L3NyYy9saWIvbWVudS9tZW51LWxpc3QvbWVudS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVl0RCxNQUFNLE9BQU8sbUJBQW1CO0lBVmhDO1FBYVksWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0tBZTNEO0lBYkMsMkRBQTJEO0lBRTNELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywrQkFBK0I7WUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFlO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7OEdBakJVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhJQUpuQixDQUFDLFdBQVcsQ0FBQyw2RkFRSSxhQUFhLGlEQ3hCM0MsMDhDQXNCQSxpMUNEVFksWUFBWSwwWUFBRSxjQUFjLCtPQUFDLGdCQUFnQixvREFBRSxhQUFhLDBNQUFFLGtCQUFrQixtR0FDdkUsYUFBYTs7MkZBTXJCLG1CQUFtQjtrQkFWL0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCO3dCQUN4RixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO3FCQUNoQyxhQUNVLENBQUMsV0FBVyxDQUFDOzhCQUtULElBQUk7c0JBQWxCLEtBQUs7dUJBQUMsTUFBTTtnQkFDTyxTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBQ1IsT0FBTztzQkFBaEIsTUFBTTtnQkFDcUMsYUFBYTtzQkFBeEQsU0FBUzt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hpcHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jaGlwcy9jaGlwcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElNZW51SXRlbSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvbWVudS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNEb3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zdGF0dXMtZG90L3N0YXR1cy1kb3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudURpcmVjdGl2ZSB9IGZyb20gJy4uL21lbnUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhLW1lbnUtaXRlbScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGlwc0NvbXBvbmVudCxIdHRwQ2xpZW50TW9kdWxlLCBJY29uQ29tcG9uZW50LCBTdGF0dXNEb3RDb21wb25lbnQsXHJcbiAgICBmb3J3YXJkUmVmKCgpID0+IE1lbnVEaXJlY3RpdmUpIFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbSWNvblNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZW51LWl0ZW0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNBTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoJ2l0ZW0nKSBpdGVtOiBJTWVudUl0ZW07XHJcbiAgQElucHV0KCdzaG93Um91bmQnKSBzaG93Um91bmQ6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIG9uRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBNZW51RGlyZWN0aXZlKSkgbWVudURpcmVjdGl2ZTogTWVudURpcmVjdGl2ZTtcclxuICAvLyBAVmlld0NoaWxkKE1lbnVEaXJlY3RpdmUpIG1lbnVEaXJlY3RpdmU/OiBNZW51RGlyZWN0aXZlO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tZW51RGlyZWN0aXZlKSB7XHJcbiAgICAgIHRoaXMubWVudURpcmVjdGl2ZS5vbkV2ZW50LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uRXZlbnQuZW1pdChldmVudCk7IC8vIOKchSByZS1lbWl0IHRvIFNBTWVudUNvbXBvbmVudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wdGlvbkNsaWNrZWQoaXRlbTogSU1lbnVJdGVtKSB7XHJcbiAgICB0aGlzLm9uRXZlbnQuZW1pdCh7IHR5cGU6ICdjbGljaycsIGl0ZW0gfSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPGRpdiBtYXQtbWVudS1pdGVtIGNsYXNzPVwic2EtbWVudS1pdGVtXCI+XHJcbiAgICA8c3Bhbj57e2l0ZW0ubGFiZWx9fTwvc3Bhbj5cclxuPC9kaXY+IC0tPlxyXG5cclxuPGRpdiBjbGFzcz1cInNlY3Rpb24taXRlbSB7e2l0ZW0/LnNlcHJhdG9yUG9zaXRpb259fVwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlci1yYWRpdXMnOiBzaG93Um91bmQgPyAnNXB4JyA6ICcwJyB9XCIgW25nQ2xhc3NdPVwiaXRlbS5pc1NlbGVjdGVkID8gJ3NlbGVjdGVkJyA6ICcnXCIgKGNsaWNrKT1cIm9wdGlvbkNsaWNrZWQoaXRlbSlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMge3tpdGVtWydjbGFzc05hbWUnXX19XCIgW3NhTWVudV09XCJpdGVtPy5zdWJNZW51XCI+XHJcbiAgICAgICAgPHNhLXN0YXR1cy1kb3QgKm5nSWY9XCJpdGVtLnN0YXR1c0RvdFwiIFtjb25maWddPVwiaXRlbT8uc3RhdHVzRG90XCI+PC9zYS1zdGF0dXMtZG90PlxyXG4gICAgICAgIDxzYS1pY29uIGNsYXNzPVwiZmxleFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW2ljb25dPVwiaXRlbT8uaWNvbj8uaWNvblwiICBbaWNvblBhdGhdPVwiaXRlbVsnaWNvbiddPy5pY29uUGF0aFwiIFtpY29uVXJsXT1cIml0ZW1bJ2ljb24nXT8uaWNvblVybFwiIFtzaXplXT1cIml0ZW1bJ2ljb24nXT8uc2l6ZVwiIFtjdXN0b21DbGFzc109XCJpdGVtWydpY29uJ10/LmN1c3RvbUNsYXNzXCI+PC9zYS1pY29uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2EtZ3JvdXBJdGVtLWxhYmxlXCIgPnt7aXRlbS5sYWJlbH19PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5zdWJNZW51XCIgY2xhc3M9XCJmbGV4IG1sLWF1dG9cIj5cclxuICAgICAgICAgICAgPHNhLWljb24gW2ljb25dPVwiJ3JpZ2h0Q2hldnJvbk91dGxpbmVkJ1wiIGNsYXNzPVwiZmxleFwiIFtzaXplXT1cIicyMCdcIj48L3NhLWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gU2VjdGlvbiBmb3Igc2hvd2luZyBjaGlwcyBpZiBjaGlwcyBhcmUgYXZhaWxhYmxlIGluIG9iamVjdCAgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlwc1wiIGNsYXNzPVwidGFnc1wiPlxyXG4gICAgICAgIEBmb3IgKGl0bSBvZiBpdGVtLmNoaXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8c2EtY2hpcCAqbmdJZj1cIml0bS50ZXh0XCIgW3R5cGVdPVwiaXRtLnR5cGVcIiBbc3RhdGVdPVwiaXRtLnN0YXRlXCIgW2ZpbGxpbmddPVwiaXRtLmZpbGxpbmdcIlxyXG4gICAgICAgICAgICBbdGV4dF09XCJpdG0udGV4dFwiPjwvc2EtY2hpcD5cclxuICAgICAgICA8IS0tIDxzcGFuIFtuZ0NsYXNzXT1cIml0bS5zdGF0dXMgPT0gJ2FjdGl2ZScgPyAndGFnLWFjdGl2ZScgOiAndGFnLWluYWN0aXZlJ1wiIGNsYXNzPVwiXCI+e3tpdG0ubGFiZWx9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=