@gravitee/ui-components 3.24.4 → 3.24.5-renovate-github-markdown-css-5-x-d2ffdad
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 +1260 -0
- package/LICENSE.txt +202 -0
- package/README.md +195 -0
- package/assets/css/github-markdown-css/github-markdown.css +500 -545
- package/assets/i18n/en.json +0 -3
- package/assets/i18n/fr.json +0 -3
- package/package.json +19 -21
- 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 +169 -139
- 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 -2
- 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 +49 -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 +263 -189
- 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 +208 -552
- 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 +127 -44
- 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 +280 -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 +245 -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 +761 -692
- 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
- package/assets/css/codemirror/all.css +0 -476
- package/src/molecules/gv-code-hint.js +0 -49
- package/wc/gv-code-hint.js +0 -1
|
@@ -20,6 +20,7 @@ import { repeat } from 'lit/directives/repeat';
|
|
|
20
20
|
import { classMap } from 'lit/directives/class-map';
|
|
21
21
|
import { i18n } from '../lib/i18n';
|
|
22
22
|
import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
|
|
23
|
+
|
|
23
24
|
/**
|
|
24
25
|
* Stats component
|
|
25
26
|
*
|
|
@@ -29,22 +30,45 @@ import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
|
|
|
29
30
|
* @attr {Object} stats - The stats (count by key). Key can be: count, min, max, avg, sum, rps, rpm or rph.
|
|
30
31
|
* @attr {Array<any>} options - The list of options to display.
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
33
|
export class GvStats extends withSkeletonAttribute(LitElement) {
|
|
34
34
|
static get properties() {
|
|
35
35
|
return {
|
|
36
|
-
stats: {
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
options: {
|
|
40
|
-
type: Array
|
|
41
|
-
}
|
|
36
|
+
stats: { type: Object },
|
|
37
|
+
options: { type: Array },
|
|
42
38
|
};
|
|
43
39
|
}
|
|
44
40
|
|
|
45
41
|
static get styles() {
|
|
46
|
-
return [
|
|
47
|
-
|
|
42
|
+
return [
|
|
43
|
+
...super.styles,
|
|
44
|
+
// language=CSS
|
|
45
|
+
css`
|
|
46
|
+
.stats {
|
|
47
|
+
align-content: center;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-wrap: wrap;
|
|
51
|
+
height: 100%;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.stats-container {
|
|
55
|
+
border: 1px solid;
|
|
56
|
+
border-radius: 8px;
|
|
57
|
+
margin: 15px;
|
|
58
|
+
padding: 15px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.stats-value {
|
|
62
|
+
font-size: 30px;
|
|
63
|
+
text-align: center;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.stats-label {
|
|
67
|
+
font-size: 15px;
|
|
68
|
+
text-align: center;
|
|
69
|
+
}
|
|
70
|
+
`,
|
|
71
|
+
];
|
|
48
72
|
}
|
|
49
73
|
|
|
50
74
|
constructor() {
|
|
@@ -56,16 +80,12 @@ export class GvStats extends withSkeletonAttribute(LitElement) {
|
|
|
56
80
|
if (!this.stats) {
|
|
57
81
|
return '<div></div>';
|
|
58
82
|
}
|
|
59
|
-
|
|
60
83
|
let value = Math.round(this.stats[option.key]);
|
|
61
|
-
|
|
62
84
|
if (isNaN(value)) {
|
|
63
85
|
value = 0;
|
|
64
86
|
}
|
|
65
|
-
|
|
66
87
|
if (value === 0 && option.fallback) {
|
|
67
|
-
const fallback = option.fallback.find(fallback => Math.round(this.stats[fallback.key]) > 0);
|
|
68
|
-
|
|
88
|
+
const fallback = option.fallback.find((fallback) => Math.round(this.stats[fallback.key]) > 0);
|
|
69
89
|
if (fallback) {
|
|
70
90
|
option.key = fallback.key;
|
|
71
91
|
option.label = fallback.label;
|
|
@@ -73,24 +93,29 @@ export class GvStats extends withSkeletonAttribute(LitElement) {
|
|
|
73
93
|
}
|
|
74
94
|
}
|
|
75
95
|
|
|
76
|
-
return html`
|
|
96
|
+
return html`
|
|
97
|
+
<div class="stats-container" style="color: ${option.color}">
|
|
98
|
+
<div class="stats-value">${value}${option.unit}</div>
|
|
99
|
+
<div class="stats-label">${option.label || option.key}</div>
|
|
100
|
+
</div>
|
|
101
|
+
`;
|
|
77
102
|
}
|
|
78
103
|
|
|
79
104
|
render() {
|
|
80
105
|
if (this._error) {
|
|
81
106
|
return html`<div class="error">${i18n('gv-stats.error')}</div>`;
|
|
82
107
|
}
|
|
83
|
-
|
|
84
108
|
if (this._empty) {
|
|
85
109
|
return html`<div class="empty">${i18n('gv-stats.empty')}</div>`;
|
|
86
110
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
111
|
+
return html`<div class="${classMap({ stats: true, skeleton: this._skeleton })}">
|
|
112
|
+
${repeat(
|
|
113
|
+
this.options,
|
|
114
|
+
(option) => option,
|
|
115
|
+
(option) => this._getStat(option),
|
|
116
|
+
)}
|
|
117
|
+
</div> `;
|
|
92
118
|
}
|
|
93
|
-
|
|
94
119
|
}
|
|
120
|
+
|
|
95
121
|
window.customElements.define('gv-stats', GvStats);
|
|
96
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1zdGF0cy5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsInJlcGVhdCIsImNsYXNzTWFwIiwiaTE4biIsIndpdGhTa2VsZXRvbkF0dHJpYnV0ZSIsIkd2U3RhdHMiLCJwcm9wZXJ0aWVzIiwic3RhdHMiLCJ0eXBlIiwiT2JqZWN0Iiwib3B0aW9ucyIsIkFycmF5Iiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJfc2tlbGV0b25BdHRyaWJ1dGUiLCJfZ2V0U3RhdCIsIm9wdGlvbiIsInZhbHVlIiwiTWF0aCIsInJvdW5kIiwia2V5IiwiaXNOYU4iLCJmYWxsYmFjayIsImZpbmQiLCJsYWJlbCIsImNvbG9yIiwidW5pdCIsInJlbmRlciIsIl9lcnJvciIsIl9lbXB0eSIsInNrZWxldG9uIiwiX3NrZWxldG9uIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxpQkFBUDtBQUNBLFNBQVNDLE1BQVQsUUFBdUIsdUJBQXZCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGFBQXJCO0FBQ0EsU0FBU0MscUJBQVQsUUFBc0MsbUNBQXRDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sTUFBTUMsT0FBTixTQUFzQkQscUJBQXFCLENBQUNKLFVBQUQsQ0FBM0MsQ0FBd0Q7QUFDeEMsYUFBVk0sVUFBVSxHQUFHO0FBQ3RCLFdBQU87QUFDTEMsTUFBQUEsS0FBSyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUixPQURGO0FBRUxDLE1BQUFBLE9BQU8sRUFBRTtBQUFFRixRQUFBQSxJQUFJLEVBQUVHO0FBQVI7QUFGSixLQUFQO0FBSUQ7O0FBRWdCLGFBQU5DLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0wsR0FBRyxNQUFNQSxNQURKLEVBRUw7QUFDQWQsSUFBQUEsR0FBRyxzUUFIRSxDQUFQO0FBOEJEOztBQUVEZSxFQUFBQSxXQUFXLEdBQUc7QUFDWjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLE9BQTFCO0FBQ0Q7O0FBRURDLEVBQUFBLFFBQVEsQ0FBQ0MsTUFBRCxFQUFTO0FBQ2YsUUFBSSxDQUFDLEtBQUtULEtBQVYsRUFBaUI7QUFDZixhQUFPLGFBQVA7QUFDRDs7QUFDRCxRQUFJVSxLQUFLLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXLEtBQUtaLEtBQUwsQ0FBV1MsTUFBTSxDQUFDSSxHQUFsQixDQUFYLENBQVo7O0FBQ0EsUUFBSUMsS0FBSyxDQUFDSixLQUFELENBQVQsRUFBa0I7QUFDaEJBLE1BQUFBLEtBQUssR0FBRyxDQUFSO0FBQ0Q7O0FBQ0QsUUFBSUEsS0FBSyxLQUFLLENBQVYsSUFBZUQsTUFBTSxDQUFDTSxRQUExQixFQUFvQztBQUNsQyxZQUFNQSxRQUFRLEdBQUdOLE1BQU0sQ0FBQ00sUUFBUCxDQUFnQkMsSUFBaEIsQ0FBc0JELFFBQUQsSUFBY0osSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS1osS0FBTCxDQUFXZSxRQUFRLENBQUNGLEdBQXBCLENBQVgsSUFBdUMsQ0FBMUUsQ0FBakI7O0FBQ0EsVUFBSUUsUUFBSixFQUFjO0FBQ1pOLFFBQUFBLE1BQU0sQ0FBQ0ksR0FBUCxHQUFhRSxRQUFRLENBQUNGLEdBQXRCO0FBQ0FKLFFBQUFBLE1BQU0sQ0FBQ1EsS0FBUCxHQUFlRixRQUFRLENBQUNFLEtBQXhCO0FBQ0FQLFFBQUFBLEtBQUssR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS1osS0FBTCxDQUFXUyxNQUFNLENBQUNJLEdBQWxCLENBQVgsQ0FBUjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT3JCLElBQUksOENBQ29DaUIsTUFBTSxDQUFDUyxLQUQzQywrQkFFb0JSLEtBRnBCLEdBRTRCRCxNQUFNLENBQUNVLElBRm5DLG1DQUdvQlYsTUFBTSxDQUFDUSxLQUFQLElBQWdCUixNQUFNLENBQUNJLEdBSDNDLGdCQUFYO0FBTUQ7O0FBRURPLEVBQUFBLE1BQU0sR0FBRztBQUNQLFFBQUksS0FBS0MsTUFBVCxFQUFpQjtBQUNmLGFBQU83QixJQUFJLHNCQUFzQkksSUFBSSxDQUFDLGdCQUFELENBQTFCLFFBQVg7QUFDRDs7QUFDRCxRQUFJLEtBQUswQixNQUFULEVBQWlCO0FBQ2YsYUFBTzlCLElBQUksc0JBQXNCSSxJQUFJLENBQUMsZ0JBQUQsQ0FBMUIsUUFBWDtBQUNEOztBQUNELFdBQU9KLElBQUksZUFBZUcsUUFBUSxDQUFDO0FBQUVLLE1BQUFBLEtBQUssRUFBRSxJQUFUO0FBQWV1QixNQUFBQSxRQUFRLEVBQUUsS0FBS0M7QUFBOUIsS0FBRCxDQUF2QixNQUNQOUIsTUFBTSxDQUNOLEtBQUtTLE9BREMsRUFFTE0sTUFBRCxJQUFZQSxNQUZOLEVBR0xBLE1BQUQsSUFBWSxLQUFLRCxRQUFMLENBQWNDLE1BQWQsQ0FITixDQURDLFVBQVg7QUFPRDs7QUFyRjREO0FBd0YvRGdCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsVUFBN0IsRUFBeUM3QixPQUF6QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1idXR0b24nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi10YWcnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0JztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICcuLi9saWIvaTE4bic7XG5pbXBvcnQgeyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUgfSBmcm9tICcuLi9taXhpbnMvd2l0aC1za2VsZXRvbi1hdHRyaWJ1dGUnO1xuXG4vKipcbiAqIFN0YXRzIGNvbXBvbmVudFxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBhdHRyIHtPYmplY3R9IHN0YXRzIC0gVGhlIHN0YXRzIChjb3VudCBieSBrZXkpLiBLZXkgY2FuIGJlOiBjb3VudCwgbWluLCBtYXgsIGF2Zywgc3VtLCBycHMsIHJwbSBvciBycGguXG4gKiBAYXR0ciB7QXJyYXk8YW55Pn0gb3B0aW9ucyAtIFRoZSBsaXN0IG9mIG9wdGlvbnMgdG8gZGlzcGxheS5cbiAqL1xuZXhwb3J0IGNsYXNzIEd2U3RhdHMgZXh0ZW5kcyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgb3B0aW9uczogeyB0eXBlOiBBcnJheSB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uc3VwZXIuc3R5bGVzLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIC5zdGF0cyB7XG4gICAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGF0cy1jb250YWluZXIge1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgICBtYXJnaW46IDE1cHg7XG4gICAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGF0cy12YWx1ZSB7XG4gICAgICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGF0cy1sYWJlbCB7XG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9za2VsZXRvbkF0dHJpYnV0ZSA9ICdzdGF0cyc7XG4gIH1cblxuICBfZ2V0U3RhdChvcHRpb24pIHtcbiAgICBpZiAoIXRoaXMuc3RhdHMpIHtcbiAgICAgIHJldHVybiAnPGRpdj48L2Rpdj4nO1xuICAgIH1cbiAgICBsZXQgdmFsdWUgPSBNYXRoLnJvdW5kKHRoaXMuc3RhdHNbb3B0aW9uLmtleV0pO1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAwICYmIG9wdGlvbi5mYWxsYmFjaykge1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSBvcHRpb24uZmFsbGJhY2suZmluZCgoZmFsbGJhY2spID0+IE1hdGgucm91bmQodGhpcy5zdGF0c1tmYWxsYmFjay5rZXldKSA+IDApO1xuICAgICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICAgIG9wdGlvbi5rZXkgPSBmYWxsYmFjay5rZXk7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9IGZhbGxiYWNrLmxhYmVsO1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodGhpcy5zdGF0c1tvcHRpb24ua2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdHMtY29udGFpbmVyXCIgc3R5bGU9XCJjb2xvcjogJHtvcHRpb24uY29sb3J9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy12YWx1ZVwiPiR7dmFsdWV9JHtvcHRpb24udW5pdH08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWxhYmVsXCI+JHtvcHRpb24ubGFiZWwgfHwgb3B0aW9uLmtleX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj4ke2kxOG4oJ2d2LXN0YXRzLmVycm9yJyl9PC9kaXY+YDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2VtcHR5KSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiZW1wdHlcIj4ke2kxOG4oJ2d2LXN0YXRzLmVtcHR5Jyl9PC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBzdGF0czogdHJ1ZSwgc2tlbGV0b246IHRoaXMuX3NrZWxldG9uIH0pfVwiPlxuICAgICAgJHtyZXBlYXQoXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLFxuICAgICAgICAob3B0aW9uKSA9PiB0aGlzLl9nZXRTdGF0KG9wdGlvbiksXG4gICAgICApfVxuICAgIDwvZGl2PiBgO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXN0YXRzJywgR3ZTdGF0cyk7XG4iXX0=
|
|
@@ -19,6 +19,7 @@ import { classMap } from 'lit/directives/class-map';
|
|
|
19
19
|
import { link } from '../styles/link';
|
|
20
20
|
import { dispatchCustomEvent } from '../lib/events';
|
|
21
21
|
import { i18n } from '../lib/i18n';
|
|
22
|
+
|
|
22
23
|
/**
|
|
23
24
|
* Stepper component
|
|
24
25
|
*
|
|
@@ -39,29 +40,161 @@ import { i18n } from '../lib/i18n';
|
|
|
39
40
|
* @cssprop {Color} [--gv-stepper-passed--c=#595959] - Passed color
|
|
40
41
|
* @cssprop {Length} [--gv-stepper-icon--s=32px] - Height and icon width
|
|
41
42
|
*/
|
|
42
|
-
|
|
43
43
|
export class GvStepper extends LitElement {
|
|
44
44
|
static get properties() {
|
|
45
45
|
return {
|
|
46
|
-
current: {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
steps: {
|
|
51
|
-
type: Array
|
|
52
|
-
},
|
|
53
|
-
disabled: {
|
|
54
|
-
type: Boolean
|
|
55
|
-
},
|
|
56
|
-
_error: {
|
|
57
|
-
type: Boolean
|
|
58
|
-
}
|
|
46
|
+
current: { type: Number, reflect: true },
|
|
47
|
+
steps: { type: Array },
|
|
48
|
+
disabled: { type: Boolean },
|
|
49
|
+
_error: { type: Boolean },
|
|
59
50
|
};
|
|
60
51
|
}
|
|
61
52
|
|
|
62
53
|
static get styles() {
|
|
63
|
-
return [
|
|
64
|
-
|
|
54
|
+
return [
|
|
55
|
+
link,
|
|
56
|
+
// language=CSS
|
|
57
|
+
css`
|
|
58
|
+
:host {
|
|
59
|
+
box-sizing: border-box;
|
|
60
|
+
--passed--bgc: var(--gv-stepper-valid--bgc, var(--gv-theme-color, #5a7684));
|
|
61
|
+
--passed--bdc: var(--gv-stepper-passed--bdc, var(--gv-theme-color-light, #86c3d0));
|
|
62
|
+
--bdc: var(--gv-stepper--bdc, var(--gv-theme-neutral-color-dark, #bfbfbf));
|
|
63
|
+
--bgc: var(--gv-stepper--bgc, var(--gv-theme-neutral-color-dark, #bfbfbf));
|
|
64
|
+
--passed--c: var(--gv-stepper-passed--c, #595959);
|
|
65
|
+
--c: var(--gv-stepper--c, var(--gv-theme-neutral-color-dark, #bfbfbf));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.stepper {
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: center;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.disabled .step {
|
|
74
|
+
cursor: not-allowed;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.step {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: column;
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.graph {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex-direction: row;
|
|
86
|
+
min-height: 22px;
|
|
87
|
+
min-width: 250px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.round {
|
|
91
|
+
min-width: 6px;
|
|
92
|
+
width: 6px;
|
|
93
|
+
min-height: 6px;
|
|
94
|
+
height: 6px;
|
|
95
|
+
border-radius: 50%;
|
|
96
|
+
margin: 2px 7px 2px 7px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.border {
|
|
100
|
+
margin-top: 4px;
|
|
101
|
+
min-width: 100px;
|
|
102
|
+
width: 100%;
|
|
103
|
+
height: 2px;
|
|
104
|
+
clear: both;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.round {
|
|
108
|
+
background-color: var(--bgc);
|
|
109
|
+
transition: all 0.2s ease-in;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.border {
|
|
113
|
+
background-color: var(--bdc);
|
|
114
|
+
margin-bottom: 5px;
|
|
115
|
+
transition: all 0.2s ease-in;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.passed .round {
|
|
119
|
+
background-color: var(--passed--bgc);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.passed .border {
|
|
123
|
+
background-color: var(--passed--bdc);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.passed .round {
|
|
127
|
+
height: 10px;
|
|
128
|
+
width: 10px;
|
|
129
|
+
min-height: 10px;
|
|
130
|
+
min-width: 10px;
|
|
131
|
+
margin: 0 5px 0 5px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.first .border:first-of-type {
|
|
135
|
+
visibility: hidden;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.end .border:last-of-type {
|
|
139
|
+
visibility: hidden;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.content {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
align-items: center;
|
|
146
|
+
|
|
147
|
+
padding: 5px;
|
|
148
|
+
line-height: 24px;
|
|
149
|
+
font-size: var(--gv-theme-font-size-l, 16px);
|
|
150
|
+
color: var(--c);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.passed .content {
|
|
154
|
+
color: var(--passed--c);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.title {
|
|
158
|
+
font-weight: bold;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.description {
|
|
162
|
+
font-size: var(--gv-theme-font-size-m, 14px);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.error {
|
|
166
|
+
text-align: center;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.circle {
|
|
170
|
+
border: 1px solid var(--passed--bgc);
|
|
171
|
+
margin-top: -12px;
|
|
172
|
+
border-radius: 50%;
|
|
173
|
+
animation: validate 0.2s ease-in;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.invalid.circle {
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
gv-icon {
|
|
180
|
+
--gv-icon--c: var(--passed--bgc);
|
|
181
|
+
--gv-icon--s: var(--gv-stepper-icon--s, 32px);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.invalid gv-icon {
|
|
185
|
+
--gv-icon--c: var(--gv-theme-color-danger);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@keyframes validate {
|
|
189
|
+
from {
|
|
190
|
+
opacity: 0;
|
|
191
|
+
}
|
|
192
|
+
to {
|
|
193
|
+
opacity: 1;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
`,
|
|
197
|
+
];
|
|
65
198
|
}
|
|
66
199
|
|
|
67
200
|
constructor() {
|
|
@@ -75,24 +208,24 @@ export class GvStepper extends LitElement {
|
|
|
75
208
|
_onClick(index) {
|
|
76
209
|
if (this.disabled !== true) {
|
|
77
210
|
this.current = index + 1;
|
|
78
|
-
dispatchCustomEvent(this, 'change', {
|
|
79
|
-
current: this.current
|
|
80
|
-
});
|
|
211
|
+
dispatchCustomEvent(this, 'change', { current: this.current });
|
|
81
212
|
}
|
|
82
213
|
}
|
|
83
214
|
|
|
84
215
|
async performUpdate() {
|
|
85
|
-
await Promise.all([this.steps, this.current])
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
216
|
+
await Promise.all([this.steps, this.current])
|
|
217
|
+
.then(([steps, current]) => {
|
|
218
|
+
this._steps = steps.map((step, _index) => {
|
|
219
|
+
step.passed = step.valid === true || (current > 0 && _index + 1 <= current);
|
|
220
|
+
return step;
|
|
221
|
+
});
|
|
222
|
+
this._error = false;
|
|
223
|
+
this._empty = !(this._steps && this._steps.length > 0);
|
|
224
|
+
})
|
|
225
|
+
.catch(() => {
|
|
226
|
+
this._error = true;
|
|
227
|
+
this._empty = false;
|
|
89
228
|
});
|
|
90
|
-
this._error = false;
|
|
91
|
-
this._empty = !(this._steps && this._steps.length > 0);
|
|
92
|
-
}).catch(() => {
|
|
93
|
-
this._error = true;
|
|
94
|
-
this._empty = false;
|
|
95
|
-
});
|
|
96
229
|
super.performUpdate();
|
|
97
230
|
}
|
|
98
231
|
|
|
@@ -100,11 +233,9 @@ export class GvStepper extends LitElement {
|
|
|
100
233
|
if (step.invalid) {
|
|
101
234
|
return html`<div class="circle invalid"><gv-icon shape="code:error"></gv-icon></div>`;
|
|
102
235
|
}
|
|
103
|
-
|
|
104
236
|
if (step.valid) {
|
|
105
237
|
return html`<div class="circle"><gv-icon shape="code:check"></gv-icon></div>`;
|
|
106
238
|
}
|
|
107
|
-
|
|
108
239
|
return html`<div class="round"></div>`;
|
|
109
240
|
}
|
|
110
241
|
|
|
@@ -114,31 +245,44 @@ export class GvStepper extends LitElement {
|
|
|
114
245
|
valid: step.valid,
|
|
115
246
|
step: true,
|
|
116
247
|
first: index === 0,
|
|
117
|
-
end: index === this._steps.length - 1
|
|
248
|
+
end: index === this._steps.length - 1,
|
|
118
249
|
};
|
|
250
|
+
|
|
119
251
|
const contentClasses = {
|
|
120
252
|
content: true,
|
|
121
|
-
link: !this.disabled
|
|
253
|
+
link: !this.disabled,
|
|
122
254
|
};
|
|
123
|
-
return html`
|
|
255
|
+
return html`
|
|
256
|
+
<div class="${classMap(classes)}" @click="${this._onClick.bind(this, index)}" title="${step.title}">
|
|
257
|
+
<div class="graph">
|
|
258
|
+
<div class="border"></div>
|
|
259
|
+
${this._getIcon(step)}
|
|
260
|
+
<div class="border"></div>
|
|
261
|
+
</div>
|
|
262
|
+
<div class="${classMap(contentClasses)}">
|
|
263
|
+
<div class="title">${step.title}</div>
|
|
264
|
+
<div class="description">${step.description}</div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
`;
|
|
124
268
|
}
|
|
125
269
|
|
|
126
270
|
render() {
|
|
127
271
|
if (this._error) {
|
|
128
272
|
return html`<div class="error">${i18n('gv-stepper.error')}</div>`;
|
|
129
273
|
}
|
|
130
|
-
|
|
131
274
|
if (this._empty) {
|
|
132
275
|
return html`<div></div>`;
|
|
133
276
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
277
|
+
const classes = { stepper: true, disabled: this.disabled };
|
|
278
|
+
return html`<div class="${classMap(classes)}">
|
|
279
|
+
${repeat(
|
|
280
|
+
this._steps,
|
|
281
|
+
(step) => step,
|
|
282
|
+
(step, index) => this._getStep(step, index),
|
|
283
|
+
)}
|
|
284
|
+
</div> `;
|
|
140
285
|
}
|
|
141
|
-
|
|
142
286
|
}
|
|
287
|
+
|
|
143
288
|
window.customElements.define('gv-stepper', GvStepper);
|
|
144
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1zdGVwcGVyLmpzIl0sIm5hbWVzIjpbImNzcyIsImh0bWwiLCJMaXRFbGVtZW50IiwicmVwZWF0IiwiY2xhc3NNYXAiLCJsaW5rIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImkxOG4iLCJHdlN0ZXBwZXIiLCJwcm9wZXJ0aWVzIiwiY3VycmVudCIsInR5cGUiLCJOdW1iZXIiLCJyZWZsZWN0Iiwic3RlcHMiLCJBcnJheSIsImRpc2FibGVkIiwiQm9vbGVhbiIsIl9lcnJvciIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiX3N0ZXBzIiwiX2VtcHR5IiwiX29uQ2xpY2siLCJpbmRleCIsInBlcmZvcm1VcGRhdGUiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm1hcCIsInN0ZXAiLCJfaW5kZXgiLCJwYXNzZWQiLCJ2YWxpZCIsImxlbmd0aCIsImNhdGNoIiwiX2dldEljb24iLCJpbnZhbGlkIiwiX2dldFN0ZXAiLCJjbGFzc2VzIiwiZmlyc3QiLCJlbmQiLCJjb250ZW50Q2xhc3NlcyIsImNvbnRlbnQiLCJiaW5kIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInJlbmRlciIsInN0ZXBwZXIiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxJQUFkLEVBQW9CQyxVQUFwQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLE1BQVQsUUFBdUIsdUJBQXZCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGdCQUFyQjtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUVBO0FB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S0FBcEIsQ0FIWCxDQURDLFVBQVg7QUFPRDs7QUFsUHVDO0FBcVAxQ3lCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsWUFBN0IsRUFBMkMzQyxTQUEzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0JztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGxpbmsgfSBmcm9tICcuLi9zdHlsZXMvbGluayc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnLi4vbGliL2kxOG4nO1xuXG4vKipcbiAqIFN0ZXBwZXIgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGZpcmVzIGd2LXN0ZXBwZXI6Y2hhbmdlIC0gd2hlbiBzdGVwIGNoYW5nZVxuICpcbiAqIEBhdHRyIHtMZW5ndGh9IGN1cnJlbnQgLSBUaGUgY3VycmVudCBzZWxlY3RlZCBzdGVwXG4gKiBAYXR0ciB7QXJyYXl9IHN0ZXBzIC0gQXJyYXkgb2Ygc3RlcCB7dGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgdmFsaWQ6IGJvb2xlYW4sIGludmFsaWQ6IGJvb2xlYW59XG4gKiBAYXR0ciB7Qm9vbGVhbn0gW2Rpc2FibGVkPWZhbHNlXSAtIEluZGljYXRlIGlmIHN0ZXBwZXIgaXMgZGlzYWJsZWRcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXN0ZXBwZXItdmFsaWQtLWJnYz12YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCldIC0gVmFsaWQgYmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1zdGVwcGVyLXBhc3NlZC0tYmRjPXZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKV0gLSBQYXNzZWQgYm9yZGVyIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXN0ZXBwZXItLWJnYz12YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNiZmJmYmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3Ytc3RlcHBlci0tYmRjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZildIC0gQm9yZGVyIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXN0ZXBwZXItLWM9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrLCAjYmZiZmJmKV0gLSBDb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1zdGVwcGVyLXBhc3NlZC0tYz0jNTk1OTU5XSAtIFBhc3NlZCBjb2xvclxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3Ytc3RlcHBlci1pY29uLS1zPTMycHhdIC0gSGVpZ2h0IGFuZCBpY29uIHdpZHRoXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlN0ZXBwZXIgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiB7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgc3RlcHM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIF9lcnJvcjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBsaW5rLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIC0tcGFzc2VkLS1iZ2M6IHZhcigtLWd2LXN0ZXBwZXItdmFsaWQtLWJnYywgdmFyKC0tZ3YtdGhlbWUtY29sb3IsICM1YTc2ODQpKTtcbiAgICAgICAgICAtLXBhc3NlZC0tYmRjOiB2YXIoLS1ndi1zdGVwcGVyLXBhc3NlZC0tYmRjLCB2YXIoLS1ndi10aGVtZS1jb2xvci1saWdodCwgIzg2YzNkMCkpO1xuICAgICAgICAgIC0tYmRjOiB2YXIoLS1ndi1zdGVwcGVyLS1iZGMsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZikpO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi1zdGVwcGVyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZikpO1xuICAgICAgICAgIC0tcGFzc2VkLS1jOiB2YXIoLS1ndi1zdGVwcGVyLXBhc3NlZC0tYywgIzU5NTk1OSk7XG4gICAgICAgICAgLS1jOiB2YXIoLS1ndi1zdGVwcGVyLS1jLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNiZmJmYmYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGVwcGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpc2FibGVkIC5zdGVwIHtcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgLnN0ZXAge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZ3JhcGgge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBtaW4taGVpZ2h0OiAyMnB4O1xuICAgICAgICAgIG1pbi13aWR0aDogMjUwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAucm91bmQge1xuICAgICAgICAgIG1pbi13aWR0aDogNnB4O1xuICAgICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICAgICAgbWluLWhlaWdodDogNnB4O1xuICAgICAgICAgIGhlaWdodDogNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICBtYXJnaW46IDJweCA3cHggMnB4IDdweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ib3JkZXIge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMnB4O1xuICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdW5kIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XG4gICAgICAgIH1cblxuICAgICAgICAuYm9yZGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZGMpO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xuICAgICAgICB9XG5cbiAgICAgICAgLnBhc3NlZCAucm91bmQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhc3NlZC0tYmdjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYXNzZWQgLmJvcmRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFzc2VkLS1iZGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnBhc3NlZCAucm91bmQge1xuICAgICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgICB3aWR0aDogMTBweDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxMHB4O1xuICAgICAgICAgIG1pbi13aWR0aDogMTBweDtcbiAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZpcnN0IC5ib3JkZXI6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmVuZCAuYm9yZGVyOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLWwsIDE2cHgpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1jKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYXNzZWQgLmNvbnRlbnQge1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1wYXNzZWQtLWMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRpdGxlIHtcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbSwgMTRweCk7XG4gICAgICAgIH1cblxuICAgICAgICAuZXJyb3Ige1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaXJjbGUge1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXBhc3NlZC0tYmdjKTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAtMTJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgYW5pbWF0aW9uOiB2YWxpZGF0ZSAwLjJzIGVhc2UtaW47XG4gICAgICAgIH1cblxuICAgICAgICAuaW52YWxpZC5jaXJjbGUge1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1wYXNzZWQtLWJnYyk7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1ndi1zdGVwcGVyLWljb24tLXMsIDMycHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmludmFsaWQgZ3YtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvci1kYW5nZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgQGtleWZyYW1lcyB2YWxpZGF0ZSB7XG4gICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0byB7XG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIHRoaXMuX3N0ZXBzID0gW107XG4gICAgdGhpcy5fZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9lbXB0eSA9IHRydWU7XG4gIH1cblxuICBfb25DbGljayhpbmRleCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBpbmRleCArIDE7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UnLCB7IGN1cnJlbnQ6IHRoaXMuY3VycmVudCB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwZXJmb3JtVXBkYXRlKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnN0ZXBzLCB0aGlzLmN1cnJlbnRdKVxuICAgICAgLnRoZW4oKFtzdGVwcywgY3VycmVudF0pID0+IHtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXAsIF9pbmRleCkgPT4ge1xuICAgICAgICAgIHN0ZXAucGFzc2VkID0gc3RlcC52YWxpZCA9PT0gdHJ1ZSB8fCAoY3VycmVudCA+IDAgJiYgX2luZGV4ICsgMSA8PSBjdXJyZW50KTtcbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2Vycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VtcHR5ID0gISh0aGlzLl9zdGVwcyAmJiB0aGlzLl9zdGVwcy5sZW5ndGggPiAwKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aGlzLl9lcnJvciA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VtcHR5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICBzdXBlci5wZXJmb3JtVXBkYXRlKCk7XG4gIH1cblxuICBfZ2V0SWNvbihzdGVwKSB7XG4gICAgaWYgKHN0ZXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImNpcmNsZSBpbnZhbGlkXCI+PGd2LWljb24gc2hhcGU9XCJjb2RlOmVycm9yXCI+PC9ndi1pY29uPjwvZGl2PmA7XG4gICAgfVxuICAgIGlmIChzdGVwLnZhbGlkKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiY2lyY2xlXCI+PGd2LWljb24gc2hhcGU9XCJjb2RlOmNoZWNrXCI+PC9ndi1pY29uPjwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJyb3VuZFwiPjwvZGl2PmA7XG4gIH1cblxuICBfZ2V0U3RlcChzdGVwLCBpbmRleCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICBwYXNzZWQ6IHN0ZXAucGFzc2VkLFxuICAgICAgdmFsaWQ6IHN0ZXAudmFsaWQsXG4gICAgICBzdGVwOiB0cnVlLFxuICAgICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgICAgZW5kOiBpbmRleCA9PT0gdGhpcy5fc3RlcHMubGVuZ3RoIC0gMSxcbiAgICB9O1xuXG4gICAgY29uc3QgY29udGVudENsYXNzZXMgPSB7XG4gICAgICBjb250ZW50OiB0cnVlLFxuICAgICAgbGluazogIXRoaXMuZGlzYWJsZWQsXG4gICAgfTtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKGNsYXNzZXMpfVwiIEBjbGljaz1cIiR7dGhpcy5fb25DbGljay5iaW5kKHRoaXMsIGluZGV4KX1cIiB0aXRsZT1cIiR7c3RlcC50aXRsZX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyYXBoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlclwiPjwvZGl2PlxuICAgICAgICAgICR7dGhpcy5fZ2V0SWNvbihzdGVwKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcChjb250ZW50Q2xhc3Nlcyl9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHtzdGVwLnRpdGxlfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7c3RlcC5kZXNjcmlwdGlvbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLl9lcnJvcikge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImVycm9yXCI+JHtpMThuKCdndi1zdGVwcGVyLmVycm9yJyl9PC9kaXY+YDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2VtcHR5KSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2PjwvZGl2PmA7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzZXMgPSB7IHN0ZXBwZXI6IHRydWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH07XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoY2xhc3Nlcyl9XCI+XG4gICAgICAke3JlcGVhdChcbiAgICAgICAgdGhpcy5fc3RlcHMsXG4gICAgICAgIChzdGVwKSA9PiBzdGVwLFxuICAgICAgICAoc3RlcCwgaW5kZXgpID0+IHRoaXMuX2dldFN0ZXAoc3RlcCwgaW5kZXgpLFxuICAgICAgKX1cbiAgICA8L2Rpdj4gYDtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1zdGVwcGVyJywgR3ZTdGVwcGVyKTtcbiJdfQ==
|