@sbb-esta/lyne-elements 4.3.0 → 4.3.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 (59) hide show
  1. package/breadcrumb/breadcrumb/breadcrumb.component.js +11 -11
  2. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +26 -26
  3. package/button/common.js +1 -1
  4. package/button.js +1 -1
  5. package/checkbox/checkbox/checkbox.component.d.ts.map +1 -1
  6. package/checkbox/checkbox/checkbox.component.js +18 -20
  7. package/chip/chip/chip.component.js +10 -10
  8. package/clock/clock.component.d.ts.map +1 -1
  9. package/clock/clock.component.js +36 -38
  10. package/container/sticky-bar/sticky-bar.component.js +1 -1
  11. package/core/styles/core.scss +13 -0
  12. package/core/testing/event-spy.d.ts.map +1 -1
  13. package/core/testing/event-spy.js +4 -4
  14. package/core.css +27 -0
  15. package/custom-elements.json +732 -668
  16. package/development/breadcrumb/breadcrumb/breadcrumb.component.js +6 -19
  17. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +2 -15
  18. package/development/button/common.js +1 -1
  19. package/development/button.js +1 -1
  20. package/development/checkbox/checkbox/checkbox.component.d.ts.map +1 -1
  21. package/development/checkbox/checkbox/checkbox.component.js +5 -4
  22. package/development/chip/chip/chip.component.js +2 -1
  23. package/development/clock/clock.component.d.ts.map +1 -1
  24. package/development/clock/clock.component.js +25 -40
  25. package/development/container/sticky-bar/sticky-bar.component.js +1 -1
  26. package/development/core/testing/event-spy.d.ts.map +1 -1
  27. package/development/core/testing/event-spy.js +3 -3
  28. package/development/form-field/form-field/form-field.component.js +2 -1
  29. package/development/{mini-button-label-common-DzMdb-kV.js → mini-button-label-common-0DeEC1qs.js} +5 -1
  30. package/development/selection-action-panel/selection-action-panel.component.d.ts +1 -0
  31. package/development/selection-action-panel/selection-action-panel.component.d.ts.map +1 -1
  32. package/development/selection-action-panel/selection-action-panel.component.js +27 -3
  33. package/development/stepper/step-label/step-label.component.d.ts +9 -0
  34. package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
  35. package/development/stepper/step-label/step-label.component.js +25 -3
  36. package/development/stepper/stepper/stepper.component.d.ts +5 -3
  37. package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
  38. package/development/stepper/stepper/stepper.component.js +48 -22
  39. package/development/toggle/toggle/toggle.component.d.ts +1 -0
  40. package/development/toggle/toggle/toggle.component.d.ts.map +1 -1
  41. package/development/toggle/toggle/toggle.component.js +19 -10
  42. package/form-field/form-field/form-field.component.js +1 -1
  43. package/{mini-button-label-common-ps7PVXtB.js → mini-button-label-common-BOB7JQKi.js} +1 -1
  44. package/off-brand-theme.css +27 -0
  45. package/package.json +1 -1
  46. package/safety-theme.css +27 -0
  47. package/selection-action-panel/selection-action-panel.component.d.ts +1 -0
  48. package/selection-action-panel/selection-action-panel.component.d.ts.map +1 -1
  49. package/selection-action-panel/selection-action-panel.component.js +25 -16
  50. package/standard-theme.css +27 -0
  51. package/stepper/step-label/step-label.component.d.ts +9 -0
  52. package/stepper/step-label/step-label.component.d.ts.map +1 -1
  53. package/stepper/step-label/step-label.component.js +38 -16
  54. package/stepper/stepper/stepper.component.d.ts +5 -3
  55. package/stepper/stepper/stepper.component.d.ts.map +1 -1
  56. package/stepper/stepper/stepper.component.js +62 -68
  57. package/toggle/toggle/toggle.component.d.ts +1 -0
  58. package/toggle/toggle/toggle.component.d.ts.map +1 -1
  59. package/toggle/toggle/toggle.component.js +46 -44
@@ -151,7 +151,9 @@ let SbbStepperElement = (() => {
151
151
  this._horizontalFrom = (__runInitializers(this, _linear_extraInitializers), null);
152
152
  __privateSet(this, _orientation_accessor_storage, __runInitializers(this, _orientation_initializers, "horizontal"));
153
153
  __privateSet(this, _size_accessor_storage, (__runInitializers(this, _orientation_extraInitializers), __runInitializers(this, _size_initializers, isLean() ? "s" : "m")));
154
- this._loaded = (__runInitializers(this, _size_extraInitializers), false);
154
+ this._requestedSelected = (__runInitializers(this, _size_extraInitializers), null);
155
+ this._requestedSelectedIndex = null;
156
+ this._loaded = false;
155
157
  this._resizeObserverTimeout = null;
156
158
  this._mediaMatcher = new SbbMediaMatcherController(this, {});
157
159
  this._onStepperResize = () => {
@@ -171,7 +173,7 @@ let SbbStepperElement = (() => {
171
173
  set linear(value) {
172
174
  __privateSet(this, _linear_accessor_storage, value);
173
175
  }
174
- /** Overrides the behaviour of `orientation` property. */
176
+ /** Overrides the behavior of `orientation` property. */
175
177
  set horizontalFrom(value) {
176
178
  this._horizontalFrom = value && breakpointMap[value] ? value : null;
177
179
  if (this._horizontalFrom && this._loaded) {
@@ -203,6 +205,7 @@ let SbbStepperElement = (() => {
203
205
  if (this._loaded) {
204
206
  this._select(step);
205
207
  }
208
+ this._requestedSelected = step;
206
209
  }
207
210
  get selected() {
208
211
  return this.querySelector?.("sbb-step:is(:state(selected),[state--selected])") ?? null;
@@ -212,16 +215,28 @@ let SbbStepperElement = (() => {
212
215
  if (this._loaded && index !== null) {
213
216
  this._select(this.steps[index]);
214
217
  }
218
+ this._requestedSelectedIndex = index;
215
219
  }
216
220
  get selectedIndex() {
217
221
  return this.selected ? this.steps.indexOf(this.selected) : null;
218
222
  }
219
223
  /** The steps of the stepper. */
220
224
  get steps() {
221
- return Array.from(this.querySelectorAll?.("sbb-step") ?? []);
225
+ const steps = [];
226
+ this.querySelectorAll?.("sbb-step").forEach((step) => {
227
+ customElements.upgrade(step);
228
+ steps.push(step);
229
+ });
230
+ return steps;
222
231
  }
223
232
  get _enabledSteps() {
224
- return this.steps.filter((s) => !s.label?.hasAttribute("disabled"));
233
+ return this.steps.filter((s) => {
234
+ if (s.label) {
235
+ customElements.upgrade(s.label);
236
+ return !s.label.disabled;
237
+ }
238
+ return false;
239
+ });
225
240
  }
226
241
  /** Selects the next step. */
227
242
  next() {
@@ -248,21 +263,22 @@ let SbbStepperElement = (() => {
248
263
  this.selected?.label?.focus();
249
264
  }
250
265
  }
251
- _isValidStep(step) {
252
- if (!step || !this.linear && step.label?.hasAttribute("disabled")) {
266
+ _isSelectable(step) {
267
+ if (step) {
268
+ customElements.upgrade(step);
269
+ if (step.label) {
270
+ customElements.upgrade(step.label);
271
+ if (!this.linear && step.label.disabled) {
272
+ return false;
273
+ }
274
+ }
275
+ return true;
276
+ } else {
253
277
  return false;
254
278
  }
255
- if (this.linear && !this.selected) {
256
- return step === this.steps[0];
257
- }
258
- if (this.linear && this.selectedIndex !== null) {
259
- const index = this.steps.indexOf(step);
260
- return index < this.selectedIndex || index === this.selectedIndex + 1;
261
- }
262
- return true;
263
279
  }
264
280
  _select(step) {
265
- if (!this._isValidStep(step)) {
281
+ if (!this._isSelectable(step) || step === this.selected) {
266
282
  return;
267
283
  }
268
284
  const currentIndex = this.selectedIndex;
@@ -322,10 +338,9 @@ let SbbStepperElement = (() => {
322
338
  this._setStepperHeight(e.target);
323
339
  }
324
340
  _configure() {
325
- const steps = this.steps;
326
- steps.forEach((s) => s.configure(this._loaded));
327
- steps.filter((s) => s.label).map((s) => s.label).forEach((label, i, array) => {
328
- label.configure(i + 1, array.length, this._loaded);
341
+ this.steps.forEach((step, i, array) => {
342
+ step.configure(this._loaded);
343
+ step.label?.configure(i + 1, array.length, this._loaded);
329
344
  });
330
345
  this._select(this.selected || this._enabledSteps[0]);
331
346
  }
@@ -343,7 +358,11 @@ let SbbStepperElement = (() => {
343
358
  }
344
359
  _configureLinearMode() {
345
360
  this.steps.forEach((step, index) => {
346
- step.label?.toggleAttribute("disabled", this.linear && index > this.selectedIndex || !this.linear && step.label.matches(":is(:state(disabled),[state--disabled])"));
361
+ if (!step.label) {
362
+ return;
363
+ }
364
+ customElements.upgrade(step.label);
365
+ step.label.disable(this.linear && index > this.selectedIndex || !this.linear && step.label.matches(":is(:state(user-disabled),[state--user-disabled])"));
347
366
  });
348
367
  }
349
368
  connectedCallback() {
@@ -361,7 +380,14 @@ let SbbStepperElement = (() => {
361
380
  super.firstUpdated(changedProperties);
362
381
  this.updateComplete.then(() => {
363
382
  this._loaded = true;
364
- this.selectedIndex = this.linear ? 0 : Number(this.getAttribute("selected-index")) || 0;
383
+ this._configure();
384
+ if (this._requestedSelected && this.steps.indexOf(this._requestedSelected) !== -1) {
385
+ this.selectedIndex = this.steps.indexOf(this._requestedSelected);
386
+ } else if (this._requestedSelectedIndex) {
387
+ this.selectedIndex = this._requestedSelectedIndex;
388
+ } else {
389
+ this.selectedIndex = 0;
390
+ }
365
391
  this._observer.observe(this);
366
392
  this._checkOrientation();
367
393
  setTimeout(() => this.internals.states.delete("disable-animation"), DEBOUNCE_TIME);
@@ -443,4 +469,4 @@ export {
443
469
  SbbStepChangeEvent,
444
470
  SbbStepperElement
445
471
  };
446
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9zdGVwcGVyL3N0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJzZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvaW50ZXJzZWN0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4LCBpc0Fycm93S2V5UHJlc3NlZCB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS50cyc7XG5pbXBvcnQge1xuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRBYm92ZSxcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRVbHRyYUFuZEFib3ZlLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFplcm9BbmRBYm92ZSxcbn0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy9tZWRpYS1tYXRjaGVycy1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy50cyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkhvcml6b250YWxGcm9tLCBTYmJPcmllbnRhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy50cyc7XG5pbXBvcnQgeyBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sIFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJTdGVwRWxlbWVudCwgU2JiU3RlcFZhbGlkYXRlRXZlbnREZXRhaWxzIH0gZnJvbSAnLi4vc3RlcC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0ZXBwZXIuc2Nzcz9saXQmaW5saW5lJztcblxuY29uc3QgREVCT1VOQ0VfVElNRSA9IDE1MDtcblxuY29uc3QgYnJlYWtwb2ludE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgemVybzogU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRaZXJvQW5kQWJvdmUsXG4gIHNtYWxsOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQWJvdmUsXG4gIGxhcmdlOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIHVsdHJhOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFVsdHJhQW5kQWJvdmUsXG59O1xuXG5leHBvcnQgY2xhc3MgU2JiU3RlcENoYW5nZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAvKiogVGhlIGluZGV4IG9mIHRoZSBuZXdseSBzZWxlY3RlZCBzdGVwLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbDtcblxuICAvKiogVGhlIGluZGV4IG9mIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHN0ZXAuICovXG4gIHB1YmxpYyByZWFkb25seSBwcmV2aW91c0luZGV4OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBUaGUgbmV3bHkgc2VsZWN0ZWQgc3RlcCBlbGVtZW50LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqIFRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHN0ZXAgZWxlbWVudC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZXZpb3VzU3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIHByZXZpb3VzSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgc2VsZWN0ZWRTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGwsXG4gICAgcHJldmlvdXNTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGwsXG4gICkge1xuICAgIHN1cGVyKCdzdGVwY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgdGhpcy5zZWxlY3RlZFN0ZXAgPSBzZWxlY3RlZFN0ZXA7XG4gICAgdGhpcy5wcmV2aW91c1N0ZXAgPSBwcmV2aW91c1N0ZXA7XG4gIH1cbn1cbi8qKlxuICogUHJvdmlkZXMgYSBzdHJ1Y3R1cmVkLCBzdGVwLWJ5LXN0ZXAgd29ya2Zsb3cgZm9yIHVzZXIgaW50ZXJhY3Rpb25zLlxuICogQHNsb3QgLSBQcm92aWRlIGEgYHNiYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyYCBhbmQgYSBgc2JiLWV4cGFuc2lvbi1wYW5lbC1jb250ZW50YCB0byB0aGUgc3RlcHBlci5cbiAqIEBzbG90IHN0ZXAtbGFiZWwgLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgYW4gYHNiYi1zdGVwLWxhYmVsYC5cbiAqIEBzbG90IHN0ZXAgLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgYW4gYHNiYi1zdGVwYC5cbiAqIEBldmVudCB7U2JiU3RlcENoYW5nZUV2ZW50fSBzdGVwY2hhbmdlIC0gRW1pdHMgd2hlbmV2ZXIgYSBzdGVwIHdhcyBjaGFuZ2VkLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItc3RlcHBlcicpXG5jbGFzcyBTYmJTdGVwcGVyRWxlbWVudCBleHRlbmRzIFNiYkh5ZHJhdGlvbk1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHN0ZXBjaGFuZ2U6ICdzdGVwY2hhbmdlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKipcbiAgICogSWYgdGhlIHNiYi1zdGVwcGVyIGlzIHVzZWQgaW4gYSBzYmItZGlhbG9nLCB0aGUgbWFya2VyIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IHdpbGwgbm90IGFwcGVhcixcbiAgICogYmVjYXVzZSB0aGUgY2FsY3VsYXRpb25zIGFyZSBkb25lIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQsIHNvIHRoZSBtYXJrZXIgaGFzIGEgd2lkdGggb2YgMDtcbiAgICogdGhlIHNhbWUgaGFwcGVucyBmb3IgdGhlIHN0ZXBwZXIgaGVpZ2h0LlxuICAgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0IHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB2aXNpYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIGNhbGxiYWNrOiAoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLmludGVyc2VjdGlvblJhdGlvID4gMCkge1xuICAgICAgICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIG9ubHkgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIGxhYmVscyBjYW4gYmUgY2xpY2tlZCBhbmQgc2VsZWN0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsaW5lYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT3ZlcnJpZGVzIHRoZSBiZWhhdmlvdXIgb2YgYG9yaWVudGF0aW9uYCBwcm9wZXJ0eS4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaG9yaXpvbnRhbC1mcm9tJywgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IGhvcml6b250YWxGcm9tKHZhbHVlOiBTYmJIb3Jpem9udGFsRnJvbSB8IG51bGwpIHtcbiAgICB0aGlzLl9ob3Jpem9udGFsRnJvbSA9IHZhbHVlICYmIGJyZWFrcG9pbnRNYXBbdmFsdWVdID8gdmFsdWUgOiBudWxsO1xuICAgIGlmICh0aGlzLl9ob3Jpem9udGFsRnJvbSAmJiB0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuX2NoZWNrT3JpZW50YXRpb24oKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBob3Jpem9udGFsRnJvbSgpOiBTYmJIb3Jpem9udGFsRnJvbSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9ob3Jpem9udGFsRnJvbTtcbiAgfVxuICBwcml2YXRlIF9ob3Jpem9udGFsRnJvbTogU2JiSG9yaXpvbnRhbEZyb20gfCBudWxsID0gbnVsbDtcblxuICAvKiogU3RlcHMgb3JpZW50YXRpb24sIGVpdGhlciBob3Jpem9udGFsIG9yIHZlcnRpY2FsLiAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBvcmllbnRhdGlvbjogU2JiT3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIHMgb3IgbS5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ3MnIHwgJ20nID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RlcC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuX3NlbGVjdChzdGVwKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBTYmJTdGVwRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3I/LjxTYmJTdGVwRWxlbWVudD4oJ3NiYi1zdGVwOnN0YXRlKHNlbGVjdGVkKScpID8/IG51bGw7XG4gIH1cblxuICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzdGVwIGluZGV4LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzZWxlY3RlZC1pbmRleCcsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlciB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9zZWxlY3QodGhpcy5zdGVwc1tpbmRleF0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQgPyB0aGlzLnN0ZXBzLmluZGV4T2YodGhpcy5zZWxlY3RlZCkgOiBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBzdGVwcyBvZiB0aGUgc3RlcHBlci4gKi9cbiAgcHVibGljIGdldCBzdGVwcygpOiBTYmJTdGVwRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2JiLXN0ZXAnKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZW5hYmxlZFN0ZXBzKCk6IFNiYlN0ZXBFbGVtZW50W10ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLmZpbHRlcigocykgPT4gIXMubGFiZWw/Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXJUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7fSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Jlc2l6ZWNoYW5nZScsIChlOiBFdmVudCkgPT4gdGhpcy5fb25TZWxlY3RlZFN0ZXBSZXNpemUoZSkpO1xuICB9XG5cbiAgLyoqIFNlbGVjdHMgdGhlIG5leHQgc3RlcC4gKi9cbiAgcHVibGljIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4ICsgMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3RzIHRoZSBwcmV2aW91cyBzdGVwLiAqL1xuICBwdWJsaWMgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4IC0gMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGZvcm0gaW4gd2hpY2ggdGhlIHN0ZXBwZXIgaXMgbmVzdGVkIG9yIGV2ZXJ5IGZvcm0gb2YgZWFjaCBzdGVwLCBpZiBhbnkuICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0Rm9ybSA9IHRoaXMuY2xvc2VzdCgnZm9ybScpO1xuICAgIGlmIChjbG9zZXN0Rm9ybSkge1xuICAgICAgY2xvc2VzdEZvcm0ucmVzZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdmb3JtJykuZm9yRWFjaCgoZm9ybSkgPT4gZm9ybS5yZXNldCgpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgICAvLyBJbiBjYXNlIHRoZSBmb2N1cyBpcyBjdXJyZW50bHkgaW5zaWRlIHRoZSBzdGVwcGVyLCB3ZSByZXNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0L3NlbGVjdGVkIHN0ZXAgbGFiZWwuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJ3NiYi1zdGVwcGVyJykgPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQ/LmxhYmVsPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWRTdGVwKHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghc3RlcCB8fCAoIXRoaXMubGluZWFyICYmIHN0ZXAubGFiZWw/Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5saW5lYXIgJiYgIXRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybiBzdGVwID09PSB0aGlzLnN0ZXBzWzBdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxpbmVhciAmJiB0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGVwcy5pbmRleE9mKHN0ZXApO1xuICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5zZWxlY3RlZEluZGV4IHx8IGluZGV4ID09PSB0aGlzLnNlbGVjdGVkSW5kZXggKyAxO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0KHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNWYWxpZFN0ZXAoc3RlcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4O1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zZWxlY3RlZDtcbiAgICBjb25zdCB2YWxpZGF0ZVBheWxvYWQ6IFNiYlN0ZXBWYWxpZGF0ZUV2ZW50RGV0YWlscyA9IHtcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgIGN1cnJlbnRTdGVwLFxuICAgICAgbmV4dEluZGV4OiB0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwgPyB0aGlzLnNlbGVjdGVkSW5kZXggKyAxIDogbnVsbCxcbiAgICAgIG5leHRTdGVwOiB0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwgPyB0aGlzLnN0ZXBzW3RoaXMuc2VsZWN0ZWRJbmRleCArIDFdIDogbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0ZWQudmFsaWRhdGUodmFsaWRhdGVQYXlsb2FkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkO1xuICAgIGN1cnJlbnQ/LmRlc2VsZWN0KCk7XG4gICAgc3RlcCEuc2VsZWN0KCk7XG5cbiAgICAvKiogQGludGVybmFsIG9ubHkgdG8gcHJvdmlkZSBkb3VibGUgZW50cnkgaW4gZG9jcy4gSXQgaXMgYSBwdWJsaWMgZXZlbnQhICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IFNiYlN0ZXBDaGFuZ2VFdmVudCh0aGlzLnNlbGVjdGVkSW5kZXgsIGN1cnJlbnRJbmRleCwgdGhpcy5zZWxlY3RlZCwgY3VycmVudFN0ZXApLFxuICAgICk7XG5cbiAgICB0aGlzLl9zZXRNYXJrZXJTaXplKCk7XG4gICAgdGhpcy5fc2V0U3RlcHBlckhlaWdodChzdGVwKTtcbiAgICB0aGlzLl9jb25maWd1cmVMaW5lYXJNb2RlKCk7XG4gICAgLy8gSW4gY2FzZSB0aGUgZm9jdXMgaXMgY3VycmVudGx5IGluc2lkZSB0aGUgc3RlcHBlciwgd2UgZm9jdXMgdGhlIHNlbGVjdGVkIHN0ZXAgbGFiZWwuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJ3NiYi1zdGVwcGVyJykgPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQ/LmxhYmVsPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldE1hcmtlclNpemUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2xvYWRlZCB8fFxuICAgICAgIXRoaXMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAhdGhpcy5zZWxlY3RlZC5sYWJlbFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZC5sYWJlbC5vZmZzZXRMZWZ0ICsgdGhpcy5zZWxlY3RlZC5sYWJlbC5vZmZzZXRXaWR0aFxuICAgICAgICA6IHRoaXMuX2NhbGN1bGF0ZUxhYmVsT2Zmc2V0VG9wKCk7XG5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1zdGVwcGVyLW1hcmtlci1zaXplJywgYCR7b2Zmc2V0fXB4YCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RlcHBlciBoZWlnaHQgYmFzZWQgb24gdGhlIGhlaWdodCBvZiB0aGUgcHJvdmlkZWQgc3RlcC5cbiAgICovXG4gIHByaXZhdGUgX3NldFN0ZXBwZXJIZWlnaHQoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgJiYgc3RlcC5zaGFkb3dSb290KSB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQ6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCA9IHN0ZXAuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuc2JiLXN0ZXAnKTtcbiAgICAgIGlmIChpbm5lckVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLXN0ZXBwZXItY29udGVudC1oZWlnaHQnLCBgJHtpbm5lckVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlTGFiZWxPZmZzZXRUb3AoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnN0ZXBzKSB7XG4gICAgICBpZiAoc3RlcCA9PT0gdGhpcy5zZWxlY3RlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG9mZnNldCA9IHN0ZXAubGFiZWwhLm9mZnNldEhlaWdodCArIG9mZnNldDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIG9mZnNldCArXG4gICAgICB0aGlzLnNlbGVjdGVkIS5sYWJlbCEub2Zmc2V0SGVpZ2h0ISArXG4gICAgICBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcykuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zYmItc3BhY2luZy1maXhlZC02eCcpKSAqXG4gICAgICAgIDE2ICpcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uU2VsZWN0ZWRTdGVwUmVzaXplKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc2V0U3RlcHBlckhlaWdodChlLnRhcmdldCBhcyBTYmJTdGVwRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmUoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0ZXBzO1xuICAgIHN0ZXBzLmZvckVhY2goKHMpID0+IHMuY29uZmlndXJlKHRoaXMuX2xvYWRlZCkpO1xuICAgIHN0ZXBzXG4gICAgICAuZmlsdGVyKChzKSA9PiBzLmxhYmVsKVxuICAgICAgLm1hcCgocykgPT4gcy5sYWJlbCEpXG4gICAgICAuZm9yRWFjaCgobGFiZWwsIGksIGFycmF5KSA9PiB7XG4gICAgICAgIGxhYmVsLmNvbmZpZ3VyZShpICsgMSwgYXJyYXkubGVuZ3RoLCB0aGlzLl9sb2FkZWQpO1xuICAgICAgfSk7XG4gICAgdGhpcy5fc2VsZWN0KHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5fZW5hYmxlZFN0ZXBzWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUxhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzLmZvckVhY2goKHN0ZXApID0+IHtcbiAgICAgIHN0ZXAuc2xvdCA9IHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICdzdGVwJyA6ICdzdGVwLWxhYmVsJztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrT3JpZW50YXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbEZyb20pIHtcbiAgICAgIHRoaXMub3JpZW50YXRpb24gPSB0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhicmVha3BvaW50TWFwW3RoaXMuaG9yaXpvbnRhbEZyb21dKVxuICAgICAgICA/ICdob3Jpem9udGFsJ1xuICAgICAgICA6ICd2ZXJ0aWNhbCc7XG4gICAgICB0aGlzLl91cGRhdGVMYWJlbHMoKTtcbiAgICB9XG4gICAgLy8gVGhlIHRpbWVvdXQgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYXJrZXIgdGFrZXMgdGhlIGNvcnJlY3Qgc3RlcC1sYWJlbCBzaXplLlxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc2V0TWFya2VyU2l6ZSgpLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uU3RlcHBlclJlc2l6ZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9jaGVja09yaWVudGF0aW9uKCk7XG4gICAgdGhpcy5fc2V0U3RlcHBlckhlaWdodCh0aGlzLnNlbGVjdGVkKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVzaXplT2JzZXJ2ZXJUaW1lb3V0ISk7XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZGlzYWJsZS1hbmltYXRpb24nKTtcblxuICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbiB3aGVuIHJlc2l6aW5nIHRvIGF2b2lkIHN0cmFuZ2UgdHJhbnNpdGlvbiBlZmZlY3RzLlxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyVGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdkaXNhYmxlLWFuaW1hdGlvbicpLFxuICAgICAgREVCT1VOQ0VfVElNRSxcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZUxpbmVhck1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcy5mb3JFYWNoKChzdGVwLCBpbmRleCkgPT4ge1xuICAgICAgc3RlcC5sYWJlbD8udG9nZ2xlQXR0cmlidXRlKFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAodGhpcy5saW5lYXIgJiYgaW5kZXggPiB0aGlzLnNlbGVjdGVkSW5kZXghKSB8fFxuICAgICAgICAgICghdGhpcy5saW5lYXIgJiYgc3RlcC5sYWJlbC5tYXRjaGVzKCc6c3RhdGUoZGlzYWJsZWQpJykpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vblN0ZXBwZXJSZXNpemUsIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnZGlzYWJsZS1hbmltYXRpb24nLCAhdGhpcy5fbG9hZGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vblN0ZXBwZXJSZXNpemUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5saW5lYXIgPyAwIDogTnVtYmVyKHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZC1pbmRleCcpKSB8fCAwO1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbiAgICAgIHRoaXMuX2NoZWNrT3JpZW50YXRpb24oKTtcbiAgICAgIC8vIFJlbW92ZSBkaXNhYmxlLWFuaW1hdGlvbiBzdGF0ZSBhZnRlciBjb21wb25lbnQgaW5pdFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdkaXNhYmxlLWFuaW1hdGlvbicpLCBERUJPVU5DRV9USU1FKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ29yaWVudGF0aW9uJykgJiYgIXRoaXMuaG9yaXpvbnRhbEZyb20pIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUxhYmVscygpO1xuICAgICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaW5lYXInKSAmJiB0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZUxpbmVhck1vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdzaXplJykpIHtcbiAgICAgIHRoaXMuX3NldE1hcmtlclNpemUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRTdGVwczogU2JiU3RlcEVsZW1lbnRbXSA9IHRoaXMuX2VuYWJsZWRTdGVwcztcblxuICAgIGlmIChcbiAgICAgICFlbmFibGVkU3RlcHMgfHxcbiAgICAgIC8vIGRvbid0IHRyYXAgbmVzdGVkIGhhbmRsaW5nXG4gICAgICAoKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpICE9PSB0aGlzICYmIChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93S2V5UHJlc3NlZChldnQpKSB7XG4gICAgICBjb25zdCBjdXJyZW50OiBudW1iZXIgPSBlbmFibGVkU3RlcHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkISk7XG4gICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZ0LCBjdXJyZW50LCBlbmFibGVkU3RlcHMubGVuZ3RoKTtcbiAgICAgIHRoaXMuX3NlbGVjdChlbmFibGVkU3RlcHNbbmV4dEluZGV4XSk7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3RlcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXN0ZXBwZXJfX2xhYmVsc1wiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInN0ZXAtbGFiZWxcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX2NvbmZpZ3VyZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zdGVwcGVyX19zdGVwc1wiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGVwXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jb25maWd1cmV9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc3RlcHBlcic6IFNiYlN0ZXBwZXJFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBLE1BQU0sZ0JBQWdCO0FBRXRCLE1BQU0sZ0JBQXdDO0FBQUEsRUFDNUMsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsT0FBTzs7QUFHSCxNQUFPLDJCQUEyQixNQUFLO0FBQUEsRUFhM0MsWUFDRSxlQUNBLGVBQ0EsY0FDQSxjQUFtQztBQUVuQyxVQUFNLGNBQWMsRUFBRSxTQUFTLE1BQU0sVUFBVSxNQUFNO0FBQ3JELFNBQUssZ0JBQWdCO0FBQ3JCLFNBQUssZ0JBQWdCO0FBQ3JCLFNBQUssZUFBZTtBQUNwQixTQUFLLGVBQWU7QUFBQSxFQUN0QjtBQUNEO0lBVUsscUJBQWlCLE1BQUE7OzBCQUR0QixjQUFjLGFBQWEsQ0FBQzs7OztBQUNHLE1BQUEsY0FBQSxrQkFBa0IseUJBQXlCLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFBOUQsRUFBQSxtQkFBUSxZQUF1RDtBQUFBLElBdUZyRixjQUFBO0FBQ0UsWUFBQTtBQTdERjtBQWlCQTtBQU02QjtBQXRDckIsV0FBQSxhQVpKLGtCQUFBLE1BQUEsMEJBQUEsR0FZZ0IsSUFBSSx1QkFBdUIsTUFBTTtBQUFBLFFBQ25ELFFBQVE7QUFBQSxRQUNSLFVBQVUsQ0FBQyxZQUFXO0FBQ3BCLGtCQUFRLFFBQVEsQ0FBQyxNQUFLO0FBQ3BCLGdCQUFJLEVBQUUsb0JBQW9CLEdBQUc7QUFDM0IsbUJBQUssa0JBQWtCLEtBQUssUUFBUTtBQUNwQyxtQkFBSyxlQUFBO0FBQUEsWUFDUDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUFBLENBQ0Q7QUFLZSx5QkFBQSwwQkFBQSxrQkFBQSxNQUFBLHNCQUFrQixLQUFL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
472
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy9zdGVwcGVyL3N0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJzZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvaW50ZXJzZWN0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4LCBpc0Fycm93S2V5UHJlc3NlZCB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS50cyc7XG5pbXBvcnQge1xuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRBYm92ZSxcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRVbHRyYUFuZEFib3ZlLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFplcm9BbmRBYm92ZSxcbn0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy9tZWRpYS1tYXRjaGVycy1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy50cyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkhvcml6b250YWxGcm9tLCBTYmJPcmllbnRhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy50cyc7XG5pbXBvcnQgeyBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sIFNiYkh5ZHJhdGlvbk1peGluIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJTdGVwRWxlbWVudCwgU2JiU3RlcFZhbGlkYXRlRXZlbnREZXRhaWxzIH0gZnJvbSAnLi4vc3RlcC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0ZXBwZXIuc2Nzcz9saXQmaW5saW5lJztcblxuY29uc3QgREVCT1VOQ0VfVElNRSA9IDE1MDtcblxuY29uc3QgYnJlYWtwb2ludE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgemVybzogU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRaZXJvQW5kQWJvdmUsXG4gIHNtYWxsOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFNtYWxsQW5kQWJvdmUsXG4gIGxhcmdlOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIHVsdHJhOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFVsdHJhQW5kQWJvdmUsXG59O1xuXG5leHBvcnQgY2xhc3MgU2JiU3RlcENoYW5nZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAvKiogVGhlIGluZGV4IG9mIHRoZSBuZXdseSBzZWxlY3RlZCBzdGVwLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbDtcblxuICAvKiogVGhlIGluZGV4IG9mIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHN0ZXAuICovXG4gIHB1YmxpYyByZWFkb25seSBwcmV2aW91c0luZGV4OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBUaGUgbmV3bHkgc2VsZWN0ZWQgc3RlcCBlbGVtZW50LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqIFRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHN0ZXAgZWxlbWVudC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZXZpb3VzU3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIHByZXZpb3VzSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgc2VsZWN0ZWRTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGwsXG4gICAgcHJldmlvdXNTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGwsXG4gICkge1xuICAgIHN1cGVyKCdzdGVwY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgdGhpcy5zZWxlY3RlZFN0ZXAgPSBzZWxlY3RlZFN0ZXA7XG4gICAgdGhpcy5wcmV2aW91c1N0ZXAgPSBwcmV2aW91c1N0ZXA7XG4gIH1cbn1cbi8qKlxuICogUHJvdmlkZXMgYSBzdHJ1Y3R1cmVkLCBzdGVwLWJ5LXN0ZXAgd29ya2Zsb3cgZm9yIHVzZXIgaW50ZXJhY3Rpb25zLlxuICogQHNsb3QgLSBQcm92aWRlIGEgYHNiYi1leHBhbnNpb24tcGFuZWwtaGVhZGVyYCBhbmQgYSBgc2JiLWV4cGFuc2lvbi1wYW5lbC1jb250ZW50YCB0byB0aGUgc3RlcHBlci5cbiAqIEBzbG90IHN0ZXAtbGFiZWwgLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgYW4gYHNiYi1zdGVwLWxhYmVsYC5cbiAqIEBzbG90IHN0ZXAgLSBVc2UgdGhpcyBzbG90IHRvIHByb3ZpZGUgYW4gYHNiYi1zdGVwYC5cbiAqIEBldmVudCB7U2JiU3RlcENoYW5nZUV2ZW50fSBzdGVwY2hhbmdlIC0gRW1pdHMgd2hlbmV2ZXIgYSBzdGVwIHdhcyBjaGFuZ2VkLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItc3RlcHBlcicpXG5jbGFzcyBTYmJTdGVwcGVyRWxlbWVudCBleHRlbmRzIFNiYkh5ZHJhdGlvbk1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHN0ZXBjaGFuZ2U6ICdzdGVwY2hhbmdlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKipcbiAgICogSWYgdGhlIHNiYi1zdGVwcGVyIGlzIHVzZWQgaW4gYSBzYmItZGlhbG9nLCB0aGUgbWFya2VyIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IHdpbGwgbm90IGFwcGVhcixcbiAgICogYmVjYXVzZSB0aGUgY2FsY3VsYXRpb25zIGFyZSBkb25lIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQsIHNvIHRoZSBtYXJrZXIgaGFzIGEgd2lkdGggb2YgMDtcbiAgICogdGhlIHNhbWUgaGFwcGVucyBmb3IgdGhlIHN0ZXBwZXIgaGVpZ2h0LlxuICAgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0IHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB2aXNpYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIGNhbGxiYWNrOiAoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLmludGVyc2VjdGlvblJhdGlvID4gMCkge1xuICAgICAgICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIG9ubHkgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIGxhYmVscyBjYW4gYmUgY2xpY2tlZCBhbmQgc2VsZWN0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsaW5lYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZiBgb3JpZW50YXRpb25gIHByb3BlcnR5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Jpem9udGFsLWZyb20nLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBzZXQgaG9yaXpvbnRhbEZyb20odmFsdWU6IFNiYkhvcml6b250YWxGcm9tIHwgbnVsbCkge1xuICAgIHRoaXMuX2hvcml6b250YWxGcm9tID0gdmFsdWUgJiYgYnJlYWtwb2ludE1hcFt2YWx1ZV0gPyB2YWx1ZSA6IG51bGw7XG4gICAgaWYgKHRoaXMuX2hvcml6b250YWxGcm9tICYmIHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5fY2hlY2tPcmllbnRhdGlvbigpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGhvcml6b250YWxGcm9tKCk6IFNiYkhvcml6b250YWxGcm9tIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxGcm9tO1xuICB9XG4gIHByaXZhdGUgX2hvcml6b250YWxGcm9tOiBTYmJIb3Jpem9udGFsRnJvbSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBTdGVwcyBvcmllbnRhdGlvbiwgZWl0aGVyIGhvcml6b250YWwgb3IgdmVydGljYWwuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG9yaWVudGF0aW9uOiBTYmJPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgcyBvciBtLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAncycgfCAnbScgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzdGVwLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWQoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHN0ZXApO1xuICAgIH1cbiAgICB0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZCA9IHN0ZXA7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBTYmJTdGVwRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3I/LjxTYmJTdGVwRWxlbWVudD4oJ3NiYi1zdGVwOnN0YXRlKHNlbGVjdGVkKScpID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWVzdGVkU2VsZWN0ZWQ6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RlcCBpbmRleC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2VsZWN0ZWQtaW5kZXgnLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIHNldCBzZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCAmJiBpbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbaW5kZXhdKTtcbiAgICB9XG4gICAgdGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJbmRleCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZCA/IHRoaXMuc3RlcHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkKSA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWVzdGVkU2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBzdGVwcyBvZiB0aGUgc3RlcHBlci4gKi9cbiAgcHVibGljIGdldCBzdGVwcygpOiBTYmJTdGVwRWxlbWVudFtdIHtcbiAgICBjb25zdCBzdGVwczogU2JiU3RlcEVsZW1lbnRbXSA9IFtdO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItc3RlcCcpLmZvckVhY2goKHN0ZXApID0+IHtcbiAgICAgIGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUoc3RlcCk7XG4gICAgICBzdGVwcy5wdXNoKHN0ZXApO1xuICAgIH0pO1xuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9lbmFibGVkU3RlcHMoKTogU2JiU3RlcEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMuZmlsdGVyKChzKSA9PiB7XG4gICAgICBpZiAocy5sYWJlbCkge1xuICAgICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKHMubGFiZWwpO1xuICAgICAgICByZXR1cm4gIXMubGFiZWwuZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXJUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7fSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Jlc2l6ZWNoYW5nZScsIChlOiBFdmVudCkgPT4gdGhpcy5fb25TZWxlY3RlZFN0ZXBSZXNpemUoZSkpO1xuICB9XG5cbiAgLyoqIFNlbGVjdHMgdGhlIG5leHQgc3RlcC4gKi9cbiAgcHVibGljIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4ICsgMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3RzIHRoZSBwcmV2aW91cyBzdGVwLiAqL1xuICBwdWJsaWMgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4IC0gMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGZvcm0gaW4gd2hpY2ggdGhlIHN0ZXBwZXIgaXMgbmVzdGVkIG9yIGV2ZXJ5IGZvcm0gb2YgZWFjaCBzdGVwLCBpZiBhbnkuICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0Rm9ybSA9IHRoaXMuY2xvc2VzdCgnZm9ybScpO1xuICAgIGlmIChjbG9zZXN0Rm9ybSkge1xuICAgICAgY2xvc2VzdEZvcm0ucmVzZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdmb3JtJykuZm9yRWFjaCgoZm9ybSkgPT4gZm9ybS5yZXNldCgpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgICAvLyBJbiBjYXNlIHRoZSBmb2N1cyBpcyBjdXJyZW50bHkgaW5zaWRlIHRoZSBzdGVwcGVyLCB3ZSByZXNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0L3NlbGVjdGVkIHN0ZXAgbGFiZWwuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJ3NiYi1zdGVwcGVyJykgPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQ/LmxhYmVsPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzU2VsZWN0YWJsZShzdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGwpOiBzdGVwIGlzIFNiYlN0ZXBFbGVtZW50IHtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShzdGVwKTtcbiAgICAgIGlmIChzdGVwLmxhYmVsKSB7XG4gICAgICAgIGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUoc3RlcC5sYWJlbCk7XG4gICAgICAgIGlmICghdGhpcy5saW5lYXIgJiYgc3RlcC5sYWJlbC5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3Qoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc1NlbGVjdGFibGUoc3RlcCkgfHwgc3RlcCA9PT0gdGhpcy5zZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLnNlbGVjdGVkO1xuICAgIGNvbnN0IHZhbGlkYXRlUGF5bG9hZDogU2JiU3RlcFZhbGlkYXRlRXZlbnREZXRhaWxzID0ge1xuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY3VycmVudFN0ZXAsXG4gICAgICBuZXh0SW5kZXg6IHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCA/IHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgOiBudWxsLFxuICAgICAgbmV4dFN0ZXA6IHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCA/IHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4ICsgMV0gOiBudWxsLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3RlZC52YWxpZGF0ZSh2YWxpZGF0ZVBheWxvYWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgY3VycmVudD8uZGVzZWxlY3QoKTtcbiAgICBzdGVwLnNlbGVjdCgpO1xuXG4gICAgLyoqIEBpbnRlcm5hbCBvbmx5IHRvIHByb3ZpZGUgZG91YmxlIGVudHJ5IGluIGRvY3MuIEl0IGlzIGEgcHVibGljIGV2ZW50ISAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBTYmJTdGVwQ2hhbmdlRXZlbnQodGhpcy5zZWxlY3RlZEluZGV4LCBjdXJyZW50SW5kZXgsIHRoaXMuc2VsZWN0ZWQsIGN1cnJlbnRTdGVwKSxcbiAgICApO1xuXG4gICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQoc3RlcCk7XG4gICAgdGhpcy5fY29uZmlndXJlTGluZWFyTW9kZSgpO1xuICAgIC8vIEluIGNhc2UgdGhlIGZvY3VzIGlzIGN1cnJlbnRseSBpbnNpZGUgdGhlIHN0ZXBwZXIsIHdlIGZvY3VzIHRoZSBzZWxlY3RlZCBzdGVwIGxhYmVsLlxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdzYmItc3RlcHBlcicpID09PSB0aGlzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkPy5sYWJlbD8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRNYXJrZXJTaXplKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9sb2FkZWQgfHxcbiAgICAgICF0aGlzLnNlbGVjdGVkIHx8XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgIXRoaXMuc2VsZWN0ZWQubGFiZWxcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHRoaXMuc2VsZWN0ZWQubGFiZWwub2Zmc2V0TGVmdCArIHRoaXMuc2VsZWN0ZWQubGFiZWwub2Zmc2V0V2lkdGhcbiAgICAgICAgOiB0aGlzLl9jYWxjdWxhdGVMYWJlbE9mZnNldFRvcCgpO1xuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItc3RlcHBlci1tYXJrZXItc2l6ZScsIGAke29mZnNldH1weGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0ZXBwZXIgaGVpZ2h0IGJhc2VkIG9uIHRoZSBoZWlnaHQgb2YgdGhlIHByb3ZpZGVkIHN0ZXAuXG4gICAqL1xuICBwcml2YXRlIF9zZXRTdGVwcGVySGVpZ2h0KHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChzdGVwICYmIHN0ZXAuc2hhZG93Um9vdCkge1xuICAgICAgY29uc3QgaW5uZXJFbGVtZW50OiBTYmJTdGVwRWxlbWVudCB8IG51bGwgPSBzdGVwLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLnNiYi1zdGVwJyk7XG4gICAgICBpZiAoaW5uZXJFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1zdGVwcGVyLWNvbnRlbnQtaGVpZ2h0JywgYCR7aW5uZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUxhYmVsT2Zmc2V0VG9wKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5zdGVwcykge1xuICAgICAgaWYgKHN0ZXAgPT09IHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBvZmZzZXQgPSBzdGVwLmxhYmVsIS5vZmZzZXRIZWlnaHQgKyBvZmZzZXQ7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBvZmZzZXQgK1xuICAgICAgdGhpcy5zZWxlY3RlZCEubGFiZWwhLm9mZnNldEhlaWdodCEgK1xuICAgICAgcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMpLmdldFByb3BlcnR5VmFsdWUoJy0tc2JiLXNwYWNpbmctZml4ZWQtNngnKSkgKlxuICAgICAgICAxNiAqXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdGVkU3RlcFJlc2l6ZShlOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQoZS50YXJnZXQgYXMgU2JiU3RlcEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlndXJlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSwgYXJyYXkpID0+IHtcbiAgICAgIHN0ZXAuY29uZmlndXJlKHRoaXMuX2xvYWRlZCk7XG4gICAgICBzdGVwLmxhYmVsPy5jb25maWd1cmUoaSArIDEsIGFycmF5Lmxlbmd0aCwgdGhpcy5fbG9hZGVkKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3QodGhpcy5zZWxlY3RlZCB8fCB0aGlzLl9lbmFibGVkU3RlcHNbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCkgPT4ge1xuICAgICAgc3RlcC5zbG90ID0gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3N0ZXAnIDogJ3N0ZXAtbGFiZWwnO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tPcmllbnRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRnJvbSkge1xuICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IHRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaGVzKGJyZWFrcG9pbnRNYXBbdGhpcy5ob3Jpem9udGFsRnJvbV0pXG4gICAgICAgID8gJ2hvcml6b250YWwnXG4gICAgICAgIDogJ3ZlcnRpY2FsJztcbiAgICAgIHRoaXMuX3VwZGF0ZUxhYmVscygpO1xuICAgIH1cbiAgICAvLyBUaGUgdGltZW91dCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcmtlciB0YWtlcyB0aGUgY29ycmVjdCBzdGVwLWxhYmVsIHNpemUuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zZXRNYXJrZXJTaXplKCksIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TdGVwcGVyUmVzaXplID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2NoZWNrT3JpZW50YXRpb24oKTtcbiAgICB0aGlzLl9zZXRTdGVwcGVySGVpZ2h0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQhKTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdkaXNhYmxlLWFuaW1hdGlvbicpO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzaXppbmcgdG8gYXZvaWQgc3RyYW5nZSB0cmFuc2l0aW9uIGVmZmVjdHMuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2Rpc2FibGUtYW5pbWF0aW9uJyksXG4gICAgICBERUJPVU5DRV9USU1FLFxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBfY29uZmlndXJlTGluZWFyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzLmZvckVhY2goKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXN0ZXAubGFiZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShzdGVwLmxhYmVsKTtcblxuICAgICAgc3RlcC5sYWJlbC5kaXNhYmxlKFxuICAgICAgICAodGhpcy5saW5lYXIgJiYgaW5kZXggPiB0aGlzLnNlbGVjdGVkSW5kZXghKSB8fFxuICAgICAgICAgICghdGhpcy5saW5lYXIgJiYgc3RlcC5sYWJlbC5tYXRjaGVzKCc6c3RhdGUodXNlci1kaXNhYmxlZCknKSksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uU3RlcHBlclJlc2l6ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlLWFuaW1hdGlvbicsICF0aGlzLl9sb2FkZWQpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uU3RlcHBlclJlc2l6ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcblxuICAgICAgaWYgKHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkICYmIHRoaXMuc3RlcHMuaW5kZXhPZih0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZCkgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuc3RlcHMuaW5kZXhPZih0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcyk7XG4gICAgICB0aGlzLl9jaGVja09yaWVudGF0aW9uKCk7XG4gICAgICAvLyBSZW1vdmUgZGlzYWJsZS1hbmltYXRpb24gc3RhdGUgYWZ0ZXIgY29tcG9uZW50IGluaXRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnZGlzYWJsZS1hbmltYXRpb24nKSwgREVCT1VOQ0VfVElNRSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdvcmllbnRhdGlvbicpICYmICF0aGlzLmhvcml6b250YWxGcm9tKSB7XG4gICAgICB0aGlzLl91cGRhdGVMYWJlbHMoKTtcbiAgICAgIHRoaXMuX3NldE1hcmtlclNpemUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbGluZWFyJykgJiYgdGhpcy5fbG9hZGVkKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVMaW5lYXJNb2RlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2l6ZScpKSB7XG4gICAgICB0aGlzLl9zZXRNYXJrZXJTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5RG93bihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbmFibGVkU3RlcHM6IFNiYlN0ZXBFbGVtZW50W10gPSB0aGlzLl9lbmFibGVkU3RlcHM7XG5cbiAgICBpZiAoXG4gICAgICAhZW5hYmxlZFN0ZXBzIHx8XG4gICAgICAvLyBkb24ndCB0cmFwIG5lc3RlZCBoYW5kbGluZ1xuICAgICAgKChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSAhPT0gdGhpcyAmJiAoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudCAhPT0gdGhpcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJvd0tleVByZXNzZWQoZXZ0KSkge1xuICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gZW5hYmxlZFN0ZXBzLmluZGV4T2YodGhpcy5zZWxlY3RlZCEpO1xuICAgICAgY29uc3QgbmV4dEluZGV4OiBudW1iZXIgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2dCwgY3VycmVudCwgZW5hYmxlZFN0ZXBzLmxlbmd0aCk7XG4gICAgICB0aGlzLl9zZWxlY3QoZW5hYmxlZFN0ZXBzW25leHRJbmRleF0pO1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXN0ZXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zdGVwcGVyX19sYWJlbHNcIiByb2xlPVwidGFibGlzdFwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGVwLWxhYmVsXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jb25maWd1cmV9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3RlcHBlcl9fc3RlcHNcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwic3RlcFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fY29uZmlndXJlfT48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXN0ZXBwZXInOiBTYmJTdGVwcGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCQSxNQUFNLGdCQUFnQjtBQUV0QixNQUFNLGdCQUF3QztBQUFBLEVBQzVDLE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLE9BQU87QUFBQSxFQUNQLE9BQU87O0FBR0gsTUFBTywyQkFBMkIsTUFBSztBQUFBLEVBYTNDLFlBQ0UsZUFDQSxlQUNBLGNBQ0EsY0FB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
@@ -60,6 +60,7 @@ export declare class SbbToggleElement<T = string> extends SbbToggleElement_base
60
60
  */
61
61
  private _handleInput;
62
62
  private _handleKeyDown;
63
+ private _selectAndFocusOption;
63
64
  protected render(): TemplateResult;
64
65
  }
65
66
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/toggle/toggle/toggle.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAMb,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;;AAIlE;;;;;GAKG;AACH,qBAEM,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,qBAE1C;IACC,gBAAgC,IAAI,gBAAgB;IACpD,OAAuB,MAAM,EAAE,cAAc,CAA4B;IACzE,gBAAuB,MAAM;;MAElB;IAEX;;;OAGG;IACH,SAEgB,IAAI,EAAE,OAAO,CAAS;IAEtC;;;OAGG;IACH,SAA6C,IAAI,EAAE,GAAG,GAAG,GAAG,CAAwB;IAEpF;;;OAGG;IACH,IACW,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAM/B;IACD,IAAW,KAAK,IAAI,CAAC,GAAG,IAAI,CAI3B;IACD,OAAO,CAAC,cAAc,CAAkB;IAExC,4DAA4D;IAC5D,IAAW,OAAO,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAIhD;;cAQkB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAatE;;;OAGG;IACI,aAAa,IAAI,IAAI;IAK5B;;;OAGG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACI,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;YAUO,aAAa;IAK3B,gBAAgB;IACT,kBAAkB,CAAC,QAAQ,UAAQ,GAAG,IAAI;IAqCjD,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,cAAc;cA6BH,MAAM,IAAI,cAAc;CAO5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,YAAY,EAAE,gBAAgB,CAAC;KAChC;CACF"}
1
+ {"version":3,"file":"toggle.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/toggle/toggle/toggle.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AAMb,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;;AAIlE;;;;;GAKG;AACH,qBAEM,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAE,SAAQ,qBAE1C;IACC,gBAAgC,IAAI,gBAAgB;IACpD,OAAuB,MAAM,EAAE,cAAc,CAA4B;IACzE,gBAAuB,MAAM;;MAElB;IAEX;;;OAGG;IACH,SAEgB,IAAI,EAAE,OAAO,CAAS;IAEtC;;;OAGG;IACH,SAA6C,IAAI,EAAE,GAAG,GAAG,GAAG,CAAwB;IAEpF;;;OAGG;IACH,IACW,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAM/B;IACD,IAAW,KAAK,IAAI,CAAC,GAAG,IAAI,CAI3B;IACD,OAAO,CAAC,cAAc,CAAkB;IAExC,4DAA4D;IAC5D,IAAW,OAAO,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAIhD;;cAQkB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAatE;;;OAGG;IACI,aAAa,IAAI,IAAI;IAK5B;;;OAGG;IACI,iBAAiB,IAAI,IAAI;IAIhC;;OAEG;IACI,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;YAUO,aAAa;IAK3B,gBAAgB;IACT,kBAAkB,CAAC,QAAQ,UAAQ,GAAG,IAAI;IAqCjD,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,qBAAqB;cASV,MAAM,IAAI,cAAc;CAO5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,YAAY,EAAE,gBAAgB,CAAC;KAChC;CACF"}
@@ -8,7 +8,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
8
8
  import { __esDecorate, __runInitializers } from "tslib";
9
9
  import { css, LitElement, isServer, html } from "lit";
10
10
  import { customElement, property } from "lit/decorators.js";
11
- import { interactivityChecker, isArrowKeyPressed, getNextElementIndex } from "../../core/a11y.js";
11
+ import { interactivityChecker } from "../../core/a11y.js";
12
12
  import { forceType } from "../../core/decorators.js";
13
13
  import { isLean } from "../../core/dom.js";
14
14
  import { SbbDisabledMixin, SbbFormAssociatedMixin, SbbElementInternalsMixin } from "../../core/mixins.js";
@@ -286,17 +286,26 @@ let SbbToggleElement = (() => {
286
286
  evt.target !== this && evt.target.parentElement !== this) {
287
287
  return;
288
288
  }
289
- if (isArrowKeyPressed(evt)) {
290
- const checked = enabledToggleOptions.findIndex((toggleOption) => toggleOption.checked);
291
- const nextIndex = getNextElementIndex(evt, checked, enabledToggleOptions.length);
292
- if (!enabledToggleOptions[nextIndex].checked) {
293
- enabledToggleOptions[nextIndex].checked = true;
294
- enabledToggleOptions[nextIndex].focus();
295
- enabledToggleOptions[nextIndex].dispatchEvent(new InputEvent("input", { bubbles: true, composed: true }));
296
- }
289
+ const options = this.options;
290
+ const isRtl = this.matches(":dir(rtl)");
291
+ const currentIndex = options.findIndex((option) => option.checked) ?? options[0];
292
+ const availableOptions = options.slice(currentIndex + 1).concat(options.slice(0, currentIndex)).filter((o) => !o.disabled && interactivityChecker.isVisible(o));
293
+ if (!isRtl ? evt.key === " " || evt.key === "ArrowRight" : evt.key === "ArrowLeft") {
294
+ this._selectAndFocusOption(availableOptions[0]);
295
+ evt.preventDefault();
296
+ } else if (isRtl ? evt.key === " " || evt.key === "ArrowRight" : evt.key === "ArrowLeft") {
297
+ this._selectAndFocusOption(availableOptions.at(-1));
297
298
  evt.preventDefault();
298
299
  }
299
300
  }
301
+ _selectAndFocusOption(option) {
302
+ if (!option || option.disabled || option.checked) {
303
+ return;
304
+ }
305
+ option.checked = true;
306
+ option.focus();
307
+ option.dispatchEvent(new InputEvent("input", { bubbles: true, composed: true }));
308
+ }
300
309
  render() {
301
310
  return html`
302
311
  <div class="sbb-toggle">
@@ -329,4 +338,4 @@ let SbbToggleElement = (() => {
329
338
  export {
330
339
  SbbToggleElement
331
340
  };
332
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RvZ2dsZS90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4LCBpbnRlcmFjdGl2aXR5Q2hlY2tlciwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLnRzJztcbmltcG9ydCB7IGlzTGVhbiB9IGZyb20gJy4uLy4uL2NvcmUvZG9tLnRzJztcbmltcG9ydCB7XG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbiAgU2JiRGlzYWJsZWRNaXhpbixcbiAgU2JiRWxlbWVudEludGVybmFsc01peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3N0eWxlcy50cyc7XG5pbXBvcnQgeyB0eXBlIFNiYlRvZ2dsZU9wdGlvbkVsZW1lbnQgfSBmcm9tICcuLi90b2dnbGUtb3B0aW9uLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vdG9nZ2xlLnNjc3M/bGl0JmlubGluZSc7XG5cbi8qKlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIHR3byBgc2JiLXRvZ2dsZS1vcHRpb25gLCBhY3RpbmcgYXMgYSB0b2dnbGUgYnV0dG9uLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGA8c2JiLXRvZ2dsZS1vcHRpb24+YCBlbGVtZW50cyB0byB0aGUgdG9nZ2xlLlxuICogQG92ZXJyaWRlVHlwZSB2YWx1ZSAtIChUID0gc3RyaW5nKSB8IG51bGxcbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXRvZ2dsZScpXG5jbGFzcyBTYmJUb2dnbGVFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiRGlzYWJsZWRNaXhpbihcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4oTGl0RWxlbWVudCkpLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdyYWRpb2dyb3VwJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgc3R5bGVdO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBjaGFuZ2U6ICdjaGFuZ2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBzZXQgdGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQgZml4ZWQ7IGlmIGZhbHNlLFxuICAgKiB0aGUgd2lkdGggaXMgZHluYW1pYyBiYXNlZCBvbiB0aGUgbGFiZWwgb2YgdGhlIHNiYi10b2dnbGUtb3B0aW9uLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGV2ZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAncycgfCAnbScgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSB0b2dnbGUuIEl0IG5lZWRzIHRvIGJlIG11dGFibGUgc2luY2UgaXQgaXMgdXBkYXRlZCB3aGVuZXZlclxuICAgKiBhIG5ldyBvcHRpb24gaXMgc2VsZWN0ZWQgKHNlZSB0aGUgYG9uVG9nZ2xlT3B0aW9uU2VsZWN0KClgIG1ldGhvZCkuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBUIHwgbnVsbCkge1xuICAgIGlmIChpc1NlcnZlciB8fCAhdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9mYWxsYmFja1ZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlQ2hhbmdlZCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IG51bGwge1xuICAgIHJldHVybiBpc1NlcnZlclxuICAgICAgPyAodGhpcy5fZmFsbGJhY2tWYWx1ZSA/PyBudWxsKVxuICAgICAgOiAodGhpcy5vcHRpb25zLmZpbmQoKG8pID0+IG8uY2hlY2tlZCk/LnZhbHVlID8/IHRoaXMub3B0aW9uc1swXT8udmFsdWUgPz8gbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSBfZmFsbGJhY2tWYWx1ZTogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgY2hpbGQgaW5zdGFuY2VzIG9mIHNiYi10b2dnbGUtb3B0aW9uIGFzIGFuIGFycmF5LiAqL1xuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogU2JiVG9nZ2xlT3B0aW9uRWxlbWVudDxUPltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uPFNiYlRvZ2dsZU9wdGlvbkVsZW1lbnQ8VD4+KCdzYmItdG9nZ2xlLW9wdGlvbicpID8/IFtdLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignaW5wdXQnLCAoKSA9PiB0aGlzLl9oYW5kbGVJbnB1dCgpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXMpOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdkaXNhYmxlZCcpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZm9ybURpc2FibGVkJykpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZURpc2FibGVkKCk7XG4gICAgfVxuXG4gICAgLy8gQmVmb3JlIHRoZSBmaXJzdCB1cGRhdGUsIGluaXQgd2l0aCB0aGUgZmFsbGJhY2sgdmFsdWUuXG4gICAgLy8gVGhlIHdpbGxVcGRhdGUgaG9vayBpcyBzYWZlciB0aGFuIHRoZSAndmFsdWUnIHNldHRlci5cbiAgICBpZiAoIXRoaXMuaGFzVXBkYXRlZCkge1xuICAgICAgdGhpcy5fdmFsdWVDaGFuZ2VkKHRoaXMuX2ZhbGxiYWNrVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIHZhbHVlIGNoYW5nZXMsIGJvdGggcHJvZ3JhbW1hdGljYWxseSBvciBieSB1c2VyIGludGVyYWN0aW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0dXNDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9ybVZhbHVlKCk7XG4gICAgdGhpcy51cGRhdGVQaWxsUG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0byB0aGUgaW5pdCB2YWx1ZSBpZiBwcmVzZW50LiBTZWxlY3QgdGhlIGZpcnN0IG9wdGlvbiwgb3RoZXJ3aXNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuaGFzQXR0cmlidXRlKCd2YWx1ZScpID8gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgOiBudWxsKSBhcyBUO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnIHx8IHN0YXRlID09IG51bGwpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAoc3RhdGUgYXMgVCkgPz8gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgIHRoaXMuX3JlYWRGb3JtRGF0YShzdGF0ZSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRGb3JtRGF0YShmb3JtRGF0YTogRm9ybURhdGEpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBkYXRhID0gZm9ybURhdGEuZ2V0KHRoaXMubmFtZSk7XG4gICAgcmV0dXJuIGRhdGEgaW5zdGFuY2VvZiBCbG9iID8gSlNPTi5wYXJzZShhd2FpdCBkYXRhLnRleHQoKSkgOiAoZGF0YSBhcyBUKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHVwZGF0ZVBpbGxQb3NpdGlvbihyZXNpemluZyA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCB0b2dnbGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PignLnNiYi10b2dnbGUnKTtcblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMubGVuZ3RoIDwgMiB8fFxuICAgICAgIXRvZ2dsZUVsZW1lbnQgfHxcbiAgICAgIG9wdGlvbnMuZXZlcnkoKG8pID0+ICFvLmNoZWNrZWQpIHx8XG4gICAgICBvcHRpb25zLmV2ZXJ5KChvKSA9PiAhby5jbGllbnRXaWR0aClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlLWFuaW1hdGlvbi1vbi1yZXNpemluZycsIHJlc2l6aW5nKTtcblxuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gb3B0aW9uc1swXTtcbiAgICBjb25zdCBpc0ZpcnN0Q2hlY2tlZCA9IGZpcnN0T3B0aW9uLmNoZWNrZWQ7XG4gICAgY29uc3QgcGlsbExlZnQgPSBpc0ZpcnN0Q2hlY2tlZCA/ICcwcHgnIDogYCR7Zmlyc3RPcHRpb24uY2xpZW50V2lkdGh9cHhgO1xuICAgIGNvbnN0IHBpbGxSaWdodCA9IGlzRmlyc3RDaGVja2VkXG4gICAgICA/IGAke3RvZ2dsZUVsZW1lbnQuY2xpZW50V2lkdGggLSBmaXJzdE9wdGlvbi5jbGllbnRXaWR0aH1weGBcbiAgICAgIDogJzBweCc7XG5cbiAgICBpZiAocGlsbFJpZ2h0ID09PSAnMHB4JyAmJiBwaWxsTGVmdCA9PT0gJzBweCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1zYmItdG9nZ2xlLW9wdGlvbi1sZWZ0JywgcGlsbExlZnQpO1xuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi10b2dnbGUtb3B0aW9uLXJpZ2h0JywgcGlsbFJpZ2h0KTtcblxuICAgIC8vIFRyaWdnZXJzIGEgbGF5b3V0IHJlZmxvdyB3aGljaCBpcyBuZWVkZWQgdG8gYXZvaWQgYW5pbWF0aW9uIGdsaXRjaGVzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgdGhpcy5vZmZzZXRXaWR0aDtcblxuICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGEgdHJhbnNpdGlvbiBnbGl0Y2gsIHdlIGhhdmUgdG8ga25vdyB3aGVuIHRoZSBmaXJzdCB2YWx1ZXMgd2VyZSBzZXQuXG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnaW5pdGlhbGl6ZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZUNoYW5nZWQodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5fdXBkYXRlRGlzYWJsZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlQ2hhbmdlZCh2YWx1ZTogVCB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPVxuICAgICAgb3B0aW9ucy5maW5kKChvKSA9PiB2YWx1ZSA9PT0gby52YWx1ZSkgPz8gb3B0aW9ucy5maW5kKChvKSA9PiBvLmNoZWNrZWQpID8/IG9wdGlvbnNbMF07XG5cbiAgICBpZiAoIXNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICBpZiAoaW1wb3J0Lm1ldGEuZW52LkRFViAmJiAhaXNTZXJ2ZXIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBzYmItdG9nZ2xlOiBObyBhdmFpbGFibGUgb3B0aW9ucyEgKCR7dGhpcy5pZCB8fCAnTm8gaWQnfSlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VsZWN0ZWRPcHRpb24uY2hlY2tlZCA9IHRydWU7XG4gICAgdGhpcy5zdGF0dXNDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEaXNhYmxlZCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRvZ2dsZU9wdGlvbiBvZiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRvZ2dsZU9wdGlvbi5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbiB1c2VyIGludGVyYWN0aW9uIChjbGljayBvciBrZXlib2FyZClcbiAgICovXG4gIHByaXZhdGUgX2hhbmRsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzQ2hhbmdlZCgpO1xuICAgIC8qKlxuICAgICAqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLlxuICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICogZm9yIGVhY2ggYWx0ZXJhdGlvbiB0byBhbiBlbGVtZW50J3MgdmFsdWUuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW5hYmxlZFRvZ2dsZU9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgKHQpID0+ICF0LmRpc2FibGVkICYmIGludGVyYWN0aXZpdHlDaGVja2VyLmlzVmlzaWJsZSh0KSxcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgIWVuYWJsZWRUb2dnbGVPcHRpb25zIHx8XG4gICAgICAvLyBkb24ndCB0cmFwIG5lc3RlZCBoYW5kbGluZ1xuICAgICAgKChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSAhPT0gdGhpcyAmJiAoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudCAhPT0gdGhpcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJvd0tleVByZXNzZWQoZXZ0KSkge1xuICAgICAgY29uc3QgY2hlY2tlZDogbnVtYmVyID0gZW5hYmxlZFRvZ2dsZU9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAodG9nZ2xlT3B0aW9uOiBTYmJUb2dnbGVPcHRpb25FbGVtZW50PFQ+KSA9PiB0b2dnbGVPcHRpb24uY2hlY2tlZCxcbiAgICAgICk7XG4gICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZ0LCBjaGVja2VkLCBlbmFibGVkVG9nZ2xlT3B0aW9ucy5sZW5ndGgpO1xuICAgICAgaWYgKCFlbmFibGVkVG9nZ2xlT3B0aW9uc1tuZXh0SW5kZXhdLmNoZWNrZWQpIHtcbiAgICAgICAgZW5hYmxlZFRvZ2dsZU9wdGlvbnNbbmV4dEluZGV4XS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgZW5hYmxlZFRvZ2dsZU9wdGlvbnNbbmV4dEluZGV4XS5mb2N1cygpO1xuICAgICAgICBlbmFibGVkVG9nZ2xlT3B0aW9uc1tuZXh0SW5kZXhdLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi10b2dnbGVcIj5cbiAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl91cGRhdGVUb2dnbGV9Pjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10b2dnbGUnOiBTYmJUb2dnbGVFbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWlDTSxvQkFBZ0IsTUFBQTs7MEJBRHJCLGNBQWMsWUFBWSxDQUFDOzs7O29CQUNlLGlCQUN6Qyx1QkFBdUIseUJBQXlCLFVBQVUsQ0FBQyxDQUFDOzs7Ozs7Ozs7QUFEM0IsRUFBQSxtQkFBUSxZQUUxQztBQUFBLElBK0NDLGNBQUE7QUFDRSxZQUFBO0FBbkNGO0FBTTZCO0FBTmIseUJBQUEseUJBZlosa0JBQUEsTUFBQSwwQkFBQSxHQUFnQixrQkFBQSxNQUFBLG9CQWVZLEtBQUs7QUFNUSx5QkFBQSx5QkFBQSxrQkFBQSxNQUFBLHVCQUFBLEdBQUEsa0JBQUEsTUFBQSxvQkFBa0IsT0FBQSxJQUFXLE1BQU0sR0FBRztBQW1CM0UsV0FBQSxrQkFBYyxrQkFBQSxNQUFBLHVCQUFBLEdBQWE7QUFXakMsV0FBSyxtQkFBbUIsU0FBUyxNQUFNLEtBQUssZ0JBQWdCLEVBQUUsU0FBUyxNQUFNO0FBQzdFLFdBQUssbUJBQW1CLFdBQVcsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLENBQUM7QUFBQSxJQUNsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUF0Q0EsSUFBZ0IsT0FBSTtBQUFBLGFBQUEsbUJBQUE7QUFBQSxJQUFB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
341
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RvZ2dsZS90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBpbnRlcmFjdGl2aXR5Q2hlY2tlciB9IGZyb20gJy4uLy4uL2NvcmUvYTExeS50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuIH0gZnJvbSAnLi4vLi4vY29yZS9kb20udHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJFbGVtZW50SW50ZXJuYWxzTWl4aW4sXG4gIFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW4sXG59IGZyb20gJy4uLy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGJveFNpemluZ1N0eWxlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3R5bGVzLnRzJztcbmltcG9ydCB7IHR5cGUgU2JiVG9nZ2xlT3B0aW9uRWxlbWVudCB9IGZyb20gJy4uL3RvZ2dsZS1vcHRpb24udHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90b2dnbGUuc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBJdCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRhaW5lciBmb3IgdHdvIGBzYmItdG9nZ2xlLW9wdGlvbmAsIGFjdGluZyBhcyBhIHRvZ2dsZSBidXR0b24uXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgYDxzYmItdG9nZ2xlLW9wdGlvbj5gIGVsZW1lbnRzIHRvIHRoZSB0b2dnbGUuXG4gKiBAb3ZlcnJpZGVUeXBlIHZhbHVlIC0gKFQgPSBzdHJpbmcpIHwgbnVsbFxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItdG9nZ2xlJylcbmNsYXNzIFNiYlRvZ2dsZUVsZW1lbnQ8VCA9IHN0cmluZz4gZXh0ZW5kcyBTYmJEaXNhYmxlZE1peGluKFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnRJbnRlcm5hbHNNaXhpbihMaXRFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ3JhZGlvZ3JvdXAnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHNldCB0aGUgd2lkdGggb2YgdGhlIGNvbXBvbmVudCBmaXhlZDsgaWYgZmFsc2UsXG4gICAqIHRoZSB3aWR0aCBpcyBkeW5hbWljIGJhc2VkIG9uIHRoZSBsYWJlbCBvZiB0aGUgc2JiLXRvZ2dsZS1vcHRpb24uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZXZlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaXplIHZhcmlhbnQsIGVpdGhlciBtIG9yIHMuXG4gICAqIEBkZWZhdWx0ICdtJyAvICdzJyAobGVhbilcbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHNpemU6ICdzJyB8ICdtJyA9IGlzTGVhbigpID8gJ3MnIDogJ20nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHRvZ2dsZS4gSXQgbmVlZHMgdG8gYmUgbXV0YWJsZSBzaW5jZSBpdCBpcyB1cGRhdGVkIHdoZW5ldmVyXG4gICAqIGEgbmV3IG9wdGlvbiBpcyBzZWxlY3RlZCAoc2VlIHRoZSBgb25Ub2dnbGVPcHRpb25TZWxlY3QoKWAgbWV0aG9kKS5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFQgfCBudWxsKSB7XG4gICAgaWYgKGlzU2VydmVyIHx8ICF0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHRoaXMuX2ZhbGxiYWNrVmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWVDaGFuZ2VkKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzU2VydmVyXG4gICAgICA/ICh0aGlzLl9mYWxsYmFja1ZhbHVlID8/IG51bGwpXG4gICAgICA6ICh0aGlzLm9wdGlvbnMuZmluZCgobykgPT4gby5jaGVja2VkKT8udmFsdWUgPz8gdGhpcy5vcHRpb25zWzBdPy52YWx1ZSA/PyBudWxsKTtcbiAgfVxuICBwcml2YXRlIF9mYWxsYmFja1ZhbHVlOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBjaGlsZCBpbnN0YW5jZXMgb2Ygc2JiLXRvZ2dsZS1vcHRpb24gYXMgYW4gYXJyYXkuICovXG4gIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBTYmJUb2dnbGVPcHRpb25FbGVtZW50PFQ+W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiVG9nZ2xlT3B0aW9uRWxlbWVudDxUPj4oJ3NiYi10b2dnbGUtb3B0aW9uJykgPz8gW10sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdpbnB1dCcsICgpID0+IHRoaXMuX2hhbmRsZUlucHV0KCksIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlEb3duKGUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcyk6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Rpc2FibGVkJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmb3JtRGlzYWJsZWQnKSkge1xuICAgICAgdGhpcy5fdXBkYXRlRGlzYWJsZWQoKTtcbiAgICB9XG5cbiAgICAvLyBCZWZvcmUgdGhlIGZpcnN0IHVwZGF0ZSwgaW5pdCB3aXRoIHRoZSBmYWxsYmFjayB2YWx1ZS5cbiAgICAvLyBUaGUgd2lsbFVwZGF0ZSBob29rIGlzIHNhZmVyIHRoYW4gdGhlICd2YWx1ZScgc2V0dGVyLlxuICAgIGlmICghdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl92YWx1ZUNoYW5nZWQodGhpcy5fZmFsbGJhY2tWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuZXZlciB0aGUgdmFsdWUgY2hhbmdlcywgYm90aCBwcm9ncmFtbWF0aWNhbGx5IG9yIGJ5IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXR1c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVGb3JtVmFsdWUoKTtcbiAgICB0aGlzLnVwZGF0ZVBpbGxQb3NpdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRvIHRoZSBpbml0IHZhbHVlIGlmIHByZXNlbnQuIFNlbGVjdCB0aGUgZmlyc3Qgb3B0aW9uLCBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSAodGhpcy5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykgPyB0aGlzLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA6IG51bGwpIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycgfHwgc3RhdGUgPT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IChzdGF0ZSBhcyBUKSA/PyBudWxsO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgdGhpcy5fcmVhZEZvcm1EYXRhKHN0YXRlKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcmVhZEZvcm1EYXRhKGZvcm1EYXRhOiBGb3JtRGF0YSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGRhdGEgPSBmb3JtRGF0YS5nZXQodGhpcy5uYW1lKTtcbiAgICByZXR1cm4gZGF0YSBpbnN0YW5jZW9mIEJsb2IgPyBKU09OLnBhcnNlKGF3YWl0IGRhdGEudGV4dCgpKSA6IChkYXRhIGFzIFQpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgdXBkYXRlUGlsbFBvc2l0aW9uKHJlc2l6aW5nID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IHRvZ2dsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KCcuc2JiLXRvZ2dsZScpO1xuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5sZW5ndGggPCAyIHx8XG4gICAgICAhdG9nZ2xlRWxlbWVudCB8fFxuICAgICAgb3B0aW9ucy5ldmVyeSgobykgPT4gIW8uY2hlY2tlZCkgfHxcbiAgICAgIG9wdGlvbnMuZXZlcnkoKG8pID0+ICFvLmNsaWVudFdpZHRoKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2Rpc2FibGUtYW5pbWF0aW9uLW9uLXJlc2l6aW5nJywgcmVzaXppbmcpO1xuXG4gICAgY29uc3QgZmlyc3RPcHRpb24gPSBvcHRpb25zWzBdO1xuICAgIGNvbnN0IGlzRmlyc3RDaGVja2VkID0gZmlyc3RPcHRpb24uY2hlY2tlZDtcbiAgICBjb25zdCBwaWxsTGVmdCA9IGlzRmlyc3RDaGVja2VkID8gJzBweCcgOiBgJHtmaXJzdE9wdGlvbi5jbGllbnRXaWR0aH1weGA7XG4gICAgY29uc3QgcGlsbFJpZ2h0ID0gaXNGaXJzdENoZWNrZWRcbiAgICAgID8gYCR7dG9nZ2xlRWxlbWVudC5jbGllbnRXaWR0aCAtIGZpcnN0T3B0aW9uLmNsaWVudFdpZHRofXB4YFxuICAgICAgOiAnMHB4JztcblxuICAgIGlmIChwaWxsUmlnaHQgPT09ICcwcHgnICYmIHBpbGxMZWZ0ID09PSAnMHB4Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi10b2dnbGUtb3B0aW9uLWxlZnQnLCBwaWxsTGVmdCk7XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLXRvZ2dsZS1vcHRpb24tcmlnaHQnLCBwaWxsUmlnaHQpO1xuXG4gICAgLy8gVHJpZ2dlcnMgYSBsYXlvdXQgcmVmbG93IHdoaWNoIGlzIG5lZWRlZCB0byBhdm9pZCBhbmltYXRpb24gZ2xpdGNoZXMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICB0aGlzLm9mZnNldFdpZHRoO1xuXG4gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgYSB0cmFuc2l0aW9uIGdsaXRjaCwgd2UgaGF2ZSB0byBrbm93IHdoZW4gdGhlIGZpcnN0IHZhbHVlcyB3ZXJlIHNldC5cbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdpbml0aWFsaXplZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLl91cGRhdGVEaXNhYmxlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWVDaGFuZ2VkKHZhbHVlOiBUIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9XG4gICAgICBvcHRpb25zLmZpbmQoKG8pID0+IHZhbHVlID09PSBvLnZhbHVlKSA/PyBvcHRpb25zLmZpbmQoKG8pID0+IG8uY2hlY2tlZCkgPz8gb3B0aW9uc1swXTtcblxuICAgIGlmICghc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIGlmIChpbXBvcnQubWV0YS5lbnYuREVWICYmICFpc1NlcnZlcikge1xuICAgICAgICBjb25zb2xlLndhcm4oYHNiYi10b2dnbGU6IE5vIGF2YWlsYWJsZSBvcHRpb25zISAoJHt0aGlzLmlkIHx8ICdObyBpZCd9KWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWxlY3RlZE9wdGlvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXR1c0NoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZURpc2FibGVkKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdG9nZ2xlT3B0aW9uIG9mIHRoaXMub3B0aW9ucykge1xuICAgICAgdG9nZ2xlT3B0aW9uLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmZvcm1EaXNhYmxlZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIG9uIHVzZXIgaW50ZXJhY3Rpb24gKGNsaWNrIG9yIGtleWJvYXJkKVxuICAgKi9cbiAgcHJpdmF0ZSBfaGFuZGxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNDaGFuZ2VkKCk7XG4gICAgLyoqXG4gICAgICogVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIHRoZSBlbGVtZW50J3MgdmFsdWUuXG4gICAgICogVW5saWtlIHRoZSBpbnB1dCBldmVudCwgdGhlIGNoYW5nZSBldmVudCBpcyBub3QgbmVjZXNzYXJpbHkgZmlyZWRcbiAgICAgKiBmb3IgZWFjaCBhbHRlcmF0aW9uIHRvIGFuIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5RG93bihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbmFibGVkVG9nZ2xlT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoXG4gICAgICAodCkgPT4gIXQuZGlzYWJsZWQgJiYgaW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNWaXNpYmxlKHQpLFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAhZW5hYmxlZFRvZ2dsZU9wdGlvbnMgfHxcbiAgICAgIC8vIGRvbid0IHRyYXAgbmVzdGVkIGhhbmRsaW5nXG4gICAgICAoKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpICE9PSB0aGlzICYmIChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgaXNSdGwgPSB0aGlzLm1hdGNoZXMoJzpkaXIocnRsKScpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi5jaGVja2VkKSA/PyBvcHRpb25zWzBdO1xuICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnMgPSBvcHRpb25zXG4gICAgICAuc2xpY2UoY3VycmVudEluZGV4ICsgMSlcbiAgICAgIC5jb25jYXQob3B0aW9ucy5zbGljZSgwLCBjdXJyZW50SW5kZXgpKVxuICAgICAgLmZpbHRlcigobykgPT4gIW8uZGlzYWJsZWQgJiYgaW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNWaXNpYmxlKG8pKTtcbiAgICBpZiAoIWlzUnRsID8gZXZ0LmtleSA9PT0gJyAnIHx8IGV2dC5rZXkgPT09ICdBcnJvd1JpZ2h0JyA6IGV2dC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICB0aGlzLl9zZWxlY3RBbmRGb2N1c09wdGlvbihhdmFpbGFibGVPcHRpb25zWzBdKTtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSBpZiAoaXNSdGwgPyBldnQua2V5ID09PSAnICcgfHwgZXZ0LmtleSA9PT0gJ0Fycm93UmlnaHQnIDogZXZ0LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIHRoaXMuX3NlbGVjdEFuZEZvY3VzT3B0aW9uKGF2YWlsYWJsZU9wdGlvbnMuYXQoLTEpKTtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEFuZEZvY3VzT3B0aW9uKG9wdGlvbjogU2JiVG9nZ2xlT3B0aW9uRWxlbWVudDxUPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghb3B0aW9uIHx8IG9wdGlvbi5kaXNhYmxlZCB8fCBvcHRpb24uY2hlY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvcHRpb24uY2hlY2tlZCA9IHRydWU7XG4gICAgb3B0aW9uLmZvY3VzKCk7XG4gICAgb3B0aW9uLmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItdG9nZ2xlXCI+XG4gICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fdXBkYXRlVG9nZ2xlfT48L3Nsb3Q+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItdG9nZ2xlJzogU2JiVG9nZ2xlRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQ00sb0JBQWdCLE1BQUE7OzBCQURyQixjQUFjLFlBQVksQ0FBQzs7OztvQkFDZSxpQkFDekMsdUJBQXVCLHlCQUF5QixVQUFVLENBQUMsQ0FBQzs7Ozs7Ozs7O0FBRDNCLEVBQUEsbUJBQVEsWUFFMUM7QUFBQSxJQStDQyxjQUFBO0FBQ0UsWUFBQTtBQW5DRjtB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
@@ -14,7 +14,7 @@ import { i18nOptional as ye } from "../../core/i18n.js";
14
14
  import { SbbNegativeMixin as xe, SbbElementInternalsMixin as we, SbbHydrationMixin as Ee, removeAriaElements as ke, appendAriaElements as ze } from "../../core/mixins.js";
15
15
  import { boxSizingStyles as Ie } from "../../core/styles.js";
16
16
  import "../../icon.js";
17
- const Se = pe`@charset "UTF-8";:host{display:inline-block;color:var(--sbb-color-3);--sbb-form-field-background-color: var(--sbb-background-color-1);--sbb-form-field-border-color: var(--sbb-border-color-5);--sbb-form-field-border-style: solid;--sbb-form-field-border-radius: var(--sbb-border-radius-4x);--sbb-form-field-border-width: var(--sbb-border-width-1x);--sbb-form-field-min-height: var(--sbb-size-element-m);--sbb-form-field-label-color: var(--sbb-color-metal);--sbb-form-field-label-color: light-dark(var(--sbb-color-metal), var(--sbb-color-smoke));--sbb-form-field-prefix-color: var(--sbb-color-metal);--sbb-form-field-prefix-color: light-dark(var(--sbb-color-metal), var(--sbb-color-smoke));--sbb-form-field-padding-inline: var(--sbb-spacing-fixed-3x);--sbb-form-field-text-color: var(--sbb-color-3);--sbb-form-field-arrow-color: var(--sbb-color-3);--sbb-form-field-error-divider-width: var(--sbb-spacing-fixed-1x);--sbb-form-field-error-padding-block-start: var(--sbb-form-field-error-divider-width);--sbb-form-field-gap: var(--sbb-spacing-fixed-2x);--sbb-form-field-label-to-input-overlapping: var(--sbb-spacing-fixed-1x);--sbb-form-field-select-inline-padding-end: calc( var(--sbb-icon-svg-width) + var(--sbb-form-field-gap) );--sbb-form-field-overflow: hidden;--sbb-form-field-input-text-size: var(--sbb-text-font-size-m);--sbb-form-field-label-text-size: var(--sbb-text-font-size-xs);--sbb-form-field-label-size: calc( var(--sbb-form-field-label-text-size) * var(--sbb-typo-line-height-text) );--sbb-form-field-text-line-height: calc( var(--sbb-form-field-input-text-size) * var(--sbb-typo-line-height-text) );--sbb-form-field-margin-block-start: calc( ( var(--sbb-form-field-min-height) - var(--sbb-form-field-label-size) - var( --sbb-form-field-text-line-height ) + var(--sbb-form-field-label-to-input-overlapping) ) / 2 );--sbb-form-field-spacer-margin-block-end: calc( -1 * var(--sbb-form-field-label-to-input-overlapping) );--sbb-form-field-floating-label-transform: .53125rem;--sbb-icon-svg-width: var(--sbb-size-icon-ui-small);--sbb-icon-svg-height: var(--sbb-size-icon-ui-small);--sbb-focus-outline-color: var(--sbb-focus-outline-color-default);--sbb-focus-outline-color: light-dark( var(--sbb-focus-outline-color-default), var(--sbb-focus-outline-color-dark) )}@media(min-width:64rem){:host{--sbb-form-field-floating-label-transform: .65625rem}}@media(forced-colors:active){:host{--sbb-form-field-border-color: ButtonBorder}}:host(:where(:not([width=collapse]))){min-width:9.375rem;width:min(18.75rem,100%)}:host([negative]){color:var(--sbb-color-3-negative);--sbb-form-field-background-color: var(--sbb-background-color-1-negative);--sbb-form-field-border-color: var(--sbb-border-color-5);--sbb-form-field-label-color: var(--sbb-color-5);--sbb-form-field-prefix-color: var(--sbb-color-5);--sbb-form-field-text-color: var(--sbb-color-3-negative);--sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);--sbb-form-field-arrow-color: var(--sbb-color-3-negative)}@media(forced-colors:active){:host([negative]){--sbb-form-field-border-color: ButtonBorder}}:host([size=s]){--sbb-form-field-min-height: var(--sbb-size-element-xs);--sbb-form-field-padding-inline: var(--sbb-spacing-fixed-2x);--sbb-form-field-input-text-size: var(--sbb-text-font-size-s);--sbb-form-field-label-text-size: var(--sbb-text-font-size-xxs);--sbb-form-field-label-to-input-overlapping: .625rem;--sbb-form-field-floating-label-transform: .34375rem;--sbb-form-field-spacer-margin-block-end: -.53125rem}@media(min-width:64rem){:host([size=s]){--sbb-form-field-label-to-input-overlapping: .6875rem;--sbb-form-field-floating-label-transform: .3125rem;--sbb-form-field-spacer-margin-block-end: -.5rem}}:host([size=l]){--sbb-form-field-min-height: var(--sbb-size-element-l);--sbb-form-field-padding-inline: var(--sbb-spacing-responsive-xxxs)}:host([error-space=reserve]){--sbb-form-field-error-min-height: calc( var(--sbb-typo-line-height-text) * var(--sbb-text-font-size-xs) );--sbb-form-field-error-padding-block-start-override: var(--sbb-form-field-error-divider-width)}:host(:where(:is(:state(readonly),[state--readonly]),:is(:state(disabled),[state--disabled]))){--sbb-form-field-background-color: var(--sbb-background-color-3);--sbb-form-field-border-color: var(--sbb-color-graphite);--sbb-form-field-border-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-smoke));--sbb-form-field-arrow-color: var(--sbb-color-granite);--sbb-form-field-arrow-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm))}@media(forced-colors:active){:host(:where(:is(:state(readonly),[state--readonly]),:is(:state(disabled),[state--disabled]))){--sbb-form-field-border-color: ButtonBorder}}:host(:where(:is(:state(readonly),[state--readonly]),:is(:state(disabled),[state--disabled]))[negative]){--sbb-form-field-background-color: var(--sbb-background-color-3-negative);--sbb-form-field-border-color: var(--sbb-border-color-5);--sbb-form-field-arrow-color: var(--sbb-border-color-5)}:host(:where(:is(:state(disabled),[state--disabled]))){--sbb-form-field-label-color: var(--sbb-color-granite);--sbb-form-field-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));--sbb-form-field-prefix-color: var(--sbb-color-granite);--sbb-form-field-prefix-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm));--sbb-form-field-border-style: dashed}@media(forced-colors:active){:host(:where(:is(:state(disabled),[state--disabled]))){--sbb-form-field-label-color: GrayText !important;--sbb-form-field-prefix-color: GrayText !important;--sbb-form-field-text-color: GrayText !important;--sbb-form-field-border-color: GrayText !important}}:host(:where(:is(:state(disabled),[state--disabled]))[negative]){--sbb-form-field-text-color: var(--sbb-color-5);--sbb-form-field-label-color: var(--sbb-color-5);--sbb-form-field-prefix-color: var(--sbb-color-5)}:host(:where(:is(:state(readonly),[state--readonly])):not([negative])){--sbb-form-field-label-color: var(--sbb-color-granite);--sbb-form-field-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));--sbb-form-field-prefix-color: var(--sbb-color-granite);--sbb-form-field-prefix-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm))}:host(:where(:is(:state(focus),[state--focus]))){--sbb-form-field-border-color: var(--sbb-border-color-3);--sbb-form-field-prefix-color: var(--sbb-color-3);--sbb-form-field-border-width: var(--sbb-border-width-2x)}:host(:where(:is(:state(focus),[state--focus]))[negative]){--sbb-form-field-border-color: var(--sbb-border-color-3-negative);--sbb-form-field-prefix-color: var(--sbb-color-3-negative)}@media(forced-colors:active){:host(:is(:state(focus),[state--focus])){--sbb-form-field-border-color: Highlight;--sbb-form-field-prefix-color: Highlight}}:host(:not(:where(:is(:state(has-error),[state--has-error])))){--sbb-form-field-error-padding-block-start: 0}:host([floating-label]){--sbb-select-placeholder-color: transparent}@media(forced-colors:active){:host([floating-label]){--sbb-select-placeholder-color: Canvas}}:host(:is(:not(:is(:state(slotted-label),[state--slotted-label])),[hidden-label])){--sbb-form-field-label-size: 0rem;--sbb-form-field-label-to-input-overlapping: 0rem}:host(:where(:is(:state(input-type-sbb-slider),[state--input-type-sbb-slider]))){--sbb-form-field-overflow: visible}:host(:where(:is(:state(input-type-textarea),[state--input-type-textarea]))){--sbb-form-field-max-height: fit-content}.sbb-form-field__space-wrapper{display:flex;flex-direction:column}.sbb-form-field__space-wrapper:before{content:"​";-webkit-user-select:none;user-select:none;width:0;height:0}.sbb-form-field__wrapper{display:flex;gap:var(--sbb-form-field-gap);padding-inline:var(--sbb-form-field-padding-inline);border-radius:var(--sbb-form-field-border-radius);min-height:var(--sbb-form-field-min-height);max-height:var(--sbb-form-field-max-height);background-color:var(--sbb-form-field-background-color);position:relative}.sbb-form-field__wrapper:before{content:"";display:block;position:absolute;inset:0;border:var(--sbb-form-field-border-width) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);border-radius:var(--sbb-form-field-border-radius)}:host(:where(:is(:state(focus),[state--focus]):is(:state(focus-origin-keyboard),[state--focus-origin-keyboard]))) .sbb-form-field__wrapper{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);outline-offset:var(--sbb-form-field-outline-offset, var(--sbb-focus-outline-offset))}@media(forced-colors:none){:host(:is([borderless],:is(:state(input-type-sbb-slider),[state--input-type-sbb-slider]))) .sbb-form-field__wrapper:before{border-color:transparent}:host(:where(:is(:state(focus),[state--focus]),:is(:state(disabled),[state--disabled]))[borderless]) .sbb-form-field__wrapper:after{content:"";position:absolute;border-block-end:var(--sbb-border-width-1x) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);inset-inline:var(--sbb-form-field-padding-inline);inset-block-end:0;z-index:var(--sbb-form-field-focus-underline-z-index, initial)}}::slotted(*[slot=prefix]){color:var(--sbb-form-field-prefix-color)}::slotted(*[slot=prefix]),::slotted(*[slot=suffix]){display:flex;min-width:var(--sbb-icon-svg-width);margin-block-start:calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2)}:host(:where(:is(:state(empty),[state--empty]),:is(:state(disabled),[state--disabled]),:is(:state(readonly),[state--readonly]))) ::slotted(sbb-form-field-clear){display:none}::slotted(sbb-datepicker-toggle){padding-block-end:calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2)}@media(forced-colors:active){::slotted(*[slot=suffix]){color:var(--sbb-form-field-prefix-color)}}.sbb-form-field__select-input-icon{top:50%;transform:translateY(-50%);position:absolute;inset-inline-end:0;margin-block-start:calc(-1 * var(--sbb-form-field-margin-block-start) / 2);pointer-events:none;color:var(--sbb-form-field-arrow-color)}.sbb-form-field__input-container{flex:1 1 auto;position:relative;margin-block-start:var(--sbb-form-field-margin-block-start);min-width:0}.sbb-form-field__label-spacer{display:flex;height:calc(var(--sbb-form-field-label-text-size) * var(--sbb-typo-line-height-text));margin-block-end:var(--sbb-form-field-spacer-margin-block-end)}:host(:not(:is(:state(slotted-label),[state--slotted-label]))) :is(.sbb-form-field__label,.sbb-form-field__label-spacer){display:none}:host([hidden-label]) :is(.sbb-form-field__label,.sbb-form-field__label-spacer){border:0;clip-path:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sbb-form-field__label{display:flex;max-width:100%;cursor:var(--sbb-cursor-default);position:absolute;inset-block-start:0;color:var(--sbb-form-field-label-color);--sbb-text-font-size: var(--sbb-text-font-size-xs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size)}:host([size=s]) .sbb-form-field__label{--sbb-text-font-size: var(--sbb-text-font-size-xxs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size)}:host(:where(:is(:state(input-type-select),[state--input-type-select]),:is(:state(input-type-sbb-select),[state--input-type-sbb-select]))) .sbb-form-field__label{padding-inline-end:var(--sbb-form-field-select-inline-padding-end)}:host([floating-label]) .sbb-form-field__label{transform-origin:0 0;pointer-events:none;backface-visibility:hidden;will-change:transform,font-size;transition-duration:var(--sbb-disable-animation-duration, var(--sbb-animation-duration-2x));transition-timing-function:var(--sbb-animation-easing);transition-property:transform,font-size}:host([floating-label]:is(:not(:where(:is(:state(focus),[state--focus])):not(:where(:is(:state(input-type-sbb-select),[state--input-type-sbb-select]))),:where(:is(:state(has-popup-open),[state--has-popup-open]))),:where(:is(:state(readonly),[state--readonly]))):where(:is(:state(empty),[state--empty]))) .sbb-form-field__label{font-size:var(--sbb-form-field-input-text-size);transform:translateY(var(--sbb-form-field-floating-label-transform))}@media(forced-colors:active){:host(:where(:is(:state(input-type-textarea),[state--input-type-textarea]))) .sbb-form-field__label{z-index:1}}.sbb-form-field__label-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.sbb-form-field__input{display:flex}:host([size=s]:is(:is(:state(input-type-input),[state--input-type-input]),:is(:state(input-type-select),[state--input-type-select]),:is(:state(input-type-sbb-select),[state--input-type-sbb-select]),:is(:state(input-type-sbb-date-input),[state--input-type-sbb-date-input]),:is(:state(input-type-sbb-time-input),[state--input-type-sbb-time-input]))) .sbb-form-field__input{margin-block-end:-.125rem}.sbb-form-field__error{display:flex;min-height:var(--sbb-form-field-error-min-height);margin-block-start:var(--sbb-form-field-error-padding-block-start-override, var(--sbb-form-field-error-padding-block-start))}`;
17
+ const Se = pe`@charset "UTF-8";:host{display:inline-block;color:var(--sbb-color-3);--sbb-form-field-background-color: var(--sbb-background-color-1);--sbb-form-field-border-color: var(--sbb-border-color-5);--sbb-form-field-border-style: solid;--sbb-form-field-border-radius: var(--sbb-border-radius-4x);--sbb-form-field-border-width: var(--sbb-border-width-1x);--sbb-form-field-min-height: var(--sbb-size-element-m);--sbb-form-field-label-color: var(--sbb-color-metal);--sbb-form-field-label-color: light-dark(var(--sbb-color-metal), var(--sbb-color-smoke));--sbb-form-field-prefix-color: var(--sbb-color-metal);--sbb-form-field-prefix-color: light-dark(var(--sbb-color-metal), var(--sbb-color-smoke));--sbb-form-field-padding-inline: var(--sbb-spacing-fixed-3x);--sbb-form-field-text-color: var(--sbb-color-3);--sbb-form-field-arrow-color: var(--sbb-color-3);--sbb-form-field-error-divider-width: var(--sbb-spacing-fixed-1x);--sbb-form-field-error-padding-block-start: var(--sbb-form-field-error-divider-width);--sbb-form-field-gap: var(--sbb-spacing-fixed-2x);--sbb-form-field-label-to-input-overlapping: var(--sbb-spacing-fixed-1x);--sbb-form-field-select-inline-padding-end: calc( var(--sbb-icon-svg-width) + var(--sbb-form-field-gap) );--sbb-form-field-overflow: hidden;--sbb-form-field-input-text-size: var(--sbb-text-font-size-m);--sbb-form-field-label-text-size: var(--sbb-text-font-size-xs);--sbb-form-field-label-size: calc( var(--sbb-form-field-label-text-size) * var(--sbb-typo-line-height-text) );--sbb-form-field-text-line-height: calc( var(--sbb-form-field-input-text-size) * var(--sbb-typo-line-height-text) );--sbb-form-field-margin-block-start: calc( ( var(--sbb-form-field-min-height) - var(--sbb-form-field-label-size) - var( --sbb-form-field-text-line-height ) + var(--sbb-form-field-label-to-input-overlapping) ) / 2 );--sbb-form-field-spacer-margin-block-end: calc( -1 * var(--sbb-form-field-label-to-input-overlapping) );--sbb-form-field-floating-label-transform: .53125rem;--sbb-icon-svg-width: var(--sbb-size-icon-ui-small);--sbb-icon-svg-height: var(--sbb-size-icon-ui-small);--sbb-focus-outline-color: var(--sbb-focus-outline-color-default);--sbb-focus-outline-color: light-dark( var(--sbb-focus-outline-color-default), var(--sbb-focus-outline-color-dark) )}@media(min-width:64rem){:host{--sbb-form-field-floating-label-transform: .65625rem}}@media(forced-colors:active){:host{--sbb-form-field-border-color: ButtonBorder}}:host(:where(:not([width=collapse]))){min-width:9.375rem;width:min(18.75rem,100%)}:host([negative]){color:var(--sbb-color-3-negative);--sbb-form-field-background-color: var(--sbb-background-color-1-negative);--sbb-form-field-border-color: var(--sbb-border-color-5);--sbb-form-field-label-color: var(--sbb-color-5);--sbb-form-field-prefix-color: var(--sbb-color-5);--sbb-form-field-text-color: var(--sbb-color-3-negative);--sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);--sbb-form-field-arrow-color: var(--sbb-color-3-negative)}@media(forced-colors:active){:host([negative]){--sbb-form-field-border-color: ButtonBorder}}:host([size=s]){--sbb-form-field-min-height: var(--sbb-size-element-xs);--sbb-form-field-padding-inline: var(--sbb-spacing-fixed-2x);--sbb-form-field-input-text-size: var(--sbb-text-font-size-s);--sbb-form-field-label-text-size: var(--sbb-text-font-size-xxs);--sbb-form-field-label-to-input-overlapping: .625rem;--sbb-form-field-floating-label-transform: .34375rem;--sbb-form-field-spacer-margin-block-end: -.53125rem}@media(min-width:64rem){:host([size=s]){--sbb-form-field-label-to-input-overlapping: .6875rem;--sbb-form-field-floating-label-transform: .3125rem;--sbb-form-field-spacer-margin-block-end: -.5rem}}:host([size=l]){--sbb-form-field-min-height: var(--sbb-size-element-l);--sbb-form-field-padding-inline: var(--sbb-spacing-responsive-xxxs)}:host([error-space=reserve]){--sbb-form-field-error-min-height: calc( var(--sbb-typo-line-height-text) * var(--sbb-text-font-size-xs) );--sbb-form-field-error-padding-block-start-override: var(--sbb-form-field-error-divider-width)}:host(:where(:is(:state(readonly),[state--readonly]),:is(:state(disabled),[state--disabled]))){--sbb-form-field-background-color: var(--sbb-background-color-3);--sbb-form-field-border-color: var(--sbb-color-graphite);--sbb-form-field-border-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-smoke));--sbb-form-field-arrow-color: var(--sbb-color-granite);--sbb-form-field-arrow-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm))}@media(forced-colors:active){:host(:where(:is(:state(readonly),[state--readonly]),:is(:state(disabled),[state--disabled]))){--sbb-form-field-border-color: ButtonBorder}}:host(:where(:is(:state(readonly),[state--readonly]),:is(:state(disabled),[state--disabled]))[negative]){--sbb-form-field-background-color: var(--sbb-background-color-3-negative);--sbb-form-field-border-color: var(--sbb-border-color-5);--sbb-form-field-arrow-color: var(--sbb-border-color-5)}:host(:where(:is(:state(disabled),[state--disabled]))){--sbb-form-field-label-color: var(--sbb-color-granite);--sbb-form-field-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));--sbb-form-field-prefix-color: var(--sbb-color-granite);--sbb-form-field-prefix-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm));--sbb-form-field-border-style: dashed}@media(forced-colors:active){:host(:where(:is(:state(disabled),[state--disabled]))){--sbb-form-field-label-color: GrayText !important;--sbb-form-field-prefix-color: GrayText !important;--sbb-form-field-text-color: GrayText !important;--sbb-form-field-border-color: GrayText !important}}:host(:where(:is(:state(disabled),[state--disabled]))[negative]){--sbb-form-field-text-color: var(--sbb-color-5);--sbb-form-field-label-color: var(--sbb-color-5);--sbb-form-field-prefix-color: var(--sbb-color-5)}:host(:where(:is(:state(readonly),[state--readonly])):not([negative])){--sbb-form-field-label-color: var(--sbb-color-granite);--sbb-form-field-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-smoke));--sbb-form-field-prefix-color: var(--sbb-color-granite);--sbb-form-field-prefix-color: light-dark(var(--sbb-color-granite), var(--sbb-color-storm))}:host(:where(:is(:state(focus),[state--focus]))){--sbb-form-field-border-color: var(--sbb-border-color-3);--sbb-form-field-prefix-color: var(--sbb-color-3);--sbb-form-field-border-width: var(--sbb-border-width-2x)}:host(:where(:is(:state(focus),[state--focus]))[negative]){--sbb-form-field-border-color: var(--sbb-border-color-3-negative);--sbb-form-field-prefix-color: var(--sbb-color-3-negative)}@media(forced-colors:active){:host(:is(:state(focus),[state--focus])){--sbb-form-field-border-color: Highlight;--sbb-form-field-prefix-color: Highlight}}:host(:not(:where(:is(:state(has-error),[state--has-error])))){--sbb-form-field-error-padding-block-start: 0}:host([floating-label]){--sbb-select-placeholder-color: transparent}@media(forced-colors:active){:host([floating-label]){--sbb-select-placeholder-color: Canvas}}:host(:is(:not(:is(:state(slotted-label),[state--slotted-label])),[hidden-label])){--sbb-form-field-label-size: 0rem;--sbb-form-field-label-to-input-overlapping: 0rem}:host(:where(:is(:state(input-type-sbb-slider),[state--input-type-sbb-slider]))){--sbb-form-field-overflow: visible}:host(:where(:is(:state(input-type-textarea),[state--input-type-textarea]))){--sbb-form-field-max-height: fit-content}.sbb-form-field__space-wrapper{display:flex;flex-direction:column}.sbb-form-field__space-wrapper:before{content:"​";-webkit-user-select:none;user-select:none;width:0;height:0}.sbb-form-field__wrapper{display:flex;gap:var(--sbb-form-field-gap);padding-inline:var(--sbb-form-field-padding-inline);border-radius:var(--sbb-form-field-border-radius);min-height:var(--sbb-form-field-min-height);max-height:var(--sbb-form-field-max-height);background-color:var(--sbb-form-field-background-color);position:relative}.sbb-form-field__wrapper:before{content:"";display:block;position:absolute;inset:0;border:var(--sbb-form-field-border-width) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);border-radius:var(--sbb-form-field-border-radius)}:host(:where(:is(:state(focus),[state--focus]):is(:state(focus-origin-keyboard),[state--focus-origin-keyboard]))) .sbb-form-field__wrapper{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);outline-offset:var(--sbb-form-field-outline-offset, var(--sbb-focus-outline-offset))}@media(forced-colors:none){:host(:is([borderless],:is(:state(input-type-sbb-slider),[state--input-type-sbb-slider]))) .sbb-form-field__wrapper:before{border-color:transparent}:host(:where(:is(:state(focus),[state--focus]),:is(:state(disabled),[state--disabled]))[borderless]) .sbb-form-field__wrapper:after{content:"";position:absolute;border-block-end:var(--sbb-border-width-1x) var(--sbb-form-field-border-style) var(--sbb-form-field-border-color);inset-inline:var(--sbb-form-field-padding-inline);inset-block-end:0;z-index:var(--sbb-form-field-focus-underline-z-index, initial)}}::slotted(*[slot=prefix]){color:var(--sbb-form-field-prefix-color)}::slotted(*[slot=prefix]),::slotted(*[slot=suffix]){display:flex;min-width:var(--sbb-icon-svg-width);margin-block-start:calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2)}:host(:where(:is(:state(empty),[state--empty]),:is(:state(disabled),[state--disabled]),:is(:state(readonly),[state--readonly]))) ::slotted(sbb-form-field-clear){display:none}::slotted(sbb-datepicker-toggle){padding-block-end:calc((var(--sbb-form-field-min-height) - var(--sbb-size-icon-ui-small)) / 2)}@media(forced-colors:active){::slotted(*[slot=suffix]){color:var(--sbb-form-field-prefix-color)}}.sbb-form-field__select-input-icon{top:50%;transform:translateY(-50%);position:absolute;inset-inline-end:0;margin-block-start:calc(-1 * var(--sbb-form-field-margin-block-start) / 2);pointer-events:none;color:var(--sbb-form-field-arrow-color)}.sbb-form-field__input-container{flex:1 1 auto;position:relative;margin-block-start:var(--sbb-form-field-margin-block-start);min-width:0}.sbb-form-field__label-spacer{display:flex;height:calc(var(--sbb-form-field-label-text-size) * var(--sbb-typo-line-height-text));margin-block-end:var(--sbb-form-field-spacer-margin-block-end)}:host(:not(:is(:state(slotted-label),[state--slotted-label]))) :is(.sbb-form-field__label,.sbb-form-field__label-spacer){display:none}:host([hidden-label]) :is(.sbb-form-field__label,.sbb-form-field__label-spacer){border:0;clip-path:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.sbb-form-field__label{display:flex;max-width:100%;cursor:var(--sbb-cursor-default);position:absolute;inset-block-start:0;color:var(--sbb-form-field-label-color);--sbb-text-font-size: var(--sbb-text-font-size-xs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size)}:host([size=s]) .sbb-form-field__label{--sbb-text-font-size: var(--sbb-text-font-size-xxs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size)}:host(:where(:is(:state(input-type-select),[state--input-type-select]),:is(:state(input-type-sbb-select),[state--input-type-sbb-select]))) .sbb-form-field__label{padding-inline-end:var(--sbb-form-field-select-inline-padding-end)}:host([floating-label]) .sbb-form-field__label{transform-origin:0 0;pointer-events:none;backface-visibility:hidden;will-change:transform,font-size;transition-duration:var(--sbb-disable-animation-duration, var(--sbb-animation-duration-2x));transition-timing-function:var(--sbb-animation-easing);transition-property:transform,font-size}:host([floating-label]:is(:not(:where(:is(:state(focus),[state--focus])):not(:where(:is(:state(input-type-sbb-select),[state--input-type-sbb-select]))),:where(:is(:state(has-popup-open),[state--has-popup-open]))),:where(:is(:state(readonly),[state--readonly]))):where(:is(:state(empty),[state--empty]))) .sbb-form-field__label{font-size:var(--sbb-form-field-input-text-size);transform:translateY(var(--sbb-form-field-floating-label-transform))}@media(forced-colors:active){:host(:where(:is(:state(input-type-textarea),[state--input-type-textarea]))) .sbb-form-field__label{z-index:1}}.sbb-form-field__label-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.sbb-form-field__input{display:flex}:host([size=s]:is(:is(:state(input-type-input),[state--input-type-input]),:is(:state(input-type-select),[state--input-type-select]),:is(:state(input-type-sbb-select),[state--input-type-sbb-select]),:is(:state(input-type-sbb-date-input),[state--input-type-sbb-date-input]),:is(:state(input-type-sbb-time-input),[state--input-type-sbb-time-input]))) .sbb-form-field__input{margin-block-end:-.125rem}.sbb-form-field__error{display:flex;min-height:var(--sbb-form-field-error-min-height);flex-direction:column;margin-block-start:var(--sbb-form-field-error-padding-block-start-override, var(--sbb-form-field-error-padding-block-start))}`;
18
18
  let ne = 0;
19
19
  const z = /* @__PURE__ */ new WeakMap(), be = ["input", "textarea", "select"];
20
20
  class qe extends Event {