@gravitee/ui-components 3.24.5-renovate-github-markdown-css-5-x-6cd8067 → 3.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/assets/css/github-markdown-css/github-markdown.css +545 -500
  2. package/assets/i18n/en.json +3 -0
  3. package/assets/i18n/fr.json +3 -0
  4. package/assets/icons/design.svg +1 -1
  5. package/package.json +2 -9
  6. package/src/atoms/gv-autocomplete.js +132 -156
  7. package/src/atoms/gv-button.js +73 -248
  8. package/src/atoms/gv-checkbox.js +45 -103
  9. package/src/atoms/gv-date-picker-calendar.js +312 -393
  10. package/src/atoms/gv-date-picker-cell.js +57 -81
  11. package/src/atoms/gv-date-picker.js +180 -319
  12. package/src/atoms/gv-file-upload.js +85 -195
  13. package/src/atoms/gv-icon.js +13 -34
  14. package/src/atoms/gv-image.js +31 -66
  15. package/src/atoms/gv-input-message.js +12 -37
  16. package/src/atoms/gv-input.js +117 -148
  17. package/src/atoms/gv-link.js +47 -125
  18. package/src/atoms/gv-message.js +18 -69
  19. package/src/atoms/gv-metric.js +19 -68
  20. package/src/atoms/gv-relative-time.js +67 -38
  21. package/src/atoms/gv-select-native.js +96 -215
  22. package/src/atoms/gv-select.js +110 -230
  23. package/src/atoms/gv-spinner.js +5 -26
  24. package/src/atoms/gv-state.js +25 -66
  25. package/src/atoms/gv-switch.js +40 -160
  26. package/src/atoms/gv-tag.js +26 -78
  27. package/src/atoms/gv-text.js +22 -83
  28. package/src/charts/gv-chart-bar.js +22 -18
  29. package/src/charts/gv-chart-gauge.js +28 -31
  30. package/src/charts/gv-chart-histogram.js +18 -10
  31. package/src/charts/gv-chart-line.js +70 -59
  32. package/src/charts/gv-chart-map.js +44 -42
  33. package/src/charts/gv-chart-pie.js +18 -14
  34. package/src/index.js +1 -0
  35. package/src/lib/cron-expression.js +40 -35
  36. package/src/lib/date.js +10 -1
  37. package/src/lib/events.js +3 -1
  38. package/src/lib/http-client-schema-form.js +13 -12
  39. package/src/lib/http.js +57 -56
  40. package/src/lib/i18n.js +30 -22
  41. package/src/lib/item.js +13 -12
  42. package/src/lib/properties.js +77 -42
  43. package/src/lib/schema-form.js +4 -5
  44. package/src/lib/studio.js +13 -60
  45. package/src/lib/style.js +8 -8
  46. package/src/lib/text-format.js +14 -7
  47. package/src/lib/theme.js +8 -5
  48. package/src/lib/utils.js +17 -18
  49. package/src/mixins/chart-element.js +31 -54
  50. package/src/mixins/input-element.js +60 -47
  51. package/src/mixins/item-resource.js +34 -32
  52. package/src/mixins/keyboard-element.js +6 -5
  53. package/src/mixins/update-after-browser.js +4 -1
  54. package/src/mixins/with-resize-observer.js +23 -13
  55. package/src/mixins/with-skeleton-attribute.js +54 -48
  56. package/src/molecules/gv-card-full.js +26 -147
  57. package/src/molecules/gv-card-list.js +13 -42
  58. package/src/molecules/gv-card.js +17 -91
  59. package/src/molecules/gv-category-list.js +6 -17
  60. package/src/molecules/gv-category.js +23 -103
  61. package/src/molecules/gv-code.js +81 -143
  62. package/src/molecules/gv-confirm.js +41 -71
  63. package/src/molecules/gv-cron-editor.js +143 -389
  64. package/src/molecules/gv-dropdown-menu.js +14 -46
  65. package/src/molecules/gv-expandable.js +31 -59
  66. package/src/molecules/gv-expression-language.js +176 -138
  67. package/src/molecules/gv-identity-picture.js +42 -65
  68. package/src/molecules/gv-list.js +42 -134
  69. package/src/molecules/gv-metrics.js +37 -49
  70. package/src/molecules/gv-modal.js +28 -95
  71. package/src/molecules/gv-nav.js +49 -75
  72. package/src/molecules/gv-option.js +57 -130
  73. package/src/molecules/gv-plans.js +86 -209
  74. package/src/molecules/gv-popover.js +57 -177
  75. package/src/molecules/gv-promote.js +28 -146
  76. package/src/molecules/gv-rating-list.js +69 -195
  77. package/src/molecules/gv-rating.js +52 -105
  78. package/src/molecules/gv-row-expandable.js +5 -11
  79. package/src/molecules/gv-row.js +21 -147
  80. package/src/molecules/gv-stats.js +23 -48
  81. package/src/molecules/gv-stepper.js +43 -187
  82. package/src/molecules/gv-table.js +199 -309
  83. package/src/molecules/gv-tree.js +33 -156
  84. package/src/organisms/gv-documentation.js +45 -128
  85. package/src/organisms/gv-header.js +37 -195
  86. package/src/organisms/gv-http-client.js +32 -168
  87. package/src/organisms/gv-menu.js +37 -158
  88. package/src/organisms/gv-newsletter-subscription.js +48 -189
  89. package/src/organisms/gv-pagination.js +49 -77
  90. package/src/organisms/gv-properties.js +271 -492
  91. package/src/organisms/gv-resizable-views.js +41 -259
  92. package/src/organisms/gv-resources.js +168 -275
  93. package/src/organisms/gv-schema-form-array.js +49 -159
  94. package/src/organisms/gv-schema-form-control-object.js +59 -73
  95. package/src/organisms/gv-schema-form-control.js +107 -134
  96. package/src/organisms/gv-schema-form.js +219 -280
  97. package/src/organisms/gv-tabs.js +66 -98
  98. package/src/organisms/gv-user-menu.js +36 -201
  99. package/src/organisms/gv-vertical-menu.js +20 -61
  100. package/src/policy-studio/gv-flow-step.js +106 -245
  101. package/src/policy-studio/gv-flow.js +125 -304
  102. package/src/policy-studio/gv-policy-studio-menu.js +157 -471
  103. package/src/policy-studio/gv-policy-studio.js +714 -760
  104. package/src/styles/empty.js +3 -20
  105. package/src/styles/input.js +3 -247
  106. package/src/styles/link.js +3 -16
  107. package/src/styles/shapes.js +1 -0
  108. package/src/styles/skeleton.js +3 -37
  109. package/src/styles/zoom.js +3 -24
  110. package/src/theme/gv-theme.js +21 -60
  111. package/CHANGELOG.md +0 -1260
  112. package/LICENSE.txt +0 -202
  113. package/README.md +0 -195
  114. package/src/.eslintrc.js +0 -19
  115. package/src/theme/definition.json +0 -1762
@@ -20,7 +20,6 @@ import { repeat } from 'lit/directives/repeat';
20
20
  import { classMap } from 'lit/directives/class-map';
21
21
  import { i18n } from '../lib/i18n';
22
22
  import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
23
-
24
23
  /**
25
24
  * Stats component
26
25
  *
@@ -30,45 +29,22 @@ import { withSkeletonAttribute } from '../mixins/with-skeleton-attribute';
30
29
  * @attr {Object} stats - The stats (count by key). Key can be: count, min, max, avg, sum, rps, rpm or rph.
31
30
  * @attr {Array<any>} options - The list of options to display.
32
31
  */
32
+
33
33
  export class GvStats extends withSkeletonAttribute(LitElement) {
34
34
  static get properties() {
35
35
  return {
36
- stats: { type: Object },
37
- options: { type: Array },
36
+ stats: {
37
+ type: Object
38
+ },
39
+ options: {
40
+ type: Array
41
+ }
38
42
  };
39
43
  }
40
44
 
41
45
  static get styles() {
42
- return [
43
- ...super.styles,
44
- // language=CSS
45
- css`
46
- .stats {
47
- align-content: center;
48
- justify-content: center;
49
- display: flex;
50
- flex-wrap: wrap;
51
- height: 100%;
52
- }
53
-
54
- .stats-container {
55
- border: 1px solid;
56
- border-radius: 8px;
57
- margin: 15px;
58
- padding: 15px;
59
- }
60
-
61
- .stats-value {
62
- font-size: 30px;
63
- text-align: center;
64
- }
65
-
66
- .stats-label {
67
- font-size: 15px;
68
- text-align: center;
69
- }
70
- `,
71
- ];
46
+ return [...super.styles, // language=CSS
47
+ css`.stats{align-content:center;justify-content:center;display:flex;flex-wrap:wrap;height:100%}.stats-container{border:1px solid;border-radius:8px;margin:15px;padding:15px}.stats-value{font-size:30px;text-align:center}.stats-label{font-size:15px;text-align:center}`];
72
48
  }
73
49
 
74
50
  constructor() {
@@ -80,12 +56,16 @@ export class GvStats extends withSkeletonAttribute(LitElement) {
80
56
  if (!this.stats) {
81
57
  return '<div></div>';
82
58
  }
59
+
83
60
  let value = Math.round(this.stats[option.key]);
61
+
84
62
  if (isNaN(value)) {
85
63
  value = 0;
86
64
  }
65
+
87
66
  if (value === 0 && option.fallback) {
88
- const fallback = option.fallback.find((fallback) => Math.round(this.stats[fallback.key]) > 0);
67
+ const fallback = option.fallback.find(fallback => Math.round(this.stats[fallback.key]) > 0);
68
+
89
69
  if (fallback) {
90
70
  option.key = fallback.key;
91
71
  option.label = fallback.label;
@@ -93,29 +73,24 @@ export class GvStats extends withSkeletonAttribute(LitElement) {
93
73
  }
94
74
  }
95
75
 
96
- return html`
97
- <div class="stats-container" style="color: ${option.color}">
98
- <div class="stats-value">${value}${option.unit}</div>
99
- <div class="stats-label">${option.label || option.key}</div>
100
- </div>
101
- `;
76
+ return html` <div class="stats-container" style="color:${option.color}"> <div class="stats-value">${value}${option.unit}</div> <div class="stats-label">${option.label || option.key}</div> </div> `;
102
77
  }
103
78
 
104
79
  render() {
105
80
  if (this._error) {
106
81
  return html`<div class="error">${i18n('gv-stats.error')}</div>`;
107
82
  }
83
+
108
84
  if (this._empty) {
109
85
  return html`<div class="empty">${i18n('gv-stats.empty')}</div>`;
110
86
  }
111
- return html`<div class="${classMap({ stats: true, skeleton: this._skeleton })}">
112
- ${repeat(
113
- this.options,
114
- (option) => option,
115
- (option) => this._getStat(option),
116
- )}
117
- </div> `;
87
+
88
+ return html`<div class="${classMap({
89
+ stats: true,
90
+ skeleton: this._skeleton
91
+ })}"> ${repeat(this.options, option => option, option => this._getStat(option))} </div> `;
118
92
  }
119
- }
120
93
 
94
+ }
121
95
  window.customElements.define('gv-stats', GvStats);
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1zdGF0cy5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsInJlcGVhdCIsImNsYXNzTWFwIiwiaTE4biIsIndpdGhTa2VsZXRvbkF0dHJpYnV0ZSIsIkd2U3RhdHMiLCJwcm9wZXJ0aWVzIiwic3RhdHMiLCJ0eXBlIiwiT2JqZWN0Iiwib3B0aW9ucyIsIkFycmF5Iiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJfc2tlbGV0b25BdHRyaWJ1dGUiLCJfZ2V0U3RhdCIsIm9wdGlvbiIsInZhbHVlIiwiTWF0aCIsInJvdW5kIiwia2V5IiwiaXNOYU4iLCJmYWxsYmFjayIsImZpbmQiLCJsYWJlbCIsImNvbG9yIiwidW5pdCIsInJlbmRlciIsIl9lcnJvciIsIl9lbXB0eSIsInNrZWxldG9uIiwiX3NrZWxldG9uIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxpQkFBUDtBQUNBLFNBQVNDLE1BQVQsUUFBdUIsdUJBQXZCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGFBQXJCO0FBQ0EsU0FBU0MscUJBQVQsUUFBc0MsbUNBQXRDO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE9BQU8sTUFBTUMsT0FBTixTQUFzQkQscUJBQXFCLENBQUNKLFVBQUQsQ0FBM0MsQ0FBd0Q7QUFDeEMsYUFBVk0sVUFBVSxHQUFHO0FBQ3RCLFdBQU87QUFDTEMsTUFBQUEsS0FBSyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUixPQURGO0FBRUxDLE1BQUFBLE9BQU8sRUFBRTtBQUFFRixRQUFBQSxJQUFJLEVBQUVHO0FBQVI7QUFGSixLQUFQO0FBSUQ7O0FBRWdCLGFBQU5DLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0wsR0FBRyxNQUFNQSxNQURKLEVBRUw7QUFDQWQsSUFBQUEsR0FBRyxzUUFIRSxDQUFQO0FBOEJEOztBQUVEZSxFQUFBQSxXQUFXLEdBQUc7QUFDWjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLE9BQTFCO0FBQ0Q7O0FBRURDLEVBQUFBLFFBQVEsQ0FBQ0MsTUFBRCxFQUFTO0FBQ2YsUUFBSSxDQUFDLEtBQUtULEtBQVYsRUFBaUI7QUFDZixhQUFPLGFBQVA7QUFDRDs7QUFDRCxRQUFJVSxLQUFLLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXLEtBQUtaLEtBQUwsQ0FBV1MsTUFBTSxDQUFDSSxHQUFsQixDQUFYLENBQVo7O0FBQ0EsUUFBSUMsS0FBSyxDQUFDSixLQUFELENBQVQsRUFBa0I7QUFDaEJBLE1BQUFBLEtBQUssR0FBRyxDQUFSO0FBQ0Q7O0FBQ0QsUUFBSUEsS0FBSyxLQUFLLENBQVYsSUFBZUQsTUFBTSxDQUFDTSxRQUExQixFQUFvQztBQUNsQyxZQUFNQSxRQUFRLEdBQUdOLE1BQU0sQ0FBQ00sUUFBUCxDQUFnQkMsSUFBaEIsQ0FBc0JELFFBQUQsSUFBY0osSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS1osS0FBTCxDQUFXZSxRQUFRLENBQUNGLEdBQXBCLENBQVgsSUFBdUMsQ0FBMUUsQ0FBakI7O0FBQ0EsVUFBSUUsUUFBSixFQUFjO0FBQ1pOLFFBQUFBLE1BQU0sQ0FBQ0ksR0FBUCxHQUFhRSxRQUFRLENBQUNGLEdBQXRCO0FBQ0FKLFFBQUFBLE1BQU0sQ0FBQ1EsS0FBUCxHQUFlRixRQUFRLENBQUNFLEtBQXhCO0FBQ0FQLFFBQUFBLEtBQUssR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS1osS0FBTCxDQUFXUyxNQUFNLENBQUNJLEdBQWxCLENBQVgsQ0FBUjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT3JCLElBQUksOENBQ29DaUIsTUFBTSxDQUFDUyxLQUQzQywrQkFFb0JSLEtBRnBCLEdBRTRCRCxNQUFNLENBQUNVLElBRm5DLG1DQUdvQlYsTUFBTSxDQUFDUSxLQUFQLElBQWdCUixNQUFNLENBQUNJLEdBSDNDLGdCQUFYO0FBTUQ7O0FBRURPLEVBQUFBLE1BQU0sR0FBRztBQUNQLFFBQUksS0FBS0MsTUFBVCxFQUFpQjtBQUNmLGFBQU83QixJQUFJLHNCQUFzQkksSUFBSSxDQUFDLGdCQUFELENBQTFCLFFBQVg7QUFDRDs7QUFDRCxRQUFJLEtBQUswQixNQUFULEVBQWlCO0FBQ2YsYUFBTzlCLElBQUksc0JBQXNCSSxJQUFJLENBQUMsZ0JBQUQsQ0FBMUIsUUFBWDtBQUNEOztBQUNELFdBQU9KLElBQUksZUFBZUcsUUFBUSxDQUFDO0FBQUVLLE1BQUFBLEtBQUssRUFBRSxJQUFUO0FBQWV1QixNQUFBQSxRQUFRLEVBQUUsS0FBS0M7QUFBOUIsS0FBRCxDQUF2QixNQUNQOUIsTUFBTSxDQUNOLEtBQUtTLE9BREMsRUFFTE0sTUFBRCxJQUFZQSxNQUZOLEVBR0xBLE1BQUQsSUFBWSxLQUFLRCxRQUFMLENBQWNDLE1BQWQsQ0FITixDQURDLFVBQVg7QUFPRDs7QUFyRjREO0FBd0YvRGdCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsVUFBN0IsRUFBeUM3QixPQUF6QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1idXR0b24nO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi10YWcnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0JztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICcuLi9saWIvaTE4bic7XG5pbXBvcnQgeyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUgfSBmcm9tICcuLi9taXhpbnMvd2l0aC1za2VsZXRvbi1hdHRyaWJ1dGUnO1xuXG4vKipcbiAqIFN0YXRzIGNvbXBvbmVudFxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBhdHRyIHtPYmplY3R9IHN0YXRzIC0gVGhlIHN0YXRzIChjb3VudCBieSBrZXkpLiBLZXkgY2FuIGJlOiBjb3VudCwgbWluLCBtYXgsIGF2Zywgc3VtLCBycHMsIHJwbSBvciBycGguXG4gKiBAYXR0ciB7QXJyYXk8YW55Pn0gb3B0aW9ucyAtIFRoZSBsaXN0IG9mIG9wdGlvbnMgdG8gZGlzcGxheS5cbiAqL1xuZXhwb3J0IGNsYXNzIEd2U3RhdHMgZXh0ZW5kcyB3aXRoU2tlbGV0b25BdHRyaWJ1dGUoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgb3B0aW9uczogeyB0eXBlOiBBcnJheSB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uc3VwZXIuc3R5bGVzLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIC5zdGF0cyB7XG4gICAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGF0cy1jb250YWluZXIge1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgICBtYXJnaW46IDE1cHg7XG4gICAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGF0cy12YWx1ZSB7XG4gICAgICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGF0cy1sYWJlbCB7XG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9za2VsZXRvbkF0dHJpYnV0ZSA9ICdzdGF0cyc7XG4gIH1cblxuICBfZ2V0U3RhdChvcHRpb24pIHtcbiAgICBpZiAoIXRoaXMuc3RhdHMpIHtcbiAgICAgIHJldHVybiAnPGRpdj48L2Rpdj4nO1xuICAgIH1cbiAgICBsZXQgdmFsdWUgPSBNYXRoLnJvdW5kKHRoaXMuc3RhdHNbb3B0aW9uLmtleV0pO1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAwICYmIG9wdGlvbi5mYWxsYmFjaykge1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSBvcHRpb24uZmFsbGJhY2suZmluZCgoZmFsbGJhY2spID0+IE1hdGgucm91bmQodGhpcy5zdGF0c1tmYWxsYmFjay5rZXldKSA+IDApO1xuICAgICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICAgIG9wdGlvbi5rZXkgPSBmYWxsYmFjay5rZXk7XG4gICAgICAgIG9wdGlvbi5sYWJlbCA9IGZhbGxiYWNrLmxhYmVsO1xuICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodGhpcy5zdGF0c1tvcHRpb24ua2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic3RhdHMtY29udGFpbmVyXCIgc3R5bGU9XCJjb2xvcjogJHtvcHRpb24uY29sb3J9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0cy12YWx1ZVwiPiR7dmFsdWV9JHtvcHRpb24udW5pdH08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRzLWxhYmVsXCI+JHtvcHRpb24ubGFiZWwgfHwgb3B0aW9uLmtleX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuX2Vycm9yKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj4ke2kxOG4oJ2d2LXN0YXRzLmVycm9yJyl9PC9kaXY+YDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2VtcHR5KSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiZW1wdHlcIj4ke2kxOG4oJ2d2LXN0YXRzLmVtcHR5Jyl9PC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBzdGF0czogdHJ1ZSwgc2tlbGV0b246IHRoaXMuX3NrZWxldG9uIH0pfVwiPlxuICAgICAgJHtyZXBlYXQoXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLFxuICAgICAgICAob3B0aW9uKSA9PiB0aGlzLl9nZXRTdGF0KG9wdGlvbiksXG4gICAgICApfVxuICAgIDwvZGl2PiBgO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXN0YXRzJywgR3ZTdGF0cyk7XG4iXX0=
@@ -19,7 +19,6 @@ import { classMap } from 'lit/directives/class-map';
19
19
  import { link } from '../styles/link';
20
20
  import { dispatchCustomEvent } from '../lib/events';
21
21
  import { i18n } from '../lib/i18n';
22
-
23
22
  /**
24
23
  * Stepper component
25
24
  *
@@ -40,161 +39,29 @@ import { i18n } from '../lib/i18n';
40
39
  * @cssprop {Color} [--gv-stepper-passed--c=#595959] - Passed color
41
40
  * @cssprop {Length} [--gv-stepper-icon--s=32px] - Height and icon width
42
41
  */
42
+
43
43
  export class GvStepper extends LitElement {
44
44
  static get properties() {
45
45
  return {
46
- current: { type: Number, reflect: true },
47
- steps: { type: Array },
48
- disabled: { type: Boolean },
49
- _error: { type: Boolean },
46
+ current: {
47
+ type: Number,
48
+ reflect: true
49
+ },
50
+ steps: {
51
+ type: Array
52
+ },
53
+ disabled: {
54
+ type: Boolean
55
+ },
56
+ _error: {
57
+ type: Boolean
58
+ }
50
59
  };
51
60
  }
52
61
 
53
62
  static get styles() {
54
- return [
55
- link,
56
- // language=CSS
57
- css`
58
- :host {
59
- box-sizing: border-box;
60
- --passed--bgc: var(--gv-stepper-valid--bgc, var(--gv-theme-color, #5a7684));
61
- --passed--bdc: var(--gv-stepper-passed--bdc, var(--gv-theme-color-light, #86c3d0));
62
- --bdc: var(--gv-stepper--bdc, var(--gv-theme-neutral-color-dark, #bfbfbf));
63
- --bgc: var(--gv-stepper--bgc, var(--gv-theme-neutral-color-dark, #bfbfbf));
64
- --passed--c: var(--gv-stepper-passed--c, #595959);
65
- --c: var(--gv-stepper--c, var(--gv-theme-neutral-color-dark, #bfbfbf));
66
- }
67
-
68
- .stepper {
69
- display: flex;
70
- justify-content: center;
71
- }
72
-
73
- .disabled .step {
74
- cursor: not-allowed;
75
- }
76
-
77
- .step {
78
- display: flex;
79
- flex-direction: column;
80
- cursor: pointer;
81
- }
82
-
83
- .graph {
84
- display: flex;
85
- flex-direction: row;
86
- min-height: 22px;
87
- min-width: 250px;
88
- }
89
-
90
- .round {
91
- min-width: 6px;
92
- width: 6px;
93
- min-height: 6px;
94
- height: 6px;
95
- border-radius: 50%;
96
- margin: 2px 7px 2px 7px;
97
- }
98
-
99
- .border {
100
- margin-top: 4px;
101
- min-width: 100px;
102
- width: 100%;
103
- height: 2px;
104
- clear: both;
105
- }
106
-
107
- .round {
108
- background-color: var(--bgc);
109
- transition: all 0.2s ease-in;
110
- }
111
-
112
- .border {
113
- background-color: var(--bdc);
114
- margin-bottom: 5px;
115
- transition: all 0.2s ease-in;
116
- }
117
-
118
- .passed .round {
119
- background-color: var(--passed--bgc);
120
- }
121
-
122
- .passed .border {
123
- background-color: var(--passed--bdc);
124
- }
125
-
126
- .passed .round {
127
- height: 10px;
128
- width: 10px;
129
- min-height: 10px;
130
- min-width: 10px;
131
- margin: 0 5px 0 5px;
132
- }
133
-
134
- .first .border:first-of-type {
135
- visibility: hidden;
136
- }
137
-
138
- .end .border:last-of-type {
139
- visibility: hidden;
140
- }
141
-
142
- .content {
143
- display: flex;
144
- flex-direction: column;
145
- align-items: center;
146
-
147
- padding: 5px;
148
- line-height: 24px;
149
- font-size: var(--gv-theme-font-size-l, 16px);
150
- color: var(--c);
151
- }
152
-
153
- .passed .content {
154
- color: var(--passed--c);
155
- }
156
-
157
- .title {
158
- font-weight: bold;
159
- }
160
-
161
- .description {
162
- font-size: var(--gv-theme-font-size-m, 14px);
163
- }
164
-
165
- .error {
166
- text-align: center;
167
- }
168
-
169
- .circle {
170
- border: 1px solid var(--passed--bgc);
171
- margin-top: -12px;
172
- border-radius: 50%;
173
- animation: validate 0.2s ease-in;
174
- }
175
-
176
- .invalid.circle {
177
- }
178
-
179
- gv-icon {
180
- --gv-icon--c: var(--passed--bgc);
181
- --gv-icon--s: var(--gv-stepper-icon--s, 32px);
182
- }
183
-
184
- .invalid gv-icon {
185
- --gv-icon--c: var(--gv-theme-color-danger);
186
- }
187
-
188
- @keyframes validate {
189
- from {
190
- opacity: 0;
191
- }
192
- to {
193
- opacity: 1;
194
- }
195
- }
196
- `,
197
- ];
63
+ return [link, // language=CSS
64
+ css`:host{box-sizing:border-box;--passed--bgc:var(--gv-stepper-valid--bgc, var(--gv-theme-color, #5a7684));--passed--bdc:var(--gv-stepper-passed--bdc, var(--gv-theme-color-light, #86c3d0));--bdc:var(--gv-stepper--bdc, var(--gv-theme-neutral-color-dark, #bfbfbf));--bgc:var(--gv-stepper--bgc, var(--gv-theme-neutral-color-dark, #bfbfbf));--passed--c:var(--gv-stepper-passed--c, #595959);--c:var(--gv-stepper--c, var(--gv-theme-neutral-color-dark, #bfbfbf))}.stepper{display:flex;justify-content:center}.disabled .step{cursor:not-allowed}.step{display:flex;flex-direction:column;cursor:pointer}.graph{display:flex;flex-direction:row;min-height:22px;min-width:250px}.round{min-width:6px;width:6px;min-height:6px;height:6px;border-radius:50%;margin:2px 7px 2px 7px}.border{margin-top:4px;min-width:100px;width:100%;height:2px;clear:both}.round{background-color:var(--bgc);transition:all .2s ease-in}.border{background-color:var(--bdc);margin-bottom:5px;transition:all .2s ease-in}.passed .round{background-color:var(--passed--bgc)}.passed .border{background-color:var(--passed--bdc)}.passed .round{height:10px;width:10px;min-height:10px;min-width:10px;margin:0 5px 0 5px}.first .border:first-of-type{visibility:hidden}.end .border:last-of-type{visibility:hidden}.content{display:flex;flex-direction:column;align-items:center;padding:5px;line-height:24px;font-size:var(--gv-theme-font-size-l,16px);color:var(--c)}.passed .content{color:var(--passed--c)}.title{font-weight:700}.description{font-size:var(--gv-theme-font-size-m,14px)}.error{text-align:center}.circle{border:1px solid var(--passed--bgc);margin-top:-12px;border-radius:50%;animation:validate .2s ease-in}gv-icon{--gv-icon--c:var(--passed--bgc);--gv-icon--s:var(--gv-stepper-icon--s, 32px)}.invalid gv-icon{--gv-icon--c:var(--gv-theme-color-danger)}@keyframes validate{from{opacity:0}to{opacity:1}}`];
198
65
  }
199
66
 
200
67
  constructor() {
@@ -208,24 +75,24 @@ export class GvStepper extends LitElement {
208
75
  _onClick(index) {
209
76
  if (this.disabled !== true) {
210
77
  this.current = index + 1;
211
- dispatchCustomEvent(this, 'change', { current: this.current });
78
+ dispatchCustomEvent(this, 'change', {
79
+ current: this.current
80
+ });
212
81
  }
213
82
  }
214
83
 
215
84
  async performUpdate() {
216
- await Promise.all([this.steps, this.current])
217
- .then(([steps, current]) => {
218
- this._steps = steps.map((step, _index) => {
219
- step.passed = step.valid === true || (current > 0 && _index + 1 <= current);
220
- return step;
221
- });
222
- this._error = false;
223
- this._empty = !(this._steps && this._steps.length > 0);
224
- })
225
- .catch(() => {
226
- this._error = true;
227
- this._empty = false;
85
+ await Promise.all([this.steps, this.current]).then(([steps, current]) => {
86
+ this._steps = steps.map((step, _index) => {
87
+ step.passed = step.valid === true || current > 0 && _index + 1 <= current;
88
+ return step;
228
89
  });
90
+ this._error = false;
91
+ this._empty = !(this._steps && this._steps.length > 0);
92
+ }).catch(() => {
93
+ this._error = true;
94
+ this._empty = false;
95
+ });
229
96
  super.performUpdate();
230
97
  }
231
98
 
@@ -233,9 +100,11 @@ export class GvStepper extends LitElement {
233
100
  if (step.invalid) {
234
101
  return html`<div class="circle invalid"><gv-icon shape="code:error"></gv-icon></div>`;
235
102
  }
103
+
236
104
  if (step.valid) {
237
105
  return html`<div class="circle"><gv-icon shape="code:check"></gv-icon></div>`;
238
106
  }
107
+
239
108
  return html`<div class="round"></div>`;
240
109
  }
241
110
 
@@ -245,44 +114,31 @@ export class GvStepper extends LitElement {
245
114
  valid: step.valid,
246
115
  step: true,
247
116
  first: index === 0,
248
- end: index === this._steps.length - 1,
117
+ end: index === this._steps.length - 1
249
118
  };
250
-
251
119
  const contentClasses = {
252
120
  content: true,
253
- link: !this.disabled,
121
+ link: !this.disabled
254
122
  };
255
- return html`
256
- <div class="${classMap(classes)}" @click="${this._onClick.bind(this, index)}" title="${step.title}">
257
- <div class="graph">
258
- <div class="border"></div>
259
- ${this._getIcon(step)}
260
- <div class="border"></div>
261
- </div>
262
- <div class="${classMap(contentClasses)}">
263
- <div class="title">${step.title}</div>
264
- <div class="description">${step.description}</div>
265
- </div>
266
- </div>
267
- `;
123
+ return html` <div class="${classMap(classes)}" @click="${this._onClick.bind(this, index)}" title="${step.title}"> <div class="graph"> <div class="border"></div> ${this._getIcon(step)} <div class="border"></div> </div> <div class="${classMap(contentClasses)}"> <div class="title">${step.title}</div> <div class="description">${step.description}</div> </div> </div> `;
268
124
  }
269
125
 
270
126
  render() {
271
127
  if (this._error) {
272
128
  return html`<div class="error">${i18n('gv-stepper.error')}</div>`;
273
129
  }
130
+
274
131
  if (this._empty) {
275
132
  return html`<div></div>`;
276
133
  }
277
- const classes = { stepper: true, disabled: this.disabled };
278
- return html`<div class="${classMap(classes)}">
279
- ${repeat(
280
- this._steps,
281
- (step) => step,
282
- (step, index) => this._getStep(step, index),
283
- )}
284
- </div> `;
134
+
135
+ const classes = {
136
+ stepper: true,
137
+ disabled: this.disabled
138
+ };
139
+ return html`<div class="${classMap(classes)}"> ${repeat(this._steps, step => step, (step, index) => this._getStep(step, index))} </div> `;
285
140
  }
286
- }
287
141
 
142
+ }
288
143
  window.customElements.define('gv-stepper', GvStepper);
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1zdGVwcGVyLmpzIl0sIm5hbWVzIjpbImNzcyIsImh0bWwiLCJMaXRFbGVtZW50IiwicmVwZWF0IiwiY2xhc3NNYXAiLCJsaW5rIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImkxOG4iLCJHdlN0ZXBwZXIiLCJwcm9wZXJ0aWVzIiwiY3VycmVudCIsInR5cGUiLCJOdW1iZXIiLCJyZWZsZWN0Iiwic3RlcHMiLCJBcnJheSIsImRpc2FibGVkIiwiQm9vbGVhbiIsIl9lcnJvciIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiX3N0ZXBzIiwiX2VtcHR5IiwiX29uQ2xpY2siLCJpbmRleCIsInBlcmZvcm1VcGRhdGUiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm1hcCIsInN0ZXAiLCJfaW5kZXgiLCJwYXNzZWQiLCJ2YWxpZCIsImxlbmd0aCIsImNhdGNoIiwiX2dldEljb24iLCJpbnZhbGlkIiwiX2dldFN0ZXAiLCJjbGFzc2VzIiwiZmlyc3QiLCJlbmQiLCJjb250ZW50Q2xhc3NlcyIsImNvbnRlbnQiLCJiaW5kIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInJlbmRlciIsInN0ZXBwZXIiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxJQUFkLEVBQW9CQyxVQUFwQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLE1BQVQsUUFBdUIsdUJBQXZCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFDQSxTQUFTQyxJQUFULFFBQXFCLGdCQUFyQjtBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUVBO0FB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S0FBcEIsQ0FIWCxDQURDLFVBQVg7QUFPRDs7QUFsUHVDO0FBcVAxQ3lCLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsWUFBN0IsRUFBMkMzQyxTQUEzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjc3MsIGh0bWwsIExpdEVsZW1lbnQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcmVwZWF0IH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVwZWF0JztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGxpbmsgfSBmcm9tICcuLi9zdHlsZXMvbGluayc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnLi4vbGliL2kxOG4nO1xuXG4vKipcbiAqIFN0ZXBwZXIgY29tcG9uZW50XG4gKlxuICogIyMgRGV0YWlsc1xuICogKiBoYXMgQHRoZW1lIGZhY2V0XG4gKlxuICogQGZpcmVzIGd2LXN0ZXBwZXI6Y2hhbmdlIC0gd2hlbiBzdGVwIGNoYW5nZVxuICpcbiAqIEBhdHRyIHtMZW5ndGh9IGN1cnJlbnQgLSBUaGUgY3VycmVudCBzZWxlY3RlZCBzdGVwXG4gKiBAYXR0ciB7QXJyYXl9IHN0ZXBzIC0gQXJyYXkgb2Ygc3RlcCB7dGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgdmFsaWQ6IGJvb2xlYW4sIGludmFsaWQ6IGJvb2xlYW59XG4gKiBAYXR0ciB7Qm9vbGVhbn0gW2Rpc2FibGVkPWZhbHNlXSAtIEluZGljYXRlIGlmIHN0ZXBwZXIgaXMgZGlzYWJsZWRcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXN0ZXBwZXItdmFsaWQtLWJnYz12YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCldIC0gVmFsaWQgYmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1zdGVwcGVyLXBhc3NlZC0tYmRjPXZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKV0gLSBQYXNzZWQgYm9yZGVyIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXN0ZXBwZXItLWJnYz12YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNiZmJmYmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3Ytc3RlcHBlci0tYmRjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZildIC0gQm9yZGVyIGNvbG9yXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXN0ZXBwZXItLWM9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1kYXJrLCAjYmZiZmJmKV0gLSBDb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1zdGVwcGVyLXBhc3NlZC0tYz0jNTk1OTU5XSAtIFBhc3NlZCBjb2xvclxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3Ytc3RlcHBlci1pY29uLS1zPTMycHhdIC0gSGVpZ2h0IGFuZCBpY29uIHdpZHRoXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlN0ZXBwZXIgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiB7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgc3RlcHM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIF9lcnJvcjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBsaW5rLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIC0tcGFzc2VkLS1iZ2M6IHZhcigtLWd2LXN0ZXBwZXItdmFsaWQtLWJnYywgdmFyKC0tZ3YtdGhlbWUtY29sb3IsICM1YTc2ODQpKTtcbiAgICAgICAgICAtLXBhc3NlZC0tYmRjOiB2YXIoLS1ndi1zdGVwcGVyLXBhc3NlZC0tYmRjLCB2YXIoLS1ndi10aGVtZS1jb2xvci1saWdodCwgIzg2YzNkMCkpO1xuICAgICAgICAgIC0tYmRjOiB2YXIoLS1ndi1zdGVwcGVyLS1iZGMsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZikpO1xuICAgICAgICAgIC0tYmdjOiB2YXIoLS1ndi1zdGVwcGVyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItZGFyaywgI2JmYmZiZikpO1xuICAgICAgICAgIC0tcGFzc2VkLS1jOiB2YXIoLS1ndi1zdGVwcGVyLXBhc3NlZC0tYywgIzU5NTk1OSk7XG4gICAgICAgICAgLS1jOiB2YXIoLS1ndi1zdGVwcGVyLS1jLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWRhcmssICNiZmJmYmYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdGVwcGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpc2FibGVkIC5zdGVwIHtcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgLnN0ZXAge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZ3JhcGgge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBtaW4taGVpZ2h0OiAyMnB4O1xuICAgICAgICAgIG1pbi13aWR0aDogMjUwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAucm91bmQge1xuICAgICAgICAgIG1pbi13aWR0aDogNnB4O1xuICAgICAgICAgIHdpZHRoOiA2cHg7XG4gICAgICAgICAgbWluLWhlaWdodDogNnB4O1xuICAgICAgICAgIGhlaWdodDogNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICBtYXJnaW46IDJweCA3cHggMnB4IDdweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ib3JkZXIge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMnB4O1xuICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgLnJvdW5kIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47XG4gICAgICAgIH1cblxuICAgICAgICAuYm9yZGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZGMpO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xuICAgICAgICB9XG5cbiAgICAgICAgLnBhc3NlZCAucm91bmQge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhc3NlZC0tYmdjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYXNzZWQgLmJvcmRlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFzc2VkLS1iZGMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnBhc3NlZCAucm91bmQge1xuICAgICAgICAgIGhlaWdodDogMTBweDtcbiAgICAgICAgICB3aWR0aDogMTBweDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxMHB4O1xuICAgICAgICAgIG1pbi13aWR0aDogMTBweDtcbiAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZpcnN0IC5ib3JkZXI6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmVuZCAuYm9yZGVyOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZ3YtdGhlbWUtZm9udC1zaXplLWwsIDE2cHgpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1jKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYXNzZWQgLmNvbnRlbnQge1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1wYXNzZWQtLWMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRpdGxlIHtcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ndi10aGVtZS1mb250LXNpemUtbSwgMTRweCk7XG4gICAgICAgIH1cblxuICAgICAgICAuZXJyb3Ige1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaXJjbGUge1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXBhc3NlZC0tYmdjKTtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAtMTJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgYW5pbWF0aW9uOiB2YWxpZGF0ZSAwLjJzIGVhc2UtaW47XG4gICAgICAgIH1cblxuICAgICAgICAuaW52YWxpZC5jaXJjbGUge1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1wYXNzZWQtLWJnYyk7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1ndi1zdGVwcGVyLWljb24tLXMsIDMycHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmludmFsaWQgZ3YtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvci1kYW5nZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgQGtleWZyYW1lcyB2YWxpZGF0ZSB7XG4gICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0byB7XG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIHRoaXMuX3N0ZXBzID0gW107XG4gICAgdGhpcy5fZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9lbXB0eSA9IHRydWU7XG4gIH1cblxuICBfb25DbGljayhpbmRleCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBpbmRleCArIDE7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UnLCB7IGN1cnJlbnQ6IHRoaXMuY3VycmVudCB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwZXJmb3JtVXBkYXRlKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnN0ZXBzLCB0aGlzLmN1cnJlbnRdKVxuICAgICAgLnRoZW4oKFtzdGVwcywgY3VycmVudF0pID0+IHtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXAsIF9pbmRleCkgPT4ge1xuICAgICAgICAgIHN0ZXAucGFzc2VkID0gc3RlcC52YWxpZCA9PT0gdHJ1ZSB8fCAoY3VycmVudCA+IDAgJiYgX2luZGV4ICsgMSA8PSBjdXJyZW50KTtcbiAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2Vycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VtcHR5ID0gISh0aGlzLl9zdGVwcyAmJiB0aGlzLl9zdGVwcy5sZW5ndGggPiAwKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICB0aGlzLl9lcnJvciA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VtcHR5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICBzdXBlci5wZXJmb3JtVXBkYXRlKCk7XG4gIH1cblxuICBfZ2V0SWNvbihzdGVwKSB7XG4gICAgaWYgKHN0ZXAuaW52YWxpZCkge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImNpcmNsZSBpbnZhbGlkXCI+PGd2LWljb24gc2hhcGU9XCJjb2RlOmVycm9yXCI+PC9ndi1pY29uPjwvZGl2PmA7XG4gICAgfVxuICAgIGlmIChzdGVwLnZhbGlkKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiY2lyY2xlXCI+PGd2LWljb24gc2hhcGU9XCJjb2RlOmNoZWNrXCI+PC9ndi1pY29uPjwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJyb3VuZFwiPjwvZGl2PmA7XG4gIH1cblxuICBfZ2V0U3RlcChzdGVwLCBpbmRleCkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICBwYXNzZWQ6IHN0ZXAucGFzc2VkLFxuICAgICAgdmFsaWQ6IHN0ZXAudmFsaWQsXG4gICAgICBzdGVwOiB0cnVlLFxuICAgICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgICAgZW5kOiBpbmRleCA9PT0gdGhpcy5fc3RlcHMubGVuZ3RoIC0gMSxcbiAgICB9O1xuXG4gICAgY29uc3QgY29udGVudENsYXNzZXMgPSB7XG4gICAgICBjb250ZW50OiB0cnVlLFxuICAgICAgbGluazogIXRoaXMuZGlzYWJsZWQsXG4gICAgfTtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKGNsYXNzZXMpfVwiIEBjbGljaz1cIiR7dGhpcy5fb25DbGljay5iaW5kKHRoaXMsIGluZGV4KX1cIiB0aXRsZT1cIiR7c3RlcC50aXRsZX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyYXBoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlclwiPjwvZGl2PlxuICAgICAgICAgICR7dGhpcy5fZ2V0SWNvbihzdGVwKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcChjb250ZW50Q2xhc3Nlcyl9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHtzdGVwLnRpdGxlfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7c3RlcC5kZXNjcmlwdGlvbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLl9lcnJvcikge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImVycm9yXCI+JHtpMThuKCdndi1zdGVwcGVyLmVycm9yJyl9PC9kaXY+YDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2VtcHR5KSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2PjwvZGl2PmA7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzZXMgPSB7IHN0ZXBwZXI6IHRydWUsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIH07XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoY2xhc3Nlcyl9XCI+XG4gICAgICAke3JlcGVhdChcbiAgICAgICAgdGhpcy5fc3RlcHMsXG4gICAgICAgIChzdGVwKSA9PiBzdGVwLFxuICAgICAgICAoc3RlcCwgaW5kZXgpID0+IHRoaXMuX2dldFN0ZXAoc3RlcCwgaW5kZXgpLFxuICAgICAgKX1cbiAgICA8L2Rpdj4gYDtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1zdGVwcGVyJywgR3ZTdGVwcGVyKTtcbiJdfQ==