@gravitee/ui-components 3.24.5 → 3.25.0-fix-gvcode-15ce1d2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1270 -0
- package/LICENSE.txt +202 -0
- package/README.md +195 -0
- package/assets/i18n/en.json +3 -0
- package/assets/i18n/fr.json +3 -0
- package/assets/icons/design.svg +1 -1
- package/package.json +1 -1
- package/src/.eslintrc.js +19 -0
- package/src/atoms/gv-autocomplete.js +156 -132
- package/src/atoms/gv-button.js +248 -73
- package/src/atoms/gv-checkbox.js +103 -45
- package/src/atoms/gv-date-picker-calendar.js +393 -312
- package/src/atoms/gv-date-picker-cell.js +81 -57
- package/src/atoms/gv-date-picker.js +319 -180
- package/src/atoms/gv-file-upload.js +195 -85
- package/src/atoms/gv-icon.js +34 -13
- package/src/atoms/gv-image.js +66 -31
- package/src/atoms/gv-input-message.js +37 -12
- package/src/atoms/gv-input.js +148 -117
- package/src/atoms/gv-link.js +125 -47
- package/src/atoms/gv-message.js +69 -18
- package/src/atoms/gv-metric.js +68 -19
- package/src/atoms/gv-relative-time.js +38 -67
- package/src/atoms/gv-select-native.js +215 -96
- package/src/atoms/gv-select.js +230 -110
- package/src/atoms/gv-spinner.js +26 -5
- package/src/atoms/gv-state.js +66 -25
- package/src/atoms/gv-switch.js +160 -40
- package/src/atoms/gv-tag.js +78 -26
- package/src/atoms/gv-text.js +83 -22
- package/src/charts/gv-chart-bar.js +18 -22
- package/src/charts/gv-chart-gauge.js +31 -28
- package/src/charts/gv-chart-histogram.js +10 -18
- package/src/charts/gv-chart-line.js +59 -70
- package/src/charts/gv-chart-map.js +42 -44
- package/src/charts/gv-chart-pie.js +14 -18
- package/src/index.js +0 -1
- package/src/lib/cron-expression.js +35 -40
- package/src/lib/date.js +1 -10
- package/src/lib/events.js +1 -3
- package/src/lib/http-client-schema-form.js +12 -13
- package/src/lib/http.js +56 -57
- package/src/lib/i18n.js +22 -30
- package/src/lib/item.js +12 -13
- package/src/lib/properties.js +42 -77
- package/src/lib/schema-form.js +5 -4
- package/src/lib/studio.js +60 -13
- package/src/lib/style.js +8 -8
- package/src/lib/text-format.js +7 -14
- package/src/lib/theme.js +5 -8
- package/src/lib/utils.js +18 -17
- package/src/mixins/chart-element.js +54 -31
- package/src/mixins/input-element.js +47 -60
- package/src/mixins/item-resource.js +32 -34
- package/src/mixins/keyboard-element.js +5 -6
- package/src/mixins/update-after-browser.js +1 -4
- package/src/mixins/with-resize-observer.js +13 -23
- package/src/mixins/with-skeleton-attribute.js +48 -54
- package/src/molecules/gv-card-full.js +147 -26
- package/src/molecules/gv-card-list.js +42 -13
- package/src/molecules/gv-card.js +91 -17
- package/src/molecules/gv-category-list.js +17 -6
- package/src/molecules/gv-category.js +103 -23
- package/src/molecules/gv-code.js +143 -81
- package/src/molecules/gv-confirm.js +71 -41
- package/src/molecules/gv-cron-editor.js +389 -143
- package/src/molecules/gv-dropdown-menu.js +46 -14
- package/src/molecules/gv-expandable.js +59 -31
- package/src/molecules/gv-expression-language.js +138 -176
- package/src/molecules/gv-identity-picture.js +65 -42
- package/src/molecules/gv-list.js +134 -42
- package/src/molecules/gv-metrics.js +49 -37
- package/src/molecules/gv-modal.js +95 -28
- package/src/molecules/gv-nav.js +75 -49
- package/src/molecules/gv-option.js +130 -57
- package/src/molecules/gv-plans.js +209 -86
- package/src/molecules/gv-popover.js +177 -57
- package/src/molecules/gv-promote.js +146 -28
- package/src/molecules/gv-rating-list.js +195 -69
- package/src/molecules/gv-rating.js +105 -52
- package/src/molecules/gv-row-expandable.js +11 -5
- package/src/molecules/gv-row.js +147 -21
- package/src/molecules/gv-stats.js +48 -23
- package/src/molecules/gv-stepper.js +187 -43
- package/src/molecules/gv-table.js +309 -199
- package/src/molecules/gv-tree.js +156 -33
- package/src/organisms/gv-documentation.js +128 -45
- package/src/organisms/gv-header.js +195 -37
- package/src/organisms/gv-http-client.js +168 -32
- package/src/organisms/gv-menu.js +158 -37
- package/src/organisms/gv-newsletter-subscription.js +189 -48
- package/src/organisms/gv-pagination.js +77 -49
- package/src/organisms/gv-properties.js +492 -271
- package/src/organisms/gv-resizable-views.js +259 -41
- package/src/organisms/gv-resources.js +275 -168
- package/src/organisms/gv-schema-form-array.js +159 -49
- package/src/organisms/gv-schema-form-control-object.js +73 -59
- package/src/organisms/gv-schema-form-control.js +134 -107
- package/src/organisms/gv-schema-form.js +324 -195
- package/src/organisms/gv-tabs.js +98 -66
- package/src/organisms/gv-user-menu.js +201 -36
- package/src/organisms/gv-vertical-menu.js +61 -20
- package/src/policy-studio/gv-flow-step.js +266 -105
- package/src/policy-studio/gv-flow.js +304 -125
- package/src/policy-studio/gv-policy-studio-menu.js +471 -157
- package/src/policy-studio/gv-policy-studio.js +777 -686
- package/src/styles/empty.js +20 -3
- package/src/styles/input.js +247 -3
- package/src/styles/link.js +16 -3
- package/src/styles/shapes.js +0 -1
- package/src/styles/skeleton.js +37 -3
- package/src/styles/zoom.js +24 -3
- package/src/theme/definition.json +1762 -0
- package/src/theme/gv-theme.js +60 -21
|
@@ -17,6 +17,7 @@ import { classMap } from 'lit/directives/class-map';
|
|
|
17
17
|
import { css, LitElement, html } from 'lit';
|
|
18
18
|
import { dispatchCustomEvent } from '../lib/events';
|
|
19
19
|
import { getCssVar, hexToRGB } from '../lib/style';
|
|
20
|
+
|
|
20
21
|
import { i18n } from '../lib/i18n';
|
|
21
22
|
import { link } from '../styles/link';
|
|
22
23
|
import { repeat } from 'lit/directives/repeat';
|
|
@@ -24,6 +25,7 @@ import { skeleton } from '../styles/skeleton';
|
|
|
24
25
|
import { empty } from '../styles/empty';
|
|
25
26
|
import { styleMap } from 'lit/directives/style-map';
|
|
26
27
|
import './../atoms/gv-icon';
|
|
28
|
+
|
|
27
29
|
/**
|
|
28
30
|
* Plans
|
|
29
31
|
*
|
|
@@ -44,7 +46,6 @@ import './../atoms/gv-icon';
|
|
|
44
46
|
* @cssprop {Color} [--gv-plans-characteristics--bdc=var(--gv-theme-neutral-color, #f5f5f5)] - Characteristics border color
|
|
45
47
|
* @cssprop {Length} [--gv-plans-icon--s=24px] - Height and icon width
|
|
46
48
|
*/
|
|
47
|
-
|
|
48
49
|
export class GvPlans extends LitElement {
|
|
49
50
|
static get properties() {
|
|
50
51
|
return {
|
|
@@ -54,34 +55,140 @@ export class GvPlans extends LitElement {
|
|
|
54
55
|
* @attr
|
|
55
56
|
* @required
|
|
56
57
|
*/
|
|
57
|
-
plans: {
|
|
58
|
-
|
|
59
|
-
},
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
type: String,
|
|
65
|
-
reflect: true
|
|
66
|
-
},
|
|
67
|
-
skeleton: {
|
|
68
|
-
type: Boolean
|
|
69
|
-
},
|
|
70
|
-
size: {
|
|
71
|
-
type: Number
|
|
72
|
-
},
|
|
73
|
-
_empty: {
|
|
74
|
-
type: Boolean
|
|
75
|
-
},
|
|
76
|
-
_plans: {
|
|
77
|
-
type: Array
|
|
78
|
-
}
|
|
58
|
+
plans: { type: Array },
|
|
59
|
+
current: { type: Number },
|
|
60
|
+
value: { type: String, reflect: true },
|
|
61
|
+
skeleton: { type: Boolean },
|
|
62
|
+
size: { type: Number },
|
|
63
|
+
_empty: { type: Boolean },
|
|
64
|
+
_plans: { type: Array },
|
|
79
65
|
};
|
|
80
66
|
}
|
|
81
67
|
|
|
82
68
|
static get styles() {
|
|
83
|
-
return [
|
|
84
|
-
|
|
69
|
+
return [
|
|
70
|
+
empty,
|
|
71
|
+
link,
|
|
72
|
+
// language=css
|
|
73
|
+
css`
|
|
74
|
+
:host {
|
|
75
|
+
display: block;
|
|
76
|
+
box-sizing: border-box;
|
|
77
|
+
margin: 0.2rem;
|
|
78
|
+
--bgc: var(--gv-plans--bgc, var(--gv-theme-color, #5a7684));
|
|
79
|
+
--fc: var(--gv-plans-font--c, var(--gv-theme-font-color-light, #ffffff));
|
|
80
|
+
--gv-icon--c: var(--bgc);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.plans {
|
|
84
|
+
display: flex;
|
|
85
|
+
list-style-type: none;
|
|
86
|
+
border-radius: 2px;
|
|
87
|
+
padding: 0;
|
|
88
|
+
margin: 0;
|
|
89
|
+
height: 80px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.plan {
|
|
93
|
+
flex: 1;
|
|
94
|
+
padding: 16px;
|
|
95
|
+
line-height: 24px;
|
|
96
|
+
cursor: pointer;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.plan.active {
|
|
100
|
+
background-color: var(--bgc);
|
|
101
|
+
color: var(--fc);
|
|
102
|
+
transition: all 0.2s ease-in;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.name {
|
|
106
|
+
font-size: var(--gv-theme-font-size-l, 16px);
|
|
107
|
+
font-weight: bold;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.description {
|
|
111
|
+
font-size: var(--gv-theme-font-size-s, 12px);
|
|
112
|
+
--lh: var(--gv-theme-font-size-s, 12px);
|
|
113
|
+
line-height: var(--lh);
|
|
114
|
+
--max-lines: 2;
|
|
115
|
+
max-height: calc(var(--lh) * var(--max-lines));
|
|
116
|
+
overflow: hidden;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.selectors {
|
|
120
|
+
display: flex;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.selector {
|
|
124
|
+
position: relative;
|
|
125
|
+
flex: 1;
|
|
126
|
+
display: flex;
|
|
127
|
+
justify-content: center;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.active .triangle {
|
|
131
|
+
width: 0;
|
|
132
|
+
height: 0;
|
|
133
|
+
border-left: 7px solid transparent;
|
|
134
|
+
border-right: 7px solid transparent;
|
|
135
|
+
border-top: 9px solid var(--bgc);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.characteristics {
|
|
139
|
+
margin-top: 34px;
|
|
140
|
+
border: 1px solid var(--gv-plans-characteristics--bdc, var(--gv-theme-neutral-color, #f5f5f5));
|
|
141
|
+
border-radius: 4px;
|
|
142
|
+
display: flex;
|
|
143
|
+
padding: 34px;
|
|
144
|
+
text-align: center;
|
|
145
|
+
justify-content: center;
|
|
146
|
+
user-select: none;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.characteristic {
|
|
150
|
+
font-size: var(--gv-theme-font-size-m, 14px);
|
|
151
|
+
line-height: 22px;
|
|
152
|
+
font-weight: bold;
|
|
153
|
+
flex: 1;
|
|
154
|
+
margin: 20px;
|
|
155
|
+
display: flex;
|
|
156
|
+
flex-direction: column;
|
|
157
|
+
align-items: center;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.circle {
|
|
161
|
+
background-color: var(--gv-plans-characteristic--bgc, var(--gv-theme-color-light, #86c3d0));
|
|
162
|
+
border-radius: 50%;
|
|
163
|
+
width: 32px;
|
|
164
|
+
height: 32px;
|
|
165
|
+
margin: 10px;
|
|
166
|
+
display: flex;
|
|
167
|
+
justify-content: center;
|
|
168
|
+
align-items: center;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
gv-icon {
|
|
172
|
+
--gv-icon--s: var(--gv-plans-icon--s, 24px);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.skeleton {
|
|
176
|
+
min-height: 400px;
|
|
177
|
+
margin: 0 0.2rem;
|
|
178
|
+
opacity: 0.5;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.link {
|
|
182
|
+
text-decoration: underline;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.pagination {
|
|
186
|
+
display: flex;
|
|
187
|
+
height: 0;
|
|
188
|
+
}
|
|
189
|
+
`,
|
|
190
|
+
skeleton,
|
|
191
|
+
];
|
|
85
192
|
}
|
|
86
193
|
|
|
87
194
|
constructor() {
|
|
@@ -95,7 +202,6 @@ export class GvPlans extends LitElement {
|
|
|
95
202
|
get _characteristics() {
|
|
96
203
|
if (this._plans.length >= this.current) {
|
|
97
204
|
const plan = this._plans[this.current - 1];
|
|
98
|
-
|
|
99
205
|
if (plan.characteristics && plan.characteristics.length > 0) {
|
|
100
206
|
return plan.characteristics;
|
|
101
207
|
}
|
|
@@ -107,7 +213,6 @@ export class GvPlans extends LitElement {
|
|
|
107
213
|
case 'AUTO':
|
|
108
214
|
characteristics.push(i18n('gv-plans.validation.auto'));
|
|
109
215
|
break;
|
|
110
|
-
|
|
111
216
|
case 'MANUAL':
|
|
112
217
|
characteristics.push(i18n('gv-plans.validation.manual'));
|
|
113
218
|
break;
|
|
@@ -119,15 +224,12 @@ export class GvPlans extends LitElement {
|
|
|
119
224
|
case 'API_KEY':
|
|
120
225
|
characteristics.push(i18n('gv-plans.security.apiKey'));
|
|
121
226
|
break;
|
|
122
|
-
|
|
123
227
|
case 'JWT':
|
|
124
228
|
characteristics.push(i18n('gv-plans.security.jwt'));
|
|
125
229
|
break;
|
|
126
|
-
|
|
127
230
|
case 'OAUTH2':
|
|
128
231
|
characteristics.push(i18n('gv-plans.security.oauth2'));
|
|
129
232
|
break;
|
|
130
|
-
|
|
131
233
|
case 'KEY_LESS':
|
|
132
234
|
characteristics = [];
|
|
133
235
|
characteristics.push(i18n('gv-plans.security.keyLess'));
|
|
@@ -141,35 +243,33 @@ export class GvPlans extends LitElement {
|
|
|
141
243
|
|
|
142
244
|
return characteristics;
|
|
143
245
|
}
|
|
144
|
-
|
|
145
246
|
return [];
|
|
146
247
|
}
|
|
147
248
|
|
|
148
249
|
set plans(plans) {
|
|
149
250
|
this.skeleton = true;
|
|
150
|
-
Promise.resolve(plans)
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
251
|
+
Promise.resolve(plans)
|
|
252
|
+
.then((plans) => {
|
|
253
|
+
if (plans) {
|
|
254
|
+
this._empty = plans.length === 0;
|
|
255
|
+
this._plans = plans;
|
|
256
|
+
if (!this._empty) {
|
|
257
|
+
const activePlan = this._plans.find((p) => p.active);
|
|
258
|
+
if (activePlan == null) {
|
|
259
|
+
this._plans[0].active = true;
|
|
260
|
+
this.value = this._plans[0].id;
|
|
261
|
+
} else {
|
|
262
|
+
this.value = activePlan.id;
|
|
263
|
+
}
|
|
163
264
|
}
|
|
265
|
+
this.skeleton = false;
|
|
164
266
|
}
|
|
165
|
-
|
|
267
|
+
})
|
|
268
|
+
.catch((e) => {
|
|
269
|
+
this._error = true;
|
|
270
|
+
this._plans = [];
|
|
166
271
|
this.skeleton = false;
|
|
167
|
-
}
|
|
168
|
-
}).catch(e => {
|
|
169
|
-
this._error = true;
|
|
170
|
-
this._plans = [];
|
|
171
|
-
this.skeleton = false;
|
|
172
|
-
});
|
|
272
|
+
});
|
|
173
273
|
}
|
|
174
274
|
|
|
175
275
|
to(plan) {
|
|
@@ -182,23 +282,17 @@ export class GvPlans extends LitElement {
|
|
|
182
282
|
} else {
|
|
183
283
|
p.active = false;
|
|
184
284
|
}
|
|
185
|
-
|
|
186
285
|
return p;
|
|
187
286
|
});
|
|
188
|
-
this.dispatchEvent(new Event('input'), {
|
|
189
|
-
bubbles: true,
|
|
190
|
-
cancelable: true
|
|
191
|
-
});
|
|
287
|
+
this.dispatchEvent(new Event('input'), { bubbles: true, cancelable: true });
|
|
192
288
|
}
|
|
193
289
|
}
|
|
194
290
|
|
|
195
291
|
_getPlanTitle(plan) {
|
|
196
292
|
let title = plan.name;
|
|
197
|
-
|
|
198
293
|
if (plan.description) {
|
|
199
294
|
title += `: ${plan.description}`;
|
|
200
295
|
}
|
|
201
|
-
|
|
202
296
|
return title;
|
|
203
297
|
}
|
|
204
298
|
|
|
@@ -221,12 +315,11 @@ export class GvPlans extends LitElement {
|
|
|
221
315
|
get plans() {
|
|
222
316
|
if (this.hasPagination) {
|
|
223
317
|
const left = this._plans.slice(0, this.current);
|
|
224
|
-
|
|
225
318
|
const right = this._plans.slice(this.current);
|
|
226
|
-
|
|
227
319
|
const plans = [left.pop()];
|
|
320
|
+
|
|
228
321
|
new Array(this.size - 1).fill('').forEach((e, i) => {
|
|
229
|
-
if (i % 2 === 0 && left.length > 0 || right.length === 0) {
|
|
322
|
+
if ((i % 2 === 0 && left.length > 0) || right.length === 0) {
|
|
230
323
|
const a = left.pop();
|
|
231
324
|
plans.unshift(a);
|
|
232
325
|
} else if (right.length > 0) {
|
|
@@ -236,61 +329,92 @@ export class GvPlans extends LitElement {
|
|
|
236
329
|
});
|
|
237
330
|
return plans;
|
|
238
331
|
}
|
|
239
|
-
|
|
240
332
|
return this._plans;
|
|
241
333
|
}
|
|
242
334
|
|
|
243
335
|
_renderHeader(plans) {
|
|
244
336
|
return plans.map((plan, index) => {
|
|
245
|
-
return html`<li
|
|
246
|
-
plan
|
|
247
|
-
|
|
248
|
-
|
|
337
|
+
return html`<li
|
|
338
|
+
@click="${this.to.bind(this, plan)}"
|
|
339
|
+
title="${this._getPlanTitle(plan)}"
|
|
340
|
+
class="${classMap({
|
|
341
|
+
plan: true,
|
|
342
|
+
active: plan.active,
|
|
343
|
+
})}"
|
|
344
|
+
>
|
|
345
|
+
<div class="name">${plan.name}</div>
|
|
346
|
+
<div class="description">${plan.description}</div>
|
|
347
|
+
</li>`;
|
|
249
348
|
});
|
|
250
349
|
}
|
|
251
350
|
|
|
252
351
|
_renderTriangles(plans) {
|
|
253
352
|
return plans.map((plan, index) => {
|
|
254
|
-
return html`<div
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
353
|
+
return html`<div
|
|
354
|
+
class="${classMap({
|
|
355
|
+
selector: true,
|
|
356
|
+
active: plan.active,
|
|
357
|
+
})}"
|
|
358
|
+
>
|
|
359
|
+
<div class="triangle"></div>
|
|
360
|
+
</div>`;
|
|
258
361
|
});
|
|
259
362
|
}
|
|
260
363
|
|
|
261
364
|
_renderPagination() {
|
|
262
365
|
if (this.hasPagination) {
|
|
263
|
-
return html` <div class="pagination">
|
|
366
|
+
return html` <div class="pagination">
|
|
367
|
+
${!this.hasLeft ? '' : html`<gv-icon @click="${this.toLeft}" shape="navigation:angle-left" class="link"></gv-icon>`}
|
|
368
|
+
<div style="flex: 1;"></div>
|
|
369
|
+
${!this.hasRight ? '' : html`<gv-icon @click="${this.toRight}" shape="navigation:angle-right" class="link"></gv-icon>`}
|
|
370
|
+
</div>`;
|
|
264
371
|
}
|
|
265
|
-
|
|
266
372
|
return '';
|
|
267
373
|
}
|
|
268
374
|
|
|
269
375
|
render() {
|
|
270
376
|
const bgc = getCssVar(this, '--gv-plans--bgc', '#5A7684');
|
|
271
|
-
const {
|
|
272
|
-
r,
|
|
273
|
-
g,
|
|
274
|
-
b
|
|
275
|
-
} = hexToRGB(bgc);
|
|
377
|
+
const { r, g, b } = hexToRGB(bgc);
|
|
276
378
|
const style = {
|
|
277
379
|
backgroundColor: `rgba(${r}, ${g}, ${b}, 0.1)`,
|
|
278
|
-
color: `rgba(${r}, ${g}, ${b}, 0.5)
|
|
380
|
+
color: `rgba(${r}, ${g}, ${b}, 0.5)`,
|
|
279
381
|
};
|
|
280
382
|
|
|
281
383
|
if (!this.skeleton) {
|
|
282
384
|
if (this._error) {
|
|
283
|
-
return html`<div class="error">
|
|
385
|
+
return html`<div class="error">
|
|
386
|
+
<p>${i18n('gv-plans.error')}</p>
|
|
387
|
+
</div>`;
|
|
284
388
|
} else if (this._empty) {
|
|
285
|
-
return html` <div class="empty">
|
|
389
|
+
return html` <div class="empty">
|
|
390
|
+
<p>${i18n('gv-plans.empty.title')}</p>
|
|
391
|
+
<a class="link" @click="${this._onRedirect}">${i18n('gv-plans.empty.redirect')}</a>
|
|
392
|
+
</div>`;
|
|
286
393
|
}
|
|
287
394
|
}
|
|
288
395
|
|
|
289
|
-
const classes = {
|
|
290
|
-
skeleton: this.skeleton
|
|
291
|
-
};
|
|
396
|
+
const classes = { skeleton: this.skeleton };
|
|
292
397
|
const currentPlans = this.plans;
|
|
293
|
-
return html`<div class="${classMap(classes)}">
|
|
398
|
+
return html`<div class="${classMap(classes)}">
|
|
399
|
+
<ul class="plans" style="${styleMap(style)}">
|
|
400
|
+
${this._renderHeader(currentPlans)}
|
|
401
|
+
</ul>
|
|
402
|
+
<div class="selectors">${this._renderTriangles(currentPlans)}</div>
|
|
403
|
+
${this._renderPagination()}
|
|
404
|
+
${!this.skeleton
|
|
405
|
+
? html`<div class="characteristics">
|
|
406
|
+
${repeat(
|
|
407
|
+
this._characteristics,
|
|
408
|
+
(characteristic) => characteristic,
|
|
409
|
+
(characteristic, index) =>
|
|
410
|
+
html`<div class="characteristic">
|
|
411
|
+
<div class="circle"><gv-icon shape="home:flower#2"></gv-icon></div>
|
|
412
|
+
<div>${characteristic}</div>
|
|
413
|
+
</div>`,
|
|
414
|
+
)}
|
|
415
|
+
</div>`
|
|
416
|
+
: ''}
|
|
417
|
+
</div> `;
|
|
294
418
|
}
|
|
295
419
|
|
|
296
420
|
toLeft() {
|
|
@@ -300,7 +424,6 @@ export class GvPlans extends LitElement {
|
|
|
300
424
|
toRight() {
|
|
301
425
|
this.to(this._plans[this.current]);
|
|
302
426
|
}
|
|
303
|
-
|
|
304
427
|
}
|
|
428
|
+
|
|
305
429
|
window.customElements.define('gv-plans', GvPlans);
|
|
306
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1wbGFucy5qcyJdLCJuYW1lcyI6WyJjbGFzc01hcCIsImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImdldENzc1ZhciIsImhleFRvUkdCIiwiaTE4biIsImxpbmsiLCJyZXBlYXQiLCJza2VsZXRvbiIsImVtcHR5Iiwic3R5bGVNYXAiLCJHdlBsYW5zIiwicHJvcGVydGllcyIsInBsYW5zIiwidHlwZSIsIkFycmF5IiwiY3VycmVudCIsIk51bWJlciIsInZhbHVlIiwiU3RyaW5nIiwicmVmbGVjdCIsIkJvb2xlYW4iLCJzaXplIiwiX2VtcHR5IiwiX3BsYW5zIiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJfY2hhcmFjdGVyaXN0aWNzIiwibGVuZ3RoIiwicGxhbiIsImNoYXJhY3RlcmlzdGljcyIsInZhbGlkYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInB1c2giLCJzZWN1cml0eSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImFjdGl2ZVBsYW4iLCJmaW5kIiwicCIsImFjdGl2ZSIsImlkIiwiY2F0Y2giLCJlIiwiX2Vycm9yIiwidG8iLCJtYXAiLCJpbmRleCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsIl9nZXRQbGFuVGl0bGUiLCJ0aXRsZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIl9vblJlZGlyZWN0IiwiaGFzUGFnaW5hdGlvbiIsImhhc0xlZnQiLCJoYXNSaWdodCIsImxlZnQiLCJzbGljZSIsInJpZ2h0IiwicG9wIiwiZmlsbCIsImZvckVhY2giLCJpIiwiYSIsInVuc2hpZnQiLCJiIiwic2hpZnQiLCJfcmVuZGVySGVhZGVyIiwiYmluZCIsIl9yZW5kZXJUcmlhbmdsZXMiLCJzZWxlY3RvciIsIl9yZW5kZXJQYWdpbmF0aW9uIiwidG9MZWZ0IiwidG9SaWdodCIsInJlbmRlciIsImJnYyIsInIiLCJnIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2xvciIsImNsYXNzZXMiLCJjdXJyZW50UGxhbnMiLCJjaGFyYWN0ZXJpc3RpYyIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFULFFBQXlCLDBCQUF6QjtBQUNBLFNBQVNDLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsSUFBMUIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxtQkFBVCxRQUFvQyxlQUFwQztBQUNBLFNBQVNDLFNBQVQsRUFBb0JDLFFBQXBCLFFBQW9DLGNBQXBDO0FBRUEsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVNDLElBQVQsUUFBcUIsZ0JBQXJCO0FBQ0EsU0FBU0MsTUFBVCxRQUF1Qix1QkFBdkI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLG9CQUF6QjtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsaUJBQXRCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFDQSxPQUFPLG9CQUFQO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLE9BQU4sU0FBc0JYLFVBQXRCLENBQWlDO0FBQ2pCLGFBQVZZLFVBQVUsR0FBRztBQUN0QixXQUFPO0FBQ0w7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ01DLE1BQUFBLEtBQUssRUFBRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUVDO0FBQVIsT0FQRjtBQVFMQyxNQUFBQSxPQUFPLEVBQUU7QUFBRUYsUUFBQUEsSUFBSSxFQUFFRztBQUFSLE9BUko7QUFTTEMsTUFB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O0FBQ0Q7O0FBRURnRSxFQUFBQSxPQUFPLEdBQUc7QUFDUixTQUFLbEMsRUFBTCxDQUFRLEtBQUt0QixNQUFMLENBQVksS0FBS1IsT0FBakIsQ0FBUjtBQUNEOztBQXpYcUM7QUE0WHhDMkUsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixVQUE3QixFQUF5Q2xGLE9BQXpDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRDc3NWYXIsIGhleFRvUkdCIH0gZnJvbSAnLi4vbGliL3N0eWxlJztcblxuaW1wb3J0IHsgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IGxpbmsgfSBmcm9tICcuLi9zdHlsZXMvbGluayc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQnO1xuaW1wb3J0IHsgc2tlbGV0b24gfSBmcm9tICcuLi9zdHlsZXMvc2tlbGV0b24nO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuLi9zdHlsZXMvZW1wdHknO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAnO1xuaW1wb3J0ICcuLy4uL2F0b21zL2d2LWljb24nO1xuXG4vKipcbiAqIFBsYW5zXG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGZpcmVzIGlucHV0IC0gTmF0aXZlIGlucHV0IGV2ZW50IHdoZW4gcGxhbiBjaGFuZ2VcbiAqIEBmaXJlcyBndi1wbGFuczpyZWRpcmVjdCAtIEV2ZW50IHdoZW4gdXNlciBjbGljayB0byByZWRpcmVjdCBsaW5rIHdoZW4gcGxhbnMgYXJlIGVtcHR5XG4gKlxuICogQGF0dHIge0FycmF5fSBwbGFucyAtIFBsYW5zIGxpc3RcbiAqIEBhdHRyIHtOdW1iZXJ9IGN1cnJlbnQgLSBUaGUgY3VycmVudCBwbGFuIGluZGV4XG4gKiBAYXR0ciB7U3RyaW5nfSB2YWx1ZSAtIFRoZSBjdXJyZW50IHBsYW4gaWRcbiAqIEBhdHRyIHtCb29sZWFufSBza2VsZXRvbiAtIGVuYWJsZSBza2VsZXRvbiBzY3JlZW4gVUkgcGF0dGVybiAobG9hZGluZyBoaW50KVxuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtcGxhbnMtLWJnYz12YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCldIC0gQmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1wbGFucy1mb250LS1jPXZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItbGlnaHQsICNmZmZmZmYpXSAtIEZvbnQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtcGxhbnMtY2hhcmFjdGVyaXN0aWMtLWJnYz12YXIoLS1ndi10aGVtZS1jb2xvci1saWdodCwgIzg2YzNkMCldIC0gQ2hhcmFjdGVyaXN0aWMgYmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1wbGFucy1jaGFyYWN0ZXJpc3RpY3MtLWJkYz12YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLCAjZjVmNWY1KV0gLSBDaGFyYWN0ZXJpc3RpY3MgYm9yZGVyIGNvbG9yXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi1wbGFucy1pY29uLS1zPTI0cHhdIC0gSGVpZ2h0IGFuZCBpY29uIHdpZHRoXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlBsYW5zIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIExpc3Qgb2YgUGxhblxuICAgICAgICogQHR5cGUgT2JqZWN0IGh0dHBzOi8vZ2l0aHViLmNvbS9ncmF2aXRlZS1pby9ncmF2aXRlZS1jbGllbnRzLXNkay9ibG9iL21hc3Rlci9tb2RlbC9wbGFuLnRzXG4gICAgICAgKiBAYXR0clxuICAgICAgICogQHJlcXVpcmVkXG4gICAgICAgKi9cbiAgICAgIHBsYW5zOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBjdXJyZW50OiB7IHR5cGU6IE51bWJlciB9LFxuICAgICAgdmFsdWU6IHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBza2VsZXRvbjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBzaXplOiB7IHR5cGU6IE51bWJlciB9LFxuICAgICAgX2VtcHR5OiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIF9wbGFuczogeyB0eXBlOiBBcnJheSB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgZW1wdHksXG4gICAgICBsaW5rLFxuICAgICAgLy8gbGFuZ3VhZ2U9Y3NzXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi1wbGFucy0tYmdjLCB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCkpO1xuICAgICAgICAgIC0tZmM6IHZhcigtLWd2LXBsYW5zLWZvbnQtLWMsIHZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItbGlnaHQsICNmZmZmZmYpKTtcbiAgICAgICAgICAtLWd2LWljb24tLWM6IHZhcigtLWJnYyk7XG4gICAgICAgIH1cblxuICAgICAgICAucGxhbnMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAucGxhbiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wbGFuLmFjdGl2ZSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmdjKTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZmMpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XG4gICAgICAgIH1cblxuICAgICAgICAubmFtZSB7XG4gICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbCwgMTZweCk7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLXMsIDEycHgpO1xuICAgICAgICAgIC0tbGg6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1zLCAxMnB4KTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGgpO1xuICAgICAgICAgIC0tbWF4LWxpbmVzOiAyO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGModmFyKC0tbGgpICogdmFyKC0tbWF4LWxpbmVzKSk7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWxlY3RvcnMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIH1cblxuICAgICAgICAuc2VsZWN0b3Ige1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aXZlIC50cmlhbmdsZSB7XG4gICAgICAgICAgd2lkdGg6IDA7XG4gICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgYm9yZGVyLXRvcDogOXB4IHNvbGlkIHZhcigtLWJnYyk7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hhcmFjdGVyaXN0aWNzIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzNHB4O1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWd2LXBsYW5zLWNoYXJhY3RlcmlzdGljcy0tYmRjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLCAjZjVmNWY1KSk7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgcGFkZGluZzogMzRweDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hhcmFjdGVyaXN0aWMge1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLW0sIDE0cHgpO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgbWFyZ2luOiAyMHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNpcmNsZSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3YtcGxhbnMtY2hhcmFjdGVyaXN0aWMtLWJnYywgdmFyKC0tZ3YtdGhlbWUtY29sb3ItbGlnaHQsICM4NmMzZDApKTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICAgIG1hcmdpbjogMTBweDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBndi1pY29uIHtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IHZhcigtLWd2LXBsYW5zLWljb24tLXMsIDI0cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNrZWxldG9uIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICBtYXJnaW46IDAgMC4ycmVtO1xuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5saW5rIHtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYWdpbmF0aW9uIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHNrZWxldG9uLFxuICAgIF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY3VycmVudCA9IDE7XG4gICAgdGhpcy5zaXplID0gNDtcbiAgICB0aGlzLl9wbGFucyA9IFtdO1xuICAgIHRoaXMuX2VtcHR5ID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBfY2hhcmFjdGVyaXN0aWNzKCkge1xuICAgIGlmICh0aGlzLl9wbGFucy5sZW5ndGggPj0gdGhpcy5jdXJyZW50KSB7XG4gICAgICBjb25zdCBwbGFuID0gdGhpcy5fcGxhbnNbdGhpcy5jdXJyZW50IC0gMV07XG4gICAgICBpZiAocGxhbi5jaGFyYWN0ZXJpc3RpY3MgJiYgcGxhbi5jaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gcGxhbi5jaGFyYWN0ZXJpc3RpY3M7XG4gICAgICB9XG5cbiAgICAgIGxldCBjaGFyYWN0ZXJpc3RpY3MgPSBbXTtcblxuICAgICAgaWYgKHBsYW4udmFsaWRhdGlvbikge1xuICAgICAgICBzd2l0Y2ggKHBsYW4udmFsaWRhdGlvbi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAnQVVUTyc6XG4gICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3MucHVzaChpMThuKCdndi1wbGFucy52YWxpZGF0aW9uLmF1dG8nKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdNQU5VQUwnOlxuICAgICAgICAgICAgY2hhcmFjdGVyaXN0aWNzLnB1c2goaTE4bignZ3YtcGxhbnMudmFsaWRhdGlvbi5tYW51YWwnKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGxhbi5zZWN1cml0eSkge1xuICAgICAgICBzd2l0Y2ggKHBsYW4uc2VjdXJpdHkudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ0FQSV9LRVknOlxuICAgICAgICAgICAgY2hhcmFjdGVyaXN0aWNzLnB1c2goaTE4bignZ3YtcGxhbnMuc2VjdXJpdHkuYXBpS2V5JykpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnSldUJzpcbiAgICAgICAgICAgIGNoYXJhY3RlcmlzdGljcy5wdXNoKGkxOG4oJ2d2LXBsYW5zLnNlY3VyaXR5Lmp3dCcpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ09BVVRIMic6XG4gICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3MucHVzaChpMThuKCdndi1wbGFucy5zZWN1cml0eS5vYXV0aDInKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdLRVlfTEVTUyc6XG4gICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3MgPSBbXTtcbiAgICAgICAgICAgIGNoYXJhY3RlcmlzdGljcy5wdXNoKGkxOG4oJ2d2LXBsYW5zLnNlY3VyaXR5LmtleUxlc3MnKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhcmFjdGVyaXN0aWNzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGFyYWN0ZXJpc3RpY3MucHVzaChpMThuKCdndi1wbGFucy5jaGFyYWN0ZXJpc3RpY3MuZW1wdHknKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyYWN0ZXJpc3RpY3M7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHNldCBwbGFucyhwbGFucykge1xuICAgIHRoaXMuc2tlbGV0b24gPSB0cnVlO1xuICAgIFByb21pc2UucmVzb2x2ZShwbGFucylcbiAgICAgIC50aGVuKChwbGFucykgPT4ge1xuICAgICAgICBpZiAocGxhbnMpIHtcbiAgICAgICAgICB0aGlzLl9lbXB0eSA9IHBsYW5zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICB0aGlzLl9wbGFucyA9IHBsYW5zO1xuICAgICAgICAgIGlmICghdGhpcy5fZW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVBsYW4gPSB0aGlzLl9wbGFucy5maW5kKChwKSA9PiBwLmFjdGl2ZSk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUGxhbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BsYW5zWzBdLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9wbGFuc1swXS5pZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBhY3RpdmVQbGFuLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNrZWxldG9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgdGhpcy5fZXJyb3IgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wbGFucyA9IFtdO1xuICAgICAgICB0aGlzLnNrZWxldG9uID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHRvKHBsYW4pIHtcbiAgICBpZiAocGxhbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHBsYW4uaWQ7XG4gICAgICB0aGlzLl9wbGFucyA9IHRoaXMuX3BsYW5zLm1hcCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHApID09PSBKU09OLnN0cmluZ2lmeShwbGFuKSkge1xuICAgICAgICAgIHAuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBpbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRQbGFuVGl0bGUocGxhbikge1xuICAgIGxldCB0aXRsZSA9IHBsYW4ubmFtZTtcbiAgICBpZiAocGxhbi5kZXNjcmlwdGlvbikge1xuICAgICAgdGl0bGUgKz0gYDogJHtwbGFuLmRlc2NyaXB0aW9ufWA7XG4gICAgfVxuICAgIHJldHVybiB0aXRsZTtcbiAgfVxuXG4gIF9vblJlZGlyZWN0KCkge1xuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3JlZGlyZWN0Jyk7XG4gIH1cblxuICBnZXQgaGFzUGFnaW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplIDwgdGhpcy5fcGxhbnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhhc0xlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUGFnaW5hdGlvbiAmJiB0aGlzLmN1cnJlbnQgPiAxO1xuICB9XG5cbiAgZ2V0IGhhc1JpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc1BhZ2luYXRpb24gJiYgdGhpcy5jdXJyZW50IDwgdGhpcy5fcGxhbnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHBsYW5zKCkge1xuICAgIGlmICh0aGlzLmhhc1BhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLl9wbGFucy5zbGljZSgwLCB0aGlzLmN1cnJlbnQpO1xuICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLl9wbGFucy5zbGljZSh0aGlzLmN1cnJlbnQpO1xuICAgICAgY29uc3QgcGxhbnMgPSBbbGVmdC5wb3AoKV07XG5cbiAgICAgIG5ldyBBcnJheSh0aGlzLnNpemUgLSAxKS5maWxsKCcnKS5mb3JFYWNoKChlLCBpKSA9PiB7XG4gICAgICAgIGlmICgoaSAlIDIgPT09IDAgJiYgbGVmdC5sZW5ndGggPiAwKSB8fCByaWdodC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBhID0gbGVmdC5wb3AoKTtcbiAgICAgICAgICBwbGFucy51bnNoaWZ0KGEpO1xuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBiID0gcmlnaHQuc2hpZnQoKTtcbiAgICAgICAgICBwbGFucy5wdXNoKGIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwbGFucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3BsYW5zO1xuICB9XG5cbiAgX3JlbmRlckhlYWRlcihwbGFucykge1xuICAgIHJldHVybiBwbGFucy5tYXAoKHBsYW4sIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gaHRtbGA8bGlcbiAgICAgICAgQGNsaWNrPVwiJHt0aGlzLnRvLmJpbmQodGhpcywgcGxhbil9XCJcbiAgICAgICAgdGl0bGU9XCIke3RoaXMuX2dldFBsYW5UaXRsZShwbGFuKX1cIlxuICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoe1xuICAgICAgICAgIHBsYW46IHRydWUsXG4gICAgICAgICAgYWN0aXZlOiBwbGFuLmFjdGl2ZSxcbiAgICAgICAgfSl9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj4ke3BsYW4ubmFtZX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+JHtwbGFuLmRlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgPC9saT5gO1xuICAgIH0pO1xuICB9XG5cbiAgX3JlbmRlclRyaWFuZ2xlcyhwbGFucykge1xuICAgIHJldHVybiBwbGFucy5tYXAoKHBsYW4sIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2XG4gICAgICAgIGNsYXNzPVwiJHtjbGFzc01hcCh7XG4gICAgICAgICAgc2VsZWN0b3I6IHRydWUsXG4gICAgICAgICAgYWN0aXZlOiBwbGFuLmFjdGl2ZSxcbiAgICAgICAgfSl9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRyaWFuZ2xlXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICAgIH0pO1xuICB9XG5cbiAgX3JlbmRlclBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaGFzUGFnaW5hdGlvbikge1xuICAgICAgcmV0dXJuIGh0bWxgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgICAgICR7IXRoaXMuaGFzTGVmdCA/ICcnIDogaHRtbGA8Z3YtaWNvbiBAY2xpY2s9XCIke3RoaXMudG9MZWZ0fVwiIHNoYXBlPVwibmF2aWdhdGlvbjphbmdsZS1sZWZ0XCIgY2xhc3M9XCJsaW5rXCI+PC9ndi1pY29uPmB9XG4gICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO1wiPjwvZGl2PlxuICAgICAgICAkeyF0aGlzLmhhc1JpZ2h0ID8gJycgOiBodG1sYDxndi1pY29uIEBjbGljaz1cIiR7dGhpcy50b1JpZ2h0fVwiIHNoYXBlPVwibmF2aWdhdGlvbjphbmdsZS1yaWdodFwiIGNsYXNzPVwibGlua1wiPjwvZ3YtaWNvbj5gfVxuICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGJnYyA9IGdldENzc1Zhcih0aGlzLCAnLS1ndi1wbGFucy0tYmdjJywgJyM1QTc2ODQnKTtcbiAgICBjb25zdCB7IHIsIGcsIGIgfSA9IGhleFRvUkdCKGJnYyk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sIDAuMSlgLFxuICAgICAgY29sb3I6IGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sIDAuNSlgLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuc2tlbGV0b24pIHtcbiAgICAgIGlmICh0aGlzLl9lcnJvcikge1xuICAgICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgICA8cD4ke2kxOG4oJ2d2LXBsYW5zLmVycm9yJyl9PC9wPlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9lbXB0eSkge1xuICAgICAgICByZXR1cm4gaHRtbGAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgICAgICAgPHA+JHtpMThuKCdndi1wbGFucy5lbXB0eS50aXRsZScpfTwvcD5cbiAgICAgICAgICA8YSBjbGFzcz1cImxpbmtcIiBAY2xpY2s9XCIke3RoaXMuX29uUmVkaXJlY3R9XCI+JHtpMThuKCdndi1wbGFucy5lbXB0eS5yZWRpcmVjdCcpfTwvYT5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc2VzID0geyBza2VsZXRvbjogdGhpcy5za2VsZXRvbiB9O1xuICAgIGNvbnN0IGN1cnJlbnRQbGFucyA9IHRoaXMucGxhbnM7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoY2xhc3Nlcyl9XCI+XG4gICAgICA8dWwgY2xhc3M9XCJwbGFuc1wiIHN0eWxlPVwiJHtzdHlsZU1hcChzdHlsZSl9XCI+XG4gICAgICAgICR7dGhpcy5fcmVuZGVySGVhZGVyKGN1cnJlbnRQbGFucyl9XG4gICAgICA8L3VsPlxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yc1wiPiR7dGhpcy5fcmVuZGVyVHJpYW5nbGVzKGN1cnJlbnRQbGFucyl9PC9kaXY+XG4gICAgICAke3RoaXMuX3JlbmRlclBhZ2luYXRpb24oKX1cbiAgICAgICR7IXRoaXMuc2tlbGV0b25cbiAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJjaGFyYWN0ZXJpc3RpY3NcIj5cbiAgICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgICB0aGlzLl9jaGFyYWN0ZXJpc3RpY3MsXG4gICAgICAgICAgICAgIChjaGFyYWN0ZXJpc3RpYykgPT4gY2hhcmFjdGVyaXN0aWMsXG4gICAgICAgICAgICAgIChjaGFyYWN0ZXJpc3RpYywgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgaHRtbGA8ZGl2IGNsYXNzPVwiY2hhcmFjdGVyaXN0aWNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGVcIj48Z3YtaWNvbiBzaGFwZT1cImhvbWU6Zmxvd2VyIzJcIj48L2d2LWljb24+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PiR7Y2hhcmFjdGVyaXN0aWN9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+YFxuICAgICAgICA6ICcnfVxuICAgIDwvZGl2PiBgO1xuICB9XG5cbiAgdG9MZWZ0KCkge1xuICAgIHRoaXMudG8odGhpcy5fcGxhbnNbdGhpcy5jdXJyZW50IC0gMl0pO1xuICB9XG5cbiAgdG9SaWdodCgpIHtcbiAgICB0aGlzLnRvKHRoaXMuX3BsYW5zW3RoaXMuY3VycmVudF0pO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXBsYW5zJywgR3ZQbGFucyk7XG4iXX0=
|