@kirbydesign/designsystem 8.2.0-rc.2 → 8.3.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 (193) hide show
  1. package/README.md +7 -0
  2. package/action-group/action-group.component.d.ts +10 -6
  3. package/button/button.component.d.ts +2 -1
  4. package/button/public_api.d.ts +1 -1
  5. package/dropdown/keyboard-handler.service.d.ts +1 -1
  6. package/esm2020/action-group/action-group.component.mjs +25 -29
  7. package/esm2020/button/button.component.mjs +3 -3
  8. package/esm2020/button/public_api.mjs +2 -2
  9. package/esm2020/card/card.component.mjs +2 -2
  10. package/esm2020/dropdown/dropdown.component.mjs +4 -4
  11. package/esm2020/dropdown/dropdown.module.mjs +1 -1
  12. package/esm2020/dropdown/keyboard-handler.service.mjs +12 -7
  13. package/esm2020/header/header.component.mjs +12 -26
  14. package/esm2020/header/public_api.mjs +2 -2
  15. package/esm2020/item/item.component.mjs +2 -2
  16. package/esm2020/lib/index.mjs +3 -1
  17. package/esm2020/lib/kirby.module.mjs +22 -5
  18. package/esm2020/list/list-item/list-item.component.mjs +2 -2
  19. package/esm2020/list/list.component.mjs +2 -2
  20. package/esm2020/menu/kirbydesign-designsystem-menu.mjs +5 -0
  21. package/esm2020/menu/menu.component.mjs +69 -0
  22. package/esm2020/menu/public_api.mjs +2 -0
  23. package/esm2020/modal/modal/footer/modal-footer.component.mjs +3 -3
  24. package/esm2020/modal/v2/footer/footer.component.mjs +2 -2
  25. package/esm2020/modal/v2/modal-routing/modal-routing.component.mjs +3 -3
  26. package/esm2020/page/page-footer/page-footer.component.mjs +2 -2
  27. package/esm2020/page/page.component.mjs +37 -30
  28. package/esm2020/page/public_api.mjs +2 -12
  29. package/esm2020/shared/floating/floating.directive.mjs +91 -24
  30. package/esm2020/shared/floating/public_api.mjs +2 -2
  31. package/esm2020/tab-navigation/kirbydesign-designsystem-tab-navigation.mjs +5 -0
  32. package/esm2020/tab-navigation/public_api.mjs +4 -0
  33. package/esm2020/tab-navigation/tab-navigation/tab-navigation.component.mjs +121 -0
  34. package/esm2020/tab-navigation/tab-navigation-item/tab-navigation-item.component.mjs +17 -0
  35. package/esm2020/tab-navigation/tab-navigation.module.mjs +19 -0
  36. package/fesm2015/kirbydesign-designsystem-accordion.mjs +0 -1
  37. package/fesm2015/kirbydesign-designsystem-action-group.mjs +25 -30
  38. package/fesm2015/kirbydesign-designsystem-action-group.mjs.map +1 -1
  39. package/fesm2015/kirbydesign-designsystem-alert-experimental.mjs +0 -1
  40. package/fesm2015/kirbydesign-designsystem-avatar.mjs +0 -1
  41. package/fesm2015/kirbydesign-designsystem-button.mjs +2 -3
  42. package/fesm2015/kirbydesign-designsystem-button.mjs.map +1 -1
  43. package/fesm2015/kirbydesign-designsystem-calendar.mjs +0 -1
  44. package/fesm2015/kirbydesign-designsystem-card.mjs +2 -3
  45. package/fesm2015/kirbydesign-designsystem-card.mjs.map +1 -1
  46. package/fesm2015/kirbydesign-designsystem-chart.mjs +0 -1
  47. package/fesm2015/kirbydesign-designsystem-checkbox.mjs +0 -1
  48. package/fesm2015/kirbydesign-designsystem-data-table.mjs +0 -1
  49. package/fesm2015/kirbydesign-designsystem-divider.mjs +0 -1
  50. package/fesm2015/kirbydesign-designsystem-dropdown.mjs +15 -11
  51. package/fesm2015/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  52. package/fesm2015/kirbydesign-designsystem-empty-state.mjs +0 -1
  53. package/fesm2015/kirbydesign-designsystem-fab-sheet.mjs +0 -1
  54. package/fesm2015/kirbydesign-designsystem-flag.mjs +0 -1
  55. package/fesm2015/kirbydesign-designsystem-form-field.mjs +0 -1
  56. package/fesm2015/kirbydesign-designsystem-grid.mjs +0 -1
  57. package/fesm2015/kirbydesign-designsystem-header.mjs +12 -29
  58. package/fesm2015/kirbydesign-designsystem-header.mjs.map +1 -1
  59. package/fesm2015/kirbydesign-designsystem-helpers-scss.mjs +0 -1
  60. package/fesm2015/kirbydesign-designsystem-helpers.mjs +0 -1
  61. package/fesm2015/kirbydesign-designsystem-icon.mjs +0 -1
  62. package/fesm2015/kirbydesign-designsystem-item-group.mjs +0 -1
  63. package/fesm2015/kirbydesign-designsystem-item-sliding.mjs +0 -1
  64. package/fesm2015/kirbydesign-designsystem-item.mjs +2 -3
  65. package/fesm2015/kirbydesign-designsystem-item.mjs.map +1 -1
  66. package/fesm2015/kirbydesign-designsystem-kirby-app.mjs +0 -1
  67. package/fesm2015/kirbydesign-designsystem-kirby-ionic-module.mjs +0 -1
  68. package/fesm2015/kirbydesign-designsystem-list.mjs +4 -5
  69. package/fesm2015/kirbydesign-designsystem-list.mjs.map +1 -1
  70. package/fesm2015/kirbydesign-designsystem-loading-overlay.mjs +0 -1
  71. package/fesm2015/kirbydesign-designsystem-menu.mjs +76 -0
  72. package/fesm2015/kirbydesign-designsystem-menu.mjs.map +1 -0
  73. package/fesm2015/kirbydesign-designsystem-modal-v2.mjs +4 -5
  74. package/fesm2015/kirbydesign-designsystem-modal-v2.mjs.map +1 -1
  75. package/fesm2015/kirbydesign-designsystem-modal.mjs +2 -3
  76. package/fesm2015/kirbydesign-designsystem-modal.mjs.map +1 -1
  77. package/fesm2015/kirbydesign-designsystem-page.mjs +38 -32
  78. package/fesm2015/kirbydesign-designsystem-page.mjs.map +1 -1
  79. package/fesm2015/kirbydesign-designsystem-popover.mjs +0 -1
  80. package/fesm2015/kirbydesign-designsystem-progress-circle.mjs +0 -1
  81. package/fesm2015/kirbydesign-designsystem-radio.mjs +0 -1
  82. package/fesm2015/kirbydesign-designsystem-range.mjs +0 -1
  83. package/fesm2015/kirbydesign-designsystem-reorder-list.mjs +0 -1
  84. package/fesm2015/kirbydesign-designsystem-router-outlet.mjs +0 -1
  85. package/fesm2015/kirbydesign-designsystem-section-header.mjs +0 -1
  86. package/fesm2015/kirbydesign-designsystem-shared-floating.mjs +92 -25
  87. package/fesm2015/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  88. package/fesm2015/kirbydesign-designsystem-shared-portal.mjs +0 -1
  89. package/fesm2015/kirbydesign-designsystem-shared.mjs +0 -1
  90. package/fesm2015/kirbydesign-designsystem-slide-button.mjs +0 -1
  91. package/fesm2015/kirbydesign-designsystem-slide.mjs +0 -1
  92. package/fesm2015/kirbydesign-designsystem-spinner.mjs +0 -1
  93. package/fesm2015/kirbydesign-designsystem-tab-navigation.mjs +156 -0
  94. package/fesm2015/kirbydesign-designsystem-tab-navigation.mjs.map +1 -0
  95. package/fesm2015/kirbydesign-designsystem-tabs.mjs +0 -1
  96. package/fesm2015/kirbydesign-designsystem-testing-base.mjs +0 -1
  97. package/fesm2015/kirbydesign-designsystem-testing-jasmine.mjs +0 -1
  98. package/fesm2015/kirbydesign-designsystem-testing-jest.mjs +0 -1
  99. package/fesm2015/kirbydesign-designsystem-testing.mjs +0 -1
  100. package/fesm2015/kirbydesign-designsystem-toast.mjs +0 -1
  101. package/fesm2015/kirbydesign-designsystem-toggle-button.mjs +0 -1
  102. package/fesm2015/kirbydesign-designsystem-toggle.mjs +0 -1
  103. package/fesm2015/kirbydesign-designsystem-types.mjs +0 -1
  104. package/fesm2015/kirbydesign-designsystem.mjs +23 -5
  105. package/fesm2015/kirbydesign-designsystem.mjs.map +1 -1
  106. package/fesm2020/kirbydesign-designsystem-accordion.mjs +0 -1
  107. package/fesm2020/kirbydesign-designsystem-action-group.mjs +25 -30
  108. package/fesm2020/kirbydesign-designsystem-action-group.mjs.map +1 -1
  109. package/fesm2020/kirbydesign-designsystem-alert-experimental.mjs +0 -1
  110. package/fesm2020/kirbydesign-designsystem-avatar.mjs +0 -1
  111. package/fesm2020/kirbydesign-designsystem-button.mjs +2 -3
  112. package/fesm2020/kirbydesign-designsystem-button.mjs.map +1 -1
  113. package/fesm2020/kirbydesign-designsystem-calendar.mjs +0 -1
  114. package/fesm2020/kirbydesign-designsystem-card.mjs +2 -3
  115. package/fesm2020/kirbydesign-designsystem-card.mjs.map +1 -1
  116. package/fesm2020/kirbydesign-designsystem-chart.mjs +0 -1
  117. package/fesm2020/kirbydesign-designsystem-checkbox.mjs +0 -1
  118. package/fesm2020/kirbydesign-designsystem-data-table.mjs +0 -1
  119. package/fesm2020/kirbydesign-designsystem-divider.mjs +0 -1
  120. package/fesm2020/kirbydesign-designsystem-dropdown.mjs +15 -11
  121. package/fesm2020/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  122. package/fesm2020/kirbydesign-designsystem-empty-state.mjs +0 -1
  123. package/fesm2020/kirbydesign-designsystem-fab-sheet.mjs +0 -1
  124. package/fesm2020/kirbydesign-designsystem-flag.mjs +0 -1
  125. package/fesm2020/kirbydesign-designsystem-form-field.mjs +0 -1
  126. package/fesm2020/kirbydesign-designsystem-grid.mjs +0 -1
  127. package/fesm2020/kirbydesign-designsystem-header.mjs +12 -27
  128. package/fesm2020/kirbydesign-designsystem-header.mjs.map +1 -1
  129. package/fesm2020/kirbydesign-designsystem-helpers-scss.mjs +0 -1
  130. package/fesm2020/kirbydesign-designsystem-helpers.mjs +0 -1
  131. package/fesm2020/kirbydesign-designsystem-icon.mjs +0 -1
  132. package/fesm2020/kirbydesign-designsystem-item-group.mjs +0 -1
  133. package/fesm2020/kirbydesign-designsystem-item-sliding.mjs +0 -1
  134. package/fesm2020/kirbydesign-designsystem-item.mjs +2 -3
  135. package/fesm2020/kirbydesign-designsystem-item.mjs.map +1 -1
  136. package/fesm2020/kirbydesign-designsystem-kirby-app.mjs +0 -1
  137. package/fesm2020/kirbydesign-designsystem-kirby-ionic-module.mjs +0 -1
  138. package/fesm2020/kirbydesign-designsystem-list.mjs +4 -5
  139. package/fesm2020/kirbydesign-designsystem-list.mjs.map +1 -1
  140. package/fesm2020/kirbydesign-designsystem-loading-overlay.mjs +0 -1
  141. package/fesm2020/kirbydesign-designsystem-menu.mjs +76 -0
  142. package/fesm2020/kirbydesign-designsystem-menu.mjs.map +1 -0
  143. package/fesm2020/kirbydesign-designsystem-modal-v2.mjs +4 -5
  144. package/fesm2020/kirbydesign-designsystem-modal-v2.mjs.map +1 -1
  145. package/fesm2020/kirbydesign-designsystem-modal.mjs +2 -3
  146. package/fesm2020/kirbydesign-designsystem-modal.mjs.map +1 -1
  147. package/fesm2020/kirbydesign-designsystem-page.mjs +38 -32
  148. package/fesm2020/kirbydesign-designsystem-page.mjs.map +1 -1
  149. package/fesm2020/kirbydesign-designsystem-popover.mjs +0 -1
  150. package/fesm2020/kirbydesign-designsystem-progress-circle.mjs +0 -1
  151. package/fesm2020/kirbydesign-designsystem-radio.mjs +0 -1
  152. package/fesm2020/kirbydesign-designsystem-range.mjs +0 -1
  153. package/fesm2020/kirbydesign-designsystem-reorder-list.mjs +0 -1
  154. package/fesm2020/kirbydesign-designsystem-router-outlet.mjs +0 -1
  155. package/fesm2020/kirbydesign-designsystem-section-header.mjs +0 -1
  156. package/fesm2020/kirbydesign-designsystem-shared-floating.mjs +91 -25
  157. package/fesm2020/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  158. package/fesm2020/kirbydesign-designsystem-shared-portal.mjs +0 -1
  159. package/fesm2020/kirbydesign-designsystem-shared.mjs +0 -1
  160. package/fesm2020/kirbydesign-designsystem-slide-button.mjs +0 -1
  161. package/fesm2020/kirbydesign-designsystem-slide.mjs +0 -1
  162. package/fesm2020/kirbydesign-designsystem-spinner.mjs +0 -1
  163. package/fesm2020/kirbydesign-designsystem-tab-navigation.mjs +155 -0
  164. package/fesm2020/kirbydesign-designsystem-tab-navigation.mjs.map +1 -0
  165. package/fesm2020/kirbydesign-designsystem-tabs.mjs +0 -1
  166. package/fesm2020/kirbydesign-designsystem-testing-base.mjs +0 -1
  167. package/fesm2020/kirbydesign-designsystem-testing-jasmine.mjs +0 -1
  168. package/fesm2020/kirbydesign-designsystem-testing-jest.mjs +0 -1
  169. package/fesm2020/kirbydesign-designsystem-testing.mjs +0 -1
  170. package/fesm2020/kirbydesign-designsystem-toast.mjs +0 -1
  171. package/fesm2020/kirbydesign-designsystem-toggle-button.mjs +0 -1
  172. package/fesm2020/kirbydesign-designsystem-toggle.mjs +0 -1
  173. package/fesm2020/kirbydesign-designsystem-types.mjs +0 -1
  174. package/fesm2020/kirbydesign-designsystem.mjs +23 -5
  175. package/fesm2020/kirbydesign-designsystem.mjs.map +1 -1
  176. package/header/header.component.d.ts +5 -11
  177. package/header/public_api.d.ts +1 -1
  178. package/lib/index.d.ts +2 -0
  179. package/lib/kirby.module.d.ts +42 -39
  180. package/menu/index.d.ts +5 -0
  181. package/menu/menu.component.d.ts +31 -0
  182. package/menu/public_api.d.ts +1 -0
  183. package/package.json +18 -2
  184. package/page/page.component.d.ts +12 -5
  185. package/page/public_api.d.ts +1 -12
  186. package/shared/floating/floating.directive.d.ts +30 -4
  187. package/shared/floating/public_api.d.ts +1 -1
  188. package/tab-navigation/index.d.ts +5 -0
  189. package/tab-navigation/public_api.d.ts +3 -0
  190. package/tab-navigation/tab-navigation/tab-navigation.component.d.ts +30 -0
  191. package/tab-navigation/tab-navigation-item/tab-navigation-item.component.d.ts +7 -0
  192. package/tab-navigation/tab-navigation.module.d.ts +9 -0
  193. package/icon/src/README.md +0 -16
@@ -11,6 +11,13 @@ export var FloatingOffset;
11
11
  FloatingOffset[FloatingOffset["small"] = 4] = "small";
12
12
  FloatingOffset[FloatingOffset["medium"] = 8] = "medium";
13
13
  })(FloatingOffset || (FloatingOffset = {}));
14
+ export var OutletSelector;
15
+ (function (OutletSelector) {
16
+ OutletSelector["tag"] = "tag";
17
+ OutletSelector["id"] = "id";
18
+ OutletSelector["class"] = "class";
19
+ OutletSelector["name"] = "name";
20
+ })(OutletSelector || (OutletSelector = {}));
14
21
  /**
15
22
  * @summary FloatingDirective is a utility that lets you declarative anchor "popup" containers to another element.
16
23
  *
@@ -55,7 +62,7 @@ export class FloatingDirective {
55
62
  this._strategy = 'absolute';
56
63
  this._triggers = ['click'];
57
64
  this.isShown = false;
58
- this.eventListenerDisposeFns = [];
65
+ this.referenceEventListenerDisposeFns = [];
59
66
  this.triggerEventMap = new Map([
60
67
  ['click', [{ event: 'click', method: this.toggleShow.bind(this) }]],
61
68
  [
@@ -73,12 +80,19 @@ export class FloatingDirective {
73
80
  ],
74
81
  ],
75
82
  ]);
83
+ this.HTMLElements = {
84
+ id: (value) => Array.of(document.getElementById(value)),
85
+ class: (value) => Array.from(document.getElementsByClassName(value)),
86
+ name: (value) => Array.from(document.getElementsByName(value)),
87
+ tag: (value) => Array.from(document.getElementsByTagName(value)),
88
+ default: () => null,
89
+ };
76
90
  }
77
91
  /**
78
92
  * Reference to the element for which the host should anchor to
79
93
  * */
80
94
  set reference(ref) {
81
- this.tearDownEventHandling();
95
+ this.tearDownReferenceElementEventHandling();
82
96
  this._reference = ref;
83
97
  this.setupEventHandling();
84
98
  this.autoUpdatePosition();
@@ -113,7 +127,7 @@ export class FloatingDirective {
113
127
  * */
114
128
  set triggers(eventTriggers) {
115
129
  this._triggers = eventTriggers;
116
- this.tearDownEventHandling();
130
+ this.tearDownReferenceElementEventHandling();
117
131
  this.setupEventHandling();
118
132
  }
119
133
  get triggers() {
@@ -125,22 +139,31 @@ export class FloatingDirective {
125
139
  * This should be used when there's issues with the stacking context, and not as a default option.
126
140
  * */
127
141
  set DOMPortalOutlet(outlet) {
128
- this.portalDirective.outlet = outlet;
142
+ this._providedPortalOutlet = outlet;
143
+ this.portalDirective.outlet =
144
+ this.DOMPortalOutlet ?? this.getOutletElement(this.portalOutletConfig);
145
+ }
146
+ get DOMPortalOutlet() {
147
+ return this._providedPortalOutlet;
148
+ }
149
+ /**
150
+ * Defines how to automatically find and assign DOMPortalOutlet if none is provided in DOMPortalOutlet.
151
+ * If nothing is provided here and in DOMPortalOutlet, the provided strategy is used
152
+ * */
153
+ set portalOutletConfig(config) {
154
+ this._portalOutletConfig = config;
155
+ if (!this.DOMPortalOutlet) {
156
+ this.portalDirective.outlet = this.getOutletElement(config);
157
+ }
158
+ }
159
+ get portalOutletConfig() {
160
+ return this._portalOutletConfig;
129
161
  }
130
162
  onEscapeKeyPressed() {
131
163
  if (this.closeOnEscapeKey) {
132
164
  this.hide();
133
165
  }
134
166
  }
135
- onMouseClick(event) {
136
- const clickedOnHost = this.elementRef.nativeElement.contains(event.target);
137
- if (clickedOnHost) {
138
- this.handleClickInsideHostElement();
139
- }
140
- else {
141
- this.handleClickOutsideHostElement(event);
142
- }
143
- }
144
167
  ngOnInit() {
145
168
  this.addFloatStylingToHostElement();
146
169
  this.updateHostElementPosition();
@@ -150,6 +173,7 @@ export class FloatingDirective {
150
173
  if (this.isDisabled) {
151
174
  return;
152
175
  }
176
+ this.attachDocumentClickEvent();
153
177
  this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'block');
154
178
  this.isShown = true;
155
179
  this.displayChanged.emit(this.isShown);
@@ -159,6 +183,7 @@ export class FloatingDirective {
159
183
  if (this.isDisabled) {
160
184
  return;
161
185
  }
186
+ this.tearDownDocumentClickEventHandling();
162
187
  this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'none');
163
188
  this.isShown = false;
164
189
  this.displayChanged.emit(this.isShown);
@@ -172,11 +197,24 @@ export class FloatingDirective {
172
197
  this.show();
173
198
  }
174
199
  }
200
+ onDocumentClickWhileHostShown(event) {
201
+ const clickedOnHost = this.elementRef.nativeElement.contains(event.target);
202
+ if (clickedOnHost) {
203
+ this.handleClickInsideHostElement();
204
+ }
205
+ else {
206
+ this.handleClickOutsideHostElement(event);
207
+ }
208
+ }
175
209
  addFloatStylingToHostElement() {
176
210
  this.renderer.setStyle(this.elementRef.nativeElement, 'left', `0px`);
177
211
  this.renderer.setStyle(this.elementRef.nativeElement, 'top', `0px`);
178
212
  this.renderer.setStyle(this.elementRef.nativeElement, 'position', this.strategy);
179
213
  this.renderer.setStyle(this.elementRef.nativeElement, 'z-index', DesignTokenHelper.zLayer('popover'));
214
+ this.setDisplayStyling();
215
+ }
216
+ setDisplayStyling() {
217
+ this.renderer.setStyle(this.elementRef.nativeElement, 'display', this.isShown ? `block` : `none`);
180
218
  }
181
219
  updateHostElementPosition() {
182
220
  if (!this.reference) {
@@ -210,7 +248,7 @@ export class FloatingDirective {
210
248
  setPositionStylingOnHostElement(xPosition, yPosition) {
211
249
  this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${xPosition}px`);
212
250
  this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${yPosition}px`);
213
- this.renderer.setStyle(this.elementRef.nativeElement, 'display', this.isShown ? `block` : `none`);
251
+ this.setDisplayStyling();
214
252
  }
215
253
  setupEventHandling() {
216
254
  if (!this.reference || !this.triggers) {
@@ -218,6 +256,12 @@ export class FloatingDirective {
218
256
  }
219
257
  this.triggers.forEach((trigger) => this.attachTriggerEventToReferenceElement(trigger));
220
258
  }
259
+ attachDocumentClickEvent() {
260
+ if (this.documentClickEventListenerDisposeFn) {
261
+ return;
262
+ }
263
+ this.documentClickEventListenerDisposeFn = this.renderer.listen('document', 'mousedown', (event) => this.onDocumentClickWhileHostShown(event));
264
+ }
221
265
  attachTriggerEventToReferenceElement(trigger) {
222
266
  const events = this.triggerEventMap.get(trigger);
223
267
  if (!events) {
@@ -225,7 +269,7 @@ export class FloatingDirective {
225
269
  }
226
270
  events.forEach((event) => {
227
271
  const eventListenerDisposeFn = this.renderer.listen(this.reference?.nativeElement, event.event, event.method);
228
- this.eventListenerDisposeFns.push(eventListenerDisposeFn);
272
+ this.referenceEventListenerDisposeFns.push(eventListenerDisposeFn);
229
273
  });
230
274
  }
231
275
  handleClickInsideHostElement() {
@@ -239,13 +283,36 @@ export class FloatingDirective {
239
283
  this.hide();
240
284
  }
241
285
  }
242
- tearDownEventHandling() {
243
- this.eventListenerDisposeFns.forEach((eventListenerDisposeFunction) => {
286
+ getOutletElement(config) {
287
+ if (!config || !config.selector || !config.value) {
288
+ return null;
289
+ }
290
+ const elements = this.getHTMLElements(config);
291
+ if (!elements || elements.length === 0) {
292
+ throw Error(`Could not locate HTMLElement for ${config.selector}. Did you misspell it?`);
293
+ }
294
+ if (elements.length > 1) {
295
+ throw Error(`Multiple HTMLElements found for ${config.selector}.
296
+ This can lead to unintended behaviours. Provide an unique outlet`);
297
+ }
298
+ return elements[0];
299
+ }
300
+ getHTMLElements(config) {
301
+ return (this.HTMLElements[config.selector](config.value) || this.HTMLElements['default'](config.value));
302
+ }
303
+ tearDownReferenceElementEventHandling() {
304
+ this.referenceEventListenerDisposeFns.forEach((eventListenerDisposeFunction) => {
244
305
  if (eventListenerDisposeFunction != null) {
245
306
  eventListenerDisposeFunction();
246
307
  }
247
308
  });
248
- this.eventListenerDisposeFns = [];
309
+ this.referenceEventListenerDisposeFns = [];
310
+ }
311
+ tearDownDocumentClickEventHandling() {
312
+ if (this.documentClickEventListenerDisposeFn) {
313
+ this.documentClickEventListenerDisposeFn();
314
+ this.documentClickEventListenerDisposeFn = null;
315
+ }
249
316
  }
250
317
  removeAutoUpdaterRef() {
251
318
  if (this.autoUpdaterRef) {
@@ -253,12 +320,13 @@ export class FloatingDirective {
253
320
  }
254
321
  }
255
322
  ngOnDestroy() {
256
- this.tearDownEventHandling();
323
+ this.tearDownDocumentClickEventHandling();
324
+ this.tearDownReferenceElementEventHandling();
257
325
  this.removeAutoUpdaterRef();
258
326
  }
259
327
  }
260
328
  /** @nocollapse */ FloatingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FloatingDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.PortalDirective }], target: i0.ɵɵFactoryTarget.Directive });
261
- /** @nocollapse */ FloatingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: FloatingDirective, isStandalone: true, selector: "[kirbyFloating]", inputs: { reference: "reference", placement: "placement", strategy: "strategy", triggers: "triggers", DOMPortalOutlet: "DOMPortalOutlet", isDisabled: "isDisabled", offset: "offset", shift: "shift", autoPlacement: "autoPlacement", closeOnSelect: "closeOnSelect", closeOnEscapeKey: "closeOnEscapeKey", closeOnBackdrop: "closeOnBackdrop" }, outputs: { displayChanged: "displayChanged" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyPressed($event)", "document:mousedown": "onMouseClick($event)" } }, providers: [PortalDirective], hostDirectives: [{ directive: i1.PortalDirective }], ngImport: i0 });
329
+ /** @nocollapse */ FloatingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: FloatingDirective, isStandalone: true, selector: "[kirbyFloating]", inputs: { reference: "reference", placement: "placement", strategy: "strategy", triggers: "triggers", DOMPortalOutlet: "DOMPortalOutlet", portalOutletConfig: "portalOutletConfig", isDisabled: "isDisabled", offset: "offset", shift: "shift", autoPlacement: "autoPlacement", closeOnSelect: "closeOnSelect", closeOnEscapeKey: "closeOnEscapeKey", closeOnBackdrop: "closeOnBackdrop" }, outputs: { displayChanged: "displayChanged" }, host: { listeners: { "document:keydown.escape": "onEscapeKeyPressed($event)" } }, providers: [PortalDirective], hostDirectives: [{ directive: i1.PortalDirective }], ngImport: i0 });
262
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FloatingDirective, decorators: [{
263
331
  type: Directive,
264
332
  args: [{
@@ -277,6 +345,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
277
345
  type: Input
278
346
  }], DOMPortalOutlet: [{
279
347
  type: Input
348
+ }], portalOutletConfig: [{
349
+ type: Input
280
350
  }], isDisabled: [{
281
351
  type: Input
282
352
  }], offset: [{
@@ -296,8 +366,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
296
366
  }], onEscapeKeyPressed: [{
297
367
  type: HostListener,
298
368
  args: ['document:keydown.escape', ['$event']]
299
- }], onMouseClick: [{
300
- type: HostListener,
301
- args: ['document:mousedown', ['$event']]
302
369
  }] } });
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc2hhcmVkL2Zsb2F0aW5nL3NyYy9mbG9hdGluZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FFTixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFJMUUsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtREFBUSxDQUFBO0lBQ1IscURBQVMsQ0FBQTtJQUNULHVEQUFVLENBQUE7QUFDWixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFTRDs7Ozs7OztHQU9HO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQThJNUIsWUFDVSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixlQUFnQztRQUZoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBbEYxQzs7YUFFSztRQUNXLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUM7O2FBRUs7UUFDVyxXQUFNLEdBQW1CLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFN0Q7OzthQUdLO1FBQ1csVUFBSyxHQUFZLEtBQUssQ0FBQztR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WWMsUUFBUTtzQkFBM0IsS0FBSztnQkFjYyxRQUFRO3NCQUEzQixLQUFLO2dCQWVjLGVBQWU7c0JBQWxDLEtBQUs7Z0JBT1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxNQUFNO3NCQUFyQixLQUFLO2dCQU1VLEtBQUs7c0JBQXBCLEtBQUs7Z0JBS1UsYUFBYTtzQkFBNUIsS0FBSztnQkFLVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUtXLGNBQWM7c0JBQTlCLE1BQU07Z0JBR0Esa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVE1QyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBhdXRvUGxhY2VtZW50LFxuICBhdXRvVXBkYXRlLFxuICBjb21wdXRlUG9zaXRpb24sXG4gIG9mZnNldCxcbiAgc2hpZnQsXG4gIFN0cmF0ZWd5LFxufSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcbmltcG9ydCB7IENvbXB1dGVQb3NpdGlvbkNvbmZpZywgTWlkZGxld2FyZSwgUGxhY2VtZW50IH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUvc3JjL3R5cGVzJztcbmltcG9ydCB7IERlc2lnblRva2VuSGVscGVyIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2NvcmUnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9ydGFsRGlyZWN0aXZlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zaGFyZWQvcG9ydGFsJztcblxuZXhwb3J0IHR5cGUgVHJpZ2dlckV2ZW50ID0gJ2hvdmVyJyB8ICdjbGljaycgfCAnZm9jdXMnO1xuXG5leHBvcnQgZW51bSBGbG9hdGluZ09mZnNldCB7XG4gIG5vbmUgPSAwLFxuICBzbWFsbCA9IDQsXG4gIG1lZGl1bSA9IDgsXG59XG5cbmludGVyZmFjZSBFdmVudE1ldGhvZHMge1xuICBldmVudDogc3RyaW5nO1xuICBtZXRob2Q6ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbiA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQHN1bW1hcnkgRmxvYXRpbmdEaXJlY3RpdmUgaXMgYSB1dGlsaXR5IHRoYXQgbGV0cyB5b3UgZGVjbGFyYXRpdmUgYW5jaG9yIFwicG9wdXBcIiBjb250YWluZXJzIHRvIGFub3RoZXIgZWxlbWVudC5cbiAqXG4gKiBVc2VzIGZsb2F0aW5nLXVpLCB3aXRoIHRoaXMgZGlyZWN0aXZlIHdyYXBzIHRoZSBmdW5jdGlvbmFsaXR5OiBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2dldHRpbmctc3RhcnRlZFxuICpcbiAqIFVzZXMgUG9ydGFsRGlyZWN0aXZlIHRvIGVuYWJsZSBmdW5jdGlvbmFsaXR5IGZvciBwb3J0YWxpbmcgdGhlIGZsb2F0ZWQgY29udGVudC4gVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuIG5lZWRlZFxuICogYW5kIG5vdCBhcyB0aGUgZGVmYXVsdCBvcHRpb24uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1traXJieUZsb2F0aW5nXScsXG4gIHByb3ZpZGVyczogW1BvcnRhbERpcmVjdGl2ZV0sXG4gIGhvc3REaXJlY3RpdmVzOiBbUG9ydGFsRGlyZWN0aXZlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmxvYXRpbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBob3N0IHNob3VsZCBhbmNob3IgdG9cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCByZWZlcmVuY2UocmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy50ZWFyRG93bkV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLl9yZWZlcmVuY2UgPSByZWY7XG4gICAgdGhpcy5zZXR1cEV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLmF1dG9VcGRhdGVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGdldCByZWZlcmVuY2UoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZmVyZW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGhvc3Qgc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlLiBDYW4gYmUgYWZmZWN0ZWQgYnkgbWlkZGxld2FyZVxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHBsYWNlbWVudChwbGFjZW1lbnQ6IFBsYWNlbWVudCkge1xuICAgIHRoaXMuX3BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGxhY2VtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IGZvciBob3cgdGhlIGhvc3Qgc2hvdWxkIGJlIHBvc2l0aW9uZWQuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc3RyYXRlZ3koc3RyYXRlZ3k6IFN0cmF0ZWd5KSB7XG4gICAgdGhpcy5fc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyYXRlZ3koKTogU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLl9zdHJhdGVneTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoZW4gdGhlIGhvc3Qgc2hvdWxkIGJlIGRpc3BsYXllZC9oaWRkZW4sIGkuZS4gY2xpY2sgd2lsbCBhdHRhY2ggYSBjbGljayBsaXN0ZW5lciB0byB0aGUgcmVmZXJlbmNlXG4gICAqIHRoYXQgbWFrZXMgdGhlIGhvc3QgdG9nZ2xlIGRpc3BsYXkuIFN1cHBvcnRzIG11bHRpcGxlIHRyaWdnZXJzLCB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbWJpbmF0aW9uc1xuICAgKiBsaWtlIGNsaWNrL2ZvY3VzLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRyaWdnZXJzKGV2ZW50VHJpZ2dlcnM6IEFycmF5PFRyaWdnZXJFdmVudD4pIHtcbiAgICB0aGlzLl90cmlnZ2VycyA9IGV2ZW50VHJpZ2dlcnM7XG4gICAgdGhpcy50ZWFyRG93bkV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGluZygpO1xuICB9XG5cbiAgcHVibGljIGdldCB0cmlnZ2VycygpOiBBcnJheTxUcmlnZ2VyRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IGZvciB3aGljaCB0aGUgY29udGVudCBzaG91bGQgcG9ydGFsIGludG8uXG4gICAqIFByb3ZpZGluZyBhbiBvdXRsZXQgZW5hYmxlcyB0aGUgcG9ydGFsLCBpZiBub3RoaW5nIGlzIHByb3ZpZGVkLCB0aGUgcHJvdmlkZWQgc3RyYXRlZ3kgaXMgdXNlZC5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZXJlJ3MgaXNzdWVzIHdpdGggdGhlIHN0YWNraW5nIGNvbnRleHQsIGFuZCBub3QgYXMgYSBkZWZhdWx0IG9wdGlvbi5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBET01Qb3J0YWxPdXRsZXQob3V0bGV0OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucG9ydGFsRGlyZWN0aXZlLm91dGxldCA9IG91dGxldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGhvc3QgZnJvbSBiZWluZyB0b2dnbGVkIGlmIHNldC5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzcGxhY2VzIHRoZSBmbG9hdGluZyBlbGVtZW50IGZyb20gaXRzIGNvcmUgcGxhY2VtZW50IGFsb25nIHRoZSBzcGVjaWZpZWQgYXhlcy5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIG9mZnNldDogRmxvYXRpbmdPZmZzZXQgPSBGbG9hdGluZ09mZnNldC5ub25lO1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGUgc3BlY2lmaWVkIGF4ZXMgaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3LlxuICAgKiBUaGlzIGRvZXMgbm90IGFsd2F5cyB3b3JrIGFzIGV4cGVjdGVkLCBzbyBkb24ndCBcImp1c3RcIiBzZXQgaXQuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzaGlmdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDaG9vc2VzIHRoZSBwbGFjZW1lbnQgdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHkuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvUGxhY2VtZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgaGlkaW5nIHRoZSBob3N0IGJ5IGV2ZW50cy4gU2VlIHZhcmlhYmxlIG5hbWVzLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VPblNlbGVjdDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uRXNjYXBlS2V5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGNsb3NlT25CYWNrZHJvcDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIG9wdGlvbiB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBob3N0IGNoYW5nZXMgZGlzcGxheS4gVGhlIG5ldyBkaXNwbGF5IHZhbHVlIGlzIHByb3ZpZGVkLlxuICAgKiAqL1xuICBAT3V0cHV0KCkgcHVibGljIGRpc3BsYXlDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Fc2NhcGVLZXlQcmVzc2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT25Fc2NhcGVLZXkpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbk1vdXNlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tlZE9uSG9zdDogYm9vbGVhbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGNsaWNrZWRPbkhvc3QpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tJbnNpZGVIb3N0RWxlbWVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZUhvc3RFbGVtZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZW1lbnQ6IFBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xuXG4gIHByaXZhdGUgX3N0cmF0ZWd5OiBTdHJhdGVneSA9ICdhYnNvbHV0ZSc7XG5cbiAgcHJpdmF0ZSBfdHJpZ2dlcnM6IEFycmF5PFRyaWdnZXJFdmVudD4gPSBbJ2NsaWNrJ107XG5cbiAgcHJpdmF0ZSBfcmVmZXJlbmNlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgYXV0b1VwZGF0ZXJSZWY6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNTaG93bjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuW10gPSBbXTtcbiAgcHJpdmF0ZSB0cmlnZ2VyRXZlbnRNYXA6IE1hcDxUcmlnZ2VyRXZlbnQsIEV2ZW50TWV0aG9kc1tdPiA9IG5ldyBNYXAoW1xuICAgIFsnY2xpY2snLCBbeyBldmVudDogJ2NsaWNrJywgbWV0aG9kOiB0aGlzLnRvZ2dsZVNob3cuYmluZCh0aGlzKSB9XV0sXG4gICAgW1xuICAgICAgJ2hvdmVyJyxcbiAgICAgIFtcbiAgICAgICAgeyBldmVudDogJ21vdXNlZW50ZXInLCBtZXRob2Q6IHRoaXMuc2hvdy5iaW5kKHRoaXMpIH0sXG4gICAgICAgIHsgZXZlbnQ6ICdtb3VzZWxlYXZlJywgbWV0aG9kOiB0aGlzLmhpZGUuYmluZCh0aGlzKSB9LFxuICAgICAgXSxcbiAgICBdLFxuICAgIFtcbiAgICAgICdmb2N1cycsXG4gICAgICBbXG4gICAgICAgIHsgZXZlbnQ6ICdmb2N1cycsIG1ldGhvZDogdGhpcy5zaG93LmJpbmQodGhpcykgfSxcbiAgICAgICAgeyBldmVudDogJ2JsdXInLCBtZXRob2Q6IHRoaXMuaGlkZS5iaW5kKHRoaXMpIH0sXG4gICAgICBdLFxuICAgIF0sXG4gIF0pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcG9ydGFsRGlyZWN0aXZlOiBQb3J0YWxEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEZsb2F0U3R5bGluZ1RvSG9zdEVsZW1lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qIFNob3VsZCBiZSBhY2Nlc3NpYmxlIGZvciBwcm9ncmFtbWF0aWNhbGx5IHNldHRpbmcgZGlzcGxheSAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICB0aGlzLmlzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheUNoYW5nZWQuZW1pdCh0aGlzLmlzU2hvd24pO1xuICB9XG5cbiAgLyogU2hvdWxkIGJlIGFjY2Vzc2libGUgZm9yIHByb2dyYW1tYXRpY2FsbHkgc2V0dGluZyBkaXNwbGF5ICovXG4gIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgdGhpcy5pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5kaXNwbGF5Q2hhbmdlZC5lbWl0KHRoaXMuaXNTaG93bik7XG4gIH1cblxuICAvKiBTaG91bGQgYmUgYWNjZXNzaWJsZSBmb3IgcHJvZ3JhbW1hdGljYWxseSBzZXR0aW5nIGRpc3BsYXkgKi9cbiAgcHVibGljIHRvZ2dsZVNob3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTaG93bikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRmxvYXRTdHlsaW5nVG9Ib3N0RWxlbWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAwcHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndG9wJywgYDBweGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsIHRoaXMuc3RyYXRlZ3kpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICd6LWluZGV4JyxcbiAgICAgIERlc2lnblRva2VuSGVscGVyLnpMYXllcigncG9wb3ZlcicpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSG9zdEVsZW1lbnRQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnOiBDb21wdXRlUG9zaXRpb25Db25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgbWlkZGxld2FyZTogdGhpcy5nZXRNaWRkbGV3YXJlQ29uZmlnKCksXG4gICAgICBzdHJhdGVneTogdGhpcy5zdHJhdGVneSxcbiAgICB9IGFzIENvbXB1dGVQb3NpdGlvbkNvbmZpZztcblxuICAgIGZyb20oXG4gICAgICBjb21wdXRlUG9zaXRpb24odGhpcy5yZWZlcmVuY2U/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjb25maWcpXG4gICAgKS5zdWJzY3JpYmUoKHsgeCwgeSB9KSA9PiB0aGlzLnNldFBvc2l0aW9uU3R5bGluZ09uSG9zdEVsZW1lbnQoeCwgeSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaWRkbGV3YXJlQ29uZmlnKCk6IEFycmF5PE1pZGRsZXdhcmUgfCBudWxsIHwgdW5kZWZpbmVkIHwgZmFsc2U+IHtcbiAgICBjb25zdCBtaWRkbGV3YXJlOiBBcnJheTxNaWRkbGV3YXJlIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGZhbHNlPiA9IFtdO1xuICAgIG1pZGRsZXdhcmUucHVzaChvZmZzZXQodGhpcy5vZmZzZXQpKTtcblxuICAgIGlmICh0aGlzLnNoaWZ0KSB7XG4gICAgICBtaWRkbGV3YXJlLnB1c2goc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXV0b1BsYWNlbWVudCkge1xuICAgICAgbWlkZGxld2FyZS5wdXNoKGF1dG9QbGFjZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gIH1cblxuICBwcml2YXRlIGF1dG9VcGRhdGVQb3NpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUF1dG9VcGRhdGVyUmVmKCk7XG5cbiAgICBpZiAoIXRoaXMucmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hdXRvVXBkYXRlclJlZiA9IGF1dG9VcGRhdGUoXG4gICAgICB0aGlzLnJlZmVyZW5jZT8ubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy51cGRhdGVIb3N0RWxlbWVudFBvc2l0aW9uLmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvblN0eWxpbmdPbkhvc3RFbGVtZW50KHhQb3NpdGlvbjogbnVtYmVyLCB5UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdsZWZ0JywgYCR7eFBvc2l0aW9ufXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke3lQb3NpdGlvbn1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNwbGF5JyxcbiAgICAgIHRoaXMuaXNTaG93biA/IGBibG9ja2AgOiBgbm9uZWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZmVyZW5jZSB8fCAhdGhpcy50cmlnZ2Vycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcnMuZm9yRWFjaCgodHJpZ2dlcjogVHJpZ2dlckV2ZW50KSA9PlxuICAgICAgdGhpcy5hdHRhY2hUcmlnZ2VyRXZlbnRUb1JlZmVyZW5jZUVsZW1lbnQodHJpZ2dlcilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hUcmlnZ2VyRXZlbnRUb1JlZmVyZW5jZUVsZW1lbnQodHJpZ2dlcjogVHJpZ2dlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRzOiBFdmVudE1ldGhvZHNbXSB8IHVuZGVmaW5lZCA9IHRoaXMudHJpZ2dlckV2ZW50TWFwLmdldCh0cmlnZ2VyKTtcblxuICAgIGlmICghZXZlbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dHJpZ2dlcn0gaXMgbWlzc2luZyBldmVudCBkZWZpbml0aW9uKHMpYCk7XG4gICAgfVxuXG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50OiBFdmVudE1ldGhvZHMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJEaXNwb3NlRm46IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgdGhpcy5yZWZlcmVuY2U/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGV2ZW50LmV2ZW50LFxuICAgICAgICBldmVudC5tZXRob2RcbiAgICAgICk7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zLnB1c2goZXZlbnRMaXN0ZW5lckRpc3Bvc2VGbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrSW5zaWRlSG9zdEVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGlja091dHNpZGVIb3N0RWxlbWVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbGlja2VkT25SZWZlcmVuY2VXaXRoQ2xpY2tUcmlnZ2VyRW5hYmxlZDogYm9vbGVhbiA9XG4gICAgICB0aGlzLnJlZmVyZW5jZT8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmIHRoaXMudHJpZ2dlcnMuaW5jbHVkZXMoJ2NsaWNrJyk7XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uQmFja2Ryb3AgJiYgIWNsaWNrZWRPblJlZmVyZW5jZVdpdGhDbGlja1RyaWdnZXJFbmFibGVkKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRlYXJEb3duRXZlbnRIYW5kbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zLmZvckVhY2goKGV2ZW50TGlzdGVuZXJEaXNwb3NlRnVuY3Rpb246IEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4pID0+IHtcbiAgICAgIGlmIChldmVudExpc3RlbmVyRGlzcG9zZUZ1bmN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lckRpc3Bvc2VGdW5jdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lckRpc3Bvc2VGbnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXV0b1VwZGF0ZXJSZWYoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b1VwZGF0ZXJSZWYpIHtcbiAgICAgIHRoaXMuYXV0b1VwZGF0ZXJSZWYoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50ZWFyRG93bkV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnJlbW92ZUF1dG9VcGRhdGVyUmVmKCk7XG4gIH1cbn1cbiJdfQ==
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvYXRpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc2hhcmVkL2Zsb2F0aW5nL3NyYy9mbG9hdGluZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FFTixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFJMUUsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtREFBUSxDQUFBO0lBQ1IscURBQVMsQ0FBQTtJQUNULHVEQUFVLENBQUE7QUFDWixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFFRCxNQUFNLENBQU4sSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3hCLDZCQUFXLENBQUE7SUFDWCwyQkFBUyxDQUFBO0lBQ1QsaUNBQWUsQ0FBQTtJQUNmLCtCQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekI7QUFjRDs7Ozs7OztHQU9HO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJQXlLNUIsWUFDVSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixlQUFnQztRQUZoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsb0JBQWUs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QUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7O2lJQWxaVSxpQkFBaUI7cUhBQWpCLGlCQUFpQiwyakJBSmpCLENBQUMsZUFBZSxDQUFDOzJGQUlqQixpQkFBaUI7a0JBTjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUM1QixjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1SkFLcUIsU0FBUztzQkFBNUIsS0FBSztnQkFjYyxTQUFTO3NCQUE1QixLQUFLO2dCQVljLFFBQVE7c0JBQTNCLEtBQUs7Z0JBY2MsUUFBUTtzQkFBM0IsS0FBSztnQkFlYyxlQUFlO3NCQUFsQyxLQUFLO2dCQWNjLGtCQUFrQjtzQkFBckMsS0FBSztnQkFlVSxVQUFVO3NCQUF6QixLQUFLO2dCQUtVLE1BQU07c0JBQXJCLEtBQUs7Z0JBTVUsS0FBSztzQkFBcEIsS0FBSztnQkFLVSxhQUFhO3NCQUE1QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBS1csY0FBYztzQkFBOUIsTUFBTTtnQkFHQSxrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGF1dG9QbGFjZW1lbnQsXG4gIGF1dG9VcGRhdGUsXG4gIGNvbXB1dGVQb3NpdGlvbixcbiAgb2Zmc2V0LFxuICBzaGlmdCxcbiAgU3RyYXRlZ3ksXG59IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgQ29tcHV0ZVBvc2l0aW9uQ29uZmlnLCBNaWRkbGV3YXJlLCBQbGFjZW1lbnQgfSBmcm9tICdAZmxvYXRpbmctdWkvY29yZS9zcmMvdHlwZXMnO1xuaW1wb3J0IHsgRGVzaWduVG9rZW5IZWxwZXIgfSBmcm9tICdAa2lyYnlkZXNpZ24vY29yZSc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb3J0YWxEaXJlY3RpdmUgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZC9wb3J0YWwnO1xuXG5leHBvcnQgdHlwZSBUcmlnZ2VyRXZlbnQgPSAnaG92ZXInIHwgJ2NsaWNrJyB8ICdmb2N1cyc7XG5cbmV4cG9ydCBlbnVtIEZsb2F0aW5nT2Zmc2V0IHtcbiAgbm9uZSA9IDAsXG4gIHNtYWxsID0gNCxcbiAgbWVkaXVtID0gOCxcbn1cblxuZXhwb3J0IGVudW0gT3V0bGV0U2VsZWN0b3Ige1xuICB0YWcgPSAndGFnJyxcbiAgaWQgPSAnaWQnLFxuICBjbGFzcyA9ICdjbGFzcycsXG4gIG5hbWUgPSAnbmFtZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydGFsT3V0bGV0Q29uZmlnIHtcbiAgc2VsZWN0b3I6IE91dGxldFNlbGVjdG9yO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRNZXRob2RzIHtcbiAgZXZlbnQ6IHN0cmluZztcbiAgbWV0aG9kOiAoKSA9PiB2b2lkO1xufVxuXG50eXBlIEV2ZW50TGlzdGVuZXJEaXNwb3NlRm4gPSAoKSA9PiB2b2lkO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEZsb2F0aW5nRGlyZWN0aXZlIGlzIGEgdXRpbGl0eSB0aGF0IGxldHMgeW91IGRlY2xhcmF0aXZlIGFuY2hvciBcInBvcHVwXCIgY29udGFpbmVycyB0byBhbm90aGVyIGVsZW1lbnQuXG4gKlxuICogVXNlcyBmbG9hdGluZy11aSwgd2l0aCB0aGlzIGRpcmVjdGl2ZSB3cmFwcyB0aGUgZnVuY3Rpb25hbGl0eTogaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9nZXR0aW5nLXN0YXJ0ZWRcbiAqXG4gKiBVc2VzIFBvcnRhbERpcmVjdGl2ZSB0byBlbmFibGUgZnVuY3Rpb25hbGl0eSBmb3IgcG9ydGFsaW5nIHRoZSBmbG9hdGVkIGNvbnRlbnQuIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbiBuZWVkZWRcbiAqIGFuZCBub3QgYXMgdGhlIGRlZmF1bHQgb3B0aW9uLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdba2lyYnlGbG9hdGluZ10nLFxuICBwcm92aWRlcnM6IFtQb3J0YWxEaXJlY3RpdmVdLFxuICBob3N0RGlyZWN0aXZlczogW1BvcnRhbERpcmVjdGl2ZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZsb2F0aW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGZvciB3aGljaCB0aGUgaG9zdCBzaG91bGQgYW5jaG9yIHRvXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcmVmZXJlbmNlKHJlZjogRWxlbWVudFJlZikge1xuICAgIHRoaXMudGVhckRvd25SZWZlcmVuY2VFbGVtZW50RXZlbnRIYW5kbGluZygpO1xuICAgIHRoaXMuX3JlZmVyZW5jZSA9IHJlZjtcbiAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGluZygpO1xuICAgIHRoaXMuYXV0b1VwZGF0ZVBvc2l0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlZmVyZW5jZSgpOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVmZXJlbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgaG9zdCBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSByZWZlcmVuY2UuIENhbiBiZSBhZmZlY3RlZCBieSBtaWRkbGV3YXJlXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcGxhY2VtZW50KHBsYWNlbWVudDogUGxhY2VtZW50KSB7XG4gICAgdGhpcy5fcGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgIHRoaXMudXBkYXRlSG9zdEVsZW1lbnRQb3NpdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGdldCBwbGFjZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RyYXRlZ3kgZm9yIGhvdyB0aGUgaG9zdCBzaG91bGQgYmUgcG9zaXRpb25lZC5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBzdHJhdGVneShzdHJhdGVneTogU3RyYXRlZ3kpIHtcbiAgICB0aGlzLl9zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgIHRoaXMudXBkYXRlSG9zdEVsZW1lbnRQb3NpdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdHJhdGVneSgpOiBTdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmF0ZWd5O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hlbiB0aGUgaG9zdCBzaG91bGQgYmUgZGlzcGxheWVkL2hpZGRlbiwgaS5lLiBjbGljayB3aWxsIGF0dGFjaCBhIGNsaWNrIGxpc3RlbmVyIHRvIHRoZSByZWZlcmVuY2VcbiAgICogdGhhdCBtYWtlcyB0aGUgaG9zdCB0b2dnbGUgZGlzcGxheS4gU3VwcG9ydHMgbXVsdGlwbGUgdHJpZ2dlcnMsIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSBmb3IgY29tYmluYXRpb25zXG4gICAqIGxpa2UgY2xpY2svZm9jdXMuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdHJpZ2dlcnMoZXZlbnRUcmlnZ2VyczogQXJyYXk8VHJpZ2dlckV2ZW50Pikge1xuICAgIHRoaXMuX3RyaWdnZXJzID0gZXZlbnRUcmlnZ2VycztcbiAgICB0aGlzLnRlYXJEb3duUmVmZXJlbmNlRWxlbWVudEV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnNldHVwRXZlbnRIYW5kbGluZygpO1xuICB9XG5cbiAgcHVibGljIGdldCB0cmlnZ2VycygpOiBBcnJheTxUcmlnZ2VyRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEhUTUxFbGVtZW50IGZvciB3aGljaCB0aGUgY29udGVudCBzaG91bGQgcG9ydGFsIGludG8uXG4gICAqIFByb3ZpZGluZyBhbiBvdXRsZXQgZW5hYmxlcyB0aGUgcG9ydGFsLCBpZiBub3RoaW5nIGlzIHByb3ZpZGVkLCB0aGUgcHJvdmlkZWQgc3RyYXRlZ3kgaXMgdXNlZC5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuIHRoZXJlJ3MgaXNzdWVzIHdpdGggdGhlIHN0YWNraW5nIGNvbnRleHQsIGFuZCBub3QgYXMgYSBkZWZhdWx0IG9wdGlvbi5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBET01Qb3J0YWxPdXRsZXQob3V0bGV0OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Byb3ZpZGVkUG9ydGFsT3V0bGV0ID0gb3V0bGV0O1xuICAgIHRoaXMucG9ydGFsRGlyZWN0aXZlLm91dGxldCA9XG4gICAgICB0aGlzLkRPTVBvcnRhbE91dGxldCA/PyB0aGlzLmdldE91dGxldEVsZW1lbnQodGhpcy5wb3J0YWxPdXRsZXRDb25maWcpO1xuICB9XG5cbiAgcHVibGljIGdldCBET01Qb3J0YWxPdXRsZXQoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wcm92aWRlZFBvcnRhbE91dGxldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGhvdyB0byBhdXRvbWF0aWNhbGx5IGZpbmQgYW5kIGFzc2lnbiBET01Qb3J0YWxPdXRsZXQgaWYgbm9uZSBpcyBwcm92aWRlZCBpbiBET01Qb3J0YWxPdXRsZXQuXG4gICAqIElmIG5vdGhpbmcgaXMgcHJvdmlkZWQgaGVyZSBhbmQgaW4gRE9NUG9ydGFsT3V0bGV0LCB0aGUgcHJvdmlkZWQgc3RyYXRlZ3kgaXMgdXNlZFxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHBvcnRhbE91dGxldENvbmZpZyhjb25maWc6IFBvcnRhbE91dGxldENvbmZpZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BvcnRhbE91dGxldENvbmZpZyA9IGNvbmZpZztcblxuICAgIGlmICghdGhpcy5ET01Qb3J0YWxPdXRsZXQpIHtcbiAgICAgIHRoaXMucG9ydGFsRGlyZWN0aXZlLm91dGxldCA9IHRoaXMuZ2V0T3V0bGV0RWxlbWVudChjb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgcG9ydGFsT3V0bGV0Q29uZmlnKCk6IFBvcnRhbE91dGxldENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BvcnRhbE91dGxldENvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGhvc3QgZnJvbSBiZWluZyB0b2dnbGVkIGlmIHNldC5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzcGxhY2VzIHRoZSBmbG9hdGluZyBlbGVtZW50IGZyb20gaXRzIGNvcmUgcGxhY2VtZW50IGFsb25nIHRoZSBzcGVjaWZpZWQgYXhlcy5cbiAgICogKi9cbiAgQElucHV0KCkgcHVibGljIG9mZnNldDogRmxvYXRpbmdPZmZzZXQgPSBGbG9hdGluZ09mZnNldC5ub25lO1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGUgc3BlY2lmaWVkIGF4ZXMgaW4gb3JkZXIgdG8ga2VlcCBpdCBpbiB2aWV3LlxuICAgKiBUaGlzIGRvZXMgbm90IGFsd2F5cyB3b3JrIGFzIGV4cGVjdGVkLCBzbyBkb24ndCBcImp1c3RcIiBzZXQgaXQuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzaGlmdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDaG9vc2VzIHRoZSBwbGFjZW1lbnQgdGhhdCBoYXMgdGhlIG1vc3Qgc3BhY2UgYXZhaWxhYmxlIGF1dG9tYXRpY2FsbHkuXG4gICAqICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvUGxhY2VtZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgaGlkaW5nIHRoZSBob3N0IGJ5IGV2ZW50cy4gU2VlIHZhcmlhYmxlIG5hbWVzLlxuICAgKiAqL1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VPblNlbGVjdDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uRXNjYXBlS2V5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGNsb3NlT25CYWNrZHJvcDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIG9wdGlvbiB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBob3N0IGNoYW5nZXMgZGlzcGxheS4gVGhlIG5ldyBkaXNwbGF5IHZhbHVlIGlzIHByb3ZpZGVkLlxuICAgKiAqL1xuICBAT3V0cHV0KCkgcHVibGljIGRpc3BsYXlDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25Fc2NhcGVLZXlQcmVzc2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT25Fc2NhcGVLZXkpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BsYWNlbWVudDogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgcHJpdmF0ZSBfc3RyYXRlZ3k6IFN0cmF0ZWd5ID0gJ2Fic29sdXRlJztcblxuICBwcml2YXRlIF9wcm92aWRlZFBvcnRhbE91dGxldDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfcG9ydGFsT3V0bGV0Q29uZmlnOiBQb3J0YWxPdXRsZXRDb25maWcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfdHJpZ2dlcnM6IEFycmF5PFRyaWdnZXJFdmVudD4gPSBbJ2NsaWNrJ107XG5cbiAgcHJpdmF0ZSBfcmVmZXJlbmNlOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgYXV0b1VwZGF0ZXJSZWY6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNTaG93bjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlZmVyZW5jZUV2ZW50TGlzdGVuZXJEaXNwb3NlRm5zOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuW10gPSBbXTtcbiAgcHJpdmF0ZSBkb2N1bWVudENsaWNrRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbjogRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbjtcbiAgcHJpdmF0ZSB0cmlnZ2VyRXZlbnRNYXA6IE1hcDxUcmlnZ2VyRXZlbnQsIEV2ZW50TWV0aG9kc1tdPiA9IG5ldyBNYXAoW1xuICAgIFsnY2xpY2snLCBbeyBldmVudDogJ2NsaWNrJywgbWV0aG9kOiB0aGlzLnRvZ2dsZVNob3cuYmluZCh0aGlzKSB9XV0sXG4gICAgW1xuICAgICAgJ2hvdmVyJyxcbiAgICAgIFtcbiAgICAgICAgeyBldmVudDogJ21vdXNlZW50ZXInLCBtZXRob2Q6IHRoaXMuc2hvdy5iaW5kKHRoaXMpIH0sXG4gICAgICAgIHsgZXZlbnQ6ICdtb3VzZWxlYXZlJywgbWV0aG9kOiB0aGlzLmhpZGUuYmluZCh0aGlzKSB9LFxuICAgICAgXSxcbiAgICBdLFxuICAgIFtcbiAgICAgICdmb2N1cycsXG4gICAgICBbXG4gICAgICAgIHsgZXZlbnQ6ICdmb2N1cycsIG1ldGhvZDogdGhpcy5zaG93LmJpbmQodGhpcykgfSxcbiAgICAgICAgeyBldmVudDogJ2JsdXInLCBtZXRob2Q6IHRoaXMuaGlkZS5iaW5kKHRoaXMpIH0sXG4gICAgICBdLFxuICAgIF0sXG4gIF0pO1xuXG4gIHByaXZhdGUgSFRNTEVsZW1lbnRzOiB7XG4gICAgW2tleSBpbiBPdXRsZXRTZWxlY3RvciB8ICdkZWZhdWx0J106ICh2YWx1ZT86IHN0cmluZykgPT4gQXJyYXk8RWxlbWVudD4gfCBudWxsO1xuICB9ID0ge1xuICAgIGlkOiAodmFsdWUpID0+IEFycmF5Lm9mKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHZhbHVlKSksXG4gICAgY2xhc3M6ICh2YWx1ZSkgPT4gQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHZhbHVlKSksXG4gICAgbmFtZTogKHZhbHVlKSA9PiBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHZhbHVlKSksXG4gICAgdGFnOiAodmFsdWUpID0+IEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodmFsdWUpKSxcbiAgICBkZWZhdWx0OiAoKSA9PiBudWxsLFxuICB9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcG9ydGFsRGlyZWN0aXZlOiBQb3J0YWxEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEZsb2F0U3R5bGluZ1RvSG9zdEVsZW1lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24oKTtcbiAgfVxuXG4gIC8qIFNob3VsZCBiZSBhY2Nlc3NpYmxlIGZvciBwcm9ncmFtbWF0aWNhbGx5IHNldHRpbmcgZGlzcGxheSAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hdHRhY2hEb2N1bWVudENsaWNrRXZlbnQoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xuICAgIHRoaXMuaXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5kaXNwbGF5Q2hhbmdlZC5lbWl0KHRoaXMuaXNTaG93bik7XG4gIH1cblxuICAvKiBTaG91bGQgYmUgYWNjZXNzaWJsZSBmb3IgcHJvZ3JhbW1hdGljYWxseSBzZXR0aW5nIGRpc3BsYXkgKi9cbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGVhckRvd25Eb2N1bWVudENsaWNrRXZlbnRIYW5kbGluZygpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICB0aGlzLmlzU2hvd24gPSBmYWxzZTtcbiAgICB0aGlzLmRpc3BsYXlDaGFuZ2VkLmVtaXQodGhpcy5pc1Nob3duKTtcbiAgfVxuXG4gIC8qIFNob3VsZCBiZSBhY2Nlc3NpYmxlIGZvciBwcm9ncmFtbWF0aWNhbGx5IHNldHRpbmcgZGlzcGxheSAqL1xuICBwdWJsaWMgdG9nZ2xlU2hvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Nob3duKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkRvY3VtZW50Q2xpY2tXaGlsZUhvc3RTaG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjbGlja2VkT25Ib3N0OiBib29sZWFuID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoY2xpY2tlZE9uSG9zdCkge1xuICAgICAgdGhpcy5oYW5kbGVDbGlja0luc2lkZUhvc3RFbGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlSG9zdEVsZW1lbnQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRmxvYXRTdHlsaW5nVG9Ib3N0RWxlbWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAwcHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndG9wJywgYDBweGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsIHRoaXMuc3RyYXRlZ3kpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICd6LWluZGV4JyxcbiAgICAgIERlc2lnblRva2VuSGVscGVyLnpMYXllcigncG9wb3ZlcicpXG4gICAgKTtcbiAgICB0aGlzLnNldERpc3BsYXlTdHlsaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXlTdHlsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNwbGF5JyxcbiAgICAgIHRoaXMuaXNTaG93biA/IGBibG9ja2AgOiBgbm9uZWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIb3N0RWxlbWVudFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWZlcmVuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IENvbXB1dGVQb3NpdGlvbkNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG4gICAgICBtaWRkbGV3YXJlOiB0aGlzLmdldE1pZGRsZXdhcmVDb25maWcoKSxcbiAgICAgIHN0cmF0ZWd5OiB0aGlzLnN0cmF0ZWd5LFxuICAgIH0gYXMgQ29tcHV0ZVBvc2l0aW9uQ29uZmlnO1xuXG4gICAgZnJvbShcbiAgICAgIGNvbXB1dGVQb3NpdGlvbih0aGlzLnJlZmVyZW5jZT8ubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZylcbiAgICApLnN1YnNjcmliZSgoeyB4LCB5IH0pID0+IHRoaXMuc2V0UG9zaXRpb25TdHlsaW5nT25Ib3N0RWxlbWVudCh4LCB5KSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1pZGRsZXdhcmVDb25maWcoKTogQXJyYXk8TWlkZGxld2FyZSB8IG51bGwgfCB1bmRlZmluZWQgfCBmYWxzZT4ge1xuICAgIGNvbnN0IG1pZGRsZXdhcmU6IEFycmF5PE1pZGRsZXdhcmUgfCBudWxsIHwgdW5kZWZpbmVkIHwgZmFsc2U+ID0gW107XG4gICAgbWlkZGxld2FyZS5wdXNoKG9mZnNldCh0aGlzLm9mZnNldCkpO1xuXG4gICAgaWYgKHRoaXMuc2hpZnQpIHtcbiAgICAgIG1pZGRsZXdhcmUucHVzaChzaGlmdCgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdXRvUGxhY2VtZW50KSB7XG4gICAgICBtaWRkbGV3YXJlLnB1c2goYXV0b1BsYWNlbWVudCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWlkZGxld2FyZTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b1VwZGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlQXV0b1VwZGF0ZXJSZWYoKTtcblxuICAgIGlmICghdGhpcy5yZWZlcmVuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9VcGRhdGVyUmVmID0gYXV0b1VwZGF0ZShcbiAgICAgIHRoaXMucmVmZXJlbmNlPy5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLnVwZGF0ZUhvc3RFbGVtZW50UG9zaXRpb24uYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uU3R5bGluZ09uSG9zdEVsZW1lbnQoeFBvc2l0aW9uOiBudW1iZXIsIHlQb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHt4UG9zaXRpb259cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndG9wJywgYCR7eVBvc2l0aW9ufXB4YCk7XG4gICAgdGhpcy5zZXREaXNwbGF5U3R5bGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50SGFuZGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZmVyZW5jZSB8fCAhdGhpcy50cmlnZ2Vycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlcnMuZm9yRWFjaCgodHJpZ2dlcjogVHJpZ2dlckV2ZW50KSA9PlxuICAgICAgdGhpcy5hdHRhY2hUcmlnZ2VyRXZlbnRUb1JlZmVyZW5jZUVsZW1lbnQodHJpZ2dlcilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hEb2N1bWVudENsaWNrRXZlbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0V2ZW50TGlzdGVuZXJEaXNwb3NlRm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50Q2xpY2tFdmVudExpc3RlbmVyRGlzcG9zZUZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ21vdXNlZG93bicsXG4gICAgICAoZXZlbnQpID0+IHRoaXMub25Eb2N1bWVudENsaWNrV2hpbGVIb3N0U2hvd24oZXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVHJpZ2dlckV2ZW50VG9SZWZlcmVuY2VFbGVtZW50KHRyaWdnZXI6IFRyaWdnZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50czogRXZlbnRNZXRob2RzW10gfCB1bmRlZmluZWQgPSB0aGlzLnRyaWdnZXJFdmVudE1hcC5nZXQodHJpZ2dlcik7XG5cbiAgICBpZiAoIWV2ZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RyaWdnZXJ9IGlzIG1pc3NpbmcgZXZlbnQgZGVmaW5pdGlvbihzKWApO1xuICAgIH1cblxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudDogRXZlbnRNZXRob2RzKSA9PiB7XG4gICAgICBjb25zdCBldmVudExpc3RlbmVyRGlzcG9zZUZuOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgIHRoaXMucmVmZXJlbmNlPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICBldmVudC5ldmVudCxcbiAgICAgICAgZXZlbnQubWV0aG9kXG4gICAgICApO1xuICAgICAgdGhpcy5yZWZlcmVuY2VFdmVudExpc3RlbmVyRGlzcG9zZUZucy5wdXNoKGV2ZW50TGlzdGVuZXJEaXNwb3NlRm4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGlja0luc2lkZUhvc3RFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2tPdXRzaWRlSG9zdEVsZW1lbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tlZE9uUmVmZXJlbmNlV2l0aENsaWNrVHJpZ2dlckVuYWJsZWQ6IGJvb2xlYW4gPVxuICAgICAgdGhpcy5yZWZlcmVuY2U/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiB0aGlzLnRyaWdnZXJzLmluY2x1ZGVzKCdjbGljaycpO1xuXG4gICAgaWYgKHRoaXMuY2xvc2VPbkJhY2tkcm9wICYmICFjbGlja2VkT25SZWZlcmVuY2VXaXRoQ2xpY2tUcmlnZ2VyRW5hYmxlZCkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdXRsZXRFbGVtZW50KGNvbmZpZzogUG9ydGFsT3V0bGV0Q29uZmlnIHwgdW5kZWZpbmVkKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLnNlbGVjdG9yIHx8ICFjb25maWcudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzOiBBcnJheTxFbGVtZW50PiB8IG51bGwgPSB0aGlzLmdldEhUTUxFbGVtZW50cyhjb25maWcpO1xuXG4gICAgaWYgKCFlbGVtZW50cyB8fCBlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKGBDb3VsZCBub3QgbG9jYXRlIEhUTUxFbGVtZW50IGZvciAke2NvbmZpZy5zZWxlY3Rvcn0uIERpZCB5b3UgbWlzc3BlbGwgaXQ/YCk7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgTXVsdGlwbGUgSFRNTEVsZW1lbnRzIGZvdW5kIGZvciAke2NvbmZpZy5zZWxlY3Rvcn0uXG4gICAgICAgICBUaGlzIGNhbiBsZWFkIHRvIHVuaW50ZW5kZWQgYmVoYXZpb3Vycy4gUHJvdmlkZSBhbiB1bmlxdWUgb3V0bGV0YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldEhUTUxFbGVtZW50cyhjb25maWc6IFBvcnRhbE91dGxldENvbmZpZyB8IHVuZGVmaW5lZCk6IEFycmF5PEVsZW1lbnQ+IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuSFRNTEVsZW1lbnRzW2NvbmZpZy5zZWxlY3Rvcl0oY29uZmlnLnZhbHVlKSB8fCB0aGlzLkhUTUxFbGVtZW50c1snZGVmYXVsdCddKGNvbmZpZy52YWx1ZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZWFyRG93blJlZmVyZW5jZUVsZW1lbnRFdmVudEhhbmRsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMucmVmZXJlbmNlRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbnMuZm9yRWFjaChcbiAgICAgIChldmVudExpc3RlbmVyRGlzcG9zZUZ1bmN0aW9uOiBFdmVudExpc3RlbmVyRGlzcG9zZUZuKSA9PiB7XG4gICAgICAgIGlmIChldmVudExpc3RlbmVyRGlzcG9zZUZ1bmN0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICBldmVudExpc3RlbmVyRGlzcG9zZUZ1bmN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVmZXJlbmNlRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgdGVhckRvd25Eb2N1bWVudENsaWNrRXZlbnRIYW5kbGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbikge1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbigpO1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrRXZlbnRMaXN0ZW5lckRpc3Bvc2VGbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBdXRvVXBkYXRlclJlZigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvVXBkYXRlclJlZikge1xuICAgICAgdGhpcy5hdXRvVXBkYXRlclJlZigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRlYXJEb3duRG9jdW1lbnRDbGlja0V2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnRlYXJEb3duUmVmZXJlbmNlRWxlbWVudEV2ZW50SGFuZGxpbmcoKTtcbiAgICB0aGlzLnJlbW92ZUF1dG9VcGRhdGVyUmVmKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
- export { FloatingDirective } from './floating.directive';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NoYXJlZC9mbG9hdGluZy9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGbG9hdGluZ0RpcmVjdGl2ZSwgVHJpZ2dlckV2ZW50IH0gZnJvbSAnLi9mbG9hdGluZy5kaXJlY3RpdmUnO1xuIl19
1
+ export { FloatingDirective, FloatingOffset, OutletSelector, } from './floating.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NoYXJlZC9mbG9hdGluZy9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGNBQWMsRUFFZCxjQUFjLEdBQ2YsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEZsb2F0aW5nRGlyZWN0aXZlLFxuICBUcmlnZ2VyRXZlbnQsXG4gIEZsb2F0aW5nT2Zmc2V0LFxuICBQb3J0YWxPdXRsZXRDb25maWcsXG4gIE91dGxldFNlbGVjdG9yLFxufSBmcm9tICcuL2Zsb2F0aW5nLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2lyYnlkZXNpZ24tZGVzaWduc3lzdGVtLXRhYi1uYXZpZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vdGFiLW5hdmlnYXRpb24vc3JjL2tpcmJ5ZGVzaWduLWRlc2lnbnN5c3RlbS10YWItbmF2aWdhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
@@ -0,0 +1,4 @@
1
+ export { TabNavigationComponent } from './tab-navigation/tab-navigation.component';
2
+ export { TabNavigationItemComponent } from './tab-navigation-item/tab-navigation-item.component';
3
+ export { TabNavigationModule } from './tab-navigation.module';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3RhYi1uYXZpZ2F0aW9uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVGFiTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFiLW5hdmlnYXRpb24vdGFiLW5hdmlnYXRpb24uY29tcG9uZW50JztcbmV4cG9ydCB7IFRhYk5hdmlnYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90YWItbmF2aWdhdGlvbi1pdGVtL3RhYi1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCB7IFRhYk5hdmlnYXRpb25Nb2R1bGUgfSBmcm9tICcuL3RhYi1uYXZpZ2F0aW9uLm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,121 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, HostListener, Input, Output, QueryList, ViewChild, } from '@angular/core';
2
+ import { WindowRef } from '@kirbydesign/designsystem/types';
3
+ import { KeyboardHandlerService } from '@kirbydesign/designsystem/dropdown';
4
+ import { TabNavigationItemComponent } from '../tab-navigation-item/tab-navigation-item.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@kirbydesign/designsystem/types";
7
+ import * as i2 from "@kirbydesign/designsystem/dropdown";
8
+ export class TabNavigationComponent {
9
+ constructor(window, keyboardHandlerService) {
10
+ this.window = window;
11
+ this.keyboardHandlerService = keyboardHandlerService;
12
+ this.DEBOUNCE_TIME_MS = 250;
13
+ this.tabElements = new Array();
14
+ this.tabButtonElements = new Array();
15
+ this._selectedIndex = -1;
16
+ this._focusIndex = -1;
17
+ this.selectedIndexChange = new EventEmitter();
18
+ /**/
19
+ }
20
+ get selectedIndex() {
21
+ return this._selectedIndex;
22
+ }
23
+ set selectedIndex(index) {
24
+ if (index !== this._selectedIndex) {
25
+ this._selectedIndex = index;
26
+ this.focusIndex = index;
27
+ this.selectTab(this.selectedIndex);
28
+ this.selectedIndexChange.emit(this.selectedIndex);
29
+ }
30
+ }
31
+ get focusIndex() {
32
+ return this._focusIndex;
33
+ }
34
+ set focusIndex(index) {
35
+ if (index !== this._focusIndex) {
36
+ this._focusIndex = index;
37
+ this.scrollToTab(this.focusIndex);
38
+ this.focusTab(this.focusIndex);
39
+ }
40
+ }
41
+ ngAfterViewInit() {
42
+ this.tabBarElement = this.tabBar.nativeElement;
43
+ this.tabs.forEach((tab) => this.tabElements.push(tab.nativeElement));
44
+ this.tabElements.forEach((tabElement) => this.tabButtonElements.push(tabElement.querySelector('[role="tab"]')));
45
+ setTimeout(() => {
46
+ this.selectTab(this.selectedIndex);
47
+ this.scrollToTab(this.focusIndex);
48
+ this.focusTab(this.focusIndex);
49
+ }, this.DEBOUNCE_TIME_MS);
50
+ }
51
+ onItemSelect(event) {
52
+ const targetTabNavItem = event.target.closest('button');
53
+ this.selectedIndex = this.tabButtonElements.indexOf(targetTabNavItem);
54
+ }
55
+ onKeydown(event) {
56
+ event.preventDefault();
57
+ this.focusIndex = this.keyboardHandlerService.handle(event, this.focusIndex, this.tabElements.length - 1, true);
58
+ }
59
+ selectTab(tabIndex) {
60
+ this.tabButtonElements.forEach((tabButtonElement, index) => {
61
+ tabButtonElement.setAttribute('aria-selected', index === tabIndex ? 'true' : 'false');
62
+ });
63
+ }
64
+ focusTab(focusIndex) {
65
+ this.tabButtonElements.forEach((tabButtonElement, index) => {
66
+ tabButtonElement.setAttribute('tabindex', index === focusIndex ? '0' : '-1');
67
+ });
68
+ if (0 <= focusIndex && focusIndex < this.tabButtonElements.length) {
69
+ this.tabButtonElements[focusIndex].focus();
70
+ }
71
+ }
72
+ scrollToTab(tabIndex) {
73
+ if (0 <= tabIndex && tabIndex < this.tabElements.length) {
74
+ const selectedTabElement = this.tabElements[tabIndex];
75
+ const selectedTabElementWidth = selectedTabElement.getBoundingClientRect().width;
76
+ const selectedTabElementOffsetLeft = selectedTabElement.offsetLeft;
77
+ const tabBarElementWidth = this.tabBarElement.getBoundingClientRect().width;
78
+ this.window.nativeWindow.requestAnimationFrame(() => {
79
+ this.tabBarElement?.scrollTo({
80
+ behavior: 'smooth',
81
+ left: Math.max(0, selectedTabElementOffsetLeft - (tabBarElementWidth - selectedTabElementWidth) / 2),
82
+ });
83
+ });
84
+ }
85
+ }
86
+ }
87
+ /** @nocollapse */ TabNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationComponent, deps: [{ token: i1.WindowRef }, { token: i2.KeyboardHandlerService }], target: i0.ɵɵFactoryTarget.Component });
88
+ /** @nocollapse */ TabNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TabNavigationComponent, selector: "kirby-tab-navigation", inputs: { selectedIndex: "selectedIndex" }, outputs: { selectedIndexChange: "selectedIndexChange" }, host: { listeners: { "click": "onItemSelect($event)", "keydown.enter": "onItemSelect($event)", "keydown.home": "onKeydown($event)", "keydown.end": "onKeydown($event)", "keydown.arrowright": "onKeydown($event)", "keydown.arrowleft": "onKeydown($event)" } }, queries: [{ propertyName: "tabs", predicate: TabNavigationItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "tabBar", first: true, predicate: ["tabBar"], descendants: true }], ngImport: i0, template: "<div class=\"container\">\n <div role=\"tablist\" #tabBar>\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["div[role=tablist]{position:relative;margin:0 auto;display:flex;gap:12px;align-items:center;justify-content:left;flex-wrap:nowrap;overflow-x:scroll;-webkit-overflow-scrolling:auto;scrollbar-width:none}@media (max-width: 720px){div[role=tablist]{padding-inline:var(--padding-start) var(--padding-end)}}div[role=tablist]::-webkit-scrollbar{display:none}.container{position:relative;background-color:var(--kirby-background-color);max-width:var(--page-content-max-width, 720px)}@media (max-width: 720px){.container{margin-inline:calc(-1 * var(--padding-start)) calc(-1 * var(--padding-end))}}.container:before{content:\"\";background-color:var(--kirby-medium);position:absolute;height:1px;bottom:0;z-index:1;left:0;width:100%}@media (max-width: 752px){.container:before{left:calc(-1 * var(--padding-start, 16px));width:calc(100% + var(--padding-start, 16px) * 2)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'kirby-tab-navigation', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div role=\"tablist\" #tabBar>\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["div[role=tablist]{position:relative;margin:0 auto;display:flex;gap:12px;align-items:center;justify-content:left;flex-wrap:nowrap;overflow-x:scroll;-webkit-overflow-scrolling:auto;scrollbar-width:none}@media (max-width: 720px){div[role=tablist]{padding-inline:var(--padding-start) var(--padding-end)}}div[role=tablist]::-webkit-scrollbar{display:none}.container{position:relative;background-color:var(--kirby-background-color);max-width:var(--page-content-max-width, 720px)}@media (max-width: 720px){.container{margin-inline:calc(-1 * var(--padding-start)) calc(-1 * var(--padding-end))}}.container:before{content:\"\";background-color:var(--kirby-medium);position:absolute;height:1px;bottom:0;z-index:1;left:0;width:100%}@media (max-width: 752px){.container:before{left:calc(-1 * var(--padding-start, 16px));width:calc(100% + var(--padding-start, 16px) * 2)}}\n"] }]
92
+ }], ctorParameters: function () { return [{ type: i1.WindowRef }, { type: i2.KeyboardHandlerService }]; }, propDecorators: { tabBar: [{
93
+ type: ViewChild,
94
+ args: ['tabBar']
95
+ }], tabs: [{
96
+ type: ContentChildren,
97
+ args: [TabNavigationItemComponent, { read: ElementRef }]
98
+ }], selectedIndex: [{
99
+ type: Input
100
+ }], selectedIndexChange: [{
101
+ type: Output
102
+ }], onItemSelect: [{
103
+ type: HostListener,
104
+ args: ['click', ['$event']]
105
+ }, {
106
+ type: HostListener,
107
+ args: ['keydown.enter', ['$event']]
108
+ }], onKeydown: [{
109
+ type: HostListener,
110
+ args: ['keydown.home', ['$event']]
111
+ }, {
112
+ type: HostListener,
113
+ args: ['keydown.end', ['$event']]
114
+ }, {
115
+ type: HostListener,
116
+ args: ['keydown.arrowright', ['$event']]
117
+ }, {
118
+ type: HostListener,
119
+ args: ['keydown.arrowleft', ['$event']]
120
+ }] } });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vdGFiLW5hdmlnYXRpb24vc3JjL3RhYi1uYXZpZ2F0aW9uL3RhYi1uYXZpZ2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3RhYi1uYXZpZ2F0aW9uL3NyYy90YWItbmF2aWdhdGlvbi90YWItbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7OztBQVFsRyxNQUFNLE9BQU8sc0JBQXNCO0lBOENqQyxZQUFvQixNQUFpQixFQUFVLHNCQUE4QztRQUF6RSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQTdDN0UscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBUy9CLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztRQUN2QyxzQkFBaUIsR0FBRyxJQUFJLEtBQUssRUFBZSxDQUFDO1FBZ0I3QyxtQkFBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBY3BCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFHekIsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcvQyxJQUFJ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QUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7c0lBdEhVLHNCQUFzQjswSEFBdEIsc0JBQXNCLHViQU1oQiwwQkFBMEIsUUFBVSxVQUFVLCtIQzdCakUsZ0hBS0E7MkZEa0JhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBR2YsdUJBQXVCLENBQUMsTUFBTTtxSUFNdkMsTUFBTTtzQkFEYixTQUFTO3VCQUFDLFFBQVE7Z0JBSVgsSUFBSTtzQkFEWCxlQUFlO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFRN0QsYUFBYTtzQkFEaEIsS0FBSztnQkErQk4sbUJBQW1CO3NCQURsQixNQUFNO2dCQXVCUCxZQUFZO3NCQUZYLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDaEMsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVXpDLFNBQVM7c0JBSlIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN2QyxZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3RDLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM3QyxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS90eXBlcyc7XG5pbXBvcnQgeyBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9kcm9wZG93bic7XG5pbXBvcnQgeyBUYWJOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYi1uYXZpZ2F0aW9uLWl0ZW0vdGFiLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS10YWItbmF2aWdhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWItbmF2aWdhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyByZWFkb25seSBERUJPVU5DRV9USU1FX01TID0gMjUwO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYkJhcicpXG4gIHByaXZhdGUgdGFiQmFyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFRhYk5hdmlnYXRpb25JdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSB0YWJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gIHByaXZhdGUgdGFiQmFyRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgdGFiRWxlbWVudHMgPSBuZXcgQXJyYXk8SFRNTEVsZW1lbnQ+KCk7XG4gIHByaXZhdGUgdGFiQnV0dG9uRWxlbWVudHMgPSBuZXcgQXJyYXk8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT09IHRoaXMuX3NlbGVjdGVkSW5kZXgpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBpbmRleDtcblxuICAgICAgdGhpcy5mb2N1c0luZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmRleCA9IC0xO1xuXG4gIGdldCBmb2N1c0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzSW5kZXg7XG4gIH1cblxuICBzZXQgZm9jdXNJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ICE9PSB0aGlzLl9mb2N1c0luZGV4KSB7XG4gICAgICB0aGlzLl9mb2N1c0luZGV4ID0gaW5kZXg7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG9UYWIodGhpcy5mb2N1c0luZGV4KTtcbiAgICAgIHRoaXMuZm9jdXNUYWIodGhpcy5mb2N1c0luZGV4KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZm9jdXNJbmRleCA9IC0xO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3RlZEluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3aW5kb3c6IFdpbmRvd1JlZiwgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXJTZXJ2aWNlOiBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlKSB7XG4gICAgLyoqL1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudGFiQmFyRWxlbWVudCA9IHRoaXMudGFiQmFyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYikgPT4gdGhpcy50YWJFbGVtZW50cy5wdXNoKHRhYi5uYXRpdmVFbGVtZW50KSk7XG4gICAgdGhpcy50YWJFbGVtZW50cy5mb3JFYWNoKCh0YWJFbGVtZW50KSA9PlxuICAgICAgdGhpcy50YWJCdXR0b25FbGVtZW50cy5wdXNoKHRhYkVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9XCJ0YWJcIl0nKSlcbiAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgICAgdGhpcy5zY3JvbGxUb1RhYih0aGlzLmZvY3VzSW5kZXgpO1xuICAgICAgdGhpcy5mb2N1c1RhYih0aGlzLmZvY3VzSW5kZXgpO1xuICAgIH0sIHRoaXMuREVCT1VOQ0VfVElNRV9NUyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBvbkl0ZW1TZWxlY3QoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldFRhYk5hdkl0ZW06IEhUTUxFbGVtZW50ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnYnV0dG9uJyk7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy50YWJCdXR0b25FbGVtZW50cy5pbmRleE9mKHRhcmdldFRhYk5hdkl0ZW0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5mb2N1c0luZGV4ID0gdGhpcy5rZXlib2FyZEhhbmRsZXJTZXJ2aWNlLmhhbmRsZShcbiAgICAgIGV2ZW50LFxuICAgICAgdGhpcy5mb2N1c0luZGV4LFxuICAgICAgdGhpcy50YWJFbGVtZW50cy5sZW5ndGggLSAxLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFRhYih0YWJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50YWJCdXR0b25FbGVtZW50cy5mb3JFYWNoKCh0YWJCdXR0b25FbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgdGFiQnV0dG9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBpbmRleCA9PT0gdGFiSW5kZXggPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNUYWIoZm9jdXNJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy50YWJCdXR0b25FbGVtZW50cy5mb3JFYWNoKCh0YWJCdXR0b25FbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgdGFiQnV0dG9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgaW5kZXggPT09IGZvY3VzSW5kZXggPyAnMCcgOiAnLTEnKTtcbiAgICB9KTtcblxuICAgIGlmICgwIDw9IGZvY3VzSW5kZXggJiYgZm9jdXNJbmRleCA8IHRoaXMudGFiQnV0dG9uRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRhYkJ1dHRvbkVsZW1lbnRzW2ZvY3VzSW5kZXhdLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1RhYih0YWJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKDAgPD0gdGFiSW5kZXggJiYgdGFiSW5kZXggPCB0aGlzLnRhYkVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJFbGVtZW50ID0gdGhpcy50YWJFbGVtZW50c1t0YWJJbmRleF07XG4gICAgICBjb25zdCBzZWxlY3RlZFRhYkVsZW1lbnRXaWR0aCA9IHNlbGVjdGVkVGFiRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIGNvbnN0IHNlbGVjdGVkVGFiRWxlbWVudE9mZnNldExlZnQgPSBzZWxlY3RlZFRhYkVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICAgIGNvbnN0IHRhYkJhckVsZW1lbnRXaWR0aCA9IHRoaXMudGFiQmFyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgdGhpcy53aW5kb3cubmF0aXZlV2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFiQmFyRWxlbWVudD8uc2Nyb2xsVG8oe1xuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgICBsZWZ0OiBNYXRoLm1heChcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBzZWxlY3RlZFRhYkVsZW1lbnRPZmZzZXRMZWZ0IC0gKHRhYkJhckVsZW1lbnRXaWR0aCAtIHNlbGVjdGVkVGFiRWxlbWVudFdpZHRoKSAvIDJcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8ZGl2IHJvbGU9XCJ0YWJsaXN0XCIgI3RhYkJhcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TabNavigationItemComponent {
4
+ constructor() {
5
+ this.label = '';
6
+ /* */
7
+ }
8
+ }
9
+ /** @nocollapse */ TabNavigationItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
+ /** @nocollapse */ TabNavigationItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TabNavigationItemComponent, selector: "kirby-tab-navigation-item", inputs: { label: "label" }, ngImport: i0, template: "<button role=\"tab\" #tabButton>\n <span attr.data-text=\"{{ label }}\">{{ label }}</span>\n <ng-content></ng-content>\n</button>\n", styles: [":host{position:relative;padding-bottom:2px}:host button[role=tab]{background:transparent;color:inherit;font:inherit;cursor:pointer;display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;user-select:none;text-decoration:none;margin:0;width:auto;border:none;outline:none;background-color:var(--kirby-background-color);color:var(--kirby-black);box-sizing:border-box;padding:16px;font-size:16px;line-height:24px;gap:4px}:host button[role=tab]:focus,:host button[role=tab]:hover{font-weight:700}:host button[role=tab][aria-selected=true]{font-weight:700}:host button[role=tab][aria-selected=true]:before{content:\"\";width:100%;background-color:var(--kirby-dark);position:absolute;border-radius:1px;height:2px;bottom:0;z-index:2}span[data-text]{max-width:100px;overflow:hidden;text-overflow:ellipsis}span[data-text]:before{display:block;content:attr(data-text);font-weight:700;height:0;overflow:hidden;visibility:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationItemComponent, decorators: [{
12
+ type: Component,
13
+ args: [{ selector: 'kirby-tab-navigation-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button role=\"tab\" #tabButton>\n <span attr.data-text=\"{{ label }}\">{{ label }}</span>\n <ng-content></ng-content>\n</button>\n", styles: [":host{position:relative;padding-bottom:2px}:host button[role=tab]{background:transparent;color:inherit;font:inherit;cursor:pointer;display:inline-flex;flex-direction:row;align-items:center;justify-content:center;vertical-align:middle;white-space:nowrap;-webkit-user-select:none;user-select:none;text-decoration:none;margin:0;width:auto;border:none;outline:none;background-color:var(--kirby-background-color);color:var(--kirby-black);box-sizing:border-box;padding:16px;font-size:16px;line-height:24px;gap:4px}:host button[role=tab]:focus,:host button[role=tab]:hover{font-weight:700}:host button[role=tab][aria-selected=true]{font-weight:700}:host button[role=tab][aria-selected=true]:before{content:\"\";width:100%;background-color:var(--kirby-dark);position:absolute;border-radius:1px;height:2px;bottom:0;z-index:2}span[data-text]{max-width:100px;overflow:hidden;text-overflow:ellipsis}span[data-text]:before{display:block;content:attr(data-text);font-weight:700;height:0;overflow:hidden;visibility:hidden}\n"] }]
14
+ }], ctorParameters: function () { return []; }, propDecorators: { label: [{
15
+ type: Input
16
+ }] } });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS90YWItbmF2aWdhdGlvbi9zcmMvdGFiLW5hdmlnYXRpb24taXRlbS90YWItbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3RhYi1uYXZpZ2F0aW9uL3NyYy90YWItbmF2aWdhdGlvbi1pdGVtL3RhYi1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBUXRGLE1BQU0sT0FBTywwQkFBMEI7SUFJckM7UUFGQSxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBR1QsS0FBSztJQUNQLENBQUM7OzBJQU5VLDBCQUEwQjs4SEFBMUIsMEJBQTBCLDZGQ1J2Qyx1SUFJQTsyRkRJYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNOzBFQUkvQyxLQUFLO3NCQURKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS10YWItbmF2aWdhdGlvbi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWItbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIGxhYmVsID0gJyc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyogKi9cbiAgfVxufVxuIiwiPGJ1dHRvbiByb2xlPVwidGFiXCIgI3RhYkJ1dHRvbj5cbiAgPHNwYW4gYXR0ci5kYXRhLXRleHQ9XCJ7eyBsYWJlbCB9fVwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2J1dHRvbj5cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TabNavigationComponent } from './tab-navigation/tab-navigation.component';
4
+ import { TabNavigationItemComponent } from './tab-navigation-item/tab-navigation-item.component';
5
+ import * as i0 from "@angular/core";
6
+ export class TabNavigationModule {
7
+ }
8
+ /** @nocollapse */ TabNavigationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ /** @nocollapse */ TabNavigationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, declarations: [TabNavigationComponent, TabNavigationItemComponent], imports: [CommonModule], exports: [TabNavigationComponent, TabNavigationItemComponent] });
10
+ /** @nocollapse */ TabNavigationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, imports: [CommonModule] });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TabNavigationModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ imports: [CommonModule],
15
+ declarations: [TabNavigationComponent, TabNavigationItemComponent],
16
+ exports: [TabNavigationComponent, TabNavigationItemComponent],
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hdmlnYXRpb24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vdGFiLW5hdmlnYXRpb24vc3JjL3RhYi1uYXZpZ2F0aW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7QUFPakcsTUFBTSxPQUFPLG1CQUFtQjs7bUlBQW5CLG1CQUFtQjtvSUFBbkIsbUJBQW1CLGlCQUhmLHNCQUFzQixFQUFFLDBCQUEwQixhQUR2RCxZQUFZLGFBRVosc0JBQXNCLEVBQUUsMEJBQTBCO29JQUVqRCxtQkFBbUIsWUFKcEIsWUFBWTsyRkFJWCxtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSwwQkFBMEIsQ0FBQztvQkFDbEUsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsMEJBQTBCLENBQUM7aUJBQzlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUYWJOYXZpZ2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWItbmF2aWdhdGlvbi90YWItbmF2aWdhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFiTmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3RhYi1uYXZpZ2F0aW9uLWl0ZW0vdGFiLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbVGFiTmF2aWdhdGlvbkNvbXBvbmVudCwgVGFiTmF2aWdhdGlvbkl0ZW1Db21wb25lbnRdLFxuICBleHBvcnRzOiBbVGFiTmF2aWdhdGlvbkNvbXBvbmVudCwgVGFiTmF2aWdhdGlvbkl0ZW1Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJOYXZpZ2F0aW9uTW9kdWxlIHt9XG4iXX0=
@@ -92,4 +92,3 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
92
92
 
93
93
  export { AccordionDirective, AccordionItemComponent, AccordionModule };
94
94
  //# sourceMappingURL=kirbydesign-designsystem-accordion.mjs.map
95
- //# sourceMappingURL=kirbydesign-designsystem-accordion.mjs.map