@kirbydesign/designsystem 5.2.2 → 6.0.0-rc.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 (716) hide show
  1. package/bundles/kirbydesign-designsystem-testing-base.umd.js +1988 -1259
  2. package/bundles/kirbydesign-designsystem-testing-base.umd.js.map +1 -1
  3. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.js +34 -16
  4. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.js.map +1 -1
  5. package/bundles/kirbydesign-designsystem-testing-jest.umd.js +34 -16
  6. package/bundles/kirbydesign-designsystem-testing-jest.umd.js.map +1 -1
  7. package/bundles/kirbydesign-designsystem.umd.js +10025 -9233
  8. package/bundles/kirbydesign-designsystem.umd.js.map +1 -1
  9. package/esm2015/kirbydesign-designsystem.js +1 -115
  10. package/esm2015/lib/components/accordion/accordion-item.component.js +31 -20
  11. package/esm2015/lib/components/accordion/accordion.directive.js +11 -7
  12. package/esm2015/lib/components/app/app.component.js +23 -18
  13. package/esm2015/lib/components/app/app.module.js +13 -8
  14. package/esm2015/lib/components/avatar/avatar.component.js +31 -19
  15. package/esm2015/lib/components/button/button.component.js +63 -34
  16. package/esm2015/lib/components/calendar/calendar.component.js +59 -35
  17. package/esm2015/lib/components/calendar/helpers/calendar.helper.js +8 -8
  18. package/esm2015/lib/components/card/card-footer/card-footer.component.js +14 -11
  19. package/esm2015/lib/components/card/card-header/card-header.component.js +26 -15
  20. package/esm2015/lib/components/card/card.component.js +34 -25
  21. package/esm2015/lib/components/chart/chart-js/chart-js.service.js +48 -34
  22. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.js +1 -3
  23. package/esm2015/lib/components/chart/chart.component.js +36 -39
  24. package/esm2015/lib/components/chart/chart.module.js +13 -8
  25. package/esm2015/lib/components/chart/chart.types.js +1 -1
  26. package/esm2015/lib/components/chart/configs/chart-config.service.js +7 -4
  27. package/esm2015/lib/components/chart/configs/interaction-functions-extensions.config.js +8 -10
  28. package/esm2015/lib/components/chart/configs/shared.utils.js +1 -1
  29. package/esm2015/lib/components/chart/configs/type.config.js +1 -3
  30. package/esm2015/lib/components/chart/index.js +2 -1
  31. package/esm2015/lib/components/chart-deprecated/chart-deprecated-helper.js +7 -4
  32. package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.js +56 -38
  33. package/esm2015/lib/components/chart-deprecated/options/areaspline.js +7 -9
  34. package/esm2015/lib/components/chart-deprecated/options/donut.js +5 -7
  35. package/esm2015/lib/components/chart-deprecated/options/timeseries.js +8 -10
  36. package/esm2015/lib/components/checkbox/checkbox.component.js +47 -21
  37. package/esm2015/lib/components/chip/chip.component.js +24 -13
  38. package/esm2015/lib/components/divider/divider.component.js +16 -12
  39. package/esm2015/lib/components/dropdown/dropdown.component.js +154 -61
  40. package/esm2015/lib/components/dropdown/keyboard-handler.service.js +9 -7
  41. package/esm2015/lib/components/empty-state/empty-state.component.js +27 -16
  42. package/esm2015/lib/components/fab-sheet/fab-sheet.component.js +37 -23
  43. package/esm2015/lib/components/flag/flag.component.js +21 -17
  44. package/esm2015/lib/components/form-field/directives/date/date-input.directive.js +16 -15
  45. package/esm2015/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.js +41 -28
  46. package/esm2015/lib/components/form-field/form-field-message/form-field-message.component.js +17 -13
  47. package/esm2015/lib/components/form-field/form-field.component.js +39 -26
  48. package/esm2015/lib/components/form-field/input/input.component.js +65 -23
  49. package/esm2015/lib/components/form-field/input-counter/input-counter.component.js +14 -11
  50. package/esm2015/lib/components/form-field/textarea/textarea.component.js +51 -20
  51. package/esm2015/lib/components/grid/breakpoint-helper.service.js +9 -9
  52. package/esm2015/lib/components/grid/grid.component.js +21 -18
  53. package/esm2015/lib/components/icon/icon-registry.service.js +11 -19
  54. package/esm2015/lib/components/icon/icon-settings.js +2 -3
  55. package/esm2015/lib/components/icon/icon.component.js +27 -20
  56. package/esm2015/lib/components/icon/icon.module.js +13 -8
  57. package/esm2015/lib/components/icon/index.js +1 -2
  58. package/esm2015/lib/components/icon/kirby-icon-settings.js +2 -4
  59. package/esm2015/lib/components/index.js +11 -10
  60. package/esm2015/lib/components/item/item.component.js +33 -16
  61. package/esm2015/lib/components/item/item.module.js +13 -8
  62. package/esm2015/lib/components/item/label/label.component.js +18 -12
  63. package/esm2015/lib/components/item-group/item-group.component.js +15 -11
  64. package/esm2015/lib/components/item-sliding/item-sliding.component.js +19 -12
  65. package/esm2015/lib/components/list/directives/infinite-scroll.directive.js +18 -17
  66. package/esm2015/lib/components/list/directives/list-item-color.directive.js +17 -11
  67. package/esm2015/lib/components/list/helpers/list-helper.js +7 -4
  68. package/esm2015/lib/components/list/index.js +2 -3
  69. package/esm2015/lib/components/list/list-experimental/list-experimental.component.js +20 -13
  70. package/esm2015/lib/components/list/list-header/list-header.component.js +14 -11
  71. package/esm2015/lib/components/list/list-item/list-item.component.js +38 -24
  72. package/esm2015/lib/components/list/list-section-header/list-section-header.component.js +15 -14
  73. package/esm2015/lib/components/list/list.component.js +81 -40
  74. package/esm2015/lib/components/list/list.directive.js +34 -45
  75. package/esm2015/lib/components/list/list.module.js +33 -12
  76. package/esm2015/lib/components/list/pipes/group-by.pipe.js +10 -6
  77. package/esm2015/lib/components/loading-overlay/loading-overlay.component.js +20 -13
  78. package/esm2015/lib/components/loading-overlay/loading-overlay.service.js +9 -13
  79. package/esm2015/lib/components/modal/action-sheet/action-sheet.component.js +32 -18
  80. package/esm2015/lib/components/modal/alert/alert.component.js +38 -26
  81. package/esm2015/lib/components/modal/alert/config/alert-config.js +1 -1
  82. package/esm2015/lib/components/modal/footer/modal-footer.component.js +25 -13
  83. package/esm2015/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.js +25 -21
  84. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.js +1 -1
  85. package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.js +124 -56
  86. package/esm2015/lib/components/modal/services/action-sheet.helper.js +8 -8
  87. package/esm2015/lib/components/modal/services/alert.helper.js +10 -20
  88. package/esm2015/lib/components/modal/services/modal-animation-builder.service.js +7 -10
  89. package/esm2015/lib/components/modal/services/modal-navigation.service.js +8 -13
  90. package/esm2015/lib/components/modal/services/modal.controller.js +17 -16
  91. package/esm2015/lib/components/modal/services/modal.helper.js +10 -10
  92. package/esm2015/lib/components/page/index.js +2 -1
  93. package/esm2015/lib/components/page/page-footer/page-footer.component.js +21 -18
  94. package/esm2015/lib/components/page/page.component.js +187 -118
  95. package/esm2015/lib/components/page/page.module.js +60 -32
  96. package/esm2015/lib/components/popover/popover.component.js +27 -23
  97. package/esm2015/lib/components/progress-circle/progress-circle-ring.component.js +29 -17
  98. package/esm2015/lib/components/progress-circle/progress-circle.component.js +30 -21
  99. package/esm2015/lib/components/radio/radio-group/radio-group.component.js +60 -34
  100. package/esm2015/lib/components/radio/radio.component.js +36 -17
  101. package/esm2015/lib/components/range/range.component.js +51 -29
  102. package/esm2015/lib/components/reorder-list/reorder-list.component.js +32 -21
  103. package/esm2015/lib/components/router-outlet/router-outlet.component.js +18 -12
  104. package/esm2015/lib/components/router-outlet/router-outlet.module.js +13 -8
  105. package/esm2015/lib/components/section-header/section-header.component.js +15 -9
  106. package/esm2015/lib/components/segmented-control/segment-item.js +1 -1
  107. package/esm2015/lib/components/segmented-control/segmented-control.component.js +38 -29
  108. package/esm2015/lib/components/shared/component-loader.directive.js +15 -16
  109. package/esm2015/lib/components/shared/resize-observer/resize-observer.factory.js +7 -5
  110. package/esm2015/lib/components/shared/resize-observer/resize-observer.service.js +7 -10
  111. package/esm2015/lib/components/slide-button/slide-button.component.js +22 -19
  112. package/esm2015/lib/components/slides/slides.component.js +42 -20
  113. package/esm2015/lib/components/spinner/index.js +3 -0
  114. package/esm2015/lib/components/spinner/spinner.component.js +14 -11
  115. package/esm2015/lib/components/spinner/spinner.module.js +14 -9
  116. package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.js +9 -3
  117. package/esm2015/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.js +25 -20
  118. package/esm2015/lib/components/tabs/tab-button/tab-button.component.js +21 -18
  119. package/esm2015/lib/components/tabs/tabs.component.js +20 -16
  120. package/esm2015/lib/components/tabs/tabs.module.js +14 -9
  121. package/esm2015/lib/components/tabs/tabs.service.js +9 -7
  122. package/esm2015/lib/components/toast/config/toast-config.js +1 -1
  123. package/esm2015/lib/components/toast/services/toast.controller.js +8 -8
  124. package/esm2015/lib/components/toast/services/toast.helper.js +8 -12
  125. package/esm2015/lib/components/toggle/toggle.component.js +21 -14
  126. package/esm2015/lib/components/toggle-button/index.js +3 -0
  127. package/esm2015/lib/components/toggle-button/toggle-button.component.js +20 -13
  128. package/esm2015/lib/components/toggle-button/toggle-button.module.js +13 -8
  129. package/esm2015/lib/components/web-component-proxies.component.js +13 -15
  130. package/esm2015/lib/directives/element-as-button/element-as-button.directive.js +26 -17
  131. package/esm2015/lib/directives/fit-heading/fit-heading.directive.js +16 -17
  132. package/esm2015/lib/directives/fit-heading/fit-heading.module.js +12 -7
  133. package/esm2015/lib/directives/index.js +3 -1
  134. package/esm2015/lib/directives/key-handler/key-handler.directive.js +14 -14
  135. package/esm2015/lib/directives/modal-router-link/modal-router-link.directive.js +20 -15
  136. package/esm2015/lib/directives/theme-color/theme-color.directive.js +55 -24
  137. package/esm2015/lib/helpers/element-has-ancestor.js +1 -1
  138. package/esm2015/lib/helpers/line-clamp-helper.js +7 -8
  139. package/esm2015/lib/helpers/platform.service.js +9 -11
  140. package/esm2015/lib/index.js +1 -5
  141. package/esm2015/lib/kirby.module.js +166 -25
  142. package/esm2015/lib/types/window-ref.js +9 -7
  143. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.js +1 -59
  144. package/esm2015/testing-base/lib/components/index.js +56 -0
  145. package/esm2015/testing-base/lib/components/mock.accordion-item.component.js +26 -18
  146. package/esm2015/testing-base/lib/components/mock.action-sheet.component.js +38 -24
  147. package/esm2015/testing-base/lib/components/mock.app.component.js +22 -14
  148. package/esm2015/testing-base/lib/components/mock.avatar.component.js +37 -24
  149. package/esm2015/testing-base/lib/components/mock.button.component.js +36 -24
  150. package/esm2015/testing-base/lib/components/mock.calendar.component.js +54 -31
  151. package/esm2015/testing-base/lib/components/mock.card-footer.component.js +22 -14
  152. package/esm2015/testing-base/lib/components/mock.card-header.component.js +30 -20
  153. package/esm2015/testing-base/lib/components/mock.card.component.js +34 -22
  154. package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.js +38 -24
  155. package/esm2015/testing-base/lib/components/mock.chart.component.js +38 -25
  156. package/esm2015/testing-base/lib/components/mock.checkbox.component.js +36 -23
  157. package/esm2015/testing-base/lib/components/mock.chip.component.js +26 -18
  158. package/esm2015/testing-base/lib/components/mock.divider.component.js +24 -17
  159. package/esm2015/testing-base/lib/components/mock.dropdown.component.js +49 -30
  160. package/esm2015/testing-base/lib/components/mock.empty-state.component.js +30 -20
  161. package/esm2015/testing-base/lib/components/mock.fab-sheet.component.js +26 -18
  162. package/esm2015/testing-base/lib/components/mock.flag.component.js +26 -18
  163. package/esm2015/testing-base/lib/components/mock.form-field-message.component.js +26 -18
  164. package/esm2015/testing-base/lib/components/mock.form-field.component.js +26 -18
  165. package/esm2015/testing-base/lib/components/mock.grid.component.js +26 -18
  166. package/esm2015/testing-base/lib/components/mock.icon.component.js +29 -20
  167. package/esm2015/testing-base/lib/components/mock.input-counter.component.js +24 -17
  168. package/esm2015/testing-base/lib/components/mock.input.component.js +42 -27
  169. package/esm2015/testing-base/lib/components/mock.item-group.component.js +22 -14
  170. package/esm2015/testing-base/lib/components/mock.item-sliding.component.js +26 -18
  171. package/esm2015/testing-base/lib/components/mock.item.component.js +33 -22
  172. package/esm2015/testing-base/lib/components/mock.label.component.js +24 -17
  173. package/esm2015/testing-base/lib/components/mock.list-experimental.component.js +22 -14
  174. package/esm2015/testing-base/lib/components/mock.list-header.component.js +22 -14
  175. package/esm2015/testing-base/lib/components/mock.list-item.component.js +40 -25
  176. package/esm2015/testing-base/lib/components/mock.list-section-header.component.js +24 -17
  177. package/esm2015/testing-base/lib/components/mock.list.component.js +50 -30
  178. package/esm2015/testing-base/lib/components/mock.loading-overlay.component.js +26 -18
  179. package/esm2015/testing-base/lib/components/mock.modal-footer.component.js +26 -18
  180. package/esm2015/testing-base/lib/components/mock.page-footer.component.js +24 -17
  181. package/esm2015/testing-base/lib/components/mock.page.component.js +228 -125
  182. package/esm2015/testing-base/lib/components/mock.popover.component.js +29 -20
  183. package/esm2015/testing-base/lib/components/mock.progress-circle.component.js +28 -19
  184. package/esm2015/testing-base/lib/components/mock.radio-group.component.js +38 -24
  185. package/esm2015/testing-base/lib/components/mock.radio.component.js +30 -20
  186. package/esm2015/testing-base/lib/components/mock.range.component.js +44 -27
  187. package/esm2015/testing-base/lib/components/mock.reorder-list.component.js +32 -21
  188. package/esm2015/testing-base/lib/components/mock.router-outlet.component.js +24 -17
  189. package/esm2015/testing-base/lib/components/mock.section-header.component.js +22 -14
  190. package/esm2015/testing-base/lib/components/mock.segmented-control.component.js +35 -23
  191. package/esm2015/testing-base/lib/components/mock.slide-button.component.js +30 -20
  192. package/esm2015/testing-base/lib/components/mock.slides.component.js +51 -0
  193. package/esm2015/testing-base/lib/components/mock.spinner.component.js +22 -14
  194. package/esm2015/testing-base/lib/components/mock.tab-button.component.js +26 -18
  195. package/esm2015/testing-base/lib/components/mock.tabs.component.js +22 -14
  196. package/esm2015/testing-base/lib/components/mock.textarea.component.js +35 -23
  197. package/esm2015/testing-base/lib/components/mock.toggle-button.component.js +26 -18
  198. package/esm2015/testing-base/lib/components/mock.toggle.component.js +28 -19
  199. package/esm2015/testing-base/lib/components/mock.web-component-proxies.component.js +33 -0
  200. package/esm2015/testing-base/lib/directives/index.js +4 -0
  201. package/esm2015/testing-base/lib/directives/mock.accordion.directive.js +22 -13
  202. package/esm2015/testing-base/lib/directives/mock.fit-heading.directive.js +24 -15
  203. package/esm2015/testing-base/lib/directives/mock.theme-color.directive.js +24 -16
  204. package/esm2015/testing-base/lib/index.js +4 -0
  205. package/esm2015/testing-base/lib/kirby-testing-base.module.js +69 -7
  206. package/esm2015/testing-base/lib/mock-components.js +5 -2
  207. package/esm2015/testing-base/public_api.js +2 -2
  208. package/esm2015/testing-jasmine/kirbydesign-designsystem-testing-jasmine.js +1 -2
  209. package/esm2015/testing-jasmine/lib/kirby-testing.module.js +14 -8
  210. package/esm2015/testing-jasmine/lib/mock-providers.js +1 -1
  211. package/esm2015/testing-jest/kirbydesign-designsystem-testing-jest.js +1 -2
  212. package/esm2015/testing-jest/lib/kirby-testing.module.js +14 -8
  213. package/esm2015/testing-jest/lib/mock-providers.js +1 -1
  214. package/fesm2015/kirbydesign-designsystem-testing-base.js +1859 -1163
  215. package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
  216. package/fesm2015/kirbydesign-designsystem-testing-jasmine.js +13 -8
  217. package/fesm2015/kirbydesign-designsystem-testing-jasmine.js.map +1 -1
  218. package/fesm2015/kirbydesign-designsystem-testing-jest.js +13 -8
  219. package/fesm2015/kirbydesign-designsystem-testing-jest.js.map +1 -1
  220. package/fesm2015/kirbydesign-designsystem.js +5261 -4353
  221. package/fesm2015/kirbydesign-designsystem.js.map +1 -1
  222. package/icons/svg/more.svg +5 -7
  223. package/kirbydesign-designsystem.d.ts +1 -114
  224. package/lib/components/accordion/accordion-item.component.d.ts +3 -0
  225. package/lib/components/accordion/accordion.directive.d.ts +3 -0
  226. package/lib/components/app/app.component.d.ts +3 -0
  227. package/lib/components/app/app.module.d.ts +7 -0
  228. package/lib/components/avatar/avatar.component.d.ts +5 -2
  229. package/lib/components/button/button.component.d.ts +5 -2
  230. package/lib/components/calendar/calendar.component.d.ts +3 -0
  231. package/lib/components/calendar/helpers/calendar.helper.d.ts +3 -0
  232. package/lib/components/card/card-footer/card-footer.component.d.ts +3 -0
  233. package/lib/components/card/card-header/card-header.component.d.ts +3 -0
  234. package/lib/components/card/card.component.d.ts +3 -0
  235. package/lib/components/chart/chart-js/chart-js.service.d.ts +7 -3
  236. package/lib/components/chart/chart.component.d.ts +5 -5
  237. package/lib/components/chart/chart.module.d.ts +5 -0
  238. package/lib/components/chart/chart.types.d.ts +1 -0
  239. package/lib/components/chart/configs/chart-config.service.d.ts +4 -1
  240. package/lib/components/chart/index.d.ts +1 -0
  241. package/lib/components/chart-deprecated/chart-deprecated-helper.d.ts +3 -0
  242. package/lib/components/chart-deprecated/chart-deprecated.component.d.ts +3 -0
  243. package/lib/components/checkbox/checkbox.component.d.ts +3 -0
  244. package/lib/components/chip/chip.component.d.ts +3 -0
  245. package/lib/components/divider/divider.component.d.ts +3 -0
  246. package/lib/components/dropdown/dropdown.component.d.ts +5 -2
  247. package/lib/components/dropdown/keyboard-handler.service.d.ts +3 -0
  248. package/lib/components/empty-state/empty-state.component.d.ts +3 -0
  249. package/lib/components/fab-sheet/fab-sheet.component.d.ts +3 -0
  250. package/lib/components/flag/flag.component.d.ts +3 -0
  251. package/lib/components/form-field/directives/date/date-input.directive.d.ts +3 -0
  252. package/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.d.ts +3 -0
  253. package/lib/components/form-field/form-field-message/form-field-message.component.d.ts +3 -0
  254. package/lib/components/form-field/form-field.component.d.ts +3 -0
  255. package/lib/components/form-field/input/input.component.d.ts +4 -1
  256. package/lib/components/form-field/input-counter/input-counter.component.d.ts +5 -2
  257. package/lib/components/form-field/textarea/textarea.component.d.ts +3 -0
  258. package/lib/components/grid/breakpoint-helper.service.d.ts +3 -0
  259. package/lib/components/grid/grid.component.d.ts +3 -0
  260. package/lib/components/icon/icon-registry.service.d.ts +4 -2
  261. package/lib/components/icon/icon-settings.d.ts +0 -2
  262. package/lib/components/icon/icon.component.d.ts +4 -1
  263. package/lib/components/icon/icon.module.d.ts +6 -0
  264. package/lib/components/icon/index.d.ts +1 -1
  265. package/lib/components/index.d.ts +10 -9
  266. package/lib/components/item/item.component.d.ts +4 -1
  267. package/lib/components/item/item.module.d.ts +9 -0
  268. package/lib/components/item/label/label.component.d.ts +3 -0
  269. package/lib/components/item-group/item-group.component.d.ts +3 -0
  270. package/lib/components/item-sliding/item-sliding.component.d.ts +3 -0
  271. package/lib/components/list/directives/infinite-scroll.directive.d.ts +3 -0
  272. package/lib/components/list/directives/list-item-color.directive.d.ts +3 -0
  273. package/lib/components/list/helpers/list-helper.d.ts +3 -0
  274. package/lib/components/list/index.d.ts +1 -2
  275. package/lib/components/list/list-experimental/list-experimental.component.d.ts +3 -0
  276. package/lib/components/list/list-header/list-header.component.d.ts +3 -0
  277. package/lib/components/list/list-item/list-item.component.d.ts +3 -0
  278. package/lib/components/list/list-section-header/list-section-header.component.d.ts +3 -0
  279. package/lib/components/list/list.component.d.ts +3 -0
  280. package/lib/components/list/list.directive.d.ts +9 -6
  281. package/lib/components/list/list.module.d.ts +16 -0
  282. package/lib/components/list/pipes/group-by.pipe.d.ts +3 -0
  283. package/lib/components/loading-overlay/loading-overlay.component.d.ts +3 -0
  284. package/lib/components/loading-overlay/loading-overlay.service.d.ts +3 -0
  285. package/lib/components/modal/action-sheet/action-sheet.component.d.ts +3 -0
  286. package/lib/components/modal/alert/alert.component.d.ts +5 -2
  287. package/lib/components/modal/alert/config/alert-config.d.ts +0 -8
  288. package/lib/components/modal/footer/modal-footer.component.d.ts +3 -0
  289. package/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts +3 -0
  290. package/lib/components/modal/modal-wrapper/config/modal-config.d.ts +1 -8
  291. package/lib/components/modal/modal-wrapper/modal-wrapper.component.d.ts +5 -0
  292. package/lib/components/modal/services/action-sheet.helper.d.ts +3 -0
  293. package/lib/components/modal/services/alert.helper.d.ts +4 -2
  294. package/lib/components/modal/services/modal-animation-builder.service.d.ts +3 -0
  295. package/lib/components/modal/services/modal-navigation.service.d.ts +3 -0
  296. package/lib/components/modal/services/modal.controller.d.ts +3 -0
  297. package/lib/components/modal/services/modal.helper.d.ts +3 -0
  298. package/lib/components/page/index.d.ts +1 -0
  299. package/lib/components/page/page-footer/page-footer.component.d.ts +3 -0
  300. package/lib/components/page/page.component.d.ts +26 -0
  301. package/lib/components/page/page.module.d.ts +10 -0
  302. package/lib/components/popover/popover.component.d.ts +4 -1
  303. package/lib/components/progress-circle/progress-circle-ring.component.d.ts +3 -0
  304. package/lib/components/progress-circle/progress-circle.component.d.ts +3 -0
  305. package/lib/components/radio/radio-group/radio-group.component.d.ts +3 -0
  306. package/lib/components/radio/radio.component.d.ts +3 -0
  307. package/lib/components/range/range.component.d.ts +3 -0
  308. package/lib/components/reorder-list/reorder-list.component.d.ts +3 -0
  309. package/lib/components/router-outlet/router-outlet.component.d.ts +3 -0
  310. package/lib/components/router-outlet/router-outlet.module.d.ts +7 -0
  311. package/lib/components/section-header/section-header.component.d.ts +3 -0
  312. package/lib/components/segmented-control/segment-item.d.ts +0 -4
  313. package/lib/components/segmented-control/segmented-control.component.d.ts +4 -1
  314. package/lib/components/shared/component-loader.directive.d.ts +3 -0
  315. package/lib/components/shared/resize-observer/resize-observer.factory.d.ts +3 -0
  316. package/lib/components/shared/resize-observer/resize-observer.service.d.ts +3 -0
  317. package/lib/components/slide-button/slide-button.component.d.ts +3 -0
  318. package/lib/components/slides/slides.component.d.ts +5 -0
  319. package/lib/components/spinner/index.d.ts +2 -0
  320. package/lib/components/spinner/spinner.component.d.ts +3 -0
  321. package/lib/components/spinner/spinner.module.d.ts +6 -0
  322. package/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.d.ts +3 -0
  323. package/lib/components/tabs/tab-button/tab-button.component.d.ts +3 -0
  324. package/lib/components/tabs/tabs.component.d.ts +3 -0
  325. package/lib/components/tabs/tabs.module.d.ts +9 -0
  326. package/lib/components/tabs/tabs.service.d.ts +3 -0
  327. package/lib/components/toast/config/toast-config.d.ts +1 -4
  328. package/lib/components/toast/services/toast.controller.d.ts +3 -0
  329. package/lib/components/toast/services/toast.helper.d.ts +3 -0
  330. package/lib/components/toggle/toggle.component.d.ts +3 -0
  331. package/lib/components/toggle-button/index.d.ts +2 -0
  332. package/lib/components/toggle-button/toggle-button.component.d.ts +3 -0
  333. package/lib/components/toggle-button/toggle-button.module.d.ts +6 -0
  334. package/lib/components/web-component-proxies.component.d.ts +3 -0
  335. package/lib/custom-elements-initializer.d.ts +1 -1
  336. package/lib/directives/element-as-button/element-as-button.directive.d.ts +3 -0
  337. package/lib/directives/fit-heading/fit-heading.directive.d.ts +3 -0
  338. package/lib/directives/fit-heading/fit-heading.module.d.ts +5 -0
  339. package/lib/directives/index.d.ts +2 -0
  340. package/lib/directives/key-handler/key-handler.directive.d.ts +3 -0
  341. package/lib/directives/modal-router-link/modal-router-link.directive.d.ts +3 -0
  342. package/lib/directives/theme-color/theme-color.directive.d.ts +3 -0
  343. package/lib/helpers/line-clamp-helper.d.ts +3 -0
  344. package/lib/helpers/platform.service.d.ts +3 -0
  345. package/lib/index.d.ts +0 -1
  346. package/lib/kirby.module.d.ts +69 -0
  347. package/lib/types/window-ref.d.ts +3 -0
  348. package/package.json +3 -4
  349. package/polyfills/intersection-observer-polyfill-loader.js +12 -12
  350. package/polyfills/resize-observer-polyfill-loader.js +1 -1
  351. package/readme.md +0 -16
  352. package/scss/_trigger-publish.scss +1 -0
  353. package/scss/_trigger.scss +1 -0
  354. package/scss/awesome-stylesheet.scss +1 -0
  355. package/scss/base/_awesome-partial.scss +1 -0
  356. package/scss/base/_index.scss +1 -0
  357. package/scss/base/_interaction-states.scss +1 -0
  358. package/scss/base/_link.scss +1 -0
  359. package/scss/base/index.scss +1 -0
  360. package/scss/interaction-state/_active.scss +1 -0
  361. package/scss/interaction-state/_focus.scss +1 -0
  362. package/scss/interaction-state/_hover.scss +1 -0
  363. package/scss/interaction-state/_index.scss +1 -0
  364. package/scss/interaction-state/_interaction-state.utilities.scss +1 -0
  365. package/scss/interaction-state/_layer.scss +1 -0
  366. package/scss/interaction-state/_state-layer.scss +1 -0
  367. package/scss/interaction-state/_utilities.scss +1 -0
  368. package/scss/interaction-state/ionic/_active.scss +1 -0
  369. package/scss/interaction-state/ionic/_hover.scss +1 -0
  370. package/scss/interaction-state/ionic/_index.scss +1 -0
  371. package/scss/interaction-states/_hover.scss +1 -0
  372. package/scss/interaction-states/_index.scss +1 -0
  373. package/scss/opt-out/_index.scss +1 -0
  374. package/scss/opt-out/_link.scss +1 -0
  375. package/testing-base/kirbydesign-designsystem-testing-base.d.ts +1 -58
  376. package/testing-base/lib/components/index.d.ts +55 -0
  377. package/testing-base/lib/components/mock.accordion-item.component.d.ts +3 -0
  378. package/testing-base/lib/components/mock.action-sheet.component.d.ts +3 -0
  379. package/testing-base/lib/components/mock.app.component.d.ts +3 -0
  380. package/testing-base/lib/components/mock.avatar.component.d.ts +4 -1
  381. package/testing-base/lib/components/mock.button.component.d.ts +4 -1
  382. package/testing-base/lib/components/mock.calendar.component.d.ts +4 -0
  383. package/testing-base/lib/components/mock.card-footer.component.d.ts +3 -0
  384. package/testing-base/lib/components/mock.card-header.component.d.ts +3 -0
  385. package/testing-base/lib/components/mock.card.component.d.ts +3 -0
  386. package/testing-base/lib/components/mock.chart-deprecated.component.d.ts +3 -0
  387. package/testing-base/lib/components/mock.chart.component.d.ts +5 -3
  388. package/testing-base/lib/components/mock.checkbox.component.d.ts +3 -0
  389. package/testing-base/lib/components/mock.chip.component.d.ts +3 -0
  390. package/testing-base/lib/components/mock.divider.component.d.ts +3 -0
  391. package/testing-base/lib/components/mock.dropdown.component.d.ts +4 -1
  392. package/testing-base/lib/components/mock.empty-state.component.d.ts +3 -0
  393. package/testing-base/lib/components/mock.fab-sheet.component.d.ts +3 -0
  394. package/testing-base/lib/components/mock.flag.component.d.ts +3 -0
  395. package/testing-base/lib/components/mock.form-field-message.component.d.ts +3 -0
  396. package/testing-base/lib/components/mock.form-field.component.d.ts +3 -0
  397. package/testing-base/lib/components/mock.grid.component.d.ts +3 -0
  398. package/testing-base/lib/components/mock.icon.component.d.ts +4 -1
  399. package/testing-base/lib/components/mock.input-counter.component.d.ts +3 -0
  400. package/testing-base/lib/components/mock.input.component.d.ts +4 -1
  401. package/testing-base/lib/components/mock.item-group.component.d.ts +3 -0
  402. package/testing-base/lib/components/mock.item-sliding.component.d.ts +3 -0
  403. package/testing-base/lib/components/mock.item.component.d.ts +4 -1
  404. package/testing-base/lib/components/mock.label.component.d.ts +3 -0
  405. package/testing-base/lib/components/mock.list-experimental.component.d.ts +3 -0
  406. package/testing-base/lib/components/mock.list-header.component.d.ts +3 -0
  407. package/testing-base/lib/components/mock.list-item.component.d.ts +3 -0
  408. package/testing-base/lib/components/mock.list-section-header.component.d.ts +3 -0
  409. package/testing-base/lib/components/mock.list.component.d.ts +3 -0
  410. package/testing-base/lib/components/mock.loading-overlay.component.d.ts +3 -0
  411. package/testing-base/lib/components/mock.modal-footer.component.d.ts +3 -0
  412. package/testing-base/lib/components/mock.page-footer.component.d.ts +3 -0
  413. package/testing-base/lib/components/mock.page.component.d.ts +24 -0
  414. package/testing-base/lib/components/mock.popover.component.d.ts +4 -1
  415. package/testing-base/lib/components/mock.progress-circle.component.d.ts +3 -0
  416. package/testing-base/lib/components/mock.radio-group.component.d.ts +3 -0
  417. package/testing-base/lib/components/mock.radio.component.d.ts +3 -0
  418. package/testing-base/lib/components/mock.range.component.d.ts +3 -0
  419. package/testing-base/lib/components/mock.reorder-list.component.d.ts +3 -0
  420. package/testing-base/lib/components/mock.router-outlet.component.d.ts +3 -0
  421. package/testing-base/lib/components/mock.section-header.component.d.ts +3 -0
  422. package/testing-base/lib/components/mock.segmented-control.component.d.ts +4 -1
  423. package/testing-base/lib/components/mock.slide-button.component.d.ts +3 -0
  424. package/testing-base/lib/components/mock.slides.component.d.ts +11 -0
  425. package/testing-base/lib/components/mock.spinner.component.d.ts +3 -0
  426. package/testing-base/lib/components/mock.tab-button.component.d.ts +3 -0
  427. package/testing-base/lib/components/mock.tabs.component.d.ts +3 -0
  428. package/testing-base/lib/components/mock.textarea.component.d.ts +3 -0
  429. package/testing-base/lib/components/mock.toggle-button.component.d.ts +3 -0
  430. package/testing-base/lib/components/mock.toggle.component.d.ts +3 -0
  431. package/testing-base/lib/components/mock.web-component-proxies.component.d.ts +8 -0
  432. package/testing-base/lib/directives/index.d.ts +3 -0
  433. package/testing-base/lib/directives/mock.accordion.directive.d.ts +3 -0
  434. package/testing-base/lib/directives/mock.fit-heading.directive.d.ts +3 -0
  435. package/testing-base/lib/directives/mock.theme-color.directive.d.ts +3 -0
  436. package/testing-base/lib/index.d.ts +3 -0
  437. package/testing-base/lib/kirby-testing-base.module.d.ts +61 -0
  438. package/testing-base/package.json +0 -1
  439. package/testing-base/public_api.d.ts +1 -1
  440. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.d.ts +1 -1
  441. package/testing-jasmine/lib/kirby-testing.module.d.ts +5 -0
  442. package/testing-jasmine/package.json +0 -1
  443. package/testing-jest/kirbydesign-designsystem-testing-jest.d.ts +1 -1
  444. package/testing-jest/lib/kirby-testing.module.d.ts +5 -0
  445. package/testing-jest/package.json +0 -1
  446. package/README.md +0 -7
  447. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +0 -2
  448. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +0 -1
  449. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js +0 -16
  450. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js.map +0 -1
  451. package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js +0 -16
  452. package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js.map +0 -1
  453. package/bundles/kirbydesign-designsystem.umd.min.js +0 -2
  454. package/bundles/kirbydesign-designsystem.umd.min.js.map +0 -1
  455. package/esm2015/index.metadata.json +0 -1
  456. package/esm2015/kirbydesign-designsystem.metadata.json +0 -1
  457. package/esm2015/lib/components/accordion/accordion-item.component.metadata.json +0 -1
  458. package/esm2015/lib/components/accordion/accordion.directive.metadata.json +0 -1
  459. package/esm2015/lib/components/accordion/index.metadata.json +0 -1
  460. package/esm2015/lib/components/angular-component-lib/utils.metadata.json +0 -1
  461. package/esm2015/lib/components/app/app.component.metadata.json +0 -1
  462. package/esm2015/lib/components/app/app.module.metadata.json +0 -1
  463. package/esm2015/lib/components/app/index.metadata.json +0 -1
  464. package/esm2015/lib/components/avatar/avatar.component.metadata.json +0 -1
  465. package/esm2015/lib/components/button/button.component.metadata.json +0 -1
  466. package/esm2015/lib/components/calendar/calendar.component.metadata.json +0 -1
  467. package/esm2015/lib/components/calendar/helpers/calendar-cell.model.metadata.json +0 -1
  468. package/esm2015/lib/components/calendar/helpers/calendar-options.model.metadata.json +0 -1
  469. package/esm2015/lib/components/calendar/helpers/calendar.helper.metadata.json +0 -1
  470. package/esm2015/lib/components/calendar/index.metadata.json +0 -1
  471. package/esm2015/lib/components/calendar/options/calendar-year-navigator-config.metadata.json +0 -1
  472. package/esm2015/lib/components/card/card-footer/card-footer.component.metadata.json +0 -1
  473. package/esm2015/lib/components/card/card-header/card-header.component.metadata.json +0 -1
  474. package/esm2015/lib/components/card/card.component.metadata.json +0 -1
  475. package/esm2015/lib/components/card/index.metadata.json +0 -1
  476. package/esm2015/lib/components/chart/chart-js/chart-js.service.metadata.json +0 -1
  477. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.metadata.json +0 -1
  478. package/esm2015/lib/components/chart/chart-js/configured-chart-js.metadata.json +0 -1
  479. package/esm2015/lib/components/chart/chart.component.metadata.json +0 -1
  480. package/esm2015/lib/components/chart/chart.module.metadata.json +0 -1
  481. package/esm2015/lib/components/chart/chart.types.metadata.json +0 -1
  482. package/esm2015/lib/components/chart/configs/annotations.config.metadata.json +0 -1
  483. package/esm2015/lib/components/chart/configs/chart-config.service.metadata.json +0 -1
  484. package/esm2015/lib/components/chart/configs/global-defaults.config.metadata.json +0 -1
  485. package/esm2015/lib/components/chart/configs/interaction-functions-extensions.config.metadata.json +0 -1
  486. package/esm2015/lib/components/chart/configs/shared.utils.metadata.json +0 -1
  487. package/esm2015/lib/components/chart/configs/type.config.metadata.json +0 -1
  488. package/esm2015/lib/components/chart/index.metadata.json +0 -1
  489. package/esm2015/lib/components/chart-deprecated/chart-deprecated-helper.metadata.json +0 -1
  490. package/esm2015/lib/components/chart-deprecated/chart-deprecated-type.metadata.json +0 -1
  491. package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.metadata.json +0 -1
  492. package/esm2015/lib/components/chart-deprecated/index.metadata.json +0 -1
  493. package/esm2015/lib/components/chart-deprecated/options/activitygauge.metadata.json +0 -1
  494. package/esm2015/lib/components/chart-deprecated/options/areaspline.metadata.json +0 -1
  495. package/esm2015/lib/components/chart-deprecated/options/bar.metadata.json +0 -1
  496. package/esm2015/lib/components/chart-deprecated/options/column.metadata.json +0 -1
  497. package/esm2015/lib/components/chart-deprecated/options/donut.metadata.json +0 -1
  498. package/esm2015/lib/components/chart-deprecated/options/timeseries.metadata.json +0 -1
  499. package/esm2015/lib/components/checkbox/checkbox.component.metadata.json +0 -1
  500. package/esm2015/lib/components/chip/chip.component.metadata.json +0 -1
  501. package/esm2015/lib/components/divider/divider.component.metadata.json +0 -1
  502. package/esm2015/lib/components/dropdown/dropdown.component.metadata.json +0 -1
  503. package/esm2015/lib/components/dropdown/dropdown.types.metadata.json +0 -1
  504. package/esm2015/lib/components/dropdown/keyboard-handler.service.metadata.json +0 -1
  505. package/esm2015/lib/components/empty-state/empty-state.component.metadata.json +0 -1
  506. package/esm2015/lib/components/fab-sheet/fab-sheet.component.metadata.json +0 -1
  507. package/esm2015/lib/components/flag/flag.component.metadata.json +0 -1
  508. package/esm2015/lib/components/form-field/directives/date/date-input.directive.metadata.json +0 -1
  509. package/esm2015/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.metadata.json +0 -1
  510. package/esm2015/lib/components/form-field/form-field-message/form-field-message.component.metadata.json +0 -1
  511. package/esm2015/lib/components/form-field/form-field.component.metadata.json +0 -1
  512. package/esm2015/lib/components/form-field/index.metadata.json +0 -1
  513. package/esm2015/lib/components/form-field/input/input.component.metadata.json +0 -1
  514. package/esm2015/lib/components/form-field/input-counter/input-counter.component.metadata.json +0 -1
  515. package/esm2015/lib/components/form-field/textarea/textarea.component.metadata.json +0 -1
  516. package/esm2015/lib/components/grid/breakpoint-helper.service.metadata.json +0 -1
  517. package/esm2015/lib/components/grid/grid-card-configuration.metadata.json +0 -1
  518. package/esm2015/lib/components/grid/grid.component.metadata.json +0 -1
  519. package/esm2015/lib/components/icon/icon-registry.service.metadata.json +0 -1
  520. package/esm2015/lib/components/icon/icon-settings.metadata.json +0 -1
  521. package/esm2015/lib/components/icon/icon.component.metadata.json +0 -1
  522. package/esm2015/lib/components/icon/icon.module.metadata.json +0 -1
  523. package/esm2015/lib/components/icon/index.metadata.json +0 -1
  524. package/esm2015/lib/components/icon/kirby-icon-settings.metadata.json +0 -1
  525. package/esm2015/lib/components/index.metadata.json +0 -1
  526. package/esm2015/lib/components/item/index.metadata.json +0 -1
  527. package/esm2015/lib/components/item/item.component.metadata.json +0 -1
  528. package/esm2015/lib/components/item/item.module.metadata.json +0 -1
  529. package/esm2015/lib/components/item/label/label.component.metadata.json +0 -1
  530. package/esm2015/lib/components/item-group/item-group.component.metadata.json +0 -1
  531. package/esm2015/lib/components/item-sliding/index.metadata.json +0 -1
  532. package/esm2015/lib/components/item-sliding/item-sliding.component.metadata.json +0 -1
  533. package/esm2015/lib/components/item-sliding/item-sliding.types.metadata.json +0 -1
  534. package/esm2015/lib/components/list/directives/infinite-scroll.directive.metadata.json +0 -1
  535. package/esm2015/lib/components/list/directives/list-item-color.directive.metadata.json +0 -1
  536. package/esm2015/lib/components/list/directives/scroll.model.metadata.json +0 -1
  537. package/esm2015/lib/components/list/helpers/list-helper.metadata.json +0 -1
  538. package/esm2015/lib/components/list/index.metadata.json +0 -1
  539. package/esm2015/lib/components/list/list-experimental/list-experimental.component.metadata.json +0 -1
  540. package/esm2015/lib/components/list/list-header/list-header.component.metadata.json +0 -1
  541. package/esm2015/lib/components/list/list-item/list-item.component.metadata.json +0 -1
  542. package/esm2015/lib/components/list/list-section-header/list-section-header.component.metadata.json +0 -1
  543. package/esm2015/lib/components/list/list-swipe-action.type.metadata.json +0 -1
  544. package/esm2015/lib/components/list/list.component.metadata.json +0 -1
  545. package/esm2015/lib/components/list/list.directive.metadata.json +0 -1
  546. package/esm2015/lib/components/list/list.event.metadata.json +0 -1
  547. package/esm2015/lib/components/list/list.module.metadata.json +0 -1
  548. package/esm2015/lib/components/list/pipes/group-by.pipe.metadata.json +0 -1
  549. package/esm2015/lib/components/loading-overlay/index.metadata.json +0 -1
  550. package/esm2015/lib/components/loading-overlay/loading-overlay.component.metadata.json +0 -1
  551. package/esm2015/lib/components/loading-overlay/loading-overlay.service.metadata.json +0 -1
  552. package/esm2015/lib/components/modal/action-sheet/action-sheet.component.metadata.json +0 -1
  553. package/esm2015/lib/components/modal/action-sheet/config/action-sheet-config.metadata.json +0 -1
  554. package/esm2015/lib/components/modal/action-sheet/config/action-sheet-item.metadata.json +0 -1
  555. package/esm2015/lib/components/modal/alert/alert.component.metadata.json +0 -1
  556. package/esm2015/lib/components/modal/alert/config/alert-config.metadata.json +0 -1
  557. package/esm2015/lib/components/modal/footer/modal-footer.component.metadata.json +0 -1
  558. package/esm2015/lib/components/modal/index.metadata.json +0 -1
  559. package/esm2015/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.metadata.json +0 -1
  560. package/esm2015/lib/components/modal/modal-wrapper/config/drawer-supplementary-action.metadata.json +0 -1
  561. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.helper.metadata.json +0 -1
  562. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.metadata.json +0 -1
  563. package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.metadata.json +0 -1
  564. package/esm2015/lib/components/modal/services/action-sheet.helper.metadata.json +0 -1
  565. package/esm2015/lib/components/modal/services/alert.helper.metadata.json +0 -1
  566. package/esm2015/lib/components/modal/services/modal-animation-builder.service.metadata.json +0 -1
  567. package/esm2015/lib/components/modal/services/modal-navigation.service.metadata.json +0 -1
  568. package/esm2015/lib/components/modal/services/modal.controller.metadata.json +0 -1
  569. package/esm2015/lib/components/modal/services/modal.helper.metadata.json +0 -1
  570. package/esm2015/lib/components/modal/services/modal.interfaces.metadata.json +0 -1
  571. package/esm2015/lib/components/page/index.metadata.json +0 -1
  572. package/esm2015/lib/components/page/page-footer/page-footer.component.metadata.json +0 -1
  573. package/esm2015/lib/components/page/page.component.metadata.json +0 -1
  574. package/esm2015/lib/components/page/page.module.metadata.json +0 -1
  575. package/esm2015/lib/components/popover/popover.component.metadata.json +0 -1
  576. package/esm2015/lib/components/progress-circle/progress-circle-ring.component.metadata.json +0 -1
  577. package/esm2015/lib/components/progress-circle/progress-circle.component.metadata.json +0 -1
  578. package/esm2015/lib/components/radio/index.metadata.json +0 -1
  579. package/esm2015/lib/components/radio/radio-group/radio-group.component.metadata.json +0 -1
  580. package/esm2015/lib/components/radio/radio.component.metadata.json +0 -1
  581. package/esm2015/lib/components/range/range.component.metadata.json +0 -1
  582. package/esm2015/lib/components/reorder-list/index.metadata.json +0 -1
  583. package/esm2015/lib/components/reorder-list/reorder-event.metadata.json +0 -1
  584. package/esm2015/lib/components/reorder-list/reorder-list.component.metadata.json +0 -1
  585. package/esm2015/lib/components/router-outlet/index.metadata.json +0 -1
  586. package/esm2015/lib/components/router-outlet/router-outlet.component.metadata.json +0 -1
  587. package/esm2015/lib/components/router-outlet/router-outlet.module.metadata.json +0 -1
  588. package/esm2015/lib/components/section-header/section-header.component.metadata.json +0 -1
  589. package/esm2015/lib/components/segmented-control/segment-item.metadata.json +0 -1
  590. package/esm2015/lib/components/segmented-control/segmented-control.component.metadata.json +0 -1
  591. package/esm2015/lib/components/shared/component-configuration.metadata.json +0 -1
  592. package/esm2015/lib/components/shared/component-loader.directive.metadata.json +0 -1
  593. package/esm2015/lib/components/shared/dynamic-component.metadata.json +0 -1
  594. package/esm2015/lib/components/shared/index.metadata.json +0 -1
  595. package/esm2015/lib/components/shared/resize-observer/resize-observer.factory.metadata.json +0 -1
  596. package/esm2015/lib/components/shared/resize-observer/resize-observer.service.metadata.json +0 -1
  597. package/esm2015/lib/components/shared/resize-observer/types/resize-observer-callback.metadata.json +0 -1
  598. package/esm2015/lib/components/shared/resize-observer/types/resize-observer-entry.metadata.json +0 -1
  599. package/esm2015/lib/components/shared/resize-observer/types/resize-observer.metadata.json +0 -1
  600. package/esm2015/lib/components/slide-button/slide-button.component.metadata.json +0 -1
  601. package/esm2015/lib/components/slides/slides.component.metadata.json +0 -1
  602. package/esm2015/lib/components/spinner/spinner.component.metadata.json +0 -1
  603. package/esm2015/lib/components/spinner/spinner.module.metadata.json +0 -1
  604. package/esm2015/lib/components/stock-chart-deprecated/index.metadata.json +0 -1
  605. package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.metadata.json +0 -1
  606. package/esm2015/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.metadata.json +0 -1
  607. package/esm2015/lib/components/tabs/index.metadata.json +0 -1
  608. package/esm2015/lib/components/tabs/tab-button/tab-button.component.metadata.json +0 -1
  609. package/esm2015/lib/components/tabs/tab-button/tab-button.events.metadata.json +0 -1
  610. package/esm2015/lib/components/tabs/tabs.component.metadata.json +0 -1
  611. package/esm2015/lib/components/tabs/tabs.module.metadata.json +0 -1
  612. package/esm2015/lib/components/tabs/tabs.service.metadata.json +0 -1
  613. package/esm2015/lib/components/toast/config/toast-config.metadata.json +0 -1
  614. package/esm2015/lib/components/toast/index.metadata.json +0 -1
  615. package/esm2015/lib/components/toast/services/toast.controller.metadata.json +0 -1
  616. package/esm2015/lib/components/toast/services/toast.helper.metadata.json +0 -1
  617. package/esm2015/lib/components/toggle/toggle.component.metadata.json +0 -1
  618. package/esm2015/lib/components/toggle-button/toggle-button.component.metadata.json +0 -1
  619. package/esm2015/lib/components/toggle-button/toggle-button.module.metadata.json +0 -1
  620. package/esm2015/lib/components/web-component-proxies.component.metadata.json +0 -1
  621. package/esm2015/lib/custom-elements-initializer.metadata.json +0 -1
  622. package/esm2015/lib/directives/element-as-button/element-as-button.directive.metadata.json +0 -1
  623. package/esm2015/lib/directives/fit-heading/fit-heading.directive.metadata.json +0 -1
  624. package/esm2015/lib/directives/fit-heading/fit-heading.module.metadata.json +0 -1
  625. package/esm2015/lib/directives/index.metadata.json +0 -1
  626. package/esm2015/lib/directives/key-handler/key-handler.directive.metadata.json +0 -1
  627. package/esm2015/lib/directives/modal-router-link/modal-router-link.directive.metadata.json +0 -1
  628. package/esm2015/lib/directives/theme-color/theme-color.directive.metadata.json +0 -1
  629. package/esm2015/lib/helpers/color-helper.metadata.json +0 -1
  630. package/esm2015/lib/helpers/deep-copy.metadata.json +0 -1
  631. package/esm2015/lib/helpers/design-token-helper.metadata.json +0 -1
  632. package/esm2015/lib/helpers/element-has-ancestor.metadata.json +0 -1
  633. package/esm2015/lib/helpers/index.metadata.json +0 -1
  634. package/esm2015/lib/helpers/line-clamp-helper.metadata.json +0 -1
  635. package/esm2015/lib/helpers/merge-deep.metadata.json +0 -1
  636. package/esm2015/lib/helpers/platform.service.metadata.json +0 -1
  637. package/esm2015/lib/helpers/string-helper.metadata.json +0 -1
  638. package/esm2015/lib/helpers/theme-color.type.metadata.json +0 -1
  639. package/esm2015/lib/helpers/unique-id-generator.helper.metadata.json +0 -1
  640. package/esm2015/lib/index.metadata.json +0 -1
  641. package/esm2015/lib/kirby.module.metadata.json +0 -1
  642. package/esm2015/lib/scss/scss-helper.metadata.json +0 -1
  643. package/esm2015/lib/types/window-ref.metadata.json +0 -1
  644. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.metadata.json +0 -1
  645. package/esm2015/testing-base/lib/components/mock.accordion-item.component.metadata.json +0 -1
  646. package/esm2015/testing-base/lib/components/mock.action-sheet.component.metadata.json +0 -1
  647. package/esm2015/testing-base/lib/components/mock.app.component.metadata.json +0 -1
  648. package/esm2015/testing-base/lib/components/mock.avatar.component.metadata.json +0 -1
  649. package/esm2015/testing-base/lib/components/mock.button.component.metadata.json +0 -1
  650. package/esm2015/testing-base/lib/components/mock.calendar.component.metadata.json +0 -1
  651. package/esm2015/testing-base/lib/components/mock.card-footer.component.metadata.json +0 -1
  652. package/esm2015/testing-base/lib/components/mock.card-header.component.metadata.json +0 -1
  653. package/esm2015/testing-base/lib/components/mock.card.component.metadata.json +0 -1
  654. package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.metadata.json +0 -1
  655. package/esm2015/testing-base/lib/components/mock.chart.component.metadata.json +0 -1
  656. package/esm2015/testing-base/lib/components/mock.checkbox.component.metadata.json +0 -1
  657. package/esm2015/testing-base/lib/components/mock.chip.component.metadata.json +0 -1
  658. package/esm2015/testing-base/lib/components/mock.divider.component.metadata.json +0 -1
  659. package/esm2015/testing-base/lib/components/mock.dropdown.component.metadata.json +0 -1
  660. package/esm2015/testing-base/lib/components/mock.empty-state.component.metadata.json +0 -1
  661. package/esm2015/testing-base/lib/components/mock.fab-sheet.component.metadata.json +0 -1
  662. package/esm2015/testing-base/lib/components/mock.flag.component.metadata.json +0 -1
  663. package/esm2015/testing-base/lib/components/mock.form-field-message.component.metadata.json +0 -1
  664. package/esm2015/testing-base/lib/components/mock.form-field.component.metadata.json +0 -1
  665. package/esm2015/testing-base/lib/components/mock.grid.component.metadata.json +0 -1
  666. package/esm2015/testing-base/lib/components/mock.icon.component.metadata.json +0 -1
  667. package/esm2015/testing-base/lib/components/mock.input-counter.component.metadata.json +0 -1
  668. package/esm2015/testing-base/lib/components/mock.input.component.metadata.json +0 -1
  669. package/esm2015/testing-base/lib/components/mock.item-group.component.metadata.json +0 -1
  670. package/esm2015/testing-base/lib/components/mock.item-sliding.component.metadata.json +0 -1
  671. package/esm2015/testing-base/lib/components/mock.item.component.metadata.json +0 -1
  672. package/esm2015/testing-base/lib/components/mock.label.component.metadata.json +0 -1
  673. package/esm2015/testing-base/lib/components/mock.list-experimental.component.metadata.json +0 -1
  674. package/esm2015/testing-base/lib/components/mock.list-header.component.metadata.json +0 -1
  675. package/esm2015/testing-base/lib/components/mock.list-item.component.metadata.json +0 -1
  676. package/esm2015/testing-base/lib/components/mock.list-section-header.component.metadata.json +0 -1
  677. package/esm2015/testing-base/lib/components/mock.list.component.metadata.json +0 -1
  678. package/esm2015/testing-base/lib/components/mock.loading-overlay.component.metadata.json +0 -1
  679. package/esm2015/testing-base/lib/components/mock.modal-footer.component.metadata.json +0 -1
  680. package/esm2015/testing-base/lib/components/mock.page-footer.component.metadata.json +0 -1
  681. package/esm2015/testing-base/lib/components/mock.page.component.metadata.json +0 -1
  682. package/esm2015/testing-base/lib/components/mock.popover.component.metadata.json +0 -1
  683. package/esm2015/testing-base/lib/components/mock.progress-circle.component.metadata.json +0 -1
  684. package/esm2015/testing-base/lib/components/mock.radio-group.component.metadata.json +0 -1
  685. package/esm2015/testing-base/lib/components/mock.radio.component.metadata.json +0 -1
  686. package/esm2015/testing-base/lib/components/mock.range.component.metadata.json +0 -1
  687. package/esm2015/testing-base/lib/components/mock.reorder-list.component.metadata.json +0 -1
  688. package/esm2015/testing-base/lib/components/mock.router-outlet.component.metadata.json +0 -1
  689. package/esm2015/testing-base/lib/components/mock.section-header.component.metadata.json +0 -1
  690. package/esm2015/testing-base/lib/components/mock.segmented-control.component.metadata.json +0 -1
  691. package/esm2015/testing-base/lib/components/mock.slide-button.component.metadata.json +0 -1
  692. package/esm2015/testing-base/lib/components/mock.spinner.component.metadata.json +0 -1
  693. package/esm2015/testing-base/lib/components/mock.tab-button.component.metadata.json +0 -1
  694. package/esm2015/testing-base/lib/components/mock.tabs.component.metadata.json +0 -1
  695. package/esm2015/testing-base/lib/components/mock.textarea.component.metadata.json +0 -1
  696. package/esm2015/testing-base/lib/components/mock.toggle-button.component.metadata.json +0 -1
  697. package/esm2015/testing-base/lib/components/mock.toggle.component.metadata.json +0 -1
  698. package/esm2015/testing-base/lib/directives/mock.accordion.directive.metadata.json +0 -1
  699. package/esm2015/testing-base/lib/directives/mock.fit-heading.directive.metadata.json +0 -1
  700. package/esm2015/testing-base/lib/directives/mock.theme-color.directive.metadata.json +0 -1
  701. package/esm2015/testing-base/lib/kirby-testing-base.module.metadata.json +0 -1
  702. package/esm2015/testing-base/lib/mock-components.metadata.json +0 -1
  703. package/esm2015/testing-base/lib/mock-directives.metadata.json +0 -1
  704. package/esm2015/testing-base/public_api.metadata.json +0 -1
  705. package/esm2015/testing-jasmine/kirbydesign-designsystem-testing-jasmine.metadata.json +0 -1
  706. package/esm2015/testing-jasmine/lib/kirby-testing.module.metadata.json +0 -1
  707. package/esm2015/testing-jasmine/lib/mock-providers.metadata.json +0 -1
  708. package/esm2015/testing-jasmine/public_api.metadata.json +0 -1
  709. package/esm2015/testing-jest/kirbydesign-designsystem-testing-jest.metadata.json +0 -1
  710. package/esm2015/testing-jest/lib/kirby-testing.module.metadata.json +0 -1
  711. package/esm2015/testing-jest/lib/mock-providers.metadata.json +0 -1
  712. package/esm2015/testing-jest/public_api.metadata.json +0 -1
  713. package/kirbydesign-designsystem.metadata.json +0 -1
  714. package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +0 -1
  715. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.metadata.json +0 -1
  716. package/testing-jest/kirbydesign-designsystem-testing-jest.metadata.json +0 -1
@@ -7,6 +7,14 @@ import { ListItemTemplateDirective } from '../list/list.directive';
7
7
  import { HorizontalDirection, PopoverComponent } from '../popover/popover.component';
8
8
  import { OpenState, VerticalDirection } from './dropdown.types';
9
9
  import { KeyboardHandlerService } from './keyboard-handler.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "./keyboard-handler.service";
12
+ import * as i2 from "../button/button.component";
13
+ import * as i3 from "../icon/icon.component";
14
+ import * as i4 from "../popover/popover.component";
15
+ import * as i5 from "../card/card.component";
16
+ import * as i6 from "../item/item.component";
17
+ import * as i7 from "@angular/common";
10
18
  export class DropdownComponent {
11
19
  constructor(renderer, elementRef, changeDetectorRef, keyboardHandlerService) {
12
20
  this.renderer = renderer;
@@ -381,64 +389,149 @@ export class DropdownComponent {
381
389
  }
382
390
  }
383
391
  DropdownComponent.OPEN_DELAY_IN_MS = 100;
384
- DropdownComponent.decorators = [
385
- { type: Component, args: [{
386
- selector: 'kirby-dropdown',
387
- template: "<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"isOpen ? attentionLevelOpen : attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover [target]=\"buttonElement\" [popout]=\"popout\" (willHide)=\"_onPopoverWillHide()\">\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card>\n <ng-container *ngFor=\"let item of items; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: { $implicit: item, selected: i === selectedIndex, index: i }\n \"\n ></ng-container>\n </ng-container>\n </kirby-card>\n</ng-template>\n\n<ng-template #defaultItemTemplate let-item let-selected=\"selected\" let-index=\"index\">\n <kirby-item [selectable]=\"true\" [selected]=\"selected\" (click)=\"onItemSelect(index)\" role=\"option\">\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <h3 tabindex=\"0\">{{ getTextFromItem(item) }}</h3>\n <kirby-icon *ngIf=\"selected\" name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n </kirby-item>\n</ng-template>\n",
388
- providers: [
389
- {
390
- provide: NG_VALUE_ACCESSOR,
391
- useExisting: forwardRef(() => DropdownComponent),
392
- multi: true,
393
- },
394
- ],
395
- styles: [":host{display:inline-block;position:relative;max-width:calc(100vw - 32px);outline:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:0;max-width:none}@media (hover:hover){:host:focus>button,:host:focus>button.attention-level3{border-color:#4d90fe}}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;transition:box-shadow .2s,border-color .2s}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}kirby-popover{--max-height:352px}kirby-card{max-height:352px;margin-top:4px;margin-bottom:4px;overflow-y:auto;box-shadow:0 20px 30px -15px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08);min-width:288px;max-width:calc(100vw - 32px)}@media (min-width:321px){kirby-card{min-width:343px}}:host(:not(.with-popover)) kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host(:not(.with-popover)).is-opening kirby-card{display:block}:host(:not(.with-popover)).is-open kirby-card{display:block;opacity:1}:host(:not(.with-popover)).popout-left kirby-card{right:0}:host(:not(.with-popover)).popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host(:not(.with-popover)).popout-up.is-open>button{z-index:801}:host(.is-open)>button{box-shadow:0 20px 30px -15px rgba(28,28,28,.3),0 0 5px 0 rgba(28,28,28,.08)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:medium}:host-context(kirby-calendar).is-open>button{box-shadow:none}"]
396
- },] }
397
- ];
398
- /** @nocollapse */
399
- DropdownComponent.ctorParameters = () => [
400
- { type: Renderer2 },
401
- { type: ElementRef },
402
- { type: ChangeDetectorRef },
403
- { type: KeyboardHandlerService }
404
- ];
405
- DropdownComponent.propDecorators = {
406
- items: [{ type: Input }],
407
- selectedIndex: [{ type: Input }],
408
- itemTextProperty: [{ type: Input }],
409
- placeholder: [{ type: Input }],
410
- popout: [{ type: Input }],
411
- attentionLevel: [{ type: Input }],
412
- expand: [{ type: Input }],
413
- disabled: [{ type: Input }],
414
- _isDisabled: [{ type: HostBinding, args: ['attr.disabled',] }],
415
- hasError: [{ type: HostBinding, args: ['class.error',] }, { type: Input }],
416
- size: [{ type: Input }],
417
- tabindex: [{ type: Input }],
418
- usePopover: [{ type: HostBinding, args: ['class.with-popover',] }, { type: Input }],
419
- _tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],
420
- _noBlurOnScroll: [{ type: HostBinding, args: ['attr.no-blur',] }],
421
- change: [{ type: Output }],
422
- _isBlockLevel: [{ type: HostBinding, args: ['class.expand',] }],
423
- _role: [{ type: HostBinding, args: ['attr.role',] }],
424
- _isOpening: [{ type: HostBinding, args: ['class.is-opening',] }],
425
- isOpen: [{ type: HostBinding, args: ['class.is-open',] }],
426
- _popoutLeft: [{ type: HostBinding, args: ['class.popout-left',] }],
427
- _popoutUp: [{ type: HostBinding, args: ['class.popout-up',] }],
428
- itemTemplate: [{ type: ContentChild, args: [ListItemTemplateDirective, { static: true, read: TemplateRef },] }],
429
- slottedItems: [{ type: ContentChildren, args: [ListItemTemplateDirective, { read: ElementRef },] }],
430
- cardElement: [{ type: ViewChild, args: [CardComponent, { read: ElementRef },] }],
431
- popover: [{ type: ViewChild, args: [PopoverComponent,] }],
432
- buttonElement: [{ type: ViewChild, args: [ButtonComponent, { static: true, read: ElementRef },] }],
433
- kirbyItemsDefault: [{ type: ViewChildren, args: [ItemComponent, { read: ElementRef },] }],
434
- kirbyItemsSlotted: [{ type: ContentChildren, args: [ItemComponent, { read: ElementRef },] }],
435
- _onTab: [{ type: HostListener, args: ['keydown.tab', ['$event'],] }],
436
- _onMouseDown: [{ type: HostListener, args: ['mousedown', ['$event'],] }],
437
- _onFocus: [{ type: HostListener, args: ['focus',] }],
438
- _onBlur: [{ type: HostListener, args: ['keydown.enter',] }, { type: HostListener, args: ['keydown.escape',] }, { type: HostListener, args: ['blur', ['$event'],] }],
439
- _onSpace: [{ type: HostListener, args: ['keydown.space', ['$event'],] }],
440
- _onEnter: [{ type: HostListener, args: ['keydown.enter', ['$event'],] }],
441
- _onArrowKeys: [{ type: HostListener, args: ['keydown.arrowup', ['$event'],] }, { type: HostListener, args: ['keydown.arrowdown', ['$event'],] }, { type: HostListener, args: ['keydown.arrowleft', ['$event'],] }, { type: HostListener, args: ['keydown.arrowright', ['$event'],] }],
442
- _onHomeEndKeys: [{ type: HostListener, args: ['keydown.home', ['$event'],] }, { type: HostListener, args: ['keydown.end', ['$event'],] }]
443
- };
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBY3BFLE1BQU0sT0FBTyxpQkFBaUI7SUFpSjVCLFlBQ1UsUUFBbUIsRUFDbkIsVUFBbUMsRUFDbkMsaUJBQW9DLEVBQ3BDLHNCQUE4QztRQUg5QyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQXlC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QyxTQUFTLFNBQUMsZ0JBQWdCOzRCQUUxQixTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dDQUU3RCxZQUFZLFNBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQ0FFaEQsZUFBZSxTQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7cUJBa1FuRCxZQUFZLFNBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDOzJCQVF0QyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO3VCQVFwQyxZQUFZLFNBQUMsT0FBTztzQkFZcEIsWUFBWSxTQUFDLGVBQWUsY0FDNUIsWUFBWSxTQUFDLGdCQUFnQixjQUM3QixZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO3VCQVcvQixZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO3VCQVN4QyxZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDOzJCQU94QyxZQUFZLFNBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDMUMsWUFBWSxTQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQzVDLFlBQVksU0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUM1QyxZQUFZLFNBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7NkJBYzdDLFlBQVksU0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDdkMsWUFBWSxTQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuLi9jYXJkL2NhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9pdGVtL2l0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RJdGVtVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9saXN0L2xpc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEhvcml6b250YWxEaXJlY3Rpb24sIFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50JztcblxuaW1wb3J0IHsgT3BlblN0YXRlLCBWZXJ0aWNhbERpcmVjdGlvbiB9IGZyb20gJy4vZHJvcGRvd24udHlwZXMnO1xuaW1wb3J0IHsgS2V5Ym9hcmRIYW5kbGVyU2VydmljZSB9IGZyb20gJy4va2V5Ym9hcmQtaGFuZGxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyb3Bkb3duQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyByZWFkb25seSBPUEVOX0RFTEFZX0lOX01TID0gMTAwO1xuICBwcml2YXRlIHN0YXRlID0gT3BlblN0YXRlLmNsb3NlZDtcbiAgcHJpdmF0ZSBoYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zID0gZmFsc2U7XG4gIHByaXZhdGUgaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxEaXJlY3Rpb24ucmlnaHQ7XG4gIHByaXZhdGUgdmVydGljYWxEaXJlY3Rpb24gPSBWZXJ0aWNhbERpcmVjdGlvbi5kb3duO1xuXG4gIHByaXZhdGUgX2l0ZW1zOiBzdHJpbmdbXSB8IGFueVtdID0gW107XG4gIGdldCBpdGVtcygpOiBzdHJpbmdbXSB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPSB2YWx1ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0gfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBpdGVtVGV4dFByb3BlcnR5ID0gJ3RleHQnO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyID0gJ1BsZWFzZSBzZWxlY3Q6JztcblxuICBASW5wdXQoKSBzZXQgcG9wb3V0KGRpcmVjdGlvbjogSG9yaXpvbnRhbERpcmVjdGlvbikge1xuICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICB9XG5cbiAgZ2V0IHBvcG91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uO1xuICB9XG5cbiAgQElucHV0KClcbiAgYXR0ZW50aW9uTGV2ZWw6ICcxJyB8ICcyJyB8ICczJyB8ICc0JyA9ICczJztcbiAgcmVhZG9ubHkgYXR0ZW50aW9uTGV2ZWxPcGVuID0gJzInO1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZD86ICdibG9jayc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2lzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3InKVxuICBASW5wdXQoKVxuICBoYXNFcnJvcjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyA9ICdtZCc7XG5cbiAgQElucHV0KClcbiAgdGFiaW5kZXggPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2l0aC1wb3BvdmVyJylcbiAgQElucHV0KClcbiAgdXNlUG9wb3ZlciA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIGdldCBfdGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiaW5kZXg7XG4gIH1cblxuICAvLyBQcmV2ZW50IElvbmljIGJsdXIgb24gc2Nyb2xsXG4gIEBIb3N0QmluZGluZygnYXR0ci5uby1ibHVyJylcbiAgZ2V0IF9ub0JsdXJPblNjcm9sbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCAodGFwIG9uIG1vYmlsZSwgY2xpY2sva2V5cHJlc3Mgb24gd2ViKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRleHRGcm9tSXRlbSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kJylcbiAgZ2V0IF9pc0Jsb2NrTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kID09PSAnYmxvY2snO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBfcm9sZSA9ICdsaXN0Ym94JztcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW5pbmcnKVxuICBnZXQgX2lzT3BlbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gT3BlblN0YXRlLm9wZW5pbmc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW4nKVxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBPcGVuU3RhdGUub3BlbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3V0LWxlZnQnKVxuICBnZXQgX3BvcG91dExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb3BvdXQtdXAnKVxuICBnZXQgX3BvcG91dFVwKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID09PSBWZXJ0aWNhbERpcmVjdGlvbi51cDtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZHJlbihMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc2xvdHRlZEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKENhcmRDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjYXJkRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgcG9wb3Zlcj86IFBvcG92ZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQnV0dG9uQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBidXR0b25FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAga2lyYnlJdGVtc0RlZmF1bHQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG4gIEBDb250ZW50Q2hpbGRyZW4oSXRlbUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGtpcmJ5SXRlbXNTbG90dGVkOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gIHByaXZhdGUgaXRlbUNsaWNrVW5saXN0ZW46ICgoKSA9PiB2b2lkKVtdID0gW107XG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWY6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIHNob3dEcm9wZG93blRpbWVvdXRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXJTZXJ2aWNlOiBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlXG4gICkge31cblxuICBvblRvZ2dsZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlKCk7XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIG9uQnV0dG9uTW91c2VFdmVudChldmVudDogRXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IGJ1dHRvbiBmb2N1cztcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmICghdGhpcy5oYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkLmZvckVhY2goKGtpcmJ5SXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoa2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ29wdGlvbicpO1xuICAgICAgICBjb25zdCB1bmxpc3RlbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3QoaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tVbmxpc3Rlbi5wdXNoKHVubGlzdGVuKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5oYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKiBVdGlsaXR5IHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNldCBzdHlsZXMgb24gY2FyZCBlbGVtZW50IFxuICB3aGVuIHVzaW5nIHBvcG92ZXIqL1xuICBwcml2YXRlIHNldFBvcG92ZXJDYXJkU3R5bGUoc3R5bGU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgc3R5bGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2VcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnVzZVBvcG92ZXIgJiYgdGhpcy5leHBhbmQgPT09ICdibG9jaycpIHtcbiAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCctLWtpcmJ5LWNhcmQtd2lkdGgnLCBgJHt3aWR0aH1weGApO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtYXgtd2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtaW4td2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVBbGlnbm1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFsaWdubWVudCgpIHtcbiAgICBpZiAodGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgYXBwbHkgYWxpZ25tZW50IHdoZW4gb3BlbmluZzpcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHRpbWVyIHRvIHNob3cgZHJvcGRvd246XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LndpZHRoID4gMDtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSAmJiBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDEpIHtcbiAgICAgICAgICB0aGlzLnNldEhvcml6b250YWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICAgIHRoaXMuc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZi5vYnNlcnZlKHRoaXMuY2FyZEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3Jpem9udGFsRGlyZWN0aW9uKGVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KSB7XG4gICAgLy8gSWYgcG9wb3V0IGRpcmVjdGlvbiBpcyBzZXQgdG8gcmlnaHQsIGFuZCB0aGUgZW50cnkgaXMgY3V0IG9mZiB0byB0aGUgcmlnaHQgYnkgJHtlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LnJpZ2h0fXB4XG4gICAgLy8gaXQgaXMgc2V0IHRvIHBvcG91dCBsZWZ0IGluc3RlYWQsIGFuZCB2aWNlIHZlcnNhIGZvciBwb3BvdXQgZGlyZWN0aW9uIGxlZnRcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0KSB7XG4gICAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gZW50cnkucm9vdEJvdW5kcy5yaWdodCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QubGVmdCA8IGVudHJ5LnJvb3RCb3VuZHMubGVmdCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpIHtcbiAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcCA8IDApIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIHRvcCBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC50b3B9cHhcbiAgICAgIC8vIG9wZW4gZG93bndhcmRzOlxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgfVxuICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tID4gZW50cnkucm9vdEJvdW5kcy5ib3R0b20pIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIGJvdHRvbSBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LmJvdHRvbX1weFxuICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0VG9wID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgY29uc3QgU1BBQ0lORyA9IDU7IC8vVE9ETzogR2V0IGZyb20gU0NTU1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNhcmQgY2FuIGZpdCBvbiB0b3Agb2YgYnV0dG9uOlxuICAgICAgaWYgKGNvbnRhaW5lck9mZnNldFRvcCA+IGVudHJ5LnRhcmdldC5jbGllbnRIZWlnaHQgKyBTUEFDSU5HKSB7XG4gICAgICAgIC8vIG9wZW4gdXB3YXJkczpcbiAgICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLnVwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5vcGVuaW5nO1xuICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBkcm9wZG93biBpcyBvcGVuZWQgaW4gY2FzZSB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayBpc24ndCBpbnZva2VkXG4gICAgICB0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHRoaXMuc2hvd0Ryb3Bkb3duKCksXG4gICAgICAgIERyb3Bkb3duQ29tcG9uZW50Lk9QRU5fREVMQVlfSU5fTVNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RHJvcGRvd24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLm9wZW47XG4gICAgICB0aGlzLnBvcG92ZXI/LnNob3coKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5jbG9zZWQ7XG4gICAgICAvLyBSZXNldCB2ZXJ0aWNhbCBkaXJlY3Rpb24gdG8gZGVmYXVsdFxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgICB0aGlzLnBvcG92ZXI/LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkl0ZW1TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QncyB2YWx1ZS4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqIHJlcXVpcmVkIHRvIGludGVncmF0ZSB3aXRoIEFuZ3VsYXIncyBjb3JlIGZvcm1zIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdEl0ZW1CeVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0J3MgdmFsdWVcbiAgICogY2hhbmdlcyBmcm9tIHVzZXIgaW5wdXQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHNlbGVjdCBpcyBibHVycmVkXG4gICAqIGJ5IHRoZSB1c2VyLiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgcmVxdWlyZWRcbiAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBzZWxlY3QuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSByZXF1aXJlZFxuICAgKiB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFNldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT0gdGhpcy5zZWxlY3RlZEluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RJdGVtQnlWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHZhbHVlKTtcbiAgfVxuXG4gIGdldFRleHRGcm9tSXRlbShpdGVtOiBzdHJpbmcgfCBhbnkpIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW1bdGhpcy5pdGVtVGV4dFByb3BlcnR5XTtcbiAgfVxuXG4gIHNjcm9sbEl0ZW1JbnRvVmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qga2lyYnlJdGVtcyA9XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoXG4gICAgICAgID8gdGhpcy5raXJieUl0ZW1zU2xvdHRlZFxuICAgICAgICA6IHRoaXMua2lyYnlJdGVtc0RlZmF1bHQ7XG4gICAgaWYgKGtpcmJ5SXRlbXMgJiYga2lyYnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkS2lyYnlJdGVtID0ga2lyYnlJdGVtcy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgaWYgKHNlbGVjdGVkS2lyYnlJdGVtICYmIHNlbGVjdGVkS2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBzZWxlY3RlZEtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1Ub3AgPSBpdGVtRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGl0ZW1Cb3R0b20gPSBpdGVtRWxlbWVudC5vZmZzZXRUb3AgKyBpdGVtRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclZpc2libGVUb3AgPSBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBjb250YWluZXJWaXNpYmxlQm90dG9tID0gc2Nyb2xsQ29udGFpbmVyLmNsaWVudEhlaWdodCArIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGlmIChpdGVtVG9wIDwgY29udGFpbmVyVmlzaWJsZVRvcCkge1xuICAgICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBpdGVtVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1Cb3R0b20gPiBjb250YWluZXJWaXNpYmxlQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IGl0ZW1Cb3R0b20gLSBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi50YWInLCBbJyRldmVudCddKVxuICBfb25UYWIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIF9vbkZvY3VzKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9XG5cbiAgX29uUG9wb3ZlcldpbGxIaWRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSBPcGVuU3RhdGUuY2xvc2VkO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnKVxuICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcbiAgX29uQmx1cihldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgaWYgKCF0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNwYWNlJywgWyckZXZlbnQnXSlcbiAgX29uU3BhY2UoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBfb25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICBfb25BcnJvd0tleXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIC8vIE1pcnJvciBkZWZhdWx0IEhUTUw1IHNlbGVjdCBiZWhhdmlvdXIgLSBwcmV2ZW50IGxlZnQvcmlnaHQgYXJyb3dzIHdoZW4gb3BlbjpcbiAgICBpZiAodGhpcy5pc09wZW4gJiYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5rZXlib2FyZEhhbmRsZXJTZXJ2aWNlLmhhbmRsZShldmVudCwgdGhpcy5pdGVtcywgdGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICBpZiAobmV3SW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKG5ld0luZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBfb25Ib21lRW5kS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKGV2ZW50LCB0aGlzLml0ZW1zLCB0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgIGlmIChuZXdJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0obmV3SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBsZXQgdW5saXN0ZW46ICgpID0+IHZvaWQ7XG4gICAgd2hpbGUgKCh1bmxpc3RlbiA9IHRoaXMuaXRlbUNsaWNrVW5saXN0ZW4ucG9wKCkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmKSB7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
392
+ /** @nocollapse */ DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.KeyboardHandlerService }], target: i0.ɵɵFactoryTarget.Component });
393
+ /** @nocollapse */ DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DropdownComponent, selector: "kirby-dropdown", inputs: { items: "items", selectedIndex: "selectedIndex", itemTextProperty: "itemTextProperty", placeholder: "placeholder", popout: "popout", attentionLevel: "attentionLevel", expand: "expand", disabled: "disabled", hasError: "hasError", size: "size", tabindex: "tabindex", usePopover: "usePopover" }, outputs: { change: "change" }, host: { listeners: { "keydown.tab": "_onTab($event)", "mousedown": "_onMouseDown($event)", "focus": "_onFocus()", "keydown.enter": "_onEnter($event)", "keydown.escape": "_onBlur()", "blur": "_onBlur($event)", "keydown.space": "_onSpace($event)", "keydown.arrowup": "_onArrowKeys($event)", "keydown.arrowdown": "_onArrowKeys($event)", "keydown.arrowleft": "_onArrowKeys($event)", "keydown.arrowright": "_onArrowKeys($event)", "keydown.home": "_onHomeEndKeys($event)", "keydown.end": "_onHomeEndKeys($event)" }, properties: { "attr.disabled": "this._isDisabled", "class.error": "this.hasError", "class.with-popover": "this.usePopover", "attr.tabindex": "this._tabindex", "attr.no-blur": "this._noBlurOnScroll", "class.expand": "this._isBlockLevel", "attr.role": "this._role", "class.is-opening": "this._isOpening", "class.is-open": "this.isOpen", "class.popout-left": "this._popoutLeft", "class.popout-up": "this._popoutUp" } }, providers: [
394
+ {
395
+ provide: NG_VALUE_ACCESSOR,
396
+ useExisting: forwardRef((() => DropdownComponent)),
397
+ multi: true,
398
+ },
399
+ ], queries: [{ propertyName: "itemTemplate", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "slottedItems", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: "kirbyItemsSlotted", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "cardElement", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "buttonElement", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "kirbyItemsDefault", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<button\n kirby-button\n [size]=\"size\"\n [attentionLevel]=\"isOpen ? attentionLevelOpen : attentionLevel\"\n tabindex=\"-1\"\n (click)=\"onToggle($event)\"\n (mousedown)=\"onButtonMouseEvent($event)\"\n [disabled]=\"disabled\"\n type=\"button\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover [target]=\"buttonElement\" [popout]=\"popout\" (willHide)=\"_onPopoverWillHide()\">\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card>\n <ng-container *ngFor=\"let item of items; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: { $implicit: item, selected: i === selectedIndex, index: i }\n \"\n ></ng-container>\n </ng-container>\n </kirby-card>\n</ng-template>\n\n<ng-template #defaultItemTemplate let-item let-selected=\"selected\" let-index=\"index\">\n <kirby-item [selectable]=\"true\" [selected]=\"selected\" (click)=\"onItemSelect(index)\" role=\"option\">\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <h3 tabindex=\"0\">{{ getTextFromItem(item) }}</h3>\n <kirby-icon *ngIf=\"selected\" name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n </kirby-item>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative;max-width:calc(100vw - 32px);outline:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}@media (hover: hover){:host:focus>button,:host:focus>button.attention-level3{border-color:#4d90fe}}:host.error>button,:host.ng-touched.ng-invalid>button{border-color:var(--kirby-danger)}:host>button{position:relative;margin:0;outline:none;width:100%;transition:box-shadow .2s,border-color .2s}:host>button.attention-level2{border:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-top:4px;margin-bottom:4px;overflow-y:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;min-width:288px;max-width:calc(100vw - 32px)}@media (min-width: 321px){kirby-card{min-width:343px}}:host(:not(.with-popover)) kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host(:not(.with-popover)).is-opening kirby-card{display:block}:host(:not(.with-popover)).is-open kirby-card{display:block;opacity:1}:host(:not(.with-popover)).popout-left kirby-card{right:0}:host(:not(.with-popover)).popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host(:not(.with-popover)).popout-up.is-open>button{z-index:801}:host(.is-open)>button{box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"], components: [{ type: i2.ButtonComponent, selector: "button[kirby-button],Button[kirby-button]", inputs: ["attentionLevel", "isDestructive", "themeColor", "expand", "isFloating", "size"] }, { type: i3.IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }, { type: i4.PopoverComponent, selector: "kirby-popover", inputs: ["popout", "target"], outputs: ["willHide"] }, { type: i5.CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "mode"] }, { type: i6.ItemComponent, selector: "kirby-item", inputs: ["disabled", "selected", "selectable", "reorderable", "size"] }], directives: [{ type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
400
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropdownComponent, decorators: [{
401
+ type: Component,
402
+ args: [{
403
+ selector: 'kirby-dropdown',
404
+ templateUrl: './dropdown.component.html',
405
+ styleUrls: ['./dropdown.component.scss'],
406
+ providers: [
407
+ {
408
+ provide: NG_VALUE_ACCESSOR,
409
+ useExisting: forwardRef((() => DropdownComponent)),
410
+ multi: true,
411
+ },
412
+ ],
413
+ }]
414
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.KeyboardHandlerService }]; }, propDecorators: { items: [{
415
+ type: Input
416
+ }], selectedIndex: [{
417
+ type: Input
418
+ }], itemTextProperty: [{
419
+ type: Input
420
+ }], placeholder: [{
421
+ type: Input
422
+ }], popout: [{
423
+ type: Input
424
+ }], attentionLevel: [{
425
+ type: Input
426
+ }], expand: [{
427
+ type: Input
428
+ }], disabled: [{
429
+ type: Input
430
+ }], _isDisabled: [{
431
+ type: HostBinding,
432
+ args: ['attr.disabled']
433
+ }], hasError: [{
434
+ type: HostBinding,
435
+ args: ['class.error']
436
+ }, {
437
+ type: Input
438
+ }], size: [{
439
+ type: Input
440
+ }], tabindex: [{
441
+ type: Input
442
+ }], usePopover: [{
443
+ type: HostBinding,
444
+ args: ['class.with-popover']
445
+ }, {
446
+ type: Input
447
+ }], _tabindex: [{
448
+ type: HostBinding,
449
+ args: ['attr.tabindex']
450
+ }], _noBlurOnScroll: [{
451
+ type: HostBinding,
452
+ args: ['attr.no-blur']
453
+ }], change: [{
454
+ type: Output
455
+ }], _isBlockLevel: [{
456
+ type: HostBinding,
457
+ args: ['class.expand']
458
+ }], _role: [{
459
+ type: HostBinding,
460
+ args: ['attr.role']
461
+ }], _isOpening: [{
462
+ type: HostBinding,
463
+ args: ['class.is-opening']
464
+ }], isOpen: [{
465
+ type: HostBinding,
466
+ args: ['class.is-open']
467
+ }], _popoutLeft: [{
468
+ type: HostBinding,
469
+ args: ['class.popout-left']
470
+ }], _popoutUp: [{
471
+ type: HostBinding,
472
+ args: ['class.popout-up']
473
+ }], itemTemplate: [{
474
+ type: ContentChild,
475
+ args: [ListItemTemplateDirective, { static: true, read: TemplateRef }]
476
+ }], slottedItems: [{
477
+ type: ContentChildren,
478
+ args: [ListItemTemplateDirective, { read: ElementRef }]
479
+ }], cardElement: [{
480
+ type: ViewChild,
481
+ args: [CardComponent, { read: ElementRef }]
482
+ }], popover: [{
483
+ type: ViewChild,
484
+ args: [PopoverComponent]
485
+ }], buttonElement: [{
486
+ type: ViewChild,
487
+ args: [ButtonComponent, { static: true, read: ElementRef }]
488
+ }], kirbyItemsDefault: [{
489
+ type: ViewChildren,
490
+ args: [ItemComponent, { read: ElementRef }]
491
+ }], kirbyItemsSlotted: [{
492
+ type: ContentChildren,
493
+ args: [ItemComponent, { read: ElementRef }]
494
+ }], _onTab: [{
495
+ type: HostListener,
496
+ args: ['keydown.tab', ['$event']]
497
+ }], _onMouseDown: [{
498
+ type: HostListener,
499
+ args: ['mousedown', ['$event']]
500
+ }], _onFocus: [{
501
+ type: HostListener,
502
+ args: ['focus']
503
+ }], _onBlur: [{
504
+ type: HostListener,
505
+ args: ['keydown.enter']
506
+ }, {
507
+ type: HostListener,
508
+ args: ['keydown.escape']
509
+ }, {
510
+ type: HostListener,
511
+ args: ['blur', ['$event']]
512
+ }], _onSpace: [{
513
+ type: HostListener,
514
+ args: ['keydown.space', ['$event']]
515
+ }], _onEnter: [{
516
+ type: HostListener,
517
+ args: ['keydown.enter', ['$event']]
518
+ }], _onArrowKeys: [{
519
+ type: HostListener,
520
+ args: ['keydown.arrowup', ['$event']]
521
+ }, {
522
+ type: HostListener,
523
+ args: ['keydown.arrowdown', ['$event']]
524
+ }, {
525
+ type: HostListener,
526
+ args: ['keydown.arrowleft', ['$event']]
527
+ }, {
528
+ type: HostListener,
529
+ args: ['keydown.arrowright', ['$event']]
530
+ }], _onHomeEndKeys: [{
531
+ type: HostListener,
532
+ args: ['keydown.home', ['$event']]
533
+ }, {
534
+ type: HostListener,
535
+ args: ['keydown.end', ['$event']]
536
+ }] } });
537
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7QUFjcEUsTUFBTSxPQUFPLGlCQUFpQjtJQW1KNUIs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QUFFLFVBQVUsRUFBRTtnQkFHakQsaUJBQWlCO3NCQURoQixlQUFlO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBbVFwRCxNQUFNO3NCQURMLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVN2QyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVNyQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsT0FBTztnQkFlckIsT0FBTztzQkFITixZQUFZO3VCQUFDLGVBQWU7O3NCQUM1QixZQUFZO3VCQUFDLGdCQUFnQjs7c0JBQzdCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVloQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVV6QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVd6QyxZQUFZO3NCQUpYLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMxQyxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDNUMsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQzVDLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0I5QyxjQUFjO3NCQUZiLFlBQVk7dUJBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDdkMsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FyZC9jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vaXRlbS9pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vbGlzdC9saXN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIb3Jpem9udGFsRGlyZWN0aW9uLCBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE9wZW5TdGF0ZSwgVmVydGljYWxEaXJlY3Rpb24gfSBmcm9tICcuL2Ryb3Bkb3duLnR5cGVzJztcbmltcG9ydCB7IEtleWJvYXJkSGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2tleWJvYXJkLWhhbmRsZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEcm9wZG93bkNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgc3RhdGljIHJlYWRvbmx5IE9QRU5fREVMQVlfSU5fTVMgPSAxMDA7XG4gIHByaXZhdGUgc3RhdGUgPSBPcGVuU3RhdGUuY2xvc2VkO1xuICBwcml2YXRlIGhhc0NvbmZpZ3VyZWRTbG90dGVkSXRlbXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBob3Jpem9udGFsRGlyZWN0aW9uOiBIb3Jpem9udGFsRGlyZWN0aW9uIHwgYCR7SG9yaXpvbnRhbERpcmVjdGlvbn1gID1cbiAgICBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICBwcml2YXRlIHZlcnRpY2FsRGlyZWN0aW9uOiBWZXJ0aWNhbERpcmVjdGlvbiB8IGAke1ZlcnRpY2FsRGlyZWN0aW9ufWAgPSBWZXJ0aWNhbERpcmVjdGlvbi5kb3duO1xuXG4gIHByaXZhdGUgX2l0ZW1zOiBzdHJpbmdbXSB8IGFueVtdID0gW107XG4gIGdldCBpdGVtcygpOiBzdHJpbmdbXSB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IHN0cmluZ1tdIHwgYW55W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgPSAtMTtcbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPSB2YWx1ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0gfHwgbnVsbDtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBpdGVtVGV4dFByb3BlcnR5ID0gJ3RleHQnO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyID0gJ1BsZWFzZSBzZWxlY3Q6JztcblxuICBASW5wdXQoKSBzZXQgcG9wb3V0KGRpcmVjdGlvbjogSG9yaXpvbnRhbERpcmVjdGlvbiB8IGAke0hvcml6b250YWxEaXJlY3Rpb259YCkge1xuICAgIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICB9XG5cbiAgZ2V0IHBvcG91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uO1xuICB9XG5cbiAgQElucHV0KClcbiAgYXR0ZW50aW9uTGV2ZWw6ICcxJyB8ICcyJyB8ICczJyB8ICc0JyA9ICczJztcbiAgcmVhZG9ubHkgYXR0ZW50aW9uTGV2ZWxPcGVuID0gJzInO1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZD86ICdibG9jayc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICBnZXQgX2lzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXJyb3InKVxuICBASW5wdXQoKVxuICBoYXNFcnJvcjogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBzaXplOiAnc20nIHwgJ21kJyA9ICdtZCc7XG5cbiAgQElucHV0KClcbiAgdGFiaW5kZXggPSAwO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2l0aC1wb3BvdmVyJylcbiAgQElucHV0KClcbiAgdXNlUG9wb3ZlciA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIGdldCBfdGFiaW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiaW5kZXg7XG4gIH1cblxuICAvLyBQcmV2ZW50IElvbmljIGJsdXIgb24gc2Nyb2xsXG4gIEBIb3N0QmluZGluZygnYXR0ci5uby1ibHVyJylcbiAgZ2V0IF9ub0JsdXJPblNjcm9sbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCAodGFwIG9uIG1vYmlsZSwgY2xpY2sva2V5cHJlc3Mgb24gd2ViKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IGFueT4oKTtcblxuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nIHwgYW55ID0gbnVsbDtcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFRleHRGcm9tSXRlbSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kJylcbiAgZ2V0IF9pc0Jsb2NrTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kID09PSAnYmxvY2snO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBfcm9sZSA9ICdsaXN0Ym94JztcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW5pbmcnKVxuICBnZXQgX2lzT3BlbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gT3BlblN0YXRlLm9wZW5pbmc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLW9wZW4nKVxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBPcGVuU3RhdGUub3BlbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MucG9wb3V0LWxlZnQnKVxuICBnZXQgX3BvcG91dExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9yaXpvbnRhbERpcmVjdGlvbiA9PT0gSG9yaXpvbnRhbERpcmVjdGlvbi5sZWZ0O1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb3BvdXQtdXAnKVxuICBnZXQgX3BvcG91dFVwKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnRpY2FsRGlyZWN0aW9uID09PSBWZXJ0aWNhbERpcmVjdGlvbi51cDtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoTGlzdEl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZHJlbihMaXN0SXRlbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc2xvdHRlZEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuICBAVmlld0NoaWxkKENhcmRDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjYXJkRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgcG9wb3Zlcj86IFBvcG92ZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoQnV0dG9uQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBidXR0b25FbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAga2lyYnlJdGVtc0RlZmF1bHQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG4gIEBDb250ZW50Q2hpbGRyZW4oSXRlbUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGtpcmJ5SXRlbXNTbG90dGVkOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG4gIHByaXZhdGUgaXRlbUNsaWNrVW5saXN0ZW46ICgoKSA9PiB2b2lkKVtdID0gW107XG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWY6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIHNob3dEcm9wZG93blRpbWVvdXRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXJTZXJ2aWNlOiBLZXlib2FyZEhhbmRsZXJTZXJ2aWNlXG4gICkge31cblxuICBvblRvZ2dsZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlKCk7XG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIG9uQnV0dG9uTW91c2VFdmVudChldmVudDogRXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IGJ1dHRvbiBmb2N1cztcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmICghdGhpcy5oYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkLmZvckVhY2goKGtpcmJ5SXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoa2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ29wdGlvbicpO1xuICAgICAgICBjb25zdCB1bmxpc3RlbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3QoaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tVbmxpc3Rlbi5wdXNoKHVubGlzdGVuKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5oYXNDb25maWd1cmVkU2xvdHRlZEl0ZW1zID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKiBVdGlsaXR5IHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIHNldCBzdHlsZXMgb24gY2FyZCBlbGVtZW50IFxuICB3aGVuIHVzaW5nIHBvcG92ZXIqL1xuICBwcml2YXRlIHNldFBvcG92ZXJDYXJkU3R5bGUoc3R5bGU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgc3R5bGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2VcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLnVzZVBvcG92ZXIgJiYgdGhpcy5leHBhbmQgPT09ICdibG9jaycpIHtcbiAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCctLWtpcmJ5LWNhcmQtd2lkdGgnLCBgJHt3aWR0aH1weGApO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtYXgtd2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgICAgdGhpcy5zZXRQb3BvdmVyQ2FyZFN0eWxlKCdtaW4td2lkdGgnLCAnaW5pdGlhbCcpO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVBbGlnbm1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFsaWdubWVudCgpIHtcbiAgICBpZiAodGhpcy51c2VQb3BvdmVyKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgYXBwbHkgYWxpZ25tZW50IHdoZW4gb3BlbmluZzpcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHRpbWVyIHRvIHNob3cgZHJvcGRvd246XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllc1swXTtcbiAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LndpZHRoID4gMDtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSAmJiBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDEpIHtcbiAgICAgICAgICB0aGlzLnNldEhvcml6b250YWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICAgIHRoaXMuc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZWYgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlclJlZi5vYnNlcnZlKHRoaXMuY2FyZEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3Jpem9udGFsRGlyZWN0aW9uKGVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KSB7XG4gICAgLy8gSWYgcG9wb3V0IGRpcmVjdGlvbiBpcyBzZXQgdG8gcmlnaHQsIGFuZCB0aGUgZW50cnkgaXMgY3V0IG9mZiB0byB0aGUgcmlnaHQgYnkgJHtlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LnJpZ2h0fXB4XG4gICAgLy8gaXQgaXMgc2V0IHRvIHBvcG91dCBsZWZ0IGluc3RlYWQsIGFuZCB2aWNlIHZlcnNhIGZvciBwb3BvdXQgZGlyZWN0aW9uIGxlZnRcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyZWN0aW9uID09PSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0KSB7XG4gICAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gZW50cnkucm9vdEJvdW5kcy5yaWdodCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLmxlZnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QubGVmdCA8IGVudHJ5LnJvb3RCb3VuZHMubGVmdCkge1xuICAgICAgICB0aGlzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsRGlyZWN0aW9uLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmVydGljYWxEaXJlY3Rpb24oZW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpIHtcbiAgICBpZiAoZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LnRvcCA8IDApIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIHRvcCBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC50b3B9cHhcbiAgICAgIC8vIG9wZW4gZG93bndhcmRzOlxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgfVxuICAgIGlmIChlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tID4gZW50cnkucm9vdEJvdW5kcy5ib3R0b20pIHtcbiAgICAgIC8vIGVudHJ5IGlzIGN1dCBvZmYgYXQgdGhlIGJvdHRvbSBieSAke2VudHJ5LmJvdW5kaW5nQ2xpZW50UmVjdC5ib3R0b20gLSBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LmJvdHRvbX1weFxuICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0VG9wID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgY29uc3QgU1BBQ0lORyA9IDU7IC8vVE9ETzogR2V0IGZyb20gU0NTU1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNhcmQgY2FuIGZpdCBvbiB0b3Agb2YgYnV0dG9uOlxuICAgICAgaWYgKGNvbnRhaW5lck9mZnNldFRvcCA+IGVudHJ5LnRhcmdldC5jbGllbnRIZWlnaHQgKyBTUEFDSU5HKSB7XG4gICAgICAgIC8vIG9wZW4gdXB3YXJkczpcbiAgICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLnVwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5vcGVuaW5nO1xuICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBkcm9wZG93biBpcyBvcGVuZWQgaW4gY2FzZSB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayBpc24ndCBpbnZva2VkXG4gICAgICB0aGlzLnNob3dEcm9wZG93blRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHRoaXMuc2hvd0Ryb3Bkb3duKCksXG4gICAgICAgIERyb3Bkb3duQ29tcG9uZW50Lk9QRU5fREVMQVlfSU5fTVNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RHJvcGRvd24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IE9wZW5TdGF0ZS5vcGVuaW5nKSB7XG4gICAgICB0aGlzLnN0YXRlID0gT3BlblN0YXRlLm9wZW47XG4gICAgICB0aGlzLnBvcG92ZXI/LnNob3coKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KHRoaXMuc2VsZWN0ZWRJbmRleCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5zdGF0ZSA9IE9wZW5TdGF0ZS5jbG9zZWQ7XG4gICAgICAvLyBSZXNldCB2ZXJ0aWNhbCBkaXJlY3Rpb24gdG8gZGVmYXVsdFxuICAgICAgdGhpcy52ZXJ0aWNhbERpcmVjdGlvbiA9IFZlcnRpY2FsRGlyZWN0aW9uLmRvd247XG4gICAgICB0aGlzLnBvcG92ZXI/LmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkl0ZW1TZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QncyB2YWx1ZS4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gICAqIHJlcXVpcmVkIHRvIGludGVncmF0ZSB3aXRoIEFuZ3VsYXIncyBjb3JlIGZvcm1zIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdEl0ZW1CeVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0J3MgdmFsdWVcbiAgICogY2hhbmdlcyBmcm9tIHVzZXIgaW5wdXQuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdoZW4gdGhlIHNlbGVjdCBpcyBibHVycmVkXG4gICAqIGJ5IHRoZSB1c2VyLiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgcmVxdWlyZWRcbiAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBzZWxlY3QuIFBhcnQgb2YgdGhlIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSByZXF1aXJlZFxuICAgKiB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFNldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggIT0gdGhpcy5zZWxlY3RlZEluZGV4KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuc2Nyb2xsSXRlbUludG9WaWV3KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RJdGVtQnlWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHZhbHVlKTtcbiAgfVxuXG4gIGdldFRleHRGcm9tSXRlbShpdGVtOiBzdHJpbmcgfCBhbnkpIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW1bdGhpcy5pdGVtVGV4dFByb3BlcnR5XTtcbiAgfVxuXG4gIHNjcm9sbEl0ZW1JbnRvVmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qga2lyYnlJdGVtcyA9XG4gICAgICB0aGlzLmtpcmJ5SXRlbXNTbG90dGVkICYmIHRoaXMua2lyYnlJdGVtc1Nsb3R0ZWQubGVuZ3RoXG4gICAgICAgID8gdGhpcy5raXJieUl0ZW1zU2xvdHRlZFxuICAgICAgICA6IHRoaXMua2lyYnlJdGVtc0RlZmF1bHQ7XG4gICAgaWYgKGtpcmJ5SXRlbXMgJiYga2lyYnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkS2lyYnlJdGVtID0ga2lyYnlJdGVtcy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgaWYgKHNlbGVjdGVkS2lyYnlJdGVtICYmIHNlbGVjdGVkS2lyYnlJdGVtLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBzZWxlY3RlZEtpcmJ5SXRlbS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1Ub3AgPSBpdGVtRWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGl0ZW1Cb3R0b20gPSBpdGVtRWxlbWVudC5vZmZzZXRUb3AgKyBpdGVtRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclZpc2libGVUb3AgPSBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBjb250YWluZXJWaXNpYmxlQm90dG9tID0gc2Nyb2xsQ29udGFpbmVyLmNsaWVudEhlaWdodCArIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGlmIChpdGVtVG9wIDwgY29udGFpbmVyVmlzaWJsZVRvcCkge1xuICAgICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBpdGVtVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1Cb3R0b20gPiBjb250YWluZXJWaXNpYmxlQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IGl0ZW1Cb3R0b20gLSBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi50YWInLCBbJyRldmVudCddKVxuICBfb25UYWIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gIF9vbkZvY3VzKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICB9XG5cbiAgX29uUG9wb3ZlcldpbGxIaWRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSBPcGVuU3RhdGUuY2xvc2VkO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJylcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnKVxuICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQnXSlcbiAgX29uQmx1cihldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgaWYgKCF0aGlzLmNhcmRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNwYWNlJywgWyckZXZlbnQnXSlcbiAgX29uU3BhY2UoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBfb25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dkb3duJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICBfb25BcnJvd0tleXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIC8vIE1pcnJvciBkZWZhdWx0IEhUTUw1IHNlbGVjdCBiZWhhdmlvdXIgLSBwcmV2ZW50IGxlZnQvcmlnaHQgYXJyb3dzIHdoZW4gb3BlbjpcbiAgICBpZiAodGhpcy5pc09wZW4gJiYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5rZXlib2FyZEhhbmRsZXJTZXJ2aWNlLmhhbmRsZShldmVudCwgdGhpcy5pdGVtcywgdGhpcy5zZWxlY3RlZEluZGV4KTtcbiAgICBpZiAobmV3SW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKG5ld0luZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5ob21lJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbmQnLCBbJyRldmVudCddKVxuICBfb25Ib21lRW5kS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmtleWJvYXJkSGFuZGxlclNlcnZpY2UuaGFuZGxlKGV2ZW50LCB0aGlzLml0ZW1zLCB0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgIGlmIChuZXdJbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0obmV3SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBsZXQgdW5saXN0ZW46ICgpID0+IHZvaWQ7XG4gICAgd2hpbGUgKCh1bmxpc3RlbiA9IHRoaXMuaXRlbUNsaWNrVW5saXN0ZW4ucG9wKCkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmKSB7XG4gICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyUmVmLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxidXR0b25cbiAga2lyYnktYnV0dG9uXG4gIFtzaXplXT1cInNpemVcIlxuICBbYXR0ZW50aW9uTGV2ZWxdPVwiaXNPcGVuID8gYXR0ZW50aW9uTGV2ZWxPcGVuIDogYXR0ZW50aW9uTGV2ZWxcIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgKGNsaWNrKT1cIm9uVG9nZ2xlKCRldmVudClcIlxuICAobW91c2Vkb3duKT1cIm9uQnV0dG9uTW91c2VFdmVudCgkZXZlbnQpXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4+XG4gIDxzcGFuIGNsYXNzPVwidGV4dFwiPnt7IHNlbGVjdGVkVGV4dCB8fCBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgPGtpcmJ5LWljb24gW25hbWVdPVwiaXNPcGVuID8gJ2Fycm93LXVwJyA6ICdhcnJvdy1kb3duJ1wiPjwva2lyYnktaWNvbj5cbjwvYnV0dG9uPlxuXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlUG9wb3ZlciA/IHBvcG92ZXJUZW1wbGF0ZSA6IGl0ZW1XcmFwcGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNwb3BvdmVyVGVtcGxhdGU+XG4gIDxraXJieS1wb3BvdmVyIFt0YXJnZXRdPVwiYnV0dG9uRWxlbWVudFwiIFtwb3BvdXRdPVwicG9wb3V0XCIgKHdpbGxIaWRlKT1cIl9vblBvcG92ZXJXaWxsSGlkZSgpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1XcmFwcGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9raXJieS1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtV3JhcHBlclRlbXBsYXRlPlxuICA8a2lyYnktY2FyZD5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgaXRlbVRlbXBsYXRlIHx8IGRlZmF1bHRJdGVtVGVtcGxhdGU7XG4gICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIHNlbGVjdGVkOiBpID09PSBzZWxlY3RlZEluZGV4LCBpbmRleDogaSB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwva2lyYnktY2FyZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEl0ZW1UZW1wbGF0ZSBsZXQtaXRlbSBsZXQtc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gIDxraXJieS1pdGVtIFtzZWxlY3RhYmxlXT1cInRydWVcIiBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIiAoY2xpY2spPVwib25JdGVtU2VsZWN0KGluZGV4KVwiIHJvbGU9XCJvcHRpb25cIj5cbiAgICA8IS0tIFRhYmluZGV4IGZpeGVzIGlzc3VlIHdpdGggcG9wb3ZlciBkcm9wZG93biBub3Qgd29ya2luZyBpbiBzYWZhcmkgLS0+XG4gICAgPGgzIHRhYmluZGV4PVwiMFwiPnt7IGdldFRleHRGcm9tSXRlbShpdGVtKSB9fTwvaDM+XG4gICAgPGtpcmJ5LWljb24gKm5nSWY9XCJzZWxlY3RlZFwiIG5hbWU9XCJjaGVja21hcmstc2VsZWN0ZWRcIiBzbG90PVwiZW5kXCI+PC9raXJieS1pY29uPlxuICA8L2tpcmJ5LWl0ZW0+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -34,10 +34,12 @@ export class KeyboardHandlerService {
34
34
  return newIndex;
35
35
  }
36
36
  }
37
- /** @nocollapse */ KeyboardHandlerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function KeyboardHandlerService_Factory() { return new KeyboardHandlerService(); }, token: KeyboardHandlerService, providedIn: "root" });
38
- KeyboardHandlerService.decorators = [
39
- { type: Injectable, args: [{
40
- providedIn: 'root',
41
- },] }
42
- ];
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2tleWJvYXJkLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE1BQU0sQ0FBQyxLQUFvQixFQUFFLEtBQXVCLEVBQUUsYUFBcUI7UUFDekUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxXQUFXO2dCQUNkLHdCQUF3QjtnQkFDeEIsUUFBUSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO29CQUMvQixvQ0FBb0M7b0JBQ3BDLFFBQVEsR0FBRyxDQUFDLENBQUM7aUJBQ2Q7cUJBQU0sSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzNDLG9CQUFvQjtvQkFDcEIsUUFBUSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7aUJBQzlCO2dCQUNELE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QscUJBQXFCO2dCQUNyQixRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1Isb0JBQW9CO2dCQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7O1lBbENGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEtleWJvYXJkSGFuZGxlclNlcnZpY2Uge1xuICBoYW5kbGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGl0ZW1zOiBhbnlbXSB8IHN0cmluZ1tdLCBzZWxlY3RlZEluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgbmV3SW5kZXggPSAtMTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAvLyBTZWxlY3QgcHJldmlvdXMgaXRlbTpcbiAgICAgICAgbmV3SW5kZXggPSBzZWxlY3RlZEluZGV4IC0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOb25lIHNlbGVjdGVkLCBzZWxlY3QgZmlyc3QgaXRlbTpcbiAgICAgICAgICBuZXdJbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBTZWxlY3QgbmV4dCBpdGVtOlxuICAgICAgICAgIG5ld0luZGV4ID0gc2VsZWN0ZWRJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgLy8gU2VsZWN0IGZpcnN0IGl0ZW06XG4gICAgICAgIG5ld0luZGV4ID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICAvLyBTZWxlY3QgbGFzdCBpdGVtOlxuICAgICAgICBuZXdJbmRleCA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBuZXdJbmRleDtcbiAgfVxufVxuIl19
37
+ /** @nocollapse */ KeyboardHandlerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyboardHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
38
+ /** @nocollapse */ KeyboardHandlerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyboardHandlerService, providedIn: 'root' });
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyboardHandlerService, decorators: [{
40
+ type: Injectable,
41
+ args: [{
42
+ providedIn: 'root',
43
+ }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2tleWJvYXJkLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE1BQU0sQ0FBQyxLQUFvQixFQUFFLEtBQXVCLEVBQUUsYUFBcUI7UUFDekUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEIsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2pCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxXQUFXO2dCQUNkLHdCQUF3QjtnQkFDeEIsUUFBUSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO29CQUMvQixvQ0FBb0M7b0JBQ3BDLFFBQVEsR0FBRyxDQUFDLENBQUM7aUJBQ2Q7cUJBQU0sSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzNDLG9CQUFvQjtvQkFDcEIsUUFBUSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7aUJBQzlCO2dCQUNELE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QscUJBQXFCO2dCQUNyQixRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1Isb0JBQW9CO2dCQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzt1SUEvQlUsc0JBQXNCOzJJQUF0QixzQkFBc0IsY0FGckIsTUFBTTs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmRIYW5kbGVyU2VydmljZSB7XG4gIGhhbmRsZShldmVudDogS2V5Ym9hcmRFdmVudCwgaXRlbXM6IGFueVtdIHwgc3RyaW5nW10sIHNlbGVjdGVkSW5kZXg6IG51bWJlcikge1xuICAgIGxldCBuZXdJbmRleCA9IC0xO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIC8vIFNlbGVjdCBwcmV2aW91cyBpdGVtOlxuICAgICAgICBuZXdJbmRleCA9IHNlbGVjdGVkSW5kZXggLSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE5vbmUgc2VsZWN0ZWQsIHNlbGVjdCBmaXJzdCBpdGVtOlxuICAgICAgICAgIG5ld0luZGV4ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIC8vIFNlbGVjdCBuZXh0IGl0ZW06XG4gICAgICAgICAgbmV3SW5kZXggPSBzZWxlY3RlZEluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAvLyBTZWxlY3QgZmlyc3QgaXRlbTpcbiAgICAgICAgbmV3SW5kZXggPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIC8vIFNlbGVjdCBsYXN0IGl0ZW06XG4gICAgICAgIG5ld0luZGV4ID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG59XG4iXX0=
@@ -1,5 +1,8 @@
1
- import { Component, ContentChildren, Input, QueryList } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, Input, QueryList, } from '@angular/core';
2
2
  import { ButtonComponent } from '../button/button.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../icon/icon.component";
5
+ import * as i2 from "@angular/common";
3
6
  export class EmptyStateComponent {
4
7
  ngAfterContentInit() {
5
8
  this.enforceAttentionLevelRules();
@@ -23,18 +26,26 @@ export class EmptyStateComponent {
23
26
  });
24
27
  }
25
28
  }
26
- EmptyStateComponent.decorators = [
27
- { type: Component, args: [{
28
- selector: 'kirby-empty-state',
29
- template: "<article>\n <div *ngIf=\"iconName || customIconName\" class=\"icon-outline\">\n <kirby-icon [name]=\"iconName\" [customName]=\"customIconName\" size=\"lg\"></kirby-icon>\n </div>\n <h3 *ngIf=\"title\" class=\"title\">{{ title }}</h3>\n <p *ngIf=\"subtitle\" class=\"subtitle\">{{ subtitle }}</p>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</article>\n",
30
- styles: ["article{max-width:330px;margin:auto;text-align:center}.icon-outline,article{display:flex;flex-direction:column;justify-content:center}.icon-outline{width:96px;height:96px;margin-left:auto;margin-right:auto;margin-bottom:24px;border:4px solid var(--kirby-medium);border-radius:50%}kirby-icon{color:var(--kirby-medium)}h3.title{margin-bottom:8px}p.subtitle{margin-bottom:24px;white-space:pre-wrap}:host(.primary) .icon-outline{border-color:var(--kirby-primary)}:host(.primary) kirby-icon{color:var(--kirby-primary)}:host(.secondary) .icon-outline{border-color:var(--kirby-secondary)}:host(.secondary) kirby-icon{color:var(--kirby-secondary)}:host(.tertiary) .icon-outline{border-color:var(--kirby-tertiary)}:host(.tertiary) kirby-icon{color:var(--kirby-tertiary)}:host(.success) .icon-outline{border-color:var(--kirby-success)}:host(.success) kirby-icon{color:var(--kirby-success)}:host(.warning) .icon-outline{border-color:var(--kirby-warning)}:host(.warning) kirby-icon{color:var(--kirby-warning)}:host(.danger) .icon-outline{border-color:var(--kirby-danger)}:host(.danger) kirby-icon{color:var(--kirby-danger)}:host(.light) .icon-outline{border-color:var(--kirby-light)}:host(.light) kirby-icon{color:var(--kirby-light)}:host(.medium) .icon-outline{border-color:var(--kirby-medium)}:host(.medium) kirby-icon{color:var(--kirby-medium)}:host(.dark) .icon-outline{border-color:var(--kirby-dark)}:host(.dark) kirby-icon{color:var(--kirby-dark)}"]
31
- },] }
32
- ];
33
- EmptyStateComponent.propDecorators = {
34
- iconName: [{ type: Input }],
35
- customIconName: [{ type: Input }],
36
- title: [{ type: Input }],
37
- subtitle: [{ type: Input }],
38
- slottedButtons: [{ type: ContentChildren, args: [ButtonComponent,] }]
39
- };
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFPN0QsTUFBTSxPQUFPLG1CQUFtQjtJQVM5QixrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFbEM7dUVBQytEO1FBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCO2dCQUFFLE9BQU87WUFFcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXBDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsNFlBQTJDOzthQUU1Qzs7O3VCQUVFLEtBQUs7NkJBQ0wsS0FBSztvQkFDTCxLQUFLO3VCQUNMLEtBQUs7NkJBRUwsZUFBZSxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgSW5wdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LWVtcHR5LXN0YXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VtcHR5LXN0YXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW1wdHktc3RhdGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBASW5wdXQoKSBpY29uTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBjdXN0b21JY29uTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQnV0dG9uQ29tcG9uZW50KVxuICBwcml2YXRlIHNsb3R0ZWRCdXR0b25zOiBRdWVyeUxpc3Q8QnV0dG9uQ29tcG9uZW50PjtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5lbmZvcmNlQXR0ZW50aW9uTGV2ZWxSdWxlcygpO1xuXG4gICAgLyogc2V0VGltZW91dCBwcmV2ZW50cyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yIHdoZW4gY2hhbmdpbmcgYXR0ZW50aW9uIFxuICAgIGxldmVscyBvZiBzbG90dGVkIGJ1dHRvbnMgaW4gdGhpcy5lbmZvcmNlQXR0ZW50aW9uTGV2ZWxSdWxlcyAqL1xuICAgIHRoaXMuc2xvdHRlZEJ1dHRvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVuZm9yY2VBdHRlbnRpb25MZXZlbFJ1bGVzKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVuZm9yY2VzIHRoYXQgYWxsIHNsb3R0ZWQgYnV0dG9ucyB3aWxsIGhhdmUgdGhlaXIgYXR0ZW50aW9uXG4gICAqIGxldmVsIHNldCB0byAzLCBleGNlcHQgdGhlIGZpcnN0IGJ1dHRvbiBpZiBpdCBoYXNcbiAgICogbGV2ZWwgMS5cbiAgICovXG4gIHByaXZhdGUgZW5mb3JjZUF0dGVudGlvbkxldmVsUnVsZXMoKSB7XG4gICAgdGhpcy5zbG90dGVkQnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgYnV0dG9uLmlzQXR0ZW50aW9uTGV2ZWwxKSByZXR1cm47XG5cbiAgICAgIGlmICghYnV0dG9uLmlzQXR0ZW50aW9uTGV2ZWwzKSB7XG4gICAgICAgIGJ1dHRvbi5hdHRlbnRpb25MZXZlbCA9ICczJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
29
+ /** @nocollapse */ EmptyStateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
+ /** @nocollapse */ EmptyStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EmptyStateComponent, selector: "kirby-empty-state", inputs: { iconName: "iconName", customIconName: "customIconName", title: "title", subtitle: "subtitle" }, queries: [{ propertyName: "slottedButtons", predicate: ButtonComponent }], ngImport: i0, template: "<article>\n <div *ngIf=\"iconName || customIconName\" class=\"icon-outline\">\n <kirby-icon [name]=\"iconName\" [customName]=\"customIconName\" size=\"lg\"></kirby-icon>\n </div>\n <h3 *ngIf=\"title\" class=\"title\">{{ title }}</h3>\n <p *ngIf=\"subtitle\" class=\"subtitle\">{{ subtitle }}</p>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</article>\n", styles: ["article{max-width:330px;margin:auto;display:flex;flex-direction:column;justify-content:center;text-align:center}.icon-outline{width:96px;height:96px;margin-left:auto;margin-right:auto;margin-bottom:24px;display:flex;flex-direction:column;justify-content:center;border:4px solid var(--kirby-medium);border-radius:50%}kirby-icon{color:var(--kirby-medium)}h3.title{margin-bottom:8px}p.subtitle{margin-bottom:24px;white-space:pre-wrap}:host(.primary) .icon-outline{border-color:var(--kirby-primary)}:host(.primary) kirby-icon{color:var(--kirby-primary)}:host(.secondary) .icon-outline{border-color:var(--kirby-secondary)}:host(.secondary) kirby-icon{color:var(--kirby-secondary)}:host(.tertiary) .icon-outline{border-color:var(--kirby-tertiary)}:host(.tertiary) kirby-icon{color:var(--kirby-tertiary)}:host(.success) .icon-outline{border-color:var(--kirby-success)}:host(.success) kirby-icon{color:var(--kirby-success)}:host(.warning) .icon-outline{border-color:var(--kirby-warning)}:host(.warning) kirby-icon{color:var(--kirby-warning)}:host(.danger) .icon-outline{border-color:var(--kirby-danger)}:host(.danger) kirby-icon{color:var(--kirby-danger)}:host(.light) .icon-outline{border-color:var(--kirby-light)}:host(.light) kirby-icon{color:var(--kirby-light)}:host(.medium) .icon-outline{border-color:var(--kirby-medium)}:host(.medium) kirby-icon{color:var(--kirby-medium)}:host(.dark) .icon-outline{border-color:var(--kirby-dark)}:host(.dark) kirby-icon{color:var(--kirby-dark)}\n"], components: [{ type: i1.IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EmptyStateComponent, decorators: [{
32
+ type: Component,
33
+ args: [{
34
+ selector: 'kirby-empty-state',
35
+ templateUrl: './empty-state.component.html',
36
+ styleUrls: ['./empty-state.component.scss'],
37
+ changeDetection: ChangeDetectionStrategy.OnPush,
38
+ }]
39
+ }], propDecorators: { iconName: [{
40
+ type: Input
41
+ }], customIconName: [{
42
+ type: Input
43
+ }], title: [{
44
+ type: Input
45
+ }], subtitle: [{
46
+ type: Input
47
+ }], slottedButtons: [{
48
+ type: ContentChildren,
49
+ args: [ButtonComponent]
50
+ }] } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFRN0QsTUFBTSxPQUFPLG1CQUFtQjtJQVM5QixrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFFbEM7dUVBQytEO1FBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzVDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCO2dCQUFFLE9BQU87WUFFcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O29JQS9CVSxtQkFBbUI7d0hBQW5CLG1CQUFtQixrTUFNYixlQUFlLDZCQ3ZCbEMsa1lBVUE7NEZET2EsbUJBQW1CO2tCQU4vQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLFNBQVMsRUFBRSxDQUFDLDhCQUE4QixDQUFDO29CQUMzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBRVUsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdFLGNBQWM7c0JBRHJCLGVBQWU7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktZW1wdHktc3RhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW1wdHktc3RhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbXB0eS1zdGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlTdGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBASW5wdXQoKSBpY29uTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBjdXN0b21JY29uTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJ0aXRsZTogc3RyaW5nO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQnV0dG9uQ29tcG9uZW50KVxuICBwcml2YXRlIHNsb3R0ZWRCdXR0b25zOiBRdWVyeUxpc3Q8QnV0dG9uQ29tcG9uZW50PjtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5lbmZvcmNlQXR0ZW50aW9uTGV2ZWxSdWxlcygpO1xuXG4gICAgLyogc2V0VGltZW91dCBwcmV2ZW50cyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yIHdoZW4gY2hhbmdpbmcgYXR0ZW50aW9uIFxuICAgIGxldmVscyBvZiBzbG90dGVkIGJ1dHRvbnMgaW4gdGhpcy5lbmZvcmNlQXR0ZW50aW9uTGV2ZWxSdWxlcyAqL1xuICAgIHRoaXMuc2xvdHRlZEJ1dHRvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmVuZm9yY2VBdHRlbnRpb25MZXZlbFJ1bGVzKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVuZm9yY2VzIHRoYXQgYWxsIHNsb3R0ZWQgYnV0dG9ucyB3aWxsIGhhdmUgdGhlaXIgYXR0ZW50aW9uXG4gICAqIGxldmVsIHNldCB0byAzLCBleGNlcHQgdGhlIGZpcnN0IGJ1dHRvbiBpZiBpdCBoYXNcbiAgICogbGV2ZWwgMS5cbiAgICovXG4gIHByaXZhdGUgZW5mb3JjZUF0dGVudGlvbkxldmVsUnVsZXMoKSB7XG4gICAgdGhpcy5zbG90dGVkQnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgYnV0dG9uLmlzQXR0ZW50aW9uTGV2ZWwxKSByZXR1cm47XG5cbiAgICAgIGlmICghYnV0dG9uLmlzQXR0ZW50aW9uTGV2ZWwzKSB7XG4gICAgICAgIGJ1dHRvbi5hdHRlbnRpb25MZXZlbCA9ICczJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGFydGljbGU+XG4gIDxkaXYgKm5nSWY9XCJpY29uTmFtZSB8fCBjdXN0b21JY29uTmFtZVwiIGNsYXNzPVwiaWNvbi1vdXRsaW5lXCI+XG4gICAgPGtpcmJ5LWljb24gW25hbWVdPVwiaWNvbk5hbWVcIiBbY3VzdG9tTmFtZV09XCJjdXN0b21JY29uTmFtZVwiIHNpemU9XCJsZ1wiPjwva2lyYnktaWNvbj5cbiAgPC9kaXY+XG4gIDxoMyAqbmdJZj1cInRpdGxlXCIgY2xhc3M9XCJ0aXRsZVwiPnt7IHRpdGxlIH19PC9oMz5cbiAgPHAgKm5nSWY9XCJzdWJ0aXRsZVwiIGNsYXNzPVwic3VidGl0bGVcIj57eyBzdWJ0aXRsZSB9fTwvcD5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9hcnRpY2xlPlxuIl19