@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,36 +17,26 @@ import { getLanguage, getAvailableLanguages } from '../lib/i18n';
|
|
|
17
17
|
import { LitElement, html } from 'lit';
|
|
18
18
|
import { until } from 'lit/directives/until';
|
|
19
19
|
import { shouldPolyfill as shouldPolyfillIntlRelativeTimeFormat } from '@formatjs/intl-relativetimeformat/should-polyfill';
|
|
20
|
+
|
|
20
21
|
const options = {
|
|
21
22
|
year: 'numeric',
|
|
22
23
|
month: 'short',
|
|
23
24
|
day: 'numeric',
|
|
24
25
|
hour: 'numeric',
|
|
25
26
|
minute: 'numeric',
|
|
26
|
-
timeZoneName: 'short'
|
|
27
|
+
timeZoneName: 'short',
|
|
27
28
|
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
duration: 1000 * 60 * 60 * 24 * 365.25
|
|
31
|
-
},
|
|
32
|
-
unit: '
|
|
33
|
-
duration: 1000 * 60 * 60 * 24
|
|
34
|
-
},
|
|
35
|
-
unit: '
|
|
36
|
-
duration: 1000
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
duration: 1000 * 60 * 60 * 24
|
|
40
|
-
}, {
|
|
41
|
-
unit: 'hour',
|
|
42
|
-
duration: 1000 * 60 * 60
|
|
43
|
-
}, {
|
|
44
|
-
unit: 'minute',
|
|
45
|
-
duration: 1000 * 60
|
|
46
|
-
}, {
|
|
47
|
-
unit: 'second',
|
|
48
|
-
duration: 1000
|
|
49
|
-
}];
|
|
29
|
+
|
|
30
|
+
const UNITS = [
|
|
31
|
+
{ unit: 'year', duration: 1000 * 60 * 60 * 24 * 365.25 },
|
|
32
|
+
{ unit: 'month', duration: 1000 * 60 * 60 * 24 * (365.25 / 12) },
|
|
33
|
+
{ unit: 'week', duration: 1000 * 60 * 60 * 24 * 7 },
|
|
34
|
+
{ unit: 'day', duration: 1000 * 60 * 60 * 24 },
|
|
35
|
+
{ unit: 'hour', duration: 1000 * 60 * 60 },
|
|
36
|
+
{ unit: 'minute', duration: 1000 * 60 },
|
|
37
|
+
{ unit: 'second', duration: 1000 },
|
|
38
|
+
];
|
|
39
|
+
|
|
50
40
|
/**
|
|
51
41
|
* Component to display a localized humanized relative date (ex: "two minutes ago").
|
|
52
42
|
*
|
|
@@ -56,28 +46,14 @@ const UNITS = [{
|
|
|
56
46
|
* @prop {String|Number} datetime - Date as ISO string or timestamp.
|
|
57
47
|
* @prop {Boolean} noFuture - Whether a date in future is allowed or not (useful when not sync).
|
|
58
48
|
*/
|
|
59
|
-
|
|
60
49
|
export class GvRelativeTime extends LitElement {
|
|
61
50
|
static get properties() {
|
|
62
51
|
return {
|
|
63
|
-
datetime: {
|
|
64
|
-
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
reflect: true
|
|
69
|
-
},
|
|
70
|
-
noFuture: {
|
|
71
|
-
type: Boolean
|
|
72
|
-
},
|
|
73
|
-
_relativeTime: {
|
|
74
|
-
type: String,
|
|
75
|
-
attribute: false
|
|
76
|
-
},
|
|
77
|
-
_updateIntervalId: {
|
|
78
|
-
type: String,
|
|
79
|
-
attribute: false
|
|
80
|
-
}
|
|
52
|
+
datetime: { type: String },
|
|
53
|
+
title: { type: String, reflect: true },
|
|
54
|
+
noFuture: { type: Boolean },
|
|
55
|
+
_relativeTime: { type: String, attribute: false },
|
|
56
|
+
_updateIntervalId: { type: String, attribute: false },
|
|
81
57
|
};
|
|
82
58
|
}
|
|
83
59
|
|
|
@@ -93,15 +69,23 @@ export class GvRelativeTime extends LitElement {
|
|
|
93
69
|
return this._formatter;
|
|
94
70
|
} else {
|
|
95
71
|
// Load the needed polyfills 1st BEFORE loading data
|
|
96
|
-
return import('@formatjs/intl-locale/polyfill')
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
72
|
+
return import('@formatjs/intl-locale/polyfill')
|
|
73
|
+
.then(() => import('@formatjs/intl-relativetimeformat/polyfill'))
|
|
74
|
+
.then(() =>
|
|
75
|
+
Promise.all([
|
|
76
|
+
...Object.values(getAvailableLanguages()).map((_lang) => {
|
|
77
|
+
return import(`@formatjs/intl-relativetimeformat/locale-data/${_lang}`);
|
|
78
|
+
}),
|
|
79
|
+
]),
|
|
80
|
+
)
|
|
81
|
+
.then(() => {
|
|
82
|
+
this._formatter = Intl.RelativeTimeFormat;
|
|
83
|
+
return this._formatter;
|
|
84
|
+
})
|
|
85
|
+
.catch((err) => {
|
|
86
|
+
console.error(err);
|
|
87
|
+
throw new Error('Cannot load @formatjs/intl polyfills');
|
|
88
|
+
});
|
|
105
89
|
}
|
|
106
90
|
} else {
|
|
107
91
|
return this._formatter;
|
|
@@ -119,47 +103,35 @@ export class GvRelativeTime extends LitElement {
|
|
|
119
103
|
// to avoid to have date in the future in case of desynchronization between browser and server
|
|
120
104
|
if (date) {
|
|
121
105
|
const now = new Date();
|
|
122
|
-
|
|
123
106
|
if (now.getTime() < new Date(date).getTime()) {
|
|
124
107
|
date = now;
|
|
125
108
|
}
|
|
126
109
|
}
|
|
127
|
-
|
|
128
110
|
return date;
|
|
129
111
|
}
|
|
130
112
|
|
|
131
113
|
async _format(dateStr, lang) {
|
|
132
114
|
const Formatter = await this.getFormatter();
|
|
133
|
-
|
|
134
115
|
const format = (value, unit) => {
|
|
135
116
|
if (!isNaN(value)) {
|
|
136
|
-
return new Formatter(lang, {
|
|
137
|
-
numeric: 'auto'
|
|
138
|
-
}).format(-value, unit);
|
|
117
|
+
return new Formatter(lang, { numeric: 'auto' }).format(-value, unit);
|
|
139
118
|
}
|
|
140
119
|
};
|
|
141
|
-
|
|
142
120
|
const now = new Date().getTime();
|
|
143
121
|
const diff = now - new Date(dateStr).getTime();
|
|
144
122
|
|
|
145
|
-
for (const {
|
|
146
|
-
unit,
|
|
147
|
-
duration
|
|
148
|
-
} of UNITS) {
|
|
123
|
+
for (const { unit, duration } of UNITS) {
|
|
149
124
|
const value = diff / duration;
|
|
150
125
|
const roundedValue = Math.round(value);
|
|
151
|
-
|
|
152
126
|
if (Math.abs(value) >= 1) {
|
|
153
127
|
return format(roundedValue, unit);
|
|
154
128
|
}
|
|
155
129
|
}
|
|
156
|
-
|
|
157
130
|
return format(Math.round(diff / 1000), 'second');
|
|
158
131
|
}
|
|
159
132
|
|
|
160
133
|
connectedCallback() {
|
|
161
134
|
super.connectedCallback();
|
|
162
|
-
|
|
163
135
|
if (this.updateIntervalId == null) {
|
|
164
136
|
setTimeout(() => {
|
|
165
137
|
this.performUpdate();
|
|
@@ -179,7 +151,6 @@ export class GvRelativeTime extends LitElement {
|
|
|
179
151
|
render() {
|
|
180
152
|
return html`<span title="${this.title}">${until(this._format(this._datetime, getLanguage()))}</span>`;
|
|
181
153
|
}
|
|
182
|
-
|
|
183
154
|
}
|
|
155
|
+
|
|
184
156
|
window.customElements.define('gv-relative-time', GvRelativeTime);
|
|
185
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL2F0b21zL2d2LXJlbGF0aXZlLXRpbWUuanMiXSwibmFtZXMiOlsiZ2V0TGFuZ3VhZ2UiLCJnZXRBdmFpbGFibGVMYW5ndWFnZXMiLCJMaXRFbGVtZW50IiwiaHRtbCIsInVudGlsIiwic2hvdWxkUG9seWZpbGwiLCJzaG91bGRQb2x5ZmlsbEludGxSZWxhdGl2ZVRpbWVGb3JtYXQiLCJvcHRpb25zIiwieWVhciIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInRpbWVab25lTmFtZSIsIlVOSVRTIiwidW5pdCIsImR1cmF0aW9uIiwiR3ZSZWxhdGl2ZVRpbWUiLCJwcm9wZXJ0aWVzIiwiZGF0ZXRpbWUiLCJ0eXBlIiwiU3RyaW5nIiwidGl0bGUiLCJyZWZsZWN0Iiwibm9GdXR1cmUiLCJCb29sZWFuIiwiX3JlbGF0aXZlVGltZSIsImF0dHJpYnV0ZSIsIl91cGRhdGVJbnRlcnZhbElkIiwiY29uc3RydWN0b3IiLCJfZm9ybWF0dGVyIiwiZ2V0Rm9ybWF0dGVyIiwiSW50bCIsIlJlbGF0aXZlVGltZUZvcm1hdCIsInRoZW4iLCJQcm9taXNlIiwiYWxsIiwiT2JqZWN0IiwidmFsdWVzIiwibWFwIiwiX2xhbmciLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsIkVycm9yIiwidmFsdWUiLCJfZm9ybWF0RGF0ZUluVGhlUGFzdCIsImR0ZiIsIkRhdGVUaW1lRm9ybWF0IiwiZm9ybWF0IiwiRGF0ZSIsIl9kYXRldGltZSIsImRhdGUiLCJub3ciLCJnZXRUaW1lIiwiX2Zvcm1hdCIsImRhdGVTdHIiLCJsYW5nIiwiRm9ybWF0dGVyIiwiaXNOYU4iLCJudW1lcmljIiwiZGlmZiIsInJvdW5kZWRWYWx1ZSIsIk1hdGgiLCJyb3VuZCIsImFicyIsImNvbm5lY3RlZENhbGxiYWNrIiwidXBkYXRlSW50ZXJ2YWxJZCIsInNldFRpbWVvdXQiLCJwZXJmb3JtVXBkYXRlIiwic2V0SW50ZXJ2YWwiLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImNsZWFySW50ZXJ2YWwiLCJyZW5kZXIiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsV0FBVCxFQUFzQkMscUJBQXRCLFFBQW1ELGFBQW5EO0FBQ0EsU0FBU0MsVUFBVCxFQUFxQkMsSUFBckIsUUFBaUMsS0FBakM7QUFDQSxTQUFTQyxLQUFULFFBQXNCLHNCQUF0QjtBQUNBLFNBQVNDLGNBQWMsSUFBSUMsb0NBQTNCLFFBQXVFLG1EQUF2RTtBQUVBLE1BQU1DLE9BQU8sR0FBRztBQUNkQyxFQUFBQSxJQUFJLEVBQUUsU0FEUTtBQUVkQyxFQUFBQSxLQUFLLEVBQUUsT0FGTztBQUdkQyxFQUFBQSxHQUFHLEVBQUUsU0FIUztBQUlkQyxFQUFBQSxJQUFJLEVBQUUsU0FKUTtBQUtkQyxFQUFBQSxNQUFNLEVBQUUsU0FMTTtBQU1kQyxFQUFBQSxZQUFZLEVBQUU7QUFOQSxDQUFoQjtBQVNBLE1BQU1DLEtBQUssR0FBRyxDQUNaO0FBQUVDLEVBQUFBLElBQUksRUFBRSxNQUFSO0FBQWdCQyxFQUFBQSxRQUFRLEVBQUUsT0FBTyxFQUFQLEdBQVksRUFBWixHQUFpQixFQUFqQixHQUFzQjtBQUFoRCxDQURZLEVBRVo7QUFBRUQsRUFBQUEsSUFBSSxFQUFFLE9BQVI7QUFBaUJDLEVBQUFBLFFBQVEsRUFBRSxPQUFPLEVBQVAsR0FBWSxFQUFaLEdBQWlCLEVBQWpCLElBQXVCLFNBQVMsRUFBaEM7QUFBM0IsQ0FGWSxFQUdaO0FBQUVELEVBQUFBLElBQUksRUFBRSxNQUFSO0FBQWdCQyxFQUFBQSxRQUFRLEVBQUUsT0FBTyxFQUFQLEdBQVksRUFBWixHQUFpQixFQUFqQixHQUFzQjtBQUFoRCxDQUhZLEVBSVo7QUFBRUQsRUFBQUEsSUFBSSxFQUFFLEtBQVI7QUFB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QUFyQjs7QUFDQSxVQUFJa0IsSUFBSSxDQUFDRSxHQUFMLENBQVNwQixLQUFULEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLGVBQU9JLE1BQU0sQ0FBQ2EsWUFBRCxFQUFlaEQsSUFBZixDQUFiO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPbUMsTUFBTSxDQUFDYyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsSUFBSSxHQUFHLElBQWxCLENBQUQsRUFBMEIsUUFBMUIsQ0FBYjtBQUNEOztBQUVESyxFQUFBQSxpQkFBaUIsR0FBRztBQUNsQixVQUFNQSxpQkFBTjs7QUFDQSxRQUFJLEtBQUtDLGdCQUFMLElBQXlCLElBQTdCLEVBQW1DO0FBQ2pDQyxNQUFBQSxVQUFVLENBQUMsTUFBTTtBQUNmLGFBQUtDLGFBQUw7QUFDRCxPQUZTLENBQVY7QUFHQSxXQUFLRixnQkFBTCxHQUF3QkcsV0FBVyxDQUFDLE1BQU07QUFDeEMsYUFBS0QsYUFBTDtBQUNELE9BRmtDLEVBRWhDLEtBQUssSUFGMkIsQ0FBbkM7QUFHRDtBQUNGOztBQUVERSxFQUFBQSxvQkFBb0IsR0FBRztBQUNyQixVQUFNQSxvQkFBTjtBQUNBQyxJQUFBQSxhQUFhLENBQUMsS0FBS0wsZ0JBQU4sQ0FBYjtBQUNBLFNBQUtBLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0Q7O0FBRURNLEVBQUFBLE1BQU0sR0FBRztBQUNQLFdBQU92RSxJQUFJLGdCQUFnQixLQUFLbUIsS0FBckIsS0FBK0JsQixLQUFLLENBQUMsS0FBS29ELE9BQUwsQ0FBYSxLQUFLSixTQUFsQixFQUE2QnBELFdBQVcsRUFBeEMsQ0FBRCxDQUFwQyxTQUFYO0FBQ0Q7O0FBeEc0QztBQTJHL0MyRSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGtCQUE3QixFQUFpRDVELGNBQWpEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGdldExhbmd1YWdlLCBnZXRBdmFpbGFibGVMYW5ndWFnZXMgfSBmcm9tICcuLi9saWIvaTE4bic7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwnO1xuaW1wb3J0IHsgc2hvdWxkUG9seWZpbGwgYXMgc2hvdWxkUG9seWZpbGxJbnRsUmVsYXRpdmVUaW1lRm9ybWF0IH0gZnJvbSAnQGZvcm1hdGpzL2ludGwtcmVsYXRpdmV0aW1lZm9ybWF0L3Nob3VsZC1wb2x5ZmlsbCc7XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gIHllYXI6ICdudW1lcmljJyxcbiAgbW9udGg6ICdzaG9ydCcsXG4gIGRheTogJ251bWVyaWMnLFxuICBob3VyOiAnbnVtZXJpYycsXG4gIG1pbnV0ZTogJ251bWVyaWMnLFxuICB0aW1lWm9uZU5hbWU6ICdzaG9ydCcsXG59O1xuXG5jb25zdCBVTklUUyA9IFtcbiAgeyB1bml0OiAneWVhcicsIGR1cmF0aW9uOiAxMDAwICogNjAgKiA2MCAqIDI0ICogMzY1LjI1IH0sXG4gIHsgdW5pdDogJ21vbnRoJywgZHVyYXRpb246IDEwMDAgKiA2MCAqIDYwICogMjQgKiAoMzY1LjI1IC8gMTIpIH0sXG4gIHsgdW5pdDogJ3dlZWsnLCBkdXJhdGlvbjogMTAwMCAqIDYwICogNjAgKiAyNCAqIDcgfSxcbiAgeyB1bml0OiAnZGF5JywgZHVyYXRpb246IDEwMDAgKiA2MCAqIDYwICogMjQgfSxcbiAgeyB1bml0OiAnaG91cicsIGR1cmF0aW9uOiAxMDAwICogNjAgKiA2MCB9LFxuICB7IHVuaXQ6ICdtaW51dGUnLCBkdXJhdGlvbjogMTAwMCAqIDYwIH0sXG4gIHsgdW5pdDogJ3NlY29uZCcsIGR1cmF0aW9uOiAxMDAwIH0sXG5dO1xuXG4vKipcbiAqIENvbXBvbmVudCB0byBkaXNwbGF5IGEgbG9jYWxpemVkIGh1bWFuaXplZCByZWxhdGl2ZSBkYXRlIChleDogXCJ0d28gbWludXRlcyBhZ29cIikuXG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQHByb3Age1N0cmluZ3xOdW1iZXJ9IGRhdGV0aW1lIC0gRGF0ZSBhcyBJU08gc3RyaW5nIG9yIHRpbWVzdGFtcC5cbiAqIEBwcm9wIHtCb29sZWFufSBub0Z1dHVyZSAtIFdoZXRoZXIgYSBkYXRlIGluIGZ1dHVyZSBpcyBhbGxvd2VkIG9yIG5vdCAodXNlZnVsIHdoZW4gbm90IHN5bmMpLlxuICovXG5leHBvcnQgY2xhc3MgR3ZSZWxhdGl2ZVRpbWUgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRldGltZTogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgbm9GdXR1cmU6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgX3JlbGF0aXZlVGltZTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF91cGRhdGVJbnRlcnZhbElkOiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2Zvcm1hdHRlciA9IG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRGb3JtYXR0ZXIoKSB7XG4gICAgaWYgKHRoaXMuX2Zvcm1hdHRlciA9PSBudWxsKSB7XG4gICAgICBpZiAoIXNob3VsZFBvbHlmaWxsSW50bFJlbGF0aXZlVGltZUZvcm1hdCgpKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlciA9IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0O1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9hZCB0aGUgbmVlZGVkIHBvbHlmaWxscyAxc3QgQkVGT1JFIGxvYWRpbmcgZGF0YVxuICAgICAgICByZXR1cm4gaW1wb3J0KCdAZm9ybWF0anMvaW50bC1sb2NhbGUvcG9seWZpbGwnKVxuICAgICAgICAgIC50aGVuKCgpID0+IGltcG9ydCgnQGZvcm1hdGpzL2ludGwtcmVsYXRpdmV0aW1lZm9ybWF0L3BvbHlmaWxsJykpXG4gICAgICAgICAgLnRoZW4oKCkgPT5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhnZXRBdmFpbGFibGVMYW5ndWFnZXMoKSkubWFwKChfbGFuZykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbXBvcnQoYEBmb3JtYXRqcy9pbnRsLXJlbGF0aXZldGltZWZvcm1hdC9sb2NhbGUtZGF0YS8ke19sYW5nfWApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZXIgPSBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBAZm9ybWF0anMvaW50bCBwb2x5ZmlsbHMnKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlcjtcbiAgICB9XG4gIH1cblxuICBzZXQgZGF0ZXRpbWUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IHRoaXMubm9GdXR1cmUgPyB0aGlzLl9mb3JtYXREYXRlSW5UaGVQYXN0KHZhbHVlKSA6IHZhbHVlO1xuICAgIGNvbnN0IGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGdldExhbmd1YWdlKCksIG9wdGlvbnMpO1xuICAgIHRoaXMudGl0bGUgPSBkdGYuZm9ybWF0KG5ldyBEYXRlKHZhbHVlKSk7XG4gICAgdGhpcy5fZGF0ZXRpbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIF9mb3JtYXREYXRlSW5UaGVQYXN0KGRhdGUpIHtcbiAgICAvLyB0byBhdm9pZCB0byBoYXZlIGRhdGUgaW4gdGhlIGZ1dHVyZSBpbiBjYXNlIG9mIGRlc3luY2hyb25pemF0aW9uIGJldHdlZW4gYnJvd3NlciBhbmQgc2VydmVyXG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBpZiAobm93LmdldFRpbWUoKSA8IG5ldyBEYXRlKGRhdGUpLmdldFRpbWUoKSkge1xuICAgICAgICBkYXRlID0gbm93O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIGFzeW5jIF9mb3JtYXQoZGF0ZVN0ciwgbGFuZykge1xuICAgIGNvbnN0IEZvcm1hdHRlciA9IGF3YWl0IHRoaXMuZ2V0Rm9ybWF0dGVyKCk7XG4gICAgY29uc3QgZm9ybWF0ID0gKHZhbHVlLCB1bml0KSA9PiB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsYW5nLCB7IG51bWVyaWM6ICdhdXRvJyB9KS5mb3JtYXQoLXZhbHVlLCB1bml0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGRpZmYgPSBub3cgLSBuZXcgRGF0ZShkYXRlU3RyKS5nZXRUaW1lKCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgdW5pdCwgZHVyYXRpb24gfSBvZiBVTklUUykge1xuICAgICAgY29uc3QgdmFsdWUgPSBkaWZmIC8gZHVyYXRpb247XG4gICAgICBjb25zdCByb3VuZGVkVmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSkgPj0gMSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHJvdW5kZWRWYWx1ZSwgdW5pdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXQoTWF0aC5yb3VuZChkaWZmIC8gMTAwMCksICdzZWNvbmQnKTtcbiAgfVxuXG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKHRoaXMudXBkYXRlSW50ZXJ2YWxJZCA9PSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wZXJmb3JtVXBkYXRlKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdGhpcy5wZXJmb3JtVXBkYXRlKCk7XG4gICAgICB9LCAxMCAqIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZUludGVydmFsSWQpO1xuICAgIHRoaXMudXBkYXRlSW50ZXJ2YWxJZCA9IG51bGw7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgPHNwYW4gdGl0bGU9XCIke3RoaXMudGl0bGV9XCI+JHt1bnRpbCh0aGlzLl9mb3JtYXQodGhpcy5fZGF0ZXRpbWUsIGdldExhbmd1YWdlKCkpKX08L3NwYW4+YDtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1yZWxhdGl2ZS10aW1lJywgR3ZSZWxhdGl2ZVRpbWUpO1xuIl19
|