@kirbydesign/designsystem 5.3.1 → 6.0.0-rc.2

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 (695) hide show
  1. package/bundles/kirbydesign-designsystem-testing-base.umd.js +1988 -1260
  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 +9965 -9186
  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 +58 -34
  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 +11 -9
  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/configs/chart-config.service.js +7 -4
  26. package/esm2015/lib/components/chart/configs/interaction-functions-extensions.config.js +8 -10
  27. package/esm2015/lib/components/chart/configs/shared.utils.js +1 -1
  28. package/esm2015/lib/components/chart/configs/type.config.js +1 -3
  29. package/esm2015/lib/components/chart/index.js +2 -1
  30. package/esm2015/lib/components/chart-deprecated/chart-deprecated-helper.js +7 -4
  31. package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.js +54 -36
  32. package/esm2015/lib/components/chart-deprecated/options/areaspline.js +7 -9
  33. package/esm2015/lib/components/chart-deprecated/options/donut.js +5 -7
  34. package/esm2015/lib/components/chart-deprecated/options/timeseries.js +8 -10
  35. package/esm2015/lib/components/checkbox/checkbox.component.js +47 -21
  36. package/esm2015/lib/components/chip/chip.component.js +24 -13
  37. package/esm2015/lib/components/divider/divider.component.js +16 -12
  38. package/esm2015/lib/components/dropdown/dropdown.component.js +154 -61
  39. package/esm2015/lib/components/dropdown/keyboard-handler.service.js +9 -7
  40. package/esm2015/lib/components/empty-state/empty-state.component.js +27 -16
  41. package/esm2015/lib/components/fab-sheet/fab-sheet.component.js +35 -22
  42. package/esm2015/lib/components/flag/flag.component.js +20 -14
  43. package/esm2015/lib/components/form-field/directives/date/date-input.directive.js +16 -15
  44. package/esm2015/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.js +41 -28
  45. package/esm2015/lib/components/form-field/form-field-message/form-field-message.component.js +17 -13
  46. package/esm2015/lib/components/form-field/form-field.component.js +39 -26
  47. package/esm2015/lib/components/form-field/input/input.component.js +65 -23
  48. package/esm2015/lib/components/form-field/input-counter/input-counter.component.js +14 -10
  49. package/esm2015/lib/components/form-field/textarea/textarea.component.js +51 -20
  50. package/esm2015/lib/components/grid/breakpoint-helper.service.js +9 -9
  51. package/esm2015/lib/components/grid/grid.component.js +21 -18
  52. package/esm2015/lib/components/icon/icon-registry.service.js +11 -19
  53. package/esm2015/lib/components/icon/icon-settings.js +2 -3
  54. package/esm2015/lib/components/icon/icon.component.js +27 -20
  55. package/esm2015/lib/components/icon/icon.module.js +13 -8
  56. package/esm2015/lib/components/icon/index.js +1 -2
  57. package/esm2015/lib/components/icon/kirby-icon-settings.js +2 -4
  58. package/esm2015/lib/components/index.js +11 -10
  59. package/esm2015/lib/components/item/item.component.js +33 -16
  60. package/esm2015/lib/components/item/item.module.js +13 -8
  61. package/esm2015/lib/components/item/label/label.component.js +18 -12
  62. package/esm2015/lib/components/item-group/item-group.component.js +15 -11
  63. package/esm2015/lib/components/item-sliding/item-sliding.component.js +19 -12
  64. package/esm2015/lib/components/list/directives/infinite-scroll.directive.js +18 -17
  65. package/esm2015/lib/components/list/directives/list-item-color.directive.js +17 -11
  66. package/esm2015/lib/components/list/helpers/list-helper.js +7 -4
  67. package/esm2015/lib/components/list/index.js +2 -3
  68. package/esm2015/lib/components/list/list-experimental/list-experimental.component.js +20 -13
  69. package/esm2015/lib/components/list/list-header/list-header.component.js +14 -11
  70. package/esm2015/lib/components/list/list-item/list-item.component.js +38 -24
  71. package/esm2015/lib/components/list/list-section-header/list-section-header.component.js +15 -13
  72. package/esm2015/lib/components/list/list.component.js +81 -40
  73. package/esm2015/lib/components/list/list.directive.js +34 -45
  74. package/esm2015/lib/components/list/list.module.js +33 -12
  75. package/esm2015/lib/components/list/pipes/group-by.pipe.js +10 -6
  76. package/esm2015/lib/components/loading-overlay/loading-overlay.component.js +20 -13
  77. package/esm2015/lib/components/loading-overlay/loading-overlay.service.js +9 -13
  78. package/esm2015/lib/components/modal/action-sheet/action-sheet.component.js +32 -18
  79. package/esm2015/lib/components/modal/alert/alert.component.js +38 -26
  80. package/esm2015/lib/components/modal/alert/config/alert-config.js +1 -1
  81. package/esm2015/lib/components/modal/footer/modal-footer.component.js +25 -13
  82. package/esm2015/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.js +25 -21
  83. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.js +1 -1
  84. package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.js +124 -56
  85. package/esm2015/lib/components/modal/services/action-sheet.helper.js +8 -8
  86. package/esm2015/lib/components/modal/services/alert.helper.js +10 -20
  87. package/esm2015/lib/components/modal/services/modal-animation-builder.service.js +7 -10
  88. package/esm2015/lib/components/modal/services/modal-navigation.service.js +7 -10
  89. package/esm2015/lib/components/modal/services/modal.controller.js +17 -16
  90. package/esm2015/lib/components/modal/services/modal.helper.js +10 -10
  91. package/esm2015/lib/components/page/index.js +2 -1
  92. package/esm2015/lib/components/page/page-footer/page-footer.component.js +21 -18
  93. package/esm2015/lib/components/page/page.component.js +187 -110
  94. package/esm2015/lib/components/page/page.module.js +60 -32
  95. package/esm2015/lib/components/popover/popover.component.js +38 -34
  96. package/esm2015/lib/components/progress-circle/progress-circle-ring.component.js +29 -17
  97. package/esm2015/lib/components/progress-circle/progress-circle.component.js +30 -21
  98. package/esm2015/lib/components/radio/radio-group/radio-group.component.js +60 -34
  99. package/esm2015/lib/components/radio/radio.component.js +36 -17
  100. package/esm2015/lib/components/range/range.component.js +51 -29
  101. package/esm2015/lib/components/reorder-list/reorder-list.component.js +32 -21
  102. package/esm2015/lib/components/router-outlet/router-outlet.component.js +18 -12
  103. package/esm2015/lib/components/router-outlet/router-outlet.module.js +13 -8
  104. package/esm2015/lib/components/section-header/section-header.component.js +15 -9
  105. package/esm2015/lib/components/segmented-control/segment-item.js +1 -1
  106. package/esm2015/lib/components/segmented-control/segmented-control.component.js +38 -29
  107. package/esm2015/lib/components/shared/component-loader.directive.js +15 -16
  108. package/esm2015/lib/components/shared/resize-observer/resize-observer.factory.js +7 -5
  109. package/esm2015/lib/components/shared/resize-observer/resize-observer.service.js +7 -10
  110. package/esm2015/lib/components/slide-button/slide-button.component.js +22 -19
  111. package/esm2015/lib/components/slides/slides.component.js +42 -20
  112. package/esm2015/lib/components/spinner/index.js +3 -0
  113. package/esm2015/lib/components/spinner/spinner.component.js +14 -11
  114. package/esm2015/lib/components/spinner/spinner.module.js +14 -9
  115. package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.js +9 -3
  116. package/esm2015/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.js +25 -20
  117. package/esm2015/lib/components/tabs/tab-button/tab-button.component.js +21 -18
  118. package/esm2015/lib/components/tabs/tabs.component.js +20 -16
  119. package/esm2015/lib/components/tabs/tabs.module.js +14 -9
  120. package/esm2015/lib/components/tabs/tabs.service.js +9 -7
  121. package/esm2015/lib/components/toast/config/toast-config.js +1 -1
  122. package/esm2015/lib/components/toast/services/toast.controller.js +8 -8
  123. package/esm2015/lib/components/toast/services/toast.helper.js +8 -12
  124. package/esm2015/lib/components/toggle/toggle.component.js +21 -14
  125. package/esm2015/lib/components/toggle-button/index.js +3 -0
  126. package/esm2015/lib/components/toggle-button/toggle-button.component.js +20 -13
  127. package/esm2015/lib/components/toggle-button/toggle-button.module.js +13 -8
  128. package/esm2015/lib/components/web-component-proxies.component.js +13 -15
  129. package/esm2015/lib/directives/element-as-button/element-as-button.directive.js +26 -17
  130. package/esm2015/lib/directives/fit-heading/fit-heading.directive.js +16 -17
  131. package/esm2015/lib/directives/fit-heading/fit-heading.module.js +12 -7
  132. package/esm2015/lib/directives/index.js +3 -1
  133. package/esm2015/lib/directives/key-handler/key-handler.directive.js +14 -14
  134. package/esm2015/lib/directives/modal-router-link/modal-router-link.directive.js +20 -15
  135. package/esm2015/lib/directives/theme-color/theme-color.directive.js +55 -24
  136. package/esm2015/lib/helpers/element-has-ancestor.js +1 -1
  137. package/esm2015/lib/helpers/line-clamp-helper.js +7 -8
  138. package/esm2015/lib/helpers/platform.service.js +9 -11
  139. package/esm2015/lib/index.js +1 -5
  140. package/esm2015/lib/kirby.module.js +166 -25
  141. package/esm2015/lib/types/window-ref.js +9 -7
  142. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.js +1 -59
  143. package/esm2015/testing-base/lib/components/index.js +56 -0
  144. package/esm2015/testing-base/lib/components/mock.accordion-item.component.js +26 -18
  145. package/esm2015/testing-base/lib/components/mock.action-sheet.component.js +38 -24
  146. package/esm2015/testing-base/lib/components/mock.app.component.js +22 -14
  147. package/esm2015/testing-base/lib/components/mock.avatar.component.js +36 -23
  148. package/esm2015/testing-base/lib/components/mock.button.component.js +35 -23
  149. package/esm2015/testing-base/lib/components/mock.calendar.component.js +54 -32
  150. package/esm2015/testing-base/lib/components/mock.card-footer.component.js +22 -14
  151. package/esm2015/testing-base/lib/components/mock.card-header.component.js +30 -20
  152. package/esm2015/testing-base/lib/components/mock.card.component.js +34 -22
  153. package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.js +38 -24
  154. package/esm2015/testing-base/lib/components/mock.chart.component.js +38 -25
  155. package/esm2015/testing-base/lib/components/mock.checkbox.component.js +36 -23
  156. package/esm2015/testing-base/lib/components/mock.chip.component.js +26 -18
  157. package/esm2015/testing-base/lib/components/mock.divider.component.js +24 -17
  158. package/esm2015/testing-base/lib/components/mock.dropdown.component.js +48 -29
  159. package/esm2015/testing-base/lib/components/mock.empty-state.component.js +30 -20
  160. package/esm2015/testing-base/lib/components/mock.fab-sheet.component.js +26 -18
  161. package/esm2015/testing-base/lib/components/mock.flag.component.js +26 -18
  162. package/esm2015/testing-base/lib/components/mock.form-field-message.component.js +26 -18
  163. package/esm2015/testing-base/lib/components/mock.form-field.component.js +26 -18
  164. package/esm2015/testing-base/lib/components/mock.grid.component.js +26 -18
  165. package/esm2015/testing-base/lib/components/mock.icon.component.js +28 -19
  166. package/esm2015/testing-base/lib/components/mock.input-counter.component.js +24 -17
  167. package/esm2015/testing-base/lib/components/mock.input.component.js +41 -26
  168. package/esm2015/testing-base/lib/components/mock.item-group.component.js +22 -14
  169. package/esm2015/testing-base/lib/components/mock.item-sliding.component.js +26 -18
  170. package/esm2015/testing-base/lib/components/mock.item.component.js +32 -21
  171. package/esm2015/testing-base/lib/components/mock.label.component.js +24 -17
  172. package/esm2015/testing-base/lib/components/mock.list-experimental.component.js +22 -14
  173. package/esm2015/testing-base/lib/components/mock.list-header.component.js +22 -14
  174. package/esm2015/testing-base/lib/components/mock.list-item.component.js +40 -25
  175. package/esm2015/testing-base/lib/components/mock.list-section-header.component.js +24 -17
  176. package/esm2015/testing-base/lib/components/mock.list.component.js +50 -30
  177. package/esm2015/testing-base/lib/components/mock.loading-overlay.component.js +26 -18
  178. package/esm2015/testing-base/lib/components/mock.modal-footer.component.js +26 -18
  179. package/esm2015/testing-base/lib/components/mock.page-footer.component.js +24 -17
  180. package/esm2015/testing-base/lib/components/mock.page.component.js +228 -125
  181. package/esm2015/testing-base/lib/components/mock.popover.component.js +28 -19
  182. package/esm2015/testing-base/lib/components/mock.progress-circle.component.js +28 -19
  183. package/esm2015/testing-base/lib/components/mock.radio-group.component.js +38 -24
  184. package/esm2015/testing-base/lib/components/mock.radio.component.js +30 -20
  185. package/esm2015/testing-base/lib/components/mock.range.component.js +44 -27
  186. package/esm2015/testing-base/lib/components/mock.reorder-list.component.js +32 -21
  187. package/esm2015/testing-base/lib/components/mock.router-outlet.component.js +24 -17
  188. package/esm2015/testing-base/lib/components/mock.section-header.component.js +22 -14
  189. package/esm2015/testing-base/lib/components/mock.segmented-control.component.js +34 -22
  190. package/esm2015/testing-base/lib/components/mock.slide-button.component.js +30 -20
  191. package/esm2015/testing-base/lib/components/mock.slides.component.js +51 -0
  192. package/esm2015/testing-base/lib/components/mock.spinner.component.js +22 -14
  193. package/esm2015/testing-base/lib/components/mock.tab-button.component.js +26 -18
  194. package/esm2015/testing-base/lib/components/mock.tabs.component.js +22 -14
  195. package/esm2015/testing-base/lib/components/mock.textarea.component.js +35 -23
  196. package/esm2015/testing-base/lib/components/mock.toggle-button.component.js +26 -18
  197. package/esm2015/testing-base/lib/components/mock.toggle.component.js +28 -19
  198. package/esm2015/testing-base/lib/components/mock.web-component-proxies.component.js +33 -0
  199. package/esm2015/testing-base/lib/directives/index.js +4 -0
  200. package/esm2015/testing-base/lib/directives/mock.accordion.directive.js +22 -13
  201. package/esm2015/testing-base/lib/directives/mock.fit-heading.directive.js +24 -15
  202. package/esm2015/testing-base/lib/directives/mock.theme-color.directive.js +24 -16
  203. package/esm2015/testing-base/lib/index.js +4 -0
  204. package/esm2015/testing-base/lib/kirby-testing-base.module.js +69 -7
  205. package/esm2015/testing-base/lib/mock-components.js +5 -2
  206. package/esm2015/testing-base/public_api.js +2 -2
  207. package/esm2015/testing-jasmine/kirbydesign-designsystem-testing-jasmine.js +1 -2
  208. package/esm2015/testing-jasmine/lib/kirby-testing.module.js +14 -8
  209. package/esm2015/testing-jest/kirbydesign-designsystem-testing-jest.js +1 -2
  210. package/esm2015/testing-jest/lib/kirby-testing.module.js +14 -8
  211. package/fesm2015/kirbydesign-designsystem-testing-base.js +1859 -1164
  212. package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
  213. package/fesm2015/kirbydesign-designsystem-testing-jasmine.js +13 -8
  214. package/fesm2015/kirbydesign-designsystem-testing-jasmine.js.map +1 -1
  215. package/fesm2015/kirbydesign-designsystem-testing-jest.js +13 -8
  216. package/fesm2015/kirbydesign-designsystem-testing-jest.js.map +1 -1
  217. package/fesm2015/kirbydesign-designsystem.js +5374 -4465
  218. package/fesm2015/kirbydesign-designsystem.js.map +1 -1
  219. package/kirbydesign-designsystem.d.ts +1 -114
  220. package/lib/components/accordion/accordion-item.component.d.ts +3 -0
  221. package/lib/components/accordion/accordion.directive.d.ts +3 -0
  222. package/lib/components/app/app.component.d.ts +3 -0
  223. package/lib/components/app/app.module.d.ts +7 -0
  224. package/lib/components/avatar/avatar.component.d.ts +4 -1
  225. package/lib/components/button/button.component.d.ts +4 -1
  226. package/lib/components/calendar/calendar.component.d.ts +3 -0
  227. package/lib/components/calendar/helpers/calendar.helper.d.ts +3 -0
  228. package/lib/components/card/card-footer/card-footer.component.d.ts +3 -0
  229. package/lib/components/card/card-header/card-header.component.d.ts +3 -0
  230. package/lib/components/card/card.component.d.ts +3 -0
  231. package/lib/components/chart/chart-js/chart-js.service.d.ts +3 -0
  232. package/lib/components/chart/chart.component.d.ts +4 -4
  233. package/lib/components/chart/chart.module.d.ts +5 -0
  234. package/lib/components/chart/configs/chart-config.service.d.ts +4 -1
  235. package/lib/components/chart/index.d.ts +1 -0
  236. package/lib/components/chart-deprecated/chart-deprecated-helper.d.ts +3 -0
  237. package/lib/components/chart-deprecated/chart-deprecated.component.d.ts +3 -0
  238. package/lib/components/checkbox/checkbox.component.d.ts +3 -0
  239. package/lib/components/chip/chip.component.d.ts +3 -0
  240. package/lib/components/divider/divider.component.d.ts +3 -0
  241. package/lib/components/dropdown/dropdown.component.d.ts +3 -0
  242. package/lib/components/dropdown/keyboard-handler.service.d.ts +3 -0
  243. package/lib/components/empty-state/empty-state.component.d.ts +3 -0
  244. package/lib/components/fab-sheet/fab-sheet.component.d.ts +3 -0
  245. package/lib/components/flag/flag.component.d.ts +3 -0
  246. package/lib/components/form-field/directives/date/date-input.directive.d.ts +3 -0
  247. package/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.d.ts +3 -0
  248. package/lib/components/form-field/form-field-message/form-field-message.component.d.ts +3 -0
  249. package/lib/components/form-field/form-field.component.d.ts +3 -0
  250. package/lib/components/form-field/input/input.component.d.ts +3 -0
  251. package/lib/components/form-field/input-counter/input-counter.component.d.ts +3 -0
  252. package/lib/components/form-field/textarea/textarea.component.d.ts +3 -0
  253. package/lib/components/grid/breakpoint-helper.service.d.ts +3 -0
  254. package/lib/components/grid/grid.component.d.ts +3 -0
  255. package/lib/components/icon/icon-registry.service.d.ts +4 -2
  256. package/lib/components/icon/icon-settings.d.ts +0 -2
  257. package/lib/components/icon/icon.component.d.ts +3 -0
  258. package/lib/components/icon/icon.module.d.ts +6 -0
  259. package/lib/components/icon/index.d.ts +1 -1
  260. package/lib/components/index.d.ts +10 -9
  261. package/lib/components/item/item.component.d.ts +3 -0
  262. package/lib/components/item/item.module.d.ts +9 -0
  263. package/lib/components/item/label/label.component.d.ts +3 -0
  264. package/lib/components/item-group/item-group.component.d.ts +3 -0
  265. package/lib/components/item-sliding/item-sliding.component.d.ts +3 -0
  266. package/lib/components/list/directives/infinite-scroll.directive.d.ts +3 -0
  267. package/lib/components/list/directives/list-item-color.directive.d.ts +3 -0
  268. package/lib/components/list/helpers/list-helper.d.ts +3 -0
  269. package/lib/components/list/index.d.ts +1 -2
  270. package/lib/components/list/list-experimental/list-experimental.component.d.ts +3 -0
  271. package/lib/components/list/list-header/list-header.component.d.ts +3 -0
  272. package/lib/components/list/list-item/list-item.component.d.ts +3 -0
  273. package/lib/components/list/list-section-header/list-section-header.component.d.ts +3 -0
  274. package/lib/components/list/list.component.d.ts +3 -0
  275. package/lib/components/list/list.directive.d.ts +9 -6
  276. package/lib/components/list/list.module.d.ts +16 -0
  277. package/lib/components/list/pipes/group-by.pipe.d.ts +3 -0
  278. package/lib/components/loading-overlay/loading-overlay.component.d.ts +3 -0
  279. package/lib/components/loading-overlay/loading-overlay.service.d.ts +3 -0
  280. package/lib/components/modal/action-sheet/action-sheet.component.d.ts +3 -0
  281. package/lib/components/modal/alert/alert.component.d.ts +5 -2
  282. package/lib/components/modal/alert/config/alert-config.d.ts +0 -8
  283. package/lib/components/modal/footer/modal-footer.component.d.ts +3 -0
  284. package/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts +3 -0
  285. package/lib/components/modal/modal-wrapper/config/modal-config.d.ts +1 -8
  286. package/lib/components/modal/modal-wrapper/modal-wrapper.component.d.ts +5 -0
  287. package/lib/components/modal/services/action-sheet.helper.d.ts +3 -0
  288. package/lib/components/modal/services/alert.helper.d.ts +4 -2
  289. package/lib/components/modal/services/modal-animation-builder.service.d.ts +3 -0
  290. package/lib/components/modal/services/modal-navigation.service.d.ts +3 -0
  291. package/lib/components/modal/services/modal.controller.d.ts +3 -0
  292. package/lib/components/modal/services/modal.helper.d.ts +3 -0
  293. package/lib/components/page/index.d.ts +1 -0
  294. package/lib/components/page/page-footer/page-footer.component.d.ts +3 -0
  295. package/lib/components/page/page.component.d.ts +26 -0
  296. package/lib/components/page/page.module.d.ts +10 -0
  297. package/lib/components/popover/popover.component.d.ts +4 -2
  298. package/lib/components/progress-circle/progress-circle-ring.component.d.ts +3 -0
  299. package/lib/components/progress-circle/progress-circle.component.d.ts +3 -0
  300. package/lib/components/radio/radio-group/radio-group.component.d.ts +3 -0
  301. package/lib/components/radio/radio.component.d.ts +3 -0
  302. package/lib/components/range/range.component.d.ts +3 -0
  303. package/lib/components/reorder-list/reorder-list.component.d.ts +3 -0
  304. package/lib/components/router-outlet/router-outlet.component.d.ts +3 -0
  305. package/lib/components/router-outlet/router-outlet.module.d.ts +7 -0
  306. package/lib/components/section-header/section-header.component.d.ts +3 -0
  307. package/lib/components/segmented-control/segment-item.d.ts +0 -4
  308. package/lib/components/segmented-control/segmented-control.component.d.ts +3 -0
  309. package/lib/components/shared/component-loader.directive.d.ts +3 -0
  310. package/lib/components/shared/resize-observer/resize-observer.factory.d.ts +3 -0
  311. package/lib/components/shared/resize-observer/resize-observer.service.d.ts +3 -0
  312. package/lib/components/slide-button/slide-button.component.d.ts +3 -0
  313. package/lib/components/slides/slides.component.d.ts +5 -0
  314. package/lib/components/spinner/index.d.ts +2 -0
  315. package/lib/components/spinner/spinner.component.d.ts +3 -0
  316. package/lib/components/spinner/spinner.module.d.ts +6 -0
  317. package/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.d.ts +3 -0
  318. package/lib/components/tabs/tab-button/tab-button.component.d.ts +3 -0
  319. package/lib/components/tabs/tabs.component.d.ts +3 -0
  320. package/lib/components/tabs/tabs.module.d.ts +9 -0
  321. package/lib/components/tabs/tabs.service.d.ts +3 -0
  322. package/lib/components/toast/config/toast-config.d.ts +1 -4
  323. package/lib/components/toast/services/toast.controller.d.ts +3 -0
  324. package/lib/components/toast/services/toast.helper.d.ts +3 -0
  325. package/lib/components/toggle/toggle.component.d.ts +3 -0
  326. package/lib/components/toggle-button/index.d.ts +2 -0
  327. package/lib/components/toggle-button/toggle-button.component.d.ts +3 -0
  328. package/lib/components/toggle-button/toggle-button.module.d.ts +6 -0
  329. package/lib/components/web-component-proxies.component.d.ts +3 -0
  330. package/lib/custom-elements-initializer.d.ts +1 -1
  331. package/lib/directives/element-as-button/element-as-button.directive.d.ts +3 -0
  332. package/lib/directives/fit-heading/fit-heading.directive.d.ts +3 -0
  333. package/lib/directives/fit-heading/fit-heading.module.d.ts +5 -0
  334. package/lib/directives/index.d.ts +2 -0
  335. package/lib/directives/key-handler/key-handler.directive.d.ts +3 -0
  336. package/lib/directives/modal-router-link/modal-router-link.directive.d.ts +3 -0
  337. package/lib/directives/theme-color/theme-color.directive.d.ts +3 -0
  338. package/lib/helpers/line-clamp-helper.d.ts +3 -0
  339. package/lib/helpers/platform.service.d.ts +3 -0
  340. package/lib/index.d.ts +0 -1
  341. package/lib/kirby.module.d.ts +69 -0
  342. package/lib/types/window-ref.d.ts +3 -0
  343. package/package.json +3 -4
  344. package/readme.md +6 -79
  345. package/scss/base/_link.scss +1 -0
  346. package/scss/interaction-state/_active.scss +1 -0
  347. package/scss/interaction-state/_focus.scss +1 -0
  348. package/scss/interaction-state/_hover.scss +1 -0
  349. package/scss/interaction-state/_index.scss +1 -0
  350. package/scss/interaction-state/_interaction-state.utilities.scss +1 -0
  351. package/scss/interaction-state/_layer.scss +1 -0
  352. package/scss/opt-out/_index.scss +1 -0
  353. package/scss/opt-out/_link.scss +1 -0
  354. package/testing-base/kirbydesign-designsystem-testing-base.d.ts +1 -58
  355. package/testing-base/lib/components/index.d.ts +55 -0
  356. package/testing-base/lib/components/mock.accordion-item.component.d.ts +3 -0
  357. package/testing-base/lib/components/mock.action-sheet.component.d.ts +3 -0
  358. package/testing-base/lib/components/mock.app.component.d.ts +3 -0
  359. package/testing-base/lib/components/mock.avatar.component.d.ts +3 -0
  360. package/testing-base/lib/components/mock.button.component.d.ts +3 -0
  361. package/testing-base/lib/components/mock.calendar.component.d.ts +3 -0
  362. package/testing-base/lib/components/mock.card-footer.component.d.ts +3 -0
  363. package/testing-base/lib/components/mock.card-header.component.d.ts +3 -0
  364. package/testing-base/lib/components/mock.card.component.d.ts +3 -0
  365. package/testing-base/lib/components/mock.chart-deprecated.component.d.ts +3 -0
  366. package/testing-base/lib/components/mock.chart.component.d.ts +3 -1
  367. package/testing-base/lib/components/mock.checkbox.component.d.ts +3 -0
  368. package/testing-base/lib/components/mock.chip.component.d.ts +3 -0
  369. package/testing-base/lib/components/mock.divider.component.d.ts +3 -0
  370. package/testing-base/lib/components/mock.dropdown.component.d.ts +3 -0
  371. package/testing-base/lib/components/mock.empty-state.component.d.ts +3 -0
  372. package/testing-base/lib/components/mock.fab-sheet.component.d.ts +3 -0
  373. package/testing-base/lib/components/mock.flag.component.d.ts +3 -0
  374. package/testing-base/lib/components/mock.form-field-message.component.d.ts +3 -0
  375. package/testing-base/lib/components/mock.form-field.component.d.ts +3 -0
  376. package/testing-base/lib/components/mock.grid.component.d.ts +3 -0
  377. package/testing-base/lib/components/mock.icon.component.d.ts +3 -0
  378. package/testing-base/lib/components/mock.input-counter.component.d.ts +3 -0
  379. package/testing-base/lib/components/mock.input.component.d.ts +3 -0
  380. package/testing-base/lib/components/mock.item-group.component.d.ts +3 -0
  381. package/testing-base/lib/components/mock.item-sliding.component.d.ts +3 -0
  382. package/testing-base/lib/components/mock.item.component.d.ts +3 -0
  383. package/testing-base/lib/components/mock.label.component.d.ts +3 -0
  384. package/testing-base/lib/components/mock.list-experimental.component.d.ts +3 -0
  385. package/testing-base/lib/components/mock.list-header.component.d.ts +3 -0
  386. package/testing-base/lib/components/mock.list-item.component.d.ts +3 -0
  387. package/testing-base/lib/components/mock.list-section-header.component.d.ts +3 -0
  388. package/testing-base/lib/components/mock.list.component.d.ts +3 -0
  389. package/testing-base/lib/components/mock.loading-overlay.component.d.ts +3 -0
  390. package/testing-base/lib/components/mock.modal-footer.component.d.ts +3 -0
  391. package/testing-base/lib/components/mock.page-footer.component.d.ts +3 -0
  392. package/testing-base/lib/components/mock.page.component.d.ts +24 -0
  393. package/testing-base/lib/components/mock.popover.component.d.ts +3 -0
  394. package/testing-base/lib/components/mock.progress-circle.component.d.ts +3 -0
  395. package/testing-base/lib/components/mock.radio-group.component.d.ts +3 -0
  396. package/testing-base/lib/components/mock.radio.component.d.ts +3 -0
  397. package/testing-base/lib/components/mock.range.component.d.ts +3 -0
  398. package/testing-base/lib/components/mock.reorder-list.component.d.ts +3 -0
  399. package/testing-base/lib/components/mock.router-outlet.component.d.ts +3 -0
  400. package/testing-base/lib/components/mock.section-header.component.d.ts +3 -0
  401. package/testing-base/lib/components/mock.segmented-control.component.d.ts +3 -0
  402. package/testing-base/lib/components/mock.slide-button.component.d.ts +3 -0
  403. package/testing-base/lib/components/mock.slides.component.d.ts +11 -0
  404. package/testing-base/lib/components/mock.spinner.component.d.ts +3 -0
  405. package/testing-base/lib/components/mock.tab-button.component.d.ts +3 -0
  406. package/testing-base/lib/components/mock.tabs.component.d.ts +3 -0
  407. package/testing-base/lib/components/mock.textarea.component.d.ts +3 -0
  408. package/testing-base/lib/components/mock.toggle-button.component.d.ts +3 -0
  409. package/testing-base/lib/components/mock.toggle.component.d.ts +3 -0
  410. package/testing-base/lib/components/mock.web-component-proxies.component.d.ts +8 -0
  411. package/testing-base/lib/directives/index.d.ts +3 -0
  412. package/testing-base/lib/directives/mock.accordion.directive.d.ts +3 -0
  413. package/testing-base/lib/directives/mock.fit-heading.directive.d.ts +3 -0
  414. package/testing-base/lib/directives/mock.theme-color.directive.d.ts +3 -0
  415. package/testing-base/lib/index.d.ts +3 -0
  416. package/testing-base/lib/kirby-testing-base.module.d.ts +61 -0
  417. package/testing-base/package.json +0 -1
  418. package/testing-base/public_api.d.ts +1 -1
  419. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.d.ts +1 -1
  420. package/testing-jasmine/lib/kirby-testing.module.d.ts +5 -0
  421. package/testing-jasmine/package.json +0 -1
  422. package/testing-jest/kirbydesign-designsystem-testing-jest.d.ts +1 -1
  423. package/testing-jest/lib/kirby-testing.module.d.ts +5 -0
  424. package/testing-jest/package.json +0 -1
  425. package/README.md +0 -7
  426. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +0 -2
  427. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +0 -1
  428. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js +0 -16
  429. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js.map +0 -1
  430. package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js +0 -16
  431. package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js.map +0 -1
  432. package/bundles/kirbydesign-designsystem.umd.min.js +0 -2
  433. package/bundles/kirbydesign-designsystem.umd.min.js.map +0 -1
  434. package/esm2015/index.metadata.json +0 -1
  435. package/esm2015/kirbydesign-designsystem.metadata.json +0 -1
  436. package/esm2015/lib/components/accordion/accordion-item.component.metadata.json +0 -1
  437. package/esm2015/lib/components/accordion/accordion.directive.metadata.json +0 -1
  438. package/esm2015/lib/components/accordion/index.metadata.json +0 -1
  439. package/esm2015/lib/components/angular-component-lib/utils.metadata.json +0 -1
  440. package/esm2015/lib/components/app/app.component.metadata.json +0 -1
  441. package/esm2015/lib/components/app/app.module.metadata.json +0 -1
  442. package/esm2015/lib/components/app/index.metadata.json +0 -1
  443. package/esm2015/lib/components/avatar/avatar.component.metadata.json +0 -1
  444. package/esm2015/lib/components/button/button.component.metadata.json +0 -1
  445. package/esm2015/lib/components/calendar/calendar.component.metadata.json +0 -1
  446. package/esm2015/lib/components/calendar/helpers/calendar-cell.model.metadata.json +0 -1
  447. package/esm2015/lib/components/calendar/helpers/calendar-options.model.metadata.json +0 -1
  448. package/esm2015/lib/components/calendar/helpers/calendar.helper.metadata.json +0 -1
  449. package/esm2015/lib/components/calendar/index.metadata.json +0 -1
  450. package/esm2015/lib/components/calendar/options/calendar-year-navigator-config.metadata.json +0 -1
  451. package/esm2015/lib/components/card/card-footer/card-footer.component.metadata.json +0 -1
  452. package/esm2015/lib/components/card/card-header/card-header.component.metadata.json +0 -1
  453. package/esm2015/lib/components/card/card.component.metadata.json +0 -1
  454. package/esm2015/lib/components/card/index.metadata.json +0 -1
  455. package/esm2015/lib/components/chart/chart-js/chart-js.service.metadata.json +0 -1
  456. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.metadata.json +0 -1
  457. package/esm2015/lib/components/chart/chart-js/configured-chart-js.metadata.json +0 -1
  458. package/esm2015/lib/components/chart/chart.component.metadata.json +0 -1
  459. package/esm2015/lib/components/chart/chart.module.metadata.json +0 -1
  460. package/esm2015/lib/components/chart/chart.types.metadata.json +0 -1
  461. package/esm2015/lib/components/chart/configs/annotations.config.metadata.json +0 -1
  462. package/esm2015/lib/components/chart/configs/chart-config.service.metadata.json +0 -1
  463. package/esm2015/lib/components/chart/configs/global-defaults.config.metadata.json +0 -1
  464. package/esm2015/lib/components/chart/configs/interaction-functions-extensions.config.metadata.json +0 -1
  465. package/esm2015/lib/components/chart/configs/shared.utils.metadata.json +0 -1
  466. package/esm2015/lib/components/chart/configs/type.config.metadata.json +0 -1
  467. package/esm2015/lib/components/chart/index.metadata.json +0 -1
  468. package/esm2015/lib/components/chart-deprecated/chart-deprecated-helper.metadata.json +0 -1
  469. package/esm2015/lib/components/chart-deprecated/chart-deprecated-type.metadata.json +0 -1
  470. package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.metadata.json +0 -1
  471. package/esm2015/lib/components/chart-deprecated/index.metadata.json +0 -1
  472. package/esm2015/lib/components/chart-deprecated/options/activitygauge.metadata.json +0 -1
  473. package/esm2015/lib/components/chart-deprecated/options/areaspline.metadata.json +0 -1
  474. package/esm2015/lib/components/chart-deprecated/options/bar.metadata.json +0 -1
  475. package/esm2015/lib/components/chart-deprecated/options/column.metadata.json +0 -1
  476. package/esm2015/lib/components/chart-deprecated/options/donut.metadata.json +0 -1
  477. package/esm2015/lib/components/chart-deprecated/options/timeseries.metadata.json +0 -1
  478. package/esm2015/lib/components/checkbox/checkbox.component.metadata.json +0 -1
  479. package/esm2015/lib/components/chip/chip.component.metadata.json +0 -1
  480. package/esm2015/lib/components/divider/divider.component.metadata.json +0 -1
  481. package/esm2015/lib/components/dropdown/dropdown.component.metadata.json +0 -1
  482. package/esm2015/lib/components/dropdown/dropdown.types.metadata.json +0 -1
  483. package/esm2015/lib/components/dropdown/keyboard-handler.service.metadata.json +0 -1
  484. package/esm2015/lib/components/empty-state/empty-state.component.metadata.json +0 -1
  485. package/esm2015/lib/components/fab-sheet/fab-sheet.component.metadata.json +0 -1
  486. package/esm2015/lib/components/flag/flag.component.metadata.json +0 -1
  487. package/esm2015/lib/components/form-field/directives/date/date-input.directive.metadata.json +0 -1
  488. package/esm2015/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.metadata.json +0 -1
  489. package/esm2015/lib/components/form-field/form-field-message/form-field-message.component.metadata.json +0 -1
  490. package/esm2015/lib/components/form-field/form-field.component.metadata.json +0 -1
  491. package/esm2015/lib/components/form-field/index.metadata.json +0 -1
  492. package/esm2015/lib/components/form-field/input/input.component.metadata.json +0 -1
  493. package/esm2015/lib/components/form-field/input-counter/input-counter.component.metadata.json +0 -1
  494. package/esm2015/lib/components/form-field/textarea/textarea.component.metadata.json +0 -1
  495. package/esm2015/lib/components/grid/breakpoint-helper.service.metadata.json +0 -1
  496. package/esm2015/lib/components/grid/grid-card-configuration.metadata.json +0 -1
  497. package/esm2015/lib/components/grid/grid.component.metadata.json +0 -1
  498. package/esm2015/lib/components/icon/icon-registry.service.metadata.json +0 -1
  499. package/esm2015/lib/components/icon/icon-settings.metadata.json +0 -1
  500. package/esm2015/lib/components/icon/icon.component.metadata.json +0 -1
  501. package/esm2015/lib/components/icon/icon.module.metadata.json +0 -1
  502. package/esm2015/lib/components/icon/index.metadata.json +0 -1
  503. package/esm2015/lib/components/icon/kirby-icon-settings.metadata.json +0 -1
  504. package/esm2015/lib/components/index.metadata.json +0 -1
  505. package/esm2015/lib/components/item/index.metadata.json +0 -1
  506. package/esm2015/lib/components/item/item.component.metadata.json +0 -1
  507. package/esm2015/lib/components/item/item.module.metadata.json +0 -1
  508. package/esm2015/lib/components/item/label/label.component.metadata.json +0 -1
  509. package/esm2015/lib/components/item-group/item-group.component.metadata.json +0 -1
  510. package/esm2015/lib/components/item-sliding/index.metadata.json +0 -1
  511. package/esm2015/lib/components/item-sliding/item-sliding.component.metadata.json +0 -1
  512. package/esm2015/lib/components/item-sliding/item-sliding.types.metadata.json +0 -1
  513. package/esm2015/lib/components/list/directives/infinite-scroll.directive.metadata.json +0 -1
  514. package/esm2015/lib/components/list/directives/list-item-color.directive.metadata.json +0 -1
  515. package/esm2015/lib/components/list/directives/scroll.model.metadata.json +0 -1
  516. package/esm2015/lib/components/list/helpers/list-helper.metadata.json +0 -1
  517. package/esm2015/lib/components/list/index.metadata.json +0 -1
  518. package/esm2015/lib/components/list/list-experimental/list-experimental.component.metadata.json +0 -1
  519. package/esm2015/lib/components/list/list-header/list-header.component.metadata.json +0 -1
  520. package/esm2015/lib/components/list/list-item/list-item.component.metadata.json +0 -1
  521. package/esm2015/lib/components/list/list-section-header/list-section-header.component.metadata.json +0 -1
  522. package/esm2015/lib/components/list/list-swipe-action.type.metadata.json +0 -1
  523. package/esm2015/lib/components/list/list.component.metadata.json +0 -1
  524. package/esm2015/lib/components/list/list.directive.metadata.json +0 -1
  525. package/esm2015/lib/components/list/list.event.metadata.json +0 -1
  526. package/esm2015/lib/components/list/list.module.metadata.json +0 -1
  527. package/esm2015/lib/components/list/pipes/group-by.pipe.metadata.json +0 -1
  528. package/esm2015/lib/components/loading-overlay/index.metadata.json +0 -1
  529. package/esm2015/lib/components/loading-overlay/loading-overlay.component.metadata.json +0 -1
  530. package/esm2015/lib/components/loading-overlay/loading-overlay.service.metadata.json +0 -1
  531. package/esm2015/lib/components/modal/action-sheet/action-sheet.component.metadata.json +0 -1
  532. package/esm2015/lib/components/modal/action-sheet/config/action-sheet-config.metadata.json +0 -1
  533. package/esm2015/lib/components/modal/action-sheet/config/action-sheet-item.metadata.json +0 -1
  534. package/esm2015/lib/components/modal/alert/alert.component.metadata.json +0 -1
  535. package/esm2015/lib/components/modal/alert/config/alert-config.metadata.json +0 -1
  536. package/esm2015/lib/components/modal/footer/modal-footer.component.metadata.json +0 -1
  537. package/esm2015/lib/components/modal/index.metadata.json +0 -1
  538. package/esm2015/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.metadata.json +0 -1
  539. package/esm2015/lib/components/modal/modal-wrapper/config/drawer-supplementary-action.metadata.json +0 -1
  540. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.helper.metadata.json +0 -1
  541. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.metadata.json +0 -1
  542. package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.metadata.json +0 -1
  543. package/esm2015/lib/components/modal/services/action-sheet.helper.metadata.json +0 -1
  544. package/esm2015/lib/components/modal/services/alert.helper.metadata.json +0 -1
  545. package/esm2015/lib/components/modal/services/modal-animation-builder.service.metadata.json +0 -1
  546. package/esm2015/lib/components/modal/services/modal-navigation.service.metadata.json +0 -1
  547. package/esm2015/lib/components/modal/services/modal.controller.metadata.json +0 -1
  548. package/esm2015/lib/components/modal/services/modal.helper.metadata.json +0 -1
  549. package/esm2015/lib/components/modal/services/modal.interfaces.metadata.json +0 -1
  550. package/esm2015/lib/components/page/index.metadata.json +0 -1
  551. package/esm2015/lib/components/page/page-footer/page-footer.component.metadata.json +0 -1
  552. package/esm2015/lib/components/page/page.component.metadata.json +0 -1
  553. package/esm2015/lib/components/page/page.module.metadata.json +0 -1
  554. package/esm2015/lib/components/popover/popover.component.metadata.json +0 -1
  555. package/esm2015/lib/components/progress-circle/progress-circle-ring.component.metadata.json +0 -1
  556. package/esm2015/lib/components/progress-circle/progress-circle.component.metadata.json +0 -1
  557. package/esm2015/lib/components/radio/index.metadata.json +0 -1
  558. package/esm2015/lib/components/radio/radio-group/radio-group.component.metadata.json +0 -1
  559. package/esm2015/lib/components/radio/radio.component.metadata.json +0 -1
  560. package/esm2015/lib/components/range/range.component.metadata.json +0 -1
  561. package/esm2015/lib/components/reorder-list/index.metadata.json +0 -1
  562. package/esm2015/lib/components/reorder-list/reorder-event.metadata.json +0 -1
  563. package/esm2015/lib/components/reorder-list/reorder-list.component.metadata.json +0 -1
  564. package/esm2015/lib/components/router-outlet/index.metadata.json +0 -1
  565. package/esm2015/lib/components/router-outlet/router-outlet.component.metadata.json +0 -1
  566. package/esm2015/lib/components/router-outlet/router-outlet.module.metadata.json +0 -1
  567. package/esm2015/lib/components/section-header/section-header.component.metadata.json +0 -1
  568. package/esm2015/lib/components/segmented-control/segment-item.metadata.json +0 -1
  569. package/esm2015/lib/components/segmented-control/segmented-control.component.metadata.json +0 -1
  570. package/esm2015/lib/components/shared/component-configuration.metadata.json +0 -1
  571. package/esm2015/lib/components/shared/component-loader.directive.metadata.json +0 -1
  572. package/esm2015/lib/components/shared/dynamic-component.metadata.json +0 -1
  573. package/esm2015/lib/components/shared/index.metadata.json +0 -1
  574. package/esm2015/lib/components/shared/resize-observer/resize-observer.factory.metadata.json +0 -1
  575. package/esm2015/lib/components/shared/resize-observer/resize-observer.service.metadata.json +0 -1
  576. package/esm2015/lib/components/shared/resize-observer/types/resize-observer-callback.metadata.json +0 -1
  577. package/esm2015/lib/components/shared/resize-observer/types/resize-observer-entry.metadata.json +0 -1
  578. package/esm2015/lib/components/shared/resize-observer/types/resize-observer.metadata.json +0 -1
  579. package/esm2015/lib/components/slide-button/slide-button.component.metadata.json +0 -1
  580. package/esm2015/lib/components/slides/slides.component.metadata.json +0 -1
  581. package/esm2015/lib/components/spinner/spinner.component.metadata.json +0 -1
  582. package/esm2015/lib/components/spinner/spinner.module.metadata.json +0 -1
  583. package/esm2015/lib/components/stock-chart-deprecated/index.metadata.json +0 -1
  584. package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.metadata.json +0 -1
  585. package/esm2015/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.metadata.json +0 -1
  586. package/esm2015/lib/components/tabs/index.metadata.json +0 -1
  587. package/esm2015/lib/components/tabs/tab-button/tab-button.component.metadata.json +0 -1
  588. package/esm2015/lib/components/tabs/tab-button/tab-button.events.metadata.json +0 -1
  589. package/esm2015/lib/components/tabs/tabs.component.metadata.json +0 -1
  590. package/esm2015/lib/components/tabs/tabs.module.metadata.json +0 -1
  591. package/esm2015/lib/components/tabs/tabs.service.metadata.json +0 -1
  592. package/esm2015/lib/components/toast/config/toast-config.metadata.json +0 -1
  593. package/esm2015/lib/components/toast/index.metadata.json +0 -1
  594. package/esm2015/lib/components/toast/services/toast.controller.metadata.json +0 -1
  595. package/esm2015/lib/components/toast/services/toast.helper.metadata.json +0 -1
  596. package/esm2015/lib/components/toggle/toggle.component.metadata.json +0 -1
  597. package/esm2015/lib/components/toggle-button/toggle-button.component.metadata.json +0 -1
  598. package/esm2015/lib/components/toggle-button/toggle-button.module.metadata.json +0 -1
  599. package/esm2015/lib/components/web-component-proxies.component.metadata.json +0 -1
  600. package/esm2015/lib/custom-elements-initializer.metadata.json +0 -1
  601. package/esm2015/lib/directives/element-as-button/element-as-button.directive.metadata.json +0 -1
  602. package/esm2015/lib/directives/fit-heading/fit-heading.directive.metadata.json +0 -1
  603. package/esm2015/lib/directives/fit-heading/fit-heading.module.metadata.json +0 -1
  604. package/esm2015/lib/directives/index.metadata.json +0 -1
  605. package/esm2015/lib/directives/key-handler/key-handler.directive.metadata.json +0 -1
  606. package/esm2015/lib/directives/modal-router-link/modal-router-link.directive.metadata.json +0 -1
  607. package/esm2015/lib/directives/theme-color/theme-color.directive.metadata.json +0 -1
  608. package/esm2015/lib/helpers/color-helper.metadata.json +0 -1
  609. package/esm2015/lib/helpers/deep-copy.metadata.json +0 -1
  610. package/esm2015/lib/helpers/design-token-helper.metadata.json +0 -1
  611. package/esm2015/lib/helpers/element-has-ancestor.metadata.json +0 -1
  612. package/esm2015/lib/helpers/index.metadata.json +0 -1
  613. package/esm2015/lib/helpers/line-clamp-helper.metadata.json +0 -1
  614. package/esm2015/lib/helpers/merge-deep.metadata.json +0 -1
  615. package/esm2015/lib/helpers/platform.service.metadata.json +0 -1
  616. package/esm2015/lib/helpers/string-helper.metadata.json +0 -1
  617. package/esm2015/lib/helpers/theme-color.type.metadata.json +0 -1
  618. package/esm2015/lib/helpers/unique-id-generator.helper.metadata.json +0 -1
  619. package/esm2015/lib/index.metadata.json +0 -1
  620. package/esm2015/lib/kirby.module.metadata.json +0 -1
  621. package/esm2015/lib/scss/scss-helper.metadata.json +0 -1
  622. package/esm2015/lib/types/window-ref.metadata.json +0 -1
  623. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.metadata.json +0 -1
  624. package/esm2015/testing-base/lib/components/mock.accordion-item.component.metadata.json +0 -1
  625. package/esm2015/testing-base/lib/components/mock.action-sheet.component.metadata.json +0 -1
  626. package/esm2015/testing-base/lib/components/mock.app.component.metadata.json +0 -1
  627. package/esm2015/testing-base/lib/components/mock.avatar.component.metadata.json +0 -1
  628. package/esm2015/testing-base/lib/components/mock.button.component.metadata.json +0 -1
  629. package/esm2015/testing-base/lib/components/mock.calendar.component.metadata.json +0 -1
  630. package/esm2015/testing-base/lib/components/mock.card-footer.component.metadata.json +0 -1
  631. package/esm2015/testing-base/lib/components/mock.card-header.component.metadata.json +0 -1
  632. package/esm2015/testing-base/lib/components/mock.card.component.metadata.json +0 -1
  633. package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.metadata.json +0 -1
  634. package/esm2015/testing-base/lib/components/mock.chart.component.metadata.json +0 -1
  635. package/esm2015/testing-base/lib/components/mock.checkbox.component.metadata.json +0 -1
  636. package/esm2015/testing-base/lib/components/mock.chip.component.metadata.json +0 -1
  637. package/esm2015/testing-base/lib/components/mock.divider.component.metadata.json +0 -1
  638. package/esm2015/testing-base/lib/components/mock.dropdown.component.metadata.json +0 -1
  639. package/esm2015/testing-base/lib/components/mock.empty-state.component.metadata.json +0 -1
  640. package/esm2015/testing-base/lib/components/mock.fab-sheet.component.metadata.json +0 -1
  641. package/esm2015/testing-base/lib/components/mock.flag.component.metadata.json +0 -1
  642. package/esm2015/testing-base/lib/components/mock.form-field-message.component.metadata.json +0 -1
  643. package/esm2015/testing-base/lib/components/mock.form-field.component.metadata.json +0 -1
  644. package/esm2015/testing-base/lib/components/mock.grid.component.metadata.json +0 -1
  645. package/esm2015/testing-base/lib/components/mock.icon.component.metadata.json +0 -1
  646. package/esm2015/testing-base/lib/components/mock.input-counter.component.metadata.json +0 -1
  647. package/esm2015/testing-base/lib/components/mock.input.component.metadata.json +0 -1
  648. package/esm2015/testing-base/lib/components/mock.item-group.component.metadata.json +0 -1
  649. package/esm2015/testing-base/lib/components/mock.item-sliding.component.metadata.json +0 -1
  650. package/esm2015/testing-base/lib/components/mock.item.component.metadata.json +0 -1
  651. package/esm2015/testing-base/lib/components/mock.label.component.metadata.json +0 -1
  652. package/esm2015/testing-base/lib/components/mock.list-experimental.component.metadata.json +0 -1
  653. package/esm2015/testing-base/lib/components/mock.list-header.component.metadata.json +0 -1
  654. package/esm2015/testing-base/lib/components/mock.list-item.component.metadata.json +0 -1
  655. package/esm2015/testing-base/lib/components/mock.list-section-header.component.metadata.json +0 -1
  656. package/esm2015/testing-base/lib/components/mock.list.component.metadata.json +0 -1
  657. package/esm2015/testing-base/lib/components/mock.loading-overlay.component.metadata.json +0 -1
  658. package/esm2015/testing-base/lib/components/mock.modal-footer.component.metadata.json +0 -1
  659. package/esm2015/testing-base/lib/components/mock.page-footer.component.metadata.json +0 -1
  660. package/esm2015/testing-base/lib/components/mock.page.component.metadata.json +0 -1
  661. package/esm2015/testing-base/lib/components/mock.popover.component.metadata.json +0 -1
  662. package/esm2015/testing-base/lib/components/mock.progress-circle.component.metadata.json +0 -1
  663. package/esm2015/testing-base/lib/components/mock.radio-group.component.metadata.json +0 -1
  664. package/esm2015/testing-base/lib/components/mock.radio.component.metadata.json +0 -1
  665. package/esm2015/testing-base/lib/components/mock.range.component.metadata.json +0 -1
  666. package/esm2015/testing-base/lib/components/mock.reorder-list.component.metadata.json +0 -1
  667. package/esm2015/testing-base/lib/components/mock.router-outlet.component.metadata.json +0 -1
  668. package/esm2015/testing-base/lib/components/mock.section-header.component.metadata.json +0 -1
  669. package/esm2015/testing-base/lib/components/mock.segmented-control.component.metadata.json +0 -1
  670. package/esm2015/testing-base/lib/components/mock.slide-button.component.metadata.json +0 -1
  671. package/esm2015/testing-base/lib/components/mock.spinner.component.metadata.json +0 -1
  672. package/esm2015/testing-base/lib/components/mock.tab-button.component.metadata.json +0 -1
  673. package/esm2015/testing-base/lib/components/mock.tabs.component.metadata.json +0 -1
  674. package/esm2015/testing-base/lib/components/mock.textarea.component.metadata.json +0 -1
  675. package/esm2015/testing-base/lib/components/mock.toggle-button.component.metadata.json +0 -1
  676. package/esm2015/testing-base/lib/components/mock.toggle.component.metadata.json +0 -1
  677. package/esm2015/testing-base/lib/directives/mock.accordion.directive.metadata.json +0 -1
  678. package/esm2015/testing-base/lib/directives/mock.fit-heading.directive.metadata.json +0 -1
  679. package/esm2015/testing-base/lib/directives/mock.theme-color.directive.metadata.json +0 -1
  680. package/esm2015/testing-base/lib/kirby-testing-base.module.metadata.json +0 -1
  681. package/esm2015/testing-base/lib/mock-components.metadata.json +0 -1
  682. package/esm2015/testing-base/lib/mock-directives.metadata.json +0 -1
  683. package/esm2015/testing-base/public_api.metadata.json +0 -1
  684. package/esm2015/testing-jasmine/kirbydesign-designsystem-testing-jasmine.metadata.json +0 -1
  685. package/esm2015/testing-jasmine/lib/kirby-testing.module.metadata.json +0 -1
  686. package/esm2015/testing-jasmine/lib/mock-providers.metadata.json +0 -1
  687. package/esm2015/testing-jasmine/public_api.metadata.json +0 -1
  688. package/esm2015/testing-jest/kirbydesign-designsystem-testing-jest.metadata.json +0 -1
  689. package/esm2015/testing-jest/lib/kirby-testing.module.metadata.json +0 -1
  690. package/esm2015/testing-jest/lib/mock-providers.metadata.json +0 -1
  691. package/esm2015/testing-jest/public_api.metadata.json +0 -1
  692. package/kirbydesign-designsystem.metadata.json +0 -1
  693. package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +0 -1
  694. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.metadata.json +0 -1
  695. package/testing-jest/kirbydesign-designsystem-testing-jest.metadata.json +0 -1
@@ -12,6 +12,9 @@ import { Subject } from 'rxjs';
12
12
  import { WindowRef } from '../../../../types/window-ref';
13
13
  import { Modal } from '../../services/modal.interfaces';
14
14
  import { COMPONENT_PROPS } from '../config/modal-config.helper';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "../../../../types/window-ref";
17
+ import * as i2 from "@angular/common";
15
18
  export class ModalCompactWrapperComponent {
16
19
  constructor(injector, elementRef, windowRef) {
17
20
  this.injector = injector;
@@ -62,24 +65,25 @@ export class ModalCompactWrapperComponent {
62
65
  this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });
63
66
  }
64
67
  }
65
- ModalCompactWrapperComponent.decorators = [
66
- { type: Component, args: [{
67
- selector: 'kirby-modal-compact-wrapper',
68
- template: "<ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n></ng-container>\n",
69
- providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }],
70
- // tslint:disable-next-line: no-host-metadata-property
71
- host: { '[class.ion-page]': 'false' },
72
- styles: [":host{display:block;padding:24px 16px}"]
73
- },] }
74
- ];
75
- /** @nocollapse */
76
- ModalCompactWrapperComponent.ctorParameters = () => [
77
- { type: Injector },
78
- { type: ElementRef },
79
- { type: WindowRef }
80
- ];
81
- ModalCompactWrapperComponent.propDecorators = {
82
- config: [{ type: Input }],
83
- onFocusChange: [{ type: HostListener, args: ['window:focus',] }, { type: HostListener, args: ['window:focusout',] }]
84
- };
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9tb2RhbC13cmFwcGVyL2NvbXBhY3QvbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBVWhFLE1BQU0sT0FBTyw0QkFBNEI7SUFZdkMsWUFDVSxRQUFrQixFQUNsQixVQUFtQyxFQUNuQyxTQUFvQjtRQUZwQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFkOUIsWUFBTyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFLTix1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3pDLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxjQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBTXZELENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDNUMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9FLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtnQkFDL0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVLLEtBQUssQ0FBQyxJQUFVOztZQUNwQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0UsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLE1BQU0sZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQztRQUNILENBQUM7S0FBQTtJQU9ELGFBQWE7UUFDWCxxR0FBcUc7UUFDckcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7OztZQXJFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtnQkFDdkMsMEhBQXFEO2dCQUVyRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUM7Z0JBQzFFLHNEQUFzRDtnQkFDdEQsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFOzthQUN0Qzs7OztZQWY2QyxRQUFRO1lBQWxDLFVBQVU7WUFHckIsU0FBUzs7O3FCQWdCZixLQUFLOzRCQXFETCxZQUFZLFNBQUMsY0FBYyxjQUMzQixZQUFZLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzL3dpbmRvdy1yZWYnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZGFsQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL21vZGFsLWNvbmZpZyc7XG5pbXBvcnQgeyBDT01QT05FTlRfUFJPUFMgfSBmcm9tICcuLi9jb25maWcvbW9kYWwtY29uZmlnLmhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LW1vZGFsLWNvbXBhY3Qtd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1jb21wYWN0LXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC1jb21wYWN0LXdyYXBwZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNb2RhbCwgdXNlRXhpc3Rpbmc6IE1vZGFsQ29tcGFjdFdyYXBwZXJDb21wb25lbnQgfV0sXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7ICdbY2xhc3MuaW9uLXBhZ2VdJzogJ2ZhbHNlJyB9LCAvL0Vuc3VyZSBpb24tcGFnZSBjbGFzcyBkb2Vzbid0IGdldCBhcHBsaWVkIGJ5IElvbmljIE1vZGFsIENvbnRyb2xsZXJcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wYWN0V3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE1vZGFsLCBPbkluaXQge1xuICBzY3JvbGxZOiBudW1iZXIgPSBNYXRoLmFicyh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsWSk7XG4gIHNjcm9sbERpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogTW9kYWxDb25maWc7XG4gIGNvbXBvbmVudFByb3BzSW5qZWN0b3I6IEluamVjdG9yO1xuXG4gIHByaXZhdGUgaW9uTW9kYWxFbGVtZW50OiBIVE1MSW9uTW9kYWxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGlvbk1vZGFsRGlkUHJlc2VudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9uTW9kYWxXaWxsRGlzbWlzcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGRpZFByZXNlbnQgPSB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC50b1Byb21pc2UoKTtcbiAgcmVhZG9ubHkgd2lsbENsb3NlID0gdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLnRvUHJvbWlzZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdpb24tbW9kYWwnKTtcbiAgICB0aGlzLmxpc3RlbkZvcklvbk1vZGFsRGlkUHJlc2VudCgpO1xuICAgIHRoaXMubGlzdGVuRm9ySW9uTW9kYWxXaWxsRGlzbWlzcygpO1xuICAgIHRoaXMuY29tcG9uZW50UHJvcHNJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTVBPTkVOVF9QUk9QUywgdXNlVmFsdWU6IHRoaXMuY29uZmlnLmNvbXBvbmVudFByb3BzIH1dLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JJb25Nb2RhbERpZFByZXNlbnQoKSB7XG4gICAgaWYgKHRoaXMuaW9uTW9kYWxFbGVtZW50KSB7XG4gICAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb2RhbERpZFByZXNlbnQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50Lm5leHQoKTtcbiAgICAgICAgdGhpcy5pb25Nb2RhbERpZFByZXNlbnQuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9ySW9uTW9kYWxXaWxsRGlzbWlzcygpIHtcbiAgICBpZiAodGhpcy5pb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lvbk1vZGFsV2lsbERpc21pc3MnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5uZXh0KCk7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xvc2UoZGF0YT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlvbk1vZGFsRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2lvbi1tb2RhbCcpO1xuICAgIGlmIChpb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIGF3YWl0IGlvbk1vZGFsRWxlbWVudC5kaXNtaXNzKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvVG9wOiAoXz86IGFueSkgPT4gdm9pZDtcbiAgc2Nyb2xsVG9Cb3R0b206IChfPzogYW55KSA9PiB2b2lkO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1cycpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcpXG4gIG9uRm9jdXNDaGFuZ2UoKSB7XG4gICAgLy8gVGhpcyBmaXhlcyBhbiB1bmRlc2lyZWQgc2Nyb2xsIGJlaGF2aW91ciBvY2N1cnJpbmcgb24ga2V5Ym9hcmQtdGFiYmluZyBiYWNrd2FyZHMgKHdpdGggc2hpZnQrdGFiKTpcbiAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRoaXMuc2Nyb2xsWSB9KTtcbiAgfVxufVxuIl19
68
+ /** @nocollapse */ ModalCompactWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ModalCompactWrapperComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Component });
69
+ /** @nocollapse */ ModalCompactWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ModalCompactWrapperComponent, selector: "kirby-modal-compact-wrapper", inputs: { config: "config" }, host: { listeners: { "window:focus": "onFocusChange()", "window:focusout": "onFocusChange()" }, properties: { "class.ion-page": "false" } }, providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }], ngImport: i0, template: "<ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n></ng-container>\n", styles: [":host{display:block;padding:24px 16px}\n"], directives: [{ type: i2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }] });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ModalCompactWrapperComponent, decorators: [{
71
+ type: Component,
72
+ args: [{
73
+ selector: 'kirby-modal-compact-wrapper',
74
+ templateUrl: './modal-compact-wrapper.component.html',
75
+ styleUrls: ['./modal-compact-wrapper.component.scss'],
76
+ providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }],
77
+ // tslint:disable-next-line: no-host-metadata-property
78
+ host: { '[class.ion-page]': 'false' }, //Ensure ion-page class doesn't get applied by Ionic Modal Controller
79
+ }]
80
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i1.WindowRef }]; }, propDecorators: { config: [{
81
+ type: Input
82
+ }], onFocusChange: [{
83
+ type: HostListener,
84
+ args: ['window:focus']
85
+ }, {
86
+ type: HostListener,
87
+ args: ['window:focusout']
88
+ }] } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9tb2RhbC13cmFwcGVyL2NvbXBhY3QvbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9tb2RhbC13cmFwcGVyL2NvbXBhY3QvbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFVaEUsTUFBTSxPQUFPLDRCQUE0QjtJQVl2QyxZQUNVLFFBQWtCLEVBQ2xCLFVBQW1DLEVBQ25DLFNBQW9CO1FBRnBCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQWQ5QixZQUFPLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUtOLHVCQUFrQixHQUFHLElB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IEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzL3dpbmRvdy1yZWYnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZGFsQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL21vZGFsLWNvbmZpZyc7XG5pbXBvcnQgeyBDT01QT05FTlRfUFJPUFMgfSBmcm9tICcuLi9jb25maWcvbW9kYWwtY29uZmlnLmhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LW1vZGFsLWNvbXBhY3Qtd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1jb21wYWN0LXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC1jb21wYWN0LXdyYXBwZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNb2RhbCwgdXNlRXhpc3Rpbmc6IE1vZGFsQ29tcGFjdFdyYXBwZXJDb21wb25lbnQgfV0sXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICBob3N0OiB7ICdbY2xhc3MuaW9uLXBhZ2VdJzogJ2ZhbHNlJyB9LCAvL0Vuc3VyZSBpb24tcGFnZSBjbGFzcyBkb2Vzbid0IGdldCBhcHBsaWVkIGJ5IElvbmljIE1vZGFsIENvbnRyb2xsZXJcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wYWN0V3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE1vZGFsLCBPbkluaXQge1xuICBzY3JvbGxZOiBudW1iZXIgPSBNYXRoLmFicyh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsWSk7XG4gIHNjcm9sbERpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogTW9kYWxDb25maWc7XG4gIGNvbXBvbmVudFByb3BzSW5qZWN0b3I6IEluamVjdG9yO1xuXG4gIHByaXZhdGUgaW9uTW9kYWxFbGVtZW50OiBIVE1MSW9uTW9kYWxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGlvbk1vZGFsRGlkUHJlc2VudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9uTW9kYWxXaWxsRGlzbWlzcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGRpZFByZXNlbnQgPSB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC50b1Byb21pc2UoKTtcbiAgcmVhZG9ubHkgd2lsbENsb3NlID0gdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLnRvUHJvbWlzZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdpb24tbW9kYWwnKTtcbiAgICB0aGlzLmxpc3RlbkZvcklvbk1vZGFsRGlkUHJlc2VudCgpO1xuICAgIHRoaXMubGlzdGVuRm9ySW9uTW9kYWxXaWxsRGlzbWlzcygpO1xuICAgIHRoaXMuY29tcG9uZW50UHJvcHNJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTVBPTkVOVF9QUk9QUywgdXNlVmFsdWU6IHRoaXMuY29uZmlnLmNvbXBvbmVudFByb3BzIH1dLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JJb25Nb2RhbERpZFByZXNlbnQoKSB7XG4gICAgaWYgKHRoaXMuaW9uTW9kYWxFbGVtZW50KSB7XG4gICAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb2RhbERpZFByZXNlbnQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50Lm5leHQoKTtcbiAgICAgICAgdGhpcy5pb25Nb2RhbERpZFByZXNlbnQuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9ySW9uTW9kYWxXaWxsRGlzbWlzcygpIHtcbiAgICBpZiAodGhpcy5pb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lvbk1vZGFsV2lsbERpc21pc3MnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5uZXh0KCk7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xvc2UoZGF0YT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlvbk1vZGFsRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2lvbi1tb2RhbCcpO1xuICAgIGlmIChpb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIGF3YWl0IGlvbk1vZGFsRWxlbWVudC5kaXNtaXNzKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvVG9wOiAoXz86IGFueSkgPT4gdm9pZDtcbiAgc2Nyb2xsVG9Cb3R0b206IChfPzogYW55KSA9PiB2b2lkO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1cycpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcpXG4gIG9uRm9jdXNDaGFuZ2UoKSB7XG4gICAgLy8gVGhpcyBmaXhlcyBhbiB1bmRlc2lyZWQgc2Nyb2xsIGJlaGF2aW91ciBvY2N1cnJpbmcgb24ga2V5Ym9hcmQtdGFiYmluZyBiYWNrd2FyZHMgKHdpdGggc2hpZnQrdGFiKTpcbiAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRoaXMuc2Nyb2xsWSB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lclxuICAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb25maWcuY29tcG9uZW50OyBpbmplY3RvcjogY29tcG9uZW50UHJvcHNJbmplY3RvclwiXG4+PC9uZy1jb250YWluZXI+XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL21vZGFsL21vZGFsLXdyYXBwZXIvY29uZmlnL21vZGFsLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uIH0gZnJvbSAnLi9kcmF3ZXItc3VwcGxlbWVudGFyeS1hY3Rpb24nO1xuXG5leHBvcnQgdHlwZSBNb2RhbEZsYXZvciA9ICdtb2RhbCcgfCAnZHJhd2VyJyB8ICdjb21wYWN0JztcbmV4cG9ydCB0eXBlIE1vZGFsU2l6ZSA9ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAnZnVsbC1oZWlnaHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29uZmlnIHtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHZlcnNpb24uIEVtYmVkIGEgYDxraXJieS1wYWdlLXRpdGxlPmAgZWxlbWVudCBpbnNpZGUgdGhlIGNvbXBvbmVudCBpbnN0ZWFkLlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGNvbXBvbmVudDogYW55O1xuICBzaXplPzogTW9kYWxTaXplO1xuICBtb2RhbFJvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gIHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJD86IE9ic2VydmFibGU8QWN0aXZhdGVkUm91dGU+O1xuICBmbGF2b3I/OiBNb2RhbEZsYXZvcjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqL1xuICBkaW0/OiBudW1iZXI7XG4gIGNvbXBvbmVudFByb3BzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgLy8gdGhlIHN1cHBsZW1lbnRhcnkgYWN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBkcmF3ZXJcbiAgZHJhd2VyU3VwcGxlbWVudGFyeUFjdGlvbj86IERyYXdlclN1cHBsZW1lbnRhcnlBY3Rpb247XG4gIC8vIGRyYXdlciBwcm9wZXJ0aWVzXG4gIGludGVyYWN0V2l0aEJhY2tncm91bmQ/OiBib29sZWFuO1xuICBjc3NDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kZXNpZ25zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL21vZGFsL21vZGFsLXdyYXBwZXIvY29uZmlnL21vZGFsLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uIH0gZnJvbSAnLi9kcmF3ZXItc3VwcGxlbWVudGFyeS1hY3Rpb24nO1xuXG5leHBvcnQgdHlwZSBNb2RhbEZsYXZvciA9ICdtb2RhbCcgfCAnZHJhd2VyJyB8ICdjb21wYWN0JztcbmV4cG9ydCB0eXBlIE1vZGFsU2l6ZSA9ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAnZnVsbC1oZWlnaHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vZGFsQ29uZmlnIHtcbiAgY29sbGFwc2VUaXRsZT86IGJvb2xlYW47XG4gIGNvbXBvbmVudDogYW55O1xuICBzaXplPzogTW9kYWxTaXplO1xuICBtb2RhbFJvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gIHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJD86IE9ic2VydmFibGU8QWN0aXZhdGVkUm91dGU+O1xuICBmbGF2b3I/OiBNb2RhbEZsYXZvcjtcbiAgY29tcG9uZW50UHJvcHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAvLyB0aGUgc3VwcGxlbWVudGFyeSBhY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaW4gdGhlIGRyYXdlclxuICBkcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uPzogRHJhd2VyU3VwcGxlbWVudGFyeUFjdGlvbjtcbiAgLy8gZHJhd2VyIHByb3BlcnRpZXNcbiAgaW50ZXJhY3RXaXRoQmFja2dyb3VuZD86IGJvb2xlYW47XG4gIGNzc0NsYXNzPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG4iXX0=
@@ -19,6 +19,15 @@ import { ButtonComponent } from '../../button/button.component';
19
19
  import { ResizeObserverService } from '../../shared/resize-observer/resize-observer.service';
20
20
  import { Modal } from '../services/modal.interfaces';
21
21
  import { COMPONENT_PROPS } from './config/modal-config.helper';
22
+ import * as i0 from "@angular/core";
23
+ import * as i1 from "../../shared/resize-observer/resize-observer.service";
24
+ import * as i2 from "../../../types/window-ref";
25
+ import * as i3 from "../../../helpers/platform.service";
26
+ import * as i4 from "@ionic/angular";
27
+ import * as i5 from "../../button/button.component";
28
+ import * as i6 from "../../icon/icon.component";
29
+ import * as i7 from "@angular/common";
30
+ import * as i8 from "@angular/router";
22
31
  export class ModalWrapperComponent {
23
32
  constructor(injector, elementRef, renderer, zone, resizeObserverService, componentFactoryResolver, windowRef, platform) {
24
33
  this.injector = injector;
@@ -46,13 +55,20 @@ export class ModalWrapperComponent {
46
55
  this.destroy$ = new Subject();
47
56
  this.willClose$ = this.ionModalWillDismiss.pipe(first());
48
57
  this.elementToParentMap = {
49
- 'KIRBY-MODAL-FOOTER': () => this.elementRef.nativeElement,
50
- 'KIRBY-PAGE-TITLE': () => this.ionTitleElement.nativeElement,
51
- 'KIRBY-PAGE-PROGRESS': () => this.ionToolbarElement.nativeElement,
58
+ 'KIRBY-MODAL-FOOTER': () => [this.elementRef.nativeElement],
59
+ 'KIRBY-PAGE-TITLE': () => {
60
+ var _a;
61
+ return [this.ionTitleElement.nativeElement, (_a = this.contentTitle) === null || _a === void 0 ? void 0 : _a.nativeElement].filter((element) => element !== undefined);
62
+ },
63
+ 'KIRBY-PAGE-PROGRESS': () => [this.ionToolbarElement.nativeElement],
52
64
  };
53
65
  this.setViewportHeight();
54
66
  this.observeViewportResize();
55
67
  }
68
+ get _hasCollapsibleTitle() {
69
+ var _a;
70
+ return !!((_a = this.config) === null || _a === void 0 ? void 0 : _a.collapseTitle);
71
+ }
56
72
  set scrollDisabled(disabled) {
57
73
  this.ionContent.scrollY = !disabled;
58
74
  }
@@ -333,31 +349,51 @@ export class ModalWrapperComponent {
333
349
  }
334
350
  }
335
351
  clearEmbeddedElements() {
336
- Object.entries(this.elementToParentMap).forEach(([tagName, getParent]) => {
337
- const embeddedElement = getParent().querySelector(`:scope > ${tagName}`);
338
- this.removeChild(embeddedElement);
352
+ Object.entries(this.elementToParentMap).forEach(([tagName, getParents]) => {
353
+ const newParents = getParents();
354
+ newParents.forEach((newParent) => {
355
+ const embeddedElement = newParent.querySelector(`:scope > ${tagName}`);
356
+ this.removeChild(embeddedElement);
357
+ });
339
358
  });
340
359
  }
360
+ /* TODO: Rewrite to make this function independent of element order.
361
+ See: https://github.com/kirbydesign/designsystem/issues/2096
362
+ */
341
363
  getEmbeddedComponentElement() {
342
- return !!this.config.modalRoute
343
- ? this.ionContentElement.nativeElement.lastElementChild
344
- : this.ionContentElement.nativeElement.firstElementChild;
364
+ const contentElementChildren = Array.from(this.ionContentElement.nativeElement.children).reverse(); // Reverse makes it easier to retrieve the last children in the list
365
+ const embeddedComponentElement = !!this.config.modalRoute
366
+ ? contentElementChildren[0]
367
+ : contentElementChildren[1];
368
+ /*
369
+ As ModalConfig.component has type 'any' all values are valid for component;
370
+ explicitly handle the case where no embedded component element is found due to
371
+ this.
372
+ */
373
+ if (!embeddedComponentElement)
374
+ return null;
375
+ return embeddedComponentElement;
345
376
  }
346
377
  getEmbeddedFooterElement() {
347
378
  return this.elementRef.nativeElement.querySelector('kirby-modal-footer');
348
379
  }
349
- moveChild(child, newParent) {
380
+ moveChild(child, newParents) {
350
381
  this.renderer.removeChild(child.parentElement, child);
351
- this.renderer.appendChild(newParent, child);
352
- if (child.tagName === 'KIRBY-MODAL-FOOTER') {
353
- this.resizeObserverService.observe(child, (entry) => {
354
- const [property, pixelValue] = [
355
- '--footer-height',
356
- `${Math.floor(entry.contentRect.height)}px`,
357
- ];
358
- this.setCssVar(this.elementRef.nativeElement, property, pixelValue);
359
- });
360
- }
382
+ newParents.forEach((newParent, index) => {
383
+ const childToAppend = index > 0 ? child.cloneNode(true) : child;
384
+ this.renderer.appendChild(newParent, childToAppend);
385
+ // Append adds child as last element of parent; therefore retrieve with lastElementChild
386
+ const childElement = newParent.lastElementChild;
387
+ if (childElement.tagName === 'KIRBY-MODAL-FOOTER') {
388
+ this.resizeObserverService.observe(childElement, (entry) => {
389
+ const [property, pixelValue] = [
390
+ '--footer-height',
391
+ `${Math.floor(entry.contentRect.height)}px`,
392
+ ];
393
+ this.setCssVar(this.elementRef.nativeElement, property, pixelValue);
394
+ });
395
+ }
396
+ });
361
397
  }
362
398
  removeChild(child) {
363
399
  if (!!child) {
@@ -366,8 +402,10 @@ export class ModalWrapperComponent {
366
402
  }
367
403
  observeEmbeddedElements() {
368
404
  const parentElement = this.getEmbeddedComponentElement();
405
+ if (parentElement === null)
406
+ return; // Mute observe warning when parentElement is null
369
407
  this.mutationObserver.observe(parentElement, {
370
- childList: true,
408
+ childList: true, // Listen for addition or removal of child nodes
371
409
  });
372
410
  }
373
411
  createEmbeddedElementsMutationObserver() {
@@ -431,38 +469,68 @@ export class ModalWrapperComponent {
431
469
  }
432
470
  }
433
471
  ModalWrapperComponent.KEYBOARD_HIDE_DELAY_IN_MS = 100;
434
- ModalWrapperComponent.decorators = [
435
- { type: Component, args: [{
436
- selector: 'kirby-modal-wrapper',
437
- template: "<ion-header (touchstart)=\"onHeaderTouchStart($event)\">\n <ion-toolbar>\n <ion-title>{{ config.title }}</ion-title>\n <ion-buttons slot=\"start\" *ngIf=\"config.flavor === 'drawer'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'arrow-down' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'modal'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'close' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\">\n <ng-container\n *ngTemplateOutlet=\"supplementaryButton; context: { btn: config.drawerSupplementaryAction }\"\n ></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"true\">\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n\n<ng-template #closeButton let-icon=\"icon\">\n <button kirby-button attentionLevel=\"4\" size=\"sm\" (click)=\"close()\">\n <kirby-icon [name]=\"icon\"></kirby-icon>\n </button>\n</ng-template>\n\n<ng-template #supplementaryButton let-btn=\"btn\">\n <button kirby-button attentionLevel=\"2\" size=\"sm\" (click)=\"btn.action($event)\">\n <kirby-icon [name]=\"btn.iconName\"></kirby-icon>\n </button>\n</ng-template>\n",
438
- providers: [{ provide: Modal, useExisting: ModalWrapperComponent }],
439
- styles: ["ion-header ion-toolbar{--padding-start:16px;--padding-end:16px;--padding-bottom:16px;--padding-top:16px;--border-width:0;--background:transparent;--color:var(--kirby-modal-color,var(--kirby-black))}ion-header ion-toolbar button{color:var(--color)}@media (min-width:721px){ion-header ion-toolbar{padding-top:8px}}:host{--vh100:var(--vh,1vh) * 100;--header-height:0px;--footer-height:0px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}@media (min-width:721px){:host-context(ion-modal:not(.kirby-modal-full-height)){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top,0))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer{padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top,0))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:var(--kirby-safe-area-top,0)}@media (min-width:721px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:8px}}ion-title{box-sizing:border-box;padding-inline-start:calc(48px + var(--padding-start));padding-inline-end:calc(48px + var(--padding-end));font-size:22px;font-weight:700}:host(.drawer) ion-title{font-size:18px}ion-content{--background:transparent;--color:var(--kirby-modal-color,var(--kirby-black));display:flex;flex-direction:column;--padding-top:24px;--padding-bottom:24px;--padding-start:16px;--padding-end:16px}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width:721px){ion-content{--padding-start:56px;--padding-end:56px}}"]
440
- },] }
441
- ];
442
- /** @nocollapse */
443
- ModalWrapperComponent.ctorParameters = () => [
444
- { type: Injector },
445
- { type: ElementRef },
446
- { type: Renderer2 },
447
- { type: NgZone },
448
- { type: ResizeObserverService },
449
- { type: ComponentFactoryResolver },
450
- { type: WindowRef },
451
- { type: PlatformService }
452
- ];
453
- ModalWrapperComponent.propDecorators = {
454
- config: [{ type: Input }],
455
- toolbarButtonsQuery: [{ type: ViewChildren, args: [ButtonComponent, { read: ElementRef },] }],
456
- ionContent: [{ type: ViewChild, args: [IonContent, { static: true },] }],
457
- ionContentElement: [{ type: ViewChild, args: [IonContent, { static: true, read: ElementRef },] }],
458
- ionHeaderElement: [{ type: ViewChild, args: [IonHeader, { static: true, read: ElementRef },] }],
459
- ionToolbarElement: [{ type: ViewChild, args: [IonToolbar, { static: true, read: ElementRef },] }],
460
- ionTitleElement: [{ type: ViewChild, args: [IonTitle, { static: true, read: ElementRef },] }],
461
- routerOutlet: [{ type: ViewChild, args: [RouterOutlet, { static: true },] }],
462
- _isDrawer: [{ type: HostBinding, args: ['class.drawer',] }],
463
- onFocusChange: [{ type: HostListener, args: ['window:focus',] }, { type: HostListener, args: ['window:focusout',] }],
464
- _onKeyboardShow: [{ type: HostListener, args: ['window:ionKeyboardDidShow', ['$event.detail.keyboardHeight'],] }, { type: HostListener, args: ['window:keyboardWillShow', ['$event.keyboardHeight'],] }],
465
- _onKeyboardHide: [{ type: HostListener, args: ['window:ionKeyboardDidHide',] }, { type: HostListener, args: ['window:keyboardWillHide',] }],
466
- _onWindowResize: [{ type: HostListener, args: ['window:resize',] }]
467
- };
468
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtd3JhcHBlci9tb2RhbC13cmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsZUFBZSxF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LFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQWlDeEMsV0FBVyxTQUFDLGNBQWM7NEJBOEwxQixZQUFZLFNBQUMsY0FBYyxjQUMzQixZQUFZLFNBQUMsaUJBQWlCOzhCQU05QixZQUFZLFNBQUMsMkJBQTJCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxjQUMxRSxZQUFZLFNBQUMseUJBQXlCLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs4QkFLakUsWUFBWSxTQUFDLDJCQUEyQixjQUN4QyxZQUFZLFNBQUMseUJBQXlCOzhCQW1GdEMsWUFBWSxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25Db250ZW50LCBJb25IZWFkZXIsIElvblRpdGxlLCBJb25Ub29sYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGVzaWduVG9rZW5IZWxwZXIgfSBmcm9tICdAa2lyYnlkZXNpZ24vY29yZSc7XG5cbmltcG9ydCB7IEtpcmJ5QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vYW5pbWF0aW9uL2tpcmJ5LWFuaW1hdGlvbic7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvd2luZG93LXJlZic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyRW50cnkgfSBmcm9tICcuLi8uLi9zaGFyZWQvcmVzaXplLW9ic2VydmVyL3R5cGVzL3Jlc2l6ZS1vYnNlcnZlci1lbnRyeSc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLmludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBNb2RhbENvbmZpZyB9IGZyb20gJy4vY29uZmlnL21vZGFsLWNvbmZpZyc7XG5pbXBvcnQgeyBDT01QT05FTlRfUFJPUFMgfSBmcm9tICcuL2NvbmZpZy9tb2RhbC1jb25maWcuaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktbW9kYWwtd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtd3JhcHBlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1vZGFsLCB1c2VFeGlzdGluZzogTW9kYWxXcmFwcGVyQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBNb2RhbCwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgcmVhZG9ubHkgS0VZQk9BUkRfSElERV9ERUxBWV9JTl9NUyA9IDEwMDtcblxuICBzY3JvbGxZOiBudW1iZXIgPSBNYXRoLmFicyh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsWSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgVklFV1BPUlRfUkVTSVpFX0RFQk9VTkNFX1RJTUUgPSAxMDA7XG5cbiAgc2V0IHNjcm9sbERpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5pb25Db250ZW50LnNjcm9sbFkgPSAhZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKSBjb25maWc6IE1vZGFsQ29uZmlnO1xuICBjb21wb25lbnRQcm9wc0luamVjdG9yOiBJbmplY3RvcjtcblxuICBAVmlld0NoaWxkcmVuKEJ1dHRvbkNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgdG9vbGJhckJ1dHRvbnNRdWVyeTogUXVlcnlMaXN0PFxuICAgIEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+XG4gID47XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBpb25Db250ZW50OiBJb25Db250ZW50O1xuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uQ29udGVudEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkNvbnRlbnRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25IZWFkZXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uSGVhZGVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uSGVhZGVyRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uVG9vbGJhciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Ub29sYmFyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVG9vbGJhckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvblRpdGxlLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvblRpdGxlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVGl0bGVFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcm91dGVyT3V0bGV0OiBSb3V0ZXJPdXRsZXQ7XG5cbiAgcHJpdmF0ZSBrZXlib2FyZFZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0b29sYmFyQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGRlbGF5ZWRDbG9zZSA9ICgpID0+IHt9O1xuICBwcml2YXRlIGRlbGF5ZWRDbG9zZVRpbWVvdXRJZDtcbiAgcHJpdmF0ZSBpbml0aWFsVmlld3BvcnRIZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpb25Nb2RhbEVsZW1lbnQ/OiBIVE1MSW9uTW9kYWxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGlvbk1vZGFsRGlkUHJlc2VudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGRpZFByZXNlbnQgPSB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC50b1Byb21pc2UoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb25Nb2RhbFdpbGxEaXNtaXNzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgd2lsbENsb3NlID0gdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLnRvUHJvbWlzZSgpO1xuICBwcml2YXRlIHZpZXdwb3J0UmVzaXplID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZSQgPSB0aGlzLnZpZXdwb3J0UmVzaXplXG4gICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuVklFV1BPUlRfUkVTSVpFX0RFQk9VTkNFX1RJTUUpKTtcbiAgcHJpdmF0ZSBfbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBnZXQgbXV0YXRpb25PYnNlcnZlcigpOiBNdXRhdGlvbk9ic2VydmVyIHtcbiAgICBpZiAoIXRoaXMuX211dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX211dGF0aW9uT2JzZXJ2ZXIgPSB0aGlzLmNyZWF0ZUVtYmVkZGVkRWxlbWVudHNNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tdXRhdGlvbk9ic2VydmVyO1xuICB9XG4gIHByaXZhdGUgX2ludGVyc2VjdGlvbk9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBnZXQgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICAgIGlmICghdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyID0gdGhpcy5jcmVhdGVNb2RhbFdyYXBwZXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIH1cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcmF3ZXInKVxuICBnZXQgX2lzRHJhd2VyKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInO1xuICB9XG5cbiAgd2lsbENsb3NlJCA9IHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5waXBlKGZpcnN0KCkpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHdpbmRvd1JlZjogV2luZG93UmVmLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNldFZpZXdwb3J0SGVpZ2h0KCk7XG4gICAgdGhpcy5vYnNlcnZlVmlld3BvcnRSZXNpemUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnaW9uLW1vZGFsJyk7XG4gICAgdGhpcy5pbml0aWFsaXplU2l6aW5nKCk7XG4gICAgdGhpcy5pbml0aWFsaXplTW9kYWxSb3V0ZSgpO1xuICAgIHRoaXMubGlzdGVuRm9ySW9uTW9kYWxEaWRQcmVzZW50KCk7XG4gICAgdGhpcy5saXN0ZW5Gb3JJb25Nb2RhbFdpbGxEaXNtaXNzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplTW9kYWxUb01vZGFsV3JhcHBlcigpO1xuICAgIHRoaXMuY29tcG9uZW50UHJvcHNJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTVBPTkVOVF9QUk9QUywgdXNlVmFsdWU6IHRoaXMuY29uZmlnLmNvbXBvbmVudFByb3BzIH1dLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVzaXplTW9kYWxUb01vZGFsV3JhcHBlcigpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZmxhdm9yID09PSAnZHJhd2VyJyAmJiB0aGlzLmNvbmZpZy5pbnRlcmFjdFdpdGhCYWNrZ3JvdW5kKSB7XG4gICAgICBtZXJnZSh0aGlzLmlvbk1vZGFsRGlkUHJlc2VudCwgdGhpcy52aWV3cG9ydFJlc2l6ZSQpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgLy8gd2FpdCBmb3IgdGVtcGxhdGUgdG8gcmVuZGVyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb21SZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRvY3VtZW50LmNsaWVudFdpZHRoIC0gZG9tUmVjdC5yaWdodDtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pb25Nb2RhbEVsZW1lbnQsICd0b3AnLCBgJHtkb21SZWN0LnRvcH1weGApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmlvbk1vZGFsRWxlbWVudCwgJ2xlZnQnLCBgJHtkb21SZWN0LmxlZnR9cHhgKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pb25Nb2RhbEVsZW1lbnQsICdyaWdodCcsIGAke3JpZ2h0fXB4YCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVNpemluZygpIHtcbiAgICBpZiAodGhpcy5jb25maWcuc2l6ZSA9PT0gJ2Z1bGwtaGVpZ2h0JykgcmV0dXJuO1xuICAgIHRoaXMucGF0Y2hTY3JvbGxFbGVtZW50U2l6ZSgpO1xuICAgIHRoaXMub2JzZXJ2ZUhlYWRlclJlc2l6ZSgpO1xuICAgIHRoaXMub2JzZXJ2ZU1vZGFsRnVsbEhlaWdodCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTW9kYWxSb3V0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcubW9kYWxSb3V0ZSkge1xuICAgICAgdGhpcy5vblNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkKHRoaXMuY29uZmlnLnNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJCk7XG4gICAgICAvLyBMb2FkIGNvbXBvbmVudCBmcm9tIG1vZGFsLXJvdXRlIGluc2lkZSByb3V0ZXItb3V0bGV0OlxuICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuYWN0aXZhdGVXaXRoKHRoaXMuY29uZmlnLm1vZGFsUm91dGUsIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uU2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQoc2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQkPzogT2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZT4pIHtcbiAgICBpZiAoIXNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJCkgcmV0dXJuO1xuICAgIHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJC5waXBlKHRha2VVbnRpbCh0aGlzLndpbGxDbG9zZSQpKS5zdWJzY3JpYmUoKHJvdXRlKSA9PiB7XG4gICAgICBpZiAodGhpcy5yb3V0ZXJPdXRsZXQuaXNBY3RpdmF0ZWQpIHtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyRW1iZWRkZWRFbGVtZW50cygpO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuYWN0aXZhdGVXaXRoKHJvdXRlLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gICAgICB0aGlzLmNoZWNrRm9yRW1iZWRkZWRFbGVtZW50cygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaFNjcm9sbEVsZW1lbnRTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1cHBvcnRzQ3NzU2hhZG93UGFydHMgPSAncGFydCcgaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlO1xuICAgIGlmIChzdXBwb3J0c0Nzc1NoYWRvd1BhcnRzKSByZXR1cm47XG4gICAgdGhpcy5pb25Db250ZW50LmdldFNjcm9sbEVsZW1lbnQoKS50aGVuKChzY3JvbGxFbGVtZW50KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNjcm9sbEVsZW1lbnQsICdoZWlnaHQnLCAnMTAwJScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzY3JvbGxFbGVtZW50LCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgc2Nyb2xsRWxlbWVudCxcbiAgICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICAgJ3BhZGRpbmctYm90dG9tICcgKyBEZXNpZ25Ub2tlbkhlbHBlci5zb2Z0S2V5Ym9hcmRUcmFuc2l0aW9uTGVhdmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZU1vZGFsRnVsbEhlaWdodCgpIHtcbiAgICBjb25zdCBpb25Nb2RhbFdyYXBwZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0PEhUTUxFbGVtZW50PignLm1vZGFsLXdyYXBwZXInKTtcbiAgICBpZiAoIWlvbk1vZGFsV3JhcHBlcikgcmV0dXJuO1xuICAgIC8vIFN0YXJ0IG9ic2VydmluZyB3aGVuIG1vZGFsIGhhcyBmaW5pc2hlZCBhbmltYXRpbmc6XG4gICAgdGhpcy5kaWRQcmVzZW50LnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKGlvbk1vZGFsV3JhcHBlcik7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9vbGJhckJ1dHRvbnNRdWVyeSkge1xuICAgICAgdGhpcy50b29sYmFyQnV0dG9ucyA9IHRoaXMudG9vbGJhckJ1dHRvbnNRdWVyeS5tYXAoKGJ1dHRvblJlZikgPT4gYnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrRm9yRW1iZWRkZWRFbGVtZW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckVtYmVkZGVkRWxlbWVudHMoKSB7XG4gICAgdGhpcy5tb3ZlRW1iZWRkZWRFbGVtZW50cygpO1xuICAgIHRoaXMub2JzZXJ2ZUVtYmVkZGVkRWxlbWVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUhlYWRlclJlc2l6ZSgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuaW9uSGVhZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IFtwcm9wZXJ0eSwgcGl4ZWxWYWx1ZV0gPSBbJy0taGVhZGVyLWhlaWdodCcsIGAke2VudHJ5LmNvbnRlbnRSZWN0LmhlaWdodH1weGBdO1xuICAgICAgdGhpcy5zZXRDc3NWYXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHByb3BlcnR5LCBwaXhlbFZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUVtYmVkZGVkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0RW1iZWRkZWRDb21wb25lbnRFbGVtZW50KCk7XG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZWxlbWVudFRvUGFyZW50TWFwKS5mb3JFYWNoKChbdGFnTmFtZSwgZ2V0TmV3UGFyZW50XSkgPT4ge1xuICAgICAgICBjb25zdCBlbWJlZGRlZEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHRhZ05hbWUpO1xuICAgICAgICBpZiAoZW1iZWRkZWRFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5tb3ZlQ2hpbGQoZW1iZWRkZWRFbGVtZW50LCBnZXROZXdQYXJlbnQoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9ySW9uTW9kYWxEaWRQcmVzZW50KCkge1xuICAgIGlmICh0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW9uTW9kYWxEaWRQcmVzZW50JywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC5uZXh0KCk7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcklvbk1vZGFsV2lsbERpc21pc3MoKSB7XG4gICAgaWYgKHRoaXMuaW9uTW9kYWxFbGVtZW50KSB7XG4gICAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb2RhbFdpbGxEaXNtaXNzJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MubmV4dCgpO1xuICAgICAgICB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvVG9wKHNjcm9sbER1cmF0aW9uPzogS2lyYnlBbmltYXRpb24uRHVyYXRpb24pIHtcbiAgICB0aGlzLmlvbkNvbnRlbnQuc2Nyb2xsVG9Ub3Aoc2Nyb2xsRHVyYXRpb24gfHwgMCk7XG4gIH1cblxuICBzY3JvbGxUb0JvdHRvbShzY3JvbGxEdXJhdGlvbj86IEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uKSB7XG4gICAgdGhpcy5pb25Db250ZW50LnNjcm9sbFRvQm90dG9tKHNjcm9sbER1cmF0aW9uIHx8IDApO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZGF0YT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleWJvYXJkVmlzaWJsZSB8fCAhdGhpcy52aWV3cG9ydFJlc2l6ZWQpIHtcbiAgICAgIC8vIE5vIGtleWJvYXJkIHZpc2libGUgb3Igdmlld3BvcnQgbm90IHJlc2l6ZWQ6XG4gICAgICAvLyBEaXNtaXNzIG1vZGFsIGFuZCByZXR1cm46XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheWVkQ2xvc2VUaW1lb3V0SWQpO1xuICAgICAgYXdhaXQgdGhpcy5pb25Nb2RhbEVsZW1lbnQuZGlzbWlzcyhkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCB2aXNpYmxlOlxuICAgIC8vIEJsdXIgYWN0aXZlIGVsZW1lbnQgYW5kIHdhaXQgZm9yIGtleWJvYXJkIHRvIGhpZGUsXG4gICAgLy8gdGhlbiBkaXNtaXNzIG1vZGFsIGFuZCByZXR1cm46XG4gICAgdGhpcy5ibHVyQWN0aXZlRWxlbWVudCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5kZWxheWVkQ2xvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9uTW9kYWxFbGVtZW50LmRpc21pc3MoZGF0YSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmRlbGF5ZWRDbG9zZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgIHRoaXMuZGVsYXllZENsb3NlLFxuICAgICAgICBNb2RhbFdyYXBwZXJDb21wb25lbnQuS0VZQk9BUkRfSElERV9ERUxBWV9JTl9NU1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1cycpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcpXG4gIG9uRm9jdXNDaGFuZ2UoKSB7XG4gICAgLy8gVGhpcyBmaXhlcyBhbiB1bmRlc2lyZWQgc2Nyb2xsIGJlaGF2aW91ciBvY2N1cnJpbmcgb24ga2V5Ym9hcmQtdGFiYmluZyBiYWNrd2FyZHMgKHdpdGggc2hpZnQrdGFiKTpcbiAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRoaXMuc2Nyb2xsWSB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzppb25LZXlib2FyZERpZFNob3cnLCBbJyRldmVudC5kZXRhaWwua2V5Ym9hcmRIZWlnaHQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbFNob3cnLCBbJyRldmVudC5rZXlib2FyZEhlaWdodCddKVxuICBfb25LZXlib2FyZFNob3coa2V5Ym9hcmRIZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuc2V0S2V5Ym9hcmRWaXNpYmlsaXR5KGtleWJvYXJkSGVpZ2h0KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzppb25LZXlib2FyZERpZEhpZGUnKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5Ym9hcmRXaWxsSGlkZScpXG4gIF9vbktleWJvYXJkSGlkZSgpIHtcbiAgICB0aGlzLnNldEtleWJvYXJkVmlzaWJpbGl0eSgwKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQ29udGVudE1heEhlaWdodChmcmVlemU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzaG91bGRUb2dnbGVNYXhIZWlnaHQgPVxuICAgICAgdGhpcy5jb25maWcuZmxhdm9yID09PSAnbW9kYWwnICYmIHRoaXMucGxhdGZvcm0uaXNQaGFibGV0T3JCaWdnZXIoKTtcbiAgICBpZiAoIXNob3VsZFRvZ2dsZU1heEhlaWdodCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0eWxlID0gJ21heC1oZWlnaHQnO1xuICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgaWYgKGZyZWV6ZSkge1xuICAgICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gY29udGVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbnRlbnRFbGVtZW50LCBzdHlsZSwgYCR7Y29udGVudEhlaWdodH1weGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShjb250ZW50RWxlbWVudCwgc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlib2FyZFZpc2liaWxpdHkoa2V5Ym9hcmRIZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGtleWJvYXJkQWxyZWFkeVZpc2libGUgPSBrZXlib2FyZEhlaWdodCA+IDAgJiYgdGhpcy5rZXlib2FyZFZpc2libGU7XG4gICAgY29uc3Qga2V5Ym9hcmRBbHJlYWR5SGlkZGVuID0ga2V5Ym9hcmRIZWlnaHQgPT09IDAgJiYgIXRoaXMua2V5Ym9hcmRWaXNpYmxlO1xuICAgIGlmIChrZXlib2FyZEFscmVhZHlWaXNpYmxlIHx8IGtleWJvYXJkQWxyZWFkeUhpZGRlbikgcmV0dXJuO1xuICAgIHRoaXMua2V5Ym9hcmRWaXNpYmxlID0ga2V5Ym9hcmRIZWlnaHQgPiAwO1xuICAgIHRoaXMudG9nZ2xlQ29udGVudE1heEhlaWdodCh0aGlzLmtleWJvYXJkVmlzaWJsZSk7XG4gICAgdGhpcy5zZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQ6IG51bWJlciwgZWxlbWVudDogRWxlbWVudCkge1xuICAgIGlmIChrZXlib2FyZEhlaWdodCA8PSAwIHx8ICFlbGVtZW50KSByZXR1cm4gMDtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21WaWV3cG9ydEJvdHRvbVRvRWxlbWVudCA9IE1hdGguZmxvb3IoXG4gICAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuaW5uZXJIZWlnaHQgLSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KGtleWJvYXJkSGVpZ2h0IC0gZGlzdGFuY2VGcm9tVmlld3BvcnRCb3R0b21Ub0VsZW1lbnQsIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDc3NWYXIoZWxlbWVudDogRWxlbWVudCwgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT5cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUNzc0NsYXNzKGVsZW1lbnQ6IEVsZW1lbnQsIGtsYXNzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbikge1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT5cbiAgICAgIGNvbmRpdGlvbiA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwga2xhc3MpIDogdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbGVtZW50LCBrbGFzcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMudG9nZ2xlQ3NzQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrZXlib2FyZC12aXNpYmxlJywga2V5Ym9hcmRIZWlnaHQgPiAwKTtcbiAgICBjb25zdCBrZXlib2FyZE92ZXJsYXAgPSB0aGlzLmdldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGxldCBzbmFwRm9vdGVyVG9LZXlib2FyZCA9IGZhbHNlO1xuICAgIGNvbnN0IGVtYmVkZGVkRm9vdGVyRWxlbWVudCA9IHRoaXMuZ2V0RW1iZWRkZWRGb290ZXJFbGVtZW50KCk7XG4gICAgaWYgKGVtYmVkZGVkRm9vdGVyRWxlbWVudCkge1xuICAgICAgdGhpcy5zZXRDc3NWYXIoZW1iZWRkZWRGb290ZXJFbGVtZW50LCAnLS1rZXlib2FyZC1vZmZzZXQnLCBgJHtrZXlib2FyZE92ZXJsYXB9cHhgKTtcbiAgICAgIHNuYXBGb290ZXJUb0tleWJvYXJkID0gZW1iZWRkZWRGb290ZXJFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnc25hcC10by1rZXlib2FyZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNvbnRlbnRLZXlib2FyZE9mZnNldCA9IHNuYXBGb290ZXJUb0tleWJvYXJkXG4gICAgICA/IGtleWJvYXJkT3ZlcmxhcFxuICAgICAgOiB0aGlzLmdldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodCwgY29udGVudEVsZW1lbnQpO1xuICAgIHRoaXMuc2V0Q3NzVmFyKGNvbnRlbnRFbGVtZW50LCAnLS1rZXlib2FyZC1vZmZzZXQnLCBgJHtjb250ZW50S2V5Ym9hcmRPZmZzZXR9cHhgKTtcbiAgfVxuXG4gIG9uSGVhZGVyVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmtleWJvYXJkVmlzaWJsZSkge1xuICAgICAgY29uc3QgaXNUb29sYmFyQnV0dG9uVG91Y2ggPSB0aGlzLnRvb2xiYXJCdXR0b25zLnNvbWUoKGJ1dHRvbikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgKGV2ZW50LnRhcmdldCA9PT0gYnV0dG9uIHx8IGJ1dHRvbi5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICAvLyBQcmV2ZW50IGJsdXIgaWYgZXZlbnQgdGFyZ2V0IGlzIGEgdG9vbGJhciBidXR0b25cbiAgICAgIC8vICh0byBhbGxvdyB0YXAgZXZlbnQgdG8gZmlyZSk6XG4gICAgICBpZiAoIWlzVG9vbGJhckJ1dHRvblRvdWNoKSB7XG4gICAgICAgIHRoaXMuYmx1ckFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgX29uV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuc2V0Vmlld3BvcnRIZWlnaHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Vmlld3BvcnRIZWlnaHQoKSB7XG4gICAgY29uc3QgdmggPSAodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmlubmVySGVpZ2h0ICogMC4wMSkudG9GaXhlZCgyKTtcbiAgICB0aGlzLnNldENzc1Zhcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJy0tdmgnLCBgJHt2aH1weGApO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVmlld3BvcnRSZXNpemUoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuYm9keSwgKGVudHJ5KSA9PlxuICAgICAgdGhpcy5vblZpZXdwb3J0UmVzaXplKGVudHJ5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uVmlld3BvcnRSZXNpemUoZW50cnk6IFJlc2l6ZU9ic2VydmVyRW50cnkpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgICAvLyBJbml0aWFsIG9ic2VydmUgY2FsbGJhY2ssIHJlZ2lzdGVyIGluaXRpYWwgaGVpZ2h0OlxuICAgICAgdGhpcy5pbml0aWFsVmlld3BvcnRIZWlnaHQgPSBlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld3BvcnRSZXNpemVkID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0ICE9PSB0aGlzLmluaXRpYWxWaWV3cG9ydEhlaWdodDtcbiAgICBpZiAoIXRoaXMudmlld3BvcnRSZXNpemVkKSB7XG4gICAgICAvLyBXZSBhcmUgYmFjayB0byBpbml0aWFsIHZpZXcgcG9ydCBoZWlnaHQsIGNoZWNrIGZvciBwZW5kaW5nIGNsb3NlIGZ1bmM6XG4gICAgICBpZiAodGhpcy5kZWxheWVkQ2xvc2VUaW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXllZENsb3NlVGltZW91dElkKTtcbiAgICAgICAgdGhpcy5kZWxheWVkQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52aWV3cG9ydFJlc2l6ZS5uZXh0KCk7XG4gIH1cblxuICBibHVyQWN0aXZlRWxlbWVudCgpIHtcbiAgICBjb25zdCBCTFVSX1RBUkdFVF9TRUxFQ1RPUiA9ICdpbnB1dCwgdGV4dGFyZWEnO1xuICAgIGlmICh0aGlzLmtleWJvYXJkVmlzaWJsZSkge1xuICAgICAgaWYgKFxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5tYXRjaGVzKEJMVVJfVEFSR0VUX1NFTEVDVE9SKVxuICAgICAgKSB7XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFRvUGFyZW50TWFwOiB7IFtrZXk6IHN0cmluZ106ICgpID0+IEhUTUxFbGVtZW50IH0gPSB7XG4gICAgJ0tJUkJZLU1PREFMLUZPT1RFUic6ICgpID0+IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICdLSVJCWS1QQUdFLVRJVExFJzogKCkgPT4gdGhpcy5pb25UaXRsZUVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAnS0lSQlktUEFHRS1QUk9HUkVTUyc6ICgpID0+IHRoaXMuaW9uVG9vbGJhckVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgfTtcblxuICBwcml2YXRlIGNsZWFyRW1iZWRkZWRFbGVtZW50cygpIHtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmVsZW1lbnRUb1BhcmVudE1hcCkuZm9yRWFjaCgoW3RhZ05hbWUsIGdldFBhcmVudF0pID0+IHtcbiAgICAgIGNvbnN0IGVtYmVkZGVkRWxlbWVudCA9IGdldFBhcmVudCgpLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGA6c2NvcGUgPiAke3RhZ05hbWV9YCk7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKGVtYmVkZGVkRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVtYmVkZGVkQ29tcG9uZW50RWxlbWVudCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5tb2RhbFJvdXRlXG4gICAgICA/IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5sYXN0RWxlbWVudENoaWxkXG4gICAgICA6IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1iZWRkZWRGb290ZXJFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pigna2lyYnktbW9kYWwtZm9vdGVyJyk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVDaGlsZChjaGlsZDogRWxlbWVudCwgbmV3UGFyZW50OiBFbGVtZW50KSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnRFbGVtZW50LCBjaGlsZCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChuZXdQYXJlbnQsIGNoaWxkKTtcbiAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gJ0tJUkJZLU1PREFMLUZPT1RFUicpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUoY2hpbGQsIChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBbcHJvcGVydHksIHBpeGVsVmFsdWVdID0gW1xuICAgICAgICAgICctLWZvb3Rlci1oZWlnaHQnLFxuICAgICAgICAgIGAke01hdGguZmxvb3IoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0KX1weGAsXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuc2V0Q3NzVmFyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwcm9wZXJ0eSwgcGl4ZWxWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNoaWxkKGNoaWxkPzogRWxlbWVudCkge1xuICAgIGlmICghIWNoaWxkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGNoaWxkLnBhcmVudEVsZW1lbnQsIGNoaWxkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVFbWJlZGRlZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLmdldEVtYmVkZGVkQ29tcG9uZW50RWxlbWVudCgpO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQsIHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSwgLy8gTGlzdGVuIGZvciBhZGRpdGlvbiBvciByZW1vdmFsIG9mIGNoaWxkIG5vZGVzXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVtYmVkZGVkRWxlbWVudHNNdXRhdGlvbk9ic2VydmVyKCk6IE11dGF0aW9uT2JzZXJ2ZXIge1xuICAgIGNvbnN0IG9ic2VydmVkRWxlbWVudHMgPSBPYmplY3Qua2V5cyh0aGlzLmVsZW1lbnRUb1BhcmVudE1hcCk7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICBjb25zdCBhZGRlZE5vZGVzID0gbXV0YXRpb25zXG4gICAgICAgIC5maWx0ZXIoKG11dGF0aW9uKSA9PiBtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JykgLy8gRmlsdGVyIGZvciBtdXRhdGlvbiB0byB0aGUgdHJlZSBvZiBub2Rlc1xuICAgICAgICAubWFwKChtdXRhdGlvbikgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgY2hlY2sgZm9yIGFkZGVkTm9kZXMgYXMgcmVtb3ZhbCBpcyBoYW5kbGVkIGJ5IHRoZSBBbmd1bGFyIHJlbmRlcmVyOlxuICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLmZpbHRlcigobm9kZSkgPT5cbiAgICAgICAgICAgIG9ic2VydmVkRWxlbWVudHMuaW5jbHVkZXMobm9kZS5ub2RlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgYWRkZWRFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZVxuICAgICAgICAuY29uY2F0KC4uLmFkZGVkTm9kZXMpXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpOiBub2RlIGlzIEhUTUxFbGVtZW50ID0+IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCk7XG5cbiAgICAgIGFkZGVkRWxlbWVudHMuZm9yRWFjaCgoYWRkZWRFbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRUb1BhcmVudE1hcFthZGRlZEVsZW1lbnQubm9kZU5hbWVdKCk7XG4gICAgICAgIC8vIE1vdmUgZW1iZWRkZWQgZWxlbWVudCBvdXQgb2YgY29udGVudCBhbmQgYXBwZW5kIHRvIG5ldyBwYXJlbnQ6XG4gICAgICAgIHRoaXMubW92ZUNoaWxkKGFkZGVkRWxlbWVudCwgbmV3UGFyZW50RWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vZGFsV3JhcHBlckludGVyc2VjdGlvbk9ic2VydmVyKCk6IEludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICBjb25zdCBpc1RvdWNoaW5nVmlld3BvcnQgPSBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDE7XG4gICAgICBpZiAoaXNUb3VjaGluZ1ZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZW50cnkudGFyZ2V0LCAnZnVsbC1oZWlnaHQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZW50cnkudGFyZ2V0LCAnZnVsbC1oZWlnaHQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU2V0IGV4cGxpY2l0IHZpZXdwb3J0IHJvb3QgaWYgd2l0aGluIGlmcmFtZTpcbiAgICBjb25zdCByb290ID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmZyYW1lRWxlbWVudFxuICAgICAgPyAodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50IGFzIGFueSkgLy8gQ2FzdCB0byBgYW55YCBhcyBUeXBlc2NyaXB0IGxpYi5kLnRzIGRvZXNudCBzdXBwb3J0IERvY3VtZW50IHR5cGUgeWV0XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvcHRpb25zOiBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQgPSB7XG4gICAgICByb290TWFyZ2luOiAnMHB4IDBweCAtMXB4IDBweCcsIC8vIGBib3R0b206IC0xcHhgIGFsbG93cyBjaGVja2luZyB3aGVuIHRoZSBtb2RhbCBib3R0b20gaXMgdG91Y2hpbmcgdGhlIHZpZXdwb3J0XG4gICAgICByb290LFxuICAgICAgdGhyZXNob2xkOiBbMC45OSwgMV0sXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucm91dGVyT3V0bGV0LmlzQWN0aXZhdGVkKSB7XG4gICAgICB0aGlzLnJvdXRlck91dGxldC5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICAgIC8vY2xlYW4gdXAgdGhlIG9ic2VydmVyXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5fbXV0YXRpb25PYnNlcnZlcjtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmJvZHkpO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuaW9uSGVhZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLnVub2JzZXJ2ZSh0aGlzLmdldEVtYmVkZGVkRm9vdGVyRWxlbWVudCgpKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
472
+ /** @nocollapse */ ModalWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ModalWrapperComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.ResizeObserverService }, { token: i0.ComponentFactoryResolver }, { token: i2.WindowRef }, { token: i3.PlatformService }], target: i0.ɵɵFactoryTarget.Component });
473
+ /** @nocollapse */ ModalWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ModalWrapperComponent, selector: "kirby-modal-wrapper", inputs: { config: "config" }, host: { listeners: { "window:focus": "onFocusChange()", "window:focusout": "onFocusChange()", "window:ionKeyboardDidShow": "_onKeyboardShow($event.detail.keyboardHeight)", "window:keyboardWillShow": "_onKeyboardShow($event.keyboardHeight)", "window:ionKeyboardDidHide": "_onKeyboardHide()", "window:keyboardWillHide": "_onKeyboardHide()", "window:resize": "_onWindowResize()" }, properties: { "class.collapsible-title": "this._hasCollapsibleTitle", "class.drawer": "this._isDrawer" } }, providers: [{ provide: Modal, useExisting: ModalWrapperComponent }], viewQueries: [{ propertyName: "ionContent", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: "ionContentElement", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: "ionHeaderElement", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: "ionToolbarElement", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: "ionTitleElement", first: true, predicate: IonTitle, descendants: true, read: ElementRef, static: true }, { propertyName: "routerOutlet", first: true, predicate: RouterOutlet, descendants: true, static: true }, { propertyName: "contentTitle", first: true, predicate: ["contentTitle"], descendants: true, read: ElementRef }, { propertyName: "toolbarButtonsQuery", predicate: ButtonComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<ion-header (touchstart)=\"onHeaderTouchStart($event)\">\n <ion-toolbar>\n <ion-title></ion-title>\n <ion-buttons slot=\"start\" *ngIf=\"config.flavor === 'drawer'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'arrow-down' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'modal'\">\n <ng-container *ngTemplateOutlet=\"closeButton; context: { icon: 'close' }\"></ng-container>\n </ion-buttons>\n <ion-buttons slot=\"end\" *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\">\n <ng-container\n *ngTemplateOutlet=\"supplementaryButton; context: { btn: config.drawerSupplementaryAction }\"\n ></ng-container>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"true\">\n <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-large\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n\n<ng-template #closeButton let-icon=\"icon\">\n <button kirby-button attentionLevel=\"4\" size=\"sm\" (click)=\"close()\">\n <kirby-icon [name]=\"icon\"></kirby-icon>\n </button>\n</ng-template>\n\n<ng-template #supplementaryButton let-btn=\"btn\">\n <button kirby-button attentionLevel=\"2\" size=\"sm\" (click)=\"btn.action($event)\">\n <kirby-icon [name]=\"btn.iconName\"></kirby-icon>\n </button>\n</ng-template>\n", styles: ["ion-header ion-toolbar{--padding-start: 16px;--padding-end: 16px;--padding-bottom: 16px;--padding-top: 16px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black))}ion-header ion-toolbar button{color:var(--color)}@media (min-width: 721px){ion-header ion-toolbar{padding-top:8px}}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}@media (min-width: 721px){:host-context(ion-modal:not(.kirby-modal-full-height)){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer{padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal:not(.kirby-modal-full-height)).drawer.drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:var(--kirby-safe-area-top, 0)}@media (min-width: 721px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:8px}}ion-title{box-sizing:border-box;padding-inline-start:calc(48px + var(--padding-start));padding-inline-end:calc(48px + var(--padding-end));font-size:22px;font-weight:700}:host(.drawer) ion-title{font-size:18px}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));display:flex;flex-direction:column;--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 721px){ion-content{--padding-start: 56px;--padding-end: 56px}}:host(.collapsible-title) ion-content{--padding-top: 0px}:host(.collapsible-title) ion-content ion-header ion-toolbar:first-of-type{padding-top:0;--padding-top: 0px;--padding-bottom: 0px;--padding-start: 0px;--padding-end: 0px}:host(.collapsible-title) ion-title{font-size:16px;font-weight:700}\n"], components: [{ type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { type: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { type: i5.ButtonComponent, selector: "button[kirby-button],Button[kirby-button]", inputs: ["attentionLevel", "isDestructive", "themeColor", "expand", "isFloating", "size"] }, { type: i6.IconComponent, selector: "kirby-icon", inputs: ["size", "name", "customName"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i8.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }] });
474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ModalWrapperComponent, decorators: [{
475
+ type: Component,
476
+ args: [{
477
+ selector: 'kirby-modal-wrapper',
478
+ templateUrl: './modal-wrapper.component.html',
479
+ styleUrls: ['./modal-wrapper.component.scss'],
480
+ providers: [{ provide: Modal, useExisting: ModalWrapperComponent }],
481
+ }]
482
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.ResizeObserverService }, { type: i0.ComponentFactoryResolver }, { type: i2.WindowRef }, { type: i3.PlatformService }]; }, propDecorators: { _hasCollapsibleTitle: [{
483
+ type: HostBinding,
484
+ args: ['class.collapsible-title']
485
+ }], config: [{
486
+ type: Input
487
+ }], toolbarButtonsQuery: [{
488
+ type: ViewChildren,
489
+ args: [ButtonComponent, { read: ElementRef }]
490
+ }], ionContent: [{
491
+ type: ViewChild,
492
+ args: [IonContent, { static: true }]
493
+ }], ionContentElement: [{
494
+ type: ViewChild,
495
+ args: [IonContent, { static: true, read: ElementRef }]
496
+ }], ionHeaderElement: [{
497
+ type: ViewChild,
498
+ args: [IonHeader, { static: true, read: ElementRef }]
499
+ }], ionToolbarElement: [{
500
+ type: ViewChild,
501
+ args: [IonToolbar, { static: true, read: ElementRef }]
502
+ }], ionTitleElement: [{
503
+ type: ViewChild,
504
+ args: [IonTitle, { static: true, read: ElementRef }]
505
+ }], routerOutlet: [{
506
+ type: ViewChild,
507
+ args: [RouterOutlet, { static: true }]
508
+ }], contentTitle: [{
509
+ type: ViewChild,
510
+ args: ['contentTitle', { read: ElementRef }]
511
+ }], _isDrawer: [{
512
+ type: HostBinding,
513
+ args: ['class.drawer']
514
+ }], onFocusChange: [{
515
+ type: HostListener,
516
+ args: ['window:focus']
517
+ }, {
518
+ type: HostListener,
519
+ args: ['window:focusout']
520
+ }], _onKeyboardShow: [{
521
+ type: HostListener,
522
+ args: ['window:ionKeyboardDidShow', ['$event.detail.keyboardHeight']]
523
+ }, {
524
+ type: HostListener,
525
+ args: ['window:keyboardWillShow', ['$event.keyboardHeight']]
526
+ }], _onKeyboardHide: [{
527
+ type: HostListener,
528
+ args: ['window:ionKeyboardDidHide']
529
+ }, {
530
+ type: HostListener,
531
+ args: ['window:keyboardWillHide']
532
+ }], _onWindowResize: [{
533
+ type: HostListener,
534
+ args: ['window:resize']
535
+ }] } });
536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Rlc2lnbnN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvbW9kYWwvbW9kYWwtd3JhcHBlci9tb2RhbC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGVzaWduc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9tb2RhbC13cmFwcGVyL21vZGFsLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUNULFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FB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QUExRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRS9CLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBR2pELGdCQUFnQjtzQkFEdkIsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBR2hELGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBR2pELGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUVKLFlBQVk7c0JBQTlELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHakMsWUFBWTtzQkFEbkIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQW1DM0MsU0FBUztzQkFEWixXQUFXO3VCQUFDLGNBQWM7Z0JBZ00zQixhQUFhO3NCQUZaLFlBQVk7dUJBQUMsY0FBYzs7c0JBQzNCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQVEvQixlQUFlO3NCQUZkLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQzs7c0JBQzFFLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFPbEUsZUFBZTtzQkFGZCxZQUFZO3VCQUFDLDJCQUEyQjs7c0JBQ3hDLFlBQVk7dUJBQUMseUJBQXlCO2dCQW9GdkMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25Db250ZW50LCBJb25IZWFkZXIsIElvblRpdGxlLCBJb25Ub29sYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRGVzaWduVG9rZW5IZWxwZXIgfSBmcm9tICdAa2lyYnlkZXNpZ24vY29yZSc7XG5cbmltcG9ydCB7IEtpcmJ5QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vYW5pbWF0aW9uL2tpcmJ5LWFuaW1hdGlvbic7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvd2luZG93LXJlZic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyRW50cnkgfSBmcm9tICcuLi8uLi9zaGFyZWQvcmVzaXplLW9ic2VydmVyL3R5cGVzL3Jlc2l6ZS1vYnNlcnZlci1lbnRyeSc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLmludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBNb2RhbENvbmZpZyB9IGZyb20gJy4vY29uZmlnL21vZGFsLWNvbmZpZyc7XG5pbXBvcnQgeyBDT01QT05FTlRfUFJPUFMgfSBmcm9tICcuL2NvbmZpZy9tb2RhbC1jb25maWcuaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2lyYnktbW9kYWwtd3JhcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtd3JhcHBlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1vZGFsLCB1c2VFeGlzdGluZzogTW9kYWxXcmFwcGVyQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBNb2RhbCwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbGxhcHNpYmxlLXRpdGxlJylcbiAgZ2V0IF9oYXNDb2xsYXBzaWJsZVRpdGxlKCkge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnPy5jb2xsYXBzZVRpdGxlO1xuICB9XG5cbiAgc3RhdGljIHJlYWRvbmx5IEtFWUJPQVJEX0hJREVfREVMQVlfSU5fTVMgPSAxMDA7XG5cbiAgc2Nyb2xsWTogbnVtYmVyID0gTWF0aC5hYnModGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LnNjcm9sbFkpO1xuICBwcml2YXRlIHJlYWRvbmx5IFZJRVdQT1JUX1JFU0laRV9ERUJPVU5DRV9USU1FID0gMTAwO1xuXG4gIHNldCBzY3JvbGxEaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuaW9uQ29udGVudC5zY3JvbGxZID0gIWRpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KCkgY29uZmlnOiBNb2RhbENvbmZpZztcbiAgY29tcG9uZW50UHJvcHNJbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgQFZpZXdDaGlsZHJlbihCdXR0b25Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRvb2xiYXJCdXR0b25zUXVlcnk6IFF1ZXJ5TGlzdDxcbiAgICBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PlxuICA+O1xuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgaW9uQ29udGVudDogSW9uQ29udGVudDtcbiAgQFZpZXdDaGlsZChJb25Db250ZW50LCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvbkNvbnRlbnRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25Db250ZW50RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uSGVhZGVyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvbkhlYWRlckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkhlYWRlckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvblRvb2xiYXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uVG9vbGJhckVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvblRvb2xiYXJFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25UaXRsZSwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25UaXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvblRpdGxlRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoUm91dGVyT3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHJvdXRlck91dGxldDogUm91dGVyT3V0bGV0O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRUaXRsZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGNvbnRlbnRUaXRsZTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBrZXlib2FyZFZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0b29sYmFyQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGRlbGF5ZWRDbG9zZSA9ICgpID0+IHt9O1xuICBwcml2YXRlIGRlbGF5ZWRDbG9zZVRpbWVvdXRJZDtcbiAgcHJpdmF0ZSBpbml0aWFsVmlld3BvcnRIZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpb25Nb2RhbEVsZW1lbnQ/OiBIVE1MSW9uTW9kYWxFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGlvbk1vZGFsRGlkUHJlc2VudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGRpZFByZXNlbnQgPSB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC50b1Byb21pc2UoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb25Nb2RhbFdpbGxEaXNtaXNzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgd2lsbENsb3NlID0gdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLnRvUHJvbWlzZSgpO1xuICBwcml2YXRlIHZpZXdwb3J0UmVzaXplID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZSQgPSB0aGlzLnZpZXdwb3J0UmVzaXplXG4gICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuVklFV1BPUlRfUkVTSVpFX0RFQk9VTkNFX1RJTUUpKTtcbiAgcHJpdmF0ZSBfbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBnZXQgbXV0YXRpb25PYnNlcnZlcigpOiBNdXRhdGlvbk9ic2VydmVyIHtcbiAgICBpZiAoIXRoaXMuX211dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX211dGF0aW9uT2JzZXJ2ZXIgPSB0aGlzLmNyZWF0ZUVtYmVkZGVkRWxlbWVudHNNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tdXRhdGlvbk9ic2VydmVyO1xuICB9XG4gIHByaXZhdGUgX2ludGVyc2VjdGlvbk9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSBnZXQgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICAgIGlmICghdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyID0gdGhpcy5jcmVhdGVNb2RhbFdyYXBwZXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIH1cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcmF3ZXInKVxuICBnZXQgX2lzRHJhd2VyKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInO1xuICB9XG5cbiAgd2lsbENsb3NlJCA9IHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5waXBlKGZpcnN0KCkpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHdpbmRvd1JlZjogV2luZG93UmVmLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNldFZpZXdwb3J0SGVpZ2h0KCk7XG4gICAgdGhpcy5vYnNlcnZlVmlld3BvcnRSZXNpemUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnaW9uLW1vZGFsJyk7XG4gICAgdGhpcy5pbml0aWFsaXplU2l6aW5nKCk7XG4gICAgdGhpcy5pbml0aWFsaXplTW9kYWxSb3V0ZSgpO1xuICAgIHRoaXMubGlzdGVuRm9ySW9uTW9kYWxEaWRQcmVzZW50KCk7XG4gICAgdGhpcy5saXN0ZW5Gb3JJb25Nb2RhbFdpbGxEaXNtaXNzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplUmVzaXplTW9kYWxUb01vZGFsV3JhcHBlcigpO1xuICAgIHRoaXMuY29tcG9uZW50UHJvcHNJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENPTVBPTkVOVF9QUk9QUywgdXNlVmFsdWU6IHRoaXMuY29uZmlnLmNvbXBvbmVudFByb3BzIH1dLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVzaXplTW9kYWxUb01vZGFsV3JhcHBlcigpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZmxhdm9yID09PSAnZHJhd2VyJyAmJiB0aGlzLmNvbmZpZy5pbnRlcmFjdFdpdGhCYWNrZ3JvdW5kKSB7XG4gICAgICBtZXJnZSh0aGlzLmlvbk1vZGFsRGlkUHJlc2VudCwgdGhpcy52aWV3cG9ydFJlc2l6ZSQpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgLy8gd2FpdCBmb3IgdGVtcGxhdGUgdG8gcmVuZGVyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb21SZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRvY3VtZW50LmNsaWVudFdpZHRoIC0gZG9tUmVjdC5yaWdodDtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pb25Nb2RhbEVsZW1lbnQsICd0b3AnLCBgJHtkb21SZWN0LnRvcH1weGApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmlvbk1vZGFsRWxlbWVudCwgJ2xlZnQnLCBgJHtkb21SZWN0LmxlZnR9cHhgKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pb25Nb2RhbEVsZW1lbnQsICdyaWdodCcsIGAke3JpZ2h0fXB4YCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVNpemluZygpIHtcbiAgICBpZiAodGhpcy5jb25maWcuc2l6ZSA9PT0gJ2Z1bGwtaGVpZ2h0JykgcmV0dXJuO1xuICAgIHRoaXMucGF0Y2hTY3JvbGxFbGVtZW50U2l6ZSgpO1xuICAgIHRoaXMub2JzZXJ2ZUhlYWRlclJlc2l6ZSgpO1xuICAgIHRoaXMub2JzZXJ2ZU1vZGFsRnVsbEhlaWdodCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTW9kYWxSb3V0ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcubW9kYWxSb3V0ZSkge1xuICAgICAgdGhpcy5vblNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkKHRoaXMuY29uZmlnLnNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJCk7XG4gICAgICAvLyBMb2FkIGNvbXBvbmVudCBmcm9tIG1vZGFsLXJvdXRlIGluc2lkZSByb3V0ZXItb3V0bGV0OlxuICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuYWN0aXZhdGVXaXRoKHRoaXMuY29uZmlnLm1vZGFsUm91dGUsIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uU2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQoc2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQkPzogT2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZT4pIHtcbiAgICBpZiAoIXNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJCkgcmV0dXJuO1xuICAgIHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJC5waXBlKHRha2VVbnRpbCh0aGlzLndpbGxDbG9zZSQpKS5zdWJzY3JpYmUoKHJvdXRlKSA9PiB7XG4gICAgICBpZiAodGhpcy5yb3V0ZXJPdXRsZXQuaXNBY3RpdmF0ZWQpIHtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuZGVhY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyRW1iZWRkZWRFbGVtZW50cygpO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuYWN0aXZhdGVXaXRoKHJvdXRlLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gICAgICB0aGlzLmNoZWNrRm9yRW1iZWRkZWRFbGVtZW50cygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaFNjcm9sbEVsZW1lbnRTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1cHBvcnRzQ3NzU2hhZG93UGFydHMgPSAncGFydCcgaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlO1xuICAgIGlmIChzdXBwb3J0c0Nzc1NoYWRvd1BhcnRzKSByZXR1cm47XG4gICAgdGhpcy5pb25Db250ZW50LmdldFNjcm9sbEVsZW1lbnQoKS50aGVuKChzY3JvbGxFbGVtZW50KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNjcm9sbEVsZW1lbnQsICdoZWlnaHQnLCAnMTAwJScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzY3JvbGxFbGVtZW50LCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgc2Nyb2xsRWxlbWVudCxcbiAgICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICAgJ3BhZGRpbmctYm90dG9tICcgKyBEZXNpZ25Ub2tlbkhlbHBlci5zb2Z0S2V5Ym9hcmRUcmFuc2l0aW9uTGVhdmVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZU1vZGFsRnVsbEhlaWdodCgpIHtcbiAgICBjb25zdCBpb25Nb2RhbFdyYXBwZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0PEhUTUxFbGVtZW50PignLm1vZGFsLXdyYXBwZXInKTtcbiAgICBpZiAoIWlvbk1vZGFsV3JhcHBlcikgcmV0dXJuO1xuICAgIC8vIFN0YXJ0IG9ic2VydmluZyB3aGVuIG1vZGFsIGhhcyBmaW5pc2hlZCBhbmltYXRpbmc6XG4gICAgdGhpcy5kaWRQcmVzZW50LnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKGlvbk1vZGFsV3JhcHBlcik7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9vbGJhckJ1dHRvbnNRdWVyeSkge1xuICAgICAgdGhpcy50b29sYmFyQnV0dG9ucyA9IHRoaXMudG9vbGJhckJ1dHRvbnNRdWVyeS5tYXAoKGJ1dHRvblJlZikgPT4gYnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrRm9yRW1iZWRkZWRFbGVtZW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckVtYmVkZGVkRWxlbWVudHMoKSB7XG4gICAgdGhpcy5tb3ZlRW1iZWRkZWRFbGVtZW50cygpO1xuICAgIHRoaXMub2JzZXJ2ZUVtYmVkZGVkRWxlbWVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUhlYWRlclJlc2l6ZSgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuaW9uSGVhZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IFtwcm9wZXJ0eSwgcGl4ZWxWYWx1ZV0gPSBbJy0taGVhZGVyLWhlaWdodCcsIGAke2VudHJ5LmNvbnRlbnRSZWN0LmhlaWdodH1weGBdO1xuICAgICAgdGhpcy5zZXRDc3NWYXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHByb3BlcnR5LCBwaXhlbFZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUVtYmVkZGVkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0RW1iZWRkZWRDb21wb25lbnRFbGVtZW50KCk7XG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZWxlbWVudFRvUGFyZW50TWFwKS5mb3JFYWNoKChbdGFnTmFtZSwgZ2V0TmV3UGFyZW50XSkgPT4ge1xuICAgICAgICBjb25zdCBlbWJlZGRlZEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KHRhZ05hbWUpO1xuICAgICAgICBpZiAoZW1iZWRkZWRFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5tb3ZlQ2hpbGQoZW1iZWRkZWRFbGVtZW50LCBnZXROZXdQYXJlbnQoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9ySW9uTW9kYWxEaWRQcmVzZW50KCkge1xuICAgIGlmICh0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW9uTW9kYWxEaWRQcmVzZW50JywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC5uZXh0KCk7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcklvbk1vZGFsV2lsbERpc21pc3MoKSB7XG4gICAgaWYgKHRoaXMuaW9uTW9kYWxFbGVtZW50KSB7XG4gICAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb2RhbFdpbGxEaXNtaXNzJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MubmV4dCgpO1xuICAgICAgICB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvVG9wKHNjcm9sbER1cmF0aW9uPzogS2lyYnlBbmltYXRpb24uRHVyYXRpb24pIHtcbiAgICB0aGlzLmlvbkNvbnRlbnQuc2Nyb2xsVG9Ub3Aoc2Nyb2xsRHVyYXRpb24gfHwgMCk7XG4gIH1cblxuICBzY3JvbGxUb0JvdHRvbShzY3JvbGxEdXJhdGlvbj86IEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uKSB7XG4gICAgdGhpcy5pb25Db250ZW50LnNjcm9sbFRvQm90dG9tKHNjcm9sbER1cmF0aW9uIHx8IDApO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZGF0YT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleWJvYXJkVmlzaWJsZSB8fCAhdGhpcy52aWV3cG9ydFJlc2l6ZWQpIHtcbiAgICAgIC8vIE5vIGtleWJvYXJkIHZpc2libGUgb3Igdmlld3BvcnQgbm90IHJlc2l6ZWQ6XG4gICAgICAvLyBEaXNtaXNzIG1vZGFsIGFuZCByZXR1cm46XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheWVkQ2xvc2VUaW1lb3V0SWQpO1xuICAgICAgYXdhaXQgdGhpcy5pb25Nb2RhbEVsZW1lbnQuZGlzbWlzcyhkYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCB2aXNpYmxlOlxuICAgIC8vIEJsdXIgYWN0aXZlIGVsZW1lbnQgYW5kIHdhaXQgZm9yIGtleWJvYXJkIHRvIGhpZGUsXG4gICAgLy8gdGhlbiBkaXNtaXNzIG1vZGFsIGFuZCByZXR1cm46XG4gICAgdGhpcy5ibHVyQWN0aXZlRWxlbWVudCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5kZWxheWVkQ2xvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9uTW9kYWxFbGVtZW50LmRpc21pc3MoZGF0YSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmRlbGF5ZWRDbG9zZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXG4gICAgICAgIHRoaXMuZGVsYXllZENsb3NlLFxuICAgICAgICBNb2RhbFdyYXBwZXJDb21wb25lbnQuS0VZQk9BUkRfSElERV9ERUxBWV9JTl9NU1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1cycpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcpXG4gIG9uRm9jdXNDaGFuZ2UoKSB7XG4gICAgLy8gVGhpcyBmaXhlcyBhbiB1bmRlc2lyZWQgc2Nyb2xsIGJlaGF2aW91ciBvY2N1cnJpbmcgb24ga2V5Ym9hcmQtdGFiYmluZyBiYWNrd2FyZHMgKHdpdGggc2hpZnQrdGFiKTpcbiAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHRoaXMuc2Nyb2xsWSB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzppb25LZXlib2FyZERpZFNob3cnLCBbJyRldmVudC5kZXRhaWwua2V5Ym9hcmRIZWlnaHQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbFNob3cnLCBbJyRldmVudC5rZXlib2FyZEhlaWdodCddKVxuICBfb25LZXlib2FyZFNob3coa2V5Ym9hcmRIZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuc2V0S2V5Ym9hcmRWaXNpYmlsaXR5KGtleWJvYXJkSGVpZ2h0KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzppb25LZXlib2FyZERpZEhpZGUnKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5Ym9hcmRXaWxsSGlkZScpXG4gIF9vbktleWJvYXJkSGlkZSgpIHtcbiAgICB0aGlzLnNldEtleWJvYXJkVmlzaWJpbGl0eSgwKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQ29udGVudE1heEhlaWdodChmcmVlemU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzaG91bGRUb2dnbGVNYXhIZWlnaHQgPVxuICAgICAgdGhpcy5jb25maWcuZmxhdm9yID09PSAnbW9kYWwnICYmIHRoaXMucGxhdGZvcm0uaXNQaGFibGV0T3JCaWdnZXIoKTtcbiAgICBpZiAoIXNob3VsZFRvZ2dsZU1heEhlaWdodCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0eWxlID0gJ21heC1oZWlnaHQnO1xuICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgaWYgKGZyZWV6ZSkge1xuICAgICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gY29udGVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNvbnRlbnRFbGVtZW50LCBzdHlsZSwgYCR7Y29udGVudEhlaWdodH1weGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShjb250ZW50RWxlbWVudCwgc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlib2FyZFZpc2liaWxpdHkoa2V5Ym9hcmRIZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGtleWJvYXJkQWxyZWFkeVZpc2libGUgPSBrZXlib2FyZEhlaWdodCA+IDAgJiYgdGhpcy5rZXlib2FyZFZpc2libGU7XG4gICAgY29uc3Qga2V5Ym9hcmRBbHJlYWR5SGlkZGVuID0ga2V5Ym9hcmRIZWlnaHQgPT09IDAgJiYgIXRoaXMua2V5Ym9hcmRWaXNpYmxlO1xuICAgIGlmIChrZXlib2FyZEFscmVhZHlWaXNpYmxlIHx8IGtleWJvYXJkQWxyZWFkeUhpZGRlbikgcmV0dXJuO1xuICAgIHRoaXMua2V5Ym9hcmRWaXNpYmxlID0ga2V5Ym9hcmRIZWlnaHQgPiAwO1xuICAgIHRoaXMudG9nZ2xlQ29udGVudE1heEhlaWdodCh0aGlzLmtleWJvYXJkVmlzaWJsZSk7XG4gICAgdGhpcy5zZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQ6IG51bWJlciwgZWxlbWVudDogRWxlbWVudCkge1xuICAgIGlmIChrZXlib2FyZEhlaWdodCA8PSAwIHx8ICFlbGVtZW50KSByZXR1cm4gMDtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21WaWV3cG9ydEJvdHRvbVRvRWxlbWVudCA9IE1hdGguZmxvb3IoXG4gICAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuaW5uZXJIZWlnaHQgLSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KGtleWJvYXJkSGVpZ2h0IC0gZGlzdGFuY2VGcm9tVmlld3BvcnRCb3R0b21Ub0VsZW1lbnQsIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDc3NWYXIoZWxlbWVudDogRWxlbWVudCwgcHJvcGVydHk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT5cbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUNzc0NsYXNzKGVsZW1lbnQ6IEVsZW1lbnQsIGtsYXNzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbikge1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT5cbiAgICAgIGNvbmRpdGlvbiA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwga2xhc3MpIDogdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbGVtZW50LCBrbGFzcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMudG9nZ2xlQ3NzQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrZXlib2FyZC12aXNpYmxlJywga2V5Ym9hcmRIZWlnaHQgPiAwKTtcbiAgICBjb25zdCBrZXlib2FyZE92ZXJsYXAgPSB0aGlzLmdldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodCwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGxldCBzbmFwRm9vdGVyVG9LZXlib2FyZCA9IGZhbHNlO1xuICAgIGNvbnN0IGVtYmVkZGVkRm9vdGVyRWxlbWVudCA9IHRoaXMuZ2V0RW1iZWRkZWRGb290ZXJFbGVtZW50KCk7XG4gICAgaWYgKGVtYmVkZGVkRm9vdGVyRWxlbWVudCkge1xuICAgICAgdGhpcy5zZXRDc3NWYXIoZW1iZWRkZWRGb290ZXJFbGVtZW50LCAnLS1rZXlib2FyZC1vZmZzZXQnLCBgJHtrZXlib2FyZE92ZXJsYXB9cHhgKTtcbiAgICAgIHNuYXBGb290ZXJUb0tleWJvYXJkID0gZW1iZWRkZWRGb290ZXJFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnc25hcC10by1rZXlib2FyZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5pb25Db250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNvbnRlbnRLZXlib2FyZE9mZnNldCA9IHNuYXBGb290ZXJUb0tleWJvYXJkXG4gICAgICA/IGtleWJvYXJkT3ZlcmxhcFxuICAgICAgOiB0aGlzLmdldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodCwgY29udGVudEVsZW1lbnQpO1xuICAgIHRoaXMuc2V0Q3NzVmFyKGNvbnRlbnRFbGVtZW50LCAnLS1rZXlib2FyZC1vZmZzZXQnLCBgJHtjb250ZW50S2V5Ym9hcmRPZmZzZXR9cHhgKTtcbiAgfVxuXG4gIG9uSGVhZGVyVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmtleWJvYXJkVmlzaWJsZSkge1xuICAgICAgY29uc3QgaXNUb29sYmFyQnV0dG9uVG91Y2ggPSB0aGlzLnRvb2xiYXJCdXR0b25zLnNvbWUoKGJ1dHRvbikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgKGV2ZW50LnRhcmdldCA9PT0gYnV0dG9uIHx8IGJ1dHRvbi5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICAvLyBQcmV2ZW50IGJsdXIgaWYgZXZlbnQgdGFyZ2V0IGlzIGEgdG9vbGJhciBidXR0b25cbiAgICAgIC8vICh0byBhbGxvdyB0YXAgZXZlbnQgdG8gZmlyZSk6XG4gICAgICBpZiAoIWlzVG9vbGJhckJ1dHRvblRvdWNoKSB7XG4gICAgICAgIHRoaXMuYmx1ckFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgX29uV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuc2V0Vmlld3BvcnRIZWlnaHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Vmlld3BvcnRIZWlnaHQoKSB7XG4gICAgY29uc3QgdmggPSAodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmlubmVySGVpZ2h0ICogMC4wMSkudG9GaXhlZCgyKTtcbiAgICB0aGlzLnNldENzc1Zhcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJy0tdmgnLCBgJHt2aH1weGApO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlVmlld3BvcnRSZXNpemUoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuYm9keSwgKGVudHJ5KSA9PlxuICAgICAgdGhpcy5vblZpZXdwb3J0UmVzaXplKGVudHJ5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uVmlld3BvcnRSZXNpemUoZW50cnk6IFJlc2l6ZU9ic2VydmVyRW50cnkpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgICAvLyBJbml0aWFsIG9ic2VydmUgY2FsbGJhY2ssIHJlZ2lzdGVyIGluaXRpYWwgaGVpZ2h0OlxuICAgICAgdGhpcy5pbml0aWFsVmlld3BvcnRIZWlnaHQgPSBlbnRyeS5jb250ZW50UmVjdC5oZWlnaHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld3BvcnRSZXNpemVkID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0ICE9PSB0aGlzLmluaXRpYWxWaWV3cG9ydEhlaWdodDtcbiAgICBpZiAoIXRoaXMudmlld3BvcnRSZXNpemVkKSB7XG4gICAgICAvLyBXZSBhcmUgYmFjayB0byBpbml0aWFsIHZpZXcgcG9ydCBoZWlnaHQsIGNoZWNrIGZvciBwZW5kaW5nIGNsb3NlIGZ1bmM6XG4gICAgICBpZiAodGhpcy5kZWxheWVkQ2xvc2VUaW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXllZENsb3NlVGltZW91dElkKTtcbiAgICAgICAgdGhpcy5kZWxheWVkQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52aWV3cG9ydFJlc2l6ZS5uZXh0KCk7XG4gIH1cblxuICBibHVyQWN0aXZlRWxlbWVudCgpIHtcbiAgICBjb25zdCBCTFVSX1RBUkdFVF9TRUxFQ1RPUiA9ICdpbnB1dCwgdGV4dGFyZWEnO1xuICAgIGlmICh0aGlzLmtleWJvYXJkVmlzaWJsZSkge1xuICAgICAgaWYgKFxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5tYXRjaGVzKEJMVVJfVEFSR0VUX1NFTEVDVE9SKVxuICAgICAgKSB7XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFRvUGFyZW50TWFwOiB7IFtrZXk6IHN0cmluZ106ICgpID0+IEhUTUxFbGVtZW50W10gfSA9IHtcbiAgICAnS0lSQlktTU9EQUwtRk9PVEVSJzogKCkgPT4gW3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XSxcbiAgICAnS0lSQlktUEFHRS1USVRMRSc6ICgpID0+XG4gICAgICBbdGhpcy5pb25UaXRsZUVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5jb250ZW50VGl0bGU/Lm5hdGl2ZUVsZW1lbnRdLmZpbHRlcihcbiAgICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgKSxcbiAgICAnS0lSQlktUEFHRS1QUk9HUkVTUyc6ICgpID0+IFt0aGlzLmlvblRvb2xiYXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnRdLFxuICB9O1xuXG4gIHByaXZhdGUgY2xlYXJFbWJlZGRlZEVsZW1lbnRzKCkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZWxlbWVudFRvUGFyZW50TWFwKS5mb3JFYWNoKChbdGFnTmFtZSwgZ2V0UGFyZW50c10pID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhcmVudHMgPSBnZXRQYXJlbnRzKCk7XG4gICAgICBuZXdQYXJlbnRzLmZvckVhY2goKG5ld1BhcmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbWJlZGRlZEVsZW1lbnQgPSBuZXdQYXJlbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYDpzY29wZSA+ICR7dGFnTmFtZX1gKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChlbWJlZGRlZEVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBUT0RPOiBSZXdyaXRlIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBpbmRlcGVuZGVudCBvZiBlbGVtZW50IG9yZGVyLiBcbiAgICAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20va2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2lzc3Vlcy8yMDk2XG4gICovXG4gIHByaXZhdGUgZ2V0RW1iZWRkZWRDb21wb25lbnRFbGVtZW50KCk6IG51bGwgfCBFbGVtZW50IHtcbiAgICBjb25zdCBjb250ZW50RWxlbWVudENoaWxkcmVuID0gQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGlsZHJlblxuICAgICkucmV2ZXJzZSgpOyAvLyBSZXZlcnNlIG1ha2VzIGl0IGVhc2llciB0byByZXRyaWV2ZSB0aGUgbGFzdCBjaGlsZHJlbiBpbiB0aGUgbGlzdFxuXG4gICAgY29uc3QgZW1iZWRkZWRDb21wb25lbnRFbGVtZW50ID0gISF0aGlzLmNvbmZpZy5tb2RhbFJvdXRlXG4gICAgICA/IGNvbnRlbnRFbGVtZW50Q2hpbGRyZW5bMF1cbiAgICAgIDogY29udGVudEVsZW1lbnRDaGlsZHJlblsxXTtcblxuICAgIC8qIFxuICAgICAgQXMgTW9kYWxDb25maWcuY29tcG9uZW50IGhhcyB0eXBlICdhbnknIGFsbCB2YWx1ZXMgYXJlIHZhbGlkIGZvciBjb21wb25lbnQ7IFxuICAgICAgZXhwbGljaXRseSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm8gZW1iZWRkZWQgY29tcG9uZW50IGVsZW1lbnQgaXMgZm91bmQgZHVlIHRvIFxuICAgICAgdGhpcy5cbiAgICAqL1xuICAgIGlmICghZW1iZWRkZWRDb21wb25lbnRFbGVtZW50KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gZW1iZWRkZWRDb21wb25lbnRFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbWJlZGRlZEZvb3RlckVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdraXJieS1tb2RhbC1mb290ZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZUNoaWxkKGNoaWxkOiBFbGVtZW50LCBuZXdQYXJlbnRzOiBFbGVtZW50W10pIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGNoaWxkLnBhcmVudEVsZW1lbnQsIGNoaWxkKTtcblxuICAgIG5ld1BhcmVudHMuZm9yRWFjaCgobmV3UGFyZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRUb0FwcGVuZCA9IGluZGV4ID4gMCA/IGNoaWxkLmNsb25lTm9kZSh0cnVlKSA6IGNoaWxkO1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChuZXdQYXJlbnQsIGNoaWxkVG9BcHBlbmQpO1xuICAgICAgLy8gQXBwZW5kIGFkZHMgY2hpbGQgYXMgbGFzdCBlbGVtZW50IG9mIHBhcmVudDsgdGhlcmVmb3JlIHJldHJpZXZlIHdpdGggbGFzdEVsZW1lbnRDaGlsZFxuICAgICAgY29uc3QgY2hpbGRFbGVtZW50ID0gbmV3UGFyZW50Lmxhc3RFbGVtZW50Q2hpbGQ7XG5cbiAgICAgIGlmIChjaGlsZEVsZW1lbnQudGFnTmFtZSA9PT0gJ0tJUkJZLU1PREFMLUZPT1RFUicpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZShjaGlsZEVsZW1lbnQsIChlbnRyeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtwcm9wZXJ0eSwgcGl4ZWxWYWx1ZV0gPSBbXG4gICAgICAgICAgICAnLS1mb290ZXItaGVpZ2h0JyxcbiAgICAgICAgICAgIGAke01hdGguZmxvb3IoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0KX1weGAsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLnNldENzc1Zhcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcHJvcGVydHksIHBpeGVsVmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2hpbGQoY2hpbGQ/OiBFbGVtZW50KSB7XG4gICAgaWYgKCEhY2hpbGQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoY2hpbGQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUVtYmVkZGVkRWxlbWVudHMoKSB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0RW1iZWRkZWRDb21wb25lbnRFbGVtZW50KCk7XG4gICAgaWYgKHBhcmVudEVsZW1lbnQgPT09IG51bGwpIHJldHVybjsgLy8gTXV0ZSBvYnNlcnZlIHdhcm5pbmcgd2hlbiBwYXJlbnRFbGVtZW50IGlzIG51bGxcblxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQsIHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSwgLy8gTGlzdGVuIGZvciBhZGRpdGlvbiBvciByZW1vdmFsIG9mIGNoaWxkIG5vZGVzXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVtYmVkZGVkRWxlbWVudHNNdXRhdGlvbk9ic2VydmVyKCk6IE11dGF0aW9uT2JzZXJ2ZXIge1xuICAgIGNvbnN0IG9ic2VydmVkRWxlbWVudHMgPSBPYmplY3Qua2V5cyh0aGlzLmVsZW1lbnRUb1BhcmVudE1hcCk7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICBjb25zdCBhZGRlZE5vZGVzID0gbXV0YXRpb25zXG4gICAgICAgIC5maWx0ZXIoKG11dGF0aW9uKSA9PiBtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JykgLy8gRmlsdGVyIGZvciBtdXRhdGlvbiB0byB0aGUgdHJlZSBvZiBub2Rlc1xuICAgICAgICAubWFwKChtdXRhdGlvbikgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgY2hlY2sgZm9yIGFkZGVkTm9kZXMgYXMgcmVtb3ZhbCBpcyBoYW5kbGVkIGJ5IHRoZSBBbmd1bGFyIHJlbmRlcmVyOlxuICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpLmZpbHRlcigobm9kZSkgPT5cbiAgICAgICAgICAgIG9ic2VydmVkRWxlbWVudHMuaW5jbHVkZXMobm9kZS5ub2RlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgYWRkZWRFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZVxuICAgICAgICAuY29uY2F0KC4uLmFkZGVkTm9kZXMpXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpOiBub2RlIGlzIEhUTUxFbGVtZW50ID0+IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCk7XG5cbiAgICAgIGFkZGVkRWxlbWVudHMuZm9yRWFjaCgoYWRkZWRFbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1BhcmVudEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRUb1BhcmVudE1hcFthZGRlZEVsZW1lbnQubm9kZU5hbWVdKCk7XG4gICAgICAgIC8vIE1vdmUgZW1iZWRkZWQgZWxlbWVudCBvdXQgb2YgY29udGVudCBhbmQgYXBwZW5kIHRvIG5ldyBwYXJlbnQ6XG4gICAgICAgIHRoaXMubW92ZUNoaWxkKGFkZGVkRWxlbWVudCwgbmV3UGFyZW50RWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vZGFsV3JhcHBlckludGVyc2VjdGlvbk9ic2VydmVyKCk6IEludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICBjb25zdCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjayA9IChlbnRyaWVzKSA9PiB7XG4gICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICBjb25zdCBpc1RvdWNoaW5nVmlld3BvcnQgPSBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDE7XG4gICAgICBpZiAoaXNUb3VjaGluZ1ZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZW50cnkudGFyZ2V0LCAnZnVsbC1oZWlnaHQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZW50cnkudGFyZ2V0LCAnZnVsbC1oZWlnaHQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU2V0IGV4cGxpY2l0IHZpZXdwb3J0IHJvb3QgaWYgd2l0aGluIGlmcmFtZTpcbiAgICBjb25zdCByb290ID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmZyYW1lRWxlbWVudFxuICAgICAgPyAodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50IGFzIGFueSkgLy8gQ2FzdCB0byBgYW55YCBhcyBUeXBlc2NyaXB0IGxpYi5kLnRzIGRvZXNudCBzdXBwb3J0IERvY3VtZW50IHR5cGUgeWV0XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvcHRpb25zOiBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQgPSB7XG4gICAgICByb290TWFyZ2luOiAnMHB4IDBweCAtMXB4IDBweCcsIC8vIGBib3R0b206IC0xcHhgIGFsbG93cyBjaGVja2luZyB3aGVuIHRoZSBtb2RhbCBib3R0b20gaXMgdG91Y2hpbmcgdGhlIHZpZXdwb3J0XG4gICAgICByb290LFxuICAgICAgdGhyZXNob2xkOiBbMC45OSwgMV0sXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucm91dGVyT3V0bGV0LmlzQWN0aXZhdGVkKSB7XG4gICAgICB0aGlzLnJvdXRlck91dGxldC5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICAgIC8vY2xlYW4gdXAgdGhlIG9ic2VydmVyXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5fbXV0YXRpb25PYnNlcnZlcjtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmJvZHkpO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuaW9uSGVhZGVyRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLnVub2JzZXJ2ZSh0aGlzLmdldEVtYmVkZGVkRm9vdGVyRWxlbWVudCgpKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlciAodG91Y2hzdGFydCk9XCJvbkhlYWRlclRvdWNoU3RhcnQoJGV2ZW50KVwiPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi10aXRsZT48L2lvbi10aXRsZT5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJjb25maWcuZmxhdm9yID09PSAnZHJhd2VyJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3NlQnV0dG9uOyBjb250ZXh0OiB7IGljb246ICdhcnJvdy1kb3duJyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiICpuZ0lmPVwiY29uZmlnLmZsYXZvciA9PT0gJ21vZGFsJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsb3NlQnV0dG9uOyBjb250ZXh0OiB7IGljb246ICdjbG9zZScgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIiAqbmdJZj1cImNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInICYmIGNvbmZpZy5kcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VwcGxlbWVudGFyeUJ1dHRvbjsgY29udGV4dDogeyBidG46IGNvbmZpZy5kcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBbc2Nyb2xsRXZlbnRzXT1cInRydWVcIj5cbiAgPGlvbi1oZWFkZXIgKm5nSWY9XCJfaGFzQ29sbGFwc2libGVUaXRsZVwiIGNvbGxhcHNlPVwiY29uZGVuc2VcIj5cbiAgICA8aW9uLXRvb2xiYXI+XG4gICAgICA8c3BhbiBjbGFzcz1cImtpcmJ5LXRleHQtbGFyZ2VcIiAjY29udGVudFRpdGxlPjwvc3Bhbj5cbiAgICA8L2lvbi10b29sYmFyPlxuICA8L2lvbi1oZWFkZXI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb25maWcuY29tcG9uZW50OyBpbmplY3RvcjogY29tcG9uZW50UHJvcHNJbmplY3RvclwiXG4gID48L25nLWNvbnRhaW5lcj5cbiAgPHJvdXRlci1vdXRsZXRcbiAgICBuYW1lPVwia2lyYnlNb2RhbFdyYXBwZXJPdXRsZXRcIlxuICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cImNvbmZpZy5tb2RhbFJvdXRlID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICA+PC9yb3V0ZXItb3V0bGV0PlxuPC9pb24tY29udGVudD5cblxuPG5nLXRlbXBsYXRlICNjbG9zZUJ1dHRvbiBsZXQtaWNvbj1cImljb25cIj5cbiAgPGJ1dHRvbiBraXJieS1idXR0b24gYXR0ZW50aW9uTGV2ZWw9XCI0XCIgc2l6ZT1cInNtXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICA8a2lyYnktaWNvbiBbbmFtZV09XCJpY29uXCI+PC9raXJieS1pY29uPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3VwcGxlbWVudGFyeUJ1dHRvbiBsZXQtYnRuPVwiYnRuXCI+XG4gIDxidXR0b24ga2lyYnktYnV0dG9uIGF0dGVudGlvbkxldmVsPVwiMlwiIHNpemU9XCJzbVwiIChjbGljayk9XCJidG4uYWN0aW9uKCRldmVudClcIj5cbiAgICA8a2lyYnktaWNvbiBbbmFtZV09XCJidG4uaWNvbk5hbWVcIj48L2tpcmJ5LWljb24+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==