@gravitee/ui-components 3.25.2 → 3.25.3-typescript-5a46c7d

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.
Files changed (183) hide show
  1. package/package.json +13 -4
  2. package/src/atoms/gv-autocomplete.js +1 -437
  3. package/src/atoms/gv-button.js +1 -235
  4. package/src/atoms/gv-checkbox.js +1 -129
  5. package/src/atoms/gv-date-picker-calendar.js +1 -813
  6. package/src/atoms/gv-date-picker-cell.js +1 -166
  7. package/src/atoms/gv-date-picker.js +1 -532
  8. package/src/atoms/gv-file-upload.js +1 -257
  9. package/src/atoms/gv-icon.js +1 -82
  10. package/src/atoms/gv-image.js +1 -109
  11. package/src/atoms/gv-input-message.js +1 -59
  12. package/src/atoms/gv-input.js +1 -530
  13. package/src/atoms/gv-link.js +1 -132
  14. package/src/atoms/gv-message.js +1 -77
  15. package/src/atoms/gv-metric.js +1 -68
  16. package/src/atoms/gv-relative-time.js +1 -185
  17. package/src/atoms/gv-select-native.js +1 -269
  18. package/src/atoms/gv-select.js +1 -317
  19. package/src/atoms/gv-spinner.js +1 -36
  20. package/src/atoms/gv-state.js +1 -89
  21. package/src/atoms/gv-switch.js +1 -123
  22. package/src/atoms/gv-tag.js +1 -116
  23. package/src/atoms/gv-text.js +1 -107
  24. package/src/charts/gv-chart-bar.js +1 -107
  25. package/src/charts/gv-chart-gauge.js +1 -97
  26. package/src/charts/gv-chart-histogram.js +1 -91
  27. package/src/charts/gv-chart-line.js +1 -235
  28. package/src/charts/gv-chart-map.js +1 -114
  29. package/src/charts/gv-chart-pie.js +1 -95
  30. package/src/index.js +1 -78
  31. package/src/lib/cron-expression.js +1 -210
  32. package/src/lib/date.js +1 -53
  33. package/src/lib/events.js +1 -28
  34. package/src/lib/http-client-schema-form.js +1 -68
  35. package/src/lib/http.js +1 -238
  36. package/src/lib/i18n.js +1 -111
  37. package/src/lib/item.js +1 -119
  38. package/src/lib/properties.js +1 -224
  39. package/src/lib/schema-form.js +1 -43
  40. package/src/lib/studio.js +1 -94
  41. package/src/lib/style.js +1 -41
  42. package/src/lib/text-format.js +1 -76
  43. package/src/lib/theme.js +1 -66
  44. package/src/lib/utils.js +1 -110
  45. package/src/mixins/chart-element.js +1 -142
  46. package/src/mixins/input-element.js +1 -157
  47. package/src/mixins/item-resource.js +1 -122
  48. package/src/mixins/keyboard-element.js +1 -70
  49. package/src/mixins/update-after-browser.js +1 -33
  50. package/src/mixins/with-resize-observer.js +1 -78
  51. package/src/mixins/with-skeleton-attribute.js +1 -118
  52. package/src/molecules/gv-card-full.js +1 -97
  53. package/src/molecules/gv-card-list.js +1 -84
  54. package/src/molecules/gv-card.js +1 -59
  55. package/src/molecules/gv-category-list.js +1 -49
  56. package/src/molecules/gv-category.js +1 -90
  57. package/src/molecules/gv-code.js +1 -297
  58. package/src/molecules/gv-confirm.js +1 -158
  59. package/src/molecules/gv-cron-editor.js +1 -464
  60. package/src/molecules/gv-dropdown-menu.js +1 -84
  61. package/src/molecules/gv-expandable.js +1 -94
  62. package/src/molecules/gv-expression-language.js +1 -308
  63. package/src/molecules/gv-identity-picture.js +1 -125
  64. package/src/molecules/gv-list.js +1 -135
  65. package/src/molecules/gv-metrics.js +1 -150
  66. package/src/molecules/gv-modal.js +1 -146
  67. package/src/molecules/gv-nav.js +1 -170
  68. package/src/molecules/gv-option.js +1 -169
  69. package/src/molecules/gv-plans.js +1 -306
  70. package/src/molecules/gv-popover.js +1 -231
  71. package/src/molecules/gv-promote.js +1 -91
  72. package/src/molecules/gv-rating-list.js +1 -239
  73. package/src/molecules/gv-rating.js +1 -200
  74. package/src/molecules/gv-row-expandable.js +1 -39
  75. package/src/molecules/gv-row.js +1 -84
  76. package/src/molecules/gv-stats.js +1 -96
  77. package/src/molecules/gv-stepper.js +1 -144
  78. package/src/molecules/gv-table.js +1 -575
  79. package/src/molecules/gv-tree.js +1 -127
  80. package/src/organisms/gv-documentation.js +1 -132
  81. package/src/organisms/gv-header.js +1 -130
  82. package/src/organisms/gv-http-client.js +1 -139
  83. package/src/organisms/gv-menu.js +1 -142
  84. package/src/organisms/gv-newsletter-subscription.js +1 -130
  85. package/src/organisms/gv-pagination.js +1 -170
  86. package/src/organisms/gv-properties.js +1 -699
  87. package/src/organisms/gv-resizable-views.js +1 -178
  88. package/src/organisms/gv-resources.js +1 -428
  89. package/src/organisms/gv-schema-form-array.js +1 -140
  90. package/src/organisms/gv-schema-form-control-object.js +1 -140
  91. package/src/organisms/gv-schema-form-control.js +1 -416
  92. package/src/organisms/gv-schema-form.js +1 -646
  93. package/src/organisms/gv-tabs.js +1 -178
  94. package/src/organisms/gv-user-menu.js +1 -149
  95. package/src/organisms/gv-vertical-menu.js +1 -82
  96. package/src/policy-studio/gv-flow-step.js +1 -304
  97. package/src/policy-studio/gv-flow.js +1 -442
  98. package/src/policy-studio/gv-policy-studio-menu.js +1 -436
  99. package/src/policy-studio/gv-policy-studio.js +1 -1778
  100. package/src/styles/empty.js +1 -19
  101. package/src/styles/input.js +1 -19
  102. package/src/styles/link.js +1 -19
  103. package/src/styles/shapes.js +1 -18
  104. package/src/styles/skeleton.js +1 -19
  105. package/src/styles/zoom.js +1 -19
  106. package/src/theme/gv-theme.js +1 -164
  107. package/wc/gv-autocomplete.js +1 -1
  108. package/wc/gv-button.js +1 -1
  109. package/wc/gv-card-full.js +1 -1
  110. package/wc/gv-card-list.js +1 -1
  111. package/wc/gv-card.js +1 -1
  112. package/wc/gv-category-list.js +1 -1
  113. package/wc/gv-category.js +1 -1
  114. package/wc/gv-chart-bar.js +1 -1
  115. package/wc/gv-chart-gauge.js +1 -1
  116. package/wc/gv-chart-histogram.js +1 -1
  117. package/wc/gv-chart-line.js +1 -1
  118. package/wc/gv-chart-map.js +1 -1
  119. package/wc/gv-chart-pie.js +1 -1
  120. package/wc/gv-checkbox.js +1 -1
  121. package/wc/gv-code.js +1 -1
  122. package/wc/gv-confirm.js +1 -1
  123. package/wc/gv-cron-editor.js +1 -1
  124. package/wc/gv-date-picker-calendar.js +1 -1
  125. package/wc/gv-date-picker-cell.js +1 -1
  126. package/wc/gv-date-picker.js +1 -1
  127. package/wc/gv-documentation.js +1 -1
  128. package/wc/gv-dropdown-menu.js +1 -1
  129. package/wc/gv-expandable.js +1 -1
  130. package/wc/gv-expression-language.js +1 -1
  131. package/wc/gv-file-upload.js +1 -1
  132. package/wc/gv-flow-step.js +1 -1
  133. package/wc/gv-flow.js +1 -1
  134. package/wc/gv-header.js +1 -1
  135. package/wc/gv-http-client.js +1 -1
  136. package/wc/gv-icon.js +1 -1
  137. package/wc/gv-identity-picture.js +1 -1
  138. package/wc/gv-image.js +1 -1
  139. package/wc/gv-input-message.js +1 -1
  140. package/wc/gv-input.js +1 -1
  141. package/wc/gv-link.js +1 -1
  142. package/wc/gv-list.js +1 -1
  143. package/wc/gv-menu.js +1 -1
  144. package/wc/gv-message.js +1 -1
  145. package/wc/gv-metric.js +1 -1
  146. package/wc/gv-metrics.js +1 -1
  147. package/wc/gv-modal.js +1 -1
  148. package/wc/gv-nav.js +1 -1
  149. package/wc/gv-newsletter-subscription.js +1 -1
  150. package/wc/gv-option.js +1 -1
  151. package/wc/gv-pagination.js +1 -1
  152. package/wc/gv-plans.js +1 -1
  153. package/wc/gv-policy-studio-menu.js +1 -1
  154. package/wc/gv-policy-studio.js +1 -1
  155. package/wc/gv-popover.js +1 -1
  156. package/wc/gv-promote.js +1 -1
  157. package/wc/gv-properties.js +1 -1
  158. package/wc/gv-rating-list.js +1 -1
  159. package/wc/gv-rating.js +1 -1
  160. package/wc/gv-relative-time.js +1 -1
  161. package/wc/gv-resizable-views.js +1 -1
  162. package/wc/gv-resources.js +1 -1
  163. package/wc/gv-row-expandable.js +1 -1
  164. package/wc/gv-row.js +1 -1
  165. package/wc/gv-schema-form-array.js +1 -1
  166. package/wc/gv-schema-form-control-object.js +1 -1
  167. package/wc/gv-schema-form-control.js +1 -1
  168. package/wc/gv-schema-form.js +1 -1
  169. package/wc/gv-select-native.js +1 -1
  170. package/wc/gv-select.js +1 -1
  171. package/wc/gv-spinner.js +1 -1
  172. package/wc/gv-state.js +1 -1
  173. package/wc/gv-stats.js +1 -1
  174. package/wc/gv-stepper.js +1 -1
  175. package/wc/gv-switch.js +1 -1
  176. package/wc/gv-table.js +1 -1
  177. package/wc/gv-tabs.js +1 -1
  178. package/wc/gv-tag.js +1 -1
  179. package/wc/gv-text.js +1 -1
  180. package/wc/gv-theme.js +1 -1
  181. package/wc/gv-tree.js +1 -1
  182. package/wc/gv-user-menu.js +1 -1
  183. package/wc/gv-vertical-menu.js +1 -1
@@ -1,239 +1 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { css, LitElement, html } from 'lit';
17
- import { repeat } from 'lit/directives/repeat';
18
- import './../atoms/gv-relative-time';
19
- import './gv-identity-picture';
20
- import './gv-rating';
21
- import './gv-confirm';
22
- import { skeleton } from '../styles/skeleton';
23
- import { link } from '../styles/link';
24
- import { i18n } from '../lib/i18n';
25
- import { classMap } from 'lit/directives/class-map';
26
- import { dispatchCustomEvent } from '../lib/events';
27
- /**
28
- * List of ratings with answer form
29
- *
30
- * ## Details
31
- * * has @theme facet
32
- *
33
- * ## Attribute `permissions` details
34
- * * `delete` and `update` properties supports booleans or arrays of rating identifier.
35
- * * `addAnswer` and `deleteAnswer` only accept booleans.
36
- *
37
- * @fires gv-rating-list:add-answer - When user submit answer
38
- * @fires gv-rating-list:delete - When user delete rating
39
- * @fires gv-rating-list:delete-answer - When user delete answer
40
- * @fires gv-rating-list:update - When user update rating
41
- *
42
- * @attr {Promise<Array>} ratings - ratings
43
- * @attr {id, avatar, display_name} user - a current user
44
- * @attr {Object<{update, delete, addAnswer, deleteAnswer}>} permissions - The permissions
45
- * @cssprop {Color} [--gv-rating-list--bgc=var(--gv-theme-neutral-color-lightest, #ffffff)] - Background color
46
- * @cssprop {Color} [--gv-rating-list-answer--bgc=var(--gv-theme-neutral-color-lighter, #fafafa)] - Answer background color
47
- * @cssprop {Color} [--gv-rating-list--bdc=var(--gv-theme-neutral-color, #f5f5f5)] - Border color
48
- * @cssprop {Length} [--gv-rating-list--s=18px] - Height and star width
49
- */
50
-
51
- export class GvRatingList extends LitElement {
52
- static get properties() {
53
- return {
54
- ratings: {
55
- type: Array
56
- },
57
- user: {
58
- type: Object
59
- },
60
- permissions: {
61
- type: Object
62
- },
63
- required: {
64
- type: Boolean,
65
- attribute: 'required'
66
- },
67
- _permissions: {
68
- type: Object,
69
- attribute: false
70
- },
71
- _ratings: {
72
- type: Array,
73
- attribute: false
74
- }
75
- };
76
- }
77
-
78
- static get styles() {
79
- return [skeleton, link, // language=CSS
80
- css`:host{--s:var(--gv-rating-list--s, 18px);--gv-icon--s:var(--s);--gv-rating--s:var(--s);margin:.2rem;box-sizing:border-box}.rating-list{background-color:var(--gv-rating-list--bgc,var(--gv-theme-neutral-color-lightest,#fff))}.rating.parent{border-bottom:1px solid var(--gv-rating-list--bdc,var(--gv-theme-neutral-color,#f5f5f5))}.rating{display:flex;padding:1rem 0}.answer .rating{padding:1rem 0 0 0}.sub-title{color:grey;display:flex;line-height:20px}gv-confirm{align-self:center}.sub-title a.link{text-decoration:underline}gv-identity-picture{margin:0 1rem;height:60px;width:60px}.title{display:flex;line-height:20px}.rating-content,.title b{flex:1}.link-answer{display:inline-block;padding:1rem 0}.link-answer gv-icon{margin-right:.2rem;--gv-icon--s:var(--s)}.delete-answer,.delete-rating,.fake-icon{--gv-icon--s:var(--s);min-width:var(--s);display:inline-flex}.delete-rating{padding-right:1rem}.answer{padding:1rem;margin-top:1rem;background-color:var(--gv-rating-list-answer--bgc,var(--gv-theme-neutral-color-lighter,#fafafa))}.answer-form{display:flex;flex-direction:column}.display-name:after{content:'|';margin:2px}.actions{text-align:right}`];
81
- }
82
-
83
- constructor() {
84
- super();
85
- this._ratings = [];
86
- this._permissions = {
87
- update: false,
88
- delete: false,
89
- addAnswer: false,
90
- deleteAnswer: false
91
- };
92
- }
93
-
94
- set ratings(value) {
95
- Promise.resolve(value).then(value => {
96
- if (value) {
97
- this._skeleton = false;
98
- this._ratings = value;
99
- } else {
100
- this._skeleton = true;
101
- }
102
- }).catch(() => {
103
- this._skeleton = false;
104
- });
105
- }
106
-
107
- set permissions(permissions) {
108
- if (permissions && typeof permissions === 'object') {
109
- this._permissions = Object.assign({}, this._permissions, permissions);
110
- }
111
- }
112
-
113
- render() {
114
- return html` <div class="rating-list">${repeat(this._ratings, rating => this._render(rating))}</div> `;
115
- }
116
-
117
- _editAnswer(rating, e) {
118
- e.stopPropagation();
119
-
120
- this._ratings.forEach(rating => rating._edit = false);
121
-
122
- rating._edit = true;
123
- this.performUpdate();
124
- }
125
-
126
- _getAnswerValue() {
127
- const element = this.shadowRoot.querySelector('gv-text');
128
-
129
- if (element) {
130
- return element.value;
131
- }
132
-
133
- return '';
134
- }
135
-
136
- _onAnswer(rating) {
137
- const answer = this._getAnswerValue();
138
-
139
- if (answer.trim().length > 0) {
140
- dispatchCustomEvent(this, 'add-answer', {
141
- rating,
142
- answer
143
- });
144
- }
145
- }
146
-
147
- _hasValidAnswer() {
148
- const answer = this._getAnswerValue();
149
-
150
- return answer.trim().length > 0;
151
- }
152
-
153
- _onClose(rating) {
154
- delete rating._edit;
155
- this.performUpdate();
156
- }
157
-
158
- _renderAnswer(rating, answer) {
159
- return html`<div class="answer">${this._render(answer, rating)}</div>`;
160
- }
161
-
162
- _renderAnswers(rating) {
163
- return html` ${rating.answers ? html` ${this._canAddAnswer() ? html`<a class="link link-answer" @click="${this._editAnswer.bind(this, rating)}"> <gv-icon class="link" shape="communication:chat#5"></gv-icon> ${i18n('gv-rating-list.reply')}</a>` : ''} ${rating._edit ? html` <div class="answer answer-form"> <gv-text rows="4" label="${i18n('gv-rating-list.answerLabel')}" required @input="${this.performUpdate}"></gv-text> <div class="actions"> <gv-button primary outlined @click="${this._onClose.bind(this, rating)}">${i18n('gv-rating-list.cancel')}</gv-button> <gv-button primary @click="${this._onAnswer.bind(this, rating)}" .disabled="${!this._hasValidAnswer()}">${i18n('gv-rating-list.send')}</gv-button> </div> </div> ` : ''} <div>${repeat(rating.answers, answer => this._renderAnswer(rating, answer))}</div>` : ''}`;
164
- }
165
-
166
- _onDelete(rating) {
167
- dispatchCustomEvent(this, 'delete', {
168
- rating
169
- });
170
- }
171
-
172
- _onDeleteAnswer(rating, answer) {
173
- dispatchCustomEvent(this, 'delete-answer', {
174
- rating,
175
- answer
176
- });
177
- }
178
-
179
- _renderActions(data, parent) {
180
- if (parent) {
181
- return html` ${this._canDeleteAnswer() ? html`<gv-confirm danger icon="home:trash" @gv-confirm:ok="${this._onDeleteAnswer.bind(this, parent, data)}" message="${i18n('gv-rating-list.confirmAnswerDelete')}"> <gv-icon title="${i18n('gv-rating-list.deleteAnswer')}" class="link delete-answer" shape="home:trash"></gv-icon> </gv-confirm>` : ''} `;
182
- } else {
183
- return html` ${this._canDelete(data.id) ? html`<gv-confirm danger icon="home:trash" @gv-confirm:ok="${this._onDelete.bind(this, data)}" message="${i18n('gv-rating-list.confirmRatingDelete')}"> <gv-icon title="${i18n('gv-rating-list.deleteRating')}" class="link delete-rating" shape="home:trash"></gv-icon> </gv-confirm>` : html`<div class="fake-icon"></div>`} `;
184
- }
185
- }
186
-
187
- _render(data, parent) {
188
- const classes = {
189
- rating: true,
190
- skeleton: this._skeleton,
191
- parent: parent == null
192
- };
193
- const displayName = data.author && data.author.display_name ? data.author.display_name : null;
194
- const picture = data.author && data.author._links && data.author._links.avatar ? data.author._links.avatar : null;
195
- return html` <div class="${classMap(classes)}"> <gv-identity-picture rounded .display_name="${displayName}" .picture="${picture}"></gv-identity-picture> <div class="rating-content"> <div class="title"> <b>${data.title ? data.title : data.author.display_name}</b>${parent ? '' : html`<gv-rating .readonly="${!this._canUpdate(data.id)}" @input="${this._onUpdateRating.bind(this, data)}" value="${data.value}"></gv-rating>`}${this._renderActions(data, parent)} </div> <div class="sub-title">${this._getDisplayName(data)}<gv-relative-time datetime="${data.date}" noFuture></gv-relative-time></div> <p class="comment">${data.comment}</p> ${parent ? '' : this._renderAnswers(data)} </div> </div> `;
196
- }
197
-
198
- _onUpdateRating(rating, e) {
199
- rating.value = e.target.value;
200
- dispatchCustomEvent(this, 'update', {
201
- rating
202
- });
203
- }
204
-
205
- _canAddAnswer() {
206
- return this._permissions.addAnswer === true;
207
- }
208
-
209
- _canDeleteAnswer() {
210
- return this._permissions.deleteAnswer === true;
211
- }
212
-
213
- _canUpdate(ratingId) {
214
- if (Array.isArray(this._permissions.update)) {
215
- return this._permissions.update.includes(ratingId);
216
- }
217
-
218
- return this._permissions.update === true;
219
- }
220
-
221
- _canDelete(ratingId) {
222
- if (Array.isArray(this._permissions.delete)) {
223
- return this._permissions.delete.includes(ratingId);
224
- }
225
-
226
- return this._permissions.delete === true;
227
- }
228
-
229
- _getDisplayName(data) {
230
- if (data.title) {
231
- return html`<span class="display-name">${data.author.display_name}</span>`;
232
- }
233
-
234
- return '';
235
- }
236
-
237
- }
238
- window.customElements.define('gv-rating-list', GvRatingList);
239
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yYXRpbmctbGlzdC5qcyJdLCJuYW1lcyI6WyJjc3MiLCJMaXRFbGVtZW50IiwiaHRtbCIsInJlcGVhdCIsInNrZWxldG9uIiwibGluayIsImkxOG4iLCJjbGFzc01hcCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJHdlJhdGluZ0xpc3QiLCJwcm9wZXJ0aWVzIiwicmF0aW5ncyIsInR5cGUiLCJBcnJheSIsInVzZXIiLCJPYmplY3QiLCJwZXJtaXNzaW9ucyIsInJlcXVpcmVkIiwiQm9vbGVhbiIsImF0dHJpYnV0ZSIsIl9wZXJtaXNzaW9ucyIsIl9yYXRpbmdzIiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJ1cGRhdGUiLCJkZWxldGUiLCJhZGRBbnN3ZXIiLCJkZWxldGVBbnN3ZXIiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9za2VsZXRvbiIsImNhdGNoIiwiYXNzaWduIiwicmVuZGVyIiwicmF0aW5nIiwiX3JlbmRlciIsIl9lZGl0QW5zd2VyIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImZvckVhY2giLCJfZWRpdCIsInBlcmZvcm1VcGRhdGUiLCJfZ2V0QW5zd2VyVmFsdWUiLCJlbGVtZW50Iiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJfb25BbnN3ZXIiLCJhbnN3ZXIiLCJ0cmltIiwibGVuZ3RoIiwiX2hhc1ZhbGlkQW5zd2VyIiwiX29uQ2xvc2UiLCJfcmVuZGVyQW5zd2VyIiwiX3JlbmRlckFuc3dlcnMiLCJhbnN3ZXJzIiwiX2NhbkFkZEFuc3dlciIsImJpbmQiLCJfb25EZWxldGUiLCJfb25EZWxldGVBbnN3ZXIiLCJfcmVuZGVyQWN0aW9ucyIsImRhdGEiLCJwYXJlbnQiLCJfY2FuRGVsZXRlQW5zd2VyIiwiX2NhbkRlbGV0ZSIsImlkIiwiY2xhc3NlcyIsImRpc3BsYXlOYW1lIiwiYXV0aG9yIiwiZGlzcGxheV9uYW1lIiwicGljdHVyZSIsIl9saW5rcyIsImF2YXRhciIsInRpdGxlIiwiX2NhblVwZGF0ZSIsIl9vblVwZGF0ZVJhdGluZyIsIl9nZXREaXNwbGF5TmFtZSIsImRhdGUiLCJjb21tZW50IiwidGFyZ2V0IiwicmF0aW5nSWQiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxVQUFkLEVBQTBCQyxJQUExQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLE1BQVQsUUFBdUIsdUJBQXZCO0FBQ0EsT0FBTyw2QkFBUDtBQUNBLE9BQU8sdUJBQVA7QUFDQSxPQUFPLGFBQVA7QUFDQSxPQUFPLGNBQVA7QUFDQSxTQUFTQyxRQUFULFFBQXlCLG9CQUF6QjtBQUNBLFNBQVNDLElBQVQsUUFBcUIsZ0JBQXJCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU8sTUFBTUMsWUFBTixTQUEyQlIsVUFBM0IsQ0FBc0M7QUFDdEIsYUFBVlMsVUFBVSxHQUFHO0FBQ3RCLFdBQU87QUFDTEMsTUFBQUEsT0FBTyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUixPQURKO0FBRUxDLE1BQUFBLElBQUksRUFBRTtBQUFFRixRQUFBQSxJQUFJLEVBQUVHO0FBQVIsT0FGRDtBQUdMQyxNQUFBQSxXQUFXLEVBQUU7QUFBRUosUUFBQUEsSUFBSSxFQUFF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RURvRCxFQUFBQSxlQUFlLENBQUNmLElBQUQsRUFBTztBQUNwQixRQUFJQSxJQUFJLENBQUNZLEtBQVQsRUFBZ0I7QUFDZCxhQUFPeEUsSUFBSSw4QkFBOEI0RCxJQUFJLENBQUNPLE1BQUwsQ0FBWUMsWUFBMUMsU0FBWDtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNEOztBQXRUMEM7QUF5VDdDYyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGdCQUE3QixFQUErQzdFLFlBQS9DIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQnO1xuaW1wb3J0ICcuLy4uL2F0b21zL2d2LXJlbGF0aXZlLXRpbWUnO1xuaW1wb3J0ICcuL2d2LWlkZW50aXR5LXBpY3R1cmUnO1xuaW1wb3J0ICcuL2d2LXJhdGluZyc7XG5pbXBvcnQgJy4vZ3YtY29uZmlybSc7XG5pbXBvcnQgeyBza2VsZXRvbiB9IGZyb20gJy4uL3N0eWxlcy9za2VsZXRvbic7XG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnLi4vc3R5bGVzL2xpbmsnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcblxuLyoqXG4gKiBMaXN0IG9mIHJhdGluZ3Mgd2l0aCBhbnN3ZXIgZm9ybVxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqICMjIEF0dHJpYnV0ZSBgcGVybWlzc2lvbnNgIGRldGFpbHNcbiAqICogYGRlbGV0ZWAgYW5kIGB1cGRhdGVgIHByb3BlcnRpZXMgc3VwcG9ydHMgYm9vbGVhbnMgb3IgYXJyYXlzIG9mIHJhdGluZyBpZGVudGlmaWVyLlxuICogKiBgYWRkQW5zd2VyYCBhbmQgYGRlbGV0ZUFuc3dlcmAgb25seSBhY2NlcHQgYm9vbGVhbnMuXG4gKlxuICogQGZpcmVzIGd2LXJhdGluZy1saXN0OmFkZC1hbnN3ZXIgLSBXaGVuIHVzZXIgc3VibWl0IGFuc3dlclxuICogQGZpcmVzIGd2LXJhdGluZy1saXN0OmRlbGV0ZSAtIFdoZW4gdXNlciBkZWxldGUgcmF0aW5nXG4gKiBAZmlyZXMgZ3YtcmF0aW5nLWxpc3Q6ZGVsZXRlLWFuc3dlciAtIFdoZW4gdXNlciBkZWxldGUgYW5zd2VyXG4gKiBAZmlyZXMgZ3YtcmF0aW5nLWxpc3Q6dXBkYXRlIC0gV2hlbiB1c2VyIHVwZGF0ZSByYXRpbmdcbiAqXG4gKiBAYXR0ciB7UHJvbWlzZTxBcnJheT59IHJhdGluZ3MgLSByYXRpbmdzXG4gKiBAYXR0ciB7aWQsIGF2YXRhciwgZGlzcGxheV9uYW1lfSB1c2VyIC0gYSBjdXJyZW50IHVzZXJcbiAqIEBhdHRyIHtPYmplY3Q8e3VwZGF0ZSwgZGVsZXRlLCBhZGRBbnN3ZXIsIGRlbGV0ZUFuc3dlcn0+fSBwZXJtaXNzaW9ucyAtIFRoZSBwZXJtaXNzaW9uc1xuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1yYXRpbmctbGlzdC0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtcmF0aW5nLWxpc3QtYW5zd2VyLS1iZ2M9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodGVyLCAjZmFmYWZhKV0gLSBBbnN3ZXIgYmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1yYXRpbmctbGlzdC0tYmRjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpXSAtIEJvcmRlciBjb2xvclxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtcmF0aW5nLWxpc3QtLXM9MThweF0gLSBIZWlnaHQgYW5kIHN0YXIgd2lkdGhcbiAqL1xuXG5leHBvcnQgY2xhc3MgR3ZSYXRpbmdMaXN0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmF0aW5nczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgdXNlcjogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgcmVxdWlyZWQ6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAncmVxdWlyZWQnIH0sXG4gICAgICBfcGVybWlzc2lvbnM6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfcmF0aW5nczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgc2tlbGV0b24sXG4gICAgICBsaW5rLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAtLXM6IHZhcigtLWd2LXJhdGluZy1saXN0LS1zLCAxOHB4KTtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IHZhcigtLXMpO1xuICAgICAgICAgIC0tZ3YtcmF0aW5nLS1zOiB2YXIoLS1zKTtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJhdGluZy1saXN0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi1yYXRpbmctbGlzdC0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXN0LCAjZmZmZmZmKSk7XG4gICAgICAgIH1cblxuICAgICAgICAucmF0aW5nLnBhcmVudCB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWd2LXJhdGluZy1saXN0LS1iZGMsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yYXRpbmcge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgcGFkZGluZzogMXJlbSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFuc3dlciAucmF0aW5nIHtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtIDAgMCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnN1Yi10aXRsZSB7XG4gICAgICAgICAgY29sb3I6IGdyZXk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWNvbmZpcm0ge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdWItdGl0bGUgYS5saW5rIHtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlkZW50aXR5LXBpY3R1cmUge1xuICAgICAgICAgIG1hcmdpbjogMCAxcmVtO1xuICAgICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgICB3aWR0aDogNjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSBiLFxuICAgICAgICAucmF0aW5nLWNvbnRlbnQge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAubGluay1hbnN3ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICAubGluay1hbnN3ZXIgZ3YtaWNvbiB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZWxldGUtcmF0aW5nLFxuICAgICAgICAuZGVsZXRlLWFuc3dlcixcbiAgICAgICAgLmZha2UtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1zKTtcbiAgICAgICAgICBtaW4td2lkdGg6IHZhcigtLXMpO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRlbGV0ZS1yYXRpbmcge1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuYW5zd2VyIHtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDFyZW07XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3YtcmF0aW5nLWxpc3QtYW5zd2VyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlciwgI2ZhZmFmYSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFuc3dlci1mb3JtIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuZGlzcGxheS1uYW1lOmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnfCc7XG4gICAgICAgICAgbWFyZ2luOiAycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aW9ucyB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmF0aW5ncyA9IFtdO1xuICAgIHRoaXMuX3Blcm1pc3Npb25zID0ge1xuICAgICAgdXBkYXRlOiBmYWxzZSxcbiAgICAgIGRlbGV0ZTogZmFsc2UsXG4gICAgICBhZGRBbnN3ZXI6IGZhbHNlLFxuICAgICAgZGVsZXRlQW5zd2VyOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgc2V0IHJhdGluZ3ModmFsdWUpIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICAudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fc2tlbGV0b24gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9yYXRpbmdzID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc2tlbGV0b24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5fc2tlbGV0b24gPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0IHBlcm1pc3Npb25zKHBlcm1pc3Npb25zKSB7XG4gICAgaWYgKHBlcm1pc3Npb25zICYmIHR5cGVvZiBwZXJtaXNzaW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuX3Blcm1pc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcGVybWlzc2lvbnMsIHBlcm1pc3Npb25zKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxkaXYgY2xhc3M9XCJyYXRpbmctbGlzdFwiPiR7cmVwZWF0KHRoaXMuX3JhdGluZ3MsIChyYXRpbmcpID0+IHRoaXMuX3JlbmRlcihyYXRpbmcpKX08L2Rpdj4gYDtcbiAgfVxuXG4gIF9lZGl0QW5zd2VyKHJhdGluZywgZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5fcmF0aW5ncy5mb3JFYWNoKChyYXRpbmcpID0+IChyYXRpbmcuX2VkaXQgPSBmYWxzZSkpO1xuICAgIHJhdGluZy5fZWRpdCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtVXBkYXRlKCk7XG4gIH1cblxuICBfZ2V0QW5zd2VyVmFsdWUoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi10ZXh0Jyk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBfb25BbnN3ZXIocmF0aW5nKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyVmFsdWUoKTtcbiAgICBpZiAoYW5zd2VyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdhZGQtYW5zd2VyJywgeyByYXRpbmcsIGFuc3dlciB9KTtcbiAgICB9XG4gIH1cblxuICBfaGFzVmFsaWRBbnN3ZXIoKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyVmFsdWUoKTtcbiAgICByZXR1cm4gYW5zd2VyLnRyaW0oKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgX29uQ2xvc2UocmF0aW5nKSB7XG4gICAgZGVsZXRlIHJhdGluZy5fZWRpdDtcbiAgICB0aGlzLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIF9yZW5kZXJBbnN3ZXIocmF0aW5nLCBhbnN3ZXIpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiYW5zd2VyXCI+JHt0aGlzLl9yZW5kZXIoYW5zd2VyLCByYXRpbmcpfTwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyQW5zd2VycyhyYXRpbmcpIHtcbiAgICByZXR1cm4gaHRtbGAgJHtyYXRpbmcuYW5zd2Vyc1xuICAgICAgPyBodG1sYCAke3RoaXMuX2NhbkFkZEFuc3dlcigpXG4gICAgICAgICAgICA/IGh0bWxgPGEgY2xhc3M9XCJsaW5rIGxpbmstYW5zd2VyXCIgQGNsaWNrPVwiJHt0aGlzLl9lZGl0QW5zd2VyLmJpbmQodGhpcywgcmF0aW5nKX1cIj5cbiAgICAgICAgICAgICAgICA8Z3YtaWNvbiBjbGFzcz1cImxpbmtcIiBzaGFwZT1cImNvbW11bmljYXRpb246Y2hhdCM1XCI+PC9ndi1pY29uPiAke2kxOG4oJ2d2LXJhdGluZy1saXN0LnJlcGx5Jyl9PC9hXG4gICAgICAgICAgICAgID5gXG4gICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICR7cmF0aW5nLl9lZGl0XG4gICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuc3dlciBhbnN3ZXItZm9ybVwiPlxuICAgICAgICAgICAgICAgICAgPGd2LXRleHQgcm93cz1cIjRcIiBsYWJlbD1cIiR7aTE4bignZ3YtcmF0aW5nLWxpc3QuYW5zd2VyTGFiZWwnKX1cIiByZXF1aXJlZCBAaW5wdXQ9XCIke3RoaXMucGVyZm9ybVVwZGF0ZX1cIj48L2d2LXRleHQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uIHByaW1hcnkgb3V0bGluZWQgQGNsaWNrPVwiJHt0aGlzLl9vbkNsb3NlLmJpbmQodGhpcywgcmF0aW5nKX1cIj4ke2kxOG4oJ2d2LXJhdGluZy1saXN0LmNhbmNlbCcpfTwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uIHByaW1hcnkgQGNsaWNrPVwiJHt0aGlzLl9vbkFuc3dlci5iaW5kKHRoaXMsIHJhdGluZyl9XCIgLmRpc2FibGVkPVwiJHshdGhpcy5faGFzVmFsaWRBbnN3ZXIoKX1cIlxuICAgICAgICAgICAgICAgICAgICAgID4ke2kxOG4oJ2d2LXJhdGluZy1saXN0LnNlbmQnKX08L2d2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICA8ZGl2PiR7cmVwZWF0KHJhdGluZy5hbnN3ZXJzLCAoYW5zd2VyKSA9PiB0aGlzLl9yZW5kZXJBbnN3ZXIocmF0aW5nLCBhbnN3ZXIpKX08L2Rpdj5gXG4gICAgICA6ICcnfWA7XG4gIH1cblxuICBfb25EZWxldGUocmF0aW5nKSB7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZGVsZXRlJywgeyByYXRpbmcgfSk7XG4gIH1cblxuICBfb25EZWxldGVBbnN3ZXIocmF0aW5nLCBhbnN3ZXIpIHtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkZWxldGUtYW5zd2VyJywgeyByYXRpbmcsIGFuc3dlciB9KTtcbiAgfVxuXG4gIF9yZW5kZXJBY3Rpb25zKGRhdGEsIHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAke3RoaXMuX2NhbkRlbGV0ZUFuc3dlcigpXG4gICAgICAgICAgPyBodG1sYDxndi1jb25maXJtXG4gICAgICAgICAgICAgIGRhbmdlclxuICAgICAgICAgICAgICBpY29uPVwiaG9tZTp0cmFzaFwiXG4gICAgICAgICAgICAgIEBndi1jb25maXJtOm9rPVwiJHt0aGlzLl9vbkRlbGV0ZUFuc3dlci5iaW5kKHRoaXMsIHBhcmVudCwgZGF0YSl9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZT1cIiR7aTE4bignZ3YtcmF0aW5nLWxpc3QuY29uZmlybUFuc3dlckRlbGV0ZScpfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxndi1pY29uIHRpdGxlPVwiJHtpMThuKCdndi1yYXRpbmctbGlzdC5kZWxldGVBbnN3ZXInKX1cIiBjbGFzcz1cImxpbmsgZGVsZXRlLWFuc3dlclwiIHNoYXBlPVwiaG9tZTp0cmFzaFwiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgIDwvZ3YtY29uZmlybT5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAke3RoaXMuX2NhbkRlbGV0ZShkYXRhLmlkKVxuICAgICAgICAgID8gaHRtbGA8Z3YtY29uZmlybVxuICAgICAgICAgICAgICBkYW5nZXJcbiAgICAgICAgICAgICAgaWNvbj1cImhvbWU6dHJhc2hcIlxuICAgICAgICAgICAgICBAZ3YtY29uZmlybTpvaz1cIiR7dGhpcy5fb25EZWxldGUuYmluZCh0aGlzLCBkYXRhKX1cIlxuICAgICAgICAgICAgICBtZXNzYWdlPVwiJHtpMThuKCdndi1yYXRpbmctbGlzdC5jb25maXJtUmF0aW5nRGVsZXRlJyl9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGd2LWljb24gdGl0bGU9XCIke2kxOG4oJ2d2LXJhdGluZy1saXN0LmRlbGV0ZVJhdGluZycpfVwiIGNsYXNzPVwibGluayBkZWxldGUtcmF0aW5nXCIgc2hhcGU9XCJob21lOnRyYXNoXCI+PC9ndi1pY29uPlxuICAgICAgICAgICAgPC9ndi1jb25maXJtPmBcbiAgICAgICAgICA6IGh0bWxgPGRpdiBjbGFzcz1cImZha2UtaWNvblwiPjwvZGl2PmB9XG4gICAgICBgO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXIoZGF0YSwgcGFyZW50KSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHsgcmF0aW5nOiB0cnVlLCBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24sIHBhcmVudDogcGFyZW50ID09IG51bGwgfTtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGRhdGEuYXV0aG9yICYmIGRhdGEuYXV0aG9yLmRpc3BsYXlfbmFtZSA/IGRhdGEuYXV0aG9yLmRpc3BsYXlfbmFtZSA6IG51bGw7XG4gICAgY29uc3QgcGljdHVyZSA9IGRhdGEuYXV0aG9yICYmIGRhdGEuYXV0aG9yLl9saW5rcyAmJiBkYXRhLmF1dGhvci5fbGlua3MuYXZhdGFyID8gZGF0YS5hdXRob3IuX2xpbmtzLmF2YXRhciA6IG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKGNsYXNzZXMpfVwiPlxuICAgICAgICA8Z3YtaWRlbnRpdHktcGljdHVyZSByb3VuZGVkIC5kaXNwbGF5X25hbWU9XCIke2Rpc3BsYXlOYW1lfVwiIC5waWN0dXJlPVwiJHtwaWN0dXJlfVwiPjwvZ3YtaWRlbnRpdHktcGljdHVyZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJhdGluZy1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICA8Yj4ke2RhdGEudGl0bGUgPyBkYXRhLnRpdGxlIDogZGF0YS5hdXRob3IuZGlzcGxheV9uYW1lfTwvYj4ke3BhcmVudFxuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogaHRtbGA8Z3YtcmF0aW5nXG4gICAgICAgICAgICAgICAgICAucmVhZG9ubHk9XCIkeyF0aGlzLl9jYW5VcGRhdGUoZGF0YS5pZCl9XCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dD1cIiR7dGhpcy5fb25VcGRhdGVSYXRpbmcuYmluZCh0aGlzLCBkYXRhKX1cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2RhdGEudmFsdWV9XCJcbiAgICAgICAgICAgICAgICA+PC9ndi1yYXRpbmc+YH0ke3RoaXMuX3JlbmRlckFjdGlvbnMoZGF0YSwgcGFyZW50KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRpdGxlXCI+JHt0aGlzLl9nZXREaXNwbGF5TmFtZShkYXRhKX08Z3YtcmVsYXRpdmUtdGltZSBkYXRldGltZT1cIiR7ZGF0YS5kYXRlfVwiIG5vRnV0dXJlPjwvZ3YtcmVsYXRpdmUtdGltZT48L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cImNvbW1lbnRcIj4ke2RhdGEuY29tbWVudH08L3A+XG4gICAgICAgICAgJHtwYXJlbnQgPyAnJyA6IHRoaXMuX3JlbmRlckFuc3dlcnMoZGF0YSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIF9vblVwZGF0ZVJhdGluZyhyYXRpbmcsIGUpIHtcbiAgICByYXRpbmcudmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICd1cGRhdGUnLCB7IHJhdGluZyB9KTtcbiAgfVxuXG4gIF9jYW5BZGRBbnN3ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLmFkZEFuc3dlciA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9jYW5EZWxldGVBbnN3ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLmRlbGV0ZUFuc3dlciA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9jYW5VcGRhdGUocmF0aW5nSWQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9wZXJtaXNzaW9ucy51cGRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbnMudXBkYXRlLmluY2x1ZGVzKHJhdGluZ0lkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLnVwZGF0ZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9jYW5EZWxldGUocmF0aW5nSWQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9wZXJtaXNzaW9ucy5kZWxldGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbnMuZGVsZXRlLmluY2x1ZGVzKHJhdGluZ0lkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLmRlbGV0ZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9nZXREaXNwbGF5TmFtZShkYXRhKSB7XG4gICAgaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgIHJldHVybiBodG1sYDxzcGFuIGNsYXNzPVwiZGlzcGxheS1uYW1lXCI+JHtkYXRhLmF1dGhvci5kaXNwbGF5X25hbWV9PC9zcGFuPmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1yYXRpbmctbGlzdCcsIEd2UmF0aW5nTGlzdCk7XG4iXX0=
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvRatingList=void 0;const e=require("lit"),t=require("lit/directives/repeat");require("./../atoms/gv-relative-time"),require("./gv-identity-picture"),require("./gv-rating"),require("./gv-confirm");const i=require("../styles/skeleton"),s=require("../styles/link"),r=require("../lib/i18n"),n=require("lit/directives/class-map"),a=require("../lib/events");class l extends e.LitElement{static get properties(){return{ratings:{type:Array},user:{type:Object},permissions:{type:Object},required:{type:Boolean,attribute:"required"},_permissions:{type:Object,attribute:!1},_ratings:{type:Array,attribute:!1}}}static get styles(){return[i.skeleton,s.link,e.css`:host{--s:var(--gv-rating-list--s, 18px);--gv-icon--s:var(--s);--gv-rating--s:var(--s);margin:.2rem;box-sizing:border-box}.rating-list{background-color:var(--gv-rating-list--bgc,var(--gv-theme-neutral-color-lightest,#fff))}.rating.parent{border-bottom:1px solid var(--gv-rating-list--bdc,var(--gv-theme-neutral-color,#f5f5f5))}.rating{display:flex;padding:1rem 0}.answer .rating{padding:1rem 0 0 0}.sub-title{color:grey;display:flex;line-height:20px}gv-confirm{align-self:center}.sub-title a.link{text-decoration:underline}gv-identity-picture{margin:0 1rem;height:60px;width:60px}.title{display:flex;line-height:20px}.rating-content,.title b{flex:1}.link-answer{display:inline-block;padding:1rem 0}.link-answer gv-icon{margin-right:.2rem;--gv-icon--s:var(--s)}.delete-answer,.delete-rating,.fake-icon{--gv-icon--s:var(--s);min-width:var(--s);display:inline-flex}.delete-rating{padding-right:1rem}.answer{padding:1rem;margin-top:1rem;background-color:var(--gv-rating-list-answer--bgc,var(--gv-theme-neutral-color-lighter,#fafafa))}.answer-form{display:flex;flex-direction:column}.display-name:after{content:'|';margin:2px}.actions{text-align:right}`]}constructor(){super(),this._ratings=[],this._permissions={update:!1,delete:!1,addAnswer:!1,deleteAnswer:!1}}set ratings(e){Promise.resolve(e).then((e=>{e?(this._skeleton=!1,this._ratings=e):this._skeleton=!0})).catch((()=>{this._skeleton=!1}))}set permissions(e){e&&"object"==typeof e&&(this._permissions=Object.assign({},this._permissions,e))}render(){return e.html`<div class="rating-list">${(0,t.repeat)(this._ratings,(e=>this._render(e)))}</div>`}_editAnswer(e,t){t.stopPropagation(),this._ratings.forEach((e=>e._edit=!1)),e._edit=!0,this.performUpdate()}_getAnswerValue(){const e=this.shadowRoot.querySelector("gv-text");return e?e.value:""}_onAnswer(e){const t=this._getAnswerValue();t.trim().length>0&&(0,a.dispatchCustomEvent)(this,"add-answer",{rating:e,answer:t})}_hasValidAnswer(){return this._getAnswerValue().trim().length>0}_onClose(e){delete e._edit,this.performUpdate()}_renderAnswer(t,i){return e.html`<div class="answer">${this._render(i,t)}</div>`}_renderAnswers(i){return e.html`${i.answers?e.html`${this._canAddAnswer()?e.html`<a class="link link-answer" @click="${this._editAnswer.bind(this,i)}"><gv-icon class="link" shape="communication:chat#5"></gv-icon>${(0,r.i18n)("gv-rating-list.reply")}</a>`:""} ${i._edit?e.html`<div class="answer answer-form"><gv-text rows="4" label="${(0,r.i18n)("gv-rating-list.answerLabel")}" required @input="${this.performUpdate}"></gv-text><div class="actions"><gv-button primary outlined @click="${this._onClose.bind(this,i)}">${(0,r.i18n)("gv-rating-list.cancel")}</gv-button><gv-button primary @click="${this._onAnswer.bind(this,i)}" .disabled="${!this._hasValidAnswer()}">${(0,r.i18n)("gv-rating-list.send")}</gv-button></div></div>`:""}<div>${(0,t.repeat)(i.answers,(e=>this._renderAnswer(i,e)))}</div>`:""}`}_onDelete(e){(0,a.dispatchCustomEvent)(this,"delete",{rating:e})}_onDeleteAnswer(e,t){(0,a.dispatchCustomEvent)(this,"delete-answer",{rating:e,answer:t})}_renderActions(t,i){return i?e.html`${this._canDeleteAnswer()?e.html`<gv-confirm danger icon="home:trash" @gv-confirm:ok="${this._onDeleteAnswer.bind(this,i,t)}" message="${(0,r.i18n)("gv-rating-list.confirmAnswerDelete")}"><gv-icon title="${(0,r.i18n)("gv-rating-list.deleteAnswer")}" class="link delete-answer" shape="home:trash"></gv-icon></gv-confirm>`:""}`:e.html`${this._canDelete(t.id)?e.html`<gv-confirm danger icon="home:trash" @gv-confirm:ok="${this._onDelete.bind(this,t)}" message="${(0,r.i18n)("gv-rating-list.confirmRatingDelete")}"><gv-icon title="${(0,r.i18n)("gv-rating-list.deleteRating")}" class="link delete-rating" shape="home:trash"></gv-icon></gv-confirm>`:e.html`<div class="fake-icon"></div>`}`}_render(t,i){const s={rating:!0,skeleton:this._skeleton,parent:null==i},r=t.author&&t.author.display_name?t.author.display_name:null,a=t.author&&t.author._links&&t.author._links.avatar?t.author._links.avatar:null;return e.html`<div class="${(0,n.classMap)(s)}"><gv-identity-picture rounded .display_name="${r}" .picture="${a}"></gv-identity-picture><div class="rating-content"><div class="title"><b>${t.title?t.title:t.author.display_name}</b>${i?"":e.html`<gv-rating .readonly="${!this._canUpdate(t.id)}" @input="${this._onUpdateRating.bind(this,t)}" value="${t.value}"></gv-rating>`}${this._renderActions(t,i)}</div><div class="sub-title">${this._getDisplayName(t)}<gv-relative-time datetime="${t.date}" noFuture></gv-relative-time></div><p class="comment">${t.comment}</p>${i?"":this._renderAnswers(t)}</div></div>`}_onUpdateRating(e,t){e.value=t.target.value,(0,a.dispatchCustomEvent)(this,"update",{rating:e})}_canAddAnswer(){return!0===this._permissions.addAnswer}_canDeleteAnswer(){return!0===this._permissions.deleteAnswer}_canUpdate(e){return Array.isArray(this._permissions.update)?this._permissions.update.includes(e):!0===this._permissions.update}_canDelete(e){return Array.isArray(this._permissions.delete)?this._permissions.delete.includes(e):!0===this._permissions.delete}_getDisplayName(t){return t.title?e.html`<span class="display-name">${t.author.display_name}</span>`:""}}exports.GvRatingList=l,window.customElements.define("gv-rating-list",l);
@@ -1,200 +1 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { css, LitElement, html } from 'lit';
17
- import { repeat } from 'lit/directives/repeat';
18
- import '../atoms/gv-icon';
19
- import { skeleton } from '../styles/skeleton';
20
- import { classMap } from 'lit/directives/class-map';
21
- import { i18n } from '../lib/i18n';
22
- const MAX_RATE = 5;
23
- /**
24
- * Rating component
25
- *
26
- * ## Details
27
- * * has @theme facet
28
- *
29
- * @attr {Length} value - average of ratings between 1 and 5
30
- * @attr {String} count - total count for the average
31
- * @attr {Boolean} skeleton - skeleton mode
32
- * @attr {Boolean} readonly - readonly mode
33
- * @attr {Boolean} with-description - if true, show rate description on hover
34
- *
35
- * @cssprop {Color} [--gv-rating--c=var(--gv-theme-color, #5a7684)] - Color
36
- * @cssprop {Length} [--gv-rating--s=13px] - Size
37
- */
38
-
39
- export class GvRating extends LitElement {
40
- static get properties() {
41
- return {
42
- value: {
43
- type: Number,
44
- reflect: true
45
- },
46
- count: {
47
- type: String
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
- }
63
- };
64
- }
65
-
66
- static get styles() {
67
- return [// language=CSS
68
- css`:host{--gv-icon--c:var(--gv-rating--c, var(--gv-theme-color, #5a7684));--size:var(--gv-rating--s, 13px);--gv-icon--s:var(--size);font-size:var(--gv-theme-font-size-m,14px);cursor:default}.content,.rate{justify-content:space-evenly;display:inline-flex;align-items:flex-end;vertical-align:middle;height:100%}.info-title{font-size:var(--gv-theme-font-size-m,14px);line-height:16px;align-self:center;min-width:35px;text-align:center}.info-subtitle{font-size:var(--gv-theme-font-size-xs,10px);line-height:10px;opacity:.5;text-align:center}.icon{display:inline-flex;align-self:center;margin-right:calc(var(--size)/ 4);align-items:center}.edit{cursor:pointer}.edit gv-icon:hover{transform:translateY(-.5px)}gv-input{flex:1}.icon{min-height:30px}.description{min-width:100px;line-height:calc(var(--size) + 4px);margin:auto 4px}`, skeleton];
69
- }
70
-
71
- constructor() {
72
- super();
73
- this.value = 0;
74
- this.count = 0;
75
- this.readonly = false;
76
- this._candidate = -1;
77
- this.isSelected = false;
78
- }
79
-
80
- _getTitle() {
81
- return `${this._getAverage()}/${MAX_RATE}`;
82
- }
83
-
84
- _onMouseEnter(index) {
85
- this._candidate = index + 1;
86
-
87
- if (this.withDescription) {
88
- switch (this._candidate) {
89
- case 1:
90
- this.description = i18n('gv-rating.description-1');
91
- break;
92
-
93
- case 2:
94
- this.description = i18n('gv-rating.description-2');
95
- break;
96
-
97
- case 3:
98
- this.description = i18n('gv-rating.description-3');
99
- break;
100
-
101
- case 4:
102
- this.description = i18n('gv-rating.description-4');
103
- break;
104
-
105
- case 5:
106
- this.description = i18n('gv-rating.description-5');
107
- break;
108
- }
109
- }
110
- }
111
-
112
- _onMouseOut() {
113
- this._candidate = -1;
114
-
115
- if (this.withDescription && !this.isSelected) {
116
- this.description = null;
117
- }
118
- }
119
-
120
- _onClick(index) {
121
- this._candidate = -1;
122
- this.isSelected = true;
123
- this.value = index + 1;
124
- this.dispatchEvent(new Event('input'), {
125
- bubbles: true,
126
- cancelable: true
127
- });
128
- }
129
-
130
- _getAverage() {
131
- const _value = parseFloat(this.value);
132
-
133
- if (_value >= 0 && _value <= MAX_RATE) {
134
- return _value;
135
- }
136
-
137
- return 0;
138
- }
139
-
140
- _renderStar(star, index) {
141
- if (this.readonly) {
142
- return html`<gv-icon shape="general:${star}"></gv-icon>`;
143
- } else {
144
- return html`<gv-icon @mouseenter="${this._onMouseEnter.bind(this, index)}" @click="${this._onClick.bind(this, index)}" shape="general:${star}"></gv-icon>`;
145
- }
146
- }
147
-
148
- render() {
149
- const average = this._getAverage();
150
-
151
- let trunc = average * 1;
152
-
153
- if (!this.readonly) {
154
- trunc = this._candidate > -1 ? this._candidate : average;
155
- }
156
-
157
- const stars = [];
158
-
159
- for (let star = 1; star <= MAX_RATE; star += 1) {
160
- if (trunc >= star) {
161
- stars.push('star');
162
- } else if (trunc >= star - 0.7) {
163
- stars.push('half-star');
164
- } else {
165
- stars.push('no-star');
166
- }
167
- }
168
-
169
- return html` <div class="${classMap({
170
- skeleton: this.skeleton,
171
- edit: !this.readonly,
172
- content: true
173
- })}"> <div class="${classMap({
174
- content: true
175
- })}"> <div class="${classMap({
176
- rate: true
177
- })}"> <div class="icon" title="${this._getTitle()}"> ${this.withDescription ? html`<div class="description">${this.description}</div>` : ''} ${repeat(stars, star => star, (star, index) => html` ${this._renderStar(star, index)} `)} </div> ${this.count ? html`<div> <div class="info-title">${this.count || ''}</div> <div class="info-subtitle">${this._getCountTitle()}</div> </div>` : ''} </div> </div> </div> `;
178
- }
179
-
180
- firstUpdated() {
181
- if (!this.readonly) {
182
- this.shadowRoot.querySelector('.edit').addEventListener('mouseout', this._onMouseOut.bind(this));
183
- }
184
- }
185
-
186
- _getCountTitle() {
187
- if (this.count) {
188
- if (this.count > 1) {
189
- return i18n('gv-rating.notes');
190
- }
191
-
192
- return i18n('gv-rating.note');
193
- }
194
-
195
- return '';
196
- }
197
-
198
- }
199
- window.customElements.define('gv-rating', GvRating);
200
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yYXRpbmcuanMiXSwibmFtZXMiOlsiY3NzIiwiTGl0RWxlbWVudCIsImh0bWwiLCJyZXBlYXQiLCJza2VsZXRvbiIsImNsYXNzTWFwIiwiaTE4biIsIk1BWF9SQVRFIiwiR3ZSYXRpbmciLCJwcm9wZXJ0aWVzIiwidmFsdWUiLCJ0eXBlIiwiTnVtYmVyIiwicmVmbGVjdCIsImNvdW50IiwiU3RyaW5nIiwiQm9vbGVhbiIsInJlYWRvbmx5IiwiX2NhbmRpZGF0ZSIsImF0dHJpYnV0ZSIsIndpdGhEZXNjcmlwdGlvbiIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiaXNTZWxlY3RlZCIsIl9nZXRUaXRsZSIsIl9nZXRBdmVyYWdlIiwiX29uTW91c2VFbnRlciIsImluZGV4IiwiZGVzY3JpcHRpb24iLCJfb25Nb3VzZU91dCIsIl9vbkNsaWNrIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJfdmFsdWUiLCJwYXJzZUZsb2F0IiwiX3JlbmRlclN0YXIiLCJzdGFyIiwiYmluZCIsInJlbmRlciIsImF2ZXJhZ2UiLCJ0cnVuYyIsInN0YXJzIiwicHVzaCIsImVkaXQiLCJjb250ZW50IiwicmF0ZSIsIl9nZXRDb3VudFRpdGxlIiwiZmlyc3RVcGRhdGVkIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJhZGRFdmVudExpc3RlbmVyIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLFNBQVNBLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsSUFBMUIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLHVCQUF2QjtBQUNBLE9BQU8sa0JBQVA7QUFDQSxTQUFTQyxRQUFULFFBQXlCLG9CQUF6QjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUVBLE1BQU1DLFFBQVEsR0FBRyxDQUFqQjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLFFBQU4sU0FBdUJQLFVBQXZCLENBQWtDO0FBQ2xCLGFBQVZRLFVBQVUsR0FBRztBQUN0QixXQUFPO0FBQ0xDLE1BQUFBLEtBQUssRUFBRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUVDLE1BQVI7QUFBZ0JDLFFBQUFBLE9BQU8sRUFBRTtBQUF6QixPQURGO0FBRUxDLE1BQUFBLEtBQUssRUFBRTtBQUFFSCxRQUFBQSxJQUFJLEVBQUVJO0FBQVIsT0FGRjtBQUdMWCxNQUFBQSxRQUFRLEVBQUU7QUFBRU8sUUFBQUEsSUFBSSxFQUFFSztBQUFSLE9BSEw7QUFJTEMsTUFBQUEsUUFBUSxFQUFFO0FBQUVOLFFBQUFBLElBQUksRUFBRUs7QUFBUixPQUpMO0FBS0xFLE1BQUFBLFVBQVUsRUFBRTtBQUFFUCxRQUFBQSxJQUFJLEVBQUVDLE1BQVI7QUFBZ0JPLFFBQUFBLFNBQVMsRUFBRTtBQUEzQixPQUxQO0FBTUxDLE1BQUFBLGVBQWUsRUFBRTtBQUFFVCxRQUFBQSxJQUFJLEVBQUVLLE9BQVI7QUFBaUJHLFFBQUFBLFNBQVMsRUFBRTtBQUE1QjtBQU5aLEtBQVA7QUFRRDs7QUFFZ0IsYUFBTkUsTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTDtBQUNBckIsSUFBQUEsR0FBRyxxekJBRkUsRUFpRUxJLFFBakVLLENBQVA7QUFtRUQ7O0FBRURrQixFQUFBQSxXQUFXLEdBQUc7QUFDWjtBQUNBLFNBQUtaLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0ksS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLRyxRQUFMLEdBQWdCLEtBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixDQUFDLENBQW5CO0FBQ0EsU0FBS0ssVUFBTCxHQUFrQixLQUFsQjtBQUNEOztBQUVEQyxFQUFBQSxTQUFTLEdBQUc7QUFDVixXQUFRLEdBQUUsS0FBS0MsV0FBTCxFQUFtQixJQUFHbEIsUUFBUyxFQUF6QztBQUNEOztBQUVEbUIsRUFBQUEsYUFBYSxDQUFDQyxLQUFELEVBQVE7QUFDbkIsU0FBS1QsVUFBTCxHQUFrQlMsS0FBSyxHQUFHLENBQTFCOztBQUNBLFFBQUksS0FBS1AsZUFBVCxFQUEwQjtBQUN4QixjQUFRLEtBQUtGLFVBQWI7QUFDRSxhQUFLLENBQUw7QUFDRSxlQUFLVSxXQUFMLEdBQW1CdEIsSUFBSSxDQUFDLHlCQUFELENBQXZCO0FBQ0E7O0FBQ0YsYUFBSyxDQUFMO0FBQ0UsZUFBS3NCLFdBQUwsR0FBbUJ0QixJQUFJLENBQUMseUJBQUQsQ0FBdkI7QUFDQTs7QUFDRixhQUFLLENBQUw7QUFDRSxlQUFLc0IsV0FBTCxHQUFtQnRCLElBQUksQ0FBQyx5QkFBRCxDQUF2QjtBQUNBOztBQUNGLGFBQUssQ0FBTDtBQUNFLGVBQUtzQixXQUFMLEdBQW1CdEIsSUFBSSxDQUFDLHlCQUFELENBQXZCO0FBQ0E7O0FBQ0YsYUFBSyxDQUFMO0FBQ0UsZUFBS3NCLFdBQUwsR0FBbUJ0QixJQUFJLENBQUMseUJBQUQsQ0FBdkI7QUFDQTtBQWZKO0FBaUJEO0FBQ0Y7O0FBRUR1QixFQUFBQSxXQUFXLEdBQUc7QUFDWixTQUFLWCxVQUFMLEdBQWtCLENBQUMsQ0FBbkI7O0FBQ0EsUUFBSSxLQUFLRSxlQUFMLElBQXdCLENBQUMsS0FBS0csVUFBbEMsRUFBOEM7QUFDNUMsV0FBS0ssV0FBTCxHQUFtQixJQUFuQjtBQUNEO0FBQ0Y7O0FBRURFLEVBQUFBLFFBQVEsQ0FBQ0gsS0FBRCxFQUFRO0FBQ2QsU0FBS1QsVUFBTCxHQUFrQixDQUFDLENBQW5CO0FBQ0EsU0FBS0ssVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtiLEtBQUwsR0FBYWlCLEtBQUssR0FBRyxDQUFyQjtBQUNBLFNBQUtJLGFBQUwsQ0FBbUIsSUFBSUMsS0FBSixDQUFVLE9BQVYsQ0FBbkIsRUFBdUM7QUFBRUMsTUFBQUEsT0FBTyxFQUFFLElBQVg7QUFBaUJDLE1BQUFBLFVBQVUsRUFBRTtBQUE3QixLQUF2QztBQUNEOztBQUVEVCxFQUFBQSxXQUFXLEdBQUc7QUFDWixVQUFNVSxNQUFNLEdBQUdDLFVBQVUsQ0FBQyxLQUFLMUIsS0FBTixDQUF6Qjs7QUFDQSxRQUFJeUIsTUFBTSxJQUFJLENBQVYsSUFBZUEsTUFBTSxJQUFJNUIsUUFBN0IsRUFBdUM7QUFDckMsYUFBTzRCLE1BQVA7QUFDRDs7QUFDRCxXQUFPLENBQVA7QUFDRDs7QUFFREUsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9YLEtBQVAsRUFBYztBQUN2QixRQUFJLEtBQUtWLFFBQVQsRUFBbUI7QUFDakIsYUFBT2YsSUFBSSwyQkFBMkJvQyxJQUEzQixjQUFYO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsYUFBT3BDLElBQUkseUJBQ0ssS0FBS3dCLGFBQUwsQ0FBbUJhLElBQW5CLENBQXdCLElBQXhCLEVBQThCWixLQUE5QixDQURMLGFBRUEsS0FBS0csUUFBTCxDQUFjUyxJQUFkLENBQW1CLElBQW5CLEVBQXlCWixLQUF6QixDQUZBLG9CQUdRVyxJQUhSLGNBQVg7QUFLRDtBQUNGOztBQUVERSxFQUFBQSxNQUFNLEdBQUc7QUFDUCxVQUFNQyxPQUFPLEdBQUcsS0FBS2hCLFdBQUwsRUFBaEI7O0FBQ0EsUUFBSWlCLEtBQUssR0FBR0QsT0FBTyxHQUFHLENBQXRCOztBQUVBLFFBQUksQ0FBQyxLQUFLeEIsUUFBVixFQUFvQjtBQUNsQnlCLE1BQUFBLEtBQUssR0FBRyxLQUFLeEIsVUFBTCxHQUFrQixDQUFDLENBQW5CLEdBQXVCLEtBQUtBLFVBQTVCLEdBQXlDdUIsT0FBakQ7QUFDRDs7QUFFRCxVQUFNRSxLQUFLLEdBQUcsRUFBZDs7QUFDQSxTQUFLLElBQUlMLElBQUksR0FBRyxDQUFoQixFQUFtQkEsSUFBSSxJQUFJL0IsUUFBM0IsRUFBcUMrQixJQUFJLElBQUksQ0FBN0MsRUFBZ0Q7QUFDOUMsVUFBSUksS0FBSyxJQUFJSixJQUFiLEVBQW1CO0FBQ2pCSyxRQUFBQSxLQUFLLENBQUNDLElBQU4sQ0FBVyxNQUFYO0FBQ0QsT0FGRCxNQUVPLElBQUlGLEtBQUssSUFBSUosSUFBSSxHQUFHLEdBQXBCLEVBQXlCO0FBQzlCSyxRQUFBQSxLQUFLLENBQUNDLElBQU4sQ0FBVyxXQUFYO0FBQ0QsT0FGTSxNQUVBO0FBQ0xELFFBQUFBLEtBQUssQ0FBQ0MsSUFBTixDQUFXLFNBQVg7QUFDRDtBQUNGOztBQUVELFdBQU8xQyxJQUFJLGdCQUNLRyxRQUFRLENBQUM7QUFBRUQsTUFBQUEsUUFBUSxFQUFFLEtBQUtBLFFBQWpCO0FBQTJCeUMsTUFBQUEsSUFBSSxFQUFFLENBQUMsS0FBSzVCLFFBQXZDO0FBQWlENkIsTUFBQUEsT0FBTyxFQUFFO0FBQTFELEtBQUQsQ0FEYixrQkFFT3pDLFFBQVEsQ0FBQztBQUFFeUMsTUFBQUEsT0FBTyxFQUFFO0FBQVgsS0FBRCxDQUZmLGtCQUdTekMsUUFBUSxDQUFDO0FBQUUwQyxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUFELENBSGpCLCtCQUl3QixLQUFLdkIsU0FBTCxFQUp4QixNQUtDLEtBQUtKLGVBQUwsR0FBdUJsQixJQUFJLDRCQUE0QixLQUFLMEIsV0FBakMsUUFBM0IsR0FBa0YsRUFMbkYsSUFNQ3pCLE1BQU0sQ0FDTndDLEtBRE0sRUFFTEwsSUFBRCxJQUFVQSxJQUZKLEVBR04sQ0FBQ0EsSUFBRCxFQUFPWCxLQUFQLEtBQWlCekIsSUFBSSxJQUFJLEtBQUttQyxXQUFMLENBQWlCQyxJQUFqQixFQUF1QlgsS0FBdkIsQ0FBSixHQUhmLENBTlAsV0FZRCxLQUFLYixLQUFMLEdBQ0VaLElBQUksaUNBQ3dCLEtBQUtZLEtBQUwsSUFBYyxFQUR0QyxxQ0FFMkIsS0FBS2tDLGNBQUwsRUFGM0IsZUFETixHQUtFLEVBakJELHdCQUFYO0FBc0JEOztBQUVEQyxFQUFBQSxZQUFZLEdBQUc7QUFDYixRQUFJLENBQUMsS0FBS2hDLFFBQVYsRUFBb0I7QUFDbEIsV0FBS2lDLFVBQUwsQ0FBZ0JDLGFBQWhCLENBQThCLE9BQTlCLEVBQXVDQyxnQkFBdkMsQ0FBd0QsVUFBeEQsRUFBb0UsS0FBS3ZCLFdBQUwsQ0FBaUJVLElBQWpCLENBQXNCLElBQXRCLENBQXBFO0FBQ0Q7QUFDRjs7QUFFRFMsRUFBQUEsY0FBYyxHQUFHO0FBQ2YsUUFBSSxLQUFLbEMsS0FBVCxFQUFnQjtBQUNkLFVBQUksS0FBS0EsS0FBTCxHQUFhLENBQWpCLEVBQW9CO0FBQ2xCLGVBQU9SLElBQUksQ0FBQyxpQkFBRCxDQUFYO0FBQ0Q7O0FBQ0QsYUFBT0EsSUFBSSxDQUFDLGdCQUFELENBQVg7QUFDRDs7QUFDRCxXQUFPLEVBQVA7QUFDRDs7QUFqTnNDO0FBb056QytDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsV0FBN0IsRUFBMEMvQyxRQUExQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pY29uJztcbmltcG9ydCB7IHNrZWxldG9uIH0gZnJvbSAnLi4vc3R5bGVzL3NrZWxldG9uJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICcuLi9saWIvaTE4bic7XG5cbmNvbnN0IE1BWF9SQVRFID0gNTtcblxuLyoqXG4gKiBSYXRpbmcgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGF0dHIge0xlbmd0aH0gdmFsdWUgLSBhdmVyYWdlIG9mIHJhdGluZ3MgYmV0d2VlbiAxIGFuZCA1XG4gKiBAYXR0ciB7U3RyaW5nfSBjb3VudCAtIHRvdGFsIGNvdW50IGZvciB0aGUgYXZlcmFnZVxuICogQGF0dHIge0Jvb2xlYW59IHNrZWxldG9uIC0gc2tlbGV0b24gbW9kZVxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gcmVhZG9ubHkgbW9kZVxuICogQGF0dHIge0Jvb2xlYW59IHdpdGgtZGVzY3JpcHRpb24gLSBpZiB0cnVlLCBzaG93IHJhdGUgZGVzY3JpcHRpb24gb24gaG92ZXJcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXJhdGluZy0tYz12YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCldIC0gQ29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXJhdGluZy0tcz0xM3B4XSAtIFNpemVcbiAqL1xuZXhwb3J0IGNsYXNzIEd2UmF0aW5nIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHsgdHlwZTogTnVtYmVyLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBjb3VudDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIHNrZWxldG9uOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIF9jYW5kaWRhdGU6IHsgdHlwZTogTnVtYmVyLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICB3aXRoRGVzY3JpcHRpb246IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnd2l0aC1kZXNjcmlwdGlvbicgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi1yYXRpbmctLWMsIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KSk7XG4gICAgICAgICAgLS1zaXplOiB2YXIoLS1ndi1yYXRpbmctLXMsIDEzcHgpO1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogdmFyKC0tc2l6ZSk7XG5cbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tLCAxNHB4KTtcbiAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGVudCxcbiAgICAgICAgLnJhdGUge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmZvLXRpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tLCAxNHB4KTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgbWluLXdpZHRoOiAzNXB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmZvLXN1YnRpdGxlIHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS14cywgMTBweCk7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pY29uIHtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKHZhcigtLXNpemUpIC8gNCk7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0IHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdCBndi1pY29uOmhvdmVyIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuNXB4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlucHV0IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLmljb24ge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzY3JpcHRpb24ge1xuICAgICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tc2l6ZSkgKyA0cHgpO1xuICAgICAgICAgIG1hcmdpbjogYXV0byA0cHg7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICBza2VsZXRvbixcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnZhbHVlID0gMDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgdGhpcy5fY2FuZGlkYXRlID0gLTE7XG4gICAgdGhpcy5pc1NlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuX2dldEF2ZXJhZ2UoKX0vJHtNQVhfUkFURX1gO1xuICB9XG5cbiAgX29uTW91c2VFbnRlcihpbmRleCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IGluZGV4ICsgMTtcbiAgICBpZiAodGhpcy53aXRoRGVzY3JpcHRpb24pIHtcbiAgICAgIHN3aXRjaCAodGhpcy5fY2FuZGlkYXRlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaTE4bignZ3YtcmF0aW5nLmRlc2NyaXB0aW9uLTEnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBpMThuKCdndi1yYXRpbmcuZGVzY3JpcHRpb24tMicpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGkxOG4oJ2d2LXJhdGluZy5kZXNjcmlwdGlvbi0zJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gaTE4bignZ3YtcmF0aW5nLmRlc2NyaXB0aW9uLTQnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBpMThuKCdndi1yYXRpbmcuZGVzY3JpcHRpb24tNScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbk1vdXNlT3V0KCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IC0xO1xuICAgIGlmICh0aGlzLndpdGhEZXNjcmlwdGlvbiAmJiAhdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfb25DbGljayhpbmRleCkge1xuICAgIHRoaXMuX2NhbmRpZGF0ZSA9IC0xO1xuICAgIHRoaXMuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IGluZGV4ICsgMTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcpLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gIH1cblxuICBfZ2V0QXZlcmFnZSgpIHtcbiAgICBjb25zdCBfdmFsdWUgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUpO1xuICAgIGlmIChfdmFsdWUgPj0gMCAmJiBfdmFsdWUgPD0gTUFYX1JBVEUpIHtcbiAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgX3JlbmRlclN0YXIoc3RhciwgaW5kZXgpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWljb24gc2hhcGU9XCJnZW5lcmFsOiR7c3Rhcn1cIj48L2d2LWljb24+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGh0bWxgPGd2LWljb25cbiAgICAgICAgQG1vdXNlZW50ZXI9JHt0aGlzLl9vbk1vdXNlRW50ZXIuYmluZCh0aGlzLCBpbmRleCl9XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX29uQ2xpY2suYmluZCh0aGlzLCBpbmRleCl9XG4gICAgICAgIHNoYXBlPVwiZ2VuZXJhbDoke3N0YXJ9XCJcbiAgICAgID48L2d2LWljb24+YDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgYXZlcmFnZSA9IHRoaXMuX2dldEF2ZXJhZ2UoKTtcbiAgICBsZXQgdHJ1bmMgPSBhdmVyYWdlICogMTtcblxuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdHJ1bmMgPSB0aGlzLl9jYW5kaWRhdGUgPiAtMSA/IHRoaXMuX2NhbmRpZGF0ZSA6IGF2ZXJhZ2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnMgPSBbXTtcbiAgICBmb3IgKGxldCBzdGFyID0gMTsgc3RhciA8PSBNQVhfUkFURTsgc3RhciArPSAxKSB7XG4gICAgICBpZiAodHJ1bmMgPj0gc3Rhcikge1xuICAgICAgICBzdGFycy5wdXNoKCdzdGFyJyk7XG4gICAgICB9IGVsc2UgaWYgKHRydW5jID49IHN0YXIgLSAwLjcpIHtcbiAgICAgICAgc3RhcnMucHVzaCgnaGFsZi1zdGFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFycy5wdXNoKCduby1zdGFyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IHNrZWxldG9uOiB0aGlzLnNrZWxldG9uLCBlZGl0OiAhdGhpcy5yZWFkb25seSwgY29udGVudDogdHJ1ZSB9KX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBjb250ZW50OiB0cnVlIH0pfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgcmF0ZTogdHJ1ZSB9KX1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgdGl0bGU9XCIke3RoaXMuX2dldFRpdGxlKCl9XCI+XG4gICAgICAgICAgICAgICR7dGhpcy53aXRoRGVzY3JpcHRpb24gPyBodG1sYDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogJyd9XG4gICAgICAgICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgICAgICAgIHN0YXJzLFxuICAgICAgICAgICAgICAgIChzdGFyKSA9PiBzdGFyLFxuICAgICAgICAgICAgICAgIChzdGFyLCBpbmRleCkgPT4gaHRtbGAgJHt0aGlzLl9yZW5kZXJTdGFyKHN0YXIsIGluZGV4KX0gYCxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHt0aGlzLmNvdW50XG4gICAgICAgICAgICAgID8gaHRtbGA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tdGl0bGVcIj4ke3RoaXMuY291bnQgfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1zdWJ0aXRsZVwiPiR7dGhpcy5fZ2V0Q291bnRUaXRsZSgpfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgZmlyc3RVcGRhdGVkKCkge1xuICAgIGlmICghdGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLl9vbk1vdXNlT3V0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRDb3VudFRpdGxlKCkge1xuICAgIGlmICh0aGlzLmNvdW50KSB7XG4gICAgICBpZiAodGhpcy5jb3VudCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIGkxOG4oJ2d2LXJhdGluZy5ub3RlcycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGkxOG4oJ2d2LXJhdGluZy5ub3RlJyk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1yYXRpbmcnLCBHdlJhdGluZyk7XG4iXX0=
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvRating=void 0;const t=require("lit"),e=require("lit/directives/repeat");require("../atoms/gv-icon");const i=require("../styles/skeleton"),s=require("lit/directives/class-map"),n=require("../lib/i18n");class r extends t.LitElement{static get properties(){return{value:{type:Number,reflect:!0},count:{type:String},skeleton:{type:Boolean},readonly:{type:Boolean},_candidate:{type:Number,attribute:!1},withDescription:{type:Boolean,attribute:"with-description"}}}static get styles(){return[t.css`:host{--gv-icon--c:var(--gv-rating--c, var(--gv-theme-color, #5a7684));--size:var(--gv-rating--s, 13px);--gv-icon--s:var(--size);font-size:var(--gv-theme-font-size-m,14px);cursor:default}.content,.rate{justify-content:space-evenly;display:inline-flex;align-items:flex-end;vertical-align:middle;height:100%}.info-title{font-size:var(--gv-theme-font-size-m,14px);line-height:16px;align-self:center;min-width:35px;text-align:center}.info-subtitle{font-size:var(--gv-theme-font-size-xs,10px);line-height:10px;opacity:.5;text-align:center}.icon{display:inline-flex;align-self:center;margin-right:calc(var(--size)/ 4);align-items:center}.edit{cursor:pointer}.edit gv-icon:hover{transform:translateY(-.5px)}gv-input{flex:1}.icon{min-height:30px}.description{min-width:100px;line-height:calc(var(--size) + 4px);margin:auto 4px}`,i.skeleton]}constructor(){super(),this.value=0,this.count=0,this.readonly=!1,this._candidate=-1,this.isSelected=!1}_getTitle(){return`${this._getAverage()}/5`}_onMouseEnter(t){if(this._candidate=t+1,this.withDescription)switch(this._candidate){case 1:this.description=(0,n.i18n)("gv-rating.description-1");break;case 2:this.description=(0,n.i18n)("gv-rating.description-2");break;case 3:this.description=(0,n.i18n)("gv-rating.description-3");break;case 4:this.description=(0,n.i18n)("gv-rating.description-4");break;case 5:this.description=(0,n.i18n)("gv-rating.description-5")}}_onMouseOut(){this._candidate=-1,this.withDescription&&!this.isSelected&&(this.description=null)}_onClick(t){this._candidate=-1,this.isSelected=!0,this.value=t+1,this.dispatchEvent(new Event("input"),{bubbles:!0,cancelable:!0})}_getAverage(){const t=parseFloat(this.value);return t>=0&&t<=5?t:0}_renderStar(e,i){return this.readonly?t.html`<gv-icon shape="general:${e}"></gv-icon>`:t.html`<gv-icon @mouseenter="${this._onMouseEnter.bind(this,i)}" @click="${this._onClick.bind(this,i)}" shape="general:${e}"></gv-icon>`}render(){const i=this._getAverage();let n=1*i;this.readonly||(n=this._candidate>-1?this._candidate:i);const r=[];for(let t=1;t<=5;t+=1)n>=t?r.push("star"):n>=t-.7?r.push("half-star"):r.push("no-star");return t.html`<div class="${(0,s.classMap)({skeleton:this.skeleton,edit:!this.readonly,content:!0})}"><div class="${(0,s.classMap)({content:!0})}"><div class="${(0,s.classMap)({rate:!0})}"><div class="icon" title="${this._getTitle()}">${this.withDescription?t.html`<div class="description">${this.description}</div>`:""} ${(0,e.repeat)(r,(t=>t),((e,i)=>t.html`${this._renderStar(e,i)}`))}</div>${this.count?t.html`<div><div class="info-title">${this.count||""}</div><div class="info-subtitle">${this._getCountTitle()}</div></div>`:""}</div></div></div>`}firstUpdated(){this.readonly||this.shadowRoot.querySelector(".edit").addEventListener("mouseout",this._onMouseOut.bind(this))}_getCountTitle(){return this.count?this.count>1?(0,n.i18n)("gv-rating.notes"):(0,n.i18n)("gv-rating.note"):""}}exports.GvRating=r,window.customElements.define("gv-rating",r);
@@ -1,39 +1 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { css } from 'lit';
17
- import { GvExpandable } from './gv-expandable';
18
- /**
19
- * Expandable row
20
- * @extends GvExpandable
21
- *
22
- */
23
-
24
- export class GvRowExpandable extends GvExpandable {
25
- constructor() {
26
- super();
27
- this.icon = 'general:other#2';
28
- this.iconOpened = 'general:other#2';
29
- this.clickable = true;
30
- }
31
-
32
- static get styles() {
33
- return [...super.styles, // language=CSS
34
- css`.box:hover{background-color:var(--gv-theme-neutral-color,#f5f5f5)}`];
35
- }
36
-
37
- }
38
- window.customElements.define('gv-row-expandable', GvRowExpandable);
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yb3ctZXhwYW5kYWJsZS5qcyJdLCJuYW1lcyI6WyJjc3MiLCJHdkV4cGFuZGFibGUiLCJHdlJvd0V4cGFuZGFibGUiLCJjb25zdHJ1Y3RvciIsImljb24iLCJpY29uT3BlbmVkIiwiY2xpY2thYmxlIiwic3R5bGVzIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsUUFBb0IsS0FBcEI7QUFDQSxTQUFTQyxZQUFULFFBQTZCLGlCQUE3QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxlQUFOLFNBQThCRCxZQUE5QixDQUEyQztBQUNoREUsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDQSxTQUFLQyxJQUFMLEdBQVksaUJBQVo7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLGlCQUFsQjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBakI7QUFDRDs7QUFFZ0IsYUFBTkMsTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTCxHQUFHLE1BQU1BLE1BREosRUFFTDtBQUNBUCxJQUFBQSxHQUFHLG9FQUhFLENBQVA7QUFTRDs7QUFsQitDO0FBcUJsRFEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixtQkFBN0IsRUFBa0RSLGVBQWxEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBHdkV4cGFuZGFibGUgfSBmcm9tICcuL2d2LWV4cGFuZGFibGUnO1xuXG4vKipcbiAqIEV4cGFuZGFibGUgcm93XG4gKiAgQGV4dGVuZHMgR3ZFeHBhbmRhYmxlXG4gKlxuICovXG5leHBvcnQgY2xhc3MgR3ZSb3dFeHBhbmRhYmxlIGV4dGVuZHMgR3ZFeHBhbmRhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmljb24gPSAnZ2VuZXJhbDpvdGhlciMyJztcbiAgICB0aGlzLmljb25PcGVuZWQgPSAnZ2VuZXJhbDpvdGhlciMyJztcbiAgICB0aGlzLmNsaWNrYWJsZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uc3VwZXIuc3R5bGVzLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIC5ib3g6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytcm93LWV4cGFuZGFibGUnLCBHdlJvd0V4cGFuZGFibGUpO1xuIl19
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvRowExpandable=void 0;const e=require("lit"),r=require("./gv-expandable");class o extends r.GvExpandable{constructor(){super(),this.icon="general:other#2",this.iconOpened="general:other#2",this.clickable=!0}static get styles(){return[...super.styles,e.css`.box:hover{background-color:var(--gv-theme-neutral-color,#f5f5f5)}`]}}exports.GvRowExpandable=o,window.customElements.define("gv-row-expandable",o);