@gravitee/ui-components 3.25.1 → 3.25.3-typescript-ad6021f

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 (111) hide show
  1. package/CHANGELOG.md +1292 -0
  2. package/LICENSE.txt +202 -0
  3. package/README.md +195 -0
  4. package/package.json +17 -4
  5. package/src/.eslintrc.js +19 -0
  6. package/src/atoms/gv-autocomplete.js +156 -132
  7. package/src/atoms/gv-button.js +248 -73
  8. package/src/atoms/gv-checkbox.js +103 -45
  9. package/src/atoms/gv-date-picker-calendar.js +393 -312
  10. package/src/atoms/gv-date-picker-cell.js +81 -57
  11. package/src/atoms/gv-date-picker.js +319 -180
  12. package/src/atoms/gv-file-upload.js +195 -85
  13. package/src/atoms/gv-icon.js +34 -13
  14. package/src/atoms/gv-image.js +66 -31
  15. package/src/atoms/gv-input-message.js +37 -12
  16. package/src/atoms/gv-input.js +148 -117
  17. package/src/atoms/gv-link.js +125 -47
  18. package/src/atoms/gv-message.js +69 -18
  19. package/src/atoms/gv-metric.js +68 -19
  20. package/src/atoms/gv-relative-time.js +38 -67
  21. package/src/atoms/gv-select-native.js +215 -96
  22. package/src/atoms/gv-select.js +230 -110
  23. package/src/atoms/gv-spinner.js +26 -5
  24. package/src/atoms/gv-state.js +66 -25
  25. package/src/atoms/gv-switch.js +160 -40
  26. package/src/atoms/gv-tag.js +78 -26
  27. package/src/atoms/gv-text.js +83 -22
  28. package/src/charts/gv-chart-bar.js +18 -22
  29. package/src/charts/gv-chart-gauge.js +31 -28
  30. package/src/charts/gv-chart-histogram.js +10 -18
  31. package/src/charts/gv-chart-line.js +59 -70
  32. package/src/charts/gv-chart-map.js +42 -44
  33. package/src/charts/gv-chart-pie.js +14 -18
  34. package/src/index.js +0 -1
  35. package/src/lib/cron-expression.js +35 -40
  36. package/src/lib/date.js +1 -10
  37. package/src/lib/events.js +1 -3
  38. package/src/lib/http-client-schema-form.js +12 -13
  39. package/src/lib/http.js +56 -57
  40. package/src/lib/i18n.js +22 -30
  41. package/src/lib/item.js +12 -13
  42. package/src/lib/properties.js +42 -77
  43. package/src/lib/schema-form.js +5 -4
  44. package/src/lib/studio.js +60 -13
  45. package/src/lib/style.js +8 -8
  46. package/src/lib/text-format.js +7 -14
  47. package/src/lib/theme.js +5 -8
  48. package/src/lib/utils.js +18 -17
  49. package/src/mixins/chart-element.js +54 -31
  50. package/src/mixins/input-element.js +47 -60
  51. package/src/mixins/item-resource.js +32 -34
  52. package/src/mixins/keyboard-element.js +5 -6
  53. package/src/mixins/update-after-browser.js +1 -4
  54. package/src/mixins/with-resize-observer.js +13 -23
  55. package/src/mixins/with-skeleton-attribute.js +48 -54
  56. package/src/molecules/gv-card-full.js +147 -26
  57. package/src/molecules/gv-card-list.js +42 -13
  58. package/src/molecules/gv-card.js +91 -17
  59. package/src/molecules/gv-category-list.js +17 -6
  60. package/src/molecules/gv-category.js +103 -23
  61. package/src/molecules/gv-code.js +142 -80
  62. package/src/molecules/gv-confirm.js +71 -41
  63. package/src/molecules/gv-cron-editor.js +389 -143
  64. package/src/molecules/gv-dropdown-menu.js +46 -14
  65. package/src/molecules/gv-expandable.js +59 -31
  66. package/src/molecules/gv-expression-language.js +138 -176
  67. package/src/molecules/gv-identity-picture.js +66 -43
  68. package/src/molecules/gv-list.js +134 -42
  69. package/src/molecules/gv-metrics.js +49 -37
  70. package/src/molecules/gv-modal.js +95 -28
  71. package/src/molecules/gv-nav.js +75 -49
  72. package/src/molecules/gv-option.js +130 -57
  73. package/src/molecules/gv-plans.js +209 -86
  74. package/src/molecules/gv-popover.js +177 -57
  75. package/src/molecules/gv-promote.js +146 -28
  76. package/src/molecules/gv-rating-list.js +195 -69
  77. package/src/molecules/gv-rating.js +105 -52
  78. package/src/molecules/gv-row-expandable.js +11 -5
  79. package/src/molecules/gv-row.js +147 -21
  80. package/src/molecules/gv-stats.js +48 -23
  81. package/src/molecules/gv-stepper.js +187 -43
  82. package/src/molecules/gv-table.js +309 -199
  83. package/src/molecules/gv-tree.js +156 -33
  84. package/src/organisms/gv-documentation.js +127 -44
  85. package/src/organisms/gv-header.js +195 -37
  86. package/src/organisms/gv-http-client.js +168 -32
  87. package/src/organisms/gv-menu.js +158 -37
  88. package/src/organisms/gv-newsletter-subscription.js +189 -48
  89. package/src/organisms/gv-pagination.js +77 -49
  90. package/src/organisms/gv-properties.js +492 -271
  91. package/src/organisms/gv-resizable-views.js +259 -41
  92. package/src/organisms/gv-resources.js +275 -168
  93. package/src/organisms/gv-schema-form-array.js +159 -49
  94. package/src/organisms/gv-schema-form-control-object.js +73 -59
  95. package/src/organisms/gv-schema-form-control.js +134 -107
  96. package/src/organisms/gv-schema-form.js +313 -208
  97. package/src/organisms/gv-tabs.js +98 -66
  98. package/src/organisms/gv-user-menu.js +201 -36
  99. package/src/organisms/gv-vertical-menu.js +61 -20
  100. package/src/policy-studio/gv-flow-step.js +265 -105
  101. package/src/policy-studio/gv-flow.js +304 -125
  102. package/src/policy-studio/gv-policy-studio-menu.js +471 -157
  103. package/src/policy-studio/gv-policy-studio.js +774 -710
  104. package/src/styles/empty.js +20 -3
  105. package/src/styles/input.js +247 -3
  106. package/src/styles/link.js +16 -3
  107. package/src/styles/shapes.js +0 -1
  108. package/src/styles/skeleton.js +37 -3
  109. package/src/styles/zoom.js +24 -3
  110. package/src/theme/definition.json +1762 -0
  111. package/src/theme/gv-theme.js +60 -21
@@ -22,6 +22,7 @@ import '../molecules/gv-identity-picture';
22
22
  import { dispatchCustomEvent } from '../lib/events';
23
23
  import { getPicture, getPictureDisplayName, getVersion } from '../lib/item';
24
24
  import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
25
+
25
26
  /**
26
27
  * Connected Applications component
27
28
  *
@@ -39,29 +40,104 @@ import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
39
40
  * @cssprop {Length} [--gv-list-image--h=40px] - Image height
40
41
  * @cssprop {Length} [--gv-list-image--w=40px] - Image width
41
42
  */
42
-
43
43
  export class GvList extends withSkeletonAttribute(LitElement) {
44
44
  static get properties() {
45
- return { ...super.styles,
46
- items: {
47
- type: Object
48
- },
49
- title: {
50
- type: String
51
- },
52
- clickable: {
53
- type: Boolean
54
- },
55
- _items: {
56
- type: Object,
57
- attribute: false
58
- }
45
+ return {
46
+ ...super.styles,
47
+ items: { type: Object },
48
+ title: { type: String },
49
+ clickable: { type: Boolean },
50
+ _items: { type: Object, attribute: false },
59
51
  };
60
52
  }
61
53
 
62
54
  static get styles() {
63
- return [...super.styles, link, // language=CSS
64
- css`:host{box-sizing:border-box;display:inline-block;width:280px;border-radius:4px;background-color:var(--gv-list--bgc,var(--gv-theme-neutral-color-lightest,#fff));--gv-icon--s:var(--gv-list-icon--s, 20px)}gv-identity-picture{width:var(--gv-list-image--w,40px);height:var(--gv-list-image--h,40px)}.list{list-style:none;margin:0;padding:0}h3{padding:24px;font-size:var(--gv-theme-font-size-m);line-height:var(--gv-theme-font-size-m);opacity:.6;letter-spacing:.05rem;border-bottom:1px solid var(--gv-theme-neutral-color);margin:0}h4{font-size:var(--gv-theme-font-size-m);line-height:var(--gv-theme-font-size-m);opacity:.9;letter-spacing:.05rem}h4 span{font-size:var(--gv-theme-font-size-s,12px);margin-left:8px}.item{display:flex;margin:24px}.item__image{align-self:center;margin-right:4px}.item__content{display:flex;flex-direction:column;justify-content:space-evenly}.item__title{margin:0}.item__description{font-size:var(--gv-theme-font-size-m,14px);line-height:22px;opacity:.5;display:-webkit-box;max-width:200px;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.scrollable-container{max-height:400px;overflow:auto}`];
55
+ return [
56
+ ...super.styles,
57
+ link,
58
+ // language=CSS
59
+ css`
60
+ :host {
61
+ box-sizing: border-box;
62
+ display: inline-block;
63
+ width: 280px;
64
+ border-radius: 4px;
65
+ background-color: var(--gv-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));
66
+ --gv-icon--s: var(--gv-list-icon--s, 20px);
67
+ }
68
+
69
+ gv-identity-picture {
70
+ width: var(--gv-list-image--w, 40px);
71
+ height: var(--gv-list-image--h, 40px);
72
+ }
73
+
74
+ .list {
75
+ list-style: none;
76
+ margin: 0;
77
+ padding: 0;
78
+ }
79
+
80
+ h3 {
81
+ padding: 24px;
82
+ font-size: var(--gv-theme-font-size-m);
83
+ line-height: var(--gv-theme-font-size-m);
84
+ opacity: 0.6;
85
+ letter-spacing: 0.05rem;
86
+ border-bottom: 1px solid var(--gv-theme-neutral-color);
87
+ margin: 0;
88
+ }
89
+
90
+ h4 {
91
+ font-size: var(--gv-theme-font-size-m);
92
+ line-height: var(--gv-theme-font-size-m);
93
+ opacity: 0.9;
94
+ letter-spacing: 0.05rem;
95
+ }
96
+
97
+ h4 span {
98
+ font-size: var(--gv-theme-font-size-s, 12px);
99
+ margin-left: 8px;
100
+ }
101
+
102
+ .item {
103
+ display: flex;
104
+ margin: 24px;
105
+ }
106
+
107
+ .item__image {
108
+ align-self: center;
109
+ margin-right: 4px;
110
+ }
111
+
112
+ .item__content {
113
+ display: flex;
114
+ flex-direction: column;
115
+ justify-content: space-evenly;
116
+ }
117
+
118
+ .item__title {
119
+ margin: 0;
120
+ }
121
+
122
+ .item__description {
123
+ font-size: var(--gv-theme-font-size-m, 14px);
124
+ line-height: 22px;
125
+ opacity: 0.5;
126
+
127
+ display: -webkit-box;
128
+ max-width: 200px;
129
+ -webkit-line-clamp: 4;
130
+ -webkit-box-orient: vertical;
131
+ overflow: hidden;
132
+ text-overflow: ellipsis;
133
+ }
134
+
135
+ .scrollable-container {
136
+ max-height: 400px;
137
+ overflow: auto;
138
+ }
139
+ `,
140
+ ];
65
141
  }
66
142
 
67
143
  constructor() {
@@ -79,27 +155,28 @@ export class GvList extends withSkeletonAttribute(LitElement) {
79
155
 
80
156
  _renderStatus(subscriptions) {
81
157
  if (subscriptions) {
82
- const paused = subscriptions.filter(sub => sub.status.toUpperCase() === 'PAUSED');
83
-
158
+ const paused = subscriptions.filter((sub) => sub.status.toUpperCase() === 'PAUSED');
84
159
  if (paused.length > 0) {
85
160
  return html` <gv-icon title="${i18n('gv-list.paused')}" shape="media:pause"></gv-icon>`;
86
161
  }
87
-
88
- const pending = subscriptions.filter(sub => sub.status.toUpperCase() === 'PENDING');
89
-
162
+ const pending = subscriptions.filter((sub) => sub.status.toUpperCase() === 'PENDING');
90
163
  if (pending.length > 0) {
91
164
  return html` <gv-icon title="${i18n('gv-list.pending')}" shape="home:timer"></gv-icon>`;
92
165
  }
93
166
  }
94
-
95
167
  return '';
96
168
  }
97
169
 
98
170
  _renderItem(item) {
99
171
  if (item) {
100
- return html` <div class="item__image">${this._renderImage(item.item)}</div> <div class="item__content"> <h4 class="item__title">${this._renderStatus(item.subscriptions)}${item.item.name} <span>${getVersion(item.item)}</span></h4> <div class="item__description">${item.item.description}</div> </div> `;
172
+ return html`
173
+ <div class="item__image">${this._renderImage(item.item)}</div>
174
+ <div class="item__content">
175
+ <h4 class="item__title">${this._renderStatus(item.subscriptions)}${item.item.name} <span>${getVersion(item.item)}</span></h4>
176
+ <div class="item__description">${item.item.description}</div>
177
+ </div>
178
+ `;
101
179
  }
102
-
103
180
  return html`<p>xxxx-xxxx-xxxx-xxxx</p>`;
104
181
  }
105
182
 
@@ -107,29 +184,44 @@ export class GvList extends withSkeletonAttribute(LitElement) {
107
184
  if (this._empty && !this._skeleton) {
108
185
  return '';
109
186
  }
110
-
111
187
  if (this._skeleton) {
112
- return html` <ul class="list"> <h4 class="skeleton">xxxx-xxxx-xxxx-xxxx</h4> <div class="scrollable-container"> <li class="item skeleton">${this._renderItem()}</li> <li class="item skeleton">${this._renderItem()}</li> </div> </ul> `;
188
+ return html`
189
+ <ul class="list">
190
+ <h4 class="skeleton">xxxx-xxxx-xxxx-xxxx</h4>
191
+ <div class="scrollable-container">
192
+ <li class="item skeleton">${this._renderItem()}</li>
193
+ <li class="item skeleton">${this._renderItem()}</li>
194
+ </div>
195
+ </ul>
196
+ `;
113
197
  }
114
-
115
- return html` <ul class="list"> <h3>${this.title ? this.title : ''} ${this._items && this._items.length > 0 ? html`<span>(${this._items.length})</span>` : ''}</h3> <div class="scrollable-container"> ${this._items ? repeat(this._items, item => item, item => {
116
- if (this.clickable) {
117
- return html`<li class="${classMap({
118
- item: true,
119
- link: true
120
- })}" @click="${this._onClick.bind(this, item)}"> ${this._renderItem(item)} </li>`;
121
- } else {
122
- return html`<li class="${classMap({
123
- item: true
124
- })}">${this._renderItem(item)}</li>`;
125
- }
126
- }) : ''} </div> </ul> `;
198
+ return html`
199
+ <ul class="list">
200
+ <h3>${this.title ? this.title : ''} ${this._items && this._items.length > 0 ? html`<span>(${this._items.length})</span>` : ''}</h3>
201
+ <div class="scrollable-container">
202
+ ${this._items
203
+ ? repeat(
204
+ this._items,
205
+ (item) => item,
206
+ (item) => {
207
+ if (this.clickable) {
208
+ return html`<li class="${classMap({ item: true, link: true })}" @click="${this._onClick.bind(this, item)}">
209
+ ${this._renderItem(item)}
210
+ </li>`;
211
+ } else {
212
+ return html`<li class="${classMap({ item: true })}">${this._renderItem(item)}</li>`;
213
+ }
214
+ },
215
+ )
216
+ : ''}
217
+ </div>
218
+ </ul>
219
+ `;
127
220
  }
128
221
 
129
222
  render() {
130
223
  return html` <div>${this._error ? html`<div class="error">${i18n('gv-list.error')}</div>` : this._renderItems()}</div> `;
131
224
  }
132
-
133
225
  }
226
+
134
227
  window.customElements.define('gv-list', GvList);
135
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1saXN0LmpzIl0sIm5hbWVzIjpbImNzcyIsImh0bWwiLCJMaXRFbGVtZW50IiwicmVwZWF0IiwiY2xhc3NNYXAiLCJpMThuIiwibGluayIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJnZXRQaWN0dXJlIiwiZ2V0UGljdHVyZURpc3BsYXlOYW1lIiwiZ2V0VmVyc2lvbiIsIndpdGhTa2VsZXRvbkF0dHJpYnV0ZSIsIkd2TGlzdCIsInByb3BlcnRpZXMiLCJzdHlsZXMiLCJpdGVtcyIsInR5cGUiLCJPYmplY3QiLCJ0aXRsZSIsIlN0cmluZyIsImNsaWNrYWJsZSIsIkJvb2xlYW4iLCJfaXRlbXMiLCJhdHRyaWJ1dGUiLCJjb25zdHJ1Y3RvciIsIl9za2VsZXRvbkF0dHJpYnV0ZSIsIl9vbkNsaWNrIiwiaXRlbSIsIl9yZW5kZXJJbWFnZSIsIl9yZW5kZXJTdGF0dXMiLCJzdWJzY3JpcHRpb25zIiwicGF1c2VkIiwiZmlsdGVyIiwic3ViIiwic3RhdHVzIiwidG9VcHBlckNhc2UiLCJsZW5ndGgiLCJwZW5kaW5nIiwiX3JlbmRlckl0ZW0iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJfcmVuZGVySXRlbXMiLCJfZW1wdHkiLCJfc2tlbGV0b24iLCJiaW5kIiwicmVuZGVyIiwiX2Vycm9yIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxNQUFULFFBQXVCLHVCQUF2QjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVND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QUFBLE1BQU0sR0FBRztBQUNQLFdBQU81QyxJQUFJLFNBQVMsS0FBSzZDLE1BQUwsR0FBYzdDLElBQUksc0JBQXNCSSxJQUFJLENBQUMsZUFBRCxDQUExQixRQUFsQixHQUF3RSxLQUFLb0MsWUFBTCxFQUFqRixTQUFYO0FBQ0Q7O0FBckwyRDtBQXdMOURNLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsU0FBN0IsRUFBd0NyQyxNQUF4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0JztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICcuLi9saWIvaTE4bic7XG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnLi4vc3R5bGVzL2xpbmsnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3YtaWRlbnRpdHktcGljdHVyZSc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRQaWN0dXJlLCBnZXRQaWN0dXJlRGlzcGxheU5hbWUsIGdldFZlcnNpb24gfSBmcm9tICcuLi9saWIvaXRlbSc7XG5pbXBvcnQgeyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUgfSBmcm9tICcuLi9taXhpbnMvd2l0aC1za2VsZXRvbi1hdHRyaWJ1dGUnO1xuXG4vKipcbiAqIENvbm5lY3RlZCBBcHBsaWNhdGlvbnMgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGZpcmVzIGd2LWxpc3Q6Y2xpY2sgLSBDbGljayBldmVudCBmcm9tIGFuIGVsZW1lbnQgb2YgdGhlIGxpc3RcbiAqXG4gKiBAYXR0ciB7UHJvbWlzZTxBcnJheTx7T2JqZWN0fT4+fSBpdGVtcyAtIGEgbGlzdCBvZiBpdGVtLlxuICogQGF0dHIge1N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbGlzdC5cbiAqIEBhdHRyIHtCb29sZWFufSBjbGlja2FibGUgLSB0cnVlIGlmIGd2LWxpc3QgZWxlbWVudCBjYW4gYmUgY2xpY2thYmxlLlxuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtbGlzdC0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LWxpc3QtaWNvbi0tcz0yMHB4XSAtIEhlaWdodCBhbmQgaWNvbiB3aWR0aFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtbGlzdC1pbWFnZS0taD00MHB4XSAtIEltYWdlIGhlaWdodFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtbGlzdC1pbWFnZS0tdz00MHB4XSAtIEltYWdlIHdpZHRoXG4gKi9cbmV4cG9ydCBjbGFzcyBHdkxpc3QgZXh0ZW5kcyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnN0eWxlcyxcbiAgICAgIGl0ZW1zOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBjbGlja2FibGU6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgX2l0ZW1zOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uc3VwZXIuc3R5bGVzLFxuICAgICAgbGluayxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDI4MHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi1saXN0LS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpKTtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IHZhcigtLWd2LWxpc3QtaWNvbi0tcywgMjBweCk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1pZGVudGl0eS1waWN0dXJlIHtcbiAgICAgICAgICB3aWR0aDogdmFyKC0tZ3YtbGlzdC1pbWFnZS0tdywgNDBweCk7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1ndi1saXN0LWltYWdlLS1oLCA0MHB4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5saXN0IHtcbiAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaDMge1xuICAgICAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbSk7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tKTtcbiAgICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVyZW07XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IpO1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGg0IHtcbiAgICAgICAgICBmb250LXNpemU6IHZhcigtLWd2LXRoZW1lLWZvbnQtc2l6ZS1tKTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLW0pO1xuICAgICAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGg0IHNwYW4ge1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLXMsIDEycHgpO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaXRlbSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBtYXJnaW46IDI0cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaXRlbV9faW1hZ2Uge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pdGVtX19jb250ZW50IHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG4gICAgICAgIH1cblxuICAgICAgICAuaXRlbV9fdGl0bGUge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pdGVtX19kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbSwgMTRweCk7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICAgICAgb3BhY2l0eTogMC41O1xuXG4gICAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDQ7XG4gICAgICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNjcm9sbGFibGUtY29udGFpbmVyIHtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9za2VsZXRvbkF0dHJpYnV0ZSA9ICdpdGVtcyc7XG4gIH1cblxuICBfb25DbGljayhpdGVtKSB7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2xpY2snLCBpdGVtKTtcbiAgfVxuXG4gIF9yZW5kZXJJbWFnZShpdGVtKSB7XG4gICAgcmV0dXJuIGh0bWxgPGd2LWlkZW50aXR5LXBpY3R1cmUgLnBpY3R1cmU9XCIke2dldFBpY3R1cmUoaXRlbSl9XCIgLmRpc3BsYXlfbmFtZT1cIiR7Z2V0UGljdHVyZURpc3BsYXlOYW1lKGl0ZW0pfVwiPjwvZ3YtaWRlbnRpdHktcGljdHVyZT5gO1xuICB9XG5cbiAgX3JlbmRlclN0YXR1cyhzdWJzY3JpcHRpb25zKSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IHBhdXNlZCA9IHN1YnNjcmlwdGlvbnMuZmlsdGVyKChzdWIpID0+IHN1Yi5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1BBVVNFRCcpO1xuICAgICAgaWYgKHBhdXNlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBodG1sYCA8Z3YtaWNvbiB0aXRsZT1cIiR7aTE4bignZ3YtbGlzdC5wYXVzZWQnKX1cIiBzaGFwZT1cIm1lZGlhOnBhdXNlXCI+PC9ndi1pY29uPmA7XG4gICAgICB9XG4gICAgICBjb25zdCBwZW5kaW5nID0gc3Vic2NyaXB0aW9ucy5maWx0ZXIoKHN1YikgPT4gc3ViLnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnUEVORElORycpO1xuICAgICAgaWYgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gaHRtbGAgPGd2LWljb24gdGl0bGU9XCIke2kxOG4oJ2d2LWxpc3QucGVuZGluZycpfVwiIHNoYXBlPVwiaG9tZTp0aW1lclwiPjwvZ3YtaWNvbj5gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBfcmVuZGVySXRlbShpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbV9faW1hZ2VcIj4ke3RoaXMuX3JlbmRlckltYWdlKGl0ZW0uaXRlbSl9PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtX19jb250ZW50XCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiaXRlbV9fdGl0bGVcIj4ke3RoaXMuX3JlbmRlclN0YXR1cyhpdGVtLnN1YnNjcmlwdGlvbnMpfSR7aXRlbS5pdGVtLm5hbWV9IDxzcGFuPiR7Z2V0VmVyc2lvbihpdGVtLml0ZW0pfTwvc3Bhbj48L2g0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtX19kZXNjcmlwdGlvblwiPiR7aXRlbS5pdGVtLmRlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYDxwPnh4eHgteHh4eC14eHh4LXh4eHg8L3A+YDtcbiAgfVxuXG4gIF9yZW5kZXJJdGVtcygpIHtcbiAgICBpZiAodGhpcy5fZW1wdHkgJiYgIXRoaXMuX3NrZWxldG9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLl9za2VsZXRvbikge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJza2VsZXRvblwiPnh4eHgteHh4eC14eHh4LXh4eHg8L2g0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiaXRlbSBza2VsZXRvblwiPiR7dGhpcy5fcmVuZGVySXRlbSgpfTwvbGk+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJpdGVtIHNrZWxldG9uXCI+JHt0aGlzLl9yZW5kZXJJdGVtKCl9PC9saT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC91bD5cbiAgICAgIGA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxuICAgICAgICA8aDM+JHt0aGlzLnRpdGxlID8gdGhpcy50aXRsZSA6ICcnfSAke3RoaXMuX2l0ZW1zICYmIHRoaXMuX2l0ZW1zLmxlbmd0aCA+IDAgPyBodG1sYDxzcGFuPigke3RoaXMuX2l0ZW1zLmxlbmd0aH0pPC9zcGFuPmAgOiAnJ308L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsYWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAke3RoaXMuX2l0ZW1zXG4gICAgICAgICAgICA/IHJlcGVhdChcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcyxcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbSxcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2thYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDxsaSBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBpdGVtOiB0cnVlLCBsaW5rOiB0cnVlIH0pfVwiIEBjbGljaz1cIiR7dGhpcy5fb25DbGljay5iaW5kKHRoaXMsIGl0ZW0pfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVySXRlbShpdGVtKX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5gO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgPGxpIGNsYXNzPVwiJHtjbGFzc01hcCh7IGl0ZW06IHRydWUgfSl9XCI+JHt0aGlzLl9yZW5kZXJJdGVtKGl0ZW0pfTwvbGk+YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6ICcnfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdWw+XG4gICAgYDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGAgPGRpdj4ke3RoaXMuX2Vycm9yID8gaHRtbGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj4ke2kxOG4oJ2d2LWxpc3QuZXJyb3InKX08L2Rpdj5gIDogdGhpcy5fcmVuZGVySXRlbXMoKX08L2Rpdj4gYDtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1saXN0JywgR3ZMaXN0KTtcbiJdfQ==
@@ -21,6 +21,7 @@ import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
21
21
  import { classMap } from 'lit/directives/class-map';
22
22
  import { dispatchCustomEvent } from '../lib/events';
23
23
  import { ifDefined } from 'lit/directives/if-defined';
24
+
24
25
  /**
25
26
  * Metrics information component
26
27
  *
@@ -33,23 +34,36 @@ import { ifDefined } from 'lit/directives/if-defined';
33
34
  * @attr {Promise<{ hits: value, health: {value, clickable}, subscribers: {value, clickable?, title?} }>} metrics - Metrics.
34
35
  * @attr {RatingSummary} rating - Ratings of an API.
35
36
  */
36
-
37
37
  export class GvMetrics extends withSkeletonAttribute(LitElement) {
38
38
  static get properties() {
39
39
  return {
40
- metrics: {
41
- type: Object
42
- },
43
- _metrics: {
44
- type: Object,
45
- attribute: false
46
- }
40
+ metrics: { type: Object },
41
+ _metrics: { type: Object, attribute: false },
47
42
  };
48
43
  }
49
44
 
50
45
  static get styles() {
51
- return [...super.styles, link, // language=CSS
52
- css`:host{box-sizing:border-box;margin:.2rem;width:100%;height:100%;min-height:25px;min-width:25px;display:flex;width:100%}:host>*{flex:1 1 auto}`];
46
+ return [
47
+ ...super.styles,
48
+ link,
49
+ // language=CSS
50
+ css`
51
+ :host {
52
+ box-sizing: border-box;
53
+ margin: 0.2rem;
54
+ width: 100%;
55
+ height: 100%;
56
+ min-height: 25px;
57
+ min-width: 25px;
58
+ display: flex;
59
+ width: 100%;
60
+ }
61
+
62
+ :host > * {
63
+ flex: 1 1 auto;
64
+ }
65
+ `,
66
+ ];
53
67
  }
54
68
 
55
69
  constructor() {
@@ -64,7 +78,6 @@ export class GvMetrics extends withSkeletonAttribute(LitElement) {
64
78
  if (this._metrics && typeof this._metrics[metricName] === 'object') {
65
79
  return this._metrics[metricName].clickable;
66
80
  }
67
-
68
81
  return false;
69
82
  }
70
83
 
@@ -72,7 +85,6 @@ export class GvMetrics extends withSkeletonAttribute(LitElement) {
72
85
  if (typeof metric === 'object') {
73
86
  return metric.value;
74
87
  }
75
-
76
88
  return metric;
77
89
  }
78
90
 
@@ -80,7 +92,6 @@ export class GvMetrics extends withSkeletonAttribute(LitElement) {
80
92
  if (this._metrics) {
81
93
  return this._getValue(this._metrics.subscribers);
82
94
  }
83
-
84
95
  return null;
85
96
  }
86
97
 
@@ -88,20 +99,19 @@ export class GvMetrics extends withSkeletonAttribute(LitElement) {
88
99
  if (this._metrics) {
89
100
  return this._getValue(this._metrics.hits);
90
101
  }
91
-
92
102
  return null;
93
103
  }
94
104
 
95
105
  _getHealth() {
96
106
  if (this._metrics) {
97
107
  const health = this._getValue(this._metrics.health);
98
-
99
- return !isNaN(health) ? Intl.NumberFormat.call(this, navigator.language, {
100
- style: 'percent',
101
- maximumFractionDigits: 2
102
- }).format(health) : '';
108
+ return !isNaN(health)
109
+ ? Intl.NumberFormat.call(this, navigator.language, {
110
+ style: 'percent',
111
+ maximumFractionDigits: 2,
112
+ }).format(health)
113
+ : '';
103
114
  }
104
-
105
115
  return null;
106
116
  }
107
117
 
@@ -109,22 +119,26 @@ export class GvMetrics extends withSkeletonAttribute(LitElement) {
109
119
  if (this._metrics && typeof this._metrics[metricName] === 'object') {
110
120
  return this._metrics[metricName].title;
111
121
  }
112
-
113
122
  return null;
114
123
  }
115
124
 
116
125
  _onClick(key) {
117
- dispatchCustomEvent(this, 'click', {
118
- key
119
- });
126
+ dispatchCustomEvent(this, 'click', { key });
120
127
  }
121
128
 
122
129
  _renderMetric(key, icon, name, value) {
123
130
  const clickable = this._isClickable(key);
124
-
125
- return value || this._skeleton ? html`<gv-metric @click="${clickable ? this._onClick.bind(this, key) : null}" .skeleton="${this._skeleton}" icon="${icon}" name="${name}" value="${value}" class="${classMap({
126
- link: clickable
127
- })}" title="${ifDefined(this._getTitle(key))}"></gv-metric>` : html``;
131
+ return value || this._skeleton
132
+ ? html`<gv-metric
133
+ @click="${clickable ? this._onClick.bind(this, key) : null}"
134
+ .skeleton="${this._skeleton}"
135
+ icon="${icon}"
136
+ name="${name}"
137
+ value="${value}"
138
+ class="${classMap({ link: clickable })}"
139
+ title="${ifDefined(this._getTitle(key))}"
140
+ ></gv-metric>`
141
+ : html``;
128
142
  }
129
143
 
130
144
  render() {
@@ -133,18 +147,16 @@ export class GvMetrics extends withSkeletonAttribute(LitElement) {
133
147
  }
134
148
 
135
149
  const subscribers = this._getSubscribers();
136
-
137
150
  const hits = this._getHits();
138
-
139
151
  const health = this._getHealth();
140
152
 
141
- return html` ${this._renderMetric('subscribers', 'communication:group', i18n('gv-metrics.subscribers', {
142
- count: subscribers
143
- }), subscribers)} ${this._renderMetric('hits', 'general:cursor', i18n('gv-metrics.hits', {
144
- count: hits
145
- }), hits)} ${this._renderMetric('health', 'general:heart', i18n('gv-metrics.health'), health)} <slot></slot> `;
153
+ return html`
154
+ ${this._renderMetric('subscribers', 'communication:group', i18n('gv-metrics.subscribers', { count: subscribers }), subscribers)}
155
+ ${this._renderMetric('hits', 'general:cursor', i18n('gv-metrics.hits', { count: hits }), hits)}
156
+ ${this._renderMetric('health', 'general:heart', i18n('gv-metrics.health'), health)}
157
+ <slot></slot>
158
+ `;
146
159
  }
147
-
148
160
  }
161
+
149
162
  window.customElements.define('gv-metrics', GvMetrics);
150
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1tZXRyaWNzLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwiaTE4biIsImxpbmsiLCJ3aXRoU2tlbGV0b25BdHRyaWJ1dGUiLCJjbGFzc01hcCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJpZkRlZmluZWQiLCJHdk1ldHJpY3MiLCJwcm9wZXJ0aWVzIiwibWV0cmljcyIsInR5cGUiLCJPYmplY3QiLCJfbWV0cmljcyIsImF0dHJpYnV0ZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiX3NrZWxldG9uQXR0cmlidXRlIiwic2tlbGV0b24iLCJfZXJyb3IiLCJfZW1wdHkiLCJfaXNDbGlja2FibGUiLCJtZXRyaWNOYW1lIiwiY2xpY2thYmxlIiwiX2dldFZhbHVlIiwibWV0cmljIiwidmFsdWUiLCJfZ2V0U3Vic2NyaWJlcnMiLCJzdWJzY3JpYmVycyIsIl9nZXRIaXRzIiwiaGl0cyIsIl9nZXRIZWFsdGgiLCJoZWFsdGgiLCJpc05hTiIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJjYWxsIiwibmF2aWdhdG9yIiwibGFuZ3VhZ2UiLCJzdHlsZSIsIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsImZvcm1hdCIsIl9nZXRUaXRsZSIsInRpdGxlIiwiX29uQ2xpY2siLCJrZXkiLCJfcmVuZGVyTWV0cmljIiwiaWNvbiIsIm5hbWUiLCJfc2tlbGV0b24iLCJiaW5kIiwicmVuZGVyIiwiY291bnQiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxVQUFkLEVBQTBCQyxJQUExQixRQUFzQyxLQUF0QztBQUNBLE9BQU8sb0JBQVA7QUFDQSxTQUFT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d0JBQUQsRUFBMkI7QUFBRWtELE1BQUFBLEtBQUssRUFBRXhCO0FBQVQsS0FBM0IsQ0FBN0QsRUFBaUhBLFdBQWpILENBRE8sSUFFUCxLQUFLa0IsYUFBTCxDQUFtQixNQUFuQixFQUEyQixnQkFBM0IsRUFBNkM1QyxJQUFJLENBQUMsaUJBQUQsRUFBb0I7QUFBRWtELE1BQUFBLEtBQUssRUFBRXRCO0FBQVQsS0FBcEIsQ0FBakQsRUFBdUZBLElBQXZGLENBRk8sSUFHUCxLQUFLZ0IsYUFBTCxDQUFtQixRQUFuQixFQUE2QixlQUE3QixFQUE4QzVDLElBQUksQ0FBQyxtQkFBRCxDQUFsRCxFQUF5RThCLE1BQXpFLENBSE8saUJBQVg7QUFNRDs7QUExSDhEO0FBNkhqRXFCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsWUFBN0IsRUFBMkMvQyxTQUEzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIExpdEVsZW1lbnQsIGh0bWwgfSBmcm9tICdsaXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1tZXRyaWMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IGxpbmsgfSBmcm9tICcuLi9zdHlsZXMvbGluayc7XG5pbXBvcnQgeyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUgfSBmcm9tICcuLi9taXhpbnMvd2l0aC1za2VsZXRvbi1hdHRyaWJ1dGUnO1xuaW1wb3J0IHsgY2xhc3NNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9jbGFzcy1tYXAnO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuaW1wb3J0IHsgaWZEZWZpbmVkIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvaWYtZGVmaW5lZCc7XG5cbi8qKlxuICogTWV0cmljcyBpbmZvcm1hdGlvbiBjb21wb25lbnRcbiAqXG4gKiAjIyBEZXRhaWxzXG4gKiAqIGhhcyBAdGhlbWUgZmFjZXRcbiAqICogYXR0cmlidXRlcyBgbWV0cmljc2Agc2hvdWxkIGJlIGFuIGFycmF5IG9mIE9iamVjdCB7dmFsdWUsIGNsaWNrYWJsZX0sIG9yIGFuIGFycmF5IG9mIHZhbHVlcywgb3IgYSBtaXguXG4gKlxuICogQGZpcmVzIGd2LW1ldHJpY3M6Y2xpY2sgLSBDbGljayBldmVudCBmcm9tIG1ldHJpYyBpZiBpcyBjbGlja2FibGVcbiAqXG4gKiBAYXR0ciB7UHJvbWlzZTx7IGhpdHM6IHZhbHVlLCBoZWFsdGg6IHt2YWx1ZSwgY2xpY2thYmxlfSwgc3Vic2NyaWJlcnM6IHt2YWx1ZSwgY2xpY2thYmxlPywgdGl0bGU/fSB9Pn0gbWV0cmljcyAtIE1ldHJpY3MuXG4gKiBAYXR0ciB7UmF0aW5nU3VtbWFyeX0gcmF0aW5nIC0gUmF0aW5ncyBvZiBhbiBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBHdk1ldHJpY3MgZXh0ZW5kcyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldHJpY3M6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBfbWV0cmljczogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnN1cGVyLnN0eWxlcyxcbiAgICAgIGxpbmssXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgbWFyZ2luOiAwLjJyZW07XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDI1cHg7XG4gICAgICAgICAgbWluLXdpZHRoOiAyNXB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdCA+ICoge1xuICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NrZWxldG9uQXR0cmlidXRlID0gJ21ldHJpY3MnO1xuICAgIHRoaXMuc2tlbGV0b24gPSBmYWxzZTtcbiAgICB0aGlzLl9lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuX2VtcHR5ID0gZmFsc2U7XG4gIH1cblxuICBfaXNDbGlja2FibGUobWV0cmljTmFtZSkge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzICYmIHR5cGVvZiB0aGlzLl9tZXRyaWNzW21ldHJpY05hbWVdID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX21ldHJpY3NbbWV0cmljTmFtZV0uY2xpY2thYmxlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfZ2V0VmFsdWUobWV0cmljKSB7XG4gICAgaWYgKHR5cGVvZiBtZXRyaWMgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gbWV0cmljLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbWV0cmljO1xuICB9XG5cbiAgX2dldFN1YnNjcmliZXJzKCkge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VmFsdWUodGhpcy5fbWV0cmljcy5zdWJzY3JpYmVycyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX2dldEhpdHMoKSB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRWYWx1ZSh0aGlzLl9tZXRyaWNzLmhpdHMpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9nZXRIZWFsdGgoKSB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNvbnN0IGhlYWx0aCA9IHRoaXMuX2dldFZhbHVlKHRoaXMuX21ldHJpY3MuaGVhbHRoKTtcbiAgICAgIHJldHVybiAhaXNOYU4oaGVhbHRoKVxuICAgICAgICA/IEludGwuTnVtYmVyRm9ybWF0LmNhbGwodGhpcywgbmF2aWdhdG9yLmxhbmd1YWdlLCB7XG4gICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyLFxuICAgICAgICAgIH0pLmZvcm1hdChoZWFsdGgpXG4gICAgICAgIDogJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX2dldFRpdGxlKG1ldHJpY05hbWUpIHtcbiAgICBpZiAodGhpcy5fbWV0cmljcyAmJiB0eXBlb2YgdGhpcy5fbWV0cmljc1ttZXRyaWNOYW1lXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tZXRyaWNzW21ldHJpY05hbWVdLnRpdGxlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9vbkNsaWNrKGtleSkge1xuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NsaWNrJywgeyBrZXkgfSk7XG4gIH1cblxuICBfcmVuZGVyTWV0cmljKGtleSwgaWNvbiwgbmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCBjbGlja2FibGUgPSB0aGlzLl9pc0NsaWNrYWJsZShrZXkpO1xuICAgIHJldHVybiB2YWx1ZSB8fCB0aGlzLl9za2VsZXRvblxuICAgICAgPyBodG1sYDxndi1tZXRyaWNcbiAgICAgICAgICBAY2xpY2s9XCIke2NsaWNrYWJsZSA/IHRoaXMuX29uQ2xpY2suYmluZCh0aGlzLCBrZXkpIDogbnVsbH1cIlxuICAgICAgICAgIC5za2VsZXRvbj1cIiR7dGhpcy5fc2tlbGV0b259XCJcbiAgICAgICAgICBpY29uPVwiJHtpY29ufVwiXG4gICAgICAgICAgbmFtZT1cIiR7bmFtZX1cIlxuICAgICAgICAgIHZhbHVlPVwiJHt2YWx1ZX1cIlxuICAgICAgICAgIGNsYXNzPVwiJHtjbGFzc01hcCh7IGxpbms6IGNsaWNrYWJsZSB9KX1cIlxuICAgICAgICAgIHRpdGxlPVwiJHtpZkRlZmluZWQodGhpcy5fZ2V0VGl0bGUoa2V5KSl9XCJcbiAgICAgICAgPjwvZ3YtbWV0cmljPmBcbiAgICAgIDogaHRtbGBgO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLl9lcnJvcikge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImVycm9yXCI+JHtpMThuKCdndi1tZXRyaWNzLmVycm9yJyl9PC9kaXY+YDtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzY3JpYmVycyA9IHRoaXMuX2dldFN1YnNjcmliZXJzKCk7XG4gICAgY29uc3QgaGl0cyA9IHRoaXMuX2dldEhpdHMoKTtcbiAgICBjb25zdCBoZWFsdGggPSB0aGlzLl9nZXRIZWFsdGgoKTtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgJHt0aGlzLl9yZW5kZXJNZXRyaWMoJ3N1YnNjcmliZXJzJywgJ2NvbW11bmljYXRpb246Z3JvdXAnLCBpMThuKCdndi1tZXRyaWNzLnN1YnNjcmliZXJzJywgeyBjb3VudDogc3Vic2NyaWJlcnMgfSksIHN1YnNjcmliZXJzKX1cbiAgICAgICR7dGhpcy5fcmVuZGVyTWV0cmljKCdoaXRzJywgJ2dlbmVyYWw6Y3Vyc29yJywgaTE4bignZ3YtbWV0cmljcy5oaXRzJywgeyBjb3VudDogaGl0cyB9KSwgaGl0cyl9XG4gICAgICAke3RoaXMuX3JlbmRlck1ldHJpYygnaGVhbHRoJywgJ2dlbmVyYWw6aGVhcnQnLCBpMThuKCdndi1tZXRyaWNzLmhlYWx0aCcpLCBoZWFsdGgpfVxuICAgICAgPHNsb3Q+PC9zbG90PlxuICAgIGA7XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3YtbWV0cmljcycsIEd2TWV0cmljcyk7XG4iXX0=
@@ -16,6 +16,7 @@
16
16
  import { LitElement, html, css } from 'lit';
17
17
  import '../atoms/gv-icon';
18
18
  import { dispatchCustomEvent } from '../lib/events';
19
+
19
20
  /**
20
21
  * A modal that shows up on top of your page
21
22
  *
@@ -37,43 +38,28 @@ import { dispatchCustomEvent } from '../lib/events';
37
38
  * @cssprop {Length} [--gv-modal--p=1em] - Modal content padding
38
39
  * @cssprop {Length} [--gv-modal-close-icon--s=24px] - Modal close icon size
39
40
  */
40
-
41
41
  export class GvModal extends LitElement {
42
42
  static get properties() {
43
43
  return {
44
- _toChange: {
45
- type: Boolean
46
- },
47
-
44
+ _toChange: { type: Boolean },
48
45
  /**
49
46
  * If true the modal box is in opened status.
50
47
  */
51
- opened: {
52
- type: Boolean
53
- },
54
-
48
+ opened: { type: Boolean },
55
49
  /**
56
50
  * If true the modal box displays a close icon
57
51
  */
58
- showCloseIcon: {
59
- type: Boolean
60
- },
61
-
52
+ showCloseIcon: { type: Boolean },
62
53
  /**
63
54
  * The title of the modal dialog
64
55
  */
65
56
  // ⚠️ it cannot be simply named `title` otherwise the browser consider it
66
57
  // as a `title` property and use it to display a tooltip
67
- modalTitle: {
68
- type: String
69
- },
70
-
58
+ modalTitle: { type: String },
71
59
  /**
72
60
  * If true the modal box blocks the screen. That is, when you click in the background layer, the modal box do not close.
73
61
  */
74
- blocking: {
75
- type: Boolean
76
- }
62
+ blocking: { type: Boolean },
77
63
  };
78
64
  }
79
65
 
@@ -86,27 +72,110 @@ export class GvModal extends LitElement {
86
72
  }
87
73
 
88
74
  static get styles() {
89
- return [// language=css
90
- css`*{box-sizing:border-box}:host{display:block}section{position:fixed;left:0;top:0;height:100vh;width:100vw;display:none;transition:opacity var(--gv-modal--anim-duration,.3s) ease-in;-webkit-transition:opacity var(--gv-modal--anim-duration,.3s) ease-in;align-items:center;justify-content:center;z-index:var(--gv-modal--z,100);background-color:var(--gv-modal--bgc,rgba(30,30,30,.6))}.content{display:block;position:relative;z-index:var(--gv-modal-content--z,101);width:var(--gv-modal--w,280px);min-width:var(--gv-modal--miw,250px);max-width:var(--gv-modal--maw,100vw);height:var(--gv-modal--h,auto);min-height:var(--gv-modal--mih,auto);max-height:var(--gv-modal--mah,100vh);background-color:var(--gv-modal-content--bgc,var(--gv-theme-neutral-color-light,#efefef));box-shadow:var(--gv-modal--bxsh,0 0 16px #383e3f);border-radius:var(--gv-modal--bdrs,4px);padding:var(--gv-modal--p,1em)}article{overflow:auto;max-height:100%;height:100%}.transparent{opacity:0}.opaque{opacity:1;display:flex!important}.opened{display:flex!important}.header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-bottom:10px}.title{font-weight:700;font-size:large}gv-icon{--gv-icon--s:var(--gv-modal-close-icon--s, 24px);display:inline-block;z-index:1002;cursor:pointer}`];
75
+ return [
76
+ // language=css
77
+ css`
78
+ * {
79
+ box-sizing: border-box;
80
+ }
81
+ :host {
82
+ display: block;
83
+ }
84
+ section {
85
+ position: fixed;
86
+ left: 0;
87
+ top: 0;
88
+ height: 100vh;
89
+ width: 100vw;
90
+ display: none;
91
+ transition: opacity var(--gv-modal--anim-duration, 0.3s) ease-in;
92
+ -webkit-transition: opacity var(--gv-modal--anim-duration, 0.3s) ease-in;
93
+ align-items: center;
94
+ justify-content: center;
95
+ z-index: var(--gv-modal--z, 100);
96
+ background-color: var(--gv-modal--bgc, rgba(30, 30, 30, 0.6));
97
+ }
98
+ .content {
99
+ display: block;
100
+ position: relative;
101
+ z-index: var(--gv-modal-content--z, 101);
102
+ width: var(--gv-modal--w, 280px);
103
+ min-width: var(--gv-modal--miw, 250px);
104
+ max-width: var(--gv-modal--maw, 100vw);
105
+ height: var(--gv-modal--h, auto);
106
+ min-height: var(--gv-modal--mih, auto);
107
+ max-height: var(--gv-modal--mah, 100vh);
108
+ background-color: var(--gv-modal-content--bgc, var(--gv-theme-neutral-color-light, #efefef));
109
+ box-shadow: var(--gv-modal--bxsh, 0px 0px 16px #383e3f);
110
+ border-radius: var(--gv-modal--bdrs, 4px);
111
+ padding: var(--gv-modal--p, 1em);
112
+ }
113
+ article {
114
+ overflow: auto;
115
+ max-height: 100%;
116
+ height: 100%;
117
+ }
118
+ .transparent {
119
+ opacity: 0;
120
+ }
121
+ .opaque {
122
+ opacity: 1;
123
+ display: flex !important;
124
+ }
125
+ .opened {
126
+ display: flex !important;
127
+ }
128
+ .header {
129
+ display: flex;
130
+ flex-direction: row;
131
+ justify-content: space-between;
132
+ align-items: center;
133
+ padding-bottom: 10px;
134
+ }
135
+ .title {
136
+ font-weight: bold;
137
+ font-size: large;
138
+ }
139
+ gv-icon {
140
+ --gv-icon--s: var(--gv-modal-close-icon--s, 24px);
141
+ display: inline-block;
142
+ z-index: 1002;
143
+ cursor: pointer;
144
+ }
145
+ `,
146
+ ];
91
147
  }
92
148
 
93
149
  render() {
94
- return html` <section class="${this.getModalClass(this.opened, this._toChange)}" @click="${this._backgroundModalClick}" @transitionend="${this.animationEnd}"> <div class="content" @click="${this.contentClick}"> <div class="header"> <span class="title">${this.modalTitle}</span> ${this.showCloseIcon ? html`<gv-icon shape="general:close" @click="${this.close}"></gv-icon>` : ''} </div> <article> <slot></slot> </article> </div> </section> `;
150
+ return html`
151
+ <section
152
+ class="${this.getModalClass(this.opened, this._toChange)}"
153
+ @click="${this._backgroundModalClick}"
154
+ @transitionend="${this.animationEnd}"
155
+ >
156
+ <div class="content" @click="${this.contentClick}">
157
+ <div class="header">
158
+ <span class="title">${this.modalTitle}</span>
159
+ ${this.showCloseIcon ? html`<gv-icon shape="general:close" @click="${this.close}"></gv-icon>` : ''}
160
+ </div>
161
+ <article>
162
+ <slot></slot>
163
+ </article>
164
+ </div>
165
+ </section>
166
+ `;
95
167
  }
96
168
 
97
169
  getModalClass(opened, _toChange) {
98
170
  if (!opened && !_toChange) {
99
171
  return 'transparent';
100
172
  }
101
-
102
173
  if (opened && _toChange) {
103
174
  return 'transparent opened';
104
175
  }
105
-
106
176
  if (opened && !_toChange) {
107
177
  return 'opaque';
108
178
  }
109
-
110
179
  if (!opened && _toChange) {
111
180
  return 'transparent opened';
112
181
  }
@@ -140,7 +209,5 @@ export class GvModal extends LitElement {
140
209
  contentClick(e) {
141
210
  e.stopPropagation();
142
211
  }
143
-
144
212
  }
145
213
  window.customElements.define('gv-modal', GvModal);
146
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1tb2RhbC5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJHdk1vZGFsIiwicHJvcGVydGllcyIsIl90b0NoYW5nZSIsInR5cGUiLCJCb29sZWFuIiwib3BlbmVkIiwic2hvd0Nsb3NlSWNvbiIsIm1vZGFsVGl0bGUiLCJTdHJpbmciLCJibG9ja2luZyIsImNvbnN0cnVjdG9yIiwic3R5bGVzIiwicmVuZGVyIiwiZ2V0TW9kYWxDbGFzcyIsIl9iYWNrZ3JvdW5kTW9kYWxDbGljayIsImFuaW1hdGlvbkVuZCIsImNvbnRlbnRDbGljayIsImNsb3NlIiwib3BlbiIsInNldFRpbWVvdXQiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFVBQVQsRUFBcUJDLElBQXJCLEVBQTJCQyxHQUEzQixRQUFzQyxLQUF0QztBQUNBLE9BQU8sa0JBQVA7QUFDQSxTQUFTQyxtQkFBVCxRQUFvQyxlQUFwQztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLE9BQU4sU0FBc0JKLFVBQXRCLENBQWlDO0FBQ2pCLGFBQVZLLFVBQVUsR0FBRztBQUN0QixXQUFPO0FBQ0xDLE1BQUFBLFNBQVMsRUFBRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUVDO0FBQVIsT0FETjs7QUFFTDtBQUNOO0FBQ0E7QUFDTUMsTUFBQUEsTUFBTSxFQUFFO0FBQUVGLFFBQUFBLElBQUksRUFBRUM7QUFBUixPQUxIOztBQU1MO0FBQ047QUFDQTtBQUNNRSxNQUFBQSxhQUFhLEVBQUU7QUFBRUgsUUFBQUEsSUFBSSxFQUFFQztBQUFSLE9BVFY7O0FBVUw7QUFDTjtBQUNBO0FBQ007QUFDQTtBQUNBRyxNQUFBQSxVQUFVLEVBQUU7QUFBRUosUUFBQUEsSUFBSSxFQUFFSztBQUFSLE9BZlA7O0FBZ0JMO0FBQ047QUFDQTtBQUNNQyxNQUFBQSxRQUFRLEVBQUU7QUFBRU4sUUFBQUEsSUFBSSxFQUFFQztBQUFSO0FBbkJMLEtBQVA7QUFxQkQ7O0FBRURNLEVBQUFBLFdBQVcsR0FBRztBQUNaO0FBQ0EsU0FBS1IsU0FBTCxHQUFpQixLQUFqQjtBQUNBLFNBQUtHLE1BQUwsR0FBYyxLQUFkO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixLQUFyQjtBQUNBLFNBQUtHLFFBQUwsR0FBZ0IsS0FBaEI7QUFDRDs7QUFFZ0IsYUFBTkUsTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTDtBQUNBYixJQUFBQSxHQUFHLGt3Q0FGRSxDQUFQO0FBd0VEOztBQUVEYyxFQUFBQSxNQUFNLEdBQUc7QUFDUCxXQUFPZixJQUFJLG9CQUVFLEtBQUtnQixhQUFMLENBQW1CLEtBQUtSLE1BQXhCLEVBQWdDLEtBQUtILFNBQXJDLENBRkYsYUFHRyxLQUFLWSxxQkFIUixxQkFJVyxLQUFLQyxZQUpoQixtQ0FNd0IsS0FBS0MsWUFON0IsK0NBUW1CLEtBQUtULFVBUnhCLFdBU0QsS0FBS0QsYUFBTCxHQUFxQlQsSUFBSSwwQ0FBMEMsS0FBS29CLEtBQS9DLGNBQXpCLEdBQThGLEVBVDdGLCtEQUFYO0FBaUJEOztBQUVESixFQUFBQSxhQUFhLENBQUNSLE1BQUQsRUFBU0gsU0FBVCxFQUFvQjtBQUMvQixRQUFJLENBQUNHLE1BQUQsSUFBVyxDQUFDSCxTQUFoQixFQUEyQjtBQUN6QixhQUFPLGFBQVA7QUFDRDs7QUFDRCxRQUFJRyxNQUFNLElBQUlILFNBQWQsRUFBeUI7QUFDdkIsYUFBTyxvQkFBUDtBQUNEOztBQUNELFFBQUlHLE1BQU0sSUFBSSxDQUFDSCxTQUFmLEVBQTBCO0FBQ3hCLGFBQU8sUUFBUDtBQUNEOztBQUNELFFBQUksQ0FBQ0csTUFBRCxJQUFXSCxTQUFmLEVBQTBCO0FBQ3hCLGFBQU8sb0JBQVA7QUFDRDtBQUNGOztBQUVEZ0IsRUFBQUEsSUFBSSxHQUFHO0FBQ0wsU0FBS2IsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLSCxTQUFMLEdBQWlCLElBQWpCO0FBQ0FpQixJQUFBQSxVQUFVLENBQUMsTUFBTTtBQUNmLFdBQUtqQixTQUFMLEdBQWlCLEtBQWpCO0FBQ0QsS0FGUyxFQUVQLEVBRk8sQ0FBVjtBQUdEOztBQUVEWSxFQUFBQSxxQkFBcUIsQ0FBQ00sQ0FBRCxFQUFJO0FBQ3ZCLFFBQUksQ0FBQyxLQUFLWCxRQUFWLEVBQW9CO0FBQ2xCLFdBQUtRLEtBQUw7QUFDQWxCLE1BQUFBLG1CQUFtQixDQUFDLElBQUQsRUFBTyxRQUFQLENBQW5CO0FBQ0Q7QUFDRjs7QUFFRGtCLEVBQUFBLEtBQUssR0FBRztBQUNOLFNBQUtaLE1BQUwsR0FBYyxLQUFkO0FBQ0EsU0FBS0gsU0FBTCxHQUFpQixJQUFqQjtBQUNBSCxJQUFBQSxtQkFBbUIsQ0FBQyxJQUFELEVBQU8sUUFBUCxDQUFuQjtBQUNEOztBQUVEZ0IsRUFBQUEsWUFBWSxHQUFHO0FBQ2IsU0FBS2IsU0FBTCxHQUFpQixLQUFqQjtBQUNEOztBQUVEYyxFQUFBQSxZQUFZLENBQUNJLENBQUQsRUFBSTtBQUNkQSxJQUFBQSxDQUFDLENBQUNDLGVBQUY7QUFDRDs7QUExS3FDO0FBNEt4Q0MsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixVQUE3QixFQUF5Q3hCLE9BQXpDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAyMSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IExpdEVsZW1lbnQsIGh0bWwsIGNzcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWljb24nO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuXG4vKipcbiAqIEEgbW9kYWwgdGhhdCBzaG93cyB1cCBvbiB0b3Agb2YgeW91ciBwYWdlXG4gKlxuICogQGZpcmVzIGd2LW1vZGFsOmNsb3NlZCAtIEV2ZW50IGZpcmVkIHdoZW4gbW9kYWwgaXMgY2xvc2VkLlxuICpcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LW1vZGFsLS1hbmltLWR1cmF0aW9uPTAuM3NdIC0gRHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvblxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtbW9kYWwtLXo9MTAwXSAtIHotaW5kZXggZm9yIG1vZGFsXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LW1vZGFsLS1iZ2M9cmdiYSgzMCwgMzAsIDMwLCAwLjYpXSAtIE1vZGFsIGJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LW1vZGFsLWNvbnRlbnQtLXo9MTAxXSAtIHotaW5kZXggZm9yIG1vZGFsIGNvbnRlbnRcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LW1vZGFsLS13PTI4MHB4XSAtIG1vZGVsIHdpZHRoXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi1tb2RhbC0tbWl3PTI1MHB4XSAtIG1vZGFsIG1pbi13aWR0aFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtbW9kYWwtLW1hdz0xMDB2d10gLSBtb2RhbCBtYXgtd2lkdGhcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LW1vZGFsLS1oPWF1dG9dIC0gbW9kYWwgaGVpZ2h0XG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi1tb2RhbC0tbWloPWF1dG9dIC0gbW9kYWwgbWluIGhlaWdodFxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtbW9kYWwtLW1haD0xMDB2aF0gLSBtb2RhbCBtYXggaGVpZ2h0XG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LW1vZGFsLWNvbnRlbnQtLWJnYz12YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0LCAjZWZlZmVmKV0gLSBNb2RhbCBjb250ZW50IGJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtTdHJpbmd9IFstLWd2LW1vZGFsLS1ieHNoPTBweCAwcHggMTZweCAjMzgzZTNmXSAtIE1vZGFsIGJveCBzaGFkb3dcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LW1vZGFsLS1iZHJzPTRweF0gLSBNb2RhbCBib3JkZXIgcmFkaXVzXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi1tb2RhbC0tcD0xZW1dIC0gTW9kYWwgY29udGVudCBwYWRkaW5nXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi1tb2RhbC1jbG9zZS1pY29uLS1zPTI0cHhdIC0gTW9kYWwgY2xvc2UgaWNvbiBzaXplXG4gKi9cbmV4cG9ydCBjbGFzcyBHdk1vZGFsIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX3RvQ2hhbmdlOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIC8qKlxuICAgICAgICogSWYgdHJ1ZSB0aGUgbW9kYWwgYm94IGlzIGluIG9wZW5lZCBzdGF0dXMuXG4gICAgICAgKi9cbiAgICAgIG9wZW5lZDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICAvKipcbiAgICAgICAqIElmIHRydWUgdGhlIG1vZGFsIGJveCBkaXNwbGF5cyBhIGNsb3NlIGljb25cbiAgICAgICAqL1xuICAgICAgc2hvd0Nsb3NlSWNvbjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICAvKipcbiAgICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgbW9kYWwgZGlhbG9nXG4gICAgICAgKi9cbiAgICAgIC8vIOKaoO+4jyBpdCBjYW5ub3QgYmUgc2ltcGx5IG5hbWVkIGB0aXRsZWAgb3RoZXJ3aXNlIHRoZSBicm93c2VyIGNvbnNpZGVyIGl0XG4gICAgICAvLyBhcyBhIGB0aXRsZWAgcHJvcGVydHkgYW5kIHVzZSBpdCB0byBkaXNwbGF5IGEgdG9vbHRpcFxuICAgICAgbW9kYWxUaXRsZTogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIC8qKlxuICAgICAgICogSWYgdHJ1ZSB0aGUgbW9kYWwgYm94IGJsb2NrcyB0aGUgc2NyZWVuLiBUaGF0IGlzLCB3aGVuIHlvdSBjbGljayBpbiB0aGUgYmFja2dyb3VuZCBsYXllciwgdGhlIG1vZGFsIGJveCBkbyBub3QgY2xvc2UuXG4gICAgICAgKi9cbiAgICAgIGJsb2NraW5nOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90b0NoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Q2xvc2VJY29uID0gZmFsc2U7XG4gICAgdGhpcy5ibG9ja2luZyA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIGxhbmd1YWdlPWNzc1xuICAgICAgY3NzYFxuICAgICAgICAqIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgICBzZWN0aW9uIHtcbiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICB3aWR0aDogMTAwdnc7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWd2LW1vZGFsLS1hbmltLWR1cmF0aW9uLCAwLjNzKSBlYXNlLWluO1xuICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1ndi1tb2RhbC0tYW5pbS1kdXJhdGlvbiwgMC4zcykgZWFzZS1pbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIHotaW5kZXg6IHZhcigtLWd2LW1vZGFsLS16LCAxMDApO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LW1vZGFsLS1iZ2MsIHJnYmEoMzAsIDMwLCAzMCwgMC42KSk7XG4gICAgICAgIH1cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICB6LWluZGV4OiB2YXIoLS1ndi1tb2RhbC1jb250ZW50LS16LCAxMDEpO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS1ndi1tb2RhbC0tdywgMjgwcHgpO1xuICAgICAgICAgIG1pbi13aWR0aDogdmFyKC0tZ3YtbW9kYWwtLW1pdywgMjUwcHgpO1xuICAgICAgICAgIG1heC13aWR0aDogdmFyKC0tZ3YtbW9kYWwtLW1hdywgMTAwdncpO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0tZ3YtbW9kYWwtLWgsIGF1dG8pO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWd2LW1vZGFsLS1taWgsIGF1dG8pO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLWd2LW1vZGFsLS1tYWgsIDEwMHZoKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi1tb2RhbC1jb250ZW50LS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHQsICNlZmVmZWYpKTtcbiAgICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1ndi1tb2RhbC0tYnhzaCwgMHB4IDBweCAxNnB4ICMzODNlM2YpO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWd2LW1vZGFsLS1iZHJzLCA0cHgpO1xuICAgICAgICAgIHBhZGRpbmc6IHZhcigtLWd2LW1vZGFsLS1wLCAxZW0pO1xuICAgICAgICB9XG4gICAgICAgIGFydGljbGUge1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgIC50cmFuc3BhcmVudCB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgfVxuICAgICAgICAub3BhcXVlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAub3BlbmVkIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLmhlYWRlciB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgZm9udC1zaXplOiBsYXJnZTtcbiAgICAgICAgfVxuICAgICAgICBndi1pY29uIHtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IHZhcigtLWd2LW1vZGFsLWNsb3NlLWljb24tLXMsIDI0cHgpO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICB6LWluZGV4OiAxMDAyO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNlY3Rpb25cbiAgICAgICAgY2xhc3M9XCIke3RoaXMuZ2V0TW9kYWxDbGFzcyh0aGlzLm9wZW5lZCwgdGhpcy5fdG9DaGFuZ2UpfVwiXG4gICAgICAgIEBjbGljaz1cIiR7dGhpcy5fYmFja2dyb3VuZE1vZGFsQ2xpY2t9XCJcbiAgICAgICAgQHRyYW5zaXRpb25lbmQ9XCIke3RoaXMuYW5pbWF0aW9uRW5kfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCIgQGNsaWNrPVwiJHt0aGlzLmNvbnRlbnRDbGlja31cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+JHt0aGlzLm1vZGFsVGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgJHt0aGlzLnNob3dDbG9zZUljb24gPyBodG1sYDxndi1pY29uIHNoYXBlPVwiZ2VuZXJhbDpjbG9zZVwiIEBjbGljaz1cIiR7dGhpcy5jbG9zZX1cIj48L2d2LWljb24+YCA6ICcnfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgYDtcbiAgfVxuXG4gIGdldE1vZGFsQ2xhc3Mob3BlbmVkLCBfdG9DaGFuZ2UpIHtcbiAgICBpZiAoIW9wZW5lZCAmJiAhX3RvQ2hhbmdlKSB7XG4gICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcbiAgICB9XG4gICAgaWYgKG9wZW5lZCAmJiBfdG9DaGFuZ2UpIHtcbiAgICAgIHJldHVybiAndHJhbnNwYXJlbnQgb3BlbmVkJztcbiAgICB9XG4gICAgaWYgKG9wZW5lZCAmJiAhX3RvQ2hhbmdlKSB7XG4gICAgICByZXR1cm4gJ29wYXF1ZSc7XG4gICAgfVxuICAgIGlmICghb3BlbmVkICYmIF90b0NoYW5nZSkge1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCBvcGVuZWQnO1xuICAgIH1cbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RvQ2hhbmdlID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3RvQ2hhbmdlID0gZmFsc2U7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgX2JhY2tncm91bmRNb2RhbENsaWNrKGUpIHtcbiAgICBpZiAoIXRoaXMuYmxvY2tpbmcpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2Nsb3NlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5fdG9DaGFuZ2UgPSB0cnVlO1xuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2Nsb3NlZCcpO1xuICB9XG5cbiAgYW5pbWF0aW9uRW5kKCkge1xuICAgIHRoaXMuX3RvQ2hhbmdlID0gZmFsc2U7XG4gIH1cblxuICBjb250ZW50Q2xpY2soZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LW1vZGFsJywgR3ZNb2RhbCk7XG4iXX0=