@sbb-esta/lyne-elements 1.12.1 → 1.13.0

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 (100) hide show
  1. package/autocomplete-grid/autocomplete-grid-button.js +1 -1
  2. package/button/common.js +1 -1
  3. package/button/mini-button.js +5 -5
  4. package/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
  5. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  6. package/core/mixins/form-associated-mixin.d.ts +6 -6
  7. package/core/mixins/form-associated-mixin.d.ts.map +1 -1
  8. package/core/mixins/required-mixin.d.ts +1 -1
  9. package/core/mixins/required-mixin.d.ts.map +1 -1
  10. package/core/mixins.js +2 -6
  11. package/core/styles/mixins/buttons.scss +1 -1
  12. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +4 -0
  13. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +5 -1
  14. package/core.css +5 -1
  15. package/custom-elements.json +526 -267
  16. package/datepicker/datepicker-next-day.js +1 -1
  17. package/datepicker/datepicker-previous-day.js +1 -1
  18. package/development/autocomplete-grid/autocomplete-grid-button.js +1 -1
  19. package/development/button/common.js +1 -1
  20. package/development/button/mini-button.js +1 -1
  21. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
  22. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
  23. package/development/core/mixins/form-associated-mixin.d.ts +6 -6
  24. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
  25. package/development/core/mixins/required-mixin.d.ts +1 -1
  26. package/development/core/mixins/required-mixin.d.ts.map +1 -1
  27. package/development/core/mixins.js +3 -6
  28. package/development/datepicker/datepicker-next-day.js +1 -1
  29. package/development/datepicker/datepicker-previous-day.js +1 -1
  30. package/development/file-selector/file-selector.d.ts +18 -8
  31. package/development/file-selector/file-selector.d.ts.map +1 -1
  32. package/development/file-selector.js +72 -36
  33. package/development/form-field/form-field-clear.js +1 -1
  34. package/development/header/common.js +52 -5
  35. package/development/image.js +1 -1
  36. package/development/loading-indicator.js +2 -6
  37. package/development/paginator/paginator.d.ts +1 -1
  38. package/development/paginator/paginator.d.ts.map +1 -1
  39. package/development/paginator.js +36 -14
  40. package/development/popover/popover-trigger.js +1 -1
  41. package/development/select/select.d.ts +12 -5
  42. package/development/select/select.d.ts.map +1 -1
  43. package/development/select.js +50 -17
  44. package/development/slider/slider.d.ts +2 -1
  45. package/development/slider/slider.d.ts.map +1 -1
  46. package/development/slider.js +4 -1
  47. package/file-selector/file-selector.d.ts +18 -8
  48. package/file-selector/file-selector.d.ts.map +1 -1
  49. package/file-selector.js +91 -67
  50. package/form-field/form-field-clear.js +1 -1
  51. package/header/common.js +11 -11
  52. package/loading-indicator.js +5 -5
  53. package/package.json +3 -3
  54. package/paginator/paginator.d.ts +1 -1
  55. package/paginator/paginator.d.ts.map +1 -1
  56. package/paginator.js +57 -55
  57. package/popover/popover-trigger.js +1 -1
  58. package/select/select.d.ts +12 -5
  59. package/select/select.d.ts.map +1 -1
  60. package/select.js +111 -83
  61. package/slider/slider.d.ts +2 -1
  62. package/slider/slider.d.ts.map +1 -1
  63. package/slider.js +3 -0
  64. package/standard-theme.css +5 -1
  65. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
  66. package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
  67. package/button/mini-button-group/index.d.ts +0 -2
  68. package/button/mini-button-group/index.d.ts.map +0 -1
  69. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
  70. package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
  71. package/development/button/mini-button-group/index.d.ts +0 -2
  72. package/development/button/mini-button-group/index.d.ts.map +0 -1
  73. package/development/flip-card/flip-card/index.d.ts +0 -2
  74. package/development/flip-card/flip-card/index.d.ts.map +0 -1
  75. package/development/flip-card/flip-card-details/index.d.ts +0 -2
  76. package/development/flip-card/flip-card-details/index.d.ts.map +0 -1
  77. package/development/flip-card/flip-card-summary/index.d.ts +0 -2
  78. package/development/flip-card/flip-card-summary/index.d.ts.map +0 -1
  79. package/development/link-list/link-list-anchor/index.d.ts +0 -2
  80. package/development/link-list/link-list-anchor/index.d.ts.map +0 -1
  81. package/development/paginator/index.d.ts +0 -2
  82. package/development/paginator/index.d.ts.map +0 -1
  83. package/development/radio-button/radio-button-panel/index.d.ts +0 -2
  84. package/development/radio-button/radio-button-panel/index.d.ts.map +0 -1
  85. package/development/tabs/tab/index.d.ts +0 -2
  86. package/development/tabs/tab/index.d.ts.map +0 -1
  87. package/flip-card/flip-card/index.d.ts +0 -2
  88. package/flip-card/flip-card/index.d.ts.map +0 -1
  89. package/flip-card/flip-card-details/index.d.ts +0 -2
  90. package/flip-card/flip-card-details/index.d.ts.map +0 -1
  91. package/flip-card/flip-card-summary/index.d.ts +0 -2
  92. package/flip-card/flip-card-summary/index.d.ts.map +0 -1
  93. package/link-list/link-list-anchor/index.d.ts +0 -2
  94. package/link-list/link-list-anchor/index.d.ts.map +0 -1
  95. package/paginator/index.d.ts +0 -2
  96. package/paginator/index.d.ts.map +0 -1
  97. package/radio-button/radio-button-panel/index.d.ts +0 -2
  98. package/radio-button/radio-button-panel/index.d.ts.map +0 -1
  99. package/tabs/tab/index.d.ts +0 -2
  100. package/tabs/tab/index.d.ts.map +0 -1
@@ -1,13 +1,13 @@
1
1
  import { css, LitElement, nothing } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
2
+ import { property, customElement } from "lit/decorators.js";
3
3
  import { ref } from "lit/directives/ref.js";
4
4
  import { html, unsafeStatic } from "lit/static-html.js";
5
5
  import { sbbInputModalityDetector } from "./core/a11y.js";
6
6
  import { SbbLanguageController } from "./core/controllers.js";
7
7
  import { slotState } from "./core/decorators.js";
8
- import { EventEmitter } from "./core/eventing.js";
8
+ import { EventEmitter, forwardEventToHost } from "./core/eventing.js";
9
9
  import { i18nFileSelectorCurrentlySelected, i18nFileSelectorButtonLabel, i18nFileSelectorSubtitleLabel, i18nFileSelectorDeleteFile } from "./core/i18n.js";
10
- import { SbbDisabledMixin } from "./core/mixins.js";
10
+ import { SbbDisabledMixin, SbbFormAssociatedMixin } from "./core/mixins.js";
11
11
  import "./button/secondary-button.js";
12
12
  import "./button/secondary-button-static.js";
13
13
  import "./icon.js";
@@ -32,7 +32,7 @@ const style = css`*,
32
32
  }
33
33
 
34
34
  @media (forced-colors: active) {
35
- :host([disabled]) {
35
+ :host(:disabled) {
36
36
  --sbb-file-selector-color: GrayText;
37
37
  --sbb-file-selector-subtitle-color: GrayText;
38
38
  --sbb-file-selector-border-color: GrayText;
@@ -169,13 +169,14 @@ var __decorateClass = (decorators, target, key, kind) => {
169
169
  if (kind && result) __defProp(target, key, result);
170
170
  return result;
171
171
  };
172
- let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
172
+ let SbbFileSelectorElement = class extends SbbDisabledMixin(SbbFormAssociatedMixin(LitElement)) {
173
173
  constructor() {
174
174
  super(...arguments);
175
175
  this.variant = "default";
176
176
  this.size = "m";
177
177
  this.multiple = false;
178
178
  this.multipleMode = "default";
179
+ this._files = [];
179
180
  this._fileChangedEvent = new EventEmitter(
180
181
  this,
181
182
  SbbFileSelectorElement.events.fileChangedEvent
@@ -184,17 +185,45 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
184
185
  this._suffixes = ["B", "kB", "MB", "GB", "TB"];
185
186
  this._language = new SbbLanguageController(this);
186
187
  }
187
- /**
188
- * Gets the currently selected files.
189
- */
188
+ set value(value) {
189
+ this._hiddenInput.value = value ?? "";
190
+ if (!value) {
191
+ this.files = [];
192
+ }
193
+ }
194
+ get value() {
195
+ var _a;
196
+ return (_a = this._hiddenInput) == null ? void 0 : _a.value;
197
+ }
198
+ set files(value) {
199
+ this._files = value ?? [];
200
+ const dt = new DataTransfer();
201
+ this.files.forEach((e) => dt.items.add(e));
202
+ this._hiddenInput.files = dt.files;
203
+ this.updateFormValue();
204
+ }
190
205
  get files() {
191
- return this._files || [];
206
+ return this._files;
192
207
  }
193
208
  /**
194
- * @deprecated use 'files' property instead
209
+ * @deprecated use the 'files' property instead
195
210
  */
196
211
  getFiles() {
197
- return this._files || [];
212
+ return this.files;
213
+ }
214
+ formResetCallback() {
215
+ this.files = [];
216
+ }
217
+ formStateRestoreCallback(state, _reason) {
218
+ if (!state) {
219
+ return;
220
+ }
221
+ this.files = state.map(([_, value]) => value);
222
+ }
223
+ updateFormValue() {
224
+ const formValue = new FormData();
225
+ this.files.forEach((file) => formValue.append(this.name, file));
226
+ this.internals.setFormValue(formValue);
198
227
  }
199
228
  _blockEvent(event) {
200
229
  event.stopPropagation();
@@ -205,21 +234,21 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
205
234
  }
206
235
  _onDragEnter(event) {
207
236
  this._counter++;
208
- if (!this.disabled) {
237
+ if (!this.disabled && !this.formDisabled) {
209
238
  this._setDragState(event.target, true);
210
239
  this._blockEvent(event);
211
240
  }
212
241
  }
213
242
  _onDragLeave(event) {
214
243
  this._counter--;
215
- if (!this.disabled && event.target === this._dragTarget && this._counter === 0) {
244
+ if (!this.disabled && !this.formDisabled && event.target === this._dragTarget && this._counter === 0) {
216
245
  this._setDragState();
217
246
  this._blockEvent(event);
218
247
  }
219
248
  }
220
249
  _onFileDrop(event) {
221
250
  this._counter = 0;
222
- if (!this.disabled) {
251
+ if (!this.disabled && !this.formDisabled) {
223
252
  this._setDragState();
224
253
  this._blockEvent(event);
225
254
  this._createFileList(event.dataTransfer.files);
@@ -245,37 +274,41 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
245
274
  if (fileInput.files) {
246
275
  this._createFileList(fileInput.files);
247
276
  }
277
+ forwardEventToHost(event, this);
248
278
  }
249
279
  _createFileList(files) {
250
- if (!this.multiple || this.multipleMode !== "persistent" || !this._files || this._files.length === 0) {
251
- this._files = Array.from(files);
280
+ if (!this.multiple || this.multipleMode !== "persistent" || this.files.length === 0) {
281
+ this.files = Array.from(files);
252
282
  } else {
253
- this._files = Array.from(files).filter(
254
- (newFile) => this._files.findIndex((oldFile) => this._checkFileEquality(newFile, oldFile)) === -1
255
- ).concat(this._files);
283
+ this.files = Array.from(files).filter(
284
+ // Remove duplicates
285
+ (newFile) => this.files.findIndex((oldFile) => this._checkFileEquality(newFile, oldFile)) === -1
286
+ ).concat(this.files);
256
287
  }
257
- this._liveRegion.innerText = i18nFileSelectorCurrentlySelected(this._files.map((e) => e.name))[this._language.current];
258
- this._fileChangedEvent.emit(this._files);
288
+ this._updateA11yLiveRegion();
289
+ this._fileChangedEvent.emit(this.files);
259
290
  }
260
291
  _removeFile(file) {
261
- this._files = this._files.filter((f) => !this._checkFileEquality(file, f));
262
- const dt = new DataTransfer();
263
- this._files.forEach((e) => dt.items.add(e));
264
- this._hiddenInput.files = dt.files;
265
- this._liveRegion.innerText = i18nFileSelectorCurrentlySelected(this._files.map((e) => e.name))[this._language.current];
266
- this._fileChangedEvent.emit(this._files);
292
+ this.files = this.files.filter((f) => !this._checkFileEquality(file, f));
293
+ this._updateA11yLiveRegion();
294
+ this.dispatchEvent(new Event("input", { composed: true, bubbles: true }));
295
+ this.dispatchEvent(new Event("change", { bubbles: true }));
296
+ this._fileChangedEvent.emit(this.files);
267
297
  }
268
298
  /** Calculates the correct unit for the file's size. */
269
299
  _formatFileSize(size) {
270
300
  const i = Math.floor(Math.log(size) / Math.log(1024));
271
301
  return `${(size / Math.pow(1024, i)).toFixed(0)} ${this._suffixes[i]}`;
272
302
  }
303
+ _updateA11yLiveRegion() {
304
+ this._liveRegion.innerText = i18nFileSelectorCurrentlySelected(this.files.map((e) => e.name))[this._language.current];
305
+ }
273
306
  _renderDefaultMode() {
274
307
  return html`
275
308
  <sbb-secondary-button-static
276
309
  size=${this.size}
277
310
  icon-name="folder-open-small"
278
- ?disabled=${this.disabled}
311
+ ?disabled=${this.disabled || this.formDisabled}
279
312
  ${ref((el) => {
280
313
  this._loadButton = el;
281
314
  })}
@@ -299,7 +332,7 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
299
332
  <span class="sbb-file-selector__dropzone-area--button">
300
333
  <sbb-secondary-button-static
301
334
  size=${this.size}
302
- ?disabled=${this.disabled}
335
+ ?disabled=${this.disabled || this.formDisabled}
303
336
  ${ref((el) => {
304
337
  this._loadButton = el;
305
338
  })}
@@ -311,10 +344,10 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
311
344
  `;
312
345
  }
313
346
  _renderFileList() {
314
- const TAG_NAME = this._files.length > 1 ? { WRAPPER: "ul", ELEMENT: "li" } : { WRAPPER: "div", ELEMENT: "span" };
347
+ const TAG_NAME = this.files.length > 1 ? { WRAPPER: "ul", ELEMENT: "li" } : { WRAPPER: "div", ELEMENT: "span" };
315
348
  return html`
316
349
  <${unsafeStatic(TAG_NAME.WRAPPER)} class="sbb-file-selector__file-list">
317
- ${this._files.map(
350
+ ${this.files.map(
318
351
  (file) => html`
319
352
  <${unsafeStatic(TAG_NAME.ELEMENT)} class="sbb-file-selector__file">
320
353
  <span class="sbb-file-selector__file-details">
@@ -348,7 +381,7 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
348
381
  <input
349
382
  class="sbb-file-selector__visually-hidden"
350
383
  type="file"
351
- ?disabled=${this.disabled}
384
+ ?disabled=${this.disabled || this.formDisabled}
352
385
  ?multiple=${this.multiple}
353
386
  accept=${this.accept || nothing}
354
387
  aria-label=${ariaLabel || nothing}
@@ -366,7 +399,7 @@ let SbbFileSelectorElement = class extends SbbDisabledMixin(LitElement) {
366
399
  class="sbb-file-selector__visually-hidden"
367
400
  ${ref((p) => this._liveRegion = p)}
368
401
  ></p>
369
- ${this._files && this._files.length > 0 ? this._renderFileList() : nothing}
402
+ ${this.files.length > 0 ? this._renderFileList() : nothing}
370
403
  <div class="sbb-file-selector__error">
371
404
  <slot name="error"></slot>
372
405
  </div>
@@ -400,8 +433,11 @@ __decorateClass([
400
433
  property({ attribute: "accessibility-label" })
401
434
  ], SbbFileSelectorElement.prototype, "accessibilityLabel", 2);
402
435
  __decorateClass([
403
- state()
404
- ], SbbFileSelectorElement.prototype, "_files", 2);
436
+ property({ attribute: false })
437
+ ], SbbFileSelectorElement.prototype, "value", 1);
438
+ __decorateClass([
439
+ property({ attribute: false })
440
+ ], SbbFileSelectorElement.prototype, "files", 1);
405
441
  SbbFileSelectorElement = __decorateClass([
406
442
  customElement("sbb-file-selector"),
407
443
  slotState()
@@ -409,4 +445,4 @@ SbbFileSelectorElement = __decorateClass([
409
445
  export {
410
446
  SbbFileSelectorElement
411
447
  };
412
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3Rvci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ZpbGUtc2VsZWN0b3IvZmlsZS1zZWxlY3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlZi5qcyc7XG5pbXBvcnQgeyBodG1sLCB1bnNhZmVTdGF0aWMgfSBmcm9tICdsaXQvc3RhdGljLWh0bWwuanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQgfSBmcm9tICcuLi9idXR0b24uanMnO1xuaW1wb3J0IHsgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yIH0gZnJvbSAnLi4vY29yZS9hMTF5LmpzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgc2xvdFN0YXRlIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4uL2NvcmUvZXZlbnRpbmcuanMnO1xuaW1wb3J0IHtcbiAgaTE4bkZpbGVTZWxlY3RvckJ1dHRvbkxhYmVsLFxuICBpMThuRmlsZVNlbGVjdG9yQ3VycmVudGx5U2VsZWN0ZWQsXG4gIGkxOG5GaWxlU2VsZWN0b3JEZWxldGVGaWxlLFxuICBpMThuRmlsZVNlbGVjdG9yU3VidGl0bGVMYWJlbCxcbn0gZnJvbSAnLi4vY29yZS9pMThuLmpzJztcbmltcG9ydCB7IFNiYkRpc2FibGVkTWl4aW4gfSBmcm9tICcuLi9jb3JlL21peGlucy5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2ZpbGUtc2VsZWN0b3Iuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi9idXR0b24vc2Vjb25kYXJ5LWJ1dHRvbi5qcyc7XG5pbXBvcnQgJy4uL2J1dHRvbi9zZWNvbmRhcnktYnV0dG9uLXN0YXRpYy5qcyc7XG5pbXBvcnQgJy4uL2ljb24uanMnO1xuXG5leHBvcnQgdHlwZSBET01FdmVudCA9IGdsb2JhbFRoaXMuRXZlbnQ7XG5cbi8qKlxuICogSXQgYWxsb3dzIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmaWxlIGZyb20gc3RvcmFnZSBkZXZpY2VzIGFuZCBkaXNwbGF5IHRoZW0uXG4gKlxuICogQHNsb3QgZXJyb3IgLSBVc2UgdGhpcyB0byBwcm92aWRlIGEgYHNiYi1mb3JtLWVycm9yYCB0byBzaG93IGFuIGVycm9yIG1lc3NhZ2UuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PEZpbGVbXT59IGZpbGVDaGFuZ2VkIC0gQW4gZXZlbnQgd2hpY2ggaXMgZW1pdHRlZCBlYWNoIHRpbWUgdGhlIGZpbGUgbGlzdCBjaGFuZ2VzLlxuICovXG5AY3VzdG9tRWxlbWVudCgnc2JiLWZpbGUtc2VsZWN0b3InKVxuQHNsb3RTdGF0ZSgpXG5leHBvcnQgY2xhc3MgU2JiRmlsZVNlbGVjdG9yRWxlbWVudCBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oTGl0RWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZmlsZUNoYW5nZWRFdmVudDogJ2ZpbGVDaGFuZ2VkJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGhhcyBhIGRyb3B6b25lIGFyZWEgb3Igbm90LiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ2Ryb3B6b25lJyA9ICdkZWZhdWx0JztcblxuICAvKiogU2l6ZSB2YXJpYW50LCBlaXRoZXIgcyBvciBtLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBzaXplOiAncycgfCAnbScgPSAnbSc7XG5cbiAgLyoqIFdoZXRoZXIgbW9yZSB0aGFuIG9uZSBmaWxlIGNhbiBiZSBzZWxlY3RlZC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0aGUgbmV3bHkgYWRkZWQgZmlsZXMgc2hvdWxkIG92ZXJyaWRlIHRoZSBwcmV2aW91c2x5IGFkZGVkIG9uZXMuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ211bHRpcGxlLW1vZGUnIH0pXG4gIHB1YmxpYyBtdWx0aXBsZU1vZGU6ICdkZWZhdWx0JyB8ICdwZXJzaXN0ZW50JyA9ICdkZWZhdWx0JztcblxuICAvKiogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIHVuaXF1ZSBmaWxlIHR5cGUgc3BlY2lmaWVycy4gKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2VwdD86IHN0cmluZztcblxuICAvKiogVGhlIHRpdGxlIGRpc3BsYXllZCBpbiBgZHJvcHpvbmVgIHZhcmlhbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3RpdGxlLWNvbnRlbnQnIH0pIHB1YmxpYyB0aXRsZUNvbnRlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FjY2Vzc2liaWxpdHktbGFiZWwnIH0pIHB1YmxpYyBhY2Nlc3NpYmlsaXR5TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX2ZpbGVzPzogRmlsZVtdO1xuXG4gIC8qKiBBbiBldmVudCB3aGljaCBpcyBlbWl0dGVkIGVhY2ggdGltZSB0aGUgZmlsZSBsaXN0IGNoYW5nZXMuICovXG4gIHByaXZhdGUgX2ZpbGVDaGFuZ2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxGaWxlW10+ID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICB0aGlzLFxuICAgIFNiYkZpbGVTZWxlY3RvckVsZW1lbnQuZXZlbnRzLmZpbGVDaGFuZ2VkRXZlbnQsXG4gICk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgZmlsZXMoKTogRmlsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXMgfHwgW107XG4gIH1cblxuICAvLyBTYWZhcmkgaGFzIGEgcGVjdWxpYXIgYmVoYXZpb3Igd2hlbiBkcmFnZ2luZyBmaWxlcyBvbiB0aGUgaW5uZXIgYnV0dG9uIGluICdkcm9wem9uZScgdmFyaWFudDtcbiAgLy8gdGhpcyB3aWxsIHJlcXVpcmUgYSBjb3VudGVyIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGRyYWdFbnRlci9kcmFnTGVhdmUuXG4gIHByaXZhdGUgX2NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfbG9hZEJ1dHRvbiE6IFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQ7XG4gIHByaXZhdGUgX2RyYWdUYXJnZXQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaGlkZGVuSW5wdXQhOiBIVE1MSW5wdXRFbGVtZW50O1xuICBwcml2YXRlIF9zdWZmaXhlczogc3RyaW5nW10gPSBbJ0InLCAna0InLCAnTUInLCAnR0InLCAnVEInXTtcbiAgcHJpdmF0ZSBfbGl2ZVJlZ2lvbiE6IEhUTUxQYXJhZ3JhcGhFbGVtZW50O1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlICdmaWxlcycgcHJvcGVydHkgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIGdldEZpbGVzKCk6IEZpbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzIHx8IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfYmxvY2tFdmVudChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRmlsZUVxdWFsaXR5KGZpbGUxOiBGaWxlLCBmaWxlMjogRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmaWxlMS5uYW1lID09PSBmaWxlMi5uYW1lICYmXG4gICAgICBmaWxlMS5zaXplID09PSBmaWxlMi5zaXplICYmXG4gICAgICBmaWxlMS5sYXN0TW9kaWZpZWQgPT09IGZpbGUyLmxhc3RNb2RpZmllZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY291bnRlcisrO1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fc2V0RHJhZ1N0YXRlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgdHJ1ZSk7XG4gICAgICB0aGlzLl9ibG9ja0V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY291bnRlci0tO1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiBldmVudC50YXJnZXQgPT09IHRoaXMuX2RyYWdUYXJnZXQgJiYgdGhpcy5fY291bnRlciA9PT0gMCkge1xuICAgICAgdGhpcy5fc2V0RHJhZ1N0YXRlKCk7XG4gICAgICB0aGlzLl9ibG9ja0V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbkZpbGVEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb3VudGVyID0gMDtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3NldERyYWdTdGF0ZSgpO1xuICAgICAgdGhpcy5fYmxvY2tFdmVudChldmVudCk7XG4gICAgICB0aGlzLl9jcmVhdGVGaWxlTGlzdChldmVudC5kYXRhVHJhbnNmZXIhLmZpbGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbkZvY3VzKCk6IHZvaWQge1xuICAgIGlmIChzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5ID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICB0aGlzLl9sb2FkQnV0dG9uLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1mb2N1cy12aXNpYmxlJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25CbHVyKCk6IHZvaWQge1xuICAgIGlmIChzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9zdFJlY2VudE1vZGFsaXR5ID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICB0aGlzLl9sb2FkQnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1mb2N1cy12aXNpYmxlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RHJhZ1N0YXRlKFxuICAgIGRyYWdUYXJnZXQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIGlzRHJhZ0VudGVyOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2RyYWdUYXJnZXQgPSBkcmFnVGFyZ2V0O1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWFjdGl2ZScsIGlzRHJhZ0VudGVyKTtcbiAgICB0aGlzLl9sb2FkQnV0dG9uLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1hY3RpdmUnLCBpc0RyYWdFbnRlcik7XG4gIH1cblxuICBwcml2YXRlIF9yZWFkRmlsZXMoZXZlbnQ6IERPTUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZmlsZUlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGZpbGVJbnB1dC5maWxlcykge1xuICAgICAgdGhpcy5fY3JlYXRlRmlsZUxpc3QoZmlsZUlucHV0LmZpbGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVGaWxlTGlzdChmaWxlczogRmlsZUxpc3QpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5tdWx0aXBsZSB8fFxuICAgICAgdGhpcy5tdWx0aXBsZU1vZGUgIT09ICdwZXJzaXN0ZW50JyB8fFxuICAgICAgIXRoaXMuX2ZpbGVzIHx8XG4gICAgICB0aGlzLl9maWxlcy5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuX2ZpbGVzID0gQXJyYXkuZnJvbShmaWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ZpbGVzID0gQXJyYXkuZnJvbShmaWxlcylcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAobmV3RmlsZTogRmlsZSk6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgIHRoaXMuX2ZpbGVzIS5maW5kSW5kZXgoKG9sZEZpbGU6IEZpbGUpID0+IHRoaXMuX2NoZWNrRmlsZUVxdWFsaXR5KG5ld0ZpbGUsIG9sZEZpbGUpKSA9PT1cbiAgICAgICAgICAgIC0xLFxuICAgICAgICApXG4gICAgICAgIC5jb25jYXQodGhpcy5fZmlsZXMpO1xuICAgIH1cbiAgICB0aGlzLl9saXZlUmVnaW9uLmlubmVyVGV4dCA9IGkxOG5GaWxlU2VsZWN0b3JDdXJyZW50bHlTZWxlY3RlZCh0aGlzLl9maWxlcy5tYXAoKGUpID0+IGUubmFtZSkpW1xuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudFxuICAgIF07XG4gICAgdGhpcy5fZmlsZUNoYW5nZWRFdmVudC5lbWl0KHRoaXMuX2ZpbGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbGVzID0gdGhpcy5fZmlsZXMhLmZpbHRlcigoZjogRmlsZSkgPT4gIXRoaXMuX2NoZWNrRmlsZUVxdWFsaXR5KGZpbGUsIGYpKTtcbiAgICAvLyBUaGUgaXRlbSBtdXN0IGJlIHJlbW92ZWQgZnJvbSB0aGUgaGlkZGVuIGZpbGUgaW5wdXQgdG9vOyB0aGUgRmlsZUxpc3QgQVBJIGlzIGZsYXdlZCwgc28gdGhlIERhdGFUcmFuc2ZlciBvYmplY3QgaXMgdXNlZC5cbiAgICBjb25zdCBkdDogRGF0YVRyYW5zZmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xuICAgIHRoaXMuX2ZpbGVzLmZvckVhY2goKGU6IEZpbGUpID0+IGR0Lml0ZW1zLmFkZChlKSk7XG4gICAgdGhpcy5faGlkZGVuSW5wdXQuZmlsZXMgPSBkdC5maWxlcztcbiAgICB0aGlzLl9saXZlUmVnaW9uLmlubmVyVGV4dCA9IGkxOG5GaWxlU2VsZWN0b3JDdXJyZW50bHlTZWxlY3RlZCh0aGlzLl9maWxlcy5tYXAoKGUpID0+IGUubmFtZSkpW1xuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudFxuICAgIF07XG4gICAgdGhpcy5fZmlsZUNoYW5nZWRFdmVudC5lbWl0KHRoaXMuX2ZpbGVzKTtcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGVzIHRoZSBjb3JyZWN0IHVuaXQgZm9yIHRoZSBmaWxlJ3Mgc2l6ZS4gKi9cbiAgcHJpdmF0ZSBfZm9ybWF0RmlsZVNpemUoc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBpOiBudW1iZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpIC8gTWF0aC5sb2coMTAyNCkpO1xuICAgIHJldHVybiBgJHsoc2l6ZSAvIE1hdGgucG93KDEwMjQsIGkpKS50b0ZpeGVkKDApfSAke3RoaXMuX3N1ZmZpeGVzW2ldfWA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJEZWZhdWx0TW9kZSgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLXNlY29uZGFyeS1idXR0b24tc3RhdGljXG4gICAgICAgIHNpemU9JHt0aGlzLnNpemV9XG4gICAgICAgIGljb24tbmFtZT1cImZvbGRlci1vcGVuLXNtYWxsXCJcbiAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH1cbiAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvYWRCdXR0b24gPSBlbCBhcyBTYmJTZWNvbmRhcnlCdXR0b25TdGF0aWNFbGVtZW50O1xuICAgICAgICB9KX1cbiAgICAgID5cbiAgICAgICAgJHtpMThuRmlsZVNlbGVjdG9yQnV0dG9uTGFiZWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICA8L3NiYi1zZWNvbmRhcnktYnV0dG9uLXN0YXRpYz5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyRHJvcHpvbmVBcmVhKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYS0taWNvblwiPlxuICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgbmFtZT0ke3RoaXMuc2l6ZSA9PT0gJ20nID8gJ2ZvbGRlci1vcGVuLW1lZGl1bScgOiAnZm9sZGVyLW9wZW4tc21hbGwnfVxuICAgICAgICAgID48L3NiYi1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWEtLXRpdGxlXCI+JHt0aGlzLnRpdGxlQ29udGVudH08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWEtLXN1YnRpdGxlXCI+XG4gICAgICAgICAgJHtpMThuRmlsZVNlbGVjdG9yU3VidGl0bGVMYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19kcm9wem9uZS1hcmVhLS1idXR0b25cIj5cbiAgICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b24tc3RhdGljXG4gICAgICAgICAgICBzaXplPSR7dGhpcy5zaXplfVxuICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9hZEJ1dHRvbiA9IGVsIGFzIFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQ7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2kxOG5GaWxlU2VsZWN0b3JCdXR0b25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICA8L3NiYi1zZWNvbmRhcnktYnV0dG9uLXN0YXRpYz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJGaWxlTGlzdCgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgVEFHX05BTUU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuICAgICAgdGhpcy5fZmlsZXMhLmxlbmd0aCA+IDFcbiAgICAgICAgPyB7IFdSQVBQRVI6ICd1bCcsIEVMRU1FTlQ6ICdsaScgfVxuICAgICAgICA6IHsgV1JBUFBFUjogJ2RpdicsIEVMRU1FTlQ6ICdzcGFuJyB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8JHt1bnNhZmVTdGF0aWMoVEFHX05BTUUuV1JBUFBFUil9IGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUtbGlzdFwiPlxuICAgICAgICAke3RoaXMuX2ZpbGVzIS5tYXAoXG4gICAgICAgICAgKGZpbGU6IEZpbGUpID0+IGh0bWxgXG4gICAgICAgICAgPCR7dW5zYWZlU3RhdGljKFRBR19OQU1FLkVMRU1FTlQpfSBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19maWxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19maWxlLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZmlsZS1uYW1lXCI+JHtmaWxlLm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19maWxlLXNpemVcIj4ke3RoaXMuX2Zvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSl9PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICAgICAgICAgIHNpemU9JHt0aGlzLnNpemV9XG4gICAgICAgICAgICAgIGljb24tbmFtZT1cInRyYXNoLXNtYWxsXCJcbiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fcmVtb3ZlRmlsZShmaWxlKX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke2Ake2kxOG5GaWxlU2VsZWN0b3JEZWxldGVGaWxlW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAtICR7ZmlsZS5uYW1lfWB9XG4gICAgICAgICAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5cbiAgICAgICAgICA8LyR7dW5zYWZlU3RhdGljKFRBR19OQU1FLkVMRU1FTlQpfT5gLFxuICAgICAgICApfVxuICAgICAgPC8ke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRS5XUkFQUEVSKX0+XG4gICAgYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGFyaWFMYWJlbCA9IHRoaXMuYWNjZXNzaWJpbGl0eUxhYmVsXG4gICAgICA/IGAke2kxOG5GaWxlU2VsZWN0b3JCdXR0b25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gLSAke3RoaXMuYWNjZXNzaWJpbGl0eUxhYmVsfWBcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19pbnB1dC1jb250YWluZXJcIlxuICAgICAgICAgIEBkcmFnZW50ZXI9JHt0aGlzLl9vbkRyYWdFbnRlcn1cbiAgICAgICAgICBAZHJhZ292ZXI9JHt0aGlzLl9ibG9ja0V2ZW50fVxuICAgICAgICAgIEBkcmFnbGVhdmU9JHt0aGlzLl9vbkRyYWdMZWF2ZX1cbiAgICAgICAgICBAZHJvcD0ke3RoaXMuX29uRmlsZURyb3B9XG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAke3RoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnID8gdGhpcy5fcmVuZGVyRGVmYXVsdE1vZGUoKSA6IHRoaXMuX3JlbmRlckRyb3B6b25lQXJlYSgpfVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX3Zpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH1cbiAgICAgICAgICAgICAgP211bHRpcGxlPSR7dGhpcy5tdWx0aXBsZX1cbiAgICAgICAgICAgICAgYWNjZXB0PSR7dGhpcy5hY2NlcHQgfHwgbm90aGluZ31cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke2FyaWFMYWJlbCB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5fcmVhZEZpbGVzfVxuICAgICAgICAgICAgICBAZm9jdXM9JHt0aGlzLl9vbkZvY3VzfVxuICAgICAgICAgICAgICBAYmx1cj0ke3RoaXMuX29uQmx1cn1cbiAgICAgICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGRlbklucHV0ID0gZWwgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cFxuICAgICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICAgIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX3Zpc3VhbGx5LWhpZGRlblwiXG4gICAgICAgICAgJHtyZWYoKHA/OiBFbGVtZW50KSA9PiAodGhpcy5fbGl2ZVJlZ2lvbiA9IHAgYXMgSFRNTFBhcmFncmFwaEVsZW1lbnQpKX1cbiAgICAgICAgPjwvcD5cbiAgICAgICAgJHt0aGlzLl9maWxlcyAmJiB0aGlzLl9maWxlcy5sZW5ndGggPiAwID8gdGhpcy5fcmVuZGVyRmlsZUxpc3QoKSA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZXJyb3JcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwiZXJyb3JcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWZpbGUtc2VsZWN0b3InOiBTYmJGaWxlU2VsZWN0b3JFbGVtZW50O1xuICB9XG59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
448
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZWxlY3Rvci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2ZpbGUtc2VsZWN0b3IvZmlsZS1zZWxlY3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBMaXRFbGVtZW50LCBub3RoaW5nLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IGh0bWwsIHVuc2FmZVN0YXRpYyB9IGZyb20gJ2xpdC9zdGF0aWMtaHRtbC5qcyc7XG5cbmltcG9ydCB0eXBlIHsgU2JiU2Vjb25kYXJ5QnV0dG9uU3RhdGljRWxlbWVudCB9IGZyb20gJy4uL2J1dHRvbi5qcyc7XG5pbXBvcnQgeyBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBzbG90U3RhdGUgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBmb3J3YXJkRXZlbnRUb0hvc3QgfSBmcm9tICcuLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7XG4gIGkxOG5GaWxlU2VsZWN0b3JCdXR0b25MYWJlbCxcbiAgaTE4bkZpbGVTZWxlY3RvckN1cnJlbnRseVNlbGVjdGVkLFxuICBpMThuRmlsZVNlbGVjdG9yRGVsZXRlRmlsZSxcbiAgaTE4bkZpbGVTZWxlY3RvclN1YnRpdGxlTGFiZWwsXG59IGZyb20gJy4uL2NvcmUvaTE4bi5qcyc7XG5pbXBvcnQge1xuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIFNiYkRpc2FibGVkTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG59IGZyb20gJy4uL2NvcmUvbWl4aW5zLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vZmlsZS1zZWxlY3Rvci5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJy4uL2J1dHRvbi9zZWNvbmRhcnktYnV0dG9uLmpzJztcbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24tc3RhdGljLmpzJztcbmltcG9ydCAnLi4vaWNvbi5qcyc7XG5cbmV4cG9ydCB0eXBlIERPTUV2ZW50ID0gZ2xvYmFsVGhpcy5FdmVudDtcblxuLyoqXG4gKiBJdCBhbGxvd3MgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGZpbGUgZnJvbSBzdG9yYWdlIGRldmljZXMgYW5kIGRpc3BsYXkgdGhlbS5cbiAqXG4gKiBAc2xvdCBlcnJvciAtIFVzZSB0aGlzIHRvIHByb3ZpZGUgYSBgc2JiLWZvcm0tZXJyb3JgIHRvIHNob3cgYW4gZXJyb3IgbWVzc2FnZS5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8RmlsZVtdPn0gZmlsZUNoYW5nZWQgLSBBbiBldmVudCB3aGljaCBpcyBlbWl0dGVkIGVhY2ggdGltZSB0aGUgZmlsZSBsaXN0IGNoYW5nZXMuXG4gKiBAZXZlbnQgY2hhbmdlIC0gQW4gZXZlbnQgd2hpY2ggaXMgZW1pdHRlZCBlYWNoIHRpbWUgdGhlIHVzZXIgbW9kaWZpZXMgdGhlIHZhbHVlLiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZCBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZVxuICogQGV2ZW50IGlucHV0IC0gQW4gZXZlbnQgd2hpY2ggaXMgZW1pdHRlZCBlYWNoIHRpbWUgdGhlIHZhbHVlIGNoYW5nZXMgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItZmlsZS1zZWxlY3RvcicpXG5Ac2xvdFN0YXRlKClcbmV4cG9ydCBjbGFzcyBTYmJGaWxlU2VsZWN0b3JFbGVtZW50IGV4dGVuZHMgU2JiRGlzYWJsZWRNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKExpdEVsZW1lbnQpKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBmaWxlQ2hhbmdlZEV2ZW50OiAnZmlsZUNoYW5nZWQnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGEgZHJvcHpvbmUgYXJlYSBvciBub3QuICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyB2YXJpYW50OiAnZGVmYXVsdCcgfCAnZHJvcHpvbmUnID0gJ2RlZmF1bHQnO1xuXG4gIC8qKiBTaXplIHZhcmlhbnQsIGVpdGhlciBzIG9yIG0uICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIHNpemU6ICdzJyB8ICdtJyA9ICdtJztcblxuICAvKiogV2hldGhlciBtb3JlIHRoYW4gb25lIGZpbGUgY2FuIGJlIHNlbGVjdGVkLiAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBuZXdseSBhZGRlZCBmaWxlcyBzaG91bGQgb3ZlcnJpZGUgdGhlIHByZXZpb3VzbHkgYWRkZWQgb25lcy4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbXVsdGlwbGUtbW9kZScgfSlcbiAgcHVibGljIG11bHRpcGxlTW9kZTogJ2RlZmF1bHQnIHwgJ3BlcnNpc3RlbnQnID0gJ2RlZmF1bHQnO1xuXG4gIC8qKiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgdW5pcXVlIGZpbGUgdHlwZSBzcGVjaWZpZXJzLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXB0Pzogc3RyaW5nO1xuXG4gIC8qKiBUaGUgdGl0bGUgZGlzcGxheWVkIGluIGBkcm9wem9uZWAgdmFyaWFudC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAndGl0bGUtY29udGVudCcgfSkgcHVibGljIHRpdGxlQ29udGVudD86IHN0cmluZztcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSkgcHVibGljIGFjY2Vzc2liaWxpdHlMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBUaGUgcGF0aCBvZiB0aGUgZmlyc3Qgc2VsZWN0ZWQgZmlsZS4gRW1wdHkgc3RyaW5nICgnJykgaWYgbm8gZmlsZSBpcyBzZWxlY3RlZCAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9oaWRkZW5JbnB1dC52YWx1ZSA9IHZhbHVlID8/ICcnO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5maWxlcyA9IFtdO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9oaWRkZW5JbnB1dD8udmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgZmlsZXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgZmlsZXModmFsdWU6IEZpbGVbXSkge1xuICAgIHRoaXMuX2ZpbGVzID0gdmFsdWUgPz8gW107XG5cbiAgICAvLyB1cGRhdGUgdGhlIGlubmVyIGlucHV0XG4gICAgY29uc3QgZHQ6IERhdGFUcmFuc2ZlciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICB0aGlzLmZpbGVzLmZvckVhY2goKGU6IEZpbGUpID0+IGR0Lml0ZW1zLmFkZChlKSk7XG4gICAgdGhpcy5faGlkZGVuSW5wdXQuZmlsZXMgPSBkdC5maWxlcztcblxuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGdldCBmaWxlcygpOiBGaWxlW10ge1xuICAgIHJldHVybiB0aGlzLl9maWxlcztcbiAgfVxuICBwcml2YXRlIF9maWxlczogRmlsZVtdID0gW107XG5cbiAgLyoqIEFuIGV2ZW50IHdoaWNoIGlzIGVtaXR0ZWQgZWFjaCB0aW1lIHRoZSBmaWxlIGxpc3QgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfZmlsZUNoYW5nZWRFdmVudDogRXZlbnRFbWl0dGVyPEZpbGVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiRmlsZVNlbGVjdG9yRWxlbWVudC5ldmVudHMuZmlsZUNoYW5nZWRFdmVudCxcbiAgKTtcblxuICAvLyBTYWZhcmkgaGFzIGEgcGVjdWxpYXIgYmVoYXZpb3Igd2hlbiBkcmFnZ2luZyBmaWxlcyBvbiB0aGUgaW5uZXIgYnV0dG9uIGluICdkcm9wem9uZScgdmFyaWFudDtcbiAgLy8gdGhpcyB3aWxsIHJlcXVpcmUgYSBjb3VudGVyIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGRyYWdFbnRlci9kcmFnTGVhdmUuXG4gIHByaXZhdGUgX2NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfbG9hZEJ1dHRvbiE6IFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQ7XG4gIHByaXZhdGUgX2RyYWdUYXJnZXQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfaGlkZGVuSW5wdXQhOiBIVE1MSW5wdXRFbGVtZW50O1xuICBwcml2YXRlIF9zdWZmaXhlczogc3RyaW5nW10gPSBbJ0InLCAna0InLCAnTUInLCAnR0InLCAnVEInXTtcbiAgcHJpdmF0ZSBfbGl2ZVJlZ2lvbiE6IEhUTUxQYXJhZ3JhcGhFbGVtZW50O1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHRoZSAnZmlsZXMnIHByb3BlcnR5IGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBnZXRGaWxlcygpOiBGaWxlW10ge1xuICAgIHJldHVybiB0aGlzLmZpbGVzO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb24/OiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpbGVzID0gKHN0YXRlIGFzIFtzdHJpbmcsIEZvcm1EYXRhRW50cnlWYWx1ZV1bXSkubWFwKChbXywgdmFsdWVdKSA9PiB2YWx1ZSBhcyBGaWxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVGb3JtVmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgdGhpcy5maWxlcy5mb3JFYWNoKChmaWxlKSA9PiBmb3JtVmFsdWUuYXBwZW5kKHRoaXMubmFtZSwgZmlsZSkpO1xuICAgIHRoaXMuaW50ZXJuYWxzLnNldEZvcm1WYWx1ZShmb3JtVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYmxvY2tFdmVudChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRmlsZUVxdWFsaXR5KGZpbGUxOiBGaWxlLCBmaWxlMjogRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmaWxlMS5uYW1lID09PSBmaWxlMi5uYW1lICYmXG4gICAgICBmaWxlMS5zaXplID09PSBmaWxlMi5zaXplICYmXG4gICAgICBmaWxlMS5sYXN0TW9kaWZpZWQgPT09IGZpbGUyLmxhc3RNb2RpZmllZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY291bnRlcisrO1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5mb3JtRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3NldERyYWdTdGF0ZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIHRydWUpO1xuICAgICAgdGhpcy5fYmxvY2tFdmVudChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX2NvdW50ZXItLTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5kaXNhYmxlZCAmJlxuICAgICAgIXRoaXMuZm9ybURpc2FibGVkICYmXG4gICAgICBldmVudC50YXJnZXQgPT09IHRoaXMuX2RyYWdUYXJnZXQgJiZcbiAgICAgIHRoaXMuX2NvdW50ZXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuX3NldERyYWdTdGF0ZSgpO1xuICAgICAgdGhpcy5fYmxvY2tFdmVudChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25GaWxlRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY291bnRlciA9IDA7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmZvcm1EaXNhYmxlZCkge1xuICAgICAgdGhpcy5fc2V0RHJhZ1N0YXRlKCk7XG4gICAgICB0aGlzLl9ibG9ja0V2ZW50KGV2ZW50KTtcbiAgICAgIHRoaXMuX2NyZWF0ZUZpbGVMaXN0KGV2ZW50LmRhdGFUcmFuc2ZlciEuZmlsZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMuX2xvYWRCdXR0b24udG9nZ2xlQXR0cmlidXRlKCdkYXRhLWZvY3VzLXZpc2libGUnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vbkJsdXIoKTogdm9pZCB7XG4gICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMuX2xvYWRCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWZvY3VzLXZpc2libGUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXREcmFnU3RhdGUoXG4gICAgZHJhZ1RhcmdldDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaXNEcmFnRW50ZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhZ1RhcmdldCA9IGRyYWdUYXJnZXQ7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtYWN0aXZlJywgaXNEcmFnRW50ZXIpO1xuICAgIHRoaXMuX2xvYWRCdXR0b24udG9nZ2xlQXR0cmlidXRlKCdkYXRhLWFjdGl2ZScsIGlzRHJhZ0VudGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRGaWxlcyhldmVudDogRE9NRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlSW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoZmlsZUlucHV0LmZpbGVzKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGaWxlTGlzdChmaWxlSW5wdXQuZmlsZXMpO1xuICAgIH1cbiAgICBmb3J3YXJkRXZlbnRUb0hvc3QoZXZlbnQsIHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRmlsZUxpc3QoZmlsZXM6IEZpbGVMaXN0KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMubXVsdGlwbGVNb2RlICE9PSAncGVyc2lzdGVudCcgfHwgdGhpcy5maWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlcyA9IEFycmF5LmZyb20oZmlsZXMpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAobmV3RmlsZTogRmlsZSk6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgIHRoaXMuZmlsZXMhLmZpbmRJbmRleCgob2xkRmlsZTogRmlsZSkgPT4gdGhpcy5fY2hlY2tGaWxlRXF1YWxpdHkobmV3RmlsZSwgb2xkRmlsZSkpID09PVxuICAgICAgICAgICAgLTEsXG4gICAgICAgIClcbiAgICAgICAgLmNvbmNhdCh0aGlzLmZpbGVzKTtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQTExeUxpdmVSZWdpb24oKTtcbiAgICB0aGlzLl9maWxlQ2hhbmdlZEV2ZW50LmVtaXQodGhpcy5maWxlcyk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVGaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoKGY6IEZpbGUpID0+ICF0aGlzLl9jaGVja0ZpbGVFcXVhbGl0eShmaWxlLCBmKSk7XG4gICAgdGhpcy5fdXBkYXRlQTExeUxpdmVSZWdpb24oKTtcblxuICAgIC8vIERpc3BhdGNoIG5hdGl2ZSBldmVudHMgYXMgaWYgdGhlIHJlc2V0IGlzIGRvbmUgdmlhIHRoZSBmaWxlIHNlbGVjdGlvbiB3aW5kb3cuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7IGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIHRoaXMuX2ZpbGVDaGFuZ2VkRXZlbnQuZW1pdCh0aGlzLmZpbGVzKTtcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGVzIHRoZSBjb3JyZWN0IHVuaXQgZm9yIHRoZSBmaWxlJ3Mgc2l6ZS4gKi9cbiAgcHJpdmF0ZSBfZm9ybWF0RmlsZVNpemUoc2l6ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBpOiBudW1iZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpIC8gTWF0aC5sb2coMTAyNCkpO1xuICAgIHJldHVybiBgJHsoc2l6ZSAvIE1hdGgucG93KDEwMjQsIGkpKS50b0ZpeGVkKDApfSAke3RoaXMuX3N1ZmZpeGVzW2ldfWA7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVBMTF5TGl2ZVJlZ2lvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9saXZlUmVnaW9uLmlubmVyVGV4dCA9IGkxOG5GaWxlU2VsZWN0b3JDdXJyZW50bHlTZWxlY3RlZCh0aGlzLmZpbGVzLm1hcCgoZSkgPT4gZS5uYW1lKSlbXG4gICAgICB0aGlzLl9sYW5ndWFnZS5jdXJyZW50XG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckRlZmF1bHRNb2RlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItc2Vjb25kYXJ5LWJ1dHRvbi1zdGF0aWNcbiAgICAgICAgc2l6ZT0ke3RoaXMuc2l6ZX1cbiAgICAgICAgaWNvbi1uYW1lPVwiZm9sZGVyLW9wZW4tc21hbGxcIlxuICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkfVxuICAgICAgICAke3JlZigoZWw/OiBFbGVtZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9hZEJ1dHRvbiA9IGVsIGFzIFNiYlNlY29uZGFyeUJ1dHRvblN0YXRpY0VsZW1lbnQ7XG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICAke2kxOG5GaWxlU2VsZWN0b3JCdXR0b25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgIDwvc2JiLXNlY29uZGFyeS1idXR0b24tc3RhdGljPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJEcm9wem9uZUFyZWEoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX19kcm9wem9uZS1hcmVhLS1pY29uXCI+XG4gICAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgICBuYW1lPSR7dGhpcy5zaXplID09PSAnbScgPyAnZm9sZGVyLW9wZW4tbWVkaXVtJyA6ICdmb2xkZXItb3Blbi1zbWFsbCd9XG4gICAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYS0tdGl0bGVcIj4ke3RoaXMudGl0bGVDb250ZW50fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZHJvcHpvbmUtYXJlYS0tc3VidGl0bGVcIj5cbiAgICAgICAgICAke2kxOG5GaWxlU2VsZWN0b3JTdWJ0aXRsZUxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2Ryb3B6b25lLWFyZWEtLWJ1dHRvblwiPlxuICAgICAgICAgIDxzYmItc2Vjb25kYXJ5LWJ1dHRvbi1zdGF0aWNcbiAgICAgICAgICAgIHNpemU9JHt0aGlzLnNpemV9XG4gICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkfVxuICAgICAgICAgICAgJHtyZWYoKGVsPzogRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2FkQnV0dG9uID0gZWwgYXMgU2JiU2Vjb25kYXJ5QnV0dG9uU3RhdGljRWxlbWVudDtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7aTE4bkZpbGVTZWxlY3RvckJ1dHRvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIDwvc2JiLXNlY29uZGFyeS1idXR0b24tc3RhdGljPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckZpbGVMaXN0KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBUQUdfTkFNRTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9XG4gICAgICB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgICAgPyB7IFdSQVBQRVI6ICd1bCcsIEVMRU1FTlQ6ICdsaScgfVxuICAgICAgICA6IHsgV1JBUFBFUjogJ2RpdicsIEVMRU1FTlQ6ICdzcGFuJyB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbGl0L2JpbmRpbmctcG9zaXRpb25zICovXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8JHt1bnNhZmVTdGF0aWMoVEFHX05BTUUuV1JBUFBFUil9IGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUtbGlzdFwiPlxuICAgICAgICAke3RoaXMuZmlsZXMubWFwKFxuICAgICAgICAgIChmaWxlOiBGaWxlKSA9PiBodG1sYFxuICAgICAgICAgIDwke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRS5FTEVNRU5UKX0gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZmlsZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZmlsZS1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWZpbGUtc2VsZWN0b3JfX2ZpbGUtbmFtZVwiPiR7ZmlsZS5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZmlsZS1zaXplXCI+JHt0aGlzLl9mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgICAgICAgICBzaXplPSR7dGhpcy5zaXplfVxuICAgICAgICAgICAgICBpY29uLW5hbWU9XCJ0cmFzaC1zbWFsbFwiXG4gICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3JlbW92ZUZpbGUoZmlsZSl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtgJHtpMThuRmlsZVNlbGVjdG9yRGVsZXRlRmlsZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gLSAke2ZpbGUubmFtZX1gfVxuICAgICAgICAgICAgPjwvc2JiLXNlY29uZGFyeS1idXR0b24+XG4gICAgICAgICAgPC8ke3Vuc2FmZVN0YXRpYyhUQUdfTkFNRS5FTEVNRU5UKX0+YCxcbiAgICAgICAgKX1cbiAgICAgIDwvJHt1bnNhZmVTdGF0aWMoVEFHX05BTUUuV1JBUFBFUil9PlxuICAgIGA7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbFxuICAgICAgPyBgJHtpMThuRmlsZVNlbGVjdG9yQnV0dG9uTGFiZWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19IC0gJHt0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbH1gXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3RvclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9faW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgICBAZHJhZ2VudGVyPSR7dGhpcy5fb25EcmFnRW50ZXJ9XG4gICAgICAgICAgQGRyYWdvdmVyPSR7dGhpcy5fYmxvY2tFdmVudH1cbiAgICAgICAgICBAZHJhZ2xlYXZlPSR7dGhpcy5fb25EcmFnTGVhdmV9XG4gICAgICAgICAgQGRyb3A9JHt0aGlzLl9vbkZpbGVEcm9wfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgJHt0aGlzLnZhcmlhbnQgPT09ICdkZWZhdWx0JyA/IHRoaXMuX3JlbmRlckRlZmF1bHRNb2RlKCkgOiB0aGlzLl9yZW5kZXJEcm9wem9uZUFyZWEoKX1cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX192aXN1YWxseS1oaWRkZW5cIlxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWR9XG4gICAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9XG4gICAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0IHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHthcmlhTGFiZWwgfHwgbm90aGluZ31cbiAgICAgICAgICAgICAgQGNoYW5nZT0ke3RoaXMuX3JlYWRGaWxlc31cbiAgICAgICAgICAgICAgQGZvY3VzPSR7dGhpcy5fb25Gb2N1c31cbiAgICAgICAgICAgICAgQGJsdXI9JHt0aGlzLl9vbkJsdXJ9XG4gICAgICAgICAgICAgICR7cmVmKChlbD86IEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRkZW5JbnB1dCA9IGVsIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHBcbiAgICAgICAgICByb2xlPVwic3RhdHVzXCJcbiAgICAgICAgICBjbGFzcz1cInNiYi1maWxlLXNlbGVjdG9yX192aXN1YWxseS1oaWRkZW5cIlxuICAgICAgICAgICR7cmVmKChwPzogRWxlbWVudCkgPT4gKHRoaXMuX2xpdmVSZWdpb24gPSBwIGFzIEhUTUxQYXJhZ3JhcGhFbGVtZW50KSl9XG4gICAgICAgID48L3A+XG4gICAgICAgICR7dGhpcy5maWxlcy5sZW5ndGggPiAwID8gdGhpcy5fcmVuZGVyRmlsZUxpc3QoKSA6IG5vdGhpbmd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItZmlsZS1zZWxlY3Rvcl9fZXJyb3JcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwiZXJyb3JcIj48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWZpbGUtc2VsZWN0b3InOiBTYmJGaWxlU2VsZWN0b3JFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -81,7 +81,7 @@ sbb-icon {
81
81
  --sbb-button-color-default-background: var(--sbb-color-black-alpha-0);
82
82
  --sbb-button-color-hover-background: var(--sbb-color-charcoal);
83
83
  --sbb-button-color-active-background: var(--sbb-color-iron);
84
- --sbb-button-color-disabled-background: var(--sbb-color-black-alpha-0);
84
+ --sbb-button-color-disabled-background: var(--sbb-color-charcoal);
85
85
  --sbb-button-color-disabled-border: var(--sbb-color-smoke);
86
86
  --sbb-button-color-disabled-text: var(--sbb-color-smoke);
87
87
  }
@@ -26,6 +26,10 @@ const style = css`*,
26
26
  --sbb-header-action-translate-y: 0;
27
27
  --sbb-header-action-gap: var(--sbb-spacing-fixed-2x);
28
28
  --sbb-header-action-icon-dimension: var(--sbb-size-icon-ui-small);
29
+ --sbb-header-action-active-border-width: var(--sbb-border-width-2x);
30
+ --sbb-header-action-active-border-color: var(--sbb-color-black);
31
+ --sbb-header-action-active-border-margin-inline: var(--sbb-header-action-padding-inline);
32
+ --sbb-header-action-active-border-scale: 0;
29
33
  --_sbb-header-first-item-padding-shift: calc(-1 * var(--sbb-header-action-padding-inline));
30
34
  --sbb-header-first-item-icon-shift: 0.125rem;
31
35
  --sbb-header-first-item-margin-inline-start: calc(
@@ -36,6 +40,7 @@ const style = css`*,
36
40
  :host {
37
41
  --sbb-header-action-border-color: CanvasText;
38
42
  --sbb-header-action-color: LinkText;
43
+ --sbb-header-action-active-border-width: 0;
39
44
  }
40
45
  }
41
46
 
@@ -60,13 +65,22 @@ const style = css`*,
60
65
  }
61
66
  }
62
67
 
68
+ :host(.sbb-active) {
69
+ --sbb-header-action-active-border-scale: 1;
70
+ }
71
+ @media (forced-colors: active) {
72
+ :host(.sbb-active) {
73
+ --sbb-header-action-border-color: Highlight;
74
+ }
75
+ }
76
+
63
77
  @media (forced-colors: active) {
64
78
  :host([role=button]) {
65
79
  --sbb-header-action-color: ButtonText;
66
80
  }
67
81
  }
68
82
 
69
- :is(.sbb-header-button, .sbb-header-link) {
83
+ .sbb-action-base {
70
84
  font-family: inherit;
71
85
  font-weight: inherit;
72
86
  line-height: inherit;
@@ -86,7 +100,7 @@ const style = css`*,
86
100
  user-select: none;
87
101
  outline: none;
88
102
  }
89
- :is(.sbb-header-button, .sbb-header-link)::before {
103
+ .sbb-action-base::before {
90
104
  position: absolute;
91
105
  content: "";
92
106
  inset: var(--sbb-header-action-background-inset);
@@ -98,14 +112,23 @@ const style = css`*,
98
112
  border: var(--sbb-border-width-1x) solid var(--sbb-header-action-border-color);
99
113
  }
100
114
  @media (forced-colors: active) {
101
- :is(.sbb-header-button, .sbb-header-link)::before {
115
+ .sbb-action-base::before {
102
116
  border-width: var(--sbb-border-width-2x);
103
117
  }
104
118
  }
105
- :host(:focus-visible:not([data-focus-origin=mouse], [data-focus-origin=touch])) :is(.sbb-header-button, .sbb-header-link)::before, :host(:not([data-focus-origin=mouse], [data-focus-origin=touch])) :is(.sbb-header-button, .sbb-header-link):focus-visible::before {
119
+ :host(:focus-visible:not([data-focus-origin=mouse], [data-focus-origin=touch])) .sbb-action-base::before, :host(:not([data-focus-origin=mouse], [data-focus-origin=touch])) .sbb-action-base:focus-visible::before {
106
120
  outline-offset: var(--sbb-focus-outline-offset);
107
121
  outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
108
122
  }
123
+ .sbb-action-base::after {
124
+ content: "";
125
+ position: absolute;
126
+ border-bottom: var(--sbb-header-action-active-border-width) solid var(--sbb-header-action-active-border-color);
127
+ inset: auto 0 calc(-1 * var(--sbb-header-action-active-border-width));
128
+ margin-inline: var(--sbb-header-action-active-border-margin-inline);
129
+ scale: var(--sbb-header-action-active-border-scale);
130
+ transition: scale var(--sbb-header-action-transition-easing) var(--sbb-header-action-transition-duration);
131
+ }
109
132
 
110
133
  .sbb-header-action__wrapper {
111
134
  display: flex;
@@ -146,6 +169,9 @@ const style = css`*,
146
169
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
147
170
  );
148
171
  --sbb-header-action-padding-inline-zero: 0;
172
+ --sbb-header-action-active-border-margin-inline: calc(
173
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
174
+ );
149
175
  }
150
176
  :host([expand-from=zero]) .sbb-header-action__text {
151
177
  border: 0;
@@ -167,6 +193,9 @@ const style = css`*,
167
193
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
168
194
  );
169
195
  --sbb-header-action-padding-inline-zero: 0;
196
+ --sbb-header-action-active-border-margin-inline: calc(
197
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
198
+ );
170
199
  }
171
200
  :host([expand-from=micro]) .sbb-header-action__text {
172
201
  border: 0;
@@ -188,6 +217,9 @@ const style = css`*,
188
217
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
189
218
  );
190
219
  --sbb-header-action-padding-inline-zero: 0;
220
+ --sbb-header-action-active-border-margin-inline: calc(
221
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
222
+ );
191
223
  }
192
224
  :host([expand-from=small]) .sbb-header-action__text {
193
225
  border: 0;
@@ -209,6 +241,9 @@ const style = css`*,
209
241
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
210
242
  );
211
243
  --sbb-header-action-padding-inline-zero: 0;
244
+ --sbb-header-action-active-border-margin-inline: calc(
245
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
246
+ );
212
247
  }
213
248
  :host([expand-from=medium]) .sbb-header-action__text {
214
249
  border: 0;
@@ -230,6 +265,9 @@ const style = css`*,
230
265
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
231
266
  );
232
267
  --sbb-header-action-padding-inline-zero: 0;
268
+ --sbb-header-action-active-border-margin-inline: calc(
269
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
270
+ );
233
271
  }
234
272
  :host([expand-from=large]) .sbb-header-action__text {
235
273
  border: 0;
@@ -251,6 +289,9 @@ const style = css`*,
251
289
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
252
290
  );
253
291
  --sbb-header-action-padding-inline-zero: 0;
292
+ --sbb-header-action-active-border-margin-inline: calc(
293
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
294
+ );
254
295
  }
255
296
  :host([expand-from=wide]) .sbb-header-action__text {
256
297
  border: 0;
@@ -272,6 +313,9 @@ const style = css`*,
272
313
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
273
314
  );
274
315
  --sbb-header-action-padding-inline-zero: 0;
316
+ --sbb-header-action-active-border-margin-inline: calc(
317
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
318
+ );
275
319
  }
276
320
  :host([expand-from=ultra]) .sbb-header-action__text {
277
321
  border: 0;
@@ -293,6 +337,9 @@ const style = css`*,
293
337
  -0.5 * (var(--sbb-header-action-min-width) - var(--sbb-header-action-icon-dimension))
294
338
  );
295
339
  --sbb-header-action-padding-inline-zero: 0;
340
+ --sbb-header-action-active-border-margin-inline: calc(
341
+ 0.5 * (100% - var(--sbb-size-icon-ui-small))
342
+ );
296
343
  }
297
344
  :host([expand-from=ultra--max-content]) .sbb-header-action__text {
298
345
  border: 0;
@@ -343,4 +390,4 @@ const SbbHeaderActionCommonElementMixin = (superClass) => {
343
390
  export {
344
391
  SbbHeaderActionCommonElementMixin
345
392
  };
346
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvaGVhZGVyL2NvbW1vbi9oZWFkZXItYWN0aW9uLWNvbW1vbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQvc3RhdGljLWh0bWwuanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYkFjdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiSG9yaXpvbnRhbEZyb20gfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgU2JiSWNvbk5hbWVNaXhpbiwgdHlwZSBTYmJJY29uTmFtZU1peGluVHlwZSB9IGZyb20gJy4uLy4uL2ljb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9oZWFkZXItYWN0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYkhlYWRlckFjdGlvbkNvbW1vbkVsZW1lbnRNaXhpblR5cGVcbiAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkljb25OYW1lTWl4aW5UeXBlPlxue1xuICBwdWJsaWMgZXhwYW5kRnJvbTogU2JiSG9yaXpvbnRhbEZyb207XG4gIHB1YmxpYyBpY29uTmFtZT86IHN0cmluZztcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkhlYWRlckFjdGlvbkNvbW1vbkVsZW1lbnRNaXhpbiA9IDxcbiAgVCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiQWN0aW9uQmFzZUVsZW1lbnQ+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudE1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudFxuICAgIGV4dGVuZHMgU2JiSWNvbk5hbWVNaXhpbihzdXBlckNsYXNzKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJIZWFkZXJBY3Rpb25Db21tb25FbGVtZW50TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHNldCB0aGUgbWluaW11bSBicmVha3BvaW50IGZyb20gd2hpY2ggdGhlIHRleHQgaXMgZGlzcGxheWVkLlxuICAgICAqIEUuZy4gaWYgc2V0IHRvICdsYXJnZScsIHRoZSB0ZXh0IHdpbGwgYmUgdmlzaWJsZSBmb3IgYnJlYWtwb2ludHMgbGFyZ2UsIHdpZGUsIHVsdHJhLFxuICAgICAqIGFuZCBoaWRkZW4gZm9yIGFsbCB0aGUgb3RoZXJzLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2V4cGFuZC1mcm9tJywgcmVmbGVjdDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBleHBhbmRGcm9tOiBTYmJIb3Jpem9udGFsRnJvbSA9ICdtZWRpdW0nO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1oZWFkZXItYWN0aW9uX193cmFwcGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItaGVhZGVyLWFjdGlvbl9faWNvblwiPiAke3N1cGVyLnJlbmRlckljb25TbG90KCl9IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1oZWFkZXItYWN0aW9uX190ZXh0XCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICBgO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudE1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CYSxNQUFBLG9DQUFvQyxDQUcvQyxlQUNtRTtBQUNuRSxRQUFlLGdDQUFmLE1BQWUsc0NBQ0wsaUJBQWlCLFVBQVUsRUFFckM7QUFBQSxJQUhBLGNBQUE7QUFBQSxZQUFBLEdBQUEsU0FBQTtBQVlFLFdBQU8sYUFBZ0M7QUFBQSxJQUFBO0FBQUEsSUFFcEIsaUJBQWlDO0FBQzNDLGFBQUE7QUFBQTtBQUFBLG1EQUVzQyxNQUFNLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1yRTtBQUFBLEVBQ0Y7QUFwQkUsZ0NBQWMsU0FBeUI7QUFKekMsTUFBZSwrQkFBZjtBQVlTLGtCQUFBO0FBQUEsSUFETixTQUFTLEVBQUUsV0FBVyxlQUFlLFNBQVMsTUFBTTtBQUFBLEVBQUEsR0FYeEMsNkJBWU4sV0FBQSxZQUFBO0FBYUYsU0FBQTtBQUVUOyJ9
393
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZWxlbWVudHMvaGVhZGVyL2NvbW1vbi9oZWFkZXItYWN0aW9uLWNvbW1vbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQvc3RhdGljLWh0bWwuanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYkFjdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiSG9yaXpvbnRhbEZyb20gfSBmcm9tICcuLi8uLi9jb3JlL2ludGVyZmFjZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMuanMnO1xuaW1wb3J0IHsgU2JiSWNvbk5hbWVNaXhpbiwgdHlwZSBTYmJJY29uTmFtZU1peGluVHlwZSB9IGZyb20gJy4uLy4uL2ljb24uanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9oZWFkZXItYWN0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFNiYkhlYWRlckFjdGlvbkNvbW1vbkVsZW1lbnRNaXhpblR5cGVcbiAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYkljb25OYW1lTWl4aW5UeXBlPlxue1xuICBwdWJsaWMgZXhwYW5kRnJvbTogU2JiSG9yaXpvbnRhbEZyb207XG4gIHB1YmxpYyBpY29uTmFtZT86IHN0cmluZztcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IFNiYkhlYWRlckFjdGlvbkNvbW1vbkVsZW1lbnRNaXhpbiA9IDxcbiAgVCBleHRlbmRzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiQWN0aW9uQmFzZUVsZW1lbnQ+LFxuPihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudE1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudFxuICAgIGV4dGVuZHMgU2JiSWNvbk5hbWVNaXhpbihzdXBlckNsYXNzKVxuICAgIGltcGxlbWVudHMgUGFydGlhbDxTYmJIZWFkZXJBY3Rpb25Db21tb25FbGVtZW50TWl4aW5UeXBlPlxuICB7XG4gICAgcHVibGljIHN0YXRpYyBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHNldCB0aGUgbWluaW11bSBicmVha3BvaW50IGZyb20gd2hpY2ggdGhlIHRleHQgaXMgZGlzcGxheWVkLlxuICAgICAqIEUuZy4gaWYgc2V0IHRvICdsYXJnZScsIHRoZSB0ZXh0IHdpbGwgYmUgdmlzaWJsZSBmb3IgYnJlYWtwb2ludHMgbGFyZ2UsIHdpZGUsIHVsdHJhLFxuICAgICAqIGFuZCBoaWRkZW4gZm9yIGFsbCB0aGUgb3RoZXJzLlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2V4cGFuZC1mcm9tJywgcmVmbGVjdDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBleHBhbmRGcm9tOiBTYmJIb3Jpem9udGFsRnJvbSA9ICdtZWRpdW0nO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1oZWFkZXItYWN0aW9uX193cmFwcGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItaGVhZGVyLWFjdGlvbl9faWNvblwiPiAke3N1cGVyLnJlbmRlckljb25TbG90KCl9IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1oZWFkZXItYWN0aW9uX190ZXh0XCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICBgO1xuICAgIH1cbiAgfVxuICByZXR1cm4gU2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiSGVhZGVyQWN0aW9uQ29tbW9uRWxlbWVudE1peGluVHlwZT4gJlxuICAgIFQ7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJhLE1BQUEsb0NBQW9DLENBRy9DLGVBQ21FO0FBQ25FLFFBQWUsZ0NBQWYsTUFBZSxzQ0FDTCxpQkFBaUIsVUFBVSxFQUVyQztBQUFBLElBSEEsY0FBQTtBQUFBLFlBQUEsR0FBQSxTQUFBO0FBWUUsV0FBTyxhQUFnQztBQUFBLElBQUE7QUFBQSxJQUVwQixpQkFBaUM7QUFDM0MsYUFBQTtBQUFBO0FBQUEsbURBRXNDLE1BQU0sZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXJFO0FBQUEsRUFDRjtBQXBCRSxnQ0FBYyxTQUF5QjtBQUp6QyxNQUFlLCtCQUFmO0FBWVMsa0JBQUE7QUFBQSxJQUROLFNBQVMsRUFBRSxXQUFXLGVBQWUsU0FBUyxNQUFNO0FBQUEsRUFBQSxHQVh4Qyw2QkFZTixXQUFBLFlBQUE7QUFhRixTQUFBO0FBRVQ7In0=