@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
@@ -20,6 +20,7 @@ import { until } from 'lit/directives/until';
20
20
  import { isSameRoutes } from '../lib/utils';
21
21
  import { dispatchCustomEvent } from '../lib/events';
22
22
  import { classMap } from 'lit/directives/class-map';
23
+
23
24
  /**
24
25
  * A main nav
25
26
  *
@@ -30,52 +31,65 @@ import { classMap } from 'lit/directives/class-map';
30
31
  *
31
32
  * @attr {Array<{active: Boolean, icon: String, path: String, title: Promise<String>, target: String}>} routes - definition of routes
32
33
  */
33
-
34
34
  export class GvNav extends LitElement {
35
35
  static get properties() {
36
36
  return {
37
- routes: {
38
- type: Array
39
- },
40
- _routes: {
41
- type: Array
42
- },
43
- small: {
44
- type: Boolean
45
- },
46
- _compact: {
47
- type: Boolean,
48
- attribute: false
49
- },
50
- vertical: {
51
- type: Boolean,
52
- reflect: true
53
- }
37
+ routes: { type: Array },
38
+ _routes: { type: Array },
39
+ small: { type: Boolean },
40
+ _compact: { type: Boolean, attribute: false },
41
+ vertical: { type: Boolean, reflect: true },
54
42
  };
55
43
  }
56
44
 
57
45
  static get styles() {
58
- return [// language=CSS
59
- css`nav{position:relative;transition:all 150ms ease-in-out}gv-link{--gv-link--ta:end}.vertical{display:flex;flex-direction:column}.vertical gv-link{width:100%}.compact{--gv-link-a--ph:10px}#shadowLink{position:absolute;display:inline-flex;opacity:.5;top:0;left:0;transition:transform 250ms ease-in-out,width 250ms}`];
46
+ return [
47
+ // language=CSS
48
+ css`
49
+ nav {
50
+ position: relative;
51
+ transition: all 150ms ease-in-out;
52
+ }
53
+
54
+ gv-link {
55
+ --gv-link--ta: end;
56
+ }
57
+
58
+ .vertical {
59
+ display: flex;
60
+ flex-direction: column;
61
+ }
62
+
63
+ .vertical gv-link {
64
+ width: 100%;
65
+ }
66
+
67
+ .compact {
68
+ --gv-link-a--ph: 10px;
69
+ }
70
+
71
+ #shadowLink {
72
+ position: absolute;
73
+ display: inline-flex;
74
+ opacity: 0.5;
75
+ top: 0;
76
+ left: 0;
77
+ transition: transform 250ms ease-in-out, width 250ms;
78
+ }
79
+ `,
80
+ ];
60
81
  }
61
82
 
62
83
  _onClick(event) {
63
84
  event.stopPropagation();
64
- const {
65
- detail
66
- } = event;
67
- const {
68
- title,
69
- target
70
- } = detail;
71
-
85
+ const { detail } = event;
86
+ const { title, target } = detail;
72
87
  if (target === '_blank') {
73
88
  dispatchCustomEvent(this, 'click', detail);
74
89
  } else {
75
90
  if (!this._isLocked) {
76
91
  this._isLocked = true;
77
92
  let nextIndex = 0;
78
-
79
93
  this._routes.forEach((route, index) => {
80
94
  if (route.title === title) {
81
95
  route.active = true;
@@ -83,30 +97,30 @@ export class GvNav extends LitElement {
83
97
  } else {
84
98
  delete route.active;
85
99
  }
86
-
87
100
  return route;
88
101
  });
89
102
 
90
103
  const activeLink = this.shadowRoot.querySelector('gv-link[active]');
91
104
  const nextLink = this.shadowRoot.querySelectorAll('gv-link')[nextIndex];
92
-
93
105
  if (activeLink) {
94
106
  const shadowLink = activeLink.cloneNode(true);
95
- const {
96
- height,
97
- width
98
- } = activeLink.getBoundingClientRect();
107
+ const { height, width } = activeLink.getBoundingClientRect();
108
+
99
109
  shadowLink.id = 'shadowLink';
100
110
  shadowLink.style.top = `${activeLink.offsetTop}px`;
101
111
  shadowLink.style.left = `${activeLink.offsetLeft}px`;
102
112
  shadowLink.style.width = `${width}px`;
103
113
  shadowLink.style.height = `${height}px`;
114
+
104
115
  activeLink.removeAttribute('active');
105
116
  activeLink.style.height = `${height}px`;
117
+
106
118
  this.shadowRoot.querySelector('nav').prepend(shadowLink);
107
119
  const left = nextLink.offsetLeft - activeLink.offsetLeft;
108
120
  const top = nextLink.offsetTop - activeLink.offsetTop;
121
+
109
122
  shadowLink.style.transform = `translate(${left}px,${top}px)`;
123
+
110
124
  setTimeout(() => {
111
125
  nextLink.setAttribute('active', true);
112
126
  this.shadowRoot.querySelector('nav').removeChild(shadowLink);
@@ -125,14 +139,13 @@ export class GvNav extends LitElement {
125
139
  constructor() {
126
140
  super();
127
141
  /** @protected */
128
-
129
142
  this._routes = [];
130
143
  this.vertical = false;
131
144
  }
132
145
 
133
146
  set routes(routes) {
134
147
  if (routes) {
135
- Promise.resolve(routes).then(_routes => {
148
+ Promise.resolve(routes).then((_routes) => {
136
149
  if (!isSameRoutes(this._routes, _routes)) {
137
150
  this._routes = _routes;
138
151
  }
@@ -141,11 +154,23 @@ export class GvNav extends LitElement {
141
154
  }
142
155
 
143
156
  _getLink(route, index) {
144
- return Promise.resolve(route).then(_route => {
145
- return html` <gv-link @gv-link:click="${this._onClick}" .active="${_route.active}" .icon="${_route.icon}" .path="${_route.path}" .target="${_route.target}" ?small="${this.small}" .title="${_route.title}" .help="${until(_route.help, null)}" ?vertical="${this.vertical}"></gv-link>`;
146
- }).catch(() => {
147
- delete this._routes[index];
148
- });
157
+ return Promise.resolve(route)
158
+ .then((_route) => {
159
+ return html` <gv-link
160
+ @gv-link:click=${this._onClick}
161
+ .active="${_route.active}"
162
+ .icon="${_route.icon}"
163
+ .path="${_route.path}"
164
+ .target="${_route.target}"
165
+ ?small="${this.small}"
166
+ .title="${_route.title}"
167
+ .help="${until(_route.help, null)}"
168
+ ?vertical="${this.vertical}"
169
+ ></gv-link>`;
170
+ })
171
+ .catch(() => {
172
+ delete this._routes[index];
173
+ });
149
174
  }
150
175
 
151
176
  updated(_changedProperties) {
@@ -156,15 +181,16 @@ export class GvNav extends LitElement {
156
181
 
157
182
  render() {
158
183
  if (this._routes) {
159
- return html`<nav class="${classMap({
160
- compact: this._compact,
161
- vertical: this.vertical
162
- })}"> ${repeat(this._routes, route => route, (route, index) => until(this._getLink(route, index), html`<gv-link skeleton .vertical="${this.vertical}"></gv-link>`))} </nav>`;
184
+ return html`<nav class="${classMap({ compact: this._compact, vertical: this.vertical })}">
185
+ ${repeat(
186
+ this._routes,
187
+ (route) => route,
188
+ (route, index) => until(this._getLink(route, index), html`<gv-link skeleton .vertical="${this.vertical}"></gv-link>`),
189
+ )}
190
+ </nav>`;
163
191
  }
164
-
165
192
  return html``;
166
193
  }
167
-
168
194
  }
195
+
169
196
  window.customElements.define('gv-nav', GvNav);
170
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1uYXYuanMiXSwibmFtZXMiOlsiTGl0RWxlbWVudCIsImh0bWwiLCJjc3MiLCJyZXBlYXQiLCJ1bnRpbCIsImlzU2FtZVJvdXRlcyIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJjbGFzc01hcCIsIkd2TmF2IiwicHJvcGVydGllcyIsInJvdXRlcyIsInR5cGUiLCJBcnJheSIsIl9yb3V0ZXMiLCJzbWFsbCIsIkJvb2xlYW4iLCJfY29tcGFjdCIsImF0dHJpYnV0ZSIsInZlcnRpY2FsIiwicmVmbGVjdCIsInN0eWxlcyIsIl9vbkNsaWNrIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJkZXRhaWwiLCJ0aXRsZSIsInRhcmdldCIsIl9pc0xvY2tlZCIsIm5leHRJbmRleCIsImZvckVhY2giLCJyb3V0ZSIsImluZGV4IiwiYWN0aXZlIiwiYWN0aXZlTGluayIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yIiwibmV4dExpbmsiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2hhZG93TGluayIsImNsb25lTm9kZSIsImhlaWdodCIsIndpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaWQiLCJzdHlsZSIsInRvcCIsIm9mZnNldFRvcCIsImxlZnQiLCJvZmZzZXRMZWZ0IiwicmVtb3ZlQXR0cmlidXRlIiwicHJlcGVuZCIsInRyYW5zZm9ybSIsInNldFRpbWVvdXQiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVDaGlsZCIsImNvbnN0cnVjdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2dldExpbmsiLCJfcm91dGUiLCJpY29uIiwicGF0aCIsImhlbHAiLCJjYXRjaCIsInVwZGF0ZWQiLCJfY2hhbmdlZFByb3BlcnRpZXMiLCJoYXMiLCJsZW5ndGgiLCJyZW5kZXIiLCJjb21wYWN0Iiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFw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Q0FjRSxNQUFNO0FBQ1gsYUFBTyxLQUFLbkQsT0FBTCxDQUFha0IsS0FBYixDQUFQO0FBQ0QsS0FoQkksQ0FBUDtBQWlCRDs7QUFFRGtDLEVBQUFBLE9BQU8sQ0FBQ0Msa0JBQUQsRUFBcUI7QUFDMUIsUUFBSUEsa0JBQWtCLENBQUNDLEdBQW5CLENBQXVCLFNBQXZCLENBQUosRUFBdUM7QUFDckMsV0FBS25ELFFBQUwsR0FBZ0IsS0FBS0gsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWF1RCxNQUFiLEdBQXNCLENBQXREO0FBQ0Q7QUFDRjs7QUFFREMsRUFBQUEsTUFBTSxHQUFHO0FBQ1AsUUFBSSxLQUFLeEQsT0FBVCxFQUFrQjtBQUNoQixhQUFPWixJQUFJLGVBQWVNLFFBQVEsQ0FBQztBQUFFK0QsUUFBQUEsT0FBTyxFQUFFLEtBQUt0RCxRQUFoQjtBQUEwQkUsUUFBQUEsUUFBUSxFQUFFLEtBQUtBO0FBQXpDLE9BQUQsQ0FBdkIsTUFDUGYsTUFBTSxDQUNOLEtBQUtVLE9BREMsRUFFTGlCLEtBQUQsSUFBV0EsS0FGTCxFQUdOLENBQUNBLEtBQUQsRUFBUUMsS0FBUixLQUFrQjNCLEtBQUssQ0FBQyxLQUFLdUQsUUFBTCxDQUFjN0IsS0FBZCxFQUFxQkMsS0FBckIsQ0FBRCxFQUE4QjlCLElBQUksZ0NBQWdDLEtBQUtpQixRQUFyQyxjQUFsQyxDQUhqQixDQURDLFNBQVg7QUFPRDs7QUFDRCxXQUFPakIsSUFBSSxFQUFYO0FBQ0Q7O0FBL0ptQztBQWtLdENzRSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLFFBQTdCLEVBQXVDakUsS0FBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCwgY3NzIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWxpbmsnO1xuaW1wb3J0IHsgdW50aWwgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy91bnRpbCc7XG5pbXBvcnQgeyBpc1NhbWVSb3V0ZXMgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuaW1wb3J0IHsgY2xhc3NNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9jbGFzcy1tYXAnO1xuXG4vKipcbiAqIEEgbWFpbiBuYXZcbiAqXG4gKiAjIyBEZXRhaWxzXG4gKiAqIGhhcyBAdGhlbWUgZmFjZXRcbiAqXG4gKiBAZmlyZXMgZ3YtbmF2OmNsaWNrIC0gQ3VzdG9tIGV2ZW50IHdoZW4gbmF2IGl0ZW0gaXMgY2xpY2tlZFxuICpcbiAqIEBhdHRyIHtBcnJheTx7YWN0aXZlOiBCb29sZWFuLCBpY29uOiBTdHJpbmcsIHBhdGg6IFN0cmluZywgdGl0bGU6IFByb21pc2U8U3RyaW5nPiwgdGFyZ2V0OiBTdHJpbmd9Pn0gcm91dGVzIC0gZGVmaW5pdGlvbiBvZiByb3V0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIEd2TmF2IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBfcm91dGVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBzbWFsbDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBfY29tcGFjdDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICB2ZXJ0aWNhbDogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgbmF2IHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2UtaW4tb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtbGluayB7XG4gICAgICAgICAgLS1ndi1saW5rLS10YTogZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLnZlcnRpY2FsIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAudmVydGljYWwgZ3YtbGluayB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuY29tcGFjdCB7XG4gICAgICAgICAgLS1ndi1saW5rLWEtLXBoOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgI3NoYWRvd0xpbmsge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0LCB3aWR0aCAyNTBtcztcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgX29uQ2xpY2soZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQ7XG4gICAgY29uc3QgeyB0aXRsZSwgdGFyZ2V0IH0gPSBkZXRhaWw7XG4gICAgaWYgKHRhcmdldCA9PT0gJ19ibGFuaycpIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NsaWNrJywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLl9pc0xvY2tlZCkge1xuICAgICAgICB0aGlzLl9pc0xvY2tlZCA9IHRydWU7XG4gICAgICAgIGxldCBuZXh0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLl9yb3V0ZXMuZm9yRWFjaCgocm91dGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHJvdXRlLnRpdGxlID09PSB0aXRsZSkge1xuICAgICAgICAgICAgcm91dGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgcm91dGUuYWN0aXZlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUxpbmsgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtbGlua1thY3RpdmVdJyk7XG4gICAgICAgIGNvbnN0IG5leHRMaW5rID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWxpbmsnKVtuZXh0SW5kZXhdO1xuICAgICAgICBpZiAoYWN0aXZlTGluaykge1xuICAgICAgICAgIGNvbnN0IHNoYWRvd0xpbmsgPSBhY3RpdmVMaW5rLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IGFjdGl2ZUxpbmsuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICBzaGFkb3dMaW5rLmlkID0gJ3NoYWRvd0xpbmsnO1xuICAgICAgICAgIHNoYWRvd0xpbmsuc3R5bGUudG9wID0gYCR7YWN0aXZlTGluay5vZmZzZXRUb3B9cHhgO1xuICAgICAgICAgIHNoYWRvd0xpbmsuc3R5bGUubGVmdCA9IGAke2FjdGl2ZUxpbmsub2Zmc2V0TGVmdH1weGA7XG4gICAgICAgICAgc2hhZG93TGluay5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgICAgICBzaGFkb3dMaW5rLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG5cbiAgICAgICAgICBhY3RpdmVMaW5rLnJlbW92ZUF0dHJpYnV0ZSgnYWN0aXZlJyk7XG4gICAgICAgICAgYWN0aXZlTGluay5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuXG4gICAgICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ25hdicpLnByZXBlbmQoc2hhZG93TGluayk7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG5leHRMaW5rLm9mZnNldExlZnQgLSBhY3RpdmVMaW5rLm9mZnNldExlZnQ7XG4gICAgICAgICAgY29uc3QgdG9wID0gbmV4dExpbmsub2Zmc2V0VG9wIC0gYWN0aXZlTGluay5vZmZzZXRUb3A7XG5cbiAgICAgICAgICBzaGFkb3dMaW5rLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtsZWZ0fXB4LCR7dG9wfXB4KWA7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIG5leHRMaW5rLnNldEF0dHJpYnV0ZSgnYWN0aXZlJywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbmF2JykucmVtb3ZlQ2hpbGQoc2hhZG93TGluayk7XG4gICAgICAgICAgICB0aGlzLl9pc0xvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2xpY2snLCBkZXRhaWwpO1xuICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dExpbmsuc2V0QXR0cmlidXRlKCdhY3RpdmUnLCB0cnVlKTtcbiAgICAgICAgICB0aGlzLl9pc0xvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NsaWNrJywgZGV0YWlsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICB0aGlzLl9yb3V0ZXMgPSBbXTtcbiAgICB0aGlzLnZlcnRpY2FsID0gZmFsc2U7XG4gIH1cblxuICBzZXQgcm91dGVzKHJvdXRlcykge1xuICAgIGlmIChyb3V0ZXMpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZShyb3V0ZXMpLnRoZW4oKF9yb3V0ZXMpID0+IHtcbiAgICAgICAgaWYgKCFpc1NhbWVSb3V0ZXModGhpcy5fcm91dGVzLCBfcm91dGVzKSkge1xuICAgICAgICAgIHRoaXMuX3JvdXRlcyA9IF9yb3V0ZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRMaW5rKHJvdXRlLCBpbmRleCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocm91dGUpXG4gICAgICAudGhlbigoX3JvdXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBodG1sYCA8Z3YtbGlua1xuICAgICAgICAgIEBndi1saW5rOmNsaWNrPSR7dGhpcy5fb25DbGlja31cbiAgICAgICAgICAuYWN0aXZlPVwiJHtfcm91dGUuYWN0aXZlfVwiXG4gICAgICAgICAgLmljb249XCIke19yb3V0ZS5pY29ufVwiXG4gICAgICAgICAgLnBhdGg9XCIke19yb3V0ZS5wYXRofVwiXG4gICAgICAgICAgLnRhcmdldD1cIiR7X3JvdXRlLnRhcmdldH1cIlxuICAgICAgICAgID9zbWFsbD1cIiR7dGhpcy5zbWFsbH1cIlxuICAgICAgICAgIC50aXRsZT1cIiR7X3JvdXRlLnRpdGxlfVwiXG4gICAgICAgICAgLmhlbHA9XCIke3VudGlsKF9yb3V0ZS5oZWxwLCBudWxsKX1cIlxuICAgICAgICAgID92ZXJ0aWNhbD1cIiR7dGhpcy52ZXJ0aWNhbH1cIlxuICAgICAgICA+PC9ndi1saW5rPmA7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3JvdXRlc1tpbmRleF07XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7XG4gICAgaWYgKF9jaGFuZ2VkUHJvcGVydGllcy5oYXMoJ19yb3V0ZXMnKSkge1xuICAgICAgdGhpcy5fY29tcGFjdCA9IHRoaXMuX3JvdXRlcyAmJiB0aGlzLl9yb3V0ZXMubGVuZ3RoID4gNTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX3JvdXRlcykge1xuICAgICAgcmV0dXJuIGh0bWxgPG5hdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBjb21wYWN0OiB0aGlzLl9jb21wYWN0LCB2ZXJ0aWNhbDogdGhpcy52ZXJ0aWNhbCB9KX1cIj5cbiAgICAgICAgJHtyZXBlYXQoXG4gICAgICAgICAgdGhpcy5fcm91dGVzLFxuICAgICAgICAgIChyb3V0ZSkgPT4gcm91dGUsXG4gICAgICAgICAgKHJvdXRlLCBpbmRleCkgPT4gdW50aWwodGhpcy5fZ2V0TGluayhyb3V0ZSwgaW5kZXgpLCBodG1sYDxndi1saW5rIHNrZWxldG9uIC52ZXJ0aWNhbD1cIiR7dGhpcy52ZXJ0aWNhbH1cIj48L2d2LWxpbms+YCksXG4gICAgICAgICl9XG4gICAgICA8L25hdj5gO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LW5hdicsIEd2TmF2KTtcbiJdfQ==
@@ -20,6 +20,7 @@ import { classMap } from 'lit/directives/class-map';
20
20
  import { dispatchCustomEvent } from '../lib/events';
21
21
  import { ifDefined } from 'lit/directives/if-defined';
22
22
  import { styleMap } from 'lit/directives/style-map';
23
+
23
24
  /**
24
25
  * Option component
25
26
  *
@@ -38,47 +39,94 @@ import { styleMap } from 'lit/directives/style-map';
38
39
  * @cssprop {Length} [--gv-option-button--maw=200px] - Button max width
39
40
  * @cssprop {Length} [--gv-option-icon--s=64px] - Icon size
40
41
  */
41
-
42
42
  export class GvOption extends LitElement {
43
43
  static get properties() {
44
44
  return {
45
- options: {
46
- type: Array
47
- },
48
- _options: {
49
- type: Array,
50
- attribute: false
51
- },
52
- _hasDescription: {
53
- type: Array,
54
- attribute: false
55
- },
56
- value: {
57
- type: String,
58
- reflect: true
59
- },
60
- multiple: {
61
- type: Boolean
62
- },
63
- reverse: {
64
- type: Boolean
65
- },
66
- small: {
67
- type: Boolean
68
- },
69
- outlined: {
70
- type: Boolean
71
- },
72
- disabled: {
73
- type: Boolean,
74
- reflect: true
75
- }
45
+ options: { type: Array },
46
+ _options: { type: Array, attribute: false },
47
+ _hasDescription: { type: Array, attribute: false },
48
+ value: { type: String, reflect: true },
49
+ multiple: { type: Boolean },
50
+ reverse: { type: Boolean },
51
+ small: { type: Boolean },
52
+ outlined: { type: Boolean },
53
+ disabled: { type: Boolean, reflect: true },
76
54
  };
77
55
  }
78
56
 
79
57
  static get styles() {
80
- return [// language=CSS
81
- css`:host{box-sizing:border-box;display:inline-block;--gv-button--p:5px;margin:.2rem;--bdrs:var(--gv-option--bdrs, 0.15rem);--maw:var(--gv-option-button--maw, 200px)}.box.description{display:grid;grid-gap:.5rem}gv-button{margin:0}gv-button.description{flex:1 1 var(--maw);max-width:var(--maw)}gv-button:not(.description){margin:0;--gv-button--bdrs:0;--gv-button--bgc:var(--gv-option--bgc, var(--gv-theme-neutral-color-dark, #bfbfbf))}gv-button:not(.description).entry{--gv-button--bdrs:var(--bdrs) 0 0 var(--bdrs)}gv-button:not(.description).exit{--gv-button--bdrs:0 var(--bdrs) var(--bdrs) 0}.content{white-space:pre-line;--gv-icon--s:var(--gv-option-icon--s, 64px);display:flex;flex-direction:column;align-items:center;height:100%;text-transform:none}gv-image{height:64px;width:64px;--gv-image--of:fill;display:inline-flex}.reverse .content{flex-direction:column-reverse}.title{font-size:var(--gv-theme-font-size-l,18px);font-weight:700;margin:.5rem 0}gv-button.description{margin:.5rem}`];
58
+ return [
59
+ // language=CSS
60
+ css`
61
+ :host {
62
+ box-sizing: border-box;
63
+ display: inline-block;
64
+ --gv-button--p: 5px;
65
+ margin: 0.2rem;
66
+ --bdrs: var(--gv-option--bdrs, 0.15rem);
67
+ --maw: var(--gv-option-button--maw, 200px);
68
+ }
69
+
70
+ .box.description {
71
+ display: grid;
72
+ grid-gap: 0.5rem;
73
+ }
74
+
75
+ gv-button {
76
+ margin: 0;
77
+ }
78
+
79
+ gv-button.description {
80
+ flex: 1 1 var(--maw);
81
+ max-width: var(--maw);
82
+ }
83
+
84
+ gv-button:not(.description) {
85
+ margin: 0;
86
+ --gv-button--bdrs: 0;
87
+ --gv-button--bgc: var(--gv-option--bgc, var(--gv-theme-neutral-color-dark, #bfbfbf));
88
+ }
89
+
90
+ gv-button:not(.description).entry {
91
+ --gv-button--bdrs: var(--bdrs) 0 0 var(--bdrs);
92
+ }
93
+
94
+ gv-button:not(.description).exit {
95
+ --gv-button--bdrs: 0 var(--bdrs) var(--bdrs) 0;
96
+ }
97
+
98
+ .content {
99
+ white-space: pre-line;
100
+ --gv-icon--s: var(--gv-option-icon--s, 64px);
101
+ display: flex;
102
+ flex-direction: column;
103
+ align-items: center;
104
+ height: 100%;
105
+ text-transform: none;
106
+ }
107
+
108
+ gv-image {
109
+ height: 64px;
110
+ width: 64px;
111
+ --gv-image--of: fill;
112
+ display: inline-flex;
113
+ }
114
+
115
+ .reverse .content {
116
+ flex-direction: column-reverse;
117
+ }
118
+
119
+ .title {
120
+ font-size: var(--gv-theme-font-size-l, 18px);
121
+ font-weight: bold;
122
+ margin: 0.5rem 0;
123
+ }
124
+
125
+ gv-button.description {
126
+ margin: 0.5rem;
127
+ }
128
+ `,
129
+ ];
82
130
  }
83
131
 
84
132
  constructor() {
@@ -90,14 +138,11 @@ export class GvOption extends LitElement {
90
138
  _onClick(option) {
91
139
  this.setValue(option);
92
140
  dispatchCustomEvent(this, 'select', option);
93
- this.dispatchEvent(new Event('input'), {
94
- bubbles: true,
95
- cancelable: true
96
- });
141
+ this.dispatchEvent(new Event('input'), { bubbles: true, cancelable: true });
97
142
  }
98
143
 
99
144
  async performUpdate() {
100
- this.shadowRoot.querySelectorAll('gv-button').forEach(btn => btn.performUpdate());
145
+ this.shadowRoot.querySelectorAll('gv-button').forEach((btn) => btn.performUpdate());
101
146
  return super.performUpdate();
102
147
  }
103
148
 
@@ -105,7 +150,7 @@ export class GvOption extends LitElement {
105
150
  if (option) {
106
151
  if (this.multiple) {
107
152
  if (this.value.includes(option.id)) {
108
- this.value = this.value.filter(optId => {
153
+ this.value = this.value.filter((optId) => {
109
154
  return optId !== option.id;
110
155
  });
111
156
  } else {
@@ -119,9 +164,9 @@ export class GvOption extends LitElement {
119
164
 
120
165
  set options(options) {
121
166
  if (options) {
122
- Promise.all(options).then(_options => {
167
+ Promise.all(options).then((_options) => {
123
168
  this._options = _options;
124
- this._hasDescription = this._options.find(opt => opt.description != null) != null;
169
+ this._hasDescription = this._options.find((opt) => opt.description != null) != null;
125
170
  });
126
171
  }
127
172
  }
@@ -134,19 +179,42 @@ export class GvOption extends LitElement {
134
179
  return this.value === option.id;
135
180
  }
136
181
  }
137
-
138
182
  return false;
139
183
  }
140
184
 
141
185
  _renderOption(option, index) {
142
186
  const isActive = this.isActive(option);
143
- const outlined = this.outlined || !isActive && this._hasDescription;
144
- return html`<gv-button .icon="${ifDefined(!this._hasDescription ? option.icon : null)}" .iconRight="${ifDefined(!option.icon && option.iconRight ? option.iconRight : null)}" .title="${ifDefined(option.title)}" .primary="${isActive}" .small="${this.small}" .disabled="${option.disabled || this.disabled}" @click="${this._onClick.bind(this, option)}" .outlined="${outlined}" class="${classMap({
145
- active: isActive,
146
- entry: index === 0,
147
- exit: index === this._options.length - 1,
148
- description: option.description != null
149
- })}"> ${!this._hasDescription ? option.title != null ? option.label || option.title : '' : html`<div class="content"> ${option.icon ? html`<gv-icon shape="${option.icon}"></gv-icon>` : option.image ? html`<gv-image src="${option.image}"></gv-image>` : ''} <div class="title">${option.title}</div> <div class="description-content" .innerHTML="${option.description}"></div> </div>`} </gv-button>`;
187
+ const outlined = this.outlined || (!isActive && this._hasDescription);
188
+ return html`<gv-button
189
+ .icon=${ifDefined(!this._hasDescription ? option.icon : null)}
190
+ .iconRight=${ifDefined(!option.icon && option.iconRight ? option.iconRight : null)}
191
+ .title="${ifDefined(option.title)}"
192
+ .primary="${isActive}"
193
+ .small="${this.small}"
194
+ .disabled="${option.disabled || this.disabled}"
195
+ @click="${this._onClick.bind(this, option)}"
196
+ .outlined="${outlined}"
197
+ class="${classMap({
198
+ active: isActive,
199
+ entry: index === 0,
200
+ exit: index === this._options.length - 1,
201
+ description: option.description != null,
202
+ })}"
203
+ >
204
+ ${!this._hasDescription
205
+ ? option.title != null
206
+ ? option.label || option.title
207
+ : ''
208
+ : html`<div class="content">
209
+ ${option.icon
210
+ ? html`<gv-icon shape="${option.icon}"></gv-icon>`
211
+ : option.image
212
+ ? html`<gv-image src="${option.image}"></gv-image>`
213
+ : ''}
214
+ <div class="title">${option.title}</div>
215
+ <div class="description-content" .innerHTML="${option.description}"></div>
216
+ </div>`}
217
+ </gv-button>`;
150
218
  }
151
219
 
152
220
  render() {
@@ -154,16 +222,21 @@ export class GvOption extends LitElement {
154
222
  const classes = {
155
223
  box: true,
156
224
  description: this._hasDescription,
157
- reverse: this.reverse
225
+ reverse: this.reverse,
158
226
  };
159
- return html`<div class="${classMap(classes)}" style="${styleMap({
160
- 'grid-template-columns': `repeat(${this._options.length}, auto)`
161
- })}"> ${repeat(this._options, option => option, (option, index) => html`${this._renderOption(option, index)}`)} </div>`;
227
+ return html`<div
228
+ class="${classMap(classes)}"
229
+ style="${styleMap({ 'grid-template-columns': `repeat(${this._options.length}, auto)` })}"
230
+ >
231
+ ${repeat(
232
+ this._options,
233
+ (option) => option,
234
+ (option, index) => html`${this._renderOption(option, index)}`,
235
+ )}
236
+ </div>`;
162
237
  }
163
-
164
238
  return html``;
165
239
  }
166
-
167
240
  }
241
+
168
242
  window.customElements.define('gv-option', GvOption);
169
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1vcHRpb24uanMiXSwibmFtZXMiOlsiY3NzIiwiTGl0RWxlbWVudCIsImh0bWwiLCJyZXBlYXQiLCJjbGFzc01hcCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJpZkRlZmluZWQiLCJzdHlsZU1hcCIsIkd2T3B0aW9uIiwicHJvcGVydGllcyIsIm9wdGlvbnMiLCJ0eXBlIiwiQXJyYXkiLCJfb3B0aW9ucyIsImF0dHJpYnV0ZSIsIl9oYXNEZXNjcmlwdGlvbiIsInZhbHVlIiwiU3RyaW5nIiwicmVmbGVjdCIsIm11bHRpcGxlIiwiQm9vbGVhbiIsInJldmVyc2UiLCJzbWFsbCIsIm91dGxpbmVkIiwiZGlzYWJsZWQiLCJzdHlsZXMiLCJjb25zdHJ1Y3RvciIsIl9vbkNsaWNrIiwib3B0aW9uIiwic2V0VmFsdWUiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsInBlcmZvcm1VcGRhdGUiLCJzaGFkb3dSb290IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJidG4iLCJpbmNsdWRlcyIsImlkIiwiZmlsdGVyIiwib3B0SWQiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsImZpbmQiLCJvcHQiLCJkZXNjcmlwdGlvbiIsImlzQWN0aXZlIiwiX3JlbmRlck9wdGlvbiIsImluZGV4IiwiaWNvbiIsImljb25SaWdodCIsInRpdGxlIiwiYmluZCIsImFjdGl2ZSIsImVudHJ5IiwiZXhpdCIsImxlbmd0aCIsImxhYmVsIiwiaW1hZ2UiLCJyZW5kZXIiLCJjbGFzc2VzIiwiYm94Iiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsVUFBZCxFQUEwQkMsSUFBMUIsUUFBc0MsS0FBdEM7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsU0FBU0MsTUFBVCxRQUF1Qix1QkFBdkI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLDBCQUF6QjtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQiwyQkFBMUI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLDBCQUF6QjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxPQUFPLE1BQU1DLFFBQU4sU0FBdUJQLFVBQXZCLENBQWtDO0FBQ2xCLGFBQVZRLFVBQVUsR0FBRztBQUN0QixXQUFPO0FBQ0xDLE1BQUFBLE9BQU8sRUFBRTtBQUFFQyxRQUFBQSxJQUFJLEVBQUVDO0FBQVIsT0FESjtBQUVMQyxNQUFBQSxRQUFRLEVBQUU7QUFBRUYsUUFBQUEsSUFBSSxFQUFFQyxLQUFSO0FBQWVFLFFBQUFBLFNBQVMsRUFBRTtBQUExQixPQUZMO0FBR0xDLE1BQUFBLGVBQWUsRUFBRTtBQUFFSixRQUFBQSxJQUFJLEVBQUVDLEtBQVI7QUFBZUUsUUFBQUEsU0FBUyxFQUFFO0FBQTFCLE9BSFo7QUFJTEUsTUFBQUEsS0FBSyxFQUFFO0FBQUVMLFFBQUFBLElBQUksRUFBRU0sTUFBUjtBQUFnQkMsUUFBQUEsT0FBTyxFQUFFO0FBQXpCLE9BSkY7QUFLTEMsTUFBQUEsUUFBUSxFQUFFO0FBQUVSLFFBQUFBLElBQUksRUFBRVM7QUFBUixPQUxMO0FBTUxDLE1BQUFBLE9BQU8sRUFBRTtBQUFFVixRQUFBQSxJQUFJLEVBQUVTO0FBQVIsT0FOSjtBQU9MRSxNQUFBQSxLQUFLLEVBQUU7QUFBRVgsUUFBQUEsSUFBSSxFQUFFUztBQUFSLE9BUEY7QUFRTEcsTUFBQUEsUUFBUSxFQUFFO0FBQUVaLFFBQUFBLElBQUksRUFBRVM7QUFBUixPQVJMO0FBU0xJLE1BQUFBLFFBQVEsRUFBRTtBQUFFYixRQUFBQSxJQUFJLEVBQUVTLE9BQVI7QUFBaUJGLFFBQUFBLE9BQU8sRUFBRTtBQUExQjtBQVRMLEtBQVA7QUFXRDs7QUFFZ0IsYUFBTk8sTUFBTSxHQUFHO0FBQ2xCLFdBQU8sQ0FDTDtBQUNBekIsSUFBQUEsR0FBRywyOUJBRkUsQ0FBUDtBQXdFRDs7QUFFRDBCLEVBQUFBLFdBQVcsR0FBRztBQUNaO0FBQ0EsU0FBS1AsUUFBTCxHQUFnQixLQUFoQjtBQUNBLFNBQUtFLE9BQUwsR0FBZSxLQUFmO0FBQ0Q7O0FBRURNLEVBQUFBLFFBQVEsQ0FBQ0MsTUFBRCxFQUFTO0FBQ2YsU0FBS0MsUUFBTCxDQUFjRCxNQUFkO0FBQ0F2QixJQUFBQSxtQkFBbUIsQ0FBQyxJQUFELEVBQU8sUUFBUCxFQUFpQnVCLE1BQWpCLENBQW5CO0FBQ0EsU0FBS0UsYUFBTCxDQUFtQixJQUFJQyxLQUFKLENBQVUsT0FBVixDQUFuQixFQUF1QztBQUFFQyxNQUFBQSxPQUFPLEVBQUUsSUFBWDtBQUFpQkMsTUFBQUEsVUFBVSxFQUFFO0FBQTdCLEtBQXZDO0FBQ0Q7O0FBRWtCLFFBQWJDLGFBQWEsR0FBRztBQUNwQixTQUFLQyxVQUFMLENBQWdCQyxnQkFBaEIsQ0FBaUMsV0FBakMsRUFBOENDLE9BQTlDLENBQXVEQyxHQUFELElBQVNBLEdBQUcsQ0FBQ0osYUFBSixFQUEvRDtBQUNBLFdBQU8sTUFBTUEsYUFBTixFQUFQO0FBQ0Q7O0FBRURMLEVBQUFBLFFBQVEsQ0FBQ0QsTUFBRCxFQUFTO0FBQ2YsUUFBSUEsTUFBSixFQUFZO0FBQ1YsVUFBSSxLQUFLVCxRQUFULEVBQW1CO0FBQ2pCLFlBQUksS0FBS0gsS0FBTCxDQUFXdUIsUUFBWCxDQUFvQlgsTUFBTSxDQUFDWSxFQUEzQixDQUFKLEVBQW9DO0FBQ2xDLGVBQUt4QixLQUFMLEdBQWEsS0FBS0EsS0FBTCxDQUFXeUIsTUFBWCxDQUFtQkMsS0FBRCxJQUFXO0FBQ3hDLG1CQUFPQSxLQUFLLEtBQUtkLE1BQU0sQ0FBQ1ksRUFBeEI7QUFDRCxXQUZZLENBQWI7QUFHRCxTQUpELE1BSU87QUFDTCxlQUFLeEIsS0FBTCxHQUFhLENBQUMsR0FBRyxLQUFLQSxLQUFULEVBQWdCWSxNQUFNLENBQUNZLEVBQXZCLENBQWI7QUFDRDtBQUNGLE9BUkQsTUFRTztBQUNMLGFBQUt4QixLQUFMLEdBQWFZLE1BQU0sQ0FBQ1ksRUFBcEI7QUFDRDtBQUNGO0FBQ0Y7O0FBRVUsTUFBUDlCLE9BQU8sQ0FBQ0EsT0FBRCxFQUFVO0FBQ25CLFFBQUlBLE9BQUosRUFBYTtBQUNYaUMsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlsQyxPQUFaLEVBQXFCbUMsSUFBckIsQ0FBMkJoQyxRQUFELElBQWM7QUFDdEMsYUFBS0EsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxhQUFLRSxlQUFMLEdBQXVCLEtBQUtGLFFBQUwsQ0FBY2lDLElBQWQsQ0FBb0JDLEdBQUQsSUFBU0EsR0FBRyxDQUFDQyxXQUFKLElBQW1CLElBQS9DLEtBQXdELElBQS9FO0FBQ0QsT0FIRDtBQUlEO0FBQ0Y7O0FBRURDLEVBQUFBLFFBQVEsQ0FBQ3JCLE1BQUQsRUFBUztBQUNmLFFBQUksS0FBS1osS0FBVCxFQUFnQjtBQUNkLFVBQUksS0FBS0csUUFBVCxFQUFtQjtBQUNqQixlQUFPLEtBQUtILEtBQUwsQ0FBV3VCLFFBQVgsQ0FBb0JYLE1BQU0sQ0FBQ1ksRUFBM0IsQ0FBUDtBQUNELE9BRkQsTUFFTztBQUNMLGVBQU8sS0FBS3hCLEtBQUwsS0FBZVksTUFBTSxDQUFDWSxFQUE3QjtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBRURVLEVBQUFBLGFBQWEsQ0FBQ3RCLE1BQUQsRUFBU3VCLEtBQVQsRUFBZ0I7QUFDM0IsVUFBTUYsUUFBUSxHQUFHLEtBQUtBLFFBQUwsQ0FBY3JCLE1BQWQsQ0FBakI7QUFDQSxVQUFNTCxRQUFRLEdBQUcsS0FBS0EsUUFBTCxJQUFrQixDQUFDMEIsUUFBRCxJQUFhLEtBQUtsQyxlQUFyRDtBQUNBLFdBQU9iLElBQUkscUJBQ0RJLFNBQVMsQ0FBQyxDQUFDLEtBQUtTLGVBQU4sR0FBd0JhLE1BQU0sQ0FBQ3dCLElBQS9CLEdBQXNDLElBQXZDLENBRFIsaUJBRUk5QyxTQUFTLENBQUMsQ0FBQ3NCLE1BQU0sQ0FBQ3dCLElBQVIsSUFBZ0J4QixNQUFNLENBQUN5QixTQUF2QixHQUFtQ3pCLE1BQU0sQ0FBQ3lCLFNBQTFDLEdBQXNELElBQXZELENBRmIsYUFHQy9DLFNBQVMsQ0FBQ3NCLE1BQU0sQ0FBQzBCLEtBQVIsQ0FIVixlQUlHTCxRQUpILGFBS0MsS0FBSzNCLEtBTE4sZ0JBTUlNLE1BQU0sQ0FBQ0osUUFBUCxJQUFtQixLQUFLQSxRQU41QixhQU9DLEtBQUtHLFFBQUwsQ0FBYzRCLElBQWQsQ0FBbUIsSUFBbkIsRUFBeUIzQixNQUF6QixDQVBELGdCQVFJTCxRQVJKLFlBU0FuQixRQUFRLENBQUM7QUFDaEJvRCxNQUFBQSxNQUFNLEVBQUVQLFFBRFE7QUFFaEJRLE1BQUFBLEtBQUssRUFBRU4sS0FBSyxLQUFLLENBRkQ7QUFHaEJPLE1BQUFBLElBQUksRUFBRVAsS0FBSyxLQUFLLEtBQUt0QyxRQUFMLENBQWM4QyxNQUFkLEdBQXVCLENBSHZCO0FBSWhCWCxNQUFBQSxXQUFXLEVBQUVwQixNQUFNLENBQUNvQixXQUFQLElBQXNCO0FBSm5CLEtBQUQsQ0FUUixNQWdCUCxDQUFDLEtBQUtqQyxlQUFOLEdBQ0VhLE1BQU0sQ0FBQzBCLEtBQVAsSUFBZ0IsSUFBaEIsR0FDRTFCLE1BQU0sQ0FBQ2dDLEtBQVAsSUFBZ0JoQyxNQUFNLENBQUMwQixLQUR6QixHQUVFLEVBSEosR0FJRXBELElBQUkseUJBQ0EwQixNQUFNLENBQUN3QixJQUFQLEdBQ0VsRCxJQUFJLG1CQUFtQjBCLE1BQU0sQ0FBQ3dCLElBQTFCLGNBRE4sR0FFRXhCLE1BQU0sQ0FBQ2lDLEtBQVAsR0FDQTNELElBQUksa0JBQWtCMEIsTUFBTSxDQUFDaUMsS0FBekIsZUFESixHQUVBLEVBTEYsdUJBTW1CakMsTUFBTSxDQUFDMEIsS0FOMUIsdURBTzZDMUIsTUFBTSxDQUFDb0IsV0FQcEQsaUJBcEJDLGVBQVg7QUE4QkQ7O0FBRURjLEVBQUFBLE1BQU0sR0FBRztBQUNQLFFBQUksS0FBS2pELFFBQVQsRUFBbUI7QUFDakIsWUFBTWtELE9BQU8sR0FBRztBQUNkQyxRQUFBQSxHQUFHLEVBQUUsSUFEUztBQUVkaEIsUUFBQUEsV0FBVyxFQUFFLEtBQUtqQyxlQUZKO0FBR2RNLFFBQUFBLE9BQU8sRUFBRSxLQUFLQTtBQUhBLE9BQWhCO0FBS0EsYUFBT25CLElBQUksZUFDQUUsUUFBUSxDQUFDMkQsT0FBRCxDQURSLFlBRUF4RCxRQUFRLENBQUM7QUFBRSxpQ0FBMEIsVUFBUyxLQUFLTSxRQUFMLENBQWM4QyxNQUFPO0FBQTFELE9BQUQsQ0FGUixNQUlQeEQsTUFBTSxDQUNOLEtBQUtVLFFBREMsRUFFTGUsTUFBRCxJQUFZQSxNQUZOLEVBR04sQ0FBQ0EsTUFBRCxFQUFTdUIsS0FBVCxLQUFtQmpELElBQUksR0FBRyxLQUFLZ0QsYUFBTCxDQUFtQnRCLE1BQW5CLEVBQTJCdUIsS0FBM0IsQ0FBSCxFQUhqQixDQUpDLFNBQVg7QUFVRDs7QUFDRCxXQUFPakQsSUFBSSxFQUFYO0FBQ0Q7O0FBck1zQztBQXdNekMrRCxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLFdBQTdCLEVBQTBDM0QsUUFBMUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtYnV0dG9uJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdCc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBpZkRlZmluZWQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9pZi1kZWZpbmVkJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwJztcblxuLyoqXG4gKiBPcHRpb24gY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGF0dHIge0FycmF5PHtpZCwgdGl0bGUsIGljb24/LCBhY3RpdmU/LCBkZXNjcmlwdGlvbj8sIGxhYmVsP30+fSBvcHRpb25zIC0gQW4gYXJyYXkgb2Ygb3B0aW9ucy5cbiAqIEBhdHRyIHtTdHJpbmd8QXJyYXl9IHZhbHVlIC0gU2VsZWN0ZWQgdmFsdWUgaWQsIGFycmF5IHdpdGggbXVsdGlwbGUgb3B0aW9uIGlkcy5cbiAqIEBhdHRyIHtCb29sZWFufSBtdWx0aXBsZSAtIElmIHRydWUsIGNhbiBjaG9vc2Ugc2V2ZXJhbCBvcHRpb25cbiAqIEBhdHRyIHtCb29sZWFufSByZXZlcnNlIC0gSWYgdHJ1ZSwgdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGFyZSByZXZlcnNlZC5cbiAqIEBhdHRyIHtCb29sZWFufSBzbWFsbCAtIElmIHRydWUsIHVzZSBzbWFsbCBidXR0b24gZm9yIG9wdGlvbnNcbiAqIEBhdHRyIHtCb29sZWFufSBvdXRsaW5lZCAtIElmIHRydWUsIHVzZSBvdXRsaW5lZCBidXR0b24gZm9yIG9wdGlvbnNcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LW9wdGlvbi0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZildIC0gQmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3Ytb3B0aW9uLS1iZHJzPTAuMTVyZW1dIC0gQm9yZGVyIHJhZGl1c1xuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3Ytb3B0aW9uLWJ1dHRvbi0tbWF3PTIwMHB4XSAtIEJ1dHRvbiBtYXggd2lkdGhcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LW9wdGlvbi1pY29uLS1zPTY0cHhdIC0gSWNvbiBzaXplXG4gKi9cbmV4cG9ydCBjbGFzcyBHdk9wdGlvbiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIF9vcHRpb25zOiB7IHR5cGU6IEFycmF5LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfaGFzRGVzY3JpcHRpb246IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHZhbHVlOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgbXVsdGlwbGU6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcmV2ZXJzZTogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBzbWFsbDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBvdXRsaW5lZDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIC0tZ3YtYnV0dG9uLS1wOiA1cHg7XG4gICAgICAgICAgbWFyZ2luOiAwLjJyZW07XG4gICAgICAgICAgLS1iZHJzOiB2YXIoLS1ndi1vcHRpb24tLWJkcnMsIDAuMTVyZW0pO1xuICAgICAgICAgIC0tbWF3OiB2YXIoLS1ndi1vcHRpb24tYnV0dG9uLS1tYXcsIDIwMHB4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ib3guZGVzY3JpcHRpb24ge1xuICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgICAgZ3JpZC1nYXA6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWJ1dHRvbiB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtYnV0dG9uLmRlc2NyaXB0aW9uIHtcbiAgICAgICAgICBmbGV4OiAxIDEgdmFyKC0tbWF3KTtcbiAgICAgICAgICBtYXgtd2lkdGg6IHZhcigtLW1hdyk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1idXR0b246bm90KC5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAtLWd2LWJ1dHRvbi0tYmRyczogMDtcbiAgICAgICAgICAtLWd2LWJ1dHRvbi0tYmdjOiB2YXIoLS1ndi1vcHRpb24tLWJnYywgdmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrLCAjYmZiZmJmKSk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1idXR0b246bm90KC5kZXNjcmlwdGlvbikuZW50cnkge1xuICAgICAgICAgIC0tZ3YtYnV0dG9uLS1iZHJzOiB2YXIoLS1iZHJzKSAwIDAgdmFyKC0tYmRycyk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1idXR0b246bm90KC5kZXNjcmlwdGlvbikuZXhpdCB7XG4gICAgICAgICAgLS1ndi1idXR0b24tLWJkcnM6IDAgdmFyKC0tYmRycykgdmFyKC0tYmRycykgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1ndi1vcHRpb24taWNvbi0tcywgNjRweCk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW1hZ2Uge1xuICAgICAgICAgIGhlaWdodDogNjRweDtcbiAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAtLWd2LWltYWdlLS1vZjogZmlsbDtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yZXZlcnNlIC5jb250ZW50IHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgIH1cblxuICAgICAgICAudGl0bGUge1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLWwsIDE4cHgpO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICBndi1idXR0b24uZGVzY3JpcHRpb24ge1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubXVsdGlwbGUgPSBmYWxzZTtcbiAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTtcbiAgfVxuXG4gIF9vbkNsaWNrKG9wdGlvbikge1xuICAgIHRoaXMuc2V0VmFsdWUob3B0aW9uKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QnLCBvcHRpb24pO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JyksIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm1VcGRhdGUoKSB7XG4gICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWJ1dHRvbicpLmZvckVhY2goKGJ0bikgPT4gYnRuLnBlcmZvcm1VcGRhdGUoKSk7XG4gICAgcmV0dXJuIHN1cGVyLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIHNldFZhbHVlKG9wdGlvbikge1xuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKG9wdElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3B0SWQgIT09IG9wdGlvbi5pZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIG9wdGlvbi5pZF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBvcHRpb24uaWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0IG9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBQcm9taXNlLmFsbChvcHRpb25zKS50aGVuKChfb3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX2hhc0Rlc2NyaXB0aW9uID0gdGhpcy5fb3B0aW9ucy5maW5kKChvcHQpID0+IG9wdC5kZXNjcmlwdGlvbiAhPSBudWxsKSAhPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNBY3RpdmUob3B0aW9uKSB7XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gb3B0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfcmVuZGVyT3B0aW9uKG9wdGlvbiwgaW5kZXgpIHtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuaXNBY3RpdmUob3B0aW9uKTtcbiAgICBjb25zdCBvdXRsaW5lZCA9IHRoaXMub3V0bGluZWQgfHwgKCFpc0FjdGl2ZSAmJiB0aGlzLl9oYXNEZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIGh0bWxgPGd2LWJ1dHRvblxuICAgICAgLmljb249JHtpZkRlZmluZWQoIXRoaXMuX2hhc0Rlc2NyaXB0aW9uID8gb3B0aW9uLmljb24gOiBudWxsKX1cbiAgICAgIC5pY29uUmlnaHQ9JHtpZkRlZmluZWQoIW9wdGlvbi5pY29uICYmIG9wdGlvbi5pY29uUmlnaHQgPyBvcHRpb24uaWNvblJpZ2h0IDogbnVsbCl9XG4gICAgICAudGl0bGU9XCIke2lmRGVmaW5lZChvcHRpb24udGl0bGUpfVwiXG4gICAgICAucHJpbWFyeT1cIiR7aXNBY3RpdmV9XCJcbiAgICAgIC5zbWFsbD1cIiR7dGhpcy5zbWFsbH1cIlxuICAgICAgLmRpc2FibGVkPVwiJHtvcHRpb24uZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZH1cIlxuICAgICAgQGNsaWNrPVwiJHt0aGlzLl9vbkNsaWNrLmJpbmQodGhpcywgb3B0aW9uKX1cIlxuICAgICAgLm91dGxpbmVkPVwiJHtvdXRsaW5lZH1cIlxuICAgICAgY2xhc3M9XCIke2NsYXNzTWFwKHtcbiAgICAgICAgYWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgICAgZW50cnk6IGluZGV4ID09PSAwLFxuICAgICAgICBleGl0OiBpbmRleCA9PT0gdGhpcy5fb3B0aW9ucy5sZW5ndGggLSAxLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9uLmRlc2NyaXB0aW9uICE9IG51bGwsXG4gICAgICB9KX1cIlxuICAgID5cbiAgICAgICR7IXRoaXMuX2hhc0Rlc2NyaXB0aW9uXG4gICAgICAgID8gb3B0aW9uLnRpdGxlICE9IG51bGxcbiAgICAgICAgICA/IG9wdGlvbi5sYWJlbCB8fCBvcHRpb24udGl0bGVcbiAgICAgICAgICA6ICcnXG4gICAgICAgIDogaHRtbGA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgJHtvcHRpb24uaWNvblxuICAgICAgICAgICAgICA/IGh0bWxgPGd2LWljb24gc2hhcGU9XCIke29wdGlvbi5pY29ufVwiPjwvZ3YtaWNvbj5gXG4gICAgICAgICAgICAgIDogb3B0aW9uLmltYWdlXG4gICAgICAgICAgICAgID8gaHRtbGA8Z3YtaW1hZ2Ugc3JjPVwiJHtvcHRpb24uaW1hZ2V9XCI+PC9ndi1pbWFnZT5gXG4gICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke29wdGlvbi50aXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvbi1jb250ZW50XCIgLmlubmVySFRNTD1cIiR7b3B0aW9uLmRlc2NyaXB0aW9ufVwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PmB9XG4gICAgPC9ndi1idXR0b24+YDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgYm94OiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5faGFzRGVzY3JpcHRpb24sXG4gICAgICAgIHJldmVyc2U6IHRoaXMucmV2ZXJzZSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2XG4gICAgICAgIGNsYXNzPVwiJHtjbGFzc01hcChjbGFzc2VzKX1cIlxuICAgICAgICBzdHlsZT1cIiR7c3R5bGVNYXAoeyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogYHJlcGVhdCgke3RoaXMuX29wdGlvbnMubGVuZ3RofSwgYXV0bylgIH0pfVwiXG4gICAgICA+XG4gICAgICAgICR7cmVwZWF0KFxuICAgICAgICAgIHRoaXMuX29wdGlvbnMsXG4gICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLFxuICAgICAgICAgIChvcHRpb24sIGluZGV4KSA9PiBodG1sYCR7dGhpcy5fcmVuZGVyT3B0aW9uKG9wdGlvbiwgaW5kZXgpfWAsXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LW9wdGlvbicsIEd2T3B0aW9uKTtcbiJdfQ==