@sbb-esta/lyne-elements-dev 5.0.0-next.3-dev.1779195190 → 5.0.0-next.3-dev.1779200097

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 (162) hide show
  1. package/autocomplete/autocomplete-base-element.js +2 -2
  2. package/autocomplete/autocomplete.component.js +1 -1
  3. package/{autocomplete-base-element-DRGjFF9_.js → autocomplete-base-element-6leI6UF4.js} +24 -14
  4. package/autocomplete.js +4 -4
  5. package/autocomplete.pure.js +3 -3
  6. package/calendar/calendar/calendar.component.js +2 -2
  7. package/{calendar.component-oS_T4s4k.js → calendar.component-BK4w5GWV.js} +35 -29
  8. package/calendar.js +4 -4
  9. package/calendar.pure.js +3 -3
  10. package/carousel/carousel/carousel.component.js +1 -1
  11. package/carousel/carousel-item/carousel-item.component.js +2 -2
  12. package/carousel/carousel-list/carousel-list.component.js +1 -1
  13. package/{carousel-item.component-DyZAdXL_.js → carousel-item.component-B6WmZPkW.js} +12 -2
  14. package/{carousel-list.component-Ai0uJWB7.js → carousel-list.component-CnZehdy6.js} +6 -13
  15. package/{carousel.component-9oMMOyWo.js → carousel.component-ZrkGeJgZ.js} +1 -1
  16. package/carousel.js +5 -5
  17. package/carousel.pure.js +4 -4
  18. package/chip/chip-group/chip-group.component.js +1 -1
  19. package/{chip-group.component-DJORKUef.js → chip-group.component-BIP7c2G0.js} +2 -7
  20. package/chip.js +1 -1
  21. package/chip.pure.js +1 -1
  22. package/core/overlay/overlay-outside-pointer-event-listener.js +1 -1
  23. package/custom-elements.json +3886 -3393
  24. package/datepicker/datepicker/datepicker.component.js +1 -1
  25. package/development/autocomplete/autocomplete-base-element.d.ts +6 -3
  26. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  27. package/development/autocomplete/autocomplete-base-element.js +2 -2
  28. package/development/autocomplete/autocomplete.component.js +1 -1
  29. package/development/autocomplete-base-element-qnPoRLvM.js +695 -0
  30. package/development/autocomplete.js +2 -2
  31. package/development/autocomplete.pure.js +2 -2
  32. package/development/calendar/calendar/calendar.component.d.ts +8 -0
  33. package/development/calendar/calendar/calendar.component.d.ts.map +1 -1
  34. package/development/calendar/calendar/calendar.component.js +2 -2
  35. package/development/calendar.component-BKWvdgzO.js +1461 -0
  36. package/development/calendar.js +2 -2
  37. package/development/calendar.pure.js +2 -2
  38. package/development/carousel/carousel/carousel.component.js +1 -1
  39. package/development/carousel/carousel-item/carousel-item.component.d.ts +8 -6
  40. package/development/carousel/carousel-item/carousel-item.component.d.ts.map +1 -1
  41. package/development/carousel/carousel-item/carousel-item.component.js +2 -2
  42. package/development/carousel/carousel-list/carousel-list.component.d.ts.map +1 -1
  43. package/development/carousel/carousel-list/carousel-list.component.js +1 -1
  44. package/development/{carousel-item.component-B_0wdIAu.js → carousel-item.component-nuo7jAt3.js} +16 -4
  45. package/development/carousel-list.component-B8PUREwS.js +126 -0
  46. package/development/carousel.component-D_KIJ9Bb.js +139 -0
  47. package/development/carousel.js +4 -4
  48. package/development/carousel.pure.js +4 -4
  49. package/development/chip/chip-group/chip-group.component.d.ts +1 -23
  50. package/development/chip/chip-group/chip-group.component.d.ts.map +1 -1
  51. package/development/chip/chip-group/chip-group.component.js +1 -1
  52. package/development/chip-group.component-CVizDsAz.js +395 -0
  53. package/development/chip.js +1 -1
  54. package/development/chip.pure.js +1 -1
  55. package/development/core/overlay/overlay-outside-pointer-event-listener.d.ts +1 -1
  56. package/development/core/overlay/overlay-outside-pointer-event-listener.d.ts.map +1 -1
  57. package/development/core/overlay/overlay-outside-pointer-event-listener.js +2 -2
  58. package/development/core.d.ts +0 -1
  59. package/development/core.d.ts.map +1 -1
  60. package/development/datepicker/datepicker/datepicker.component.d.ts +1 -1
  61. package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
  62. package/development/datepicker/datepicker/datepicker.component.js +3 -3
  63. package/development/dialog/dialog/dialog.component.d.ts +2 -3
  64. package/development/dialog/dialog/dialog.component.d.ts.map +1 -1
  65. package/development/dialog/dialog/dialog.component.js +1 -1
  66. package/development/{dialog.component-AItB8ixG.js → dialog.component-D8B2dVck.js} +4 -7
  67. package/development/dialog.js +1 -1
  68. package/development/dialog.pure.js +1 -1
  69. package/development/file-selector/common/file-selector-common.d.ts +5 -0
  70. package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
  71. package/development/file-selector/common/file-selector-common.js +2 -2
  72. package/development/{file-selector-common-CGL95Rnw.js → file-selector-common-mZ5UYxOF.js} +17 -8
  73. package/development/file-selector.js +2 -2
  74. package/development/file-selector.pure.js +2 -2
  75. package/development/form-field/form-field/form-field.component.d.ts +1 -1
  76. package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
  77. package/development/form-field.component-CPWBCHer.js +1 -1
  78. package/development/overlay/overlay-base-element.d.ts +4 -4
  79. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  80. package/development/overlay/overlay-base-element.js +3 -9
  81. package/development/overlay/overlay.component.d.ts +3 -3
  82. package/development/overlay/overlay.component.d.ts.map +1 -1
  83. package/development/overlay/overlay.component.js +1 -1
  84. package/development/{overlay.component-rFmitc_r.js → overlay.component-YSCuGeme.js} +4 -7
  85. package/development/overlay.js +1 -1
  86. package/development/overlay.pure.js +1 -1
  87. package/development/paginator/common/paginator-common.d.ts +11 -6
  88. package/development/paginator/common/paginator-common.d.ts.map +1 -1
  89. package/development/paginator/common/paginator-common.js +2 -2
  90. package/development/paginator-common-B7iba0wQ.js +432 -0
  91. package/development/paginator.js +2 -2
  92. package/development/paginator.pure.js +2 -2
  93. package/development/popover/popover.component.d.ts +7 -0
  94. package/development/popover/popover.component.d.ts.map +1 -1
  95. package/development/popover/popover.component.js +2 -2
  96. package/development/popover.component-CKUZbWbV.js +578 -0
  97. package/development/popover.js +2 -2
  98. package/development/popover.pure.js +2 -2
  99. package/development/{step.component-CcjtUFyR.js → step.component-B_YHm1tz.js} +32 -10
  100. package/development/stepper/step/step.component.d.ts +14 -1
  101. package/development/stepper/step/step.component.d.ts.map +1 -1
  102. package/development/stepper/step/step.component.js +2 -2
  103. package/development/stepper/stepper/stepper.component.d.ts +9 -5
  104. package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
  105. package/development/stepper/stepper/stepper.component.js +1 -1
  106. package/development/stepper.component-BeqeUIRN.js +443 -0
  107. package/development/stepper.js +3 -3
  108. package/development/stepper.pure.js +3 -3
  109. package/development/tab-group.component-CGMBihsQ.js +297 -0
  110. package/development/{tab-label.component-CNX8bsJL.js → tab-label.component-CQOLO2t7.js} +11 -13
  111. package/development/tabs/tab-group/tab-group.component.d.ts +15 -8
  112. package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
  113. package/development/tabs/tab-group/tab-group.component.js +2 -2
  114. package/development/tabs/tab-label/tab-label.component.d.ts.map +1 -1
  115. package/development/tabs/tab-label/tab-label.component.js +1 -1
  116. package/development/tabs.js +3 -3
  117. package/development/tabs.pure.js +3 -3
  118. package/dialog/dialog/dialog.component.js +1 -1
  119. package/{dialog.component-4O3__zyd.js → dialog.component-CsBryhM-.js} +3 -6
  120. package/dialog.js +1 -1
  121. package/dialog.pure.js +1 -1
  122. package/file-selector/common/file-selector-common.js +2 -2
  123. package/{file-selector-common-BE780nIa.js → file-selector-common-VNwWFEmM.js} +26 -19
  124. package/file-selector.js +5 -5
  125. package/file-selector.pure.js +4 -4
  126. package/overlay/overlay-base-element.js +2 -8
  127. package/overlay/overlay.component.js +1 -1
  128. package/{overlay.component-C80XN61v.js → overlay.component-myJflfLY.js} +3 -6
  129. package/overlay.js +1 -1
  130. package/overlay.pure.js +1 -1
  131. package/package.json +2 -2
  132. package/paginator/common/paginator-common.js +2 -2
  133. package/{paginator-common-uoCIcl4X.js → paginator-common-BWewgXga.js} +42 -24
  134. package/paginator.js +5 -5
  135. package/paginator.pure.js +4 -4
  136. package/popover/popover.component.js +2 -2
  137. package/{popover.component-DJruKzY-.js → popover.component-Dm_86bPY.js} +19 -7
  138. package/popover.js +3 -3
  139. package/popover.pure.js +2 -2
  140. package/{step.component-BY6_2Wh2.js → step.component-tJh-Pb_E.js} +23 -8
  141. package/stepper/step/step.component.js +2 -2
  142. package/stepper/stepper/stepper.component.js +1 -1
  143. package/{stepper.component-lh0YSbT1.js → stepper.component-BCl77LVa.js} +20 -3
  144. package/stepper.js +4 -4
  145. package/stepper.pure.js +3 -3
  146. package/{tab-group.component-t4eeCNf-.js → tab-group.component-CDhggNpe.js} +27 -2
  147. package/{tab-label.component-DvvSohaG.js → tab-label.component-BuF2qt1T.js} +23 -22
  148. package/tabs/tab-group/tab-group.component.js +2 -2
  149. package/tabs/tab-label/tab-label.component.js +1 -1
  150. package/tabs.js +7 -7
  151. package/tabs.pure.js +6 -6
  152. package/development/autocomplete-base-element-DQiZ6hhk.js +0 -683
  153. package/development/calendar.component-CjlcDyS5.js +0 -1450
  154. package/development/carousel-list.component-DpDh5tqB.js +0 -133
  155. package/development/carousel.component-ClWvnZ8s.js +0 -139
  156. package/development/chip-group.component-Sgmi-kSy.js +0 -403
  157. package/development/core/interfaces/overlay-close-details.d.ts +0 -6
  158. package/development/core/interfaces/overlay-close-details.d.ts.map +0 -1
  159. package/development/paginator-common-BCeNUko_.js +0 -410
  160. package/development/popover.component-BmTfHMFw.js +0 -564
  161. package/development/stepper.component-80S-oXrH.js +0 -422
  162. package/development/tab-group.component-D4fvd6Uu.js +0 -265
@@ -0,0 +1,443 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { html, unsafeCSS } from "lit";
3
+ import { property } from "lit/decorators.js";
4
+ import { SbbElement, SbbMediaMatcherController, SbbMediaQueryBreakpointLargeAndAbove, SbbMediaQueryBreakpointSmallAndAbove, SbbMediaQueryBreakpointUltraAndAbove, SbbMediaQueryBreakpointZeroAndAbove, forceType, getNextElementIndex, isArrowKeyPressed } from "./core.js";
5
+ import { IntersectionController } from "@lit-labs/observers/intersection-controller.js";
6
+ //#region src/elements/stepper/stepper/stepper.scss?inline
7
+ var stepper_default = ":host {\n --sbb-stepper-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-6x)\n );\n display: block;\n position: relative;\n counter-reset: step-label;\n}\n@media (forced-colors: active) {\n :host {\n --sbb-stepper-marker-color: ButtonText;\n }\n}\n\n:host(:is(:state(disable-animation),[state--disable-animation])) {\n --sbb-disable-animation-duration: 0s;\n}\n\n:host([orientation=vertical]) {\n --sbb-stepper-orientation: column;\n}\n\n.sbb-stepper__labels {\n display: flex;\n flex-direction: var(--sbb-stepper-orientation);\n position: relative;\n justify-content: start;\n margin-block-end: var(--sbb-spacing-responsive-m);\n}\n.sbb-stepper__labels::before {\n content: \"\";\n position: absolute;\n inset-inline-start: calc(var(--sbb-stepper-border-width) * -1);\n background-color: var(--sbb-stepper-marker-color);\n}\n:host([orientation=horizontal]) .sbb-stepper__labels {\n gap: var(--sbb-spacing-responsive-m);\n padding-block-end: var(--sbb-spacing-fixed-4x);\n border-block-end: var(--sbb-stepper-border-width) solid var(--sbb-border-color-4-inverted);\n}\n:host([orientation=horizontal]) .sbb-stepper__labels::before {\n inset-block-end: calc(var(--sbb-stepper-border-width) * -1);\n height: var(--sbb-stepper-marker-width);\n width: var(--sbb-stepper-marker-size, 0);\n transition: width var(--sbb-stepper-animation-duration) var(--sbb-animation-easing);\n}\n:host([orientation=vertical]) .sbb-stepper__labels {\n padding-inline-start: var(--sbb-spacing-fixed-4x);\n border-inline-start: var(--sbb-stepper-border-width) solid var(--sbb-border-color-4-inverted);\n}\n:host([orientation=vertical]) .sbb-stepper__labels::before {\n inset-block-start: 0;\n width: var(--sbb-stepper-marker-width);\n height: var(--sbb-stepper-marker-size, 0);\n transition: height var(--sbb-stepper-animation-duration) var(--sbb-animation-easing);\n}\n\n.sbb-stepper__steps {\n position: relative;\n}\n:host([orientation=horizontal]) .sbb-stepper__steps {\n height: var(--sbb-stepper-content-height);\n transition: height var(--sbb-stepper-animation-duration) var(--sbb-animation-easing);\n}\n\n::slotted(sbb-step-label)::before {\n content: counter(step-label);\n counter-increment: step-label;\n}";
8
+ //#endregion
9
+ //#region src/elements/stepper/stepper/stepper.component.ts
10
+ var DEBOUNCE_TIME = 150;
11
+ var breakpointMap = {
12
+ zero: SbbMediaQueryBreakpointZeroAndAbove,
13
+ small: SbbMediaQueryBreakpointSmallAndAbove,
14
+ large: SbbMediaQueryBreakpointLargeAndAbove,
15
+ ultra: SbbMediaQueryBreakpointUltraAndAbove
16
+ };
17
+ var SbbStepChangeEvent = class extends Event {
18
+ /** The index of the newly selected step. */
19
+ get selectedIndex() {
20
+ return this._selectedIndex;
21
+ }
22
+ /** The index of the previously selected step. */
23
+ get previousIndex() {
24
+ return this._previousIndex;
25
+ }
26
+ /** The newly selected step element. */
27
+ get selectedStep() {
28
+ return this._selectedStep;
29
+ }
30
+ /** The previously selected step element. */
31
+ get previousStep() {
32
+ return this._previousStep;
33
+ }
34
+ constructor({ selectedIndex, previousIndex, selectedStep, previousStep }) {
35
+ super("stepchange", {
36
+ bubbles: true,
37
+ composed: true
38
+ });
39
+ this._selectedIndex = selectedIndex;
40
+ this._previousIndex = previousIndex;
41
+ this._selectedStep = selectedStep;
42
+ this._previousStep = previousStep;
43
+ }
44
+ };
45
+ /**
46
+ * Provides a structured, step-by-step workflow for user interactions.
47
+ * @slot - Provide a `sbb-expansion-panel-header` and a `sbb-expansion-panel-content` to the stepper.
48
+ * @slot step-label - Use this slot to provide an `sbb-step-label`.
49
+ * @slot step - Use this slot to provide an `sbb-step`.
50
+ * @event {SbbStepChangeEvent} stepchange - Emits whenever a step was changed.
51
+ */
52
+ var SbbStepperElement = (() => {
53
+ let _classSuper = SbbElement;
54
+ let _instanceExtraInitializers = [];
55
+ let _linear_decorators;
56
+ let _linear_initializers = [];
57
+ let _linear_extraInitializers = [];
58
+ let _set_horizontalFrom_decorators;
59
+ let _orientation_decorators;
60
+ let _orientation_initializers = [];
61
+ let _orientation_extraInitializers = [];
62
+ let _size_decorators;
63
+ let _size_initializers = [];
64
+ let _size_extraInitializers = [];
65
+ let _set_selected_decorators;
66
+ let _set_selectedIndex_decorators;
67
+ return class SbbStepperElement extends _classSuper {
68
+ static {
69
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
70
+ _linear_decorators = [forceType(), property({ type: Boolean })];
71
+ _set_horizontalFrom_decorators = [property({
72
+ attribute: "horizontal-from",
73
+ reflect: true
74
+ })];
75
+ _orientation_decorators = [property({ reflect: true })];
76
+ _size_decorators = [property({ reflect: true })];
77
+ _set_selected_decorators = [property({ attribute: false })];
78
+ _set_selectedIndex_decorators = [property({
79
+ attribute: "selected-index",
80
+ type: Number
81
+ })];
82
+ __esDecorate(this, null, _linear_decorators, {
83
+ kind: "accessor",
84
+ name: "linear",
85
+ static: false,
86
+ private: false,
87
+ access: {
88
+ has: (obj) => "linear" in obj,
89
+ get: (obj) => obj.linear,
90
+ set: (obj, value) => {
91
+ obj.linear = value;
92
+ }
93
+ },
94
+ metadata: _metadata
95
+ }, _linear_initializers, _linear_extraInitializers);
96
+ __esDecorate(this, null, _set_horizontalFrom_decorators, {
97
+ kind: "setter",
98
+ name: "horizontalFrom",
99
+ static: false,
100
+ private: false,
101
+ access: {
102
+ has: (obj) => "horizontalFrom" in obj,
103
+ set: (obj, value) => {
104
+ obj.horizontalFrom = value;
105
+ }
106
+ },
107
+ metadata: _metadata
108
+ }, null, _instanceExtraInitializers);
109
+ __esDecorate(this, null, _orientation_decorators, {
110
+ kind: "accessor",
111
+ name: "orientation",
112
+ static: false,
113
+ private: false,
114
+ access: {
115
+ has: (obj) => "orientation" in obj,
116
+ get: (obj) => obj.orientation,
117
+ set: (obj, value) => {
118
+ obj.orientation = value;
119
+ }
120
+ },
121
+ metadata: _metadata
122
+ }, _orientation_initializers, _orientation_extraInitializers);
123
+ __esDecorate(this, null, _size_decorators, {
124
+ kind: "accessor",
125
+ name: "size",
126
+ static: false,
127
+ private: false,
128
+ access: {
129
+ has: (obj) => "size" in obj,
130
+ get: (obj) => obj.size,
131
+ set: (obj, value) => {
132
+ obj.size = value;
133
+ }
134
+ },
135
+ metadata: _metadata
136
+ }, _size_initializers, _size_extraInitializers);
137
+ __esDecorate(this, null, _set_selected_decorators, {
138
+ kind: "setter",
139
+ name: "selected",
140
+ static: false,
141
+ private: false,
142
+ access: {
143
+ has: (obj) => "selected" in obj,
144
+ set: (obj, value) => {
145
+ obj.selected = value;
146
+ }
147
+ },
148
+ metadata: _metadata
149
+ }, null, _instanceExtraInitializers);
150
+ __esDecorate(this, null, _set_selectedIndex_decorators, {
151
+ kind: "setter",
152
+ name: "selectedIndex",
153
+ static: false,
154
+ private: false,
155
+ access: {
156
+ has: (obj) => "selectedIndex" in obj,
157
+ set: (obj, value) => {
158
+ obj.selectedIndex = value;
159
+ }
160
+ },
161
+ metadata: _metadata
162
+ }, null, _instanceExtraInitializers);
163
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
164
+ enumerable: true,
165
+ configurable: true,
166
+ writable: true,
167
+ value: _metadata
168
+ });
169
+ }
170
+ static {
171
+ this.elementName = "sbb-stepper";
172
+ }
173
+ static {
174
+ this.styles = [unsafeCSS(stepper_default)];
175
+ }
176
+ static {
177
+ this.events = { stepchange: "stepchange" };
178
+ }
179
+ #linear_accessor_storage;
180
+ /** If set to true, only the current and previous labels can be clicked and selected. */
181
+ get linear() {
182
+ return this.#linear_accessor_storage;
183
+ }
184
+ set linear(value) {
185
+ this.#linear_accessor_storage = value;
186
+ }
187
+ /** Overrides the behavior of `orientation` property. */
188
+ set horizontalFrom(value) {
189
+ this._horizontalFrom = value && breakpointMap[value] ? value : null;
190
+ if (this._horizontalFrom && this._loaded) this._checkOrientation();
191
+ }
192
+ get horizontalFrom() {
193
+ return this._horizontalFrom;
194
+ }
195
+ #orientation_accessor_storage;
196
+ /** Steps orientation, either horizontal or vertical. */
197
+ get orientation() {
198
+ return this.#orientation_accessor_storage;
199
+ }
200
+ set orientation(value) {
201
+ this.#orientation_accessor_storage = value;
202
+ }
203
+ #size_accessor_storage;
204
+ /**
205
+ * Size variant, either s (lean theme default) or m (standard theme default).
206
+ */
207
+ get size() {
208
+ return this.#size_accessor_storage;
209
+ }
210
+ set size(value) {
211
+ this.#size_accessor_storage = value;
212
+ }
213
+ /** The currently selected step. */
214
+ set selected(step) {
215
+ if (this._loaded) this._select(step);
216
+ this._requestedSelected = step;
217
+ }
218
+ get selected() {
219
+ return this.querySelector?.("sbb-step:is(:state(selected),[state--selected])") ?? null;
220
+ }
221
+ /** The currently selected step index. */
222
+ set selectedIndex(index) {
223
+ if (this._loaded && index !== null) this._select(this.steps[index]);
224
+ this._requestedSelectedIndex = index;
225
+ }
226
+ get selectedIndex() {
227
+ return this.selected ? this.steps.indexOf(this.selected) : null;
228
+ }
229
+ /** The steps of the stepper. */
230
+ get steps() {
231
+ const steps = [];
232
+ this.querySelectorAll?.("sbb-step").forEach((step) => {
233
+ customElements.upgrade(step);
234
+ steps.push(step);
235
+ });
236
+ return steps;
237
+ }
238
+ get _enabledSteps() {
239
+ return this.steps.filter((s) => {
240
+ if (s.label) {
241
+ customElements.upgrade(s.label);
242
+ return !s.label.disabled;
243
+ }
244
+ return false;
245
+ });
246
+ }
247
+ constructor() {
248
+ super();
249
+ /**
250
+ * If the sbb-stepper is used in a sbb-dialog, the marker on the selected element will not appear,
251
+ * because the calculations are done when the dialog is closed, so the marker has a width of 0;
252
+ * the same happens for the stepper height.
253
+ * We need to recalculate it when the element becomes visible.
254
+ */
255
+ this._observer = (__runInitializers(this, _instanceExtraInitializers), new IntersectionController(this, {
256
+ target: null,
257
+ callback: (entries) => {
258
+ entries.forEach((e) => {
259
+ if (e.intersectionRatio > 0) {
260
+ this._setStepperHeight(this.selected);
261
+ this._setMarkerSize();
262
+ }
263
+ });
264
+ }
265
+ }));
266
+ this.#linear_accessor_storage = __runInitializers(this, _linear_initializers, false);
267
+ this._horizontalFrom = (__runInitializers(this, _linear_extraInitializers), null);
268
+ this.#orientation_accessor_storage = __runInitializers(this, _orientation_initializers, "horizontal");
269
+ this.#size_accessor_storage = (__runInitializers(this, _orientation_extraInitializers), __runInitializers(this, _size_initializers, null));
270
+ this._requestedSelected = (__runInitializers(this, _size_extraInitializers), null);
271
+ this._requestedSelectedIndex = null;
272
+ this._loaded = false;
273
+ this._resizeObserverTimeout = null;
274
+ this._mediaMatcher = new SbbMediaMatcherController(this, {});
275
+ this._onStepperResize = () => {
276
+ this._checkOrientation();
277
+ this._setStepperHeight(this.selected);
278
+ clearTimeout(this._resizeObserverTimeout);
279
+ this.internals.states.add("disable-animation");
280
+ this._resizeObserverTimeout = setTimeout(() => this.internals.states.delete("disable-animation"), DEBOUNCE_TIME);
281
+ };
282
+ this.addEventListener?.("keydown", (e) => this._handleKeyDown(e));
283
+ this.addEventListener?.("resizechange", (e) => this._onSelectedStepResize(e));
284
+ }
285
+ /** Selects the next step. */
286
+ next() {
287
+ if (this.selectedIndex !== null) this._select(this.steps[this.selectedIndex + 1]);
288
+ }
289
+ /** Selects the previous step. */
290
+ previous() {
291
+ if (this.selectedIndex !== null) this._select(this.steps[this.selectedIndex - 1]);
292
+ }
293
+ /** Resets the form in which the stepper is nested or every form of each step, if any. */
294
+ reset() {
295
+ const closestForm = this.closest("form");
296
+ if (closestForm) closestForm.reset();
297
+ else this.querySelectorAll("form").forEach((form) => form.reset());
298
+ this.selectedIndex = 0;
299
+ if (document.activeElement?.closest("sbb-stepper") === this) this.selected?.label?.focus();
300
+ }
301
+ _isSelectable(step) {
302
+ if (step) {
303
+ customElements.upgrade(step);
304
+ if (step.label) {
305
+ customElements.upgrade(step.label);
306
+ if (!this.linear && step.label.disabled) return false;
307
+ }
308
+ return true;
309
+ } else return false;
310
+ }
311
+ _select(step) {
312
+ if (!this._isSelectable(step) || step === this.selected) return;
313
+ const currentIndex = this.selectedIndex;
314
+ const currentStep = this.selected;
315
+ const validatePayload = {
316
+ currentIndex,
317
+ currentStep,
318
+ nextIndex: this.selectedIndex !== null ? this.selectedIndex + 1 : null,
319
+ nextStep: this.selectedIndex !== null ? this.steps[this.selectedIndex + 1] : null
320
+ };
321
+ if (this.selected && !this.selected.validate(validatePayload)) return;
322
+ this.selected?.deselect();
323
+ step.select();
324
+ /** @internal only to provide double entry in docs. It is a public event! */
325
+ this.dispatchEvent(new SbbStepChangeEvent({
326
+ selectedIndex: this.selectedIndex,
327
+ previousIndex: currentIndex,
328
+ selectedStep: this.selected,
329
+ previousStep: currentStep
330
+ }));
331
+ this._setMarkerSize();
332
+ this._setStepperHeight(step);
333
+ this._configureLinearMode();
334
+ if (document.activeElement?.closest("sbb-stepper") === this) this.selected?.label?.focus();
335
+ }
336
+ _setMarkerSize() {
337
+ if (!this._loaded || !this.selected || this.selectedIndex === void 0 || !this.selected.label) return;
338
+ const offset = this.orientation === "horizontal" ? this.selected.label.offsetLeft + this.selected.label.offsetWidth : this._calculateLabelOffsetTop();
339
+ this.style.setProperty("--sbb-stepper-marker-size", `${offset}px`);
340
+ }
341
+ /**
342
+ * Sets the stepper height based on the height of the provided step.
343
+ */
344
+ _setStepperHeight(step) {
345
+ if (step && step.shadowRoot) {
346
+ const innerElement = step.shadowRoot.querySelector(".sbb-step");
347
+ if (innerElement) this.style?.setProperty("--sbb-stepper-content-height", `${innerElement.offsetHeight}px`);
348
+ }
349
+ }
350
+ _calculateLabelOffsetTop() {
351
+ if (this.selectedIndex === null) return;
352
+ let offset = 0;
353
+ for (const step of this.steps) {
354
+ if (step === this.selected) break;
355
+ offset = step.label.offsetHeight + offset;
356
+ }
357
+ return offset + this.selected.label.offsetHeight + parseFloat(getComputedStyle(this).getPropertyValue("--sbb-spacing-fixed-6x")) * 16 * this.selectedIndex;
358
+ }
359
+ _onSelectedStepResize(e) {
360
+ this._setStepperHeight(e.target);
361
+ }
362
+ _configure() {
363
+ this.steps.forEach((step, i, array) => {
364
+ step.configure(this._loaded);
365
+ step.label?.configure(i + 1, array.length, this._loaded);
366
+ });
367
+ this._select(this.selected || this._enabledSteps[0]);
368
+ }
369
+ _updateLabels() {
370
+ this.steps.forEach((step) => {
371
+ step.slot = this.orientation === "horizontal" ? "step" : "step-label";
372
+ });
373
+ }
374
+ _checkOrientation() {
375
+ if (this.horizontalFrom) {
376
+ this.orientation = this._mediaMatcher.matches(breakpointMap[this.horizontalFrom]) ? "horizontal" : "vertical";
377
+ this._updateLabels();
378
+ }
379
+ setTimeout(() => this._setMarkerSize(), 0);
380
+ }
381
+ _configureLinearMode() {
382
+ this.steps.forEach((step, index) => {
383
+ if (!step.label) return;
384
+ customElements.upgrade(step.label);
385
+ step.label.disable(this.linear && index > this.selectedIndex || !this.linear && step.label.matches(":is(:state(user-disabled),[state--user-disabled])"));
386
+ });
387
+ }
388
+ connectedCallback() {
389
+ super.connectedCallback();
390
+ window.addEventListener("resize", this._onStepperResize, { passive: true });
391
+ this.toggleState("disable-animation", !this._loaded);
392
+ }
393
+ disconnectedCallback() {
394
+ super.disconnectedCallback();
395
+ window.removeEventListener("resize", this._onStepperResize);
396
+ }
397
+ firstUpdated(changedProperties) {
398
+ super.firstUpdated(changedProperties);
399
+ this.updateComplete.then(() => {
400
+ this._loaded = true;
401
+ this._configure();
402
+ if (this._requestedSelected && this.steps.indexOf(this._requestedSelected) !== -1) this.selectedIndex = this.steps.indexOf(this._requestedSelected);
403
+ else if (this._requestedSelectedIndex) this.selectedIndex = this._requestedSelectedIndex;
404
+ else this.selectedIndex = 0;
405
+ this._observer.observe(this);
406
+ this._checkOrientation();
407
+ setTimeout(() => this.internals.states.delete("disable-animation"), DEBOUNCE_TIME);
408
+ });
409
+ }
410
+ willUpdate(changedProperties) {
411
+ super.willUpdate(changedProperties);
412
+ if (changedProperties.has("orientation") && !this.horizontalFrom) {
413
+ this._updateLabels();
414
+ this._setMarkerSize();
415
+ }
416
+ if (changedProperties.has("linear") && this._loaded) this._configureLinearMode();
417
+ if (changedProperties.has("size")) this._setMarkerSize();
418
+ }
419
+ _handleKeyDown(evt) {
420
+ const enabledSteps = this._enabledSteps;
421
+ if (!enabledSteps || evt.target !== this && evt.target.parentElement !== this) return;
422
+ if (isArrowKeyPressed(evt)) {
423
+ const nextIndex = getNextElementIndex(evt, enabledSteps.indexOf(this.selected), enabledSteps.length);
424
+ this._select(enabledSteps[nextIndex]);
425
+ evt.preventDefault();
426
+ }
427
+ }
428
+ render() {
429
+ return html`
430
+ <div class="sbb-stepper__labels" role="tablist">
431
+ <slot name="step-label" @slotchange=${this._configure}></slot>
432
+ </div>
433
+ <div class="sbb-stepper__steps">
434
+ <slot name="step" @slotchange=${this._configure}></slot>
435
+ </div>
436
+ `;
437
+ }
438
+ };
439
+ })();
440
+ //#endregion
441
+ export { SbbStepperElement as n, SbbStepChangeEvent as t };
442
+
443
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQtQmVxZVVJUk4uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3N0ZXBwZXIvc3RlcHBlci9zdGVwcGVyLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3N0ZXBwZXIvc3RlcHBlci9zdGVwcGVyLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIC0tc2JiLXN0ZXBwZXItYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoXG4gICAgLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sXG4gICAgdmFyKC0tc2JiLWFuaW1hdGlvbi1kdXJhdGlvbi02eClcbiAgKTtcblxuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBjb3VudGVyLXJlc2V0OiBzdGVwLWxhYmVsO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi1zdGVwcGVyLW1hcmtlci1jb2xvcjogQnV0dG9uVGV4dDtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUoZGlzYWJsZS1hbmltYXRpb24pKSB7XG4gIEBpbmNsdWRlIHNiYi5kaXNhYmxlLWFuaW1hdGlvbjtcbn1cblxuOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSB7XG4gIC0tc2JiLXN0ZXBwZXItb3JpZW50YXRpb246IGNvbHVtbjtcbn1cblxuLnNiYi1zdGVwcGVyX19sYWJlbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogdmFyKC0tc2JiLXN0ZXBwZXItb3JpZW50YXRpb24pO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGp1c3RpZnktY29udGVudDogc3RhcnQ7XG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUtbSk7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKHZhcigtLXNiYi1zdGVwcGVyLWJvcmRlci13aWR0aCkgKiAtMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXN0ZXBwZXItbWFya2VyLWNvbG9yKTtcbiAgfVxuXG4gIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSAmIHtcbiAgICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUtbSk7XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTR4KTtcbiAgICBib3JkZXItYmxvY2stZW5kOiB2YXIoLS1zYmItc3RlcHBlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLXNiYi1ib3JkZXItY29sb3ItNC1pbnZlcnRlZCk7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgaW5zZXQtYmxvY2stZW5kOiBjYWxjKHZhcigtLXNiYi1zdGVwcGVyLWJvcmRlci13aWR0aCkgKiAtMSk7XG4gICAgICBoZWlnaHQ6IHZhcigtLXNiYi1zdGVwcGVyLW1hcmtlci13aWR0aCk7XG4gICAgICB3aWR0aDogdmFyKC0tc2JiLXN0ZXBwZXItbWFya2VyLXNpemUsIDApO1xuICAgICAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0tc2JiLXN0ZXBwZXItYW5pbWF0aW9uLWR1cmF0aW9uKSB2YXIoLS1zYmItYW5pbWF0aW9uLWVhc2luZyk7XG4gICAgfVxuICB9XG5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSAmIHtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpO1xuICAgIGJvcmRlci1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1zdGVwcGVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tc2JiLWJvcmRlci1jb2xvci00LWludmVydGVkKTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgIHdpZHRoOiB2YXIoLS1zYmItc3RlcHBlci1tYXJrZXItd2lkdGgpO1xuICAgICAgaGVpZ2h0OiB2YXIoLS1zYmItc3RlcHBlci1tYXJrZXItc2l6ZSwgMCk7XG4gICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgdmFyKC0tc2JiLXN0ZXBwZXItYW5pbWF0aW9uLWR1cmF0aW9uKSB2YXIoLS1zYmItYW5pbWF0aW9uLWVhc2luZyk7XG4gICAgfVxuICB9XG59XG5cbi5zYmItc3RlcHBlcl9fc3RlcHMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pICYge1xuICAgIGhlaWdodDogdmFyKC0tc2JiLXN0ZXBwZXItY29udGVudC1oZWlnaHQpO1xuICAgIHRyYW5zaXRpb246IGhlaWdodCB2YXIoLS1zYmItc3RlcHBlci1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKTtcbiAgfVxufVxuXG46OnNsb3R0ZWQoc2JiLXN0ZXAtbGFiZWwpOjpiZWZvcmUge1xuICBjb250ZW50OiBjb3VudGVyKHN0ZXAtbGFiZWwpO1xuICBjb3VudGVyLWluY3JlbWVudDogc3RlcC1sYWJlbDtcbn1cbiIsImltcG9ydCB7IEludGVyc2VjdGlvbkNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL2ludGVyc2VjdGlvbi1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYkhvcml6b250YWxGcm9tIH0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQge1xuICBmb3JjZVR5cGUsXG4gIGdldE5leHRFbGVtZW50SW5kZXgsXG4gIGlzQXJyb3dLZXlQcmVzc2VkLFxuICBTYmJFbGVtZW50LFxuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRBYm92ZSxcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRVbHRyYUFuZEFib3ZlLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFplcm9BbmRBYm92ZSxcbn0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlN0ZXBFbGVtZW50LCBTYmJTdGVwVmFsaWRhdGVFdmVudERldGFpbHMgfSBmcm9tICcuLi9zdGVwL3N0ZXAuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vc3RlcHBlci5zY3NzP2lubGluZSc7XG5cbmNvbnN0IERFQk9VTkNFX1RJTUUgPSAxNTA7XG5cbmNvbnN0IGJyZWFrcG9pbnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHplcm86IFNiYk1lZGlhUXVlcnlCcmVha3BvaW50WmVyb0FuZEFib3ZlLFxuICBzbWFsbDogU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRTbWFsbEFuZEFib3ZlLFxuICBsYXJnZTogU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRMYXJnZUFuZEFib3ZlLFxuICB1bHRyYTogU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRVbHRyYUFuZEFib3ZlLFxufTtcblxuZXhwb3J0IGNsYXNzIFNiYlN0ZXBDaGFuZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJldmlvdXNJbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ByZXZpb3VzU3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIG5ld2x5IHNlbGVjdGVkIHN0ZXAuICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJbmRleCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgc3RlcC4gKi9cbiAgcHVibGljIGdldCBwcmV2aW91c0luZGV4KCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wcmV2aW91c0luZGV4O1xuICB9XG5cbiAgLyoqIFRoZSBuZXdseSBzZWxlY3RlZCBzdGVwIGVsZW1lbnQuICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRTdGVwKCk6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU3RlcDtcbiAgfVxuXG4gIC8qKiBUaGUgcHJldmlvdXNseSBzZWxlY3RlZCBzdGVwIGVsZW1lbnQuICovXG4gIHB1YmxpYyBnZXQgcHJldmlvdXNTdGVwKCk6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzU3RlcDtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7XG4gICAgc2VsZWN0ZWRJbmRleCxcbiAgICBwcmV2aW91c0luZGV4LFxuICAgIHNlbGVjdGVkU3RlcCxcbiAgICBwcmV2aW91c1N0ZXAsXG4gIH06IE9taXQ8U2JiU3RlcENoYW5nZUV2ZW50LCBrZXlvZiBFdmVudD4pIHtcbiAgICBzdXBlcignc3RlcGNoYW5nZScsIHsgYnViYmxlczogdHJ1ZSwgY29tcG9zZWQ6IHRydWUgfSk7XG4gICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7XG4gICAgdGhpcy5fcHJldmlvdXNJbmRleCA9IHByZXZpb3VzSW5kZXg7XG4gICAgdGhpcy5fc2VsZWN0ZWRTdGVwID0gc2VsZWN0ZWRTdGVwO1xuICAgIHRoaXMuX3ByZXZpb3VzU3RlcCA9IHByZXZpb3VzU3RlcDtcbiAgfVxufVxuLyoqXG4gKiBQcm92aWRlcyBhIHN0cnVjdHVyZWQsIHN0ZXAtYnktc3RlcCB3b3JrZmxvdyBmb3IgdXNlciBpbnRlcmFjdGlvbnMuXG4gKiBAc2xvdCAtIFByb3ZpZGUgYSBgc2JiLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJgIGFuZCBhIGBzYmItZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRgIHRvIHRoZSBzdGVwcGVyLlxuICogQHNsb3Qgc3RlcC1sYWJlbCAtIFVzZSB0aGlzIHNsb3QgdG8gcHJvdmlkZSBhbiBgc2JiLXN0ZXAtbGFiZWxgLlxuICogQHNsb3Qgc3RlcCAtIFVzZSB0aGlzIHNsb3QgdG8gcHJvdmlkZSBhbiBgc2JiLXN0ZXBgLlxuICogQGV2ZW50IHtTYmJTdGVwQ2hhbmdlRXZlbnR9IHN0ZXBjaGFuZ2UgLSBFbWl0cyB3aGVuZXZlciBhIHN0ZXAgd2FzIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJTdGVwcGVyRWxlbWVudCBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXN0ZXBwZXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbdW5zYWZlQ1NTKHN0eWxlKV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHN0ZXBjaGFuZ2U6ICdzdGVwY2hhbmdlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKipcbiAgICogSWYgdGhlIHNiYi1zdGVwcGVyIGlzIHVzZWQgaW4gYSBzYmItZGlhbG9nLCB0aGUgbWFya2VyIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IHdpbGwgbm90IGFwcGVhcixcbiAgICogYmVjYXVzZSB0aGUgY2FsY3VsYXRpb25zIGFyZSBkb25lIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQsIHNvIHRoZSBtYXJrZXIgaGFzIGEgd2lkdGggb2YgMDtcbiAgICogdGhlIHNhbWUgaGFwcGVucyBmb3IgdGhlIHN0ZXBwZXIgaGVpZ2h0LlxuICAgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0IHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB2aXNpYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIGNhbGxiYWNrOiAoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLmludGVyc2VjdGlvblJhdGlvID4gMCkge1xuICAgICAgICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIG9ubHkgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIGxhYmVscyBjYW4gYmUgY2xpY2tlZCBhbmQgc2VsZWN0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsaW5lYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZiBgb3JpZW50YXRpb25gIHByb3BlcnR5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Jpem9udGFsLWZyb20nLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBzZXQgaG9yaXpvbnRhbEZyb20odmFsdWU6IFNiYkhvcml6b250YWxGcm9tIHwgbnVsbCkge1xuICAgIHRoaXMuX2hvcml6b250YWxGcm9tID0gdmFsdWUgJiYgYnJlYWtwb2ludE1hcFt2YWx1ZV0gPyB2YWx1ZSA6IG51bGw7XG4gICAgaWYgKHRoaXMuX2hvcml6b250YWxGcm9tICYmIHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5fY2hlY2tPcmllbnRhdGlvbigpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGhvcml6b250YWxGcm9tKCk6IFNiYkhvcml6b250YWxGcm9tIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxGcm9tO1xuICB9XG4gIHByaXZhdGUgX2hvcml6b250YWxGcm9tOiBTYmJIb3Jpem9udGFsRnJvbSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBTdGVwcyBvcmllbnRhdGlvbiwgZWl0aGVyIGhvcml6b250YWwgb3IgdmVydGljYWwuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG4gIC8qKlxuICAgKiBTaXplIHZhcmlhbnQsIGVpdGhlciBzIChsZWFuIHRoZW1lIGRlZmF1bHQpIG9yIG0gKHN0YW5kYXJkIHRoZW1lIGRlZmF1bHQpLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ3MnIHwgJ20nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RlcC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuX3NlbGVjdChzdGVwKTtcbiAgICB9XG4gICAgdGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWQgPSBzdGVwO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogU2JiU3RlcEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yPy48U2JiU3RlcEVsZW1lbnQ+KCdzYmItc3RlcDpzdGF0ZShzZWxlY3RlZCknKSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgX3JlcXVlc3RlZFNlbGVjdGVkOiBTYmJTdGVwRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHN0ZXAgaW5kZXguICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3NlbGVjdGVkLWluZGV4JywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRJbmRleChpbmRleDogbnVtYmVyIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9sb2FkZWQgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3NlbGVjdCh0aGlzLnN0ZXBzW2luZGV4XSk7XG4gICAgfVxuICAgIHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQgPyB0aGlzLnN0ZXBzLmluZGV4T2YodGhpcy5zZWxlY3RlZCkgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgX3JlcXVlc3RlZFNlbGVjdGVkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgc3RlcHMgb2YgdGhlIHN0ZXBwZXIuICovXG4gIHB1YmxpYyBnZXQgc3RlcHMoKTogU2JiU3RlcEVsZW1lbnRbXSB7XG4gICAgY29uc3Qgc3RlcHM6IFNiYlN0ZXBFbGVtZW50W10gPSBbXTtcbiAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2JiLXN0ZXAnKS5mb3JFYWNoKChzdGVwKSA9PiB7XG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKHN0ZXApO1xuICAgICAgc3RlcHMucHVzaChzdGVwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZW5hYmxlZFN0ZXBzKCk6IFNiYlN0ZXBFbGVtZW50W10ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLmZpbHRlcigocykgPT4ge1xuICAgICAgaWYgKHMubGFiZWwpIHtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShzLmxhYmVsKTtcbiAgICAgICAgcmV0dXJuICFzLmxhYmVsLmRpc2FibGVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbWVkaWFNYXRjaGVyID0gbmV3IFNiYk1lZGlhTWF0Y2hlckNvbnRyb2xsZXIodGhpcywge30pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdrZXlkb3duJywgKGUpID0+IHRoaXMuX2hhbmRsZUtleURvd24oZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdyZXNpemVjaGFuZ2UnLCAoZTogRXZlbnQpID0+IHRoaXMuX29uU2VsZWN0ZWRTdGVwUmVzaXplKGUpKTtcbiAgfVxuXG4gIC8qKiBTZWxlY3RzIHRoZSBuZXh0IHN0ZXAuICovXG4gIHB1YmxpYyBuZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3NlbGVjdCh0aGlzLnN0ZXBzW3RoaXMuc2VsZWN0ZWRJbmRleCArIDFdKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2VsZWN0cyB0aGUgcHJldmlvdXMgc3RlcC4gKi9cbiAgcHVibGljIHByZXZpb3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3NlbGVjdCh0aGlzLnN0ZXBzW3RoaXMuc2VsZWN0ZWRJbmRleCAtIDFdKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzZXRzIHRoZSBmb3JtIGluIHdoaWNoIHRoZSBzdGVwcGVyIGlzIG5lc3RlZCBvciBldmVyeSBmb3JtIG9mIGVhY2ggc3RlcCwgaWYgYW55LiAqL1xuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgY29uc3QgY2xvc2VzdEZvcm0gPSB0aGlzLmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICBpZiAoY2xvc2VzdEZvcm0pIHtcbiAgICAgIGNsb3Nlc3RGb3JtLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbCgnZm9ybScpLmZvckVhY2goKGZvcm0pID0+IGZvcm0ucmVzZXQoKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgLy8gSW4gY2FzZSB0aGUgZm9jdXMgaXMgY3VycmVudGx5IGluc2lkZSB0aGUgc3RlcHBlciwgd2UgcmVzZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdC9zZWxlY3RlZCBzdGVwIGxhYmVsLlxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdzYmItc3RlcHBlcicpID09PSB0aGlzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkPy5sYWJlbD8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1NlbGVjdGFibGUoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKTogc3RlcCBpcyBTYmJTdGVwRWxlbWVudCB7XG4gICAgaWYgKHN0ZXApIHtcbiAgICAgIGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUoc3RlcCk7XG4gICAgICBpZiAoc3RlcC5sYWJlbCkge1xuICAgICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKHN0ZXAubGFiZWwpO1xuICAgICAgICBpZiAoIXRoaXMubGluZWFyICYmIHN0ZXAubGFiZWwuZGlzYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0KHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNTZWxlY3RhYmxlKHN0ZXApIHx8IHN0ZXAgPT09IHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zZWxlY3RlZEluZGV4O1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zZWxlY3RlZDtcbiAgICBjb25zdCB2YWxpZGF0ZVBheWxvYWQ6IFNiYlN0ZXBWYWxpZGF0ZUV2ZW50RGV0YWlscyA9IHtcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgIGN1cnJlbnRTdGVwLFxuICAgICAgbmV4dEluZGV4OiB0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwgPyB0aGlzLnNlbGVjdGVkSW5kZXggKyAxIDogbnVsbCxcbiAgICAgIG5leHRTdGVwOiB0aGlzLnNlbGVjdGVkSW5kZXggIT09IG51bGwgPyB0aGlzLnN0ZXBzW3RoaXMuc2VsZWN0ZWRJbmRleCArIDFdIDogbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0ZWQudmFsaWRhdGUodmFsaWRhdGVQYXlsb2FkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkO1xuICAgIGN1cnJlbnQ/LmRlc2VsZWN0KCk7XG4gICAgc3RlcC5zZWxlY3QoKTtcblxuICAgIC8qKiBAaW50ZXJuYWwgb25seSB0byBwcm92aWRlIGRvdWJsZSBlbnRyeSBpbiBkb2NzLiBJdCBpcyBhIHB1YmxpYyBldmVudCEgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgU2JiU3RlcENoYW5nZUV2ZW50KHtcbiAgICAgICAgc2VsZWN0ZWRJbmRleDogdGhpcy5zZWxlY3RlZEluZGV4LFxuICAgICAgICBwcmV2aW91c0luZGV4OiBjdXJyZW50SW5kZXgsXG4gICAgICAgIHNlbGVjdGVkU3RlcDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgcHJldmlvdXNTdGVwOiBjdXJyZW50U3RlcCxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLl9zZXRNYXJrZXJTaXplKCk7XG4gICAgdGhpcy5fc2V0U3RlcHBlckhlaWdodChzdGVwKTtcbiAgICB0aGlzLl9jb25maWd1cmVMaW5lYXJNb2RlKCk7XG4gICAgLy8gSW4gY2FzZSB0aGUgZm9jdXMgaXMgY3VycmVudGx5IGluc2lkZSB0aGUgc3RlcHBlciwgd2UgZm9jdXMgdGhlIHNlbGVjdGVkIHN0ZXAgbGFiZWwuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJ3NiYi1zdGVwcGVyJykgPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQ/LmxhYmVsPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldE1hcmtlclNpemUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2xvYWRlZCB8fFxuICAgICAgIXRoaXMuc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAhdGhpcy5zZWxlY3RlZC5sYWJlbFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvZmZzZXQgPVxuICAgICAgdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZC5sYWJlbC5vZmZzZXRMZWZ0ICsgdGhpcy5zZWxlY3RlZC5sYWJlbC5vZmZzZXRXaWR0aFxuICAgICAgICA6IHRoaXMuX2NhbGN1bGF0ZUxhYmVsT2Zmc2V0VG9wKCk7XG5cbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1zdGVwcGVyLW1hcmtlci1zaXplJywgYCR7b2Zmc2V0fXB4YCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc3RlcHBlciBoZWlnaHQgYmFzZWQgb24gdGhlIGhlaWdodCBvZiB0aGUgcHJvdmlkZWQgc3RlcC5cbiAgICovXG4gIHByaXZhdGUgX3NldFN0ZXBwZXJIZWlnaHQoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgJiYgc3RlcC5zaGFkb3dSb290KSB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQ6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCA9IHN0ZXAuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuc2JiLXN0ZXAnKTtcbiAgICAgIGlmIChpbm5lckVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLXN0ZXBwZXItY29udGVudC1oZWlnaHQnLCBgJHtpbm5lckVsZW1lbnQub2Zmc2V0SGVpZ2h0fXB4YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlTGFiZWxPZmZzZXRUb3AoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnN0ZXBzKSB7XG4gICAgICBpZiAoc3RlcCA9PT0gdGhpcy5zZWxlY3RlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG9mZnNldCA9IHN0ZXAubGFiZWwhLm9mZnNldEhlaWdodCArIG9mZnNldDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIG9mZnNldCArXG4gICAgICB0aGlzLnNlbGVjdGVkIS5sYWJlbCEub2Zmc2V0SGVpZ2h0ISArXG4gICAgICBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcykuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zYmItc3BhY2luZy1maXhlZC02eCcpKSAqXG4gICAgICAgIDE2ICpcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uU2VsZWN0ZWRTdGVwUmVzaXplKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc2V0U3RlcHBlckhlaWdodChlLnRhcmdldCBhcyBTYmJTdGVwRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcy5mb3JFYWNoKChzdGVwLCBpLCBhcnJheSkgPT4ge1xuICAgICAgc3RlcC5jb25maWd1cmUodGhpcy5fbG9hZGVkKTtcbiAgICAgIHN0ZXAubGFiZWw/LmNvbmZpZ3VyZShpICsgMSwgYXJyYXkubGVuZ3RoLCB0aGlzLl9sb2FkZWQpO1xuICAgIH0pO1xuICAgIHRoaXMuX3NlbGVjdCh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuX2VuYWJsZWRTdGVwc1swXSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVMYWJlbHMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcy5mb3JFYWNoKChzdGVwKSA9PiB7XG4gICAgICBzdGVwLnNsb3QgPSB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnc3RlcCcgOiAnc3RlcC1sYWJlbCc7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja09yaWVudGF0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvcml6b250YWxGcm9tKSB7XG4gICAgICB0aGlzLm9yaWVudGF0aW9uID0gdGhpcy5fbWVkaWFNYXRjaGVyLm1hdGNoZXMoYnJlYWtwb2ludE1hcFt0aGlzLmhvcml6b250YWxGcm9tXSlcbiAgICAgICAgPyAnaG9yaXpvbnRhbCdcbiAgICAgICAgOiAndmVydGljYWwnO1xuICAgICAgdGhpcy5fdXBkYXRlTGFiZWxzKCk7XG4gICAgfVxuICAgIC8vIFRoZSB0aW1lb3V0IGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWFya2VyIHRha2VzIHRoZSBjb3JyZWN0IHN0ZXAtbGFiZWwgc2l6ZS5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3NldE1hcmtlclNpemUoKSwgMCk7XG4gIH1cblxuICBwcml2YXRlIF9vblN0ZXBwZXJSZXNpemUgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5fY2hlY2tPcmllbnRhdGlvbigpO1xuICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQodGhpcy5zZWxlY3RlZCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZU9ic2VydmVyVGltZW91dCEpO1xuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2Rpc2FibGUtYW5pbWF0aW9uJyk7XG5cbiAgICAvLyBEaXNhYmxlIHRoZSBhbmltYXRpb24gd2hlbiByZXNpemluZyB0byBhdm9pZCBzdHJhbmdlIHRyYW5zaXRpb24gZWZmZWN0cy5cbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnZGlzYWJsZS1hbmltYXRpb24nKSxcbiAgICAgIERFQk9VTkNFX1RJTUUsXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIF9jb25maWd1cmVMaW5lYXJNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghc3RlcC5sYWJlbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKHN0ZXAubGFiZWwpO1xuXG4gICAgICBzdGVwLmxhYmVsLmRpc2FibGUoXG4gICAgICAgICh0aGlzLmxpbmVhciAmJiBpbmRleCA+IHRoaXMuc2VsZWN0ZWRJbmRleCEpIHx8XG4gICAgICAgICAgKCF0aGlzLmxpbmVhciAmJiBzdGVwLmxhYmVsLm1hdGNoZXMoJzpzdGF0ZSh1c2VyLWRpc2FibGVkKScpKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25TdGVwcGVyUmVzaXplLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2Rpc2FibGUtYW5pbWF0aW9uJywgIXRoaXMuX2xvYWRlZCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25TdGVwcGVyUmVzaXplKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZSgpO1xuXG4gICAgICBpZiAodGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWQgJiYgdGhpcy5zdGVwcy5pbmRleE9mKHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkKSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5zdGVwcy5pbmRleE9mKHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWRJbmRleCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbiAgICAgIHRoaXMuX2NoZWNrT3JpZW50YXRpb24oKTtcbiAgICAgIC8vIFJlbW92ZSBkaXNhYmxlLWFuaW1hdGlvbiBzdGF0ZSBhZnRlciBjb21wb25lbnQgaW5pdFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKCdkaXNhYmxlLWFuaW1hdGlvbicpLCBERUJPVU5DRV9USU1FKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ29yaWVudGF0aW9uJykgJiYgIXRoaXMuaG9yaXpvbnRhbEZyb20pIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUxhYmVscygpO1xuICAgICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaW5lYXInKSAmJiB0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZUxpbmVhck1vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdzaXplJykpIHtcbiAgICAgIHRoaXMuX3NldE1hcmtlclNpemUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRTdGVwczogU2JiU3RlcEVsZW1lbnRbXSA9IHRoaXMuX2VuYWJsZWRTdGVwcztcblxuICAgIGlmIChcbiAgICAgICFlbmFibGVkU3RlcHMgfHxcbiAgICAgIC8vIGRvbid0IHRyYXAgbmVzdGVkIGhhbmRsaW5nXG4gICAgICAoKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpICE9PSB0aGlzICYmIChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93S2V5UHJlc3NlZChldnQpKSB7XG4gICAgICBjb25zdCBjdXJyZW50OiBudW1iZXIgPSBlbmFibGVkU3RlcHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkISk7XG4gICAgICBjb25zdCBuZXh0SW5kZXg6IG51bWJlciA9IGdldE5leHRFbGVtZW50SW5kZXgoZXZ0LCBjdXJyZW50LCBlbmFibGVkU3RlcHMubGVuZ3RoKTtcbiAgICAgIHRoaXMuX3NlbGVjdChlbmFibGVkU3RlcHNbbmV4dEluZGV4XSk7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3RlcHBlcl9fbGFiZWxzXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cInN0ZXAtbGFiZWxcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX2NvbmZpZ3VyZX0+PC9zbG90PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXN0ZXBwZXJfX3N0ZXBzXCI+XG4gICAgICAgIDxzbG90IG5hbWU9XCJzdGVwXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jb25maWd1cmV9Pjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1zdGVwcGVyJzogU2JiU3RlcHBlckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FDMEJBLElBQU0sZ0JBQWdCO0FBRXRCLElBQU0sZ0JBQXdDO0NBQzVDLE1BQU07Q0FDTixPQUFPO0NBQ1AsT0FBTztDQUNQLE9BQU87O0FBR1QsSUFBYSxxQkFBYixjQUF3QyxNQUFLOztDQU8zQyxJQUFXLGdCQUFhO0VBQ3RCLE9BQU8sS0FBSztDQUNkOztDQUdBLElBQVcsZ0JBQWE7RUFDdEIsT0FBTyxLQUFLO0NBQ2Q7O0NBR0EsSUFBVyxlQUFZO0VBQ3JCLE9BQU8sS0FBSztDQUNkOztDQUdBLElBQVcsZUFBWTtFQUNyQixPQUFPLEtBQUs7Q0FDZDtDQUVBLFlBQW1CLEVBQ2pCLGVBQ0EsZUFDQSxjQUNBLGdCQUNzQztFQUN0QyxNQUFNLGNBQWM7R0FBRSxTQUFTO0dBQU0sVUFBVTtFQUFJLENBQUU7RUFDckQsS0FBSyxpQkFBaUI7RUFDdEIsS0FBSyxpQkFBaUI7RUFDdEIsS0FBSyxnQkFBZ0I7RUFDckIsS0FBSyxnQkFBZ0I7Q0FDdkI7Ozs7Ozs7OztJQVNXLDJCQUFpQjttQkFBUzs7Ozs7Ozs7Ozs7Ozs7Y0FBMUIsMEJBQTBCLFlBQVU7Ozt5QkEwQjlDLFVBQVMsR0FDVCxTQUFTLEVBQUUsTUFBTSxRQUFPLENBQUUsQ0FBQztxQ0FJM0IsU0FBUztJQUFFLFdBQVc7SUFBbUIsU0FBUztHQUFJLENBQUUsQ0FBQzs4QkFhekQsU0FBUyxFQUFFLFNBQVMsS0FBSSxDQUFFLENBQUM7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
@@ -1,6 +1,6 @@
1
1
  import { t as SbbStepLabelElement } from "./step-label.component-Bo7Z0w7N.js";
2
- import { t as SbbStepElement } from "./step.component-CcjtUFyR.js";
3
- import { n as SbbStepperElement, t as SbbStepChangeEvent } from "./stepper.component-80S-oXrH.js";
2
+ import { n as SbbStepValidateEvent, t as SbbStepElement } from "./step.component-B_YHm1tz.js";
3
+ import { n as SbbStepperElement, t as SbbStepChangeEvent } from "./stepper.component-BeqeUIRN.js";
4
4
  import "./stepper.pure.js";
5
5
  //#region src/elements/stepper.ts
6
6
  /** @entrypoint */
@@ -8,6 +8,6 @@ SbbStepElement.define();
8
8
  SbbStepLabelElement.define();
9
9
  SbbStepperElement.define();
10
10
  //#endregion
11
- export { SbbStepChangeEvent, SbbStepElement, SbbStepLabelElement, SbbStepperElement };
11
+ export { SbbStepChangeEvent, SbbStepElement, SbbStepLabelElement, SbbStepValidateEvent, SbbStepperElement };
12
12
 
13
13
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc3RlcHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGVudHJ5cG9pbnQgKi9cbmltcG9ydCB7IFNiYlN0ZXBFbGVtZW50LCBTYmJTdGVwTGFiZWxFbGVtZW50LCBTYmJTdGVwcGVyRWxlbWVudCB9IGZyb20gJy4vc3RlcHBlci5wdXJlLnRzJztcblxuZXhwb3J0ICogZnJvbSAnLi9zdGVwcGVyLnB1cmUudHMnO1xuXG5TYmJTdGVwRWxlbWVudC5kZWZpbmUoKTtcblNiYlN0ZXBMYWJlbEVsZW1lbnQuZGVmaW5lKCk7XG5TYmJTdGVwcGVyRWxlbWVudC5kZWZpbmUoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsZUFBZSxPQUFNO0FBQ3JCLG9CQUFvQixPQUFNO0FBQzFCLGtCQUFrQixPQUFNIn0=
@@ -1,4 +1,4 @@
1
1
  import { t as SbbStepLabelElement } from "./step-label.component-Bo7Z0w7N.js";
2
- import { t as SbbStepElement } from "./step.component-CcjtUFyR.js";
3
- import { n as SbbStepperElement, t as SbbStepChangeEvent } from "./stepper.component-80S-oXrH.js";
4
- export { SbbStepChangeEvent, SbbStepElement, SbbStepLabelElement, SbbStepperElement };
2
+ import { n as SbbStepValidateEvent, t as SbbStepElement } from "./step.component-B_YHm1tz.js";
3
+ import { n as SbbStepperElement, t as SbbStepChangeEvent } from "./stepper.component-BeqeUIRN.js";
4
+ export { SbbStepChangeEvent, SbbStepElement, SbbStepLabelElement, SbbStepValidateEvent, SbbStepperElement };