@sbb-esta/lyne-elements 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/autocomplete/autocomplete-base-element.d.ts +19 -21
  2. package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  3. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  4. package/autocomplete-grid/autocomplete-grid-button.js +7 -7
  5. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
  6. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  7. package/autocomplete.js +145 -136
  8. package/chip/chip/chip.d.ts +32 -0
  9. package/chip/chip/chip.d.ts.map +1 -0
  10. package/chip/chip-group/chip-group.d.ts +100 -0
  11. package/chip/chip-group/chip-group.d.ts.map +1 -0
  12. package/chip/chip-group.d.ts +2 -0
  13. package/chip/chip-group.d.ts.map +1 -0
  14. package/chip/chip-group.js +225 -0
  15. package/chip/chip.d.ts +2 -0
  16. package/chip/chip.d.ts.map +1 -0
  17. package/chip/chip.js +85 -0
  18. package/chip.d.ts +3 -0
  19. package/chip.d.ts.map +1 -0
  20. package/chip.js +2 -0
  21. package/clock/clock.d.ts.map +1 -1
  22. package/clock.js +1 -1
  23. package/core/base-elements/button-base-element.d.ts +5 -0
  24. package/core/base-elements/button-base-element.d.ts.map +1 -1
  25. package/core/base-elements.js +94 -79
  26. package/core/controllers/id-observer-controller.d.ts +21 -0
  27. package/core/controllers/id-observer-controller.d.ts.map +1 -0
  28. package/core/controllers/media-matchers-controller.d.ts.map +1 -1
  29. package/core/controllers.d.ts +2 -1
  30. package/core/controllers.d.ts.map +1 -1
  31. package/core/controllers.js +135 -80
  32. package/core/datetime/native-date-adapter.d.ts.map +1 -1
  33. package/core/datetime.js +8 -3
  34. package/core/dom/find-referenced-element.d.ts +1 -0
  35. package/core/dom/find-referenced-element.d.ts.map +1 -1
  36. package/core/dom/input-element.d.ts +3 -1
  37. package/core/dom/input-element.d.ts.map +1 -1
  38. package/core/dom/platform.d.ts +5 -0
  39. package/core/dom/platform.d.ts.map +1 -1
  40. package/core/dom.js +10 -9
  41. package/core/i18n/i18n.d.ts +3 -0
  42. package/core/i18n/i18n.d.ts.map +1 -1
  43. package/core/i18n.js +135 -117
  44. package/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  45. package/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  46. package/core/mixins.js +71 -63
  47. package/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  48. package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  49. package/core/overlay/position.d.ts +1 -1
  50. package/core/overlay/position.d.ts.map +1 -1
  51. package/core/styles/core.scss +89 -24
  52. package/core/styles/image.scss +1 -1
  53. package/core/styles/mixins/table.scss +63 -26
  54. package/core/styles/table.scss +16 -0
  55. package/core/testing/scroll.d.ts +1 -0
  56. package/core/testing/scroll.d.ts.map +1 -1
  57. package/core/testing/wait-for-image-ready.d.ts.map +1 -1
  58. package/core/testing.js +8 -5
  59. package/core.css +90 -34
  60. package/custom-elements.json +2568 -740
  61. package/datepicker/datepicker/datepicker.d.ts +4 -4
  62. package/datepicker/datepicker/datepicker.d.ts.map +1 -1
  63. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
  64. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  65. package/datepicker/datepicker-toggle.js +30 -34
  66. package/datepicker/datepicker.js +103 -105
  67. package/development/autocomplete/autocomplete-base-element.d.ts +19 -21
  68. package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
  69. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
  70. package/development/autocomplete-grid/autocomplete-grid-button.js +3 -3
  71. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts +2 -2
  72. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
  73. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +1 -1
  74. package/development/autocomplete.js +104 -82
  75. package/development/chip/chip/chip.d.ts +32 -0
  76. package/development/chip/chip/chip.d.ts.map +1 -0
  77. package/development/chip/chip-group/chip-group.d.ts +100 -0
  78. package/development/chip/chip-group/chip-group.d.ts.map +1 -0
  79. package/development/chip/chip-group.d.ts +2 -0
  80. package/development/chip/chip-group.d.ts.map +1 -0
  81. package/development/chip/chip-group.js +349 -0
  82. package/development/chip/chip.d.ts +2 -0
  83. package/development/chip/chip.d.ts.map +1 -0
  84. package/development/chip/chip.js +212 -0
  85. package/development/chip.d.ts +3 -0
  86. package/development/chip.d.ts.map +1 -0
  87. package/development/chip.js +3 -0
  88. package/development/clock/clock.d.ts.map +1 -1
  89. package/development/clock.js +5 -2
  90. package/development/core/base-elements/button-base-element.d.ts +5 -0
  91. package/development/core/base-elements/button-base-element.d.ts.map +1 -1
  92. package/development/core/base-elements.js +38 -10
  93. package/development/core/controllers/id-observer-controller.d.ts +21 -0
  94. package/development/core/controllers/id-observer-controller.d.ts.map +1 -0
  95. package/development/core/controllers/media-matchers-controller.d.ts.map +1 -1
  96. package/development/core/controllers.d.ts +2 -1
  97. package/development/core/controllers.d.ts.map +1 -1
  98. package/development/core/controllers.js +116 -44
  99. package/development/core/datetime/native-date-adapter.d.ts.map +1 -1
  100. package/development/core/datetime.js +6 -2
  101. package/development/core/dom/find-referenced-element.d.ts +1 -0
  102. package/development/core/dom/find-referenced-element.d.ts.map +1 -1
  103. package/development/core/dom/input-element.d.ts +3 -1
  104. package/development/core/dom/input-element.d.ts.map +1 -1
  105. package/development/core/dom/platform.d.ts +5 -0
  106. package/development/core/dom/platform.d.ts.map +1 -1
  107. package/development/core/dom.js +3 -1
  108. package/development/core/i18n/i18n.d.ts +3 -0
  109. package/development/core/i18n/i18n.d.ts.map +1 -1
  110. package/development/core/i18n.js +23 -2
  111. package/development/core/mixins/form-associated-input-mixin.d.ts.map +1 -1
  112. package/development/core/mixins/form-associated-radio-button-mixin.d.ts.map +1 -1
  113. package/development/core/mixins.js +19 -6
  114. package/development/core/overlay/overlay-trigger-attributes.d.ts +1 -1
  115. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  116. package/development/core/overlay/position.d.ts +1 -1
  117. package/development/core/overlay/position.d.ts.map +1 -1
  118. package/development/core/overlay.js +1 -1
  119. package/development/core/testing/scroll.d.ts +1 -0
  120. package/development/core/testing/scroll.d.ts.map +1 -1
  121. package/development/core/testing/wait-for-image-ready.d.ts.map +1 -1
  122. package/development/core/testing.js +6 -2
  123. package/development/datepicker/datepicker/datepicker.d.ts +4 -4
  124. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
  125. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +0 -3
  126. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
  127. package/development/datepicker/datepicker-toggle.js +4 -12
  128. package/development/datepicker/datepicker.js +46 -43
  129. package/development/dialog/dialog-title/dialog-title.d.ts +0 -1
  130. package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  131. package/development/dialog/dialog-title.js +2 -5
  132. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
  133. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  134. package/development/expansion-panel/expansion-panel.js +2 -7
  135. package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  136. package/development/flip-card/flip-card-details.js +3 -3
  137. package/development/form-field/form-field/form-field.d.ts.map +1 -1
  138. package/development/form-field/form-field.js +13 -146
  139. package/development/header/header/header.d.ts +6 -7
  140. package/development/header/header/header.d.ts.map +1 -1
  141. package/development/header/header.js +45 -34
  142. package/development/menu/menu/menu.d.ts +7 -8
  143. package/development/menu/menu/menu.d.ts.map +1 -1
  144. package/development/menu/menu.js +42 -41
  145. package/development/navigation/navigation/navigation.d.ts +7 -8
  146. package/development/navigation/navigation/navigation.d.ts.map +1 -1
  147. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  148. package/development/navigation/navigation-marker.js +3 -3
  149. package/development/navigation/navigation-section/navigation-section.d.ts +8 -9
  150. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  151. package/development/navigation/navigation-section.js +50 -47
  152. package/development/navigation/navigation.js +42 -40
  153. package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  154. package/development/option/optgroup/optgroup.d.ts +2 -2
  155. package/development/option/optgroup/optgroup.d.ts.map +1 -1
  156. package/development/option/optgroup.js +3 -3
  157. package/development/option/option/option-base-element.d.ts.map +1 -1
  158. package/development/option/option.js +3 -3
  159. package/development/paginator/paginator.js +12 -1
  160. package/development/popover/popover/popover.d.ts +8 -7
  161. package/development/popover/popover/popover.d.ts.map +1 -1
  162. package/development/popover/popover.js +28 -35
  163. package/development/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  164. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  165. package/development/radio-button/radio-button-group.js +3 -5
  166. package/development/select/select.d.ts +6 -3
  167. package/development/select/select.d.ts.map +1 -1
  168. package/development/select.js +20 -18
  169. package/development/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
  170. package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  171. package/development/selection-expansion-panel.js +2 -7
  172. package/development/sidebar/sidebar/sidebar.d.ts.map +1 -1
  173. package/development/sidebar/sidebar.js +3 -3
  174. package/development/stepper/step/step.d.ts +13 -1
  175. package/development/stepper/step/step.d.ts.map +1 -1
  176. package/development/stepper/step-label.js +2 -2
  177. package/development/stepper/step.js +21 -6
  178. package/development/stepper/stepper/stepper.d.ts +1 -0
  179. package/development/stepper/stepper/stepper.d.ts.map +1 -1
  180. package/development/stepper/stepper.js +5 -1
  181. package/development/table/table-wrapper.js +2 -1
  182. package/development/time-input/time-input.d.ts +6 -8
  183. package/development/time-input/time-input.d.ts.map +1 -1
  184. package/development/time-input.js +42 -44
  185. package/dialog/dialog-title/dialog-title.d.ts +0 -1
  186. package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
  187. package/dialog/dialog-title.js +18 -21
  188. package/expansion-panel/expansion-panel/expansion-panel.d.ts +0 -2
  189. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
  190. package/expansion-panel/expansion-panel.js +53 -56
  191. package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
  192. package/flip-card/flip-card-details.js +8 -8
  193. package/form-field/form-field/form-field.d.ts.map +1 -1
  194. package/form-field/form-field.js +103 -98
  195. package/header/header/header.d.ts +6 -7
  196. package/header/header/header.d.ts.map +1 -1
  197. package/header/header.js +72 -70
  198. package/index.d.ts +4 -0
  199. package/index.js +4 -0
  200. package/menu/menu/menu.d.ts +7 -8
  201. package/menu/menu/menu.d.ts.map +1 -1
  202. package/menu/menu.js +73 -73
  203. package/navigation/navigation/navigation.d.ts +7 -8
  204. package/navigation/navigation/navigation.d.ts.map +1 -1
  205. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
  206. package/navigation/navigation-marker.js +4 -4
  207. package/navigation/navigation-section/navigation-section.d.ts +8 -9
  208. package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
  209. package/navigation/navigation-section.js +75 -77
  210. package/navigation/navigation.js +70 -70
  211. package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
  212. package/option/optgroup/optgroup.d.ts +2 -2
  213. package/option/optgroup/optgroup.d.ts.map +1 -1
  214. package/option/optgroup.js +13 -13
  215. package/option/option/option-base-element.d.ts.map +1 -1
  216. package/option/option.js +2 -2
  217. package/package.json +16 -1
  218. package/paginator/paginator.js +44 -44
  219. package/popover/popover/popover.d.ts +8 -7
  220. package/popover/popover/popover.d.ts.map +1 -1
  221. package/popover/popover.js +73 -73
  222. package/radio-button/radio-button-group/radio-button-group.d.ts +0 -1
  223. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
  224. package/radio-button/radio-button-group.js +8 -8
  225. package/select/select.d.ts +6 -3
  226. package/select/select.d.ts.map +1 -1
  227. package/select.js +73 -73
  228. package/selection-expansion-panel/selection-expansion-panel.d.ts +0 -2
  229. package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
  230. package/selection-expansion-panel.js +10 -13
  231. package/sidebar/sidebar/sidebar.d.ts.map +1 -1
  232. package/sidebar/sidebar.js +2 -2
  233. package/standard-theme.css +166 -79
  234. package/stepper/step/step.d.ts +13 -1
  235. package/stepper/step/step.d.ts.map +1 -1
  236. package/stepper/step-label.js +1 -1
  237. package/stepper/step.js +34 -23
  238. package/stepper/stepper/stepper.d.ts +1 -0
  239. package/stepper/stepper/stepper.d.ts.map +1 -1
  240. package/stepper/stepper.js +19 -16
  241. package/table/table-wrapper.js +4 -4
  242. package/table.css +75 -44
  243. package/time-input/time-input.d.ts +6 -8
  244. package/time-input/time-input.d.ts.map +1 -1
  245. package/time-input.js +66 -73
@@ -0,0 +1,100 @@
1
+ import { CSSResultGroup, LitElement, PropertyValues, TemplateResult } from 'lit';
2
+ import { FormRestoreReason, FormRestoreState } from '../../core/mixins.js';
3
+ export interface SbbChipInputTokenEndEventDetails {
4
+ /** The element that triggered the chip creation */
5
+ origin: 'input' | 'autocomplete';
6
+ /** The value of the new chip. Either the input or the option value depending on the origin */
7
+ value: string;
8
+ label?: string;
9
+ /** Set a new value for the chip that will be created */
10
+ setValue(value: string): void;
11
+ /** Set a label for the chip that will be created */
12
+ setLabel(value: string): void;
13
+ }
14
+ declare const SbbChipGroupElement_base: import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbRequiredMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbDisabledMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbNegativeMixinType> & import('../../core/mixins.js').AbstractConstructor<import('../../core/mixins.js').SbbFormAssociatedMixinType<string[]>> & typeof LitElement;
15
+ /**
16
+ * The `sbb-chip-group` component is used as a container for one or multiple `sbb-chip`.
17
+ *
18
+ * @event {CustomEvent<void>} change - Notifies that the component's value has changed.
19
+ * @event {CustomEvent<void>} input - Notifies that the component's value has changed.
20
+ * @event {CustomEvent<SbbChipInputTokenEndEventDetails>} chipInputTokenEnd - Notifies that a chip is about to be created. Can be used to customize the value and the label. Can be prevented.
21
+ * @slot - Use the unnamed slot to add `sbb-chip` elements.
22
+ * @overrideType value - string[] | null
23
+ */
24
+ export declare class SbbChipGroupElement extends SbbChipGroupElement_base {
25
+ static styles: CSSResultGroup;
26
+ static readonly events: {
27
+ readonly input: "input";
28
+ readonly change: "change";
29
+ readonly chipInputTokenEnd: "chipInputTokenEnd";
30
+ };
31
+ /** Value of the form element. */
32
+ set value(value: string[] | null);
33
+ get value(): string[];
34
+ /** The array of keys that will trigger a `chipInputTokenEnd` event. Default `['Enter']` */
35
+ accessor separatorKeys: string[];
36
+ /** Notifies that the component's value has changed. */
37
+ private _change;
38
+ /** Notifies that the component's value has changed. */
39
+ private _input;
40
+ /** Notifies that a chip is about to be created. Can be prevented. */
41
+ private _chipInputTokenEnd;
42
+ /**
43
+ * Listens to the changes on `readonly` and `disabled` attributes of `<input>`.
44
+ */
45
+ private _inputAttributeObserver;
46
+ /**
47
+ * Listens to the 'size' changes on the `sbb-form-field`.
48
+ */
49
+ private _formFieldAttributeObserver;
50
+ private _inputElement;
51
+ private _inputAbortController;
52
+ private _language;
53
+ constructor();
54
+ connectedCallback(): void;
55
+ protected willUpdate(changedProperties: PropertyValues): void;
56
+ /** @internal */
57
+ formResetCallback(): void;
58
+ /** @internal */
59
+ formStateRestoreCallback(state: FormRestoreState | null, _reason: FormRestoreReason): void;
60
+ protected updateFormValue(): void;
61
+ protected shouldValidate(name: PropertyKey | undefined): boolean;
62
+ protected validate(): void;
63
+ /** Return the list of chip elements **/
64
+ private _chipElements;
65
+ /** Return the list of enabled chip elements **/
66
+ private _enabledChipElements;
67
+ private _setupComponent;
68
+ /**
69
+ * Listen for keyboard events on the chip elements
70
+ **/
71
+ private _onChipKeyDown;
72
+ /**
73
+ * Listen for keyboard events on the input
74
+ **/
75
+ private _onInputKeyDown;
76
+ /**
77
+ * If the input is not empty, create a chip with its value
78
+ */
79
+ private _createChipFromInput;
80
+ private _deleteChip;
81
+ /**
82
+ * Focus an enabled chip. If none are present, focus the input
83
+ * @param index The index of the enabled chip. If null, focus the last one.
84
+ */
85
+ private _focusChip;
86
+ private _emitInputEvents;
87
+ private _createChipElement;
88
+ private _reactToInputChanges;
89
+ private _proxyStateToChips;
90
+ private _inheritSize;
91
+ private _updateInputDescription;
92
+ protected render(): TemplateResult;
93
+ }
94
+ declare global {
95
+ interface HTMLElementTagNameMap {
96
+ 'sbb-chip-group': SbbChipGroupElement;
97
+ }
98
+ }
99
+ export {};
100
+ //# sourceMappingURL=chip-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip-group.d.ts","sourceRoot":"","sources":["../../../../../src/elements/chip/chip-group/chip-group.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,KAAK,CAAC;AASb,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAKtB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,WAAW,gCAAgC;IAC/C,mDAAmD;IACnD,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;IACjC,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;;AAED;;;;;;;;GAQG;AACH,qBAEM,mBAAoB,SAAQ,wBAIjC;IACC,OAAuB,MAAM,EAAE,cAAc,CAAS;IACtD,gBAAuB,MAAM;;;;MAIlB;IAEX,iCAAiC;IACjC,IACoB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EA4B/C;IACD,IAAoB,KAAK,IAAI,MAAM,EAAE,CAEpC;IAED,2FAA2F;IAC3F,SACgB,aAAa,EAAE,MAAM,EAAE,CAAa;IAEpD,uDAAuD;IACvD,OAAO,CAAC,OAAO,CAA2E;IAE1F,uDAAuD;IACvD,OAAO,CAAC,MAAM,CAA0E;IAExF,qEAAqE;IACrE,OAAO,CAAC,kBAAkB,CAGxB;IAEF;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAEtB;IAET;;OAEG;IACH,OAAO,CAAC,2BAA2B,CAE1B;IAET,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,SAAS,CAAmC;;IAepC,iBAAiB,IAAI,IAAI;cAKtB,UAAU,CAAC,iBAAiB,EAAE,cAAc,GAAG,IAAI;IAYtE,gBAAgB;IACT,iBAAiB,IAAI,IAAI;IAIhC,gBAAgB;IACT,wBAAwB,CAC7B,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAC9B,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAUP,SAAS,CAAC,eAAe,IAAI,IAAI;cAQd,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO;cAItD,QAAQ,IAAI,IAAI;IASnC,wCAAwC;IACxC,OAAO,CAAC,aAAa;IAIrB,gDAAgD;IAChD,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,eAAe;IA2CvB;;QAEI;IACJ,OAAO,CAAC,cAAc;IAyBtB;;QAEI;IACJ,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,uBAAuB;cAUZ,MAAM,IAAI,cAAc;CAO5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from './chip-group/chip-group.js';
2
+ //# sourceMappingURL=chip-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip-group.d.ts","sourceRoot":"","sources":["../../../../src/elements/chip/chip-group.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,349 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ import { __esDecorate, __runInitializers } from "tslib";
9
+ import { css, LitElement, isServer, html } from "lit";
10
+ import { customElement, property } from "lit/decorators.js";
11
+ import { inputAutocompleteEvent } from "../autocomplete.js";
12
+ import { isArrowKeyPressed, getNextElementIndex } from "../core/a11y.js";
13
+ import { SbbLanguageController } from "../core/controllers.js";
14
+ import { isLean } from "../core/dom.js";
15
+ import { EventEmitter } from "../core/eventing.js";
16
+ import { i18nSelectionRequired, i18nChipGroupInputDescription } from "../core/i18n.js";
17
+ import { SbbRequiredMixin, SbbDisabledMixin, SbbNegativeMixin, SbbFormAssociatedMixin } from "../core/mixins.js";
18
+ import { SbbChipElement } from "./chip.js";
19
+ const style = css`*,
20
+ ::before,
21
+ ::after {
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ :host {
26
+ --sbb-chip-group-input-min-width: 9.375rem;
27
+ max-width: 100%;
28
+ }
29
+
30
+ :host([data-size=s]:not([data-empty])) {
31
+ --sbb-chip-group-margin-block: 0.375rem 0.3125rem;
32
+ }
33
+ @media (min-width: calc(52.5rem)) {
34
+ :host([data-size=s]:not([data-empty])) {
35
+ --sbb-chip-group-margin-block: 0.3125rem 0.1875rem;
36
+ }
37
+ }
38
+
39
+ ::slotted(input) {
40
+ flex: 1 1 var(--sbb-chip-group-input-min-width);
41
+ }
42
+
43
+ ::slotted(sbb-chip) {
44
+ max-width: 100%;
45
+ }
46
+
47
+ .sbb-chip-group {
48
+ width: 100%;
49
+ display: flex;
50
+ flex-wrap: wrap;
51
+ gap: var(--sbb-spacing-fixed-1x);
52
+ align-items: center;
53
+ margin-block: var(--sbb-chip-group-margin-block);
54
+ }`;
55
+ let SbbChipGroupElement = (() => {
56
+ var _separatorKeys_accessor_storage, _a;
57
+ let _classDecorators = [customElement("sbb-chip-group")];
58
+ let _classDescriptor;
59
+ let _classExtraInitializers = [];
60
+ let _classThis;
61
+ let _classSuper = SbbRequiredMixin(SbbDisabledMixin(SbbNegativeMixin(SbbFormAssociatedMixin(LitElement))));
62
+ let _instanceExtraInitializers = [];
63
+ let _set_value_decorators;
64
+ let _separatorKeys_decorators;
65
+ let _separatorKeys_initializers = [];
66
+ let _separatorKeys_extraInitializers = [];
67
+ var SbbChipGroupElement2 = (_a = class extends _classSuper {
68
+ constructor() {
69
+ super();
70
+ __privateAdd(this, _separatorKeys_accessor_storage);
71
+ __privateSet(this, _separatorKeys_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _separatorKeys_initializers, ["Enter"])));
72
+ this._change = (__runInitializers(this, _separatorKeys_extraInitializers), new EventEmitter(this, SbbChipGroupElement2.events.change));
73
+ this._input = new EventEmitter(this, SbbChipGroupElement2.events.input);
74
+ this._chipInputTokenEnd = new EventEmitter(this, SbbChipGroupElement2.events.chipInputTokenEnd);
75
+ this._inputAttributeObserver = !isServer ? new MutationObserver(() => this._reactToInputChanges()) : null;
76
+ this._formFieldAttributeObserver = !isServer ? new MutationObserver(() => this._inheritSize()) : null;
77
+ this._language = new SbbLanguageController(this);
78
+ this.internals.role = "listbox";
79
+ this.addEventListener(SbbChipElement.events.requestDelete, (ev) => this._deleteChip(ev.target));
80
+ this.addEventListener("keydown", (ev) => this._onChipKeyDown(ev));
81
+ }
82
+ /** Value of the form element. */
83
+ set value(value) {
84
+ value = value ?? [];
85
+ super.value = value;
86
+ const oldValue = this.value;
87
+ const toRemove = [...oldValue];
88
+ for (const c of value) {
89
+ if (toRemove.includes(c)) {
90
+ toRemove.splice(toRemove.indexOf(c), 1);
91
+ }
92
+ }
93
+ toRemove.forEach((value2) => {
94
+ var _a2;
95
+ return (_a2 = this._chipElements().find((c) => c.value === value2)) == null ? void 0 : _a2.remove();
96
+ });
97
+ const toAdd = [...value];
98
+ for (const c of oldValue) {
99
+ if (toAdd.includes(c)) {
100
+ toAdd.splice(toAdd.indexOf(c), 1);
101
+ }
102
+ }
103
+ toAdd.forEach((c) => this._createChipElement(c));
104
+ }
105
+ get value() {
106
+ return this._chipElements().map((c) => c.value);
107
+ }
108
+ /** The array of keys that will trigger a `chipInputTokenEnd` event. Default `['Enter']` */
109
+ get separatorKeys() {
110
+ return __privateGet(this, _separatorKeys_accessor_storage);
111
+ }
112
+ set separatorKeys(value) {
113
+ __privateSet(this, _separatorKeys_accessor_storage, value);
114
+ }
115
+ connectedCallback() {
116
+ super.connectedCallback();
117
+ this._setupComponent();
118
+ }
119
+ willUpdate(changedProperties) {
120
+ super.willUpdate(changedProperties);
121
+ if (changedProperties.has("disabled") || changedProperties.has("formDisabled") || changedProperties.has("negative")) {
122
+ this._proxyStateToChips();
123
+ }
124
+ }
125
+ /** @internal */
126
+ formResetCallback() {
127
+ this.value = null;
128
+ }
129
+ /** @internal */
130
+ formStateRestoreCallback(state, _reason) {
131
+ if (!state) {
132
+ this.value = null;
133
+ return;
134
+ }
135
+ this.value = state.map((entries) => entries[1]);
136
+ }
137
+ updateFormValue() {
138
+ const data = new FormData();
139
+ this.value.forEach((el) => data.append(this.name, el));
140
+ this.internals.setFormValue(data);
141
+ this.validate();
142
+ this._updateInputDescription();
143
+ }
144
+ shouldValidate(name) {
145
+ return super.shouldValidate(name) || name === "required";
146
+ }
147
+ validate() {
148
+ super.validate();
149
+ if (this.required && this.value.length === 0) {
150
+ this.setValidityFlag("valueMissing", i18nSelectionRequired[this._language.current]);
151
+ } else {
152
+ this.removeValidityFlag("valueMissing");
153
+ }
154
+ }
155
+ /** Return the list of chip elements **/
156
+ _chipElements() {
157
+ var _a2;
158
+ return Array.from(((_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-chip")) ?? []);
159
+ }
160
+ /** Return the list of enabled chip elements **/
161
+ _enabledChipElements() {
162
+ var _a2;
163
+ return Array.from(((_a2 = this.querySelectorAll) == null ? void 0 : _a2.call(this, "sbb-chip:not([disabled])")) ?? []);
164
+ }
165
+ _setupComponent() {
166
+ var _a2, _b, _c, _d, _e;
167
+ const input = this.querySelector("input");
168
+ if (input && input !== this._inputElement) {
169
+ (_a2 = this._inputAbortController) == null ? void 0 : _a2.abort();
170
+ (_b = this._inputAttributeObserver) == null ? void 0 : _b.disconnect();
171
+ this._inputElement = input;
172
+ this._inputAbortController = new AbortController();
173
+ this._inputElement.addEventListener("keydown", (ev) => this._onInputKeyDown(ev), {
174
+ signal: this._inputAbortController.signal
175
+ });
176
+ this._inputElement.addEventListener(inputAutocompleteEvent, () => this._createChipFromInput("autocomplete"), {
177
+ signal: this._inputAbortController.signal
178
+ });
179
+ (_c = this._inputAttributeObserver) == null ? void 0 : _c.observe(this._inputElement, {
180
+ attributes: true,
181
+ attributeFilter: ["readonly", "disabled"]
182
+ });
183
+ }
184
+ this._inheritSize();
185
+ (_d = this._formFieldAttributeObserver) == null ? void 0 : _d.disconnect();
186
+ const formField = this.closest("sbb-form-field");
187
+ if (formField) {
188
+ (_e = this._formFieldAttributeObserver) == null ? void 0 : _e.observe(formField, {
189
+ attributes: true,
190
+ attributeFilter: ["size"]
191
+ });
192
+ }
193
+ this.toggleAttribute("data-empty", this.value.length === 0);
194
+ this._reactToInputChanges();
195
+ this.updateFormValue();
196
+ }
197
+ /**
198
+ * Listen for keyboard events on the chip elements
199
+ **/
200
+ _onChipKeyDown(event) {
201
+ const eventTarget = event.target;
202
+ if (eventTarget.localName !== "sbb-chip") {
203
+ return;
204
+ }
205
+ if (isArrowKeyPressed(event)) {
206
+ const focusSteps = this._enabledChipElements();
207
+ const next = getNextElementIndex(event, focusSteps.indexOf(eventTarget), focusSteps.length);
208
+ focusSteps[next].focus();
209
+ return;
210
+ }
211
+ switch (event.key) {
212
+ case "Backspace":
213
+ case "Delete":
214
+ if (!eventTarget.readonly && !eventTarget.disabled) {
215
+ event.preventDefault();
216
+ this._deleteChip(eventTarget);
217
+ }
218
+ break;
219
+ }
220
+ }
221
+ /**
222
+ * Listen for keyboard events on the input
223
+ **/
224
+ _onInputKeyDown(event) {
225
+ switch (event.key) {
226
+ case "Backspace":
227
+ case "ArrowLeft":
228
+ if (!this._inputElement.value) {
229
+ this._focusChip();
230
+ }
231
+ break;
232
+ case "Enter":
233
+ event.preventDefault();
234
+ break;
235
+ }
236
+ if (this.separatorKeys.includes(event.key)) {
237
+ event.preventDefault();
238
+ this._createChipFromInput("input");
239
+ }
240
+ }
241
+ /**
242
+ * If the input is not empty, create a chip with its value
243
+ */
244
+ _createChipFromInput(origin = "input") {
245
+ const inputValue = this._inputElement.value.trim();
246
+ if (!inputValue) {
247
+ return;
248
+ }
249
+ const eventDetail = {
250
+ origin,
251
+ value: inputValue,
252
+ label: void 0,
253
+ setValue: (value) => eventDetail.value = value,
254
+ setLabel: (label) => eventDetail.label = label
255
+ };
256
+ if (!this._chipInputTokenEnd.emit(eventDetail)) {
257
+ return;
258
+ }
259
+ this._createChipElement(eventDetail.value, eventDetail.label);
260
+ this._inputElement.value = "";
261
+ this._emitInputEvents();
262
+ }
263
+ _deleteChip(chip) {
264
+ const chips = this._enabledChipElements();
265
+ chip.remove();
266
+ this._emitInputEvents();
267
+ this._focusChip(chips.indexOf(chip));
268
+ }
269
+ /**
270
+ * Focus an enabled chip. If none are present, focus the input
271
+ * @param index The index of the enabled chip. If null, focus the last one.
272
+ */
273
+ _focusChip(index) {
274
+ var _a2;
275
+ const enabledChips = this._enabledChipElements();
276
+ if (index !== void 0 && enabledChips[index]) {
277
+ enabledChips[index].focus();
278
+ return;
279
+ }
280
+ if (enabledChips.length > 0) {
281
+ enabledChips[enabledChips.length - 1].focus();
282
+ return;
283
+ }
284
+ (_a2 = this._inputElement) == null ? void 0 : _a2.focus();
285
+ }
286
+ _emitInputEvents() {
287
+ this._input.emit();
288
+ this._change.emit();
289
+ }
290
+ _createChipElement(value, label) {
291
+ const newChip = document.createElement("sbb-chip");
292
+ newChip.setAttribute("value", value);
293
+ newChip.innerText = label ?? "";
294
+ this.insertBefore(newChip, this._inputElement);
295
+ }
296
+ _reactToInputChanges() {
297
+ var _a2;
298
+ this.disabled = ((_a2 = this._inputElement) == null ? void 0 : _a2.disabled) ?? false;
299
+ this._proxyStateToChips();
300
+ }
301
+ _proxyStateToChips() {
302
+ this._chipElements().forEach((c) => {
303
+ var _a2;
304
+ c.disabled = this.disabled || this.formDisabled;
305
+ c.readonly = ((_a2 = this._inputElement) == null ? void 0 : _a2.hasAttribute("readonly")) ?? false;
306
+ c.negative = this.negative;
307
+ });
308
+ }
309
+ _inheritSize() {
310
+ var _a2;
311
+ this.setAttribute("data-size", ((_a2 = this.closest("sbb-form-field")) == null ? void 0 : _a2.size) ?? (isLean() ? "s" : "m"));
312
+ }
313
+ _updateInputDescription() {
314
+ if (!this._inputElement) {
315
+ return;
316
+ }
317
+ this._inputElement.setAttribute("aria-description", `${i18nChipGroupInputDescription[this._language.current]} ${this.value.length}`);
318
+ }
319
+ render() {
320
+ return html`
321
+ <div class="sbb-chip-group">
322
+ <slot @slotchange=${this._setupComponent}></slot>
323
+ </div>
324
+ `;
325
+ }
326
+ }, _separatorKeys_accessor_storage = new WeakMap(), _classThis = _a, (() => {
327
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
328
+ _set_value_decorators = [property({ type: Array })];
329
+ _separatorKeys_decorators = [property({ attribute: "separator-keys", type: Array })];
330
+ __esDecorate(_a, null, _set_value_decorators, { kind: "setter", name: "value", static: false, private: false, access: { has: (obj) => "value" in obj, set: (obj, value) => {
331
+ obj.value = value;
332
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
333
+ __esDecorate(_a, null, _separatorKeys_decorators, { kind: "accessor", name: "separatorKeys", static: false, private: false, access: { has: (obj) => "separatorKeys" in obj, get: (obj) => obj.separatorKeys, set: (obj, value) => {
334
+ obj.separatorKeys = value;
335
+ } }, metadata: _metadata }, _separatorKeys_initializers, _separatorKeys_extraInitializers);
336
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
337
+ SbbChipGroupElement2 = _classThis = _classDescriptor.value;
338
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
339
+ })(), _a.styles = style, _a.events = {
340
+ input: "input",
341
+ change: "change",
342
+ chipInputTokenEnd: "chipInputTokenEnd"
343
+ }, __runInitializers(_classThis, _classExtraInitializers), _a);
344
+ return SbbChipGroupElement2 = _classThis;
345
+ })();
346
+ export {
347
+ SbbChipGroupElement
348
+ };
349
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1ncm91cC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2NoaXAvY2hpcC1ncm91cC9jaGlwLWdyb3VwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICBMaXRFbGVtZW50LFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCwgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGlucHV0QXV0b2NvbXBsZXRlRXZlbnQgfSBmcm9tICcuLi8uLi9hdXRvY29tcGxldGUuanMnO1xuaW1wb3J0IHsgZ2V0TmV4dEVsZW1lbnRJbmRleCwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy5qcyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS5qcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2V2ZW50aW5nLmpzJztcbmltcG9ydCB7IGkxOG5DaGlwR3JvdXBJbnB1dERlc2NyaXB0aW9uLCBpMThuU2VsZWN0aW9uUmVxdWlyZWQgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJOZWdhdGl2ZU1peGluLFxuICBTYmJSZXF1aXJlZE1peGluLFxufSBmcm9tICcuLi8uLi9jb3JlL21peGlucy5qcyc7XG5pbXBvcnQgeyBTYmJDaGlwRWxlbWVudCB9IGZyb20gJy4uL2NoaXAuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jaGlwLWdyb3VwLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHMge1xuICAvKiogVGhlIGVsZW1lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNoaXAgY3JlYXRpb24gKi9cbiAgb3JpZ2luOiAnaW5wdXQnIHwgJ2F1dG9jb21wbGV0ZSc7XG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIG5ldyBjaGlwLiBFaXRoZXIgdGhlIGlucHV0IG9yIHRoZSBvcHRpb24gdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW4gKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBTZXQgYSBuZXcgdmFsdWUgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHNldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICAvKiogU2V0IGEgbGFiZWwgZm9yIHRoZSBjaGlwIHRoYXQgd2lsbCBiZSBjcmVhdGVkICovXG4gIHNldExhYmVsKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBgc2JiLWNoaXAtZ3JvdXBgIGNvbXBvbmVudCBpcyB1c2VkIGFzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbXVsdGlwbGUgYHNiYi1jaGlwYC5cbiAqXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PHZvaWQ+fSBjaGFuZ2UgLSBOb3RpZmllcyB0aGF0IHRoZSBjb21wb25lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAqIEBldmVudCB7Q3VzdG9tRXZlbnQ8dm9pZD59IGlucHV0IC0gTm90aWZpZXMgdGhhdCB0aGUgY29tcG9uZW50J3MgdmFsdWUgaGFzIGNoYW5nZWQuXG4gKiBAZXZlbnQge0N1c3RvbUV2ZW50PFNiYkNoaXBJbnB1dFRva2VuRW5kRXZlbnREZXRhaWxzPn0gY2hpcElucHV0VG9rZW5FbmQgLSBOb3RpZmllcyB0aGF0IGEgY2hpcCBpcyBhYm91dCB0byBiZSBjcmVhdGVkLiBDYW4gYmUgdXNlZCB0byBjdXN0b21pemUgdGhlIHZhbHVlIGFuZCB0aGUgbGFiZWwuIENhbiBiZSBwcmV2ZW50ZWQuXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLWNoaXBgIGVsZW1lbnRzLlxuICogQG92ZXJyaWRlVHlwZSB2YWx1ZSAtIHN0cmluZ1tdIHwgbnVsbFxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItY2hpcC1ncm91cCcpXG5jbGFzcyBTYmJDaGlwR3JvdXBFbGVtZW50IGV4dGVuZHMgU2JiUmVxdWlyZWRNaXhpbihcbiAgU2JiRGlzYWJsZWRNaXhpbihcbiAgICBTYmJOZWdhdGl2ZU1peGluKFNiYkZvcm1Bc3NvY2lhdGVkTWl4aW48dHlwZW9mIExpdEVsZW1lbnQsIHN0cmluZ1tdPihMaXRFbGVtZW50KSksXG4gICksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIGNoYW5nZTogJ2NoYW5nZScsXG4gICAgY2hpcElucHV0VG9rZW5FbmQ6ICdjaGlwSW5wdXRUb2tlbkVuZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEFycmF5IH0pXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgdmFsdWUodmFsdWU6IHN0cmluZ1tdIHwgbnVsbCkge1xuICAgIHZhbHVlID0gdmFsdWUgPz8gW107XG4gICAgc3VwZXIudmFsdWUgPSB2YWx1ZTtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAvLyBTdWJ0cmFjdCBmcm9tICdvbGRWYWx1ZScgdGhlIG5ldyAndmFsdWUnXG4gICAgLy8gVGhlIHJlc3VsdCBhcmUgdGhlIGNoaXBzIHRvIHJlbW92ZSAoaGFuZGxlIGR1cGxpY2F0ZXMpXG4gICAgY29uc3QgdG9SZW1vdmUgPSBbLi4ub2xkVmFsdWVdO1xuICAgIGZvciAoY29uc3QgYyBvZiB2YWx1ZSkge1xuICAgICAgaWYgKHRvUmVtb3ZlLmluY2x1ZGVzKGMpKSB7XG4gICAgICAgIHRvUmVtb3ZlLnNwbGljZSh0b1JlbW92ZS5pbmRleE9mKGMpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdG9SZW1vdmUuZm9yRWFjaCgodmFsdWUpID0+XG4gICAgICB0aGlzLl9jaGlwRWxlbWVudHMoKVxuICAgICAgICAuZmluZCgoYykgPT4gYy52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgID8ucmVtb3ZlKCksXG4gICAgKTtcblxuICAgIC8vIFN1YnRyYWN0IGZyb20gdGhlIG5ldyAndmFsdWUnIHdoYXQgd2FzIGFscmVhZHkgcHJlc2VudFxuICAgIC8vIFRoZSByZXN1bHQgYXJlIHRoZSBuZXcgY2hpcHMgdG8gYWRkIChoYW5kbGUgZHVwbGljYXRlcylcbiAgICBjb25zdCB0b0FkZCA9IFsuLi52YWx1ZV07XG4gICAgZm9yIChjb25zdCBjIG9mIG9sZFZhbHVlKSB7XG4gICAgICBpZiAodG9BZGQuaW5jbHVkZXMoYykpIHtcbiAgICAgICAgdG9BZGQuc3BsaWNlKHRvQWRkLmluZGV4T2YoYyksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0b0FkZC5mb3JFYWNoKChjKSA9PiB0aGlzLl9jcmVhdGVDaGlwRWxlbWVudChjKSk7XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlIGdldCB2YWx1ZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBFbGVtZW50cygpLm1hcCgoYykgPT4gYy52YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIGFycmF5IG9mIGtleXMgdGhhdCB3aWxsIHRyaWdnZXIgYSBgY2hpcElucHV0VG9rZW5FbmRgIGV2ZW50LiBEZWZhdWx0IGBbJ0VudGVyJ11gICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3NlcGFyYXRvci1rZXlzJywgdHlwZTogQXJyYXkgfSlcbiAgcHVibGljIGFjY2Vzc29yIHNlcGFyYXRvcktleXM6IHN0cmluZ1tdID0gWydFbnRlciddO1xuXG4gIC8qKiBOb3RpZmllcyB0aGF0IHRoZSBjb21wb25lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZC4gKi9cbiAgcHJpdmF0ZSBfY2hhbmdlOiBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKHRoaXMsIFNiYkNoaXBHcm91cEVsZW1lbnQuZXZlbnRzLmNoYW5nZSk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCdzIHZhbHVlIGhhcyBjaGFuZ2VkLiAqL1xuICBwcml2YXRlIF9pbnB1dDogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcih0aGlzLCBTYmJDaGlwR3JvdXBFbGVtZW50LmV2ZW50cy5pbnB1dCk7XG5cbiAgLyoqIE5vdGlmaWVzIHRoYXQgYSBjaGlwIGlzIGFib3V0IHRvIGJlIGNyZWF0ZWQuIENhbiBiZSBwcmV2ZW50ZWQuICovXG4gIHByaXZhdGUgX2NoaXBJbnB1dFRva2VuRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxTYmJDaGlwSW5wdXRUb2tlbkVuZEV2ZW50RGV0YWlscz4oXG4gICAgdGhpcyxcbiAgICBTYmJDaGlwR3JvdXBFbGVtZW50LmV2ZW50cy5jaGlwSW5wdXRUb2tlbkVuZCxcbiAgKTtcblxuICAvKipcbiAgICogTGlzdGVucyB0byB0aGUgY2hhbmdlcyBvbiBgcmVhZG9ubHlgIGFuZCBgZGlzYWJsZWRgIGF0dHJpYnV0ZXMgb2YgYDxpbnB1dD5gLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5wdXRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5fcmVhY3RUb0lucHV0Q2hhbmdlcygpKVxuICAgIDogbnVsbDtcblxuICAvKipcbiAgICogTGlzdGVucyB0byB0aGUgJ3NpemUnIGNoYW5nZXMgb24gdGhlIGBzYmItZm9ybS1maWVsZGAuXG4gICAqL1xuICBwcml2YXRlIF9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy5faW5oZXJpdFNpemUoKSlcbiAgICA6IG51bGw7XG5cbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pbnB1dEFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5pbnRlcm5hbHMucm9sZSA9ICdsaXN0Ym94JztcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihTYmJDaGlwRWxlbWVudC5ldmVudHMucmVxdWVzdERlbGV0ZSwgKGV2KSA9PlxuICAgICAgdGhpcy5fZGVsZXRlQ2hpcChldi50YXJnZXQgYXMgU2JiQ2hpcEVsZW1lbnQpLFxuICAgICk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uQ2hpcEtleURvd24oZXYpKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3NldHVwQ29tcG9uZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXMpOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZGlzYWJsZWQnKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmb3JtRGlzYWJsZWQnKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpXG4gICAgKSB7XG4gICAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdGhlIHN0YXRlIGZvcm1hdCBpcyBbJ2ZpZWxkLW5hbWUnLCAndmFsdWUnXVtdXG4gICAgdGhpcy52YWx1ZSA9IChzdGF0ZSBhcyBbc3RyaW5nLCBzdHJpbmddW10pLm1hcCgoZW50cmllcykgPT4gZW50cmllc1sxXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRm9ybVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICB0aGlzLnZhbHVlLmZvckVhY2goKGVsKSA9PiBkYXRhLmFwcGVuZCh0aGlzLm5hbWUsIGVsKSk7XG4gICAgdGhpcy5pbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKGRhdGEpO1xuICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICB0aGlzLl91cGRhdGVJbnB1dERlc2NyaXB0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2hvdWxkVmFsaWRhdGUobmFtZTogUHJvcGVydHlLZXkgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVmFsaWRhdGUobmFtZSkgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNldFZhbGlkaXR5RmxhZygndmFsdWVNaXNzaW5nJywgaTE4blNlbGVjdGlvblJlcXVpcmVkW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgY2hpcCBlbGVtZW50cyAqKi9cbiAgcHJpdmF0ZSBfY2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcCcpID8/IFtdKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZW5hYmxlZCBjaGlwIGVsZW1lbnRzICoqL1xuICBwcml2YXRlIF9lbmFibGVkQ2hpcEVsZW1lbnRzKCk6IFNiYkNoaXBFbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItY2hpcDpub3QoW2Rpc2FibGVkXSknKSA/PyBbXSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgIC8vIENvbm5lY3QgdG8gdGhlIGlucHV0XG4gICAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSB0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgICAgdGhpcy5faW5wdXRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50ID0gaW5wdXQ7XG5cbiAgICAgIHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHRoaXMuX29uSW5wdXRLZXlEb3duKGV2KSwge1xuICAgICAgICBzaWduYWw6IHRoaXMuX2lucHV0QWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIGlucHV0QXV0b2NvbXBsZXRlRXZlbnQsXG4gICAgICAgICgpID0+IHRoaXMuX2NyZWF0ZUNoaXBGcm9tSW5wdXQoJ2F1dG9jb21wbGV0ZScpLFxuICAgICAgICB7XG4gICAgICAgICAgc2lnbmFsOiB0aGlzLl9pbnB1dEFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB0aGlzLl9pbnB1dEF0dHJpYnV0ZU9ic2VydmVyPy5vYnNlcnZlKHRoaXMuX2lucHV0RWxlbWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsncmVhZG9ubHknLCAnZGlzYWJsZWQnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEluaGVyaXQgc2l6ZSBmcm9tIHRoZSBmb3JtLWZpZWxkIGFuZCBvYnNlcnZlIGZvciBjaGFuZ2VzXG4gICAgdGhpcy5faW5oZXJpdFNpemUoKTtcbiAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMuY2xvc2VzdCgnc2JiLWZvcm0tZmllbGQnKTtcbiAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICB0aGlzLl9mb3JtRmllbGRBdHRyaWJ1dGVPYnNlcnZlcj8ub2JzZXJ2ZShmb3JtRmllbGQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3NpemUnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWVtcHR5JywgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApO1xuICAgIHRoaXMuX3JlYWN0VG9JbnB1dENoYW5nZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3Iga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBjaGlwIGVsZW1lbnRzXG4gICAqKi9cbiAgcHJpdmF0ZSBfb25DaGlwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYkNoaXBFbGVtZW50O1xuICAgIGlmIChldmVudFRhcmdldC5sb2NhbE5hbWUgIT09ICdzYmItY2hpcCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcnJvdyBrZXlzIGFsbG93IG5hdmlnYXRpb24gYmV0d2VlbiBjaGlwcyBmb2N1cyBzdGVwc1xuICAgIGlmIChpc0Fycm93S2V5UHJlc3NlZChldmVudCkpIHtcbiAgICAgIGNvbnN0IGZvY3VzU3RlcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBuZXh0ID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldmVudCwgZm9jdXNTdGVwcy5pbmRleE9mKGV2ZW50VGFyZ2V0KSwgZm9jdXNTdGVwcy5sZW5ndGgpO1xuICAgICAgZm9jdXNTdGVwc1tuZXh0XS5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgY2FzZSAnRGVsZXRlJzpcbiAgICAgICAgaWYgKCFldmVudFRhcmdldC5yZWFkb25seSAmJiAhZXZlbnRUYXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuX2RlbGV0ZUNoaXAoZXZlbnRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZm9yIGtleWJvYXJkIGV2ZW50cyBvbiB0aGUgaW5wdXRcbiAgICoqL1xuICBwcml2YXRlIF9vbklucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fZm9jdXNDaGlwKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnRzIHRoZSBmb3JtIHN1Ym1pdFxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdXNlciB0eXBlZCBvbmUgb2YgdGhlIHNlcGFyYXRvciBrZXlzLCB0cmlnZ2VyIGEgY2hpcElucHV0VG9rZW5FbmQgZXZlbnRcbiAgICBpZiAodGhpcy5zZXBhcmF0b3JLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgdHlwaW5nIHRoZSBzZXBhcmF0b3Iga2V5IGludG8gdGhlIGlucHV0XG4gICAgICB0aGlzLl9jcmVhdGVDaGlwRnJvbUlucHV0KCdpbnB1dCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgaXMgbm90IGVtcHR5LCBjcmVhdGUgYSBjaGlwIHdpdGggaXRzIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDaGlwRnJvbUlucHV0KG9yaWdpbjogJ2lucHV0JyB8ICdhdXRvY29tcGxldGUnID0gJ2lucHV0Jyk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLl9pbnB1dEVsZW1lbnQhLnZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERldGFpbDogU2JiQ2hpcElucHV0VG9rZW5FbmRFdmVudERldGFpbHMgPSB7XG4gICAgICBvcmlnaW46IG9yaWdpbixcbiAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIHNldFZhbHVlOiAodmFsdWU6IHN0cmluZykgPT4gKGV2ZW50RGV0YWlsLnZhbHVlID0gdmFsdWUpLFxuICAgICAgc2V0TGFiZWw6IChsYWJlbDogc3RyaW5nKSA9PiAoZXZlbnREZXRhaWwubGFiZWwgPSBsYWJlbCksXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5fY2hpcElucHV0VG9rZW5FbmQuZW1pdChldmVudERldGFpbCkpIHtcbiAgICAgIHJldHVybjsgLy8gZXZlbnQgcHJldmVudGVkOyBkbyBub3RoaW5nICh0aGUgY29uc3VtZXIgaGFzIHRvIGNyZWF0ZSB0aGUgY2hpcClcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVDaGlwRWxlbWVudChldmVudERldGFpbC52YWx1ZSwgZXZlbnREZXRhaWwubGFiZWwpO1xuICAgIHRoaXMuX2lucHV0RWxlbWVudCEudmFsdWUgPSAnJzsgLy8gRW1wdHkgdGhlIGlucHV0XG4gICAgdGhpcy5fZW1pdElucHV0RXZlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVDaGlwKGNoaXA6IFNiYkNoaXBFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hpcHMgPSB0aGlzLl9lbmFibGVkQ2hpcEVsZW1lbnRzKCk7XG4gICAgY2hpcC5yZW1vdmUoKTtcbiAgICB0aGlzLl9lbWl0SW5wdXRFdmVudHMoKTtcbiAgICB0aGlzLl9mb2N1c0NoaXAoY2hpcHMuaW5kZXhPZihjaGlwKSk7IC8vIEZvY3VzIHRoZSBuZXh0IGNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBhbiBlbmFibGVkIGNoaXAuIElmIG5vbmUgYXJlIHByZXNlbnQsIGZvY3VzIHRoZSBpbnB1dFxuICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbmFibGVkIGNoaXAuIElmIG51bGwsIGZvY3VzIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIHByaXZhdGUgX2ZvY3VzQ2hpcChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVuYWJsZWRDaGlwcyA9IHRoaXMuX2VuYWJsZWRDaGlwRWxlbWVudHMoKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGVuYWJsZWRDaGlwc1tpbmRleF0pIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tpbmRleF0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZW5hYmxlZENoaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVuYWJsZWRDaGlwc1tlbmFibGVkQ2hpcHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0SW5wdXRFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5wdXQuZW1pdCgpO1xuICAgIHRoaXMuX2NoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVDaGlwRWxlbWVudCh2YWx1ZTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0NoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzYmItY2hpcCcpO1xuICAgIG5ld0NoaXAuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHZhbHVlKTtcbiAgICBuZXdDaGlwLmlubmVyVGV4dCA9IGxhYmVsID8/ICcnO1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaXAsIHRoaXMuX2lucHV0RWxlbWVudCEpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhY3RUb0lucHV0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5faW5wdXRFbGVtZW50Py5kaXNhYmxlZCA/PyBmYWxzZTtcbiAgICB0aGlzLl9wcm94eVN0YXRlVG9DaGlwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJveHlTdGF0ZVRvQ2hpcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2hpcEVsZW1lbnRzKCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgYy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQ7XG4gICAgICBjLnJlYWRvbmx5ID0gdGhpcy5faW5wdXRFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gICAgICBjLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaGVyaXRTaXplKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKCdkYXRhLXNpemUnLCB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyk/LnNpemUgPz8gKGlzTGVhbigpID8gJ3MnIDogJ20nKSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVJbnB1dERlc2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAnYXJpYS1kZXNjcmlwdGlvbicsXG4gICAgICBgJHtpMThuQ2hpcEdyb3VwSW5wdXREZXNjcmlwdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLnZhbHVlLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2hpcC1ncm91cFwiPlxuICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX3NldHVwQ29tcG9uZW50fT48L3Nsb3Q+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2hpcC1ncm91cCc6IFNiYkNoaXBHcm91cEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTYmJDaGlwR3JvdXBFbGVtZW50IiwidmFsdWUiLCJfYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBbURNLHVCQUFtQixNQUFBOzswQkFEeEIsY0FBYyxnQkFBZ0IsQ0FBQzs7OztvQkFDRSxpQkFDaEMsaUJBQ0UsaUJBQWlCLHVCQUFvRCxVQUFVLENBQUMsQ0FBQyxDQUNsRjs7Ozs7O0FBSHVCQSxNQUFBQSx3QkFBQSxtQkFBUSxZQUlqQztBQUFBLElBNkVDLGNBQUE7O0FBaENBO0FBQWdCLHlCQUFBLGtDQWpEWixrQkFBbUIsTUFBQSwwQkFBQSxHQUFBLGtCQUFBLE1BQUEsNkJBaURt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
@@ -0,0 +1,2 @@
1
+ export * from './chip/chip.js';
2
+ //# sourceMappingURL=chip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../../src/elements/chip/chip.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}