mis-crystal-design-system 18.0.13-test-12 → 18.0.13-test-13

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.
@@ -6,73 +6,75 @@ const _c0 = a0 => ({ "disabled": a0 });
6
6
  function ActionsCellComponent_div_1_div_1_img_1_Template(rf, ctx) { if (rf & 1) {
7
7
  i0.ɵɵelement(0, "img", 9);
8
8
  } if (rf & 2) {
9
- const item_r1 = i0.ɵɵnextContext().$implicit;
10
- i0.ɵɵproperty("src", item_r1.icon, i0.ɵɵsanitizeUrl)("alt", item_r1.label);
9
+ const item_r2 = i0.ɵɵnextContext().$implicit;
10
+ i0.ɵɵproperty("src", item_r2.icon, i0.ɵɵsanitizeUrl)("alt", item_r2.label);
11
11
  } }
12
12
  function ActionsCellComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
13
+ const _r1 = i0.ɵɵgetCurrentView();
13
14
  i0.ɵɵelementStart(0, "div", 7);
15
+ i0.ɵɵlistener("click", function ActionsCellComponent_div_1_div_1_Template_div_click_0_listener($event) { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onActionClick(item_r2, $event)); });
14
16
  i0.ɵɵtemplate(1, ActionsCellComponent_div_1_div_1_img_1_Template, 1, 2, "img", 8);
15
17
  i0.ɵɵelementEnd();
16
18
  } if (rf & 2) {
17
- const item_r1 = ctx.$implicit;
18
- const ctx_r1 = i0.ɵɵnextContext(2);
19
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c0, ctx_r1.actionPermissions && ctx_r1.actionPermissions.hasOwnProperty(item_r1.value) && ctx_r1.actionPermissions[item_r1.value] === false));
19
+ const item_r2 = ctx.$implicit;
20
+ const ctx_r2 = i0.ɵɵnextContext(2);
21
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c0, ctx_r2.isDisabled(item_r2)));
20
22
  i0.ɵɵadvance();
21
- i0.ɵɵproperty("ngIf", ctx_r1.isSvgFile(item_r1.icon));
23
+ i0.ɵɵproperty("ngIf", ctx_r2.isSvgFile(item_r2.icon));
22
24
  } }
23
25
  function ActionsCellComponent_div_1_Template(rf, ctx) { if (rf & 1) {
24
26
  i0.ɵɵelementStart(0, "div", 5);
25
27
  i0.ɵɵtemplate(1, ActionsCellComponent_div_1_div_1_Template, 2, 4, "div", 6);
26
28
  i0.ɵɵelementEnd();
27
29
  } if (rf & 2) {
28
- const ctx_r1 = i0.ɵɵnextContext();
30
+ const ctx_r2 = i0.ɵɵnextContext();
29
31
  i0.ɵɵadvance();
30
- i0.ɵɵproperty("ngForOf", ctx_r1.actionItems)("ngForTrackBy", ctx_r1.trackByAction);
32
+ i0.ɵɵproperty("ngForOf", ctx_r2.actionItems)("ngForTrackBy", ctx_r2.trackByAction);
31
33
  } }
32
34
  function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_span_1_Template(rf, ctx) { if (rf & 1) {
33
35
  i0.ɵɵelementStart(0, "span", 27);
34
36
  i0.ɵɵelement(1, "img", 28);
35
37
  i0.ɵɵelementEnd();
36
38
  } if (rf & 2) {
37
- const item_r5 = i0.ɵɵnextContext(2).$implicit;
39
+ const item_r6 = i0.ɵɵnextContext(2).$implicit;
38
40
  i0.ɵɵadvance();
39
- i0.ɵɵproperty("src", item_r5.icon, i0.ɵɵsanitizeUrl);
41
+ i0.ɵɵproperty("src", item_r6.icon, i0.ɵɵsanitizeUrl);
40
42
  } }
41
43
  function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
42
44
  i0.ɵɵelementStart(0, "span", 27);
43
45
  i0.ɵɵelement(1, "img", 28);
44
46
  i0.ɵɵelementEnd();
45
47
  } if (rf & 2) {
46
- const child_r7 = i0.ɵɵnextContext().$implicit;
48
+ const child_r8 = i0.ɵɵnextContext().$implicit;
47
49
  i0.ɵɵadvance();
48
- i0.ɵɵproperty("src", child_r7.icon, i0.ɵɵsanitizeUrl);
50
+ i0.ɵɵproperty("src", child_r8.icon, i0.ɵɵsanitizeUrl);
49
51
  } }
50
52
  function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_div_1_Template(rf, ctx) { if (rf & 1) {
51
- const _r6 = i0.ɵɵgetCurrentView();
53
+ const _r7 = i0.ɵɵgetCurrentView();
52
54
  i0.ɵɵelementStart(0, "div", 19);
53
- i0.ɵɵlistener("click", function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_div_1_Template_div_click_0_listener($event) { const child_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.onDropdownItemClick(child_r7, $event)); });
55
+ i0.ɵɵlistener("click", function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_div_1_Template_div_click_0_listener($event) { const child_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.onDropdownItemClick(child_r8, $event)); });
54
56
  i0.ɵɵtemplate(1, ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_div_1_span_1_Template, 2, 1, "span", 21);
55
57
  i0.ɵɵelementStart(2, "span", 22);
56
58
  i0.ɵɵtext(3);
57
59
  i0.ɵɵelementEnd()();
58
60
  } if (rf & 2) {
59
- const child_r7 = ctx.$implicit;
60
- const ctx_r1 = i0.ɵɵnextContext(6);
61
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, ctx_r1.actionPermissions && ctx_r1.actionPermissions.hasOwnProperty(child_r7.value) && ctx_r1.actionPermissions[child_r7.value] === false));
61
+ const child_r8 = ctx.$implicit;
62
+ const ctx_r2 = i0.ɵɵnextContext(6);
63
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, ctx_r2.isDisabled(child_r8)));
62
64
  i0.ɵɵadvance();
63
- i0.ɵɵproperty("ngIf", child_r7.icon && ctx_r1.isSvgFile(child_r7.icon));
65
+ i0.ɵɵproperty("ngIf", child_r8.icon && ctx_r2.isSvgFile(child_r8.icon));
64
66
  i0.ɵɵadvance(2);
65
- i0.ɵɵtextInterpolate(child_r7.label);
67
+ i0.ɵɵtextInterpolate(child_r8.label);
66
68
  } }
67
69
  function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_Template(rf, ctx) { if (rf & 1) {
68
70
  i0.ɵɵelementStart(0, "div", 29);
69
71
  i0.ɵɵtemplate(1, ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_div_1_Template, 4, 5, "div", 18);
70
72
  i0.ɵɵelementEnd();
71
73
  } if (rf & 2) {
72
- const item_r5 = i0.ɵɵnextContext(2).$implicit;
73
- i0.ɵɵproperty("ngClass", item_r5.submenuAlign);
74
+ const item_r6 = i0.ɵɵnextContext(2).$implicit;
75
+ i0.ɵɵproperty("ngClass", item_r6.submenuAlign);
74
76
  i0.ɵɵadvance();
75
- i0.ɵɵproperty("ngForOf", item_r5.children);
77
+ i0.ɵɵproperty("ngForOf", item_r6.children);
76
78
  } }
77
79
  function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
78
80
  i0.ɵɵelementContainerStart(0);
@@ -88,23 +90,23 @@ function ActionsCellComponent_div_2_div_6_div_1_ng_container_1_Template(rf, ctx)
88
90
  i0.ɵɵtemplate(7, ActionsCellComponent_div_2_div_6_div_1_ng_container_1_div_7_Template, 2, 2, "div", 26);
89
91
  i0.ɵɵelementContainerEnd();
90
92
  } if (rf & 2) {
91
- const item_r5 = i0.ɵɵnextContext().$implicit;
92
- const ctx_r1 = i0.ɵɵnextContext(3);
93
+ const item_r6 = i0.ɵɵnextContext().$implicit;
94
+ const ctx_r2 = i0.ɵɵnextContext(3);
93
95
  i0.ɵɵadvance();
94
- i0.ɵɵproperty("ngIf", item_r5.icon && ctx_r1.isSvgFile(item_r5.icon));
96
+ i0.ɵɵproperty("ngIf", item_r6.icon && ctx_r2.isSvgFile(item_r6.icon));
95
97
  i0.ɵɵadvance(2);
96
- i0.ɵɵtextInterpolate(item_r5.label);
98
+ i0.ɵɵtextInterpolate(item_r6.label);
97
99
  i0.ɵɵadvance(4);
98
- i0.ɵɵproperty("ngIf", item_r5.showSubmenu);
100
+ i0.ɵɵproperty("ngIf", item_r6.showSubmenu);
99
101
  } }
100
102
  function ActionsCellComponent_div_2_div_6_div_1_ng_template_2_span_0_Template(rf, ctx) { if (rf & 1) {
101
103
  i0.ɵɵelementStart(0, "span", 27);
102
104
  i0.ɵɵelement(1, "img", 28);
103
105
  i0.ɵɵelementEnd();
104
106
  } if (rf & 2) {
105
- const item_r5 = i0.ɵɵnextContext(2).$implicit;
107
+ const item_r6 = i0.ɵɵnextContext(2).$implicit;
106
108
  i0.ɵɵadvance();
107
- i0.ɵɵproperty("src", item_r5.icon, i0.ɵɵsanitizeUrl);
109
+ i0.ɵɵproperty("src", item_r6.icon, i0.ɵɵsanitizeUrl);
108
110
  } }
109
111
  function ActionsCellComponent_div_2_div_6_div_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
110
112
  i0.ɵɵtemplate(0, ActionsCellComponent_div_2_div_6_div_1_ng_template_2_span_0_Template, 2, 1, "span", 21);
@@ -112,40 +114,40 @@ function ActionsCellComponent_div_2_div_6_div_1_ng_template_2_Template(rf, ctx)
112
114
  i0.ɵɵtext(2);
113
115
  i0.ɵɵelementEnd();
114
116
  } if (rf & 2) {
115
- const item_r5 = i0.ɵɵnextContext().$implicit;
116
- const ctx_r1 = i0.ɵɵnextContext(3);
117
- i0.ɵɵproperty("ngIf", item_r5.icon && ctx_r1.isSvgFile(item_r5.icon));
117
+ const item_r6 = i0.ɵɵnextContext().$implicit;
118
+ const ctx_r2 = i0.ɵɵnextContext(3);
119
+ i0.ɵɵproperty("ngIf", item_r6.icon && ctx_r2.isSvgFile(item_r6.icon));
118
120
  i0.ɵɵadvance(2);
119
- i0.ɵɵtextInterpolate(item_r5.label);
121
+ i0.ɵɵtextInterpolate(item_r6.label);
120
122
  } }
121
123
  function ActionsCellComponent_div_2_div_6_div_1_Template(rf, ctx) { if (rf & 1) {
122
- const _r4 = i0.ɵɵgetCurrentView();
124
+ const _r5 = i0.ɵɵgetCurrentView();
123
125
  i0.ɵɵelementStart(0, "div", 19);
124
- i0.ɵɵlistener("click", function ActionsCellComponent_div_2_div_6_div_1_Template_div_click_0_listener($event) { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onDropdownItemClick(item_r5, $event)); });
126
+ i0.ɵɵlistener("click", function ActionsCellComponent_div_2_div_6_div_1_Template_div_click_0_listener($event) { const item_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onDropdownItemClick(item_r6, $event)); });
125
127
  i0.ɵɵtemplate(1, ActionsCellComponent_div_2_div_6_div_1_ng_container_1_Template, 8, 3, "ng-container", 20)(2, ActionsCellComponent_div_2_div_6_div_1_ng_template_2_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
126
128
  i0.ɵɵelementEnd();
127
129
  } if (rf & 2) {
128
- const item_r5 = ctx.$implicit;
129
- const noChildren_r8 = i0.ɵɵreference(3);
130
- const ctx_r1 = i0.ɵɵnextContext(3);
131
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, ctx_r1.actionPermissions && ctx_r1.actionPermissions.hasOwnProperty(item_r5.value) && ctx_r1.actionPermissions[item_r5.value] === false));
130
+ const item_r6 = ctx.$implicit;
131
+ const noChildren_r9 = i0.ɵɵreference(3);
132
+ const ctx_r2 = i0.ɵɵnextContext(3);
133
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, ctx_r2.isDisabled(item_r6)));
132
134
  i0.ɵɵadvance();
133
- i0.ɵɵproperty("ngIf", item_r5.children == null ? null : item_r5.children.length)("ngIfElse", noChildren_r8);
135
+ i0.ɵɵproperty("ngIf", item_r6.children == null ? null : item_r6.children.length)("ngIfElse", noChildren_r9);
134
136
  } }
135
137
  function ActionsCellComponent_div_2_div_6_Template(rf, ctx) { if (rf & 1) {
136
138
  i0.ɵɵelementStart(0, "div", 17);
137
139
  i0.ɵɵtemplate(1, ActionsCellComponent_div_2_div_6_div_1_Template, 4, 5, "div", 18);
138
140
  i0.ɵɵelementEnd();
139
141
  } if (rf & 2) {
140
- const ctx_r1 = i0.ɵɵnextContext(2);
141
- i0.ɵɵproperty("ngClass", ctx_r1.menuAlign);
142
+ const ctx_r2 = i0.ɵɵnextContext(2);
143
+ i0.ɵɵproperty("ngClass", ctx_r2.menuAlign);
142
144
  i0.ɵɵadvance();
143
- i0.ɵɵproperty("ngForOf", ctx_r1.actionItems);
145
+ i0.ɵɵproperty("ngForOf", ctx_r2.actionItems);
144
146
  } }
145
147
  function ActionsCellComponent_div_2_Template(rf, ctx) { if (rf & 1) {
146
- const _r3 = i0.ɵɵgetCurrentView();
148
+ const _r4 = i0.ɵɵgetCurrentView();
147
149
  i0.ɵɵelementStart(0, "div", 10)(1, "div", 11);
148
- i0.ɵɵlistener("click", function ActionsCellComponent_div_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleDropdown($event)); });
150
+ i0.ɵɵlistener("click", function ActionsCellComponent_div_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleDropdown($event)); });
149
151
  i0.ɵɵnamespaceSVG();
150
152
  i0.ɵɵelementStart(2, "svg", 12);
151
153
  i0.ɵɵelement(3, "circle", 13)(4, "circle", 14)(5, "circle", 15);
@@ -153,19 +155,19 @@ function ActionsCellComponent_div_2_Template(rf, ctx) { if (rf & 1) {
153
155
  i0.ɵɵtemplate(6, ActionsCellComponent_div_2_div_6_Template, 2, 2, "div", 16);
154
156
  i0.ɵɵelementEnd();
155
157
  } if (rf & 2) {
156
- const ctx_r1 = i0.ɵɵnextContext();
158
+ const ctx_r2 = i0.ɵɵnextContext();
157
159
  i0.ɵɵadvance(6);
158
- i0.ɵɵproperty("ngIf", ctx_r1.isDropdownOpen);
160
+ i0.ɵɵproperty("ngIf", ctx_r2.isDropdownOpen);
159
161
  } }
160
162
  function ActionsCellComponent_div_3_Template(rf, ctx) { if (rf & 1) {
161
- const _r9 = i0.ɵɵgetCurrentView();
163
+ const _r10 = i0.ɵɵgetCurrentView();
162
164
  i0.ɵɵelementStart(0, "div", 30)(1, "mis-checkbox", 31);
163
- i0.ɵɵlistener("valueChange", function ActionsCellComponent_div_3_Template_mis_checkbox_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCheckboxChange($event)); });
165
+ i0.ɵɵlistener("valueChange", function ActionsCellComponent_div_3_Template_mis_checkbox_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCheckboxChange($event)); });
164
166
  i0.ɵɵelementEnd()();
165
167
  } if (rf & 2) {
166
- const ctx_r1 = i0.ɵɵnextContext();
168
+ const ctx_r2 = i0.ɵɵnextContext();
167
169
  i0.ɵɵadvance();
168
- i0.ɵɵproperty("checked", ctx_r1.isChecked)("disabled", ctx_r1.actionPermissions && ctx_r1.actionPermissions.hasOwnProperty("checkbox") && ctx_r1.actionPermissions["checkbox"] === false);
170
+ i0.ɵɵproperty("checked", ctx_r2.isChecked);
169
171
  } }
170
172
  export class ActionsCellComponent {
171
173
  constructor() {
@@ -204,9 +206,8 @@ export class ActionsCellComponent {
204
206
  onActionClick(item, event) {
205
207
  event.stopPropagation();
206
208
  // Check permissions before executing action
207
- if (this.actionPermissions && this.actionPermissions.hasOwnProperty(item.value) && this.actionPermissions[item.value] === false) {
209
+ if (this.isDisabled(item))
208
210
  return;
209
- }
210
211
  // Execute action only if permitted
211
212
  if (item.action) {
212
213
  item.action(this.data);
@@ -233,15 +234,11 @@ export class ActionsCellComponent {
233
234
  this.actionItems.forEach((item) => item.showSubmenu = false);
234
235
  }
235
236
  onDropdownItemClick(item, event) {
237
+ console.log("1:", event, item);
236
238
  event.stopPropagation();
237
- // Check permissions first
238
- if (this.actionPermissions && this.actionPermissions.hasOwnProperty(item.value) && this.actionPermissions[item.value] === false) {
239
- console.log('Action blocked: insufficient permissions');
240
- return; // Don't close dropdown or execute action
241
- }
242
- if (item.disabled)
239
+ if (this.isDisabled(item))
243
240
  return;
244
- if (item.children) {
241
+ if (item.children.length) {
245
242
  // Toggle submenu
246
243
  item.showSubmenu = !item.showSubmenu;
247
244
  // Optionally close other submenus
@@ -259,19 +256,21 @@ export class ActionsCellComponent {
259
256
  }
260
257
  }
261
258
  onCheckboxChange(event) {
262
- // Check permissions before allowing change
263
- if (this.actionPermissions && this.actionPermissions.hasOwnProperty('checkbox') && this.actionPermissions['checkbox'] === false) {
264
- return; // Don't allow change if disabled
265
- }
266
259
  this.isChecked = event.value;
267
260
  this.actionClick.emit({ isChecked: this.isChecked, data: this.data });
268
261
  }
262
+ isDisabled(item) {
263
+ if (typeof item.disable === 'function') {
264
+ return item.disable(this.data);
265
+ }
266
+ return false;
267
+ }
269
268
  static { this.ɵfac = function ActionsCellComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionsCellComponent)(); }; }
270
269
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionsCellComponent, selectors: [["mis-actions-cell"]], hostBindings: function ActionsCellComponent_HostBindings(rf, ctx) { if (rf & 1) {
271
270
  i0.ɵɵlistener("click", function ActionsCellComponent_click_HostBindingHandler() { return ctx.onDocumentClick(); }, false, i0.ɵɵresolveDocument);
272
- } }, inputs: { data: "data", actionItems: "actionItems", actionType: "actionType", dropdownIcon: "dropdownIcon", submenuAlign: "submenuAlign", menuAlign: "menuAlign", actionPermissions: "actionPermissions", isChecked: "isChecked", style: "style" }, outputs: { checkboxChange: "checkboxChange", actionClick: "actionClick" }, decls: 4, vars: 4, consts: [["noChildren", ""], [1, "actions-cell-container", 3, "ngStyle"], ["class", "inline-actions", 4, "ngIf"], ["class", "dropdown-actions", 4, "ngIf"], ["class", "checkbox-actions", 4, "ngIf"], [1, "inline-actions"], ["class", "action-item", 3, "ngClass", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "action-item", 3, "ngClass"], ["class", "action-icon-svg", 3, "src", "alt", 4, "ngIf"], [1, "action-icon-svg", 3, "src", "alt"], [1, "dropdown-actions"], ["title", "More actions", 1, "dropdown-trigger", 3, "click"], ["width", "20", "height", "20", "viewBox", "0 0 20 20", "fill", "none"], ["cx", "10", "cy", "4", "r", "2", "fill", "#333"], ["cx", "10", "cy", "10", "r", "2", "fill", "#333"], ["cx", "10", "cy", "16", "r", "2", "fill", "#333"], ["class", "dropdown-menu", 3, "ngClass", 4, "ngIf"], [1, "dropdown-menu", 3, "ngClass"], ["class", "dropdown-menu-item", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "dropdown-menu-item", 3, "click", "ngClass"], [4, "ngIf", "ngIfElse"], ["class", "dropdown-icon", 4, "ngIf"], [1, "dropdown-label"], [1, "submenu-arrow"], ["width", "20", "height", "20", "viewBox", "0 0 24 24", "fill", "none"], ["d", "M9 6L15 12L9 18", "stroke", "#0D1321", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], ["class", "dropdown-submenu", 3, "ngClass", 4, "ngIf"], [1, "dropdown-icon"], [3, "src"], [1, "dropdown-submenu", 3, "ngClass"], [1, "checkbox-actions"], [3, "valueChange", "checked", "disabled"]], template: function ActionsCellComponent_Template(rf, ctx) { if (rf & 1) {
271
+ } }, inputs: { data: "data", actionItems: "actionItems", actionType: "actionType", dropdownIcon: "dropdownIcon", submenuAlign: "submenuAlign", menuAlign: "menuAlign", isChecked: "isChecked", style: "style" }, outputs: { checkboxChange: "checkboxChange", actionClick: "actionClick" }, decls: 4, vars: 4, consts: [["noChildren", ""], [1, "actions-cell-container", 3, "ngStyle"], ["class", "inline-actions", 4, "ngIf"], ["class", "dropdown-actions", 4, "ngIf"], ["class", "checkbox-actions", 4, "ngIf"], [1, "inline-actions"], ["class", "action-item", 3, "ngClass", "click", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "action-item", 3, "click", "ngClass"], ["class", "action-icon-svg", 3, "src", "alt", 4, "ngIf"], [1, "action-icon-svg", 3, "src", "alt"], [1, "dropdown-actions"], ["title", "More actions", 1, "dropdown-trigger", 3, "click"], ["width", "20", "height", "20", "viewBox", "0 0 20 20", "fill", "none"], ["cx", "10", "cy", "4", "r", "2", "fill", "#333"], ["cx", "10", "cy", "10", "r", "2", "fill", "#333"], ["cx", "10", "cy", "16", "r", "2", "fill", "#333"], ["class", "dropdown-menu", 3, "ngClass", 4, "ngIf"], [1, "dropdown-menu", 3, "ngClass"], ["class", "dropdown-menu-item", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "dropdown-menu-item", 3, "click", "ngClass"], [4, "ngIf", "ngIfElse"], ["class", "dropdown-icon", 4, "ngIf"], [1, "dropdown-label"], [1, "submenu-arrow"], ["width", "20", "height", "20", "viewBox", "0 0 24 24", "fill", "none"], ["d", "M9 6L15 12L9 18", "stroke", "#0D1321", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], ["class", "dropdown-submenu", 3, "ngClass", 4, "ngIf"], [1, "dropdown-icon"], [3, "src"], [1, "dropdown-submenu", 3, "ngClass"], [1, "checkbox-actions"], [3, "valueChange", "checked"]], template: function ActionsCellComponent_Template(rf, ctx) { if (rf & 1) {
273
272
  i0.ɵɵelementStart(0, "div", 1);
274
- i0.ɵɵtemplate(1, ActionsCellComponent_div_1_Template, 2, 2, "div", 2)(2, ActionsCellComponent_div_2_Template, 7, 1, "div", 3)(3, ActionsCellComponent_div_3_Template, 2, 2, "div", 4);
273
+ i0.ɵɵtemplate(1, ActionsCellComponent_div_1_Template, 2, 2, "div", 2)(2, ActionsCellComponent_div_2_Template, 7, 1, "div", 3)(3, ActionsCellComponent_div_3_Template, 2, 1, "div", 4);
275
274
  i0.ɵɵelementEnd();
276
275
  } if (rf & 2) {
277
276
  i0.ɵɵproperty("ngStyle", ctx.containerStyle);
@@ -285,7 +284,7 @@ export class ActionsCellComponent {
285
284
  }
286
285
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionsCellComponent, [{
287
286
  type: Component,
288
- args: [{ selector: 'mis-actions-cell', template: "<div class=\"actions-cell-container\" [ngStyle]=\"containerStyle\">\n <!-- Inline Actions -->\n <div *ngIf=\"actionType === 'inline'\" class=\"inline-actions\">\n <div *ngFor=\"let item of actionItems; trackBy: trackByAction\" class=\"action-item\"\n [ngClass]=\"{ 'disabled': actionPermissions && actionPermissions.hasOwnProperty(item.value) && actionPermissions[item.value] === false }\"> \n <img *ngIf=\"isSvgFile(item.icon)\" [src]=\"item.icon\" [alt]=\"item.label\" class=\"action-icon-svg\" />\n </div>\n </div>\n\n <!-- Dropdown Actions -->\n <div *ngIf=\"actionType === 'dropdown'\" class=\"dropdown-actions\">\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown($event)\" title=\"More actions\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"4\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"#333\" />\n </svg>\n </div>\n\n <div class=\"dropdown-menu\" \n *ngIf=\"isDropdownOpen\" \n [ngClass]=\"menuAlign\"\n >\n <div class=\"dropdown-menu-item\" *ngFor=\"let item of actionItems\" \n (click)=\"onDropdownItemClick(item, $event)\" [ngClass]=\"{ 'disabled': actionPermissions && actionPermissions.hasOwnProperty(item.value) && actionPermissions[item.value] === false }\">\n <ng-container *ngIf=\"item.children?.length; else noChildren\">\n <span class=\"dropdown-icon\" *ngIf=\"item.icon && isSvgFile(item.icon)\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n <span class=\"submenu-arrow\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 6L15 12L9 18\" stroke=\"#0D1321\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n\n <!-- DYNAMIC SUBMENU -->\n <div class=\"dropdown-submenu\"\n [ngClass]=\"item.submenuAlign\"\n *ngIf=\"item.showSubmenu\">\n <div class=\"dropdown-menu-item\" *ngFor=\"let child of item.children\"\n [ngClass]=\"{ 'disabled': actionPermissions && actionPermissions.hasOwnProperty(child.value) && actionPermissions[child.value] === false }\"\n (click)=\"onDropdownItemClick(child, $event)\">\n <span class=\"dropdown-icon\" *ngIf=\"child.icon && isSvgFile(child.icon)\">\n <img [src]=\"child.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ child.label }}</span>\n </div>\n </div>\n </ng-container>\n\n <ng-template #noChildren>\n <span class=\"dropdown-icon\" *ngIf=\"item.icon && isSvgFile(item.icon)\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n </ng-template>\n </div>\n </div>\n </div>\n\n <!-- Checkbox Actions -->\n <div *ngIf=\"actionType === 'checkbox'\" class=\"checkbox-actions\">\n <mis-checkbox \n [checked]=\"isChecked\"\n (valueChange)=\"onCheckboxChange($event)\"\n [disabled]=\"actionPermissions && actionPermissions.hasOwnProperty('checkbox') && actionPermissions['checkbox'] === false\">\n </mis-checkbox>\n </div>\n</div>", styles: [".actions-cell-container{display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:relative;box-sizing:border-box}.inline-actions{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;flex-wrap:nowrap;padding:4px 0;flex-direction:row}.action-item{display:flex;align-items:center;justify-content:center;height:20px;border-radius:4px;cursor:pointer;transition:all .2s ease;background-color:transparent;border:none;outline:none;flex-shrink:0;min-height:20px}.action-item:hover:not(.disabled){background-color:#0000000a;transform:scale(1.05)}.action-item:active:not(.disabled){transform:scale(.95)}.action-item.disabled{opacity:.5;cursor:not-allowed}.action-item.disabled:hover{background-color:transparent;transform:none}.action-icon{font-size:16px;color:#666;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.action-icon-svg{width:18px;height:18px;object-fit:contain;filter:brightness(0) saturate(100%) invert(40%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(.6) contrast(1);flex-shrink:0}.action-icon-svg:hover{filter:brightness(0) saturate(100%) invert(0%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(0) contrast(1)}.dropdown-trigger{cursor:pointer}.dropdown-actions{position:relative}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:center}.dropdown-menu{position:absolute;top:100%;width:232px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;z-index:1000;padding:8px 0}.dropdown-menu.left{right:0!important;left:auto!important}.dropdown-menu.right{left:0!important;right:auto!important}.dropdown-menu-item.disabled{color:#aaa;cursor:not-allowed}.dropdown-menu-item:hover:not(.disabled),.dropdown-menu-item.has-submenu:hover{background:#f5f5f5}.dropdown-menu-item{display:flex;align-items:center;padding:10px 18px;cursor:pointer;font-size:14px;position:relative}.dropdown-menu-item .dropdown-label{flex:1;margin-left:8px}.dropdown-menu-item .submenu-arrow{margin-left:auto;width:16px;height:16px}.submenu-container{position:absolute;top:0;left:100%;margin-left:4px;background:#fff;box-shadow:0 4px 8px #0000001a;border-radius:8px;z-index:1000;white-space:nowrap}.dropdown-submenu{position:absolute;top:0;min-width:132px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;padding:8px 0;z-index:1001}.dropdown-submenu.right{left:100%;margin-left:4px}.dropdown-submenu.left{left:auto;right:100%;background-color:#fff;border:1px solid #ddd;z-index:9999;position:absolute;margin-right:4px}.submenu-arrow{display:flex;align-items:center;margin-left:auto;z-index:9999}.dropdown-icon{display:flex;justify-content:center;align-items:center}.dropdown-menu-item.disabled{color:#181f33;filter:grayscale(100%) opacity(.3);cursor:not-allowed}\n"] }]
287
+ args: [{ selector: 'mis-actions-cell', template: "<div class=\"actions-cell-container\" [ngStyle]=\"containerStyle\">\n <!-- Inline Actions -->\n <div *ngIf=\"actionType === 'inline'\" class=\"inline-actions\">\n <div *ngFor=\"let item of actionItems; trackBy: trackByAction\" class=\"action-item\"\n [ngClass]=\"{ 'disabled': isDisabled(item) }\" (click)=\"onActionClick(item, $event)\"> \n <img *ngIf=\"isSvgFile(item.icon)\" [src]=\"item.icon\" [alt]=\"item.label\" class=\"action-icon-svg\" />\n </div>\n </div>\n\n <!-- Dropdown Actions -->\n <div *ngIf=\"actionType === 'dropdown'\" class=\"dropdown-actions\">\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown($event)\" title=\"More actions\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"4\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"#333\" />\n </svg>\n </div>\n\n <div class=\"dropdown-menu\" \n *ngIf=\"isDropdownOpen\" \n [ngClass]=\"menuAlign\"\n >\n <div class=\"dropdown-menu-item\" *ngFor=\"let item of actionItems\" \n (click)=\"onDropdownItemClick(item, $event)\" [ngClass]=\"{ 'disabled': isDisabled(item)}\">\n <ng-container *ngIf=\"item.children?.length; else noChildren\">\n <span class=\"dropdown-icon\" *ngIf=\"item.icon && isSvgFile(item.icon)\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n <span class=\"submenu-arrow\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 6L15 12L9 18\" stroke=\"#0D1321\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n\n <!-- DYNAMIC SUBMENU -->\n <div class=\"dropdown-submenu\"\n [ngClass]=\"item.submenuAlign\"\n *ngIf=\"item.showSubmenu\">\n <div class=\"dropdown-menu-item\" *ngFor=\"let child of item.children\"\n [ngClass]=\"{ 'disabled': isDisabled(child) }\"\n (click)=\"onDropdownItemClick(child, $event)\">\n <span class=\"dropdown-icon\" *ngIf=\"child.icon && isSvgFile(child.icon)\">\n <img [src]=\"child.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ child.label }}</span>\n </div>\n </div>\n </ng-container>\n\n <ng-template #noChildren>\n <span class=\"dropdown-icon\" *ngIf=\"item.icon && isSvgFile(item.icon)\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n </ng-template>\n </div>\n </div>\n </div>\n\n <!-- Checkbox Actions -->\n <div *ngIf=\"actionType === 'checkbox'\" class=\"checkbox-actions\">\n <mis-checkbox \n [checked]=\"isChecked\"\n (valueChange)=\"onCheckboxChange($event)\">\n </mis-checkbox>\n </div>\n</div>", styles: [".actions-cell-container{display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:relative;box-sizing:border-box}.inline-actions{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;flex-wrap:nowrap;padding:4px 0;flex-direction:row}.action-item{display:flex;align-items:center;justify-content:center;height:20px;border-radius:4px;cursor:pointer;transition:all .2s ease;background-color:transparent;border:none;outline:none;flex-shrink:0;min-height:20px}.action-item:hover:not(.disabled){background-color:#0000000a;transform:scale(1.05)}.action-item:active:not(.disabled){transform:scale(.95)}.action-item.disabled{opacity:.5;cursor:not-allowed}.action-item.disabled:hover{background-color:transparent;transform:none}.action-icon{font-size:16px;color:#666;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.action-icon-svg{width:18px;height:18px;object-fit:contain;filter:brightness(0) saturate(100%) invert(40%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(.6) contrast(1);flex-shrink:0}.action-icon-svg:hover{filter:brightness(0) saturate(100%) invert(0%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(0) contrast(1)}.dropdown-trigger{cursor:pointer}.dropdown-actions{position:relative}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:center}.dropdown-menu{position:absolute;top:100%;width:232px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;z-index:1000;padding:8px 0}.dropdown-menu.left{right:0!important;left:auto!important}.dropdown-menu.right{left:0!important;right:auto!important}.dropdown-menu-item.disabled{color:#aaa;cursor:not-allowed}.dropdown-menu-item:hover:not(.disabled),.dropdown-menu-item.has-submenu:hover{background:#f5f5f5}.dropdown-menu-item{display:flex;align-items:center;padding:10px 18px;cursor:pointer;font-size:14px;position:relative}.dropdown-menu-item .dropdown-label{flex:1;margin-left:8px}.dropdown-menu-item .submenu-arrow{margin-left:auto;width:16px;height:16px}.submenu-container{position:absolute;top:0;left:100%;margin-left:4px;background:#fff;box-shadow:0 4px 8px #0000001a;border-radius:8px;z-index:1000;white-space:nowrap}.dropdown-submenu{position:absolute;top:0;min-width:132px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;padding:8px 0;z-index:1001}.dropdown-submenu.right{left:100%;margin-left:4px}.dropdown-submenu.left{left:auto;right:100%;background-color:#fff;border:1px solid #ddd;z-index:9999;position:absolute;margin-right:4px}.submenu-arrow{display:flex;align-items:center;margin-left:auto;z-index:9999}.dropdown-icon{display:flex;justify-content:center;align-items:center}.dropdown-menu-item.disabled{color:#181f33;filter:grayscale(100%) opacity(.3);cursor:not-allowed}\n"] }]
289
288
  }], null, { data: [{
290
289
  type: Input
291
290
  }], actionItems: [{
@@ -298,8 +297,6 @@ export class ActionsCellComponent {
298
297
  type: Input
299
298
  }], menuAlign: [{
300
299
  type: Input
301
- }], actionPermissions: [{
302
- type: Input
303
300
  }], isChecked: [{
304
301
  type: Input
305
302
  }], checkboxChange: [{
@@ -313,4 +310,4 @@ export class ActionsCellComponent {
313
310
  args: ['document:click']
314
311
  }] }); })();
315
312
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionsCellComponent, { className: "ActionsCellComponent" }); })();
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RhYmxlL2FjdGlvbnMtY2VsbC9hY3Rpb25zLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvYWN0aW9ucy1jZWxsL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0lDS2pGLHlCQUFpRzs7O0lBQTdDLEFBQWxCLG9EQUFpQixzQkFBbUI7OztJQUYxRSw4QkFDeUk7SUFDckksaUZBQWlHO0lBQ3JHLGlCQUFNOzs7O0lBRk4sNkxBQXdJO0lBQzlILGNBQTBCO0lBQTFCLHFEQUEwQjs7O0lBSHhDLDhCQUE0RDtJQUN4RCwyRUFDeUk7SUFHN0ksaUJBQU07OztJQUpvQixjQUFnQjtJQUFBLEFBQWhCLDRDQUFnQixzQ0FBc0I7OztJQXVCaEQsZ0NBQXNFO0lBQ2xFLDBCQUF5QjtJQUM3QixpQkFBTzs7O0lBREUsY0FBaUI7SUFBakIsb0RBQWlCOzs7SUFpQmxCLGdDQUF3RTtJQUNwRSwwQkFBMEI7SUFDOUIsaUJBQU87OztJQURFLGNBQWtCO0lBQWxCLHFEQUFrQjs7OztJQUovQiwrQkFFaUQ7SUFBN0Msc1BBQVMsNENBQWtDLEtBQUM7SUFDNUMscUhBQXdFO0lBR3hFLGdDQUE2QjtJQUFBLFlBQWlCO0lBQ2xELEFBRGtELGlCQUFPLEVBQ25EOzs7O0lBTkYsK0xBQTBJO0lBRTdHLGNBQXlDO0lBQXpDLHVFQUF5QztJQUd6QyxlQUFpQjtJQUFqQixvQ0FBaUI7OztJQVR0RCwrQkFFNkI7SUFDekIsNkdBRWlEO0lBTXJELGlCQUFNOzs7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dCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkl0ZW0gfSBmcm9tICcuLi90YWJsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtaXMtYWN0aW9ucy1jZWxsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hY3Rpb25zLWNlbGwuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aW9uVHlwZTogJ2lubGluZScgfCAnZHJvcGRvd24nIHwgJ2NoZWNrYm94JyA9ICdpbmxpbmUnO1xuICBASW5wdXQoKSBkcm9wZG93bkljb246IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzdWJtZW51QWxpZ246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnO1xuICBASW5wdXQoKSBtZW51QWxpZ246ICdsZWZ0JyB8ICdyaWdodCcgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGFjdGlvblBlcm1pc3Npb25zOiBhbnk7XG4gIEBJbnB1dCgpIGlzQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgY2hlY2tib3hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgXG4gIHByaXZhdGUgX3N0eWxlOiBhbnkgPSB7fTtcbiAgY29udGFpbmVyU3R5bGU6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fc3R5bGUgPSB2YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnByb2Nlc3NTdHlsZSgpO1xuICB9XG5cbiAgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICB9XG4gIFxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbT86IEFjdGlvbkl0ZW0sIGRhdGE6IGFueSwgaXNDaGVja2VkPzogYm9vbGVhbiB9PigpO1xuXG4gIGlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIGRlZmF1bHREcm9wZG93bkljb24gPSBgXG4gIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI0XCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiLz5cbiAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIyXCIgZmlsbD1cIiMzMzNcIi8+XG4gICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjEyXCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiLz5cbiAgPC9zdmc+XG5gO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwcml2YXRlIHByb2Nlc3NTdHlsZSgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgd2lkdGggZnJvbSBzdHlsZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0YWJsZSBjb2x1bW4gd2lkdGhcbiAgICBjb25zdCB7IHdpZHRoLCAuLi5yZXN0U3R5bGUgfSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGFpbmVyU3R5bGUgPSByZXN0U3R5bGU7XG4gIH1cblxuICBvbkFjdGlvbkNsaWNrKGl0ZW06IEFjdGlvbkl0ZW0sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIC8vIENoZWNrIHBlcm1pc3Npb25zIGJlZm9yZSBleGVjdXRpbmcgYWN0aW9uXG4gICAgaWYgKHRoaXMuYWN0aW9uUGVybWlzc2lvbnMgJiYgdGhpcy5hY3Rpb25QZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShpdGVtLnZhbHVlKSAmJiB0aGlzLmFjdGlvblBlcm1pc3Npb25zW2l0ZW0udmFsdWVdID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuOyBcbiAgICB9XG4gICAgXG4gICAgLy8gRXhlY3V0ZSBhY3Rpb24gb25seSBpZiBwZXJtaXR0ZWRcbiAgICBpZiAoaXRlbS5hY3Rpb24pIHtcbiAgICAgIGl0ZW0uYWN0aW9uKHRoaXMuZGF0YSk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IGl0ZW0sIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb24oaW5kZXg6IG51bWJlciwgaXRlbTogQWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBpc1N2Z0ZpbGUoaWNvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaWNvblBhdGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaWNvblBhdGgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnLnN2ZycpIHx8IGljb25QYXRoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Fzc2V0cy9pY29ucy8nKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgb25Eb2N1bWVudENsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHJvcGRvd25PcGVuO1xuICAgIC8vIENsb3NlIGFsbCBzdWJtZW51cyB3aGVuIG9wZW5pbmcvY2xvc2luZyBtYWluIG1lbnVcbiAgICB0aGlzLmFjdGlvbkl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4gaXRlbS5zaG93U3VibWVudSA9IGZhbHNlKTtcbiAgfVxuICBcbiAgb25Ecm9wZG93bkl0ZW1DbGljayhpdGVtOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIC8vIENoZWNrIHBlcm1pc3Npb25zIGZpcnN0XG4gICAgaWYgKHRoaXMuYWN0aW9uUGVybWlzc2lvbnMgJiYgdGhpcy5hY3Rpb25QZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShpdGVtLnZhbHVlKSAmJiB0aGlzLmFjdGlvblBlcm1pc3Npb25zW2l0ZW0udmFsdWVdID09PSBmYWxzZSkge1xuICAgICAgY29uc29sZS5sb2coJ0FjdGlvbiBibG9ja2VkOiBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMnKTtcbiAgICAgIHJldHVybjsgLy8gRG9uJ3QgY2xvc2UgZHJvcGRvd24gb3IgZXhlY3V0ZSBhY3Rpb25cbiAgICB9XG4gICAgXG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHJldHVybjtcbiAgICBcbiAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgLy8gVG9nZ2xlIHN1Ym1lbnVcbiAgICAgIGl0ZW0uc2hvd1N1Ym1lbnUgPSAhaXRlbS5zaG93U3VibWVudTtcbiAgICAgIC8vIE9wdGlvbmFsbHkgY2xvc2Ugb3RoZXIgc3VibWVudXNcbiAgICAgIHRoaXMuYWN0aW9uSXRlbXMuZm9yRWFjaCgoaTogYW55KSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpdGVtKSBpLnNob3dTdWJtZW51ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIGFjdGlvblxuICAgICAgaWYgKGl0ZW0uYWN0aW9uKSBpdGVtLmFjdGlvbih0aGlzLmRhdGEpO1xuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHsgaXRlbSwgZGF0YTogdGhpcy5kYXRhIH0pO1xuICAgICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlOyAvLyBPbmx5IGNsb3NlIGlmIGFjdGlvbiB3YXMgZXhlY3V0ZWRcbiAgICB9XG4gIH1cblxuICBvbkNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICAvLyBDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgYWxsb3dpbmcgY2hhbmdlXG4gICAgaWYgKHRoaXMuYWN0aW9uUGVybWlzc2lvbnMgJiYgdGhpcy5hY3Rpb25QZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2hlY2tib3gnKSAmJiB0aGlzLmFjdGlvblBlcm1pc3Npb25zWydjaGVja2JveCddID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBhbGxvdyBjaGFuZ2UgaWYgZGlzYWJsZWRcbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrZWQgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoeyBpc0NoZWNrZWQ6IHRoaXMuaXNDaGVja2VkLCBkYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jZWxsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cImNvbnRhaW5lclN0eWxlXCI+XG4gICAgPCEtLSBJbmxpbmUgQWN0aW9ucyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uVHlwZSA9PT0gJ2lubGluZSdcIiBjbGFzcz1cImlubGluZS1hY3Rpb25zXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWN0aW9uSXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25cIiBjbGFzcz1cImFjdGlvbi1pdGVtXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQnOiBhY3Rpb25QZXJtaXNzaW9ucyAmJiBhY3Rpb25QZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShpdGVtLnZhbHVlKSAmJiBhY3Rpb25QZXJtaXNzaW9uc1tpdGVtLnZhbHVlXSA9PT0gZmFsc2UgfVwiPiBcbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc1N2Z0ZpbGUoaXRlbS5pY29uKVwiIFtzcmNdPVwiaXRlbS5pY29uXCIgW2FsdF09XCJpdGVtLmxhYmVsXCIgY2xhc3M9XCJhY3Rpb24taWNvbi1zdmdcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRHJvcGRvd24gQWN0aW9ucyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uVHlwZSA9PT0gJ2Ryb3Bkb3duJ1wiIGNsYXNzPVwiZHJvcGRvd24tYWN0aW9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdHJpZ2dlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCIgdGl0bGU9XCJNb3JlIGFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCI0XCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiIC8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCIyXCIgZmlsbD1cIiMzMzNcIiAvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTZcIiByPVwiMlwiIGZpbGw9XCIjMzMzXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIFxuICAgICAgICAgICAgICpuZ0lmPVwiaXNEcm9wZG93bk9wZW5cIiBcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJtZW51QWxpZ25cIlxuICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhY3Rpb25JdGVtc1wiIFxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRyb3Bkb3duSXRlbUNsaWNrKGl0ZW0sICRldmVudClcIiBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZCc6IGFjdGlvblBlcm1pc3Npb25zICYmIGFjdGlvblBlcm1pc3Npb25zLmhhc093blByb3BlcnR5KGl0ZW0udmFsdWUpICYmIGFjdGlvblBlcm1pc3Npb25zW2l0ZW0udmFsdWVdID09PSBmYWxzZSB9XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBub0NoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taWNvblwiICpuZ0lmPVwiaXRlbS5pY29uICYmIGlzU3ZnRmlsZShpdGVtLmljb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS5pY29uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJtZW51LWFycm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSA2TDE1IDEyTDkgMThcIiBzdHJva2U9XCIjMEQxMzIxXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRFlOQU1JQyBTVUJNRU5VIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tc3VibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnN1Ym1lbnVBbGlnblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uc2hvd1N1Ym1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWl0ZW1cIiAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgaXRlbS5jaGlsZHJlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQnOiBhY3Rpb25QZXJtaXNzaW9ucyAmJiBhY3Rpb25QZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShjaGlsZC52YWx1ZSkgJiYgYWN0aW9uUGVybWlzc2lvbnNbY2hpbGQudmFsdWVdID09PSBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ecm9wZG93bkl0ZW1DbGljayhjaGlsZCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taWNvblwiICpuZ0lmPVwiY2hpbGQuaWNvbiAmJiBpc1N2Z0ZpbGUoY2hpbGQuaWNvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNoaWxkLmljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgY2hpbGQubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQ2hpbGRyZW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taWNvblwiICpuZ0lmPVwiaXRlbS5pY29uICYmIGlzU3ZnRmlsZShpdGVtLmljb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS5pY29uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGVja2JveCBBY3Rpb25zIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25UeXBlID09PSAnY2hlY2tib3gnXCIgY2xhc3M9XCJjaGVja2JveC1hY3Rpb25zXCI+XG4gICAgICAgIDxtaXMtY2hlY2tib3ggXG4gICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uUGVybWlzc2lvbnMgJiYgYWN0aW9uUGVybWlzc2lvbnMuaGFzT3duUHJvcGVydHkoJ2NoZWNrYm94JykgJiYgYWN0aW9uUGVybWlzc2lvbnNbJ2NoZWNrYm94J10gPT09IGZhbHNlXCI+XG4gICAgPC9taXMtY2hlY2tib3g+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RhYmxlL2FjdGlvbnMtY2VsbC9hY3Rpb25zLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvYWN0aW9ucy1jZWxsL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0lDS2pGLHlCQUFpRzs7O0lBQTdDLEFBQWxCLG9EQUFpQixzQkFBbUI7Ozs7SUFGMUUsOEJBQ21GO0lBQXRDLG9OQUFTLHFDQUEyQixLQUFDO0lBQzlFLGlGQUFpRztJQUNyRyxpQkFBTTs7OztJQUZOLGdGQUE0QztJQUNsQyxjQUEwQjtJQUExQixxREFBMEI7OztJQUh4Qyw4QkFBNEQ7SUFDeEQsMkVBQ21GO0lBR3ZGLGlCQUFNOzs7SUFKb0IsY0FBZ0I7SUFBQSxBQUFoQiw0Q0FBZ0Isc0NBQXNCOzs7SUF1QmhELGdDQUFzRTtJQUNsRSwwQkFBeUI7SUFDN0IsaUJBQU87OztJQURFLGNBQWlCO0lBQWpCLG9EQUFpQjs7O0lBaUJsQixnQ0FBd0U7SUFDcEUsMEJBQTBCO0lBQzlCLGlCQUFPOzs7SUFERSxjQUFrQjtJQUFsQixxREFBa0I7Ozs7SUFKL0IsK0JBRWlEO0lBQTdDLHNQQUFTLDRDQUFrQyxLQUFDO0lBQzVDLHFIQUF3RTtJQUd4RSxnQ0FBNkI7SUFBQSxZQUFpQjtJQUNsRCxBQURrRCxpQkFBTyxFQUNuRDs7OztJQU5OLGlGQUE2QztJQUVaLGNBQXlDO0lBQXpDLHVFQUF5QztJQUd6QyxlQUFpQjtJQUFqQixvQ0FBaUI7OztJQVR0RCwrQkFFNkI7SUFD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LENBQUM7SUFDZixDQUFDO3FIQTlHWSxvQkFBb0I7b0VBQXBCLG9CQUFvQjtZQUFwQix5RkFBQSxxQkFBaUIsaUNBQUc7O1lDUmpDLDhCQUErRDtZQStEM0QsQUFyREEsQUFSQSxxRUFBNEQsd0RBUUksd0RBcURBO1lBTXBFLGlCQUFNOztZQXJFOEIsNENBQTBCO1lBRXBELGNBQTZCO1lBQTdCLGtEQUE2QjtZQVE3QixjQUErQjtZQUEvQixvREFBK0I7WUFxRC9CLGNBQStCO1lBQS9CLG9EQUErQjs7O2lGRHZENUIsb0JBQW9CO2NBTGhDLFNBQVM7MkJBQ0Usa0JBQWtCO2dCQUtuQixJQUFJO2tCQUFaLEtBQUs7WUFDRyxXQUFXO2tCQUFuQixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDSSxjQUFjO2tCQUF2QixNQUFNO1lBTU0sS0FBSztrQkFBakIsS0FBSztZQVNJLFdBQVc7a0JBQXBCLE1BQU07WUEyQ1AsZUFBZTtrQkFEZCxZQUFZO21CQUFDLGdCQUFnQjs7a0ZBakVuQixvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkl0ZW0gfSBmcm9tICcuLi90YWJsZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtaXMtYWN0aW9ucy1jZWxsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hY3Rpb25zLWNlbGwuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aW9uVHlwZTogJ2lubGluZScgfCAnZHJvcGRvd24nIHwgJ2NoZWNrYm94JyA9ICdpbmxpbmUnO1xuICBASW5wdXQoKSBkcm9wZG93bkljb246IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzdWJtZW51QWxpZ246ICdsZWZ0JyB8ICdyaWdodCcgPSAncmlnaHQnO1xuICBASW5wdXQoKSBtZW51QWxpZ246ICdsZWZ0JyB8ICdyaWdodCcgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGlzQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgY2hlY2tib3hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgXG4gIHByaXZhdGUgX3N0eWxlOiBhbnkgPSB7fTtcbiAgY29udGFpbmVyU3R5bGU6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fc3R5bGUgPSB2YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnByb2Nlc3NTdHlsZSgpO1xuICB9XG5cbiAgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICB9XG4gIFxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbT86IEFjdGlvbkl0ZW0sIGRhdGE6IGFueSwgaXNDaGVja2VkPzogYm9vbGVhbiB9PigpO1xuXG4gIGlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIGRlZmF1bHREcm9wZG93bkljb24gPSBgXG4gIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI0XCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiLz5cbiAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIyXCIgZmlsbD1cIiMzMzNcIi8+XG4gICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjEyXCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiLz5cbiAgPC9zdmc+XG5gO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBwcml2YXRlIHByb2Nlc3NTdHlsZSgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgd2lkdGggZnJvbSBzdHlsZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0YWJsZSBjb2x1bW4gd2lkdGhcbiAgICBjb25zdCB7IHdpZHRoLCAuLi5yZXN0U3R5bGUgfSA9IHRoaXMuX3N0eWxlO1xuICAgIHRoaXMuY29udGFpbmVyU3R5bGUgPSByZXN0U3R5bGU7XG4gIH1cblxuICBvbkFjdGlvbkNsaWNrKGl0ZW06IEFjdGlvbkl0ZW0sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIC8vIENoZWNrIHBlcm1pc3Npb25zIGJlZm9yZSBleGVjdXRpbmcgYWN0aW9uXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZChpdGVtKSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIEV4ZWN1dGUgYWN0aW9uIG9ubHkgaWYgcGVybWl0dGVkXG4gICAgaWYgKGl0ZW0uYWN0aW9uKSB7XG4gICAgICBpdGVtLmFjdGlvbih0aGlzLmRhdGEpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoeyBpdGVtLCBkYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICB0cmFja0J5QWN0aW9uKGluZGV4OiBudW1iZXIsIGl0ZW06IEFjdGlvbkl0ZW0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG5cbiAgaXNTdmdGaWxlKGljb25QYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWljb25QYXRoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGljb25QYXRoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy5zdmcnKSB8fCBpY29uUGF0aC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdhc3NldHMvaWNvbnMvJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpXG4gIG9uRG9jdW1lbnRDbGljaygpIHtcbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duT3Blbikge1xuICAgICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgICAvLyBDbG9zZSBhbGwgc3VibWVudXMgd2hlbiBvcGVuaW5nL2Nsb3NpbmcgbWFpbiBtZW51XG4gICAgdGhpcy5hY3Rpb25JdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IGl0ZW0uc2hvd1N1Ym1lbnUgPSBmYWxzZSk7XG4gIH1cbiAgXG4gIG9uRHJvcGRvd25JdGVtQ2xpY2soaXRlbTogYW55LCBldmVudDogRXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIjE6XCIsZXZlbnQsIGl0ZW0pXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZChpdGVtKSkgcmV0dXJuO1xuICAgIFxuICAgIGlmIChpdGVtLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gVG9nZ2xlIHN1Ym1lbnVcbiAgICAgIGl0ZW0uc2hvd1N1Ym1lbnUgPSAhaXRlbS5zaG93U3VibWVudTtcbiAgICAgIC8vIE9wdGlvbmFsbHkgY2xvc2Ugb3RoZXIgc3VibWVudXNcbiAgICAgIHRoaXMuYWN0aW9uSXRlbXMuZm9yRWFjaCgoaTogYW55KSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpdGVtKSBpLnNob3dTdWJtZW51ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIGFjdGlvblxuICAgICAgaWYgKGl0ZW0uYWN0aW9uKSBpdGVtLmFjdGlvbih0aGlzLmRhdGEpO1xuICAgICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHsgaXRlbSwgZGF0YTogdGhpcy5kYXRhIH0pO1xuICAgICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlOyAvLyBPbmx5IGNsb3NlIGlmIGFjdGlvbiB3YXMgZXhlY3V0ZWRcbiAgICB9XG4gIH1cblxuICBvbkNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmlzQ2hlY2tlZCA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IGlzQ2hlY2tlZDogdGhpcy5pc0NoZWNrZWQsIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoaXRlbTogQWN0aW9uSXRlbSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGl0ZW0uZGlzYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBpdGVtLmRpc2FibGUodGhpcy5kYXRhKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbn0iLCI8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jZWxsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cImNvbnRhaW5lclN0eWxlXCI+XG4gICAgPCEtLSBJbmxpbmUgQWN0aW9ucyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uVHlwZSA9PT0gJ2lubGluZSdcIiBjbGFzcz1cImlubGluZS1hY3Rpb25zXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWN0aW9uSXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25cIiBjbGFzcz1cImFjdGlvbi1pdGVtXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQnOiBpc0Rpc2FibGVkKGl0ZW0pIH1cIiAoY2xpY2spPVwib25BY3Rpb25DbGljayhpdGVtLCAkZXZlbnQpXCI+IFxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzU3ZnRmlsZShpdGVtLmljb24pXCIgW3NyY109XCJpdGVtLmljb25cIiBbYWx0XT1cIml0ZW0ubGFiZWxcIiBjbGFzcz1cImFjdGlvbi1pY29uLXN2Z1wiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEcm9wZG93biBBY3Rpb25zIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25UeXBlID09PSAnZHJvcGRvd24nXCIgY2xhc3M9XCJkcm9wZG93bi1hY3Rpb25zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi10cmlnZ2VyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCRldmVudClcIiB0aXRsZT1cIk1vcmUgYWN0aW9uc1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjRcIiByPVwiMlwiIGZpbGw9XCIjMzMzXCIgLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiIC8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxNlwiIHI9XCIyXCIgZmlsbD1cIiMzMzNcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgXG4gICAgICAgICAgICAgKm5nSWY9XCJpc0Ryb3Bkb3duT3BlblwiIFxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1lbnVBbGlnblwiXG4gICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjdGlvbkl0ZW1zXCIgXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRHJvcGRvd25JdGVtQ2xpY2soaXRlbSwgJGV2ZW50KVwiIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkJzogaXNEaXNhYmxlZChpdGVtKX1cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIG5vQ2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1pY29uXCIgKm5nSWY9XCJpdGVtLmljb24gJiYgaXNTdmdGaWxlKGl0ZW0uaWNvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtLmljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24tbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Ym1lbnUtYXJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDZMMTUgMTJMOSAxOFwiIHN0cm9rZT1cIiMwRDEzMjFcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEWU5BTUlDIFNVQk1FTlUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1zdWJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uc3VibWVudUFsaWduXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5zaG93U3VibWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUtaXRlbVwiICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLmNoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkJzogaXNEaXNhYmxlZChjaGlsZCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRHJvcGRvd25JdGVtQ2xpY2soY2hpbGQsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWljb25cIiAqbmdJZj1cImNoaWxkLmljb24gJiYgaXNTdmdGaWxlKGNoaWxkLmljb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjaGlsZC5pY29uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1sYWJlbFwiPnt7IGNoaWxkLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0NoaWxkcmVuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWljb25cIiAqbmdJZj1cIml0ZW0uaWNvbiAmJiBpc1N2Z0ZpbGUoaXRlbS5pY29uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0uaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2hlY2tib3ggQWN0aW9ucyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uVHlwZSA9PT0gJ2NoZWNrYm94J1wiIGNsYXNzPVwiY2hlY2tib3gtYWN0aW9uc1wiPlxuICAgICAgICA8bWlzLWNoZWNrYm94IFxuICAgICAgICBbY2hlY2tlZF09XCJpc0NoZWNrZWRcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9taXMtY2hlY2tib3g+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=