@gravitee/ui-components 3.24.5-renovate-github-markdown-css-5-x-6cd8067 → 3.25.1
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/assets/css/github-markdown-css/github-markdown.css +545 -500
- package/assets/i18n/en.json +3 -0
- package/assets/i18n/fr.json +3 -0
- package/assets/icons/design.svg +1 -1
- package/package.json +2 -9
- package/src/atoms/gv-autocomplete.js +132 -156
- package/src/atoms/gv-button.js +73 -248
- package/src/atoms/gv-checkbox.js +45 -103
- package/src/atoms/gv-date-picker-calendar.js +312 -393
- package/src/atoms/gv-date-picker-cell.js +57 -81
- package/src/atoms/gv-date-picker.js +180 -319
- package/src/atoms/gv-file-upload.js +85 -195
- package/src/atoms/gv-icon.js +13 -34
- package/src/atoms/gv-image.js +31 -66
- package/src/atoms/gv-input-message.js +12 -37
- package/src/atoms/gv-input.js +117 -148
- package/src/atoms/gv-link.js +47 -125
- package/src/atoms/gv-message.js +18 -69
- package/src/atoms/gv-metric.js +19 -68
- package/src/atoms/gv-relative-time.js +67 -38
- package/src/atoms/gv-select-native.js +96 -215
- package/src/atoms/gv-select.js +110 -230
- package/src/atoms/gv-spinner.js +5 -26
- package/src/atoms/gv-state.js +25 -66
- package/src/atoms/gv-switch.js +40 -160
- package/src/atoms/gv-tag.js +26 -78
- package/src/atoms/gv-text.js +22 -83
- package/src/charts/gv-chart-bar.js +22 -18
- package/src/charts/gv-chart-gauge.js +28 -31
- package/src/charts/gv-chart-histogram.js +18 -10
- package/src/charts/gv-chart-line.js +70 -59
- package/src/charts/gv-chart-map.js +44 -42
- package/src/charts/gv-chart-pie.js +18 -14
- package/src/index.js +1 -0
- package/src/lib/cron-expression.js +40 -35
- package/src/lib/date.js +10 -1
- package/src/lib/events.js +3 -1
- package/src/lib/http-client-schema-form.js +13 -12
- package/src/lib/http.js +57 -56
- package/src/lib/i18n.js +30 -22
- package/src/lib/item.js +13 -12
- package/src/lib/properties.js +77 -42
- package/src/lib/schema-form.js +4 -5
- package/src/lib/studio.js +13 -60
- package/src/lib/style.js +8 -8
- package/src/lib/text-format.js +14 -7
- package/src/lib/theme.js +8 -5
- package/src/lib/utils.js +17 -18
- package/src/mixins/chart-element.js +31 -54
- package/src/mixins/input-element.js +60 -47
- package/src/mixins/item-resource.js +34 -32
- package/src/mixins/keyboard-element.js +6 -5
- package/src/mixins/update-after-browser.js +4 -1
- package/src/mixins/with-resize-observer.js +23 -13
- package/src/mixins/with-skeleton-attribute.js +54 -48
- package/src/molecules/gv-card-full.js +26 -147
- package/src/molecules/gv-card-list.js +13 -42
- package/src/molecules/gv-card.js +17 -91
- package/src/molecules/gv-category-list.js +6 -17
- package/src/molecules/gv-category.js +23 -103
- package/src/molecules/gv-code.js +81 -143
- package/src/molecules/gv-confirm.js +41 -71
- package/src/molecules/gv-cron-editor.js +143 -389
- package/src/molecules/gv-dropdown-menu.js +14 -46
- package/src/molecules/gv-expandable.js +31 -59
- package/src/molecules/gv-expression-language.js +176 -138
- package/src/molecules/gv-identity-picture.js +42 -65
- package/src/molecules/gv-list.js +42 -134
- package/src/molecules/gv-metrics.js +37 -49
- package/src/molecules/gv-modal.js +28 -95
- package/src/molecules/gv-nav.js +49 -75
- package/src/molecules/gv-option.js +57 -130
- package/src/molecules/gv-plans.js +86 -209
- package/src/molecules/gv-popover.js +57 -177
- package/src/molecules/gv-promote.js +28 -146
- package/src/molecules/gv-rating-list.js +69 -195
- package/src/molecules/gv-rating.js +52 -105
- package/src/molecules/gv-row-expandable.js +5 -11
- package/src/molecules/gv-row.js +21 -147
- package/src/molecules/gv-stats.js +23 -48
- package/src/molecules/gv-stepper.js +43 -187
- package/src/molecules/gv-table.js +199 -309
- package/src/molecules/gv-tree.js +33 -156
- package/src/organisms/gv-documentation.js +45 -128
- package/src/organisms/gv-header.js +37 -195
- package/src/organisms/gv-http-client.js +32 -168
- package/src/organisms/gv-menu.js +37 -158
- package/src/organisms/gv-newsletter-subscription.js +48 -189
- package/src/organisms/gv-pagination.js +49 -77
- package/src/organisms/gv-properties.js +271 -492
- package/src/organisms/gv-resizable-views.js +41 -259
- package/src/organisms/gv-resources.js +168 -275
- package/src/organisms/gv-schema-form-array.js +49 -159
- package/src/organisms/gv-schema-form-control-object.js +59 -73
- package/src/organisms/gv-schema-form-control.js +107 -134
- package/src/organisms/gv-schema-form.js +219 -280
- package/src/organisms/gv-tabs.js +66 -98
- package/src/organisms/gv-user-menu.js +36 -201
- package/src/organisms/gv-vertical-menu.js +20 -61
- package/src/policy-studio/gv-flow-step.js +106 -245
- package/src/policy-studio/gv-flow.js +125 -304
- package/src/policy-studio/gv-policy-studio-menu.js +157 -471
- package/src/policy-studio/gv-policy-studio.js +714 -760
- package/src/styles/empty.js +3 -20
- package/src/styles/input.js +3 -247
- package/src/styles/link.js +3 -16
- package/src/styles/shapes.js +1 -0
- package/src/styles/skeleton.js +3 -37
- package/src/styles/zoom.js +3 -24
- package/src/theme/gv-theme.js +21 -60
- package/CHANGELOG.md +0 -1260
- package/LICENSE.txt +0 -202
- package/README.md +0 -195
- package/src/.eslintrc.js +0 -19
- package/src/theme/definition.json +0 -1762
package/src/organisms/gv-tabs.js
CHANGED
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
import { css, LitElement, html } from 'lit';
|
|
17
17
|
import '../molecules/gv-option';
|
|
18
18
|
import { dispatchCustomEvent } from '../lib/events';
|
|
19
|
-
|
|
20
19
|
/**
|
|
21
20
|
* Tabs component
|
|
22
21
|
*
|
|
@@ -34,86 +33,39 @@ import { dispatchCustomEvent } from '../lib/events';
|
|
|
34
33
|
*
|
|
35
34
|
* @cssprop {Length} [--gv-tabs-options--m=0] - Tabs options margin
|
|
36
35
|
*/
|
|
36
|
+
|
|
37
37
|
export class GvTabs extends LitElement {
|
|
38
38
|
static get properties() {
|
|
39
39
|
return {
|
|
40
|
-
options: {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
options: {
|
|
41
|
+
type: Array
|
|
42
|
+
},
|
|
43
|
+
_options: {
|
|
44
|
+
type: Array,
|
|
45
|
+
attribute: false
|
|
46
|
+
},
|
|
47
|
+
value: {
|
|
48
|
+
type: String,
|
|
49
|
+
reflect: true
|
|
50
|
+
},
|
|
51
|
+
validator: {
|
|
52
|
+
type: Function
|
|
53
|
+
},
|
|
54
|
+
disabled: {
|
|
55
|
+
type: Boolean
|
|
56
|
+
},
|
|
57
|
+
small: {
|
|
58
|
+
type: Boolean
|
|
59
|
+
},
|
|
60
|
+
truncate: {
|
|
61
|
+
type: Boolean
|
|
62
|
+
}
|
|
47
63
|
};
|
|
48
64
|
}
|
|
49
65
|
|
|
50
66
|
static get styles() {
|
|
51
|
-
return [
|
|
52
|
-
|
|
53
|
-
css`
|
|
54
|
-
:host {
|
|
55
|
-
box-sizing: border-box;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
::slotted([slot='content']) {
|
|
59
|
-
opacity: 0;
|
|
60
|
-
box-sizing: border-box;
|
|
61
|
-
transition: opacity 350ms ease-in-out;
|
|
62
|
-
visibility: hidden;
|
|
63
|
-
position: absolute;
|
|
64
|
-
left: -9999px;
|
|
65
|
-
top: -9999px;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
::slotted([slot='content'].current) {
|
|
69
|
-
opacity: 1;
|
|
70
|
-
visibility: visible;
|
|
71
|
-
position: relative;
|
|
72
|
-
left: auto;
|
|
73
|
-
top: auto;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.header {
|
|
77
|
-
display: flex;
|
|
78
|
-
border-bottom: 1px solid #d9d9d9;
|
|
79
|
-
box-sizing: border-box;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.title {
|
|
83
|
-
flex: 1;
|
|
84
|
-
display: flex;
|
|
85
|
-
align-items: center;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.actions {
|
|
89
|
-
display: flex;
|
|
90
|
-
align-items: center;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.tabs {
|
|
94
|
-
flex: 1;
|
|
95
|
-
display: flex;
|
|
96
|
-
justify-content: flex-end;
|
|
97
|
-
--gv-option--bdrs: 0;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
:host([small]) .tabs {
|
|
101
|
-
flex-direction: column;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
:host([small]) gv-option {
|
|
105
|
-
align-self: flex-end;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
gv-option {
|
|
109
|
-
margin: var(--gv-tabs-options--m, 0);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
::slotted(gv-button) {
|
|
113
|
-
padding-bottom: 2px;
|
|
114
|
-
}
|
|
115
|
-
`,
|
|
116
|
-
];
|
|
67
|
+
return [// language=css
|
|
68
|
+
css`:host{box-sizing:border-box}::slotted([slot=content]){opacity:0;box-sizing:border-box;transition:opacity 350ms ease-in-out;visibility:hidden;position:absolute;left:-9999px;top:-9999px}::slotted([slot=content].current){opacity:1;visibility:visible;position:relative;left:auto;top:auto}.header{display:flex;border-bottom:1px solid #d9d9d9;box-sizing:border-box}.title{flex:1;display:flex;align-items:center}.actions{display:flex;align-items:center}.tabs{flex:1;display:flex;justify-content:flex-end;--gv-option--bdrs:0}:host([small]) .tabs{flex-direction:column}:host([small]) gv-option{align-self:flex-end}gv-option{margin:var(--gv-tabs-options--m,0)}::slotted(gv-button){padding-bottom:2px}`];
|
|
117
69
|
}
|
|
118
70
|
|
|
119
71
|
_getContent() {
|
|
@@ -129,12 +81,19 @@ export class GvTabs extends LitElement {
|
|
|
129
81
|
|
|
130
82
|
set options(options) {
|
|
131
83
|
if (options && Array.isArray(options)) {
|
|
132
|
-
this._options = options.map(
|
|
84
|
+
this._options = options.map(option => {
|
|
133
85
|
if (typeof option === 'string') {
|
|
134
|
-
return {
|
|
86
|
+
return {
|
|
87
|
+
id: option,
|
|
88
|
+
title: option
|
|
89
|
+
};
|
|
135
90
|
} else if (typeof option === 'object' && option.title == null) {
|
|
136
|
-
return {
|
|
91
|
+
return {
|
|
92
|
+
id: option.id,
|
|
93
|
+
title: option.id
|
|
94
|
+
};
|
|
137
95
|
}
|
|
96
|
+
|
|
138
97
|
return option;
|
|
139
98
|
});
|
|
140
99
|
}
|
|
@@ -146,9 +105,12 @@ export class GvTabs extends LitElement {
|
|
|
146
105
|
|
|
147
106
|
updated() {
|
|
148
107
|
const content = this._getContent();
|
|
149
|
-
|
|
108
|
+
|
|
109
|
+
content.forEach(c => c.classList.remove('current'));
|
|
110
|
+
|
|
150
111
|
if (this.value) {
|
|
151
112
|
const target = this.querySelector(`#${this.value}`);
|
|
113
|
+
|
|
152
114
|
if (target) {
|
|
153
115
|
target.classList.add('current');
|
|
154
116
|
}
|
|
@@ -161,20 +123,29 @@ export class GvTabs extends LitElement {
|
|
|
161
123
|
from.classList.remove('current');
|
|
162
124
|
content.classList.add('current');
|
|
163
125
|
this.value = value;
|
|
164
|
-
dispatchCustomEvent(this, 'change', {
|
|
126
|
+
dispatchCustomEvent(this, 'change', {
|
|
127
|
+
value,
|
|
128
|
+
from: from.id,
|
|
129
|
+
to: content.id
|
|
130
|
+
});
|
|
165
131
|
}
|
|
166
132
|
|
|
167
|
-
_onClick({
|
|
133
|
+
_onClick({
|
|
134
|
+
detail
|
|
135
|
+
}) {
|
|
168
136
|
if (!this.disabled) {
|
|
169
|
-
const from = this._getContent().find(
|
|
137
|
+
const from = this._getContent().find(e => e.classList.contains('current'));
|
|
138
|
+
|
|
170
139
|
const content = this.querySelector(`#${detail.id}`);
|
|
171
140
|
this.shadowRoot.querySelector('gv-option').value = from.id;
|
|
141
|
+
|
|
172
142
|
if (this.validator) {
|
|
173
|
-
this.validator({
|
|
174
|
-
.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
.
|
|
143
|
+
this.validator({
|
|
144
|
+
from: from.id,
|
|
145
|
+
to: content.id
|
|
146
|
+
}).then(() => {
|
|
147
|
+
this._changeTab(from, content, detail.id);
|
|
148
|
+
}).catch(() => {});
|
|
178
149
|
} else {
|
|
179
150
|
this._changeTab(from, content, detail.id);
|
|
180
151
|
}
|
|
@@ -183,28 +154,25 @@ export class GvTabs extends LitElement {
|
|
|
183
154
|
|
|
184
155
|
get _contextualOptions() {
|
|
185
156
|
if (this.truncate) {
|
|
186
|
-
return this.options.map(
|
|
157
|
+
return this.options.map(option => {
|
|
187
158
|
if (this.value !== option.id) {
|
|
188
159
|
const label = option.label || option.title;
|
|
189
|
-
return { ...option,
|
|
160
|
+
return { ...option,
|
|
161
|
+
label: label.substring(0, 1)
|
|
162
|
+
};
|
|
190
163
|
}
|
|
164
|
+
|
|
191
165
|
return option;
|
|
192
166
|
});
|
|
193
167
|
}
|
|
168
|
+
|
|
194
169
|
return this.options;
|
|
195
170
|
}
|
|
196
171
|
|
|
197
172
|
render() {
|
|
198
|
-
return html`<div>
|
|
199
|
-
<div class="header">
|
|
200
|
-
<div class="tabs">
|
|
201
|
-
<slot name="title" class="title"></slot>
|
|
202
|
-
<gv-option small .options="${this._contextualOptions}" @gv-option:select="${this._onClick}" .value="${this.value}"></gv-option>
|
|
203
|
-
</div>
|
|
204
|
-
</div>
|
|
205
|
-
<slot name="content"></slot>
|
|
206
|
-
</div>`;
|
|
173
|
+
return html`<div> <div class="header"> <div class="tabs"> <slot name="title" class="title"></slot> <gv-option small .options="${this._contextualOptions}" @gv-option:select="${this._onClick}" .value="${this.value}"></gv-option> </div> </div> <slot name="content"></slot> </div>`;
|
|
207
174
|
}
|
|
208
|
-
}
|
|
209
175
|
|
|
176
|
+
}
|
|
210
177
|
window.customElements.define('gv-tabs', GvTabs);
|
|
178
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi10YWJzLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsIkd2VGFicyIsInByb3BlcnRpZXMiLCJvcHRpb25zIiwidHlwZSIsIkFycmF5IiwiX29wdGlvbnMiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsIlN0cmluZyIsInJlZmxlY3QiLCJ2YWxpZGF0b3IiLCJGdW5jdGlvbiIsImRpc2FibGVkIiwiQm9vbGVhbiIsInNtYWxsIiwidHJ1bmNhdGUiLCJzdHlsZXMiLCJfZ2V0Q29udGVudCIsImNvbnRlbnQiLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvciIsImFzc2lnbmVkTm9kZXMiLCJmaXJzdFVwZGF0ZWQiLCJsZW5ndGgiLCJpZCIsImlzQXJyYXkiLCJtYXAiLCJvcHRpb24iLCJ0aXRsZSIsInVwZGF0ZWQiLCJmb3JFYWNoIiwiYyIsImNsYXNzTGlzdCIsInJlbW92ZSIsInRhcmdldCIsImFkZCIsIl9jaGFuZ2VUYWIiLCJmcm9tIiwidG8iLCJfb25DbGljayIsImRldGFpbCIsImZpbmQiLCJlIiwiY29udGFpbnMiLCJ0aGVuIiwiY2F0Y2giLCJfY29udGV4dHVhbE9wdGlvbnMiLCJsYWJlbCIsInN1YnN0cmluZyIsInJlbmRlciIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLFVBQWQsRUFBMEJDLElBQTFCLFFBQXNDLEtBQXRDO0FBQ0EsT0FBTyx3QkFBUDtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Iiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgJy4uL21vbGVjdWxlcy9ndi1vcHRpb24nO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuXG4vKipcbiAqIFRhYnMgY29tcG9uZW50XG4gKlxuICogKiAjIyBEZXRhaWxzXG4gKiAqIFRoaXMgY29tcG9uZW50IHVzZSBndi1vcHRpb24gY29tcG9uZW50IHRvIGdlbmVyYXRlIHRhYnMuXG4gKlxuICogQGF0dHIge0FycmF5PGlkOiBzdHJpbmcgfCB7aWQsIHRpdGxlPywgaWNvbj8sIGFjdGl2ZT8sIGRlc2NyaXB0aW9uPywgbGFiZWw/fT59IG9wdGlvbnMgLSBBbiBhcnJheSBvZiBvcHRpb25zIGZvciBndi1vcHRpb24gc3ViIGNvbXBvbmVudFxuICogQHNsb3QgY29udGVudCAtIExpc3Qgb2YgZWxlbWVudHMgZm9yIHRhYnMgY29udGVudC4gU2hvdWxkIGhhdmUgYW4gaWQgcmVsYXRlZCB0byBvcHRpb25zLlxuICpcbiAqIEBhdHRyIHtTdHJpbmd9IHZhbHVlIC0gdGhlIG9wZW5lZCB0YWIgaWRcbiAqIEBhdHRyIHtCb29sZWFufSBkaXNhYmxlZCAtIHRydWUgaWYgZGlzYWJsZWRcbiAqIEBhdHRyIHtCb29sZWFufSBzbWFsbCAtIHRydWUgaWYgeW91IHdhbnQgZGlzcGxheSB0YWJzIGJlbG93IG9mIHRpdGxlXG4gKiBAYXR0ciB7Qm9vbGVhbn0gdHJ1bmNhdGUgLSB0cnVlIGlmIHlvdSB3YW50IHRydW5jYXRlIHRhYnMgdGl0bGVcbiAqIEBhdHRyIHtGdW5jdGlvbn0gdmFsaWRhdG9yIC0gYSBmdW5jdGlvbiB0aGF0J3MgY2FsbHMgd2hlbiB1c2VyIGNoYW5nZSB0YWIsIHRoaXMgaXMgdXNlZnVsIHRvIHZhbGlkYXRlIHRhYiBjaGFuZ2UuXG4gKlxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtdGFicy1vcHRpb25zLS1tPTBdIC0gVGFicyBvcHRpb25zIG1hcmdpblxuICovXG5leHBvcnQgY2xhc3MgR3ZUYWJzIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgX29wdGlvbnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHZhbHVlOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgdmFsaWRhdG9yOiB7IHR5cGU6IEZ1bmN0aW9uIH0sXG4gICAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBzbWFsbDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICB0cnVuY2F0ZTogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBsYW5ndWFnZT1jc3NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cblxuICAgICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NvbnRlbnQnXSkge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDM1MG1zIGVhc2UtaW4tb3V0O1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgbGVmdDogLTk5OTlweDtcbiAgICAgICAgICB0b3A6IC05OTk5cHg7XG4gICAgICAgIH1cblxuICAgICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NvbnRlbnQnXS5jdXJyZW50KSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aW9ucyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhYnMge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICAgIC0tZ3Ytb3B0aW9uLS1iZHJzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgOmhvc3QoW3NtYWxsXSkgLnRhYnMge1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdChbc21hbGxdKSBndi1vcHRpb24ge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3Ytb3B0aW9uIHtcbiAgICAgICAgICBtYXJnaW46IHZhcigtLWd2LXRhYnMtb3B0aW9ucy0tbSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICA6OnNsb3R0ZWQoZ3YtYnV0dG9uKSB7XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgX2dldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdzbG90W25hbWU9XCJjb250ZW50XCJdJyk7XG4gICAgcmV0dXJuIGNvbnRlbnQuYXNzaWduZWROb2RlcygpO1xuICB9XG5cbiAgZmlyc3RVcGRhdGVkKCkge1xuICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5vcHRpb25zICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wdGlvbnNbMF0uaWQ7XG4gICAgfVxuICB9XG5cbiAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB7IGlkOiBvcHRpb24sIHRpdGxlOiBvcHRpb24gfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24udGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7IGlkOiBvcHRpb24uaWQsIHRpdGxlOiBvcHRpb24uaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICB1cGRhdGVkKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9nZXRDb250ZW50KCk7XG4gICAgY29udGVudC5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2N1cnJlbnQnKSk7XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucXVlcnlTZWxlY3RvcihgIyR7dGhpcy52YWx1ZX1gKTtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudFswXS5jbGFzc0xpc3QuYWRkKCdjdXJyZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgX2NoYW5nZVRhYihmcm9tLCBjb250ZW50LCB2YWx1ZSkge1xuICAgIGZyb20uY2xhc3NMaXN0LnJlbW92ZSgnY3VycmVudCcpO1xuICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnY3VycmVudCcpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UnLCB7IHZhbHVlLCBmcm9tOiBmcm9tLmlkLCB0bzogY29udGVudC5pZCB9KTtcbiAgfVxuXG4gIF9vbkNsaWNrKHsgZGV0YWlsIH0pIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLl9nZXRDb250ZW50KCkuZmluZCgoZSkgPT4gZS5jbGFzc0xpc3QuY29udGFpbnMoJ2N1cnJlbnQnKSk7XG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKGAjJHtkZXRhaWwuaWR9YCk7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3Ytb3B0aW9uJykudmFsdWUgPSBmcm9tLmlkO1xuICAgICAgaWYgKHRoaXMudmFsaWRhdG9yKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdG9yKHsgZnJvbTogZnJvbS5pZCwgdG86IGNvbnRlbnQuaWQgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VUYWIoZnJvbSwgY29udGVudCwgZGV0YWlsLmlkKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jaGFuZ2VUYWIoZnJvbSwgY29udGVudCwgZGV0YWlsLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgX2NvbnRleHR1YWxPcHRpb25zKCkge1xuICAgIGlmICh0aGlzLnRydW5jYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBvcHRpb24uaWQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCB8fCBvcHRpb24udGl0bGU7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ub3B0aW9uLCBsYWJlbDogbGFiZWwuc3Vic3RyaW5nKDAsIDEpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInRpdGxlXCIgY2xhc3M9XCJ0aXRsZVwiPjwvc2xvdD5cbiAgICAgICAgICA8Z3Ytb3B0aW9uIHNtYWxsIC5vcHRpb25zPVwiJHt0aGlzLl9jb250ZXh0dWFsT3B0aW9uc31cIiBAZ3Ytb3B0aW9uOnNlbGVjdD1cIiR7dGhpcy5fb25DbGlja31cIiAudmFsdWU9XCIke3RoaXMudmFsdWV9XCI+PC9ndi1vcHRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8c2xvdCBuYW1lPVwiY29udGVudFwiPjwvc2xvdD5cbiAgICA8L2Rpdj5gO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXRhYnMnLCBHdlRhYnMpO1xuIl19
|
|
@@ -18,7 +18,6 @@ import '../molecules/gv-nav';
|
|
|
18
18
|
import { repeat } from 'lit/directives/repeat';
|
|
19
19
|
import { classMap } from 'lit/directives/class-map';
|
|
20
20
|
import { isSameRoutes } from '../lib/utils';
|
|
21
|
-
|
|
22
21
|
/**
|
|
23
22
|
* User menu
|
|
24
23
|
*
|
|
@@ -43,161 +42,33 @@ import { isSameRoutes } from '../lib/utils';
|
|
|
43
42
|
* @cssprop {Length} [--gv-user-menu-link-a--ph=0px] - Link horizontal padding
|
|
44
43
|
* @cssprop {String} [--gv-user-menu-link--ta=right] - Text align
|
|
45
44
|
*/
|
|
45
|
+
|
|
46
46
|
export class GvUserMenu extends LitElement {
|
|
47
47
|
static get properties() {
|
|
48
48
|
return {
|
|
49
|
-
avatar: {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
avatar: {
|
|
50
|
+
type: String
|
|
51
|
+
},
|
|
52
|
+
routes: {
|
|
53
|
+
type: Array
|
|
54
|
+
},
|
|
55
|
+
_routes: {
|
|
56
|
+
type: Array,
|
|
57
|
+
attribute: false
|
|
58
|
+
},
|
|
59
|
+
_isClosed: {
|
|
60
|
+
type: Boolean,
|
|
61
|
+
attribute: false
|
|
62
|
+
},
|
|
63
|
+
username: {
|
|
64
|
+
type: String
|
|
65
|
+
}
|
|
54
66
|
};
|
|
55
67
|
}
|
|
56
68
|
|
|
57
69
|
static get styles() {
|
|
58
|
-
return [
|
|
59
|
-
|
|
60
|
-
css`
|
|
61
|
-
:host {
|
|
62
|
-
--bdc: var(--gv-user-menu--bdc, lightgrey);
|
|
63
|
-
--c: var(--gv-user-menu--c, var(--gv-theme-font-color-dark, #262626));
|
|
64
|
-
--bgc: var(--gv-user-menu--bgc, transparent);
|
|
65
|
-
--list-bgc: var(--gv-user-menu-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));
|
|
66
|
-
--hover-bgc: var(--gv-user-menu-hover--bgc, var(--gv-theme-color-light, #86c3d0));
|
|
67
|
-
--gv-link-active--c: var(--gv-user-menu-hover--c, var(--gv-theme-color-dark, #28444f));
|
|
68
|
-
--gv-icon--c: var(--gv-user-menu-icon--c, var(--gv-theme-neutral-color-darkest, #000000));
|
|
69
|
-
--gv-icon--s: var(--gv-user-menu-icon--s, 16px);
|
|
70
|
-
--gv-link-a--ph: var(--gv-user-menu-link-a--ph, 0px);
|
|
71
|
-
--gv-link--ta: var(--gv-user-menu-link--ta, right);
|
|
72
|
-
user-select: none;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.user-menu {
|
|
76
|
-
list-style: none;
|
|
77
|
-
margin: 0;
|
|
78
|
-
padding: 0;
|
|
79
|
-
display: inline-block;
|
|
80
|
-
position: relative;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.user-menu__title {
|
|
84
|
-
background-color: var(--bgc);
|
|
85
|
-
border-left: 1px solid var(--bdc);
|
|
86
|
-
color: var(--c);
|
|
87
|
-
cursor: pointer;
|
|
88
|
-
line-height: 40px;
|
|
89
|
-
padding: 8px 24px;
|
|
90
|
-
display: inline-flex;
|
|
91
|
-
align-items: center;
|
|
92
|
-
justify-content: space-between;
|
|
93
|
-
min-width: 175px;
|
|
94
|
-
text-shadow: var(--gv-user-menu--tsh, none);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
::slotted(*) {
|
|
98
|
-
height: 40px;
|
|
99
|
-
width: 40px;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.user-menu__title.no-user {
|
|
103
|
-
padding: 5px 24px;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.user-menu__title gv-link {
|
|
107
|
-
--gv-link-a--ph: 0;
|
|
108
|
-
--gv-link-a--pv: 0;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.user-menu__title span {
|
|
112
|
-
flex: 1;
|
|
113
|
-
text-align: center;
|
|
114
|
-
margin: 0 0.4rem;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.user-menu__title > gv-icon {
|
|
118
|
-
transition: all 0.3s ease 0s;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.user-menu__list {
|
|
122
|
-
position: absolute;
|
|
123
|
-
background-color: var(--list-bgc);
|
|
124
|
-
list-style: none;
|
|
125
|
-
padding: 0;
|
|
126
|
-
transition: all 0.3s ease 0s;
|
|
127
|
-
width: 100%;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
.user-menu__list__item {
|
|
131
|
-
border-left: 1px solid var(--bdc);
|
|
132
|
-
display: flex;
|
|
133
|
-
align-items: center;
|
|
134
|
-
transition: all 0.5s ease;
|
|
135
|
-
padding: 2px 30px;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.user-menu__list__item:last-child {
|
|
139
|
-
border-bottom: 1px solid var(--bdc);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.user-menu__list__item:hover {
|
|
143
|
-
background-color: var(--hover-bgc);
|
|
144
|
-
border-left: 1px dotted var(--bdc);
|
|
145
|
-
font-weight: 500;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
gv-link {
|
|
149
|
-
margin: 0px;
|
|
150
|
-
display: flex;
|
|
151
|
-
width: 100%;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.separator {
|
|
155
|
-
border-top: 1px solid var(--bdc);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
.active {
|
|
159
|
-
background-color: var(--gv-theme-neutral-color-dark, #d9d9d9);
|
|
160
|
-
font-weight: bold;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/** for animations */
|
|
164
|
-
.user-menu__list {
|
|
165
|
-
visibility: visible;
|
|
166
|
-
opacity: 1;
|
|
167
|
-
transform: translateY(0%);
|
|
168
|
-
z-index: 100;
|
|
169
|
-
transition-delay: 0s, 0s, 0.2s;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.user-menu__list__group {
|
|
173
|
-
border-top: 1px solid var(--bdc);
|
|
174
|
-
background-color: var(--gv-theme-neutral-color-light, #efefef);
|
|
175
|
-
padding-left: 0;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.user-menu__list__group__title {
|
|
179
|
-
font-size: small;
|
|
180
|
-
color: var(--gv-theme-color-darker, #383e3f);
|
|
181
|
-
border-left: 1px solid var(--bdc);
|
|
182
|
-
padding-left: 10px;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
.closed .user-menu__list {
|
|
186
|
-
visibility: hidden;
|
|
187
|
-
opacity: 0;
|
|
188
|
-
transform: translateY(-2em);
|
|
189
|
-
z-index: -1;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
gv-icon {
|
|
193
|
-
transform: rotate(0deg);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.closed gv-icon {
|
|
197
|
-
transform: rotate(-180deg);
|
|
198
|
-
}
|
|
199
|
-
`,
|
|
200
|
-
];
|
|
70
|
+
return [// language=css
|
|
71
|
+
css`:host{--bdc:var(--gv-user-menu--bdc, lightgrey);--c:var(--gv-user-menu--c, var(--gv-theme-font-color-dark, #262626));--bgc:var(--gv-user-menu--bgc, transparent);--list-bgc:var(--gv-user-menu-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));--hover-bgc:var(--gv-user-menu-hover--bgc, var(--gv-theme-color-light, #86c3d0));--gv-link-active--c:var(--gv-user-menu-hover--c, var(--gv-theme-color-dark, #28444f));--gv-icon--c:var(--gv-user-menu-icon--c, var(--gv-theme-neutral-color-darkest, #000000));--gv-icon--s:var(--gv-user-menu-icon--s, 16px);--gv-link-a--ph:var(--gv-user-menu-link-a--ph, 0px);--gv-link--ta:var(--gv-user-menu-link--ta, right);user-select:none}.user-menu{list-style:none;margin:0;padding:0;display:inline-block;position:relative}.user-menu__title{background-color:var(--bgc);border-left:1px solid var(--bdc);color:var(--c);cursor:pointer;line-height:40px;padding:8px 24px;display:inline-flex;align-items:center;justify-content:space-between;min-width:175px;text-shadow:var(--gv-user-menu--tsh,none)}::slotted(*){height:40px;width:40px}.user-menu__title.no-user{padding:5px 24px}.user-menu__title gv-link{--gv-link-a--ph:0;--gv-link-a--pv:0}.user-menu__title span{flex:1;text-align:center;margin:0 .4rem}.user-menu__title>gv-icon{transition:all .3s ease 0s}.user-menu__list{position:absolute;background-color:var(--list-bgc);list-style:none;padding:0;transition:all .3s ease 0s;width:100%}.user-menu__list__item{border-left:1px solid var(--bdc);display:flex;align-items:center;transition:all .5s ease;padding:2px 30px}.user-menu__list__item:last-child{border-bottom:1px solid var(--bdc)}.user-menu__list__item:hover{background-color:var(--hover-bgc);border-left:1px dotted var(--bdc);font-weight:500}gv-link{margin:0;display:flex;width:100%}.separator{border-top:1px solid var(--bdc)}.active{background-color:var(--gv-theme-neutral-color-dark,#d9d9d9);font-weight:700}.user-menu__list{visibility:visible;opacity:1;transform:translateY(0);z-index:100;transition-delay:0s,0s,.2s}.user-menu__list__group{border-top:1px solid var(--bdc);background-color:var(--gv-theme-neutral-color-light,#efefef);padding-left:0}.user-menu__list__group__title{font-size:small;color:var(--gv-theme-color-darker,#383e3f);border-left:1px solid var(--bdc);padding-left:10px}.closed .user-menu__list{visibility:hidden;opacity:0;transform:translateY(-2em);z-index:-1}gv-icon{transform:rotate(0)}.closed gv-icon{transform:rotate(-180deg)}`];
|
|
201
72
|
}
|
|
202
73
|
|
|
203
74
|
constructor() {
|
|
@@ -224,11 +95,11 @@ export class GvUserMenu extends LitElement {
|
|
|
224
95
|
|
|
225
96
|
set routes(candidate) {
|
|
226
97
|
if (candidate) {
|
|
227
|
-
Promise.resolve(candidate).then(
|
|
98
|
+
Promise.resolve(candidate).then(candidates => {
|
|
228
99
|
if (candidates) {
|
|
229
|
-
Promise.all(candidates).then(
|
|
100
|
+
Promise.all(candidates).then(futureRoutes => {
|
|
230
101
|
if (!isSameRoutes(this._routes, futureRoutes)) {
|
|
231
|
-
this._routes = futureRoutes.filter(
|
|
102
|
+
this._routes = futureRoutes.filter(r => r != null);
|
|
232
103
|
}
|
|
233
104
|
});
|
|
234
105
|
} else {
|
|
@@ -243,72 +114,36 @@ export class GvUserMenu extends LitElement {
|
|
|
243
114
|
_renderFirstItem() {
|
|
244
115
|
if (this._routes) {
|
|
245
116
|
if (this.username) {
|
|
246
|
-
return html`<li class="user-menu__title" @click
|
|
247
|
-
<div>
|
|
248
|
-
<slot></slot>
|
|
249
|
-
</div>
|
|
250
|
-
<span>${this.username}</span>
|
|
251
|
-
<gv-icon shape="design:triangle"></gv-icon>
|
|
252
|
-
</li>`;
|
|
117
|
+
return html`<li class="user-menu__title" @click="${this._onClick}"> <div> <slot></slot> </div> <span>${this.username}</span> <gv-icon shape="design:triangle"></gv-icon> </li>`;
|
|
253
118
|
} else if (this._hasOneItem()) {
|
|
254
119
|
const firstItem = this._routes[0];
|
|
255
|
-
return html`<li class="user-menu__title no-user" @click
|
|
256
|
-
<gv-link .icon="${firstItem.icon}" .path="${firstItem.path}" .title="${firstItem.title}" @click=${this._onSelect}></gv-link>
|
|
257
|
-
</li>`;
|
|
120
|
+
return html`<li class="user-menu__title no-user" @click="${this._onClick}"> <gv-link .icon="${firstItem.icon}" .path="${firstItem.path}" .title="${firstItem.title}" @click="${this._onSelect}"></gv-link> </li>`;
|
|
258
121
|
}
|
|
259
122
|
}
|
|
123
|
+
|
|
260
124
|
return html``;
|
|
261
125
|
}
|
|
262
126
|
|
|
263
127
|
render() {
|
|
264
|
-
const classes = {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
<nav class="${classMap(classes)}">
|
|
268
|
-
<ul class="user-menu" @mouseleave=${this._onMouseLeave}>
|
|
269
|
-
${this._renderFirstItem()}
|
|
128
|
+
const classes = {
|
|
129
|
+
closed: this._isClosed
|
|
130
|
+
};
|
|
270
131
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
${repeat(
|
|
274
|
-
this._routes,
|
|
275
|
-
(route) => route,
|
|
276
|
-
(route, index) => html` ${this._hasOneItem() ? html`` : this._renderItem(route)} `,
|
|
277
|
-
)}
|
|
278
|
-
</ul>
|
|
279
|
-
</li>
|
|
280
|
-
</ul>
|
|
281
|
-
</nav>
|
|
282
|
-
`;
|
|
132
|
+
if (this._routes) {
|
|
133
|
+
return html` <nav class="${classMap(classes)}"> <ul class="user-menu" @mouseleave="${this._onMouseLeave}"> ${this._renderFirstItem()} <li class="user-menu__content"> <ul class="user-menu__list"> ${repeat(this._routes, route => route, (route, index) => html` ${this._hasOneItem() ? html`` : this._renderItem(route)} `)} </ul> </li> </ul> </nav> `;
|
|
283
134
|
}
|
|
135
|
+
|
|
284
136
|
return html``;
|
|
285
137
|
}
|
|
286
138
|
|
|
287
139
|
_renderItem(route) {
|
|
288
140
|
if (route.routes) {
|
|
289
|
-
return html`<ul class="user-menu__list__group">
|
|
290
|
-
<span class="user-menu__list__group__title">${route.title}</span>
|
|
291
|
-
${repeat(
|
|
292
|
-
route.routes,
|
|
293
|
-
(childRoute) => childRoute,
|
|
294
|
-
(childRoute, index) => html` ${this._renderItem(childRoute)} `,
|
|
295
|
-
)}
|
|
296
|
-
</ul>`;
|
|
141
|
+
return html`<ul class="user-menu__list__group"> <span class="user-menu__list__group__title">${route.title}</span> ${repeat(route.routes, childRoute => childRoute, (childRoute, index) => html` ${this._renderItem(childRoute)} `)} </ul>`;
|
|
297
142
|
} else {
|
|
298
|
-
return html`<li
|
|
299
|
-
class="user-menu__list__item ${route.separator ? 'separator' : ''} ${route.active ? 'active' : ''}"
|
|
300
|
-
style="${route.style}"
|
|
301
|
-
>
|
|
302
|
-
<gv-link
|
|
303
|
-
.icon="${route.icon}"
|
|
304
|
-
.path="${route.path}"
|
|
305
|
-
.title="${route.title}"
|
|
306
|
-
.target="${route.target}"
|
|
307
|
-
@click=${this._onSelect}
|
|
308
|
-
></gv-link>
|
|
309
|
-
</li>`;
|
|
143
|
+
return html`<li class="user-menu__list__item ${route.separator ? 'separator' : ''} ${route.active ? 'active' : ''}" style="${route.style}"> <gv-link .icon="${route.icon}" .path="${route.path}" .title="${route.title}" .target="${route.target}" @click="${this._onSelect}"></gv-link> </li>`;
|
|
310
144
|
}
|
|
311
145
|
}
|
|
312
|
-
}
|
|
313
146
|
|
|
147
|
+
}
|
|
314
148
|
window.customElements.define('gv-user-menu', GvUserMenu);
|
|
149
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi11c2VyLW1lbnUuanMiXSwibmFtZXMiOlsiTGl0RWxlbWVudCIsImh0bWwiLCJjc3MiLCJyZXBlYXQiLCJjbGFzc01hcCIsImlzU2FtZVJvdXRlcyIsIkd2VXNlck1lbnUiLCJwcm9wZXJ0aWVzIiwiYXZhdGFyIiwidHlwZSIsIlN0cmluZyIsInJvdXRlcyIsIkFycmF5IiwiX3JvdXRlcyIsImF0dHJpYnV0ZSIsIl9pc0Nsb3NlZCIsIkJvb2xlYW4iLCJ1c2VybmFtZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiX29uQ2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJfb25Nb3VzZUxlYXZlIiwiX29uU2VsZWN0IiwiX2hhc09uZUl0ZW0iLCJsZW5ndGgiLCJjYW5kaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJjYW5kaWRhdGVzIiwiYWxsIiwiZnV0dXJlUm91dGVzIiwiZmlsdGVyIiwiciIsIl9yZW5kZXJGaXJzdEl0ZW0iLCJmaXJzdEl0ZW0iLCJpY29uIiwicGF0aCIsInRpdGxlIiwicmVuZGVyIiwiY2xhc3NlcyIsImNsb3NlZCIsInJvdXRlIiwiaW5kZXgiLCJfcmVuZGVySXRlbSIsImNoaWxkUm91dGUiLCJzZXBhcmF0b3IiLCJhY3RpdmUiLCJzdHlsZSIsInRhcmdldCIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxVQUFULEVBQXFCQyxJQUFyQixFQUEyQkMsR0FBM0IsUUFBc0MsS0FBdEM7QUFDQSxPQUFPLHFCQUFQO0FBQ0EsU0FBU0MsTUFBVCxRQUF1Qix1QkFBdkI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLDBCQUF6QjtBQUNBLFNBQVND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QUFDSyxNQUFOLEdBQWUsUUFBZixHQUEwQixFQUR0RixZQUVBTCxLQUFLLENBQUNNLEtBRk4sc0JBS0VOLEtBQUssQ0FBQ04sSUFMUixZQU1FTSxLQUFLLENBQUNMLElBTlIsYUFPR0ssS0FBSyxDQUFDSixLQVBULGNBUUlJLEtBQUssQ0FBQ08sTUFSVixhQVNFLEtBQUszQixTQVRQLG9CQUFYO0FBWUQ7QUFDRjs7QUF6UXdDO0FBNFEzQzRCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsY0FBN0IsRUFBNkNoRCxVQUE3QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sLCBjc3MgfSBmcm9tICdsaXQnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3YtbmF2JztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBpc1NhbWVSb3V0ZXMgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuXG4vKipcbiAqIFVzZXIgbWVudVxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBmaXJlcyBndi1saW5rOmNsaWNrIC0gQ3VzdG9tIGV2ZW50IHdoZW4gbmF2IGxpbmsgY2xpY2tcbiAqXG4gKiBAYXR0ciB7QXJyYXl9IHJvdXRlcyAtIGRlZmluaXRpb24gb2YgdXNlciByb3V0ZXMgW3tpY29uOiBTdHJpbmcsIHBhdGg6IFN0cmluZywgdGl0bGU6IFByb21pc2U8U3RyaW5nPiwgYWN0aXZlOiBCb29sZWFuLCByb3V0ZXM6IEFycmF5PGFueT5dXG4gKiBAYXR0ciB7U3RyaW5nfSB1c2VybmFtZSAtIG5hbWUgb2YgdGhlIHVzZXJcbiAqIEBhdHRyIHtTdHJpbmd9IGF2YXRhciAtIHVybCBvZiB0aGUgdXNlciBhdmF0YXJcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS0tYz12YXIoLS1ndi10aGVtZS1mb250LWNvbG9yLWRhcmssICMyNjI2MjYpXSAtIENvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS1ob3Zlci0tYz12YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrLCAjMjg0NDRmKV0gLSBIb3ZlciBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi11c2VyLW1lbnUtLWJnYz10cmFuc3BhcmVudF0gLSBCYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS1saXN0LS1iZ2M9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodGVzdCwgI2ZmZmZmZildIC0gTGlzdCBiYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS1ob3Zlci0tYmdjPXZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKV0gLSBIb3ZlciBiYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXVzZXItbWVudS0tYmRjPWxpZ2h0Z3JleV0gLSBCb3JkZXIgY29sb3JcbiAqIEBjc3Nwcm9wIHtTdHJpbmd9IFstLWd2LXVzZXItbWVudS0tdHNoPW5vbmVdIC0gVGV4dCBzaGFkb3dcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtdXNlci1tZW51LWljb24tLWM9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrZXN0LCAjMDAwMDAwKV0gLSBJY29uIGNvbG9yXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi11c2VyLW1lbnUtaWNvbi0tcz0xNnB4XSAtIEhlaWdodCBhbmQgaWNvbiB3aWR0aFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtdXNlci1tZW51LWxpbmstYS0tcGg9MHB4XSAtIExpbmsgaG9yaXpvbnRhbCBwYWRkaW5nXG4gKiBAY3NzcHJvcCB7U3RyaW5nfSBbLS1ndi11c2VyLW1lbnUtbGluay0tdGE9cmlnaHRdIC0gVGV4dCBhbGlnblxuICovXG5leHBvcnQgY2xhc3MgR3ZVc2VyTWVudSBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF2YXRhcjogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHJvdXRlczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgX3JvdXRlczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2lzQ2xvc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHVzZXJuYW1lOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gbGFuZ3VhZ2U9Y3NzXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAtLWJkYzogdmFyKC0tZ3YtdXNlci1tZW51LS1iZGMsIGxpZ2h0Z3JleSk7XG4gICAgICAgICAgLS1jOiB2YXIoLS1ndi11c2VyLW1lbnUtLWMsIHZhcigtLWd2LXRoZW1lLWZvbnQtY29sb3ItZGFyaywgIzI2MjYyNikpO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi11c2VyLW1lbnUtLWJnYywgdHJhbnNwYXJlbnQpO1xuICAgICAgICAgIC0tbGlzdC1iZ2M6IHZhcigtLWd2LXVzZXItbWVudS1saXN0LS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpKTtcbiAgICAgICAgICAtLWhvdmVyLWJnYzogdmFyKC0tZ3YtdXNlci1tZW51LWhvdmVyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKSk7XG4gICAgICAgICAgLS1ndi1saW5rLWFjdGl2ZS0tYzogdmFyKC0tZ3YtdXNlci1tZW51LWhvdmVyLS1jLCB2YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrLCAjMjg0NDRmKSk7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi11c2VyLW1lbnUtaWNvbi0tYywgdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrZXN0LCAjMDAwMDAwKSk7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1ndi11c2VyLW1lbnUtaWNvbi0tcywgMTZweCk7XG4gICAgICAgICAgLS1ndi1saW5rLWEtLXBoOiB2YXIoLS1ndi11c2VyLW1lbnUtbGluay1hLS1waCwgMHB4KTtcbiAgICAgICAgICAtLWd2LWxpbmstLXRhOiB2YXIoLS1ndi11c2VyLW1lbnUtbGluay0tdGEsIHJpZ2h0KTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnUge1xuICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnVfX3RpdGxlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYmRjKTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tYyk7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgIHBhZGRpbmc6IDhweCAyNHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgIG1pbi13aWR0aDogMTc1cHg7XG4gICAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLWd2LXVzZXItbWVudS0tdHNoLCBub25lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIDo6c2xvdHRlZCgqKSB7XG4gICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fdGl0bGUubm8tdXNlciB7XG4gICAgICAgICAgcGFkZGluZzogNXB4IDI0cHg7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X190aXRsZSBndi1saW5rIHtcbiAgICAgICAgICAtLWd2LWxpbmstYS0tcGg6IDA7XG4gICAgICAgICAgLS1ndi1saW5rLWEtLXB2OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fdGl0bGUgc3BhbiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnVfX3RpdGxlID4gZ3YtaWNvbiB7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZSAwcztcbiAgICAgICAgfVxuXG4gICAgICAgIC51c2VyLW1lbnVfX2xpc3Qge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saXN0LWJnYyk7XG4gICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UgMHM7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X19saXN0X19pdGVtIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWJkYyk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2U7XG4gICAgICAgICAgcGFkZGluZzogMnB4IDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X19saXN0X19pdGVtOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1iZGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fbGlzdF9faXRlbTpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taG92ZXItYmdjKTtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IGRvdHRlZCB2YXIoLS1iZGMpO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIH1cblxuICAgICAgICBndi1saW5rIHtcbiAgICAgICAgICBtYXJnaW46IDBweDtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlcGFyYXRvciB7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJkYyk7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aXZlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNkOWQ5ZDkpO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGZvciBhbmltYXRpb25zICovXG4gICAgICAgIC51c2VyLW1lbnVfX2xpc3Qge1xuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDtcbiAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwcywgMHMsIDAuMnM7XG4gICAgICAgIH1cblxuICAgICAgICAudXNlci1tZW51X19saXN0X19ncm91cCB7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJkYyk7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodCwgI2VmZWZlZik7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVzZXItbWVudV9fbGlzdF9fZ3JvdXBfX3RpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1jb2xvci1kYXJrZXIsICMzODNlM2YpO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYmRjKTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuY2xvc2VkIC51c2VyLW1lbnVfX2xpc3Qge1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMmVtKTtcbiAgICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWljb24ge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNsb3NlZCBndi1pY29uIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9pc0Nsb3NlZCA9IHRydWU7XG4gIH1cblxuICBfb25DbGljayhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuX2lzQ2xvc2VkID0gIXRoaXMuX2lzQ2xvc2VkO1xuICB9XG5cbiAgX29uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLl9pc0Nsb3NlZCA9IHRydWU7XG4gIH1cblxuICBfb25TZWxlY3QoKSB7XG4gICAgdGhpcy5faXNDbG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgX2hhc09uZUl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWUgPT0gbnVsbCAmJiB0aGlzLl9yb3V0ZXMgJiYgdGhpcy5fcm91dGVzLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIHNldCByb3V0ZXMoY2FuZGlkYXRlKSB7XG4gICAgaWYgKGNhbmRpZGF0ZSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKGNhbmRpZGF0ZSkudGhlbigoY2FuZGlkYXRlcykgPT4ge1xuICAgICAgICBpZiAoY2FuZGlkYXRlcykge1xuICAgICAgICAgIFByb21pc2UuYWxsKGNhbmRpZGF0ZXMpLnRoZW4oKGZ1dHVyZVJvdXRlcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc1NhbWVSb3V0ZXModGhpcy5fcm91dGVzLCBmdXR1cmVSb3V0ZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3JvdXRlcyA9IGZ1dHVyZVJvdXRlcy5maWx0ZXIoKHIpID0+IHIgIT0gbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcm91dGVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JvdXRlcyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckZpcnN0SXRlbSgpIHtcbiAgICBpZiAodGhpcy5fcm91dGVzKSB7XG4gICAgICBpZiAodGhpcy51c2VybmFtZSkge1xuICAgICAgICByZXR1cm4gaHRtbGA8bGkgY2xhc3M9XCJ1c2VyLW1lbnVfX3RpdGxlXCIgQGNsaWNrPSR7dGhpcy5fb25DbGlja30+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3Bhbj4ke3RoaXMudXNlcm5hbWV9PC9zcGFuPlxuICAgICAgICAgIDxndi1pY29uIHNoYXBlPVwiZGVzaWduOnRyaWFuZ2xlXCI+PC9ndi1pY29uPlxuICAgICAgICA8L2xpPmA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc09uZUl0ZW0oKSkge1xuICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLl9yb3V0ZXNbMF07XG4gICAgICAgIHJldHVybiBodG1sYDxsaSBjbGFzcz1cInVzZXItbWVudV9fdGl0bGUgbm8tdXNlclwiIEBjbGljaz0ke3RoaXMuX29uQ2xpY2t9PlxuICAgICAgICAgIDxndi1saW5rIC5pY29uPVwiJHtmaXJzdEl0ZW0uaWNvbn1cIiAucGF0aD1cIiR7Zmlyc3RJdGVtLnBhdGh9XCIgLnRpdGxlPVwiJHtmaXJzdEl0ZW0udGl0bGV9XCIgQGNsaWNrPSR7dGhpcy5fb25TZWxlY3R9PjwvZ3YtbGluaz5cbiAgICAgICAgPC9saT5gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7IGNsb3NlZDogdGhpcy5faXNDbG9zZWQgfTtcbiAgICBpZiAodGhpcy5fcm91dGVzKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPG5hdiBjbGFzcz1cIiR7Y2xhc3NNYXAoY2xhc3Nlcyl9XCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwidXNlci1tZW51XCIgQG1vdXNlbGVhdmU9JHt0aGlzLl9vbk1vdXNlTGVhdmV9PlxuICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJGaXJzdEl0ZW0oKX1cblxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci1tZW51X19jb250ZW50XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cInVzZXItbWVudV9fbGlzdFwiPlxuICAgICAgICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcm91dGVzLFxuICAgICAgICAgICAgICAgICAgKHJvdXRlKSA9PiByb3V0ZSxcbiAgICAgICAgICAgICAgICAgIChyb3V0ZSwgaW5kZXgpID0+IGh0bWxgICR7dGhpcy5faGFzT25lSXRlbSgpID8gaHRtbGBgIDogdGhpcy5fcmVuZGVySXRlbShyb3V0ZSl9IGAsXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9uYXY+XG4gICAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX3JlbmRlckl0ZW0ocm91dGUpIHtcbiAgICBpZiAocm91dGUucm91dGVzKSB7XG4gICAgICByZXR1cm4gaHRtbGA8dWwgY2xhc3M9XCJ1c2VyLW1lbnVfX2xpc3RfX2dyb3VwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXNlci1tZW51X19saXN0X19ncm91cF9fdGl0bGVcIj4ke3JvdXRlLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgcm91dGUucm91dGVzLFxuICAgICAgICAgIChjaGlsZFJvdXRlKSA9PiBjaGlsZFJvdXRlLFxuICAgICAgICAgIChjaGlsZFJvdXRlLCBpbmRleCkgPT4gaHRtbGAgJHt0aGlzLl9yZW5kZXJJdGVtKGNoaWxkUm91dGUpfSBgLFxuICAgICAgICApfVxuICAgICAgPC91bD5gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaHRtbGA8bGlcbiAgICAgICAgY2xhc3M9XCJ1c2VyLW1lbnVfX2xpc3RfX2l0ZW0gJHtyb3V0ZS5zZXBhcmF0b3IgPyAnc2VwYXJhdG9yJyA6ICcnfSAke3JvdXRlLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9XCJcbiAgICAgICAgc3R5bGU9XCIke3JvdXRlLnN0eWxlfVwiXG4gICAgICA+XG4gICAgICAgIDxndi1saW5rXG4gICAgICAgICAgLmljb249XCIke3JvdXRlLmljb259XCJcbiAgICAgICAgICAucGF0aD1cIiR7cm91dGUucGF0aH1cIlxuICAgICAgICAgIC50aXRsZT1cIiR7cm91dGUudGl0bGV9XCJcbiAgICAgICAgICAudGFyZ2V0PVwiJHtyb3V0ZS50YXJnZXR9XCJcbiAgICAgICAgICBAY2xpY2s9JHt0aGlzLl9vblNlbGVjdH1cbiAgICAgICAgPjwvZ3YtbGluaz5cbiAgICAgIDwvbGk+YDtcbiAgICB9XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3YtdXNlci1tZW51JywgR3ZVc2VyTWVudSk7XG4iXX0=
|