@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
|
@@ -13,13 +13,16 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
|
|
16
17
|
import { css, LitElement, html } from 'lit';
|
|
17
18
|
import { repeat } from 'lit/directives/repeat';
|
|
18
19
|
import '../atoms/gv-icon';
|
|
19
20
|
import { skeleton } from '../styles/skeleton';
|
|
20
21
|
import { classMap } from 'lit/directives/class-map';
|
|
21
22
|
import { i18n } from '../lib/i18n';
|
|
23
|
+
|
|
22
24
|
const MAX_RATE = 5;
|
|
25
|
+
|
|
23
26
|
/**
|
|
24
27
|
* Rating component
|
|
25
28
|
*
|
|
@@ -35,37 +38,86 @@ const MAX_RATE = 5;
|
|
|
35
38
|
* @cssprop {Color} [--gv-rating--c=var(--gv-theme-color, #5a7684)] - Color
|
|
36
39
|
* @cssprop {Length} [--gv-rating--s=13px] - Size
|
|
37
40
|
*/
|
|
38
|
-
|
|
39
41
|
export class GvRating extends LitElement {
|
|
40
42
|
static get properties() {
|
|
41
43
|
return {
|
|
42
|
-
value: {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
},
|
|
49
|
-
skeleton: {
|
|
50
|
-
type: Boolean
|
|
51
|
-
},
|
|
52
|
-
readonly: {
|
|
53
|
-
type: Boolean
|
|
54
|
-
},
|
|
55
|
-
_candidate: {
|
|
56
|
-
type: Number,
|
|
57
|
-
attribute: false
|
|
58
|
-
},
|
|
59
|
-
withDescription: {
|
|
60
|
-
type: Boolean,
|
|
61
|
-
attribute: 'with-description'
|
|
62
|
-
}
|
|
44
|
+
value: { type: Number, reflect: true },
|
|
45
|
+
count: { type: String },
|
|
46
|
+
skeleton: { type: Boolean },
|
|
47
|
+
readonly: { type: Boolean },
|
|
48
|
+
_candidate: { type: Number, attribute: false },
|
|
49
|
+
withDescription: { type: Boolean, attribute: 'with-description' },
|
|
63
50
|
};
|
|
64
51
|
}
|
|
65
52
|
|
|
66
53
|
static get styles() {
|
|
67
|
-
return [
|
|
68
|
-
|
|
54
|
+
return [
|
|
55
|
+
// language=CSS
|
|
56
|
+
css`
|
|
57
|
+
:host {
|
|
58
|
+
--gv-icon--c: var(--gv-rating--c, var(--gv-theme-color, #5a7684));
|
|
59
|
+
--size: var(--gv-rating--s, 13px);
|
|
60
|
+
--gv-icon--s: var(--size);
|
|
61
|
+
|
|
62
|
+
font-size: var(--gv-theme-font-size-m, 14px);
|
|
63
|
+
cursor: default;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.content,
|
|
67
|
+
.rate {
|
|
68
|
+
justify-content: space-evenly;
|
|
69
|
+
display: inline-flex;
|
|
70
|
+
align-items: flex-end;
|
|
71
|
+
vertical-align: middle;
|
|
72
|
+
height: 100%;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.info-title {
|
|
76
|
+
font-size: var(--gv-theme-font-size-m, 14px);
|
|
77
|
+
line-height: 16px;
|
|
78
|
+
align-self: center;
|
|
79
|
+
min-width: 35px;
|
|
80
|
+
text-align: center;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.info-subtitle {
|
|
84
|
+
font-size: var(--gv-theme-font-size-xs, 10px);
|
|
85
|
+
line-height: 10px;
|
|
86
|
+
opacity: 0.5;
|
|
87
|
+
text-align: center;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.icon {
|
|
91
|
+
display: inline-flex;
|
|
92
|
+
align-self: center;
|
|
93
|
+
margin-right: calc(var(--size) / 4);
|
|
94
|
+
align-items: center;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.edit {
|
|
98
|
+
cursor: pointer;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.edit gv-icon:hover {
|
|
102
|
+
transform: translateY(-0.5px);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
gv-input {
|
|
106
|
+
flex: 1;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.icon {
|
|
110
|
+
min-height: 30px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.description {
|
|
114
|
+
min-width: 100px;
|
|
115
|
+
line-height: calc(var(--size) + 4px);
|
|
116
|
+
margin: auto 4px;
|
|
117
|
+
}
|
|
118
|
+
`,
|
|
119
|
+
skeleton,
|
|
120
|
+
];
|
|
69
121
|
}
|
|
70
122
|
|
|
71
123
|
constructor() {
|
|
@@ -83,25 +135,20 @@ export class GvRating extends LitElement {
|
|
|
83
135
|
|
|
84
136
|
_onMouseEnter(index) {
|
|
85
137
|
this._candidate = index + 1;
|
|
86
|
-
|
|
87
138
|
if (this.withDescription) {
|
|
88
139
|
switch (this._candidate) {
|
|
89
140
|
case 1:
|
|
90
141
|
this.description = i18n('gv-rating.description-1');
|
|
91
142
|
break;
|
|
92
|
-
|
|
93
143
|
case 2:
|
|
94
144
|
this.description = i18n('gv-rating.description-2');
|
|
95
145
|
break;
|
|
96
|
-
|
|
97
146
|
case 3:
|
|
98
147
|
this.description = i18n('gv-rating.description-3');
|
|
99
148
|
break;
|
|
100
|
-
|
|
101
149
|
case 4:
|
|
102
150
|
this.description = i18n('gv-rating.description-4');
|
|
103
151
|
break;
|
|
104
|
-
|
|
105
152
|
case 5:
|
|
106
153
|
this.description = i18n('gv-rating.description-5');
|
|
107
154
|
break;
|
|
@@ -111,7 +158,6 @@ export class GvRating extends LitElement {
|
|
|
111
158
|
|
|
112
159
|
_onMouseOut() {
|
|
113
160
|
this._candidate = -1;
|
|
114
|
-
|
|
115
161
|
if (this.withDescription && !this.isSelected) {
|
|
116
162
|
this.description = null;
|
|
117
163
|
}
|
|
@@ -121,19 +167,14 @@ export class GvRating extends LitElement {
|
|
|
121
167
|
this._candidate = -1;
|
|
122
168
|
this.isSelected = true;
|
|
123
169
|
this.value = index + 1;
|
|
124
|
-
this.dispatchEvent(new Event('input'), {
|
|
125
|
-
bubbles: true,
|
|
126
|
-
cancelable: true
|
|
127
|
-
});
|
|
170
|
+
this.dispatchEvent(new Event('input'), { bubbles: true, cancelable: true });
|
|
128
171
|
}
|
|
129
172
|
|
|
130
173
|
_getAverage() {
|
|
131
174
|
const _value = parseFloat(this.value);
|
|
132
|
-
|
|
133
175
|
if (_value >= 0 && _value <= MAX_RATE) {
|
|
134
176
|
return _value;
|
|
135
177
|
}
|
|
136
|
-
|
|
137
178
|
return 0;
|
|
138
179
|
}
|
|
139
180
|
|
|
@@ -141,13 +182,16 @@ export class GvRating extends LitElement {
|
|
|
141
182
|
if (this.readonly) {
|
|
142
183
|
return html`<gv-icon shape="general:${star}"></gv-icon>`;
|
|
143
184
|
} else {
|
|
144
|
-
return html`<gv-icon
|
|
185
|
+
return html`<gv-icon
|
|
186
|
+
@mouseenter=${this._onMouseEnter.bind(this, index)}
|
|
187
|
+
@click=${this._onClick.bind(this, index)}
|
|
188
|
+
shape="general:${star}"
|
|
189
|
+
></gv-icon>`;
|
|
145
190
|
}
|
|
146
191
|
}
|
|
147
192
|
|
|
148
193
|
render() {
|
|
149
194
|
const average = this._getAverage();
|
|
150
|
-
|
|
151
195
|
let trunc = average * 1;
|
|
152
196
|
|
|
153
197
|
if (!this.readonly) {
|
|
@@ -155,7 +199,6 @@ export class GvRating extends LitElement {
|
|
|
155
199
|
}
|
|
156
200
|
|
|
157
201
|
const stars = [];
|
|
158
|
-
|
|
159
202
|
for (let star = 1; star <= MAX_RATE; star += 1) {
|
|
160
203
|
if (trunc >= star) {
|
|
161
204
|
stars.push('star');
|
|
@@ -166,15 +209,28 @@ export class GvRating extends LitElement {
|
|
|
166
209
|
}
|
|
167
210
|
}
|
|
168
211
|
|
|
169
|
-
return html`
|
|
170
|
-
skeleton: this.skeleton,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
212
|
+
return html`
|
|
213
|
+
<div class="${classMap({ skeleton: this.skeleton, edit: !this.readonly, content: true })}">
|
|
214
|
+
<div class="${classMap({ content: true })}">
|
|
215
|
+
<div class="${classMap({ rate: true })}">
|
|
216
|
+
<div class="icon" title="${this._getTitle()}">
|
|
217
|
+
${this.withDescription ? html`<div class="description">${this.description}</div>` : ''}
|
|
218
|
+
${repeat(
|
|
219
|
+
stars,
|
|
220
|
+
(star) => star,
|
|
221
|
+
(star, index) => html` ${this._renderStar(star, index)} `,
|
|
222
|
+
)}
|
|
223
|
+
</div>
|
|
224
|
+
${this.count
|
|
225
|
+
? html`<div>
|
|
226
|
+
<div class="info-title">${this.count || ''}</div>
|
|
227
|
+
<div class="info-subtitle">${this._getCountTitle()}</div>
|
|
228
|
+
</div>`
|
|
229
|
+
: ''}
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
`;
|
|
178
234
|
}
|
|
179
235
|
|
|
180
236
|
firstUpdated() {
|
|
@@ -188,13 +244,10 @@ export class GvRating extends LitElement {
|
|
|
188
244
|
if (this.count > 1) {
|
|
189
245
|
return i18n('gv-rating.notes');
|
|
190
246
|
}
|
|
191
|
-
|
|
192
247
|
return i18n('gv-rating.note');
|
|
193
248
|
}
|
|
194
|
-
|
|
195
249
|
return '';
|
|
196
250
|
}
|
|
197
|
-
|
|
198
251
|
}
|
|
252
|
+
|
|
199
253
|
window.customElements.define('gv-rating', GvRating);
|
|
200
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yYXRpbmcuanMiXSwibmFtZXMiOlsiY3NzIiwiTGl0RWxlbWVudCIsImh0bWwiLCJyZXBlYXQiLCJza2VsZXRvbiIsImNsYXNzTWFwIiwiaTE4biIsIk1BWF9SQVRFIiwiR3ZSYXRpbmciLCJwcm9wZXJ0aWVzIiwidmFsdWUiLCJ0eXBlIiwiTnVtYmVyIiwicmVmbGVjdCIsImNvdW50IiwiU3RyaW5nIiwiQm9vbGVhbiIsInJlYWRvbmx5IiwiX2NhbmRpZGF0ZSIsImF0dHJpYnV0ZSIsIndpdGhEZXNjcmlwdGlvbiIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiaXNTZWxlY3RlZCIsIl9nZXRUaXRsZSIsIl9nZXRBdmVyYWdlIiwiX29uTW91c2VFbnRlciIsImluZGV4IiwiZGVzY3JpcHRpb24iLCJfb25Nb3VzZU91dCIsIl9vbkNsaWNrIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJfdmFsdWUiLCJwYXJzZUZsb2F0IiwiX3JlbmRlclN0YXIiLCJzdGFyIiwiYmluZCIsInJlbmRlciIsImF2ZXJhZ2UiLCJ0cnVuYyIsInN0YXJzIiwicHVzaCIsImVkaXQiLCJjb250ZW50IiwicmF0ZSIsIl9nZXRDb3VudFRpdGxlIiwiZmlyc3RVcGRhdGVkIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLFNBQVNBLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsSUFBMUIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLHVCQUF2QjtBQUNBLE9BQU8sa0JBQVA7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QVYsRUFBb0I7QUFDbEIsV0FBS2lDLFVBQUwsQ0FBZ0JDLGFBQWhCLENBQThCLE9BQTlCLEVBQXVDQyxnQkFBdkMsQ0FBd0QsVUFBeEQsRUFBb0UsS0FBS3ZCLFdBQUwsQ0FBaUJVLElBQWpCLENBQXNCLElBQXRCLENBQXBFO0FBQ0Q7QUFDRjs7QUFFRFMsRUFBQUEsY0FBYyxHQUFHO0FBQ2YsUUFBSSxLQUFLbEMsS0FBVCxFQUFnQjtBQUNkLFVBQUksS0FBS0EsS0FBTCxHQUFhLENBQWpCLEVBQW9CO0FBQ2xCLGVBQU9SLElBQUksQ0FBQyxpQkFBRCxDQUFYO0FBQ0Q7O0FBQ0QsYUFBT0EsSUFBSSxDQUFDLGdCQUFELENBQVg7QUFDRDs7QUFDRCxXQUFPLEVBQVA7QUFDRDs7QUFqTnNDO0FBb056QytDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsV0FBN0IsRUFBMEMvQyxRQUExQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pY29uJztcbmltcG9ydCB7IHNrZWxldG9uIH0gZnJvbSAnLi4vc3R5bGVzL3NrZWxldG9uJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICcuLi9saWIvaTE4bic7XG5cbmNvbnN0IE1BWF9SQVRFID0gNTtcblxuLyoqXG4gKiBSYXRpbmcgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGF0dHIge0xlbmd0aH0gdmFsdWUgLSBhdmVyYWdlIG9mIHJhdGluZ3MgYmV0d2VlbiAxIGFuZCA1XG4gKiBAYXR0ciB7U3RyaW5nfSBjb3VudCAtIHRvdGFsIGNvdW50IGZvciB0aGUgYXZlcmFnZVxuICogQGF0dHIge0Jvb2xlYW59IHNrZWxldG9uIC0gc2tlbGV0b24gbW9kZVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gcmVhZG9ubHkgbW9kZVxuICogQGF0dHIge0Jvb2xlYW59IHdpdGgtZGVzY3JpcHRpb24gLSBpZiB0cnVlLCBzaG93IHJhdGUgZGVzY3JpcHRpb24gb24gaG92ZXJcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXJhdGluZy0tYz12YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCldIC0gQ29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJhdGluZy0tcz0xM3B4XSAtIFNpemVcbiAqL1xuZXhwb3J0IGNsYXNzIEd2UmF0aW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBjb3VudDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHNrZWxldG9uOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIF9jYW5kaWRhdGU6IHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICB3aXRoRGVzY3JpcHRpb246IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnd2l0aC1kZXNjcmlwdGlvbicgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi1yYXRpbmctLWMsIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KSk7XG4gICAgICAgICAgLS1zaXplOiB2YXIoLS1ndi1yYXRpbmctLXMsIDEzcHgpO1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogdmFyKC0tc2l6ZSk7XG5cbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tLCAxNHB4KTtcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGVudCxcbiAgICAgICAgLnJhdGUge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmZvLXRpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tLCAxNHB4KTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgbWluLXdpZHRoOiAzNXB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmZvLXN1YnRpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS14cywgMTBweCk7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pY29uIHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKHZhcigtLXNpemUpIC8gNCk7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0IHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdCBndi1pY29uOmhvdmVyIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuNXB4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlucHV0IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLmljb24ge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tc2l6ZSkgKyA0cHgpO1xuICAgICAgICAgIG1hcmdpbjogYXV0byA0cHg7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICBza2VsZXRvbixcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnZhbHVlID0gMDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgdGhpcy5fY2FuZGlkYXRlID0gLTE7XG4gICAgdGhpcy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuX2dldEF2ZXJhZ2UoKX0vJHtNQVhfUkFURX1gO1xuICB9XG5cbiAgX29uTW91c2VFbnRlcihpbmRleCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IGluZGV4ICsgMTtcbiAgICBpZiAodGhpcy53aXRoRGVzY3JpcHRpb24pIHtcbiAgICAgIHN3aXRjaCAodGhpcy5fY2FuZGlkYXRlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaTE4bignZ3YtcmF0aW5nLmRlc2NyaXB0aW9uLTEnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBpMThuKCdndi1yYXRpbmcuZGVzY3JpcHRpb24tMicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGkxOG4oJ2d2LXJhdGluZy5kZXNjcmlwdGlvbi0zJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaTE4bignZ3YtcmF0aW5nLmRlc2NyaXB0aW9uLTQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBpMThuKCdndi1yYXRpbmcuZGVzY3JpcHRpb24tNScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbk1vdXNlT3V0KCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IC0xO1xuICAgIGlmICh0aGlzLndpdGhEZXNjcmlwdGlvbiAmJiAhdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfb25DbGljayhpbmRleCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IC0xO1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IGluZGV4ICsgMTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gIH1cblxuICBfZ2V0QXZlcmFnZSgpIHtcbiAgICBjb25zdCBfdmFsdWUgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUpO1xuICAgIGlmIChfdmFsdWUgPj0gMCAmJiBfdmFsdWUgPD0gTUFYX1JBVEUpIHtcbiAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgX3JlbmRlclN0YXIoc3RhciwgaW5kZXgpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWljb24gc2hhcGU9XCJnZW5lcmFsOiR7c3Rhcn1cIj48L2d2LWljb24+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWljb25cbiAgICAgICAgQG1vdXNlZW50ZXI9JHt0aGlzLl9vbk1vdXNlRW50ZXIuYmluZCh0aGlzLCBpbmRleCl9XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX29uQ2xpY2suYmluZCh0aGlzLCBpbmRleCl9XG4gICAgICAgIHNoYXBlPVwiZ2VuZXJhbDoke3N0YXJ9XCJcbiAgICAgID48L2d2LWljb24+YDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYXZlcmFnZSA9IHRoaXMuX2dldEF2ZXJhZ2UoKTtcbiAgICBsZXQgdHJ1bmMgPSBhdmVyYWdlICogMTtcblxuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdHJ1bmMgPSB0aGlzLl9jYW5kaWRhdGUgPiAtMSA/IHRoaXMuX2NhbmRpZGF0ZSA6IGF2ZXJhZ2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnMgPSBbXTtcbiAgICBmb3IgKGxldCBzdGFyID0gMTsgc3RhciA8PSBNQVhfUkFURTsgc3RhciArPSAxKSB7XG4gICAgICBpZiAodHJ1bmMgPj0gc3Rhcikge1xuICAgICAgICBzdGFycy5wdXNoKCdzdGFyJyk7XG4gICAgICB9IGVsc2UgaWYgKHRydW5jID49IHN0YXIgLSAwLjcpIHtcbiAgICAgICAgc3RhcnMucHVzaCgnaGFsZi1zdGFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFycy5wdXNoKCduby1zdGFyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IHNrZWxldG9uOiB0aGlzLnNrZWxldG9uLCBlZGl0OiAhdGhpcy5yZWFkb25seSwgY29udGVudDogdHJ1ZSB9KX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBjb250ZW50OiB0cnVlIH0pfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgcmF0ZTogdHJ1ZSB9KX1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgdGl0bGU9XCIke3RoaXMuX2dldFRpdGxlKCl9XCI+XG4gICAgICAgICAgICAgICR7dGhpcy53aXRoRGVzY3JpcHRpb24gPyBodG1sYDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogJyd9XG4gICAgICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgICAgIHN0YXJzLFxuICAgICAgICAgICAgICAgIChzdGFyKSA9PiBzdGFyLFxuICAgICAgICAgICAgICAgIChzdGFyLCBpbmRleCkgPT4gaHRtbGAgJHt0aGlzLl9yZW5kZXJTdGFyKHN0YXIsIGluZGV4KX0gYCxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHt0aGlzLmNvdW50XG4gICAgICAgICAgICAgID8gaHRtbGA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tdGl0bGVcIj4ke3RoaXMuY291bnQgfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1zdWJ0aXRsZVwiPiR7dGhpcy5fZ2V0Q291bnRUaXRsZSgpfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgZmlyc3RVcGRhdGVkKCkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLl9vbk1vdXNlT3V0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRDb3VudFRpdGxlKCkge1xuICAgIGlmICh0aGlzLmNvdW50KSB7XG4gICAgICBpZiAodGhpcy5jb3VudCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGkxOG4oJ2d2LXJhdGluZy5ub3RlcycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGkxOG4oJ2d2LXJhdGluZy5ub3RlJyk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1yYXRpbmcnLCBHdlJhdGluZyk7XG4iXX0=
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { css } from 'lit';
|
|
17
17
|
import { GvExpandable } from './gv-expandable';
|
|
18
|
+
|
|
18
19
|
/**
|
|
19
20
|
* Expandable row
|
|
20
21
|
* @extends GvExpandable
|
|
21
22
|
*
|
|
22
23
|
*/
|
|
23
|
-
|
|
24
24
|
export class GvRowExpandable extends GvExpandable {
|
|
25
25
|
constructor() {
|
|
26
26
|
super();
|
|
@@ -30,10 +30,16 @@ export class GvRowExpandable extends GvExpandable {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
static get styles() {
|
|
33
|
-
return [
|
|
34
|
-
|
|
33
|
+
return [
|
|
34
|
+
...super.styles,
|
|
35
|
+
// language=CSS
|
|
36
|
+
css`
|
|
37
|
+
.box:hover {
|
|
38
|
+
background-color: var(--gv-theme-neutral-color, #f5f5f5);
|
|
39
|
+
}
|
|
40
|
+
`,
|
|
41
|
+
];
|
|
35
42
|
}
|
|
36
|
-
|
|
37
43
|
}
|
|
44
|
+
|
|
38
45
|
window.customElements.define('gv-row-expandable', GvRowExpandable);
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yb3ctZXhwYW5kYWJsZS5qcyJdLCJuYW1lcyI6WyJjc3MiLCJHdkV4cGFuZGFibGUiLCJHdlJvd0V4cGFuZGFibGUiLCJjb25zdHJ1Y3RvciIsImljb24iLCJpY29uT3BlbmVkIiwiY2xpY2thYmxlIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsUUFBb0IsS0FBcEI7QUFDQSxTQUFTQyxZQUFULFFBQTZCLGlCQUE3QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxlQUFOLFNBQThCRCxZQUE5QixDQUEyQztBQUNoREUsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDQSxTQUFLQyxJQUFMLEdBQVksaUJBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLGlCQUFsQjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBakI7QUFDRDs7QUFFZ0IsYUFBTkMsTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTCxHQUFHLE1BQU1BLE1BREosRUFFTDtBQUNBUCxJQUFBQSxHQUFHLG9FQUhFLENBQVA7QUFTRDs7QUFsQitDO0FBcUJsRFEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixtQkFBN0IsRUFBa0RSLGVBQWxEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBHdkV4cGFuZGFibGUgfSBmcm9tICcuL2d2LWV4cGFuZGFibGUnO1xuXG4vKipcbiAqIEV4cGFuZGFibGUgcm93XG4gKiAgQGV4dGVuZHMgR3ZFeHBhbmRhYmxlXG4gKlxuICovXG5leHBvcnQgY2xhc3MgR3ZSb3dFeHBhbmRhYmxlIGV4dGVuZHMgR3ZFeHBhbmRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmljb24gPSAnZ2VuZXJhbDpvdGhlciMyJztcbiAgICB0aGlzLmljb25PcGVuZWQgPSAnZ2VuZXJhbDpvdGhlciMyJztcbiAgICB0aGlzLmNsaWNrYWJsZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uc3VwZXIuc3R5bGVzLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIC5ib3g6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytcm93LWV4cGFuZGFibGUnLCBHdlJvd0V4cGFuZGFibGUpO1xuIl19
|
package/src/molecules/gv-row.js
CHANGED
|
@@ -21,6 +21,7 @@ import { i18n } from '../lib/i18n';
|
|
|
21
21
|
import { ItemResource } from '../mixins/item-resource';
|
|
22
22
|
import { withResizeObserver } from '../mixins/with-resize-observer';
|
|
23
23
|
import { getOwner, getTitle, getDescription, getVersion } from '../lib/item';
|
|
24
|
+
|
|
24
25
|
/**
|
|
25
26
|
* Row component
|
|
26
27
|
*
|
|
@@ -36,27 +37,140 @@ import { getOwner, getTitle, getDescription, getVersion } from '../lib/item';
|
|
|
36
37
|
* @cssprop {Length} [--gv-row-image--w=35px] - Image width
|
|
37
38
|
*
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
40
|
export class GvRow extends withResizeObserver(ItemResource(LitElement)) {
|
|
41
41
|
static get styles() {
|
|
42
|
-
return [
|
|
43
|
-
|
|
42
|
+
return [
|
|
43
|
+
...super.styles,
|
|
44
|
+
// language=CSS
|
|
45
|
+
css`
|
|
46
|
+
:host {
|
|
47
|
+
box-sizing: border-box;
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
--hover-bgc: var(--gv-row-hover--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));
|
|
50
|
+
--trf-ty: var(--gv-row-hover--trf-ty, 0px);
|
|
51
|
+
display: block;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:host([_invisible]) {
|
|
55
|
+
display: none;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.row {
|
|
59
|
+
padding: 12px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.row:hover {
|
|
63
|
+
-webkit-transform: -webkit-translateY(var(--trf-ty));
|
|
64
|
+
transform: translateY(var(--trf-ty));
|
|
65
|
+
background-color: var(--hover-bgc);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.row:not(.error) {
|
|
69
|
+
display: grid;
|
|
70
|
+
grid-template-columns: calc(var(--gv-row-image--w, 35px) + 5px) auto fit-content(20%);
|
|
71
|
+
grid-gap: 10px;
|
|
72
|
+
align-items: center;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
:host([w-lt-450]) .meta {
|
|
76
|
+
display: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.row .name {
|
|
80
|
+
margin-right: 15px;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.row .name,
|
|
84
|
+
.row .meta__owner {
|
|
85
|
+
margin-bottom: 5px;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.row .version {
|
|
89
|
+
color: var(--gv-theme-neutral-color-dark, #d9d9d9);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.row .description {
|
|
93
|
+
--lh: 1.4rem;
|
|
94
|
+
--max-lines: 2;
|
|
95
|
+
max-height: calc(var(--lh) * var(--max-lines));
|
|
96
|
+
line-height: var(--lh);
|
|
97
|
+
overflow: hidden;
|
|
98
|
+
text-overflow: ellipsis;
|
|
99
|
+
text-after-overflow: '...';
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.row .meta {
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
align-items: flex-end;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.row .meta__owner {
|
|
109
|
+
--gv-icon--c: var(--gv-theme-neutral-color-dark, #d9d9d9);
|
|
110
|
+
--gv-icon--s: 16px;
|
|
111
|
+
color: var(--gv-theme-neutral-color-dark, #d9d9d9);
|
|
112
|
+
display: flex;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.row .meta__tags {
|
|
116
|
+
display: flex;
|
|
117
|
+
flex-direction: row;
|
|
118
|
+
flex-wrap: wrap;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.skeleton {
|
|
122
|
+
transition: 0.5s;
|
|
123
|
+
min-height: 30px;
|
|
124
|
+
align-self: start;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.error {
|
|
128
|
+
cursor: default;
|
|
129
|
+
text-align: center;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
gv-identity-picture {
|
|
133
|
+
height: var(--gv-row-image--h, 35px);
|
|
134
|
+
width: var(--gv-row-image--w, 35px);
|
|
135
|
+
border-radius: 20px;
|
|
136
|
+
--gv-image--of: contain;
|
|
137
|
+
align-self: baseline;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
h3 {
|
|
141
|
+
margin: 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.row > .group {
|
|
145
|
+
display: flex;
|
|
146
|
+
flex-direction: column;
|
|
147
|
+
margin: 0 5px;
|
|
148
|
+
width: 100%;
|
|
149
|
+
flex: 1;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.title {
|
|
153
|
+
display: flex;
|
|
154
|
+
flex-direction: row;
|
|
155
|
+
}
|
|
156
|
+
`,
|
|
157
|
+
link,
|
|
158
|
+
skeleton,
|
|
159
|
+
];
|
|
44
160
|
}
|
|
45
161
|
|
|
46
162
|
static get properties() {
|
|
47
|
-
return {
|
|
48
|
-
|
|
163
|
+
return {
|
|
164
|
+
...super.properties,
|
|
49
165
|
/** @required */
|
|
50
|
-
small: {
|
|
51
|
-
type: Boolean
|
|
52
|
-
}
|
|
166
|
+
small: { type: Boolean },
|
|
53
167
|
};
|
|
54
168
|
}
|
|
55
169
|
|
|
56
170
|
constructor() {
|
|
57
171
|
super();
|
|
58
172
|
this.breakpoints = {
|
|
59
|
-
width: [450]
|
|
173
|
+
width: [450],
|
|
60
174
|
};
|
|
61
175
|
this.small = false;
|
|
62
176
|
}
|
|
@@ -65,20 +179,32 @@ export class GvRow extends withResizeObserver(ItemResource(LitElement)) {
|
|
|
65
179
|
const classes = {
|
|
66
180
|
row: true,
|
|
67
181
|
link: true,
|
|
68
|
-
error: !this._skeleton && (this._error || this._empty)
|
|
182
|
+
error: !this._skeleton && (this._error || this._empty),
|
|
69
183
|
};
|
|
70
184
|
const owner = getOwner(this._item);
|
|
71
|
-
return html`
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
185
|
+
return html`
|
|
186
|
+
<div class=${classMap(classes)}>
|
|
187
|
+
${!this._skeleton && (this._error || this._empty)
|
|
188
|
+
? html`<div class="message">${this._error ? i18n('gv-row.error') : i18n('gv-row.empty')}</div>`
|
|
189
|
+
: html`
|
|
190
|
+
<div class="${classMap({ skeleton: this._skeleton })}">${this._renderImage()}</div>
|
|
191
|
+
<div class="${classMap({ group: true, skeleton: this._skeleton })}">
|
|
192
|
+
<div class="title">
|
|
193
|
+
<h3 class="name">${getTitle(this._item)}</h3>
|
|
194
|
+
<div class="version">${getVersion(this._item)}</div>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="description">${getDescription(this._item)}</div>
|
|
197
|
+
</div>
|
|
198
|
+
<div class="${classMap({ meta: true, skeleton: this._skeleton })}">
|
|
199
|
+
<div class="meta__owner">
|
|
200
|
+
${owner != null && owner.trim().length > 0 ? html`<gv-icon shape="general:user" size="8px"></gv-icon>${owner}` : ''}
|
|
201
|
+
</div>
|
|
202
|
+
${this.small !== true ? html`<div class="meta__tags">${this._renderLabels()}</div>` : ''}
|
|
203
|
+
</div>
|
|
204
|
+
`}
|
|
205
|
+
</div>
|
|
206
|
+
`;
|
|
80
207
|
}
|
|
81
|
-
|
|
82
208
|
}
|
|
209
|
+
|
|
83
210
|
window.customElements.define('gv-row', GvRow);
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yb3cuanMiXSwibmFtZXMiOlsiY3NzIiwiaHRtbCIsIkxpdEVsZW1lbnQiLCJza2VsZXRvbiIsImxpbmsiLCJjbGFzc01hcCIsImkxOG4iLCJJdGVtUmVzb3VyY2UiLCJ3aXRoUmVzaXplT2JzZXJ2ZXIiLCJnZXRPd25lciIsImdldFRpdGxlIiwiZ2V0RGVzY3JpcHRpb24iLCJnZXRWZXJzaW9uIiwiR3ZSb3ciLCJzdHlsZXMiLCJwcm9wZXJ0aWVzIiwic21hbGwiLCJ0eXBlIiwiQm9vbGVhbiIsImNvbnN0cnVjdG9yIiwiYnJlYWtwb2ludHMiLCJ3aWR0aCIsInJlbmRlciIsImNsYXNzZXMiLCJyb3ciLCJlcnJvciIsIl9za2VsZXRvbiIsIl9lcnJvciIsIl9lbXB0eSIsIm93bmVyIiwiX2l0ZW0iLCJfcmVuZGVySW1hZ2UiLCJncm91cCIsIm1ldGEiLCJ0cmltIiwibGVuZ3RoIiwiX3JlbmRlckxhYmVscyIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLElBQWQsRUFBb0JDLFVBQXBCLFFBQXNDLEtBQXRDO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QixvQkFBekI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGdCQUFyQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVNDLFlBQVQsUUFBNkIseUJBQTdCO0FBQ0EsU0FBU0Msa0JBQVQsUUFBbUMsZ0NBQW5DO0FBQ0EsU0FBU0MsUUFBVCxFQUFtQkMsUUFBbkIsRUFBNkJDLGNBQTdCLEVBQTZDQyxVQUE3QyxRQUErRCxhQUEvRDtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLEtBQU4sU0FBb0JMLGtCQUFrQixDQUFDRCxZQUFZLENBQUNMLFVBQUQsQ0FBYixDQUF0QyxDQUFpRTtBQUNyRCxhQUFOWSxNQUFNLEdBQUc7QUFDbEIsV0FBTyxDQUNMLEdBQUcsTUFBTUEsTUFESixFQUVMO0FBQ0FkLElBQUFBLEdBQUcsOC9DQUhFLEVBbUhMSSxJQW5ISyxFQW9ITEQsUUFwSEssQ0FBUDtBQXNIRDs7QUFFb0IsYUFBVlksVUFBVSxHQUFHO0FBQ3RCLFdBQU8sRUFDTCxHQUFHLE1BQU1BLFVBREo7O0FBRUw7QUFDQUMsTUFBQUEsS0FBSyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUjtBQUhGLEtBQVA7QUFLRDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDQSxTQUFLQyxXQUFMLEdBQW1CO0FBQ2pCQyxNQUFBQSxLQUFLLEVBQUUsQ0FBQyxHQUFEO0FBRFUsS0FBbkI7QUFHQSxTQUFLTCxLQUFMLEdBQWEsS0FBYjtBQUNEOztBQUVETSxFQUFBQSxNQUFNLEdBQUc7QUFDUCxVQUFNQyxPQUFPLEdBQUc7QUFDZEMsTUFBQUEsR0FBRyxFQUFFLElBRFM7QUFFZHBCLE1BQUFBLElBQUksRUFBRSxJQUZRO0FBR2RxQixNQUFBQSxLQUFLLEVBQUUsQ0FBQyxLQUFLQyxTQUFOLEtBQW9CLEtBQUtDLE1BQUwsSUFBZSxLQUFLQyxNQUF4QztBQUhPLEtBQWhCO0FBS0EsVUFBTUMsS0FBSyxHQUFHcEIsUUFBUSxDQUFDLEtBQUtxQixLQUFOLENBQXRCO0FBQ0EsV0FBTzdCLElBQUksZ0JBQ0lJLFFBQVEsQ0FBQ2tCLE9BQUQsQ0FEWixNQUVMLENBQUMsS0FBS0csU0FBTixLQUFvQixLQUFLQyxNQUFMLElBQWUsS0FBS0MsTUFBeEMsSUFDRTNCLElBQUksd0JBQXdCLEtBQUswQixNQUFMLEdBQWNyQixJQUFJLENBQUMsY0FBRCxDQUFsQixHQUFxQ0EsSUFBSSxDQUFDLGNBQUQsQ0FBakUsUUFETixHQUVFTCxJQUFJLGdCQUNZSSxRQUFRLENBQUM7QUFBRUYsTUFBQUEsUUFBUSxFQUFFLEtBQUt1QjtBQUFqQixLQUFELENBRHBCLEtBQ3VELEtBQUtLLFlBQUwsRUFEdkQsc0JBRVkxQixRQUFRLENBQUM7QUFBRTJCLE1BQUFBLEtBQUssRUFBRSxJQUFUO0FBQWU3QixNQUFBQSxRQUFRLEVBQUUsS0FBS3VCO0FBQTlCLEtBQUQsQ0FGcEIsMkNBSXFCaEIsUUFBUSxDQUFDLEtBQUtvQixLQUFOLENBSjdCLDhCQUt5QmxCLFVBQVUsQ0FBQyxLQUFLa0IsS0FBTixDQUxuQywwQ0FPMkJuQixjQUFjLENBQUMsS0FBS21CLEtBQU4sQ0FQekMsNkJBU1l6QixRQUFRLENBQUM7QUFBRTRCLE1BQUFBLElBQUksRUFBRSxJQUFSO0FBQWM5QixNQUFBQSxRQUFRLEVBQUUsS0FBS3VCO0FBQTdCLEtBQUQsQ0FUcEIsZ0NBV0lHLEtBQUssSUFBSSxJQUFULElBQWlCQSxLQUFLLENBQUNLLElBQU4sR0FBYUMsTUFBYixHQUFzQixDQUF2QyxHQUEyQ2xDLElBQUksc0RBQXNENEIsS0FBdEQsRUFBL0MsR0FBK0csRUFYbkgsV0FhRSxLQUFLYixLQUFMLEtBQWUsSUFBZixHQUFzQmYsSUFBSSwyQkFBMkIsS0FBS21DLGFBQUwsRUFBM0IsUUFBMUIsR0FBb0YsRUFidEYsVUFKRCxVQUFYO0FBc0JEOztBQXZLcUU7QUEwS3hFQyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLFFBQTdCLEVBQXVDMUIsS0FBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHNrZWxldG9uIH0gZnJvbSAnLi4vc3R5bGVzL3NrZWxldG9uJztcbmltcG9ydCB7IGxpbmsgfSBmcm9tICcuLi9zdHlsZXMvbGluayc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnLi4vbGliL2kxOG4nO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbWl4aW5zL2l0ZW0tcmVzb3VyY2UnO1xuaW1wb3J0IHsgd2l0aFJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vbWl4aW5zL3dpdGgtcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7IGdldE93bmVyLCBnZXRUaXRsZSwgZ2V0RGVzY3JpcHRpb24sIGdldFZlcnNpb24gfSBmcm9tICcuLi9saWIvaXRlbSc7XG5cbi8qKlxuICogUm93IGNvbXBvbmVudFxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBhdHRyIHtQcm9taXNlPGFueT59IGl0ZW0gLSBBbiBpdGVtLlxuICogQGF0dHIge0Jvb2xlYW59IHNtYWxsIC0gV2hlbiB0cnVlLCBub3QgZGlzcGxheSBsYWJlbHNcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXJvdy1ob3Zlci0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlciwgI2ZhZmFmYSldIC0gSG9vdmVyIGJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJvdy1ob3Zlci0tdHJmLXR5PTBweF0gLSBIb292ZXIgdHJhbnNmb3JtIHRyYW5zbGF0ZVlcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJvdy1pbWFnZS0taD0zNXB4XSAtIEltYWdlIGhlaWdodFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3Ytcm93LWltYWdlLS13PTM1cHhdIC0gSW1hZ2Ugd2lkdGhcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlJvdyBleHRlbmRzIHdpdGhSZXNpemVPYnNlcnZlcihJdGVtUmVzb3VyY2UoTGl0RWxlbWVudCkpIHtcbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnN1cGVyLnN0eWxlcyxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgLS1ob3Zlci1iZ2M6IHZhcigtLWd2LXJvdy1ob3Zlci0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXIsICNmYWZhZmEpKTtcbiAgICAgICAgICAtLXRyZi10eTogdmFyKC0tZ3Ytcm93LWhvdmVyLS10cmYtdHksIDBweCk7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdChbX2ludmlzaWJsZV0pIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyB7XG4gICAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3c6aG92ZXIge1xuICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiAtd2Via2l0LXRyYW5zbGF0ZVkodmFyKC0tdHJmLXR5KSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLXRyZi10eSkpO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWhvdmVyLWJnYyk7XG4gICAgICAgIH1cblxuICAgICAgICAucm93Om5vdCguZXJyb3IpIHtcbiAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogY2FsYyh2YXIoLS1ndi1yb3ctaW1hZ2UtLXcsIDM1cHgpICsgNXB4KSBhdXRvIGZpdC1jb250ZW50KDIwJSk7XG4gICAgICAgICAgZ3JpZC1nYXA6IDEwcHg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFt3LWx0LTQ1MF0pIC5tZXRhIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAubmFtZSB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAubmFtZSxcbiAgICAgICAgLnJvdyAubWV0YV9fb3duZXIge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3cgLnZlcnNpb24ge1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgIC0tbGg6IDEuNHJlbTtcbiAgICAgICAgICAtLW1heC1saW5lczogMjtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKHZhcigtLWxoKSAqIHZhcigtLW1heC1saW5lcykpO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saCk7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICB0ZXh0LWFmdGVyLW92ZXJmbG93OiAnLi4uJztcbiAgICAgICAgfVxuXG4gICAgICAgIC5yb3cgLm1ldGEge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAucm93IC5tZXRhX19vd25lciB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpO1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogMTZweDtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrLCAjZDlkOWQ5KTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyAubWV0YV9fdGFncyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5za2VsZXRvbiB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogMC41cztcbiAgICAgICAgICBtaW4taGVpZ2h0OiAzMHB4O1xuICAgICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmVycm9yIHtcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaWRlbnRpdHktcGljdHVyZSB7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1ndi1yb3ctaW1hZ2UtLWgsIDM1cHgpO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS1ndi1yb3ctaW1hZ2UtLXcsIDM1cHgpO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgICAgLS1ndi1pbWFnZS0tb2Y6IGNvbnRhaW47XG4gICAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7XG4gICAgICAgIH1cblxuICAgICAgICBoMyB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdyA+IC5ncm91cCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIG1hcmdpbjogMCA1cHg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgbGluayxcbiAgICAgIHNrZWxldG9uLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnByb3BlcnRpZXMsXG4gICAgICAvKiogQHJlcXVpcmVkICovXG4gICAgICBzbWFsbDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5icmVha3BvaW50cyA9IHtcbiAgICAgIHdpZHRoOiBbNDUwXSxcbiAgICB9O1xuICAgIHRoaXMuc21hbGwgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgcm93OiB0cnVlLFxuICAgICAgbGluazogdHJ1ZSxcbiAgICAgIGVycm9yOiAhdGhpcy5fc2tlbGV0b24gJiYgKHRoaXMuX2Vycm9yIHx8IHRoaXMuX2VtcHR5KSxcbiAgICB9O1xuICAgIGNvbnN0IG93bmVyID0gZ2V0T3duZXIodGhpcy5faXRlbSk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPSR7Y2xhc3NNYXAoY2xhc3Nlcyl9PlxuICAgICAgICAkeyF0aGlzLl9za2VsZXRvbiAmJiAodGhpcy5fZXJyb3IgfHwgdGhpcy5fZW1wdHkpXG4gICAgICAgICAgPyBodG1sYDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+JHt0aGlzLl9lcnJvciA/IGkxOG4oJ2d2LXJvdy5lcnJvcicpIDogaTE4bignZ3Ytcm93LmVtcHR5Jyl9PC9kaXY+YFxuICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24gfSl9XCI+JHt0aGlzLl9yZW5kZXJJbWFnZSgpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IGdyb3VwOiB0cnVlLCBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24gfSl9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuYW1lXCI+JHtnZXRUaXRsZSh0aGlzLl9pdGVtKX08L2gzPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb25cIj4ke2dldFZlcnNpb24odGhpcy5faXRlbSl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+JHtnZXREZXNjcmlwdGlvbih0aGlzLl9pdGVtKX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgbWV0YTogdHJ1ZSwgc2tlbGV0b246IHRoaXMuX3NrZWxldG9uIH0pfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRhX19vd25lclwiPlxuICAgICAgICAgICAgICAgICAgJHtvd25lciAhPSBudWxsICYmIG93bmVyLnRyaW0oKS5sZW5ndGggPiAwID8gaHRtbGA8Z3YtaWNvbiBzaGFwZT1cImdlbmVyYWw6dXNlclwiIHNpemU9XCI4cHhcIj48L2d2LWljb24+JHtvd25lcn1gIDogJyd9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgJHt0aGlzLnNtYWxsICE9PSB0cnVlID8gaHRtbGA8ZGl2IGNsYXNzPVwibWV0YV9fdGFnc1wiPiR7dGhpcy5fcmVuZGVyTGFiZWxzKCl9PC9kaXY+YCA6ICcnfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGB9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXJvdycsIEd2Um93KTtcbiJdfQ==
|