@kirbydesign/designsystem 5.2.2 → 6.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (716) hide show
  1. package/bundles/kirbydesign-designsystem-testing-base.umd.js +1988 -1259
  2. package/bundles/kirbydesign-designsystem-testing-base.umd.js.map +1 -1
  3. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.js +34 -16
  4. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.js.map +1 -1
  5. package/bundles/kirbydesign-designsystem-testing-jest.umd.js +34 -16
  6. package/bundles/kirbydesign-designsystem-testing-jest.umd.js.map +1 -1
  7. package/bundles/kirbydesign-designsystem.umd.js +10025 -9233
  8. package/bundles/kirbydesign-designsystem.umd.js.map +1 -1
  9. package/esm2015/kirbydesign-designsystem.js +1 -115
  10. package/esm2015/lib/components/accordion/accordion-item.component.js +31 -20
  11. package/esm2015/lib/components/accordion/accordion.directive.js +11 -7
  12. package/esm2015/lib/components/app/app.component.js +23 -18
  13. package/esm2015/lib/components/app/app.module.js +13 -8
  14. package/esm2015/lib/components/avatar/avatar.component.js +31 -19
  15. package/esm2015/lib/components/button/button.component.js +63 -34
  16. package/esm2015/lib/components/calendar/calendar.component.js +59 -35
  17. package/esm2015/lib/components/calendar/helpers/calendar.helper.js +8 -8
  18. package/esm2015/lib/components/card/card-footer/card-footer.component.js +14 -11
  19. package/esm2015/lib/components/card/card-header/card-header.component.js +26 -15
  20. package/esm2015/lib/components/card/card.component.js +34 -25
  21. package/esm2015/lib/components/chart/chart-js/chart-js.service.js +48 -34
  22. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.js +1 -3
  23. package/esm2015/lib/components/chart/chart.component.js +36 -39
  24. package/esm2015/lib/components/chart/chart.module.js +13 -8
  25. package/esm2015/lib/components/chart/chart.types.js +1 -1
  26. package/esm2015/lib/components/chart/configs/chart-config.service.js +7 -4
  27. package/esm2015/lib/components/chart/configs/interaction-functions-extensions.config.js +8 -10
  28. package/esm2015/lib/components/chart/configs/shared.utils.js +1 -1
  29. package/esm2015/lib/components/chart/configs/type.config.js +1 -3
  30. package/esm2015/lib/components/chart/index.js +2 -1
  31. package/esm2015/lib/components/chart-deprecated/chart-deprecated-helper.js +7 -4
  32. package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.js +56 -38
  33. package/esm2015/lib/components/chart-deprecated/options/areaspline.js +7 -9
  34. package/esm2015/lib/components/chart-deprecated/options/donut.js +5 -7
  35. package/esm2015/lib/components/chart-deprecated/options/timeseries.js +8 -10
  36. package/esm2015/lib/components/checkbox/checkbox.component.js +47 -21
  37. package/esm2015/lib/components/chip/chip.component.js +24 -13
  38. package/esm2015/lib/components/divider/divider.component.js +16 -12
  39. package/esm2015/lib/components/dropdown/dropdown.component.js +154 -61
  40. package/esm2015/lib/components/dropdown/keyboard-handler.service.js +9 -7
  41. package/esm2015/lib/components/empty-state/empty-state.component.js +27 -16
  42. package/esm2015/lib/components/fab-sheet/fab-sheet.component.js +37 -23
  43. package/esm2015/lib/components/flag/flag.component.js +21 -17
  44. package/esm2015/lib/components/form-field/directives/date/date-input.directive.js +16 -15
  45. package/esm2015/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.js +41 -28
  46. package/esm2015/lib/components/form-field/form-field-message/form-field-message.component.js +17 -13
  47. package/esm2015/lib/components/form-field/form-field.component.js +39 -26
  48. package/esm2015/lib/components/form-field/input/input.component.js +65 -23
  49. package/esm2015/lib/components/form-field/input-counter/input-counter.component.js +14 -11
  50. package/esm2015/lib/components/form-field/textarea/textarea.component.js +51 -20
  51. package/esm2015/lib/components/grid/breakpoint-helper.service.js +9 -9
  52. package/esm2015/lib/components/grid/grid.component.js +21 -18
  53. package/esm2015/lib/components/icon/icon-registry.service.js +11 -19
  54. package/esm2015/lib/components/icon/icon-settings.js +2 -3
  55. package/esm2015/lib/components/icon/icon.component.js +27 -20
  56. package/esm2015/lib/components/icon/icon.module.js +13 -8
  57. package/esm2015/lib/components/icon/index.js +1 -2
  58. package/esm2015/lib/components/icon/kirby-icon-settings.js +2 -4
  59. package/esm2015/lib/components/index.js +11 -10
  60. package/esm2015/lib/components/item/item.component.js +33 -16
  61. package/esm2015/lib/components/item/item.module.js +13 -8
  62. package/esm2015/lib/components/item/label/label.component.js +18 -12
  63. package/esm2015/lib/components/item-group/item-group.component.js +15 -11
  64. package/esm2015/lib/components/item-sliding/item-sliding.component.js +19 -12
  65. package/esm2015/lib/components/list/directives/infinite-scroll.directive.js +18 -17
  66. package/esm2015/lib/components/list/directives/list-item-color.directive.js +17 -11
  67. package/esm2015/lib/components/list/helpers/list-helper.js +7 -4
  68. package/esm2015/lib/components/list/index.js +2 -3
  69. package/esm2015/lib/components/list/list-experimental/list-experimental.component.js +20 -13
  70. package/esm2015/lib/components/list/list-header/list-header.component.js +14 -11
  71. package/esm2015/lib/components/list/list-item/list-item.component.js +38 -24
  72. package/esm2015/lib/components/list/list-section-header/list-section-header.component.js +15 -14
  73. package/esm2015/lib/components/list/list.component.js +81 -40
  74. package/esm2015/lib/components/list/list.directive.js +34 -45
  75. package/esm2015/lib/components/list/list.module.js +33 -12
  76. package/esm2015/lib/components/list/pipes/group-by.pipe.js +10 -6
  77. package/esm2015/lib/components/loading-overlay/loading-overlay.component.js +20 -13
  78. package/esm2015/lib/components/loading-overlay/loading-overlay.service.js +9 -13
  79. package/esm2015/lib/components/modal/action-sheet/action-sheet.component.js +32 -18
  80. package/esm2015/lib/components/modal/alert/alert.component.js +38 -26
  81. package/esm2015/lib/components/modal/alert/config/alert-config.js +1 -1
  82. package/esm2015/lib/components/modal/footer/modal-footer.component.js +25 -13
  83. package/esm2015/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.js +25 -21
  84. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.js +1 -1
  85. package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.js +124 -56
  86. package/esm2015/lib/components/modal/services/action-sheet.helper.js +8 -8
  87. package/esm2015/lib/components/modal/services/alert.helper.js +10 -20
  88. package/esm2015/lib/components/modal/services/modal-animation-builder.service.js +7 -10
  89. package/esm2015/lib/components/modal/services/modal-navigation.service.js +8 -13
  90. package/esm2015/lib/components/modal/services/modal.controller.js +17 -16
  91. package/esm2015/lib/components/modal/services/modal.helper.js +10 -10
  92. package/esm2015/lib/components/page/index.js +2 -1
  93. package/esm2015/lib/components/page/page-footer/page-footer.component.js +21 -18
  94. package/esm2015/lib/components/page/page.component.js +187 -118
  95. package/esm2015/lib/components/page/page.module.js +60 -32
  96. package/esm2015/lib/components/popover/popover.component.js +27 -23
  97. package/esm2015/lib/components/progress-circle/progress-circle-ring.component.js +29 -17
  98. package/esm2015/lib/components/progress-circle/progress-circle.component.js +30 -21
  99. package/esm2015/lib/components/radio/radio-group/radio-group.component.js +60 -34
  100. package/esm2015/lib/components/radio/radio.component.js +36 -17
  101. package/esm2015/lib/components/range/range.component.js +51 -29
  102. package/esm2015/lib/components/reorder-list/reorder-list.component.js +32 -21
  103. package/esm2015/lib/components/router-outlet/router-outlet.component.js +18 -12
  104. package/esm2015/lib/components/router-outlet/router-outlet.module.js +13 -8
  105. package/esm2015/lib/components/section-header/section-header.component.js +15 -9
  106. package/esm2015/lib/components/segmented-control/segment-item.js +1 -1
  107. package/esm2015/lib/components/segmented-control/segmented-control.component.js +38 -29
  108. package/esm2015/lib/components/shared/component-loader.directive.js +15 -16
  109. package/esm2015/lib/components/shared/resize-observer/resize-observer.factory.js +7 -5
  110. package/esm2015/lib/components/shared/resize-observer/resize-observer.service.js +7 -10
  111. package/esm2015/lib/components/slide-button/slide-button.component.js +22 -19
  112. package/esm2015/lib/components/slides/slides.component.js +42 -20
  113. package/esm2015/lib/components/spinner/index.js +3 -0
  114. package/esm2015/lib/components/spinner/spinner.component.js +14 -11
  115. package/esm2015/lib/components/spinner/spinner.module.js +14 -9
  116. package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.js +9 -3
  117. package/esm2015/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.js +25 -20
  118. package/esm2015/lib/components/tabs/tab-button/tab-button.component.js +21 -18
  119. package/esm2015/lib/components/tabs/tabs.component.js +20 -16
  120. package/esm2015/lib/components/tabs/tabs.module.js +14 -9
  121. package/esm2015/lib/components/tabs/tabs.service.js +9 -7
  122. package/esm2015/lib/components/toast/config/toast-config.js +1 -1
  123. package/esm2015/lib/components/toast/services/toast.controller.js +8 -8
  124. package/esm2015/lib/components/toast/services/toast.helper.js +8 -12
  125. package/esm2015/lib/components/toggle/toggle.component.js +21 -14
  126. package/esm2015/lib/components/toggle-button/index.js +3 -0
  127. package/esm2015/lib/components/toggle-button/toggle-button.component.js +20 -13
  128. package/esm2015/lib/components/toggle-button/toggle-button.module.js +13 -8
  129. package/esm2015/lib/components/web-component-proxies.component.js +13 -15
  130. package/esm2015/lib/directives/element-as-button/element-as-button.directive.js +26 -17
  131. package/esm2015/lib/directives/fit-heading/fit-heading.directive.js +16 -17
  132. package/esm2015/lib/directives/fit-heading/fit-heading.module.js +12 -7
  133. package/esm2015/lib/directives/index.js +3 -1
  134. package/esm2015/lib/directives/key-handler/key-handler.directive.js +14 -14
  135. package/esm2015/lib/directives/modal-router-link/modal-router-link.directive.js +20 -15
  136. package/esm2015/lib/directives/theme-color/theme-color.directive.js +55 -24
  137. package/esm2015/lib/helpers/element-has-ancestor.js +1 -1
  138. package/esm2015/lib/helpers/line-clamp-helper.js +7 -8
  139. package/esm2015/lib/helpers/platform.service.js +9 -11
  140. package/esm2015/lib/index.js +1 -5
  141. package/esm2015/lib/kirby.module.js +166 -25
  142. package/esm2015/lib/types/window-ref.js +9 -7
  143. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.js +1 -59
  144. package/esm2015/testing-base/lib/components/index.js +56 -0
  145. package/esm2015/testing-base/lib/components/mock.accordion-item.component.js +26 -18
  146. package/esm2015/testing-base/lib/components/mock.action-sheet.component.js +38 -24
  147. package/esm2015/testing-base/lib/components/mock.app.component.js +22 -14
  148. package/esm2015/testing-base/lib/components/mock.avatar.component.js +37 -24
  149. package/esm2015/testing-base/lib/components/mock.button.component.js +36 -24
  150. package/esm2015/testing-base/lib/components/mock.calendar.component.js +54 -31
  151. package/esm2015/testing-base/lib/components/mock.card-footer.component.js +22 -14
  152. package/esm2015/testing-base/lib/components/mock.card-header.component.js +30 -20
  153. package/esm2015/testing-base/lib/components/mock.card.component.js +34 -22
  154. package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.js +38 -24
  155. package/esm2015/testing-base/lib/components/mock.chart.component.js +38 -25
  156. package/esm2015/testing-base/lib/components/mock.checkbox.component.js +36 -23
  157. package/esm2015/testing-base/lib/components/mock.chip.component.js +26 -18
  158. package/esm2015/testing-base/lib/components/mock.divider.component.js +24 -17
  159. package/esm2015/testing-base/lib/components/mock.dropdown.component.js +49 -30
  160. package/esm2015/testing-base/lib/components/mock.empty-state.component.js +30 -20
  161. package/esm2015/testing-base/lib/components/mock.fab-sheet.component.js +26 -18
  162. package/esm2015/testing-base/lib/components/mock.flag.component.js +26 -18
  163. package/esm2015/testing-base/lib/components/mock.form-field-message.component.js +26 -18
  164. package/esm2015/testing-base/lib/components/mock.form-field.component.js +26 -18
  165. package/esm2015/testing-base/lib/components/mock.grid.component.js +26 -18
  166. package/esm2015/testing-base/lib/components/mock.icon.component.js +29 -20
  167. package/esm2015/testing-base/lib/components/mock.input-counter.component.js +24 -17
  168. package/esm2015/testing-base/lib/components/mock.input.component.js +42 -27
  169. package/esm2015/testing-base/lib/components/mock.item-group.component.js +22 -14
  170. package/esm2015/testing-base/lib/components/mock.item-sliding.component.js +26 -18
  171. package/esm2015/testing-base/lib/components/mock.item.component.js +33 -22
  172. package/esm2015/testing-base/lib/components/mock.label.component.js +24 -17
  173. package/esm2015/testing-base/lib/components/mock.list-experimental.component.js +22 -14
  174. package/esm2015/testing-base/lib/components/mock.list-header.component.js +22 -14
  175. package/esm2015/testing-base/lib/components/mock.list-item.component.js +40 -25
  176. package/esm2015/testing-base/lib/components/mock.list-section-header.component.js +24 -17
  177. package/esm2015/testing-base/lib/components/mock.list.component.js +50 -30
  178. package/esm2015/testing-base/lib/components/mock.loading-overlay.component.js +26 -18
  179. package/esm2015/testing-base/lib/components/mock.modal-footer.component.js +26 -18
  180. package/esm2015/testing-base/lib/components/mock.page-footer.component.js +24 -17
  181. package/esm2015/testing-base/lib/components/mock.page.component.js +228 -125
  182. package/esm2015/testing-base/lib/components/mock.popover.component.js +29 -20
  183. package/esm2015/testing-base/lib/components/mock.progress-circle.component.js +28 -19
  184. package/esm2015/testing-base/lib/components/mock.radio-group.component.js +38 -24
  185. package/esm2015/testing-base/lib/components/mock.radio.component.js +30 -20
  186. package/esm2015/testing-base/lib/components/mock.range.component.js +44 -27
  187. package/esm2015/testing-base/lib/components/mock.reorder-list.component.js +32 -21
  188. package/esm2015/testing-base/lib/components/mock.router-outlet.component.js +24 -17
  189. package/esm2015/testing-base/lib/components/mock.section-header.component.js +22 -14
  190. package/esm2015/testing-base/lib/components/mock.segmented-control.component.js +35 -23
  191. package/esm2015/testing-base/lib/components/mock.slide-button.component.js +30 -20
  192. package/esm2015/testing-base/lib/components/mock.slides.component.js +51 -0
  193. package/esm2015/testing-base/lib/components/mock.spinner.component.js +22 -14
  194. package/esm2015/testing-base/lib/components/mock.tab-button.component.js +26 -18
  195. package/esm2015/testing-base/lib/components/mock.tabs.component.js +22 -14
  196. package/esm2015/testing-base/lib/components/mock.textarea.component.js +35 -23
  197. package/esm2015/testing-base/lib/components/mock.toggle-button.component.js +26 -18
  198. package/esm2015/testing-base/lib/components/mock.toggle.component.js +28 -19
  199. package/esm2015/testing-base/lib/components/mock.web-component-proxies.component.js +33 -0
  200. package/esm2015/testing-base/lib/directives/index.js +4 -0
  201. package/esm2015/testing-base/lib/directives/mock.accordion.directive.js +22 -13
  202. package/esm2015/testing-base/lib/directives/mock.fit-heading.directive.js +24 -15
  203. package/esm2015/testing-base/lib/directives/mock.theme-color.directive.js +24 -16
  204. package/esm2015/testing-base/lib/index.js +4 -0
  205. package/esm2015/testing-base/lib/kirby-testing-base.module.js +69 -7
  206. package/esm2015/testing-base/lib/mock-components.js +5 -2
  207. package/esm2015/testing-base/public_api.js +2 -2
  208. package/esm2015/testing-jasmine/kirbydesign-designsystem-testing-jasmine.js +1 -2
  209. package/esm2015/testing-jasmine/lib/kirby-testing.module.js +14 -8
  210. package/esm2015/testing-jasmine/lib/mock-providers.js +1 -1
  211. package/esm2015/testing-jest/kirbydesign-designsystem-testing-jest.js +1 -2
  212. package/esm2015/testing-jest/lib/kirby-testing.module.js +14 -8
  213. package/esm2015/testing-jest/lib/mock-providers.js +1 -1
  214. package/fesm2015/kirbydesign-designsystem-testing-base.js +1859 -1163
  215. package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
  216. package/fesm2015/kirbydesign-designsystem-testing-jasmine.js +13 -8
  217. package/fesm2015/kirbydesign-designsystem-testing-jasmine.js.map +1 -1
  218. package/fesm2015/kirbydesign-designsystem-testing-jest.js +13 -8
  219. package/fesm2015/kirbydesign-designsystem-testing-jest.js.map +1 -1
  220. package/fesm2015/kirbydesign-designsystem.js +5261 -4353
  221. package/fesm2015/kirbydesign-designsystem.js.map +1 -1
  222. package/icons/svg/more.svg +5 -7
  223. package/kirbydesign-designsystem.d.ts +1 -114
  224. package/lib/components/accordion/accordion-item.component.d.ts +3 -0
  225. package/lib/components/accordion/accordion.directive.d.ts +3 -0
  226. package/lib/components/app/app.component.d.ts +3 -0
  227. package/lib/components/app/app.module.d.ts +7 -0
  228. package/lib/components/avatar/avatar.component.d.ts +5 -2
  229. package/lib/components/button/button.component.d.ts +5 -2
  230. package/lib/components/calendar/calendar.component.d.ts +3 -0
  231. package/lib/components/calendar/helpers/calendar.helper.d.ts +3 -0
  232. package/lib/components/card/card-footer/card-footer.component.d.ts +3 -0
  233. package/lib/components/card/card-header/card-header.component.d.ts +3 -0
  234. package/lib/components/card/card.component.d.ts +3 -0
  235. package/lib/components/chart/chart-js/chart-js.service.d.ts +7 -3
  236. package/lib/components/chart/chart.component.d.ts +5 -5
  237. package/lib/components/chart/chart.module.d.ts +5 -0
  238. package/lib/components/chart/chart.types.d.ts +1 -0
  239. package/lib/components/chart/configs/chart-config.service.d.ts +4 -1
  240. package/lib/components/chart/index.d.ts +1 -0
  241. package/lib/components/chart-deprecated/chart-deprecated-helper.d.ts +3 -0
  242. package/lib/components/chart-deprecated/chart-deprecated.component.d.ts +3 -0
  243. package/lib/components/checkbox/checkbox.component.d.ts +3 -0
  244. package/lib/components/chip/chip.component.d.ts +3 -0
  245. package/lib/components/divider/divider.component.d.ts +3 -0
  246. package/lib/components/dropdown/dropdown.component.d.ts +5 -2
  247. package/lib/components/dropdown/keyboard-handler.service.d.ts +3 -0
  248. package/lib/components/empty-state/empty-state.component.d.ts +3 -0
  249. package/lib/components/fab-sheet/fab-sheet.component.d.ts +3 -0
  250. package/lib/components/flag/flag.component.d.ts +3 -0
  251. package/lib/components/form-field/directives/date/date-input.directive.d.ts +3 -0
  252. package/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.d.ts +3 -0
  253. package/lib/components/form-field/form-field-message/form-field-message.component.d.ts +3 -0
  254. package/lib/components/form-field/form-field.component.d.ts +3 -0
  255. package/lib/components/form-field/input/input.component.d.ts +4 -1
  256. package/lib/components/form-field/input-counter/input-counter.component.d.ts +5 -2
  257. package/lib/components/form-field/textarea/textarea.component.d.ts +3 -0
  258. package/lib/components/grid/breakpoint-helper.service.d.ts +3 -0
  259. package/lib/components/grid/grid.component.d.ts +3 -0
  260. package/lib/components/icon/icon-registry.service.d.ts +4 -2
  261. package/lib/components/icon/icon-settings.d.ts +0 -2
  262. package/lib/components/icon/icon.component.d.ts +4 -1
  263. package/lib/components/icon/icon.module.d.ts +6 -0
  264. package/lib/components/icon/index.d.ts +1 -1
  265. package/lib/components/index.d.ts +10 -9
  266. package/lib/components/item/item.component.d.ts +4 -1
  267. package/lib/components/item/item.module.d.ts +9 -0
  268. package/lib/components/item/label/label.component.d.ts +3 -0
  269. package/lib/components/item-group/item-group.component.d.ts +3 -0
  270. package/lib/components/item-sliding/item-sliding.component.d.ts +3 -0
  271. package/lib/components/list/directives/infinite-scroll.directive.d.ts +3 -0
  272. package/lib/components/list/directives/list-item-color.directive.d.ts +3 -0
  273. package/lib/components/list/helpers/list-helper.d.ts +3 -0
  274. package/lib/components/list/index.d.ts +1 -2
  275. package/lib/components/list/list-experimental/list-experimental.component.d.ts +3 -0
  276. package/lib/components/list/list-header/list-header.component.d.ts +3 -0
  277. package/lib/components/list/list-item/list-item.component.d.ts +3 -0
  278. package/lib/components/list/list-section-header/list-section-header.component.d.ts +3 -0
  279. package/lib/components/list/list.component.d.ts +3 -0
  280. package/lib/components/list/list.directive.d.ts +9 -6
  281. package/lib/components/list/list.module.d.ts +16 -0
  282. package/lib/components/list/pipes/group-by.pipe.d.ts +3 -0
  283. package/lib/components/loading-overlay/loading-overlay.component.d.ts +3 -0
  284. package/lib/components/loading-overlay/loading-overlay.service.d.ts +3 -0
  285. package/lib/components/modal/action-sheet/action-sheet.component.d.ts +3 -0
  286. package/lib/components/modal/alert/alert.component.d.ts +5 -2
  287. package/lib/components/modal/alert/config/alert-config.d.ts +0 -8
  288. package/lib/components/modal/footer/modal-footer.component.d.ts +3 -0
  289. package/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts +3 -0
  290. package/lib/components/modal/modal-wrapper/config/modal-config.d.ts +1 -8
  291. package/lib/components/modal/modal-wrapper/modal-wrapper.component.d.ts +5 -0
  292. package/lib/components/modal/services/action-sheet.helper.d.ts +3 -0
  293. package/lib/components/modal/services/alert.helper.d.ts +4 -2
  294. package/lib/components/modal/services/modal-animation-builder.service.d.ts +3 -0
  295. package/lib/components/modal/services/modal-navigation.service.d.ts +3 -0
  296. package/lib/components/modal/services/modal.controller.d.ts +3 -0
  297. package/lib/components/modal/services/modal.helper.d.ts +3 -0
  298. package/lib/components/page/index.d.ts +1 -0
  299. package/lib/components/page/page-footer/page-footer.component.d.ts +3 -0
  300. package/lib/components/page/page.component.d.ts +26 -0
  301. package/lib/components/page/page.module.d.ts +10 -0
  302. package/lib/components/popover/popover.component.d.ts +4 -1
  303. package/lib/components/progress-circle/progress-circle-ring.component.d.ts +3 -0
  304. package/lib/components/progress-circle/progress-circle.component.d.ts +3 -0
  305. package/lib/components/radio/radio-group/radio-group.component.d.ts +3 -0
  306. package/lib/components/radio/radio.component.d.ts +3 -0
  307. package/lib/components/range/range.component.d.ts +3 -0
  308. package/lib/components/reorder-list/reorder-list.component.d.ts +3 -0
  309. package/lib/components/router-outlet/router-outlet.component.d.ts +3 -0
  310. package/lib/components/router-outlet/router-outlet.module.d.ts +7 -0
  311. package/lib/components/section-header/section-header.component.d.ts +3 -0
  312. package/lib/components/segmented-control/segment-item.d.ts +0 -4
  313. package/lib/components/segmented-control/segmented-control.component.d.ts +4 -1
  314. package/lib/components/shared/component-loader.directive.d.ts +3 -0
  315. package/lib/components/shared/resize-observer/resize-observer.factory.d.ts +3 -0
  316. package/lib/components/shared/resize-observer/resize-observer.service.d.ts +3 -0
  317. package/lib/components/slide-button/slide-button.component.d.ts +3 -0
  318. package/lib/components/slides/slides.component.d.ts +5 -0
  319. package/lib/components/spinner/index.d.ts +2 -0
  320. package/lib/components/spinner/spinner.component.d.ts +3 -0
  321. package/lib/components/spinner/spinner.module.d.ts +6 -0
  322. package/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.d.ts +3 -0
  323. package/lib/components/tabs/tab-button/tab-button.component.d.ts +3 -0
  324. package/lib/components/tabs/tabs.component.d.ts +3 -0
  325. package/lib/components/tabs/tabs.module.d.ts +9 -0
  326. package/lib/components/tabs/tabs.service.d.ts +3 -0
  327. package/lib/components/toast/config/toast-config.d.ts +1 -4
  328. package/lib/components/toast/services/toast.controller.d.ts +3 -0
  329. package/lib/components/toast/services/toast.helper.d.ts +3 -0
  330. package/lib/components/toggle/toggle.component.d.ts +3 -0
  331. package/lib/components/toggle-button/index.d.ts +2 -0
  332. package/lib/components/toggle-button/toggle-button.component.d.ts +3 -0
  333. package/lib/components/toggle-button/toggle-button.module.d.ts +6 -0
  334. package/lib/components/web-component-proxies.component.d.ts +3 -0
  335. package/lib/custom-elements-initializer.d.ts +1 -1
  336. package/lib/directives/element-as-button/element-as-button.directive.d.ts +3 -0
  337. package/lib/directives/fit-heading/fit-heading.directive.d.ts +3 -0
  338. package/lib/directives/fit-heading/fit-heading.module.d.ts +5 -0
  339. package/lib/directives/index.d.ts +2 -0
  340. package/lib/directives/key-handler/key-handler.directive.d.ts +3 -0
  341. package/lib/directives/modal-router-link/modal-router-link.directive.d.ts +3 -0
  342. package/lib/directives/theme-color/theme-color.directive.d.ts +3 -0
  343. package/lib/helpers/line-clamp-helper.d.ts +3 -0
  344. package/lib/helpers/platform.service.d.ts +3 -0
  345. package/lib/index.d.ts +0 -1
  346. package/lib/kirby.module.d.ts +69 -0
  347. package/lib/types/window-ref.d.ts +3 -0
  348. package/package.json +3 -4
  349. package/polyfills/intersection-observer-polyfill-loader.js +12 -12
  350. package/polyfills/resize-observer-polyfill-loader.js +1 -1
  351. package/readme.md +0 -16
  352. package/scss/_trigger-publish.scss +1 -0
  353. package/scss/_trigger.scss +1 -0
  354. package/scss/awesome-stylesheet.scss +1 -0
  355. package/scss/base/_awesome-partial.scss +1 -0
  356. package/scss/base/_index.scss +1 -0
  357. package/scss/base/_interaction-states.scss +1 -0
  358. package/scss/base/_link.scss +1 -0
  359. package/scss/base/index.scss +1 -0
  360. package/scss/interaction-state/_active.scss +1 -0
  361. package/scss/interaction-state/_focus.scss +1 -0
  362. package/scss/interaction-state/_hover.scss +1 -0
  363. package/scss/interaction-state/_index.scss +1 -0
  364. package/scss/interaction-state/_interaction-state.utilities.scss +1 -0
  365. package/scss/interaction-state/_layer.scss +1 -0
  366. package/scss/interaction-state/_state-layer.scss +1 -0
  367. package/scss/interaction-state/_utilities.scss +1 -0
  368. package/scss/interaction-state/ionic/_active.scss +1 -0
  369. package/scss/interaction-state/ionic/_hover.scss +1 -0
  370. package/scss/interaction-state/ionic/_index.scss +1 -0
  371. package/scss/interaction-states/_hover.scss +1 -0
  372. package/scss/interaction-states/_index.scss +1 -0
  373. package/scss/opt-out/_index.scss +1 -0
  374. package/scss/opt-out/_link.scss +1 -0
  375. package/testing-base/kirbydesign-designsystem-testing-base.d.ts +1 -58
  376. package/testing-base/lib/components/index.d.ts +55 -0
  377. package/testing-base/lib/components/mock.accordion-item.component.d.ts +3 -0
  378. package/testing-base/lib/components/mock.action-sheet.component.d.ts +3 -0
  379. package/testing-base/lib/components/mock.app.component.d.ts +3 -0
  380. package/testing-base/lib/components/mock.avatar.component.d.ts +4 -1
  381. package/testing-base/lib/components/mock.button.component.d.ts +4 -1
  382. package/testing-base/lib/components/mock.calendar.component.d.ts +4 -0
  383. package/testing-base/lib/components/mock.card-footer.component.d.ts +3 -0
  384. package/testing-base/lib/components/mock.card-header.component.d.ts +3 -0
  385. package/testing-base/lib/components/mock.card.component.d.ts +3 -0
  386. package/testing-base/lib/components/mock.chart-deprecated.component.d.ts +3 -0
  387. package/testing-base/lib/components/mock.chart.component.d.ts +5 -3
  388. package/testing-base/lib/components/mock.checkbox.component.d.ts +3 -0
  389. package/testing-base/lib/components/mock.chip.component.d.ts +3 -0
  390. package/testing-base/lib/components/mock.divider.component.d.ts +3 -0
  391. package/testing-base/lib/components/mock.dropdown.component.d.ts +4 -1
  392. package/testing-base/lib/components/mock.empty-state.component.d.ts +3 -0
  393. package/testing-base/lib/components/mock.fab-sheet.component.d.ts +3 -0
  394. package/testing-base/lib/components/mock.flag.component.d.ts +3 -0
  395. package/testing-base/lib/components/mock.form-field-message.component.d.ts +3 -0
  396. package/testing-base/lib/components/mock.form-field.component.d.ts +3 -0
  397. package/testing-base/lib/components/mock.grid.component.d.ts +3 -0
  398. package/testing-base/lib/components/mock.icon.component.d.ts +4 -1
  399. package/testing-base/lib/components/mock.input-counter.component.d.ts +3 -0
  400. package/testing-base/lib/components/mock.input.component.d.ts +4 -1
  401. package/testing-base/lib/components/mock.item-group.component.d.ts +3 -0
  402. package/testing-base/lib/components/mock.item-sliding.component.d.ts +3 -0
  403. package/testing-base/lib/components/mock.item.component.d.ts +4 -1
  404. package/testing-base/lib/components/mock.label.component.d.ts +3 -0
  405. package/testing-base/lib/components/mock.list-experimental.component.d.ts +3 -0
  406. package/testing-base/lib/components/mock.list-header.component.d.ts +3 -0
  407. package/testing-base/lib/components/mock.list-item.component.d.ts +3 -0
  408. package/testing-base/lib/components/mock.list-section-header.component.d.ts +3 -0
  409. package/testing-base/lib/components/mock.list.component.d.ts +3 -0
  410. package/testing-base/lib/components/mock.loading-overlay.component.d.ts +3 -0
  411. package/testing-base/lib/components/mock.modal-footer.component.d.ts +3 -0
  412. package/testing-base/lib/components/mock.page-footer.component.d.ts +3 -0
  413. package/testing-base/lib/components/mock.page.component.d.ts +24 -0
  414. package/testing-base/lib/components/mock.popover.component.d.ts +4 -1
  415. package/testing-base/lib/components/mock.progress-circle.component.d.ts +3 -0
  416. package/testing-base/lib/components/mock.radio-group.component.d.ts +3 -0
  417. package/testing-base/lib/components/mock.radio.component.d.ts +3 -0
  418. package/testing-base/lib/components/mock.range.component.d.ts +3 -0
  419. package/testing-base/lib/components/mock.reorder-list.component.d.ts +3 -0
  420. package/testing-base/lib/components/mock.router-outlet.component.d.ts +3 -0
  421. package/testing-base/lib/components/mock.section-header.component.d.ts +3 -0
  422. package/testing-base/lib/components/mock.segmented-control.component.d.ts +4 -1
  423. package/testing-base/lib/components/mock.slide-button.component.d.ts +3 -0
  424. package/testing-base/lib/components/mock.slides.component.d.ts +11 -0
  425. package/testing-base/lib/components/mock.spinner.component.d.ts +3 -0
  426. package/testing-base/lib/components/mock.tab-button.component.d.ts +3 -0
  427. package/testing-base/lib/components/mock.tabs.component.d.ts +3 -0
  428. package/testing-base/lib/components/mock.textarea.component.d.ts +3 -0
  429. package/testing-base/lib/components/mock.toggle-button.component.d.ts +3 -0
  430. package/testing-base/lib/components/mock.toggle.component.d.ts +3 -0
  431. package/testing-base/lib/components/mock.web-component-proxies.component.d.ts +8 -0
  432. package/testing-base/lib/directives/index.d.ts +3 -0
  433. package/testing-base/lib/directives/mock.accordion.directive.d.ts +3 -0
  434. package/testing-base/lib/directives/mock.fit-heading.directive.d.ts +3 -0
  435. package/testing-base/lib/directives/mock.theme-color.directive.d.ts +3 -0
  436. package/testing-base/lib/index.d.ts +3 -0
  437. package/testing-base/lib/kirby-testing-base.module.d.ts +61 -0
  438. package/testing-base/package.json +0 -1
  439. package/testing-base/public_api.d.ts +1 -1
  440. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.d.ts +1 -1
  441. package/testing-jasmine/lib/kirby-testing.module.d.ts +5 -0
  442. package/testing-jasmine/package.json +0 -1
  443. package/testing-jest/kirbydesign-designsystem-testing-jest.d.ts +1 -1
  444. package/testing-jest/lib/kirby-testing.module.d.ts +5 -0
  445. package/testing-jest/package.json +0 -1
  446. package/README.md +0 -7
  447. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +0 -2
  448. package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +0 -1
  449. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js +0 -16
  450. package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js.map +0 -1
  451. package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js +0 -16
  452. package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js.map +0 -1
  453. package/bundles/kirbydesign-designsystem.umd.min.js +0 -2
  454. package/bundles/kirbydesign-designsystem.umd.min.js.map +0 -1
  455. package/esm2015/index.metadata.json +0 -1
  456. package/esm2015/kirbydesign-designsystem.metadata.json +0 -1
  457. package/esm2015/lib/components/accordion/accordion-item.component.metadata.json +0 -1
  458. package/esm2015/lib/components/accordion/accordion.directive.metadata.json +0 -1
  459. package/esm2015/lib/components/accordion/index.metadata.json +0 -1
  460. package/esm2015/lib/components/angular-component-lib/utils.metadata.json +0 -1
  461. package/esm2015/lib/components/app/app.component.metadata.json +0 -1
  462. package/esm2015/lib/components/app/app.module.metadata.json +0 -1
  463. package/esm2015/lib/components/app/index.metadata.json +0 -1
  464. package/esm2015/lib/components/avatar/avatar.component.metadata.json +0 -1
  465. package/esm2015/lib/components/button/button.component.metadata.json +0 -1
  466. package/esm2015/lib/components/calendar/calendar.component.metadata.json +0 -1
  467. package/esm2015/lib/components/calendar/helpers/calendar-cell.model.metadata.json +0 -1
  468. package/esm2015/lib/components/calendar/helpers/calendar-options.model.metadata.json +0 -1
  469. package/esm2015/lib/components/calendar/helpers/calendar.helper.metadata.json +0 -1
  470. package/esm2015/lib/components/calendar/index.metadata.json +0 -1
  471. package/esm2015/lib/components/calendar/options/calendar-year-navigator-config.metadata.json +0 -1
  472. package/esm2015/lib/components/card/card-footer/card-footer.component.metadata.json +0 -1
  473. package/esm2015/lib/components/card/card-header/card-header.component.metadata.json +0 -1
  474. package/esm2015/lib/components/card/card.component.metadata.json +0 -1
  475. package/esm2015/lib/components/card/index.metadata.json +0 -1
  476. package/esm2015/lib/components/chart/chart-js/chart-js.service.metadata.json +0 -1
  477. package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.metadata.json +0 -1
  478. package/esm2015/lib/components/chart/chart-js/configured-chart-js.metadata.json +0 -1
  479. package/esm2015/lib/components/chart/chart.component.metadata.json +0 -1
  480. package/esm2015/lib/components/chart/chart.module.metadata.json +0 -1
  481. package/esm2015/lib/components/chart/chart.types.metadata.json +0 -1
  482. package/esm2015/lib/components/chart/configs/annotations.config.metadata.json +0 -1
  483. package/esm2015/lib/components/chart/configs/chart-config.service.metadata.json +0 -1
  484. package/esm2015/lib/components/chart/configs/global-defaults.config.metadata.json +0 -1
  485. package/esm2015/lib/components/chart/configs/interaction-functions-extensions.config.metadata.json +0 -1
  486. package/esm2015/lib/components/chart/configs/shared.utils.metadata.json +0 -1
  487. package/esm2015/lib/components/chart/configs/type.config.metadata.json +0 -1
  488. package/esm2015/lib/components/chart/index.metadata.json +0 -1
  489. package/esm2015/lib/components/chart-deprecated/chart-deprecated-helper.metadata.json +0 -1
  490. package/esm2015/lib/components/chart-deprecated/chart-deprecated-type.metadata.json +0 -1
  491. package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.metadata.json +0 -1
  492. package/esm2015/lib/components/chart-deprecated/index.metadata.json +0 -1
  493. package/esm2015/lib/components/chart-deprecated/options/activitygauge.metadata.json +0 -1
  494. package/esm2015/lib/components/chart-deprecated/options/areaspline.metadata.json +0 -1
  495. package/esm2015/lib/components/chart-deprecated/options/bar.metadata.json +0 -1
  496. package/esm2015/lib/components/chart-deprecated/options/column.metadata.json +0 -1
  497. package/esm2015/lib/components/chart-deprecated/options/donut.metadata.json +0 -1
  498. package/esm2015/lib/components/chart-deprecated/options/timeseries.metadata.json +0 -1
  499. package/esm2015/lib/components/checkbox/checkbox.component.metadata.json +0 -1
  500. package/esm2015/lib/components/chip/chip.component.metadata.json +0 -1
  501. package/esm2015/lib/components/divider/divider.component.metadata.json +0 -1
  502. package/esm2015/lib/components/dropdown/dropdown.component.metadata.json +0 -1
  503. package/esm2015/lib/components/dropdown/dropdown.types.metadata.json +0 -1
  504. package/esm2015/lib/components/dropdown/keyboard-handler.service.metadata.json +0 -1
  505. package/esm2015/lib/components/empty-state/empty-state.component.metadata.json +0 -1
  506. package/esm2015/lib/components/fab-sheet/fab-sheet.component.metadata.json +0 -1
  507. package/esm2015/lib/components/flag/flag.component.metadata.json +0 -1
  508. package/esm2015/lib/components/form-field/directives/date/date-input.directive.metadata.json +0 -1
  509. package/esm2015/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.metadata.json +0 -1
  510. package/esm2015/lib/components/form-field/form-field-message/form-field-message.component.metadata.json +0 -1
  511. package/esm2015/lib/components/form-field/form-field.component.metadata.json +0 -1
  512. package/esm2015/lib/components/form-field/index.metadata.json +0 -1
  513. package/esm2015/lib/components/form-field/input/input.component.metadata.json +0 -1
  514. package/esm2015/lib/components/form-field/input-counter/input-counter.component.metadata.json +0 -1
  515. package/esm2015/lib/components/form-field/textarea/textarea.component.metadata.json +0 -1
  516. package/esm2015/lib/components/grid/breakpoint-helper.service.metadata.json +0 -1
  517. package/esm2015/lib/components/grid/grid-card-configuration.metadata.json +0 -1
  518. package/esm2015/lib/components/grid/grid.component.metadata.json +0 -1
  519. package/esm2015/lib/components/icon/icon-registry.service.metadata.json +0 -1
  520. package/esm2015/lib/components/icon/icon-settings.metadata.json +0 -1
  521. package/esm2015/lib/components/icon/icon.component.metadata.json +0 -1
  522. package/esm2015/lib/components/icon/icon.module.metadata.json +0 -1
  523. package/esm2015/lib/components/icon/index.metadata.json +0 -1
  524. package/esm2015/lib/components/icon/kirby-icon-settings.metadata.json +0 -1
  525. package/esm2015/lib/components/index.metadata.json +0 -1
  526. package/esm2015/lib/components/item/index.metadata.json +0 -1
  527. package/esm2015/lib/components/item/item.component.metadata.json +0 -1
  528. package/esm2015/lib/components/item/item.module.metadata.json +0 -1
  529. package/esm2015/lib/components/item/label/label.component.metadata.json +0 -1
  530. package/esm2015/lib/components/item-group/item-group.component.metadata.json +0 -1
  531. package/esm2015/lib/components/item-sliding/index.metadata.json +0 -1
  532. package/esm2015/lib/components/item-sliding/item-sliding.component.metadata.json +0 -1
  533. package/esm2015/lib/components/item-sliding/item-sliding.types.metadata.json +0 -1
  534. package/esm2015/lib/components/list/directives/infinite-scroll.directive.metadata.json +0 -1
  535. package/esm2015/lib/components/list/directives/list-item-color.directive.metadata.json +0 -1
  536. package/esm2015/lib/components/list/directives/scroll.model.metadata.json +0 -1
  537. package/esm2015/lib/components/list/helpers/list-helper.metadata.json +0 -1
  538. package/esm2015/lib/components/list/index.metadata.json +0 -1
  539. package/esm2015/lib/components/list/list-experimental/list-experimental.component.metadata.json +0 -1
  540. package/esm2015/lib/components/list/list-header/list-header.component.metadata.json +0 -1
  541. package/esm2015/lib/components/list/list-item/list-item.component.metadata.json +0 -1
  542. package/esm2015/lib/components/list/list-section-header/list-section-header.component.metadata.json +0 -1
  543. package/esm2015/lib/components/list/list-swipe-action.type.metadata.json +0 -1
  544. package/esm2015/lib/components/list/list.component.metadata.json +0 -1
  545. package/esm2015/lib/components/list/list.directive.metadata.json +0 -1
  546. package/esm2015/lib/components/list/list.event.metadata.json +0 -1
  547. package/esm2015/lib/components/list/list.module.metadata.json +0 -1
  548. package/esm2015/lib/components/list/pipes/group-by.pipe.metadata.json +0 -1
  549. package/esm2015/lib/components/loading-overlay/index.metadata.json +0 -1
  550. package/esm2015/lib/components/loading-overlay/loading-overlay.component.metadata.json +0 -1
  551. package/esm2015/lib/components/loading-overlay/loading-overlay.service.metadata.json +0 -1
  552. package/esm2015/lib/components/modal/action-sheet/action-sheet.component.metadata.json +0 -1
  553. package/esm2015/lib/components/modal/action-sheet/config/action-sheet-config.metadata.json +0 -1
  554. package/esm2015/lib/components/modal/action-sheet/config/action-sheet-item.metadata.json +0 -1
  555. package/esm2015/lib/components/modal/alert/alert.component.metadata.json +0 -1
  556. package/esm2015/lib/components/modal/alert/config/alert-config.metadata.json +0 -1
  557. package/esm2015/lib/components/modal/footer/modal-footer.component.metadata.json +0 -1
  558. package/esm2015/lib/components/modal/index.metadata.json +0 -1
  559. package/esm2015/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.metadata.json +0 -1
  560. package/esm2015/lib/components/modal/modal-wrapper/config/drawer-supplementary-action.metadata.json +0 -1
  561. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.helper.metadata.json +0 -1
  562. package/esm2015/lib/components/modal/modal-wrapper/config/modal-config.metadata.json +0 -1
  563. package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.metadata.json +0 -1
  564. package/esm2015/lib/components/modal/services/action-sheet.helper.metadata.json +0 -1
  565. package/esm2015/lib/components/modal/services/alert.helper.metadata.json +0 -1
  566. package/esm2015/lib/components/modal/services/modal-animation-builder.service.metadata.json +0 -1
  567. package/esm2015/lib/components/modal/services/modal-navigation.service.metadata.json +0 -1
  568. package/esm2015/lib/components/modal/services/modal.controller.metadata.json +0 -1
  569. package/esm2015/lib/components/modal/services/modal.helper.metadata.json +0 -1
  570. package/esm2015/lib/components/modal/services/modal.interfaces.metadata.json +0 -1
  571. package/esm2015/lib/components/page/index.metadata.json +0 -1
  572. package/esm2015/lib/components/page/page-footer/page-footer.component.metadata.json +0 -1
  573. package/esm2015/lib/components/page/page.component.metadata.json +0 -1
  574. package/esm2015/lib/components/page/page.module.metadata.json +0 -1
  575. package/esm2015/lib/components/popover/popover.component.metadata.json +0 -1
  576. package/esm2015/lib/components/progress-circle/progress-circle-ring.component.metadata.json +0 -1
  577. package/esm2015/lib/components/progress-circle/progress-circle.component.metadata.json +0 -1
  578. package/esm2015/lib/components/radio/index.metadata.json +0 -1
  579. package/esm2015/lib/components/radio/radio-group/radio-group.component.metadata.json +0 -1
  580. package/esm2015/lib/components/radio/radio.component.metadata.json +0 -1
  581. package/esm2015/lib/components/range/range.component.metadata.json +0 -1
  582. package/esm2015/lib/components/reorder-list/index.metadata.json +0 -1
  583. package/esm2015/lib/components/reorder-list/reorder-event.metadata.json +0 -1
  584. package/esm2015/lib/components/reorder-list/reorder-list.component.metadata.json +0 -1
  585. package/esm2015/lib/components/router-outlet/index.metadata.json +0 -1
  586. package/esm2015/lib/components/router-outlet/router-outlet.component.metadata.json +0 -1
  587. package/esm2015/lib/components/router-outlet/router-outlet.module.metadata.json +0 -1
  588. package/esm2015/lib/components/section-header/section-header.component.metadata.json +0 -1
  589. package/esm2015/lib/components/segmented-control/segment-item.metadata.json +0 -1
  590. package/esm2015/lib/components/segmented-control/segmented-control.component.metadata.json +0 -1
  591. package/esm2015/lib/components/shared/component-configuration.metadata.json +0 -1
  592. package/esm2015/lib/components/shared/component-loader.directive.metadata.json +0 -1
  593. package/esm2015/lib/components/shared/dynamic-component.metadata.json +0 -1
  594. package/esm2015/lib/components/shared/index.metadata.json +0 -1
  595. package/esm2015/lib/components/shared/resize-observer/resize-observer.factory.metadata.json +0 -1
  596. package/esm2015/lib/components/shared/resize-observer/resize-observer.service.metadata.json +0 -1
  597. package/esm2015/lib/components/shared/resize-observer/types/resize-observer-callback.metadata.json +0 -1
  598. package/esm2015/lib/components/shared/resize-observer/types/resize-observer-entry.metadata.json +0 -1
  599. package/esm2015/lib/components/shared/resize-observer/types/resize-observer.metadata.json +0 -1
  600. package/esm2015/lib/components/slide-button/slide-button.component.metadata.json +0 -1
  601. package/esm2015/lib/components/slides/slides.component.metadata.json +0 -1
  602. package/esm2015/lib/components/spinner/spinner.component.metadata.json +0 -1
  603. package/esm2015/lib/components/spinner/spinner.module.metadata.json +0 -1
  604. package/esm2015/lib/components/stock-chart-deprecated/index.metadata.json +0 -1
  605. package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.metadata.json +0 -1
  606. package/esm2015/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.metadata.json +0 -1
  607. package/esm2015/lib/components/tabs/index.metadata.json +0 -1
  608. package/esm2015/lib/components/tabs/tab-button/tab-button.component.metadata.json +0 -1
  609. package/esm2015/lib/components/tabs/tab-button/tab-button.events.metadata.json +0 -1
  610. package/esm2015/lib/components/tabs/tabs.component.metadata.json +0 -1
  611. package/esm2015/lib/components/tabs/tabs.module.metadata.json +0 -1
  612. package/esm2015/lib/components/tabs/tabs.service.metadata.json +0 -1
  613. package/esm2015/lib/components/toast/config/toast-config.metadata.json +0 -1
  614. package/esm2015/lib/components/toast/index.metadata.json +0 -1
  615. package/esm2015/lib/components/toast/services/toast.controller.metadata.json +0 -1
  616. package/esm2015/lib/components/toast/services/toast.helper.metadata.json +0 -1
  617. package/esm2015/lib/components/toggle/toggle.component.metadata.json +0 -1
  618. package/esm2015/lib/components/toggle-button/toggle-button.component.metadata.json +0 -1
  619. package/esm2015/lib/components/toggle-button/toggle-button.module.metadata.json +0 -1
  620. package/esm2015/lib/components/web-component-proxies.component.metadata.json +0 -1
  621. package/esm2015/lib/custom-elements-initializer.metadata.json +0 -1
  622. package/esm2015/lib/directives/element-as-button/element-as-button.directive.metadata.json +0 -1
  623. package/esm2015/lib/directives/fit-heading/fit-heading.directive.metadata.json +0 -1
  624. package/esm2015/lib/directives/fit-heading/fit-heading.module.metadata.json +0 -1
  625. package/esm2015/lib/directives/index.metadata.json +0 -1
  626. package/esm2015/lib/directives/key-handler/key-handler.directive.metadata.json +0 -1
  627. package/esm2015/lib/directives/modal-router-link/modal-router-link.directive.metadata.json +0 -1
  628. package/esm2015/lib/directives/theme-color/theme-color.directive.metadata.json +0 -1
  629. package/esm2015/lib/helpers/color-helper.metadata.json +0 -1
  630. package/esm2015/lib/helpers/deep-copy.metadata.json +0 -1
  631. package/esm2015/lib/helpers/design-token-helper.metadata.json +0 -1
  632. package/esm2015/lib/helpers/element-has-ancestor.metadata.json +0 -1
  633. package/esm2015/lib/helpers/index.metadata.json +0 -1
  634. package/esm2015/lib/helpers/line-clamp-helper.metadata.json +0 -1
  635. package/esm2015/lib/helpers/merge-deep.metadata.json +0 -1
  636. package/esm2015/lib/helpers/platform.service.metadata.json +0 -1
  637. package/esm2015/lib/helpers/string-helper.metadata.json +0 -1
  638. package/esm2015/lib/helpers/theme-color.type.metadata.json +0 -1
  639. package/esm2015/lib/helpers/unique-id-generator.helper.metadata.json +0 -1
  640. package/esm2015/lib/index.metadata.json +0 -1
  641. package/esm2015/lib/kirby.module.metadata.json +0 -1
  642. package/esm2015/lib/scss/scss-helper.metadata.json +0 -1
  643. package/esm2015/lib/types/window-ref.metadata.json +0 -1
  644. package/esm2015/testing-base/kirbydesign-designsystem-testing-base.metadata.json +0 -1
  645. package/esm2015/testing-base/lib/components/mock.accordion-item.component.metadata.json +0 -1
  646. package/esm2015/testing-base/lib/components/mock.action-sheet.component.metadata.json +0 -1
  647. package/esm2015/testing-base/lib/components/mock.app.component.metadata.json +0 -1
  648. package/esm2015/testing-base/lib/components/mock.avatar.component.metadata.json +0 -1
  649. package/esm2015/testing-base/lib/components/mock.button.component.metadata.json +0 -1
  650. package/esm2015/testing-base/lib/components/mock.calendar.component.metadata.json +0 -1
  651. package/esm2015/testing-base/lib/components/mock.card-footer.component.metadata.json +0 -1
  652. package/esm2015/testing-base/lib/components/mock.card-header.component.metadata.json +0 -1
  653. package/esm2015/testing-base/lib/components/mock.card.component.metadata.json +0 -1
  654. package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.metadata.json +0 -1
  655. package/esm2015/testing-base/lib/components/mock.chart.component.metadata.json +0 -1
  656. package/esm2015/testing-base/lib/components/mock.checkbox.component.metadata.json +0 -1
  657. package/esm2015/testing-base/lib/components/mock.chip.component.metadata.json +0 -1
  658. package/esm2015/testing-base/lib/components/mock.divider.component.metadata.json +0 -1
  659. package/esm2015/testing-base/lib/components/mock.dropdown.component.metadata.json +0 -1
  660. package/esm2015/testing-base/lib/components/mock.empty-state.component.metadata.json +0 -1
  661. package/esm2015/testing-base/lib/components/mock.fab-sheet.component.metadata.json +0 -1
  662. package/esm2015/testing-base/lib/components/mock.flag.component.metadata.json +0 -1
  663. package/esm2015/testing-base/lib/components/mock.form-field-message.component.metadata.json +0 -1
  664. package/esm2015/testing-base/lib/components/mock.form-field.component.metadata.json +0 -1
  665. package/esm2015/testing-base/lib/components/mock.grid.component.metadata.json +0 -1
  666. package/esm2015/testing-base/lib/components/mock.icon.component.metadata.json +0 -1
  667. package/esm2015/testing-base/lib/components/mock.input-counter.component.metadata.json +0 -1
  668. package/esm2015/testing-base/lib/components/mock.input.component.metadata.json +0 -1
  669. package/esm2015/testing-base/lib/components/mock.item-group.component.metadata.json +0 -1
  670. package/esm2015/testing-base/lib/components/mock.item-sliding.component.metadata.json +0 -1
  671. package/esm2015/testing-base/lib/components/mock.item.component.metadata.json +0 -1
  672. package/esm2015/testing-base/lib/components/mock.label.component.metadata.json +0 -1
  673. package/esm2015/testing-base/lib/components/mock.list-experimental.component.metadata.json +0 -1
  674. package/esm2015/testing-base/lib/components/mock.list-header.component.metadata.json +0 -1
  675. package/esm2015/testing-base/lib/components/mock.list-item.component.metadata.json +0 -1
  676. package/esm2015/testing-base/lib/components/mock.list-section-header.component.metadata.json +0 -1
  677. package/esm2015/testing-base/lib/components/mock.list.component.metadata.json +0 -1
  678. package/esm2015/testing-base/lib/components/mock.loading-overlay.component.metadata.json +0 -1
  679. package/esm2015/testing-base/lib/components/mock.modal-footer.component.metadata.json +0 -1
  680. package/esm2015/testing-base/lib/components/mock.page-footer.component.metadata.json +0 -1
  681. package/esm2015/testing-base/lib/components/mock.page.component.metadata.json +0 -1
  682. package/esm2015/testing-base/lib/components/mock.popover.component.metadata.json +0 -1
  683. package/esm2015/testing-base/lib/components/mock.progress-circle.component.metadata.json +0 -1
  684. package/esm2015/testing-base/lib/components/mock.radio-group.component.metadata.json +0 -1
  685. package/esm2015/testing-base/lib/components/mock.radio.component.metadata.json +0 -1
  686. package/esm2015/testing-base/lib/components/mock.range.component.metadata.json +0 -1
  687. package/esm2015/testing-base/lib/components/mock.reorder-list.component.metadata.json +0 -1
  688. package/esm2015/testing-base/lib/components/mock.router-outlet.component.metadata.json +0 -1
  689. package/esm2015/testing-base/lib/components/mock.section-header.component.metadata.json +0 -1
  690. package/esm2015/testing-base/lib/components/mock.segmented-control.component.metadata.json +0 -1
  691. package/esm2015/testing-base/lib/components/mock.slide-button.component.metadata.json +0 -1
  692. package/esm2015/testing-base/lib/components/mock.spinner.component.metadata.json +0 -1
  693. package/esm2015/testing-base/lib/components/mock.tab-button.component.metadata.json +0 -1
  694. package/esm2015/testing-base/lib/components/mock.tabs.component.metadata.json +0 -1
  695. package/esm2015/testing-base/lib/components/mock.textarea.component.metadata.json +0 -1
  696. package/esm2015/testing-base/lib/components/mock.toggle-button.component.metadata.json +0 -1
  697. package/esm2015/testing-base/lib/components/mock.toggle.component.metadata.json +0 -1
  698. package/esm2015/testing-base/lib/directives/mock.accordion.directive.metadata.json +0 -1
  699. package/esm2015/testing-base/lib/directives/mock.fit-heading.directive.metadata.json +0 -1
  700. package/esm2015/testing-base/lib/directives/mock.theme-color.directive.metadata.json +0 -1
  701. package/esm2015/testing-base/lib/kirby-testing-base.module.metadata.json +0 -1
  702. package/esm2015/testing-base/lib/mock-components.metadata.json +0 -1
  703. package/esm2015/testing-base/lib/mock-directives.metadata.json +0 -1
  704. package/esm2015/testing-base/public_api.metadata.json +0 -1
  705. package/esm2015/testing-jasmine/kirbydesign-designsystem-testing-jasmine.metadata.json +0 -1
  706. package/esm2015/testing-jasmine/lib/kirby-testing.module.metadata.json +0 -1
  707. package/esm2015/testing-jasmine/lib/mock-providers.metadata.json +0 -1
  708. package/esm2015/testing-jasmine/public_api.metadata.json +0 -1
  709. package/esm2015/testing-jest/kirbydesign-designsystem-testing-jest.metadata.json +0 -1
  710. package/esm2015/testing-jest/lib/kirby-testing.module.metadata.json +0 -1
  711. package/esm2015/testing-jest/lib/mock-providers.metadata.json +0 -1
  712. package/esm2015/testing-jest/public_api.metadata.json +0 -1
  713. package/kirbydesign-designsystem.metadata.json +0 -1
  714. package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +0 -1
  715. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.metadata.json +0 -1
  716. package/testing-jest/kirbydesign-designsystem-testing-jest.metadata.json +0 -1
@@ -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: ["@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{--vh100:var(--vh,1vh) * 100;--header-height:0px;--footer-height:0px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}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-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+XG4gID47XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBpb25Db250ZW50OiBJb25Db250ZW50O1xuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgaW9uQ29udGVudEVsZW1lbnQ6IEVsZW1lbnRSZWY8XG4gICAgSFRNTElvbkNvbnRlbnRFbGVtZW50XG4gID47XG4gIEBWaWV3Q2hpbGQoSW9uSGVhZGVyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIGlvbkhlYWRlckVsZW1lbnQ6IEVsZW1lbnRSZWY8XG4gICAgSFRNTElvbkhlYWRlckVsZW1lbnRcbiAgPjtcbiAgQFZpZXdDaGlsZChJb25Ub29sYmFyLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIGlvblRvb2xiYXJFbGVtZW50OiBFbGVtZW50UmVmPFxuICAgIEhUTUxJb25Ub29sYmFyRWxlbWVudFxuICA+O1xuICBAVmlld0NoaWxkKElvblRpdGxlLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIGlvblRpdGxlRWxlbWVudDogRWxlbWVudFJlZjxcbiAgICBIVE1MSW9uVGl0bGVFbGVtZW50XG4gID47XG4gIEBWaWV3Q2hpbGQoUm91dGVyT3V0bGV0LCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHJvdXRlck91dGxldDogUm91dGVyT3V0bGV0O1xuXG4gIHByaXZhdGUga2V5Ym9hcmRWaXNpYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgdG9vbGJhckJ1dHRvbnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBkZWxheWVkQ2xvc2UgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBkZWxheWVkQ2xvc2VUaW1lb3V0SWQ7XG4gIHByaXZhdGUgaW5pdGlhbFZpZXdwb3J0SGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgdmlld3BvcnRSZXNpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgaW9uTW9kYWxFbGVtZW50PzogSFRNTElvbk1vZGFsRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBpb25Nb2RhbERpZFByZXNlbnQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBkaWRQcmVzZW50ID0gdGhpcy5pb25Nb2RhbERpZFByZXNlbnQudG9Qcm9taXNlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9uTW9kYWxXaWxsRGlzbWlzcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHdpbGxDbG9zZSA9IHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy50b1Byb21pc2UoKTtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgdmlld3BvcnRSZXNpemUkID0gdGhpcy52aWV3cG9ydFJlc2l6ZVxuICAgIC5hc09ic2VydmFibGUoKVxuICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLlZJRVdQT1JUX1JFU0laRV9ERUJPVU5DRV9USU1FKSk7XG4gIHByaXZhdGUgX211dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZ2V0IG11dGF0aW9uT2JzZXJ2ZXIoKTogTXV0YXRpb25PYnNlcnZlciB7XG4gICAgaWYgKCF0aGlzLl9tdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLl9tdXRhdGlvbk9ic2VydmVyID0gdGhpcy5jcmVhdGVFbWJlZGRlZEVsZW1lbnRzTXV0YXRpb25PYnNlcnZlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbXV0YXRpb25PYnNlcnZlcjtcbiAgfVxuICBwcml2YXRlIF9pbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgZ2V0IGludGVyc2VjdGlvbk9ic2VydmVyKCk6IEludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICBpZiAoIXRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlciA9IHRoaXMuY3JlYXRlTW9kYWxXcmFwcGVySW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyO1xuICB9XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZHJhd2VyJylcbiAgZ2V0IF9pc0RyYXdlcigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZmxhdm9yID09PSAnZHJhd2VyJztcbiAgfVxuXG4gIHdpbGxDbG9zZSQgPSB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MucGlwZShmaXJzdCgpKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyU2VydmljZTogUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZixcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRWaWV3cG9ydEhlaWdodCgpO1xuICAgIHRoaXMub2JzZXJ2ZVZpZXdwb3J0UmVzaXplKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlvbk1vZGFsRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2lvbi1tb2RhbCcpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNpemluZygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZU1vZGFsUm91dGUoKTtcbiAgICB0aGlzLmxpc3RlbkZvcklvbk1vZGFsRGlkUHJlc2VudCgpO1xuICAgIHRoaXMubGlzdGVuRm9ySW9uTW9kYWxXaWxsRGlzbWlzcygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZU1vZGFsVG9Nb2RhbFdyYXBwZXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFByb3BzSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDT01QT05FTlRfUFJPUFMsIHVzZVZhbHVlOiB0aGlzLmNvbmZpZy5jb21wb25lbnRQcm9wcyB9XSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZU1vZGFsVG9Nb2RhbFdyYXBwZXIoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmZsYXZvciA9PT0gJ2RyYXdlcicgJiYgdGhpcy5jb25maWcuaW50ZXJhY3RXaXRoQmFja2dyb3VuZCkge1xuICAgICAgbWVyZ2UodGhpcy5pb25Nb2RhbERpZFByZXNlbnQsIHRoaXMudmlld3BvcnRSZXNpemUkKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIC8vIHdhaXQgZm9yIHRlbXBsYXRlIHRvIHJlbmRlclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9tUmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBkb2N1bWVudC5jbGllbnRXaWR0aCAtIGRvbVJlY3QucmlnaHQ7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW9uTW9kYWxFbGVtZW50LCAndG9wJywgYCR7ZG9tUmVjdC50b3B9cHhgKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pb25Nb2RhbEVsZW1lbnQsICdsZWZ0JywgYCR7ZG9tUmVjdC5sZWZ0fXB4YCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW9uTW9kYWxFbGVtZW50LCAncmlnaHQnLCBgJHtyaWdodH1weGApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTaXppbmcoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNpemUgPT09ICdmdWxsLWhlaWdodCcpIHJldHVybjtcbiAgICB0aGlzLnBhdGNoU2Nyb2xsRWxlbWVudFNpemUoKTtcbiAgICB0aGlzLm9ic2VydmVIZWFkZXJSZXNpemUoKTtcbiAgICB0aGlzLm9ic2VydmVNb2RhbEZ1bGxIZWlnaHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU1vZGFsUm91dGUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm1vZGFsUm91dGUpIHtcbiAgICAgIHRoaXMub25TaWJsaW5nTW9kYWxSb3V0ZUFjdGl2YXRlZCh0aGlzLmNvbmZpZy5zaWJsaW5nTW9kYWxSb3V0ZUFjdGl2YXRlZCQpO1xuICAgICAgLy8gTG9hZCBjb21wb25lbnQgZnJvbSBtb2RhbC1yb3V0ZSBpbnNpZGUgcm91dGVyLW91dGxldDpcbiAgICAgIHRoaXMucm91dGVyT3V0bGV0LmFjdGl2YXRlV2l0aCh0aGlzLmNvbmZpZy5tb2RhbFJvdXRlLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkKHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJD86IE9ic2VydmFibGU8QWN0aXZhdGVkUm91dGU+KSB7XG4gICAgaWYgKCFzaWJsaW5nTW9kYWxSb3V0ZUFjdGl2YXRlZCQpIHJldHVybjtcbiAgICBzaWJsaW5nTW9kYWxSb3V0ZUFjdGl2YXRlZCQucGlwZSh0YWtlVW50aWwodGhpcy53aWxsQ2xvc2UkKSkuc3Vic2NyaWJlKChyb3V0ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMucm91dGVyT3V0bGV0LmlzQWN0aXZhdGVkKSB7XG4gICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgdGhpcy5jbGVhckVtYmVkZGVkRWxlbWVudHMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm91dGVyT3V0bGV0LmFjdGl2YXRlV2l0aChyb3V0ZSwgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xuICAgICAgdGhpcy5jaGVja0ZvckVtYmVkZGVkRWxlbWVudHMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hTY3JvbGxFbGVtZW50U2l6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdXBwb3J0c0Nzc1NoYWRvd1BhcnRzID0gJ3BhcnQnIGluIEhUTUxFbGVtZW50LnByb3RvdHlwZTtcbiAgICBpZiAoc3VwcG9ydHNDc3NTaGFkb3dQYXJ0cykgcmV0dXJuO1xuICAgIHRoaXMuaW9uQ29udGVudC5nZXRTY3JvbGxFbGVtZW50KCkudGhlbigoc2Nyb2xsRWxlbWVudCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzY3JvbGxFbGVtZW50LCAnaGVpZ2h0JywgJzEwMCUnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2Nyb2xsRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICBpZiAodGhpcy5jb25maWcuZmxhdm9yID09PSAnZHJhd2VyJykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIHNjcm9sbEVsZW1lbnQsXG4gICAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICAgICdwYWRkaW5nLWJvdHRvbSAnICsgRGVzaWduVG9rZW5IZWxwZXIuc29mdEtleWJvYXJkVHJhbnNpdGlvbkxlYXZlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVNb2RhbEZ1bGxIZWlnaHQoKSB7XG4gICAgY29uc3QgaW9uTW9kYWxXcmFwcGVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdDxIVE1MRWxlbWVudD4oJy5tb2RhbC13cmFwcGVyJyk7XG4gICAgaWYgKCFpb25Nb2RhbFdyYXBwZXIpIHJldHVybjtcbiAgICAvLyBTdGFydCBvYnNlcnZpbmcgd2hlbiBtb2RhbCBoYXMgZmluaXNoZWQgYW5pbWF0aW5nOlxuICAgIHRoaXMuZGlkUHJlc2VudC50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShpb25Nb2RhbFdyYXBwZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2xiYXJCdXR0b25zUXVlcnkpIHtcbiAgICAgIHRoaXMudG9vbGJhckJ1dHRvbnMgPSB0aGlzLnRvb2xiYXJCdXR0b25zUXVlcnkubWFwKChidXR0b25SZWYpID0+IGJ1dHRvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0ZvckVtYmVkZGVkRWxlbWVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JFbWJlZGRlZEVsZW1lbnRzKCkge1xuICAgIHRoaXMubW92ZUVtYmVkZGVkRWxlbWVudHMoKTtcbiAgICB0aGlzLm9ic2VydmVFbWJlZGRlZEVsZW1lbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVIZWFkZXJSZXNpemUoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLmlvbkhlYWRlckVsZW1lbnQubmF0aXZlRWxlbWVudCwgKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBbcHJvcGVydHksIHBpeGVsVmFsdWVdID0gWyctLWhlYWRlci1oZWlnaHQnLCBgJHtlbnRyeS5jb250ZW50UmVjdC5oZWlnaHR9cHhgXTtcbiAgICAgIHRoaXMuc2V0Q3NzVmFyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwcm9wZXJ0eSwgcGl4ZWxWYWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVFbWJlZGRlZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLmdldEVtYmVkZGVkQ29tcG9uZW50RWxlbWVudCgpO1xuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmVsZW1lbnRUb1BhcmVudE1hcCkuZm9yRWFjaCgoW3RhZ05hbWUsIGdldE5ld1BhcmVudF0pID0+IHtcbiAgICAgICAgY29uc3QgZW1iZWRkZWRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pih0YWdOYW1lKTtcbiAgICAgICAgaWYgKGVtYmVkZGVkRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMubW92ZUNoaWxkKGVtYmVkZGVkRWxlbWVudCwgZ2V0TmV3UGFyZW50KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcklvbk1vZGFsRGlkUHJlc2VudCgpIHtcbiAgICBpZiAodGhpcy5pb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lvbk1vZGFsRGlkUHJlc2VudCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5pb25Nb2RhbERpZFByZXNlbnQubmV4dCgpO1xuICAgICAgICB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JJb25Nb2RhbFdpbGxEaXNtaXNzKCkge1xuICAgIGlmICh0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW9uTW9kYWxXaWxsRGlzbWlzcycsICgpID0+IHtcbiAgICAgICAgdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLm5leHQoKTtcbiAgICAgICAgdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb1RvcChzY3JvbGxEdXJhdGlvbj86IEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uKSB7XG4gICAgdGhpcy5pb25Db250ZW50LnNjcm9sbFRvVG9wKHNjcm9sbER1cmF0aW9uIHx8IDApO1xuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oc2Nyb2xsRHVyYXRpb24/OiBLaXJieUFuaW1hdGlvbi5EdXJhdGlvbikge1xuICAgIHRoaXMuaW9uQ29udGVudC5zY3JvbGxUb0JvdHRvbShzY3JvbGxEdXJhdGlvbiB8fCAwKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKGRhdGE/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaW9uTW9kYWxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5rZXlib2FyZFZpc2libGUgfHwgIXRoaXMudmlld3BvcnRSZXNpemVkKSB7XG4gICAgICAvLyBObyBrZXlib2FyZCB2aXNpYmxlIG9yIHZpZXdwb3J0IG5vdCByZXNpemVkOlxuICAgICAgLy8gRGlzbWlzcyBtb2RhbCBhbmQgcmV0dXJuOlxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXllZENsb3NlVGltZW91dElkKTtcbiAgICAgIGF3YWl0IHRoaXMuaW9uTW9kYWxFbGVtZW50LmRpc21pc3MoZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgdmlzaWJsZTpcbiAgICAvLyBCbHVyIGFjdGl2ZSBlbGVtZW50IGFuZCB3YWl0IGZvciBrZXlib2FyZCB0byBoaWRlLFxuICAgIC8vIHRoZW4gZGlzbWlzcyBtb2RhbCBhbmQgcmV0dXJuOlxuICAgIHRoaXMuYmx1ckFjdGl2ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuZGVsYXllZENsb3NlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmlvbk1vZGFsRWxlbWVudC5kaXNtaXNzKGRhdGEpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5kZWxheWVkQ2xvc2VUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KFxuICAgICAgICB0aGlzLmRlbGF5ZWRDbG9zZSxcbiAgICAgICAgTW9kYWxXcmFwcGVyQ29tcG9uZW50LktFWUJPQVJEX0hJREVfREVMQVlfSU5fTVNcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXMnKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXNvdXQnKVxuICBvbkZvY3VzQ2hhbmdlKCkge1xuICAgIC8vIFRoaXMgZml4ZXMgYW4gdW5kZXNpcmVkIHNjcm9sbCBiZWhhdmlvdXIgb2NjdXJyaW5nIG9uIGtleWJvYXJkLXRhYmJpbmcgYmFja3dhcmRzICh3aXRoIHNoaWZ0K3RhYik6XG4gICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LnNjcm9sbFRvKHsgdG9wOiB0aGlzLnNjcm9sbFkgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6aW9uS2V5Ym9hcmREaWRTaG93JywgWyckZXZlbnQuZGV0YWlsLmtleWJvYXJkSGVpZ2h0J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlib2FyZFdpbGxTaG93JywgWyckZXZlbnQua2V5Ym9hcmRIZWlnaHQnXSlcbiAgX29uS2V5Ym9hcmRTaG93KGtleWJvYXJkSGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLnNldEtleWJvYXJkVmlzaWJpbGl0eShrZXlib2FyZEhlaWdodCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6aW9uS2V5Ym9hcmREaWRIaWRlJylcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWJvYXJkV2lsbEhpZGUnKVxuICBfb25LZXlib2FyZEhpZGUoKSB7XG4gICAgdGhpcy5zZXRLZXlib2FyZFZpc2liaWxpdHkoMCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUNvbnRlbnRNYXhIZWlnaHQoZnJlZXplOiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2hvdWxkVG9nZ2xlTWF4SGVpZ2h0ID1cbiAgICAgIHRoaXMuY29uZmlnLmZsYXZvciA9PT0gJ21vZGFsJyAmJiB0aGlzLnBsYXRmb3JtLmlzUGhhYmxldE9yQmlnZ2VyKCk7XG4gICAgaWYgKCFzaG91bGRUb2dnbGVNYXhIZWlnaHQpIHJldHVybjtcbiAgICBjb25zdCBzdHlsZSA9ICdtYXgtaGVpZ2h0JztcbiAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGlmIChmcmVlemUpIHtcbiAgICAgICAgY29uc3QgY29udGVudEhlaWdodCA9IGNvbnRlbnRFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb250ZW50RWxlbWVudCwgc3R5bGUsIGAke2NvbnRlbnRIZWlnaHR9cHhgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoY29udGVudEVsZW1lbnQsIHN0eWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0S2V5Ym9hcmRWaXNpYmlsaXR5KGtleWJvYXJkSGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBrZXlib2FyZEFscmVhZHlWaXNpYmxlID0ga2V5Ym9hcmRIZWlnaHQgPiAwICYmIHRoaXMua2V5Ym9hcmRWaXNpYmxlO1xuICAgIGNvbnN0IGtleWJvYXJkQWxyZWFkeUhpZGRlbiA9IGtleWJvYXJkSGVpZ2h0ID09PSAwICYmICF0aGlzLmtleWJvYXJkVmlzaWJsZTtcbiAgICBpZiAoa2V5Ym9hcmRBbHJlYWR5VmlzaWJsZSB8fCBrZXlib2FyZEFscmVhZHlIaWRkZW4pIHJldHVybjtcbiAgICB0aGlzLmtleWJvYXJkVmlzaWJsZSA9IGtleWJvYXJkSGVpZ2h0ID4gMDtcbiAgICB0aGlzLnRvZ2dsZUNvbnRlbnRNYXhIZWlnaHQodGhpcy5rZXlib2FyZFZpc2libGUpO1xuICAgIHRoaXMuc2V0S2V5Ym9hcmRPdmVybGFwKGtleWJvYXJkSGVpZ2h0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0S2V5Ym9hcmRPdmVybGFwKGtleWJvYXJkSGVpZ2h0OiBudW1iZXIsIGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBpZiAoa2V5Ym9hcmRIZWlnaHQgPD0gMCB8fCAhZWxlbWVudCkgcmV0dXJuIDA7XG4gICAgY29uc3QgZGlzdGFuY2VGcm9tVmlld3BvcnRCb3R0b21Ub0VsZW1lbnQgPSBNYXRoLmZsb29yKFxuICAgICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmlubmVySGVpZ2h0IC0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b21cbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChrZXlib2FyZEhlaWdodCAtIGRpc3RhbmNlRnJvbVZpZXdwb3J0Qm90dG9tVG9FbGVtZW50LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3NzVmFyKGVsZW1lbnQ6IEVsZW1lbnQsIHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsIHByb3BlcnR5LCB2YWx1ZSwgUmVuZGVyZXJTdHlsZUZsYWdzMi5EYXNoQ2FzZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVDc3NDbGFzcyhlbGVtZW50OiBFbGVtZW50LCBrbGFzczogc3RyaW5nLCBjb25kaXRpb246IGJvb2xlYW4pIHtcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+XG4gICAgICBjb25kaXRpb24gPyB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsIGtsYXNzKSA6IHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwga2xhc3MpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0S2V5Ym9hcmRPdmVybGFwKGtleWJvYXJkSGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLnRvZ2dsZUNzc0NsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5Ym9hcmQtdmlzaWJsZScsIGtleWJvYXJkSGVpZ2h0ID4gMCk7XG4gICAgY29uc3Qga2V5Ym9hcmRPdmVybGFwID0gdGhpcy5nZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICBsZXQgc25hcEZvb3RlclRvS2V5Ym9hcmQgPSBmYWxzZTtcbiAgICBjb25zdCBlbWJlZGRlZEZvb3RlckVsZW1lbnQgPSB0aGlzLmdldEVtYmVkZGVkRm9vdGVyRWxlbWVudCgpO1xuICAgIGlmIChlbWJlZGRlZEZvb3RlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0Q3NzVmFyKGVtYmVkZGVkRm9vdGVyRWxlbWVudCwgJy0ta2V5Ym9hcmQtb2Zmc2V0JywgYCR7a2V5Ym9hcmRPdmVybGFwfXB4YCk7XG4gICAgICBzbmFwRm9vdGVyVG9LZXlib2FyZCA9IGVtYmVkZGVkRm9vdGVyRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NuYXAtdG8ta2V5Ym9hcmQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50S2V5Ym9hcmRPZmZzZXQgPSBzbmFwRm9vdGVyVG9LZXlib2FyZFxuICAgICAgPyBrZXlib2FyZE92ZXJsYXBcbiAgICAgIDogdGhpcy5nZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQsIGNvbnRlbnRFbGVtZW50KTtcbiAgICB0aGlzLnNldENzc1Zhcihjb250ZW50RWxlbWVudCwgJy0ta2V5Ym9hcmQtb2Zmc2V0JywgYCR7Y29udGVudEtleWJvYXJkT2Zmc2V0fXB4YCk7XG4gIH1cblxuICBvbkhlYWRlclRvdWNoU3RhcnQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICBpZiAodGhpcy5rZXlib2FyZFZpc2libGUpIHtcbiAgICAgIGNvbnN0IGlzVG9vbGJhckJ1dHRvblRvdWNoID0gdGhpcy50b29sYmFyQnV0dG9ucy5zb21lKChidXR0b24pID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAgIChldmVudC50YXJnZXQgPT09IGJ1dHRvbiB8fCBidXR0b24uY29udGFpbnMoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgLy8gUHJldmVudCBibHVyIGlmIGV2ZW50IHRhcmdldCBpcyBhIHRvb2xiYXIgYnV0dG9uXG4gICAgICAvLyAodG8gYWxsb3cgdGFwIGV2ZW50IHRvIGZpcmUpOlxuICAgICAgaWYgKCFpc1Rvb2xiYXJCdXR0b25Ub3VjaCkge1xuICAgICAgICB0aGlzLmJsdXJBY3RpdmVFbGVtZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIF9vbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLnNldFZpZXdwb3J0SGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFZpZXdwb3J0SGVpZ2h0KCkge1xuICAgIGNvbnN0IHZoID0gKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5pbm5lckhlaWdodCAqIDAuMDEpLnRvRml4ZWQoMik7XG4gICAgdGhpcy5zZXRDc3NWYXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICctLXZoJywgYCR7dmh9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZVZpZXdwb3J0UmVzaXplKCkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmJvZHksIChlbnRyeSkgPT5cbiAgICAgIHRoaXMub25WaWV3cG9ydFJlc2l6ZShlbnRyeSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblZpZXdwb3J0UmVzaXplKGVudHJ5OiBSZXNpemVPYnNlcnZlckVudHJ5KSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxWaWV3cG9ydEhlaWdodCkge1xuICAgICAgLy8gSW5pdGlhbCBvYnNlcnZlIGNhbGxiYWNrLCByZWdpc3RlciBpbml0aWFsIGhlaWdodDpcbiAgICAgIHRoaXMuaW5pdGlhbFZpZXdwb3J0SGVpZ2h0ID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpZXdwb3J0UmVzaXplZCA9IGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodCAhPT0gdGhpcy5pbml0aWFsVmlld3BvcnRIZWlnaHQ7XG4gICAgaWYgKCF0aGlzLnZpZXdwb3J0UmVzaXplZCkge1xuICAgICAgLy8gV2UgYXJlIGJhY2sgdG8gaW5pdGlhbCB2aWV3IHBvcnQgaGVpZ2h0LCBjaGVjayBmb3IgcGVuZGluZyBjbG9zZSBmdW5jOlxuICAgICAgaWYgKHRoaXMuZGVsYXllZENsb3NlVGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlbGF5ZWRDbG9zZVRpbWVvdXRJZCk7XG4gICAgICAgIHRoaXMuZGVsYXllZENsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmlld3BvcnRSZXNpemUubmV4dCgpO1xuICB9XG5cbiAgYmx1ckFjdGl2ZUVsZW1lbnQoKSB7XG4gICAgY29uc3QgQkxVUl9UQVJHRVRfU0VMRUNUT1IgPSAnaW5wdXQsIHRleHRhcmVhJztcbiAgICBpZiAodGhpcy5rZXlib2FyZFZpc2libGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubWF0Y2hlcyhCTFVSX1RBUkdFVF9TRUxFQ1RPUilcbiAgICAgICkge1xuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRUb1BhcmVudE1hcDogeyBba2V5OiBzdHJpbmddOiAoKSA9PiBIVE1MRWxlbWVudCB9ID0ge1xuICAgICdLSVJCWS1NT0RBTC1GT09URVInOiAoKSA9PiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAnS0lSQlktUEFHRS1USVRMRSc6ICgpID0+IHRoaXMuaW9uVGl0bGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgJ0tJUkJZLVBBR0UtUFJPR1JFU1MnOiAoKSA9PiB0aGlzLmlvblRvb2xiYXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gIH07XG5cbiAgcHJpdmF0ZSBjbGVhckVtYmVkZGVkRWxlbWVudHMoKSB7XG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5lbGVtZW50VG9QYXJlbnRNYXApLmZvckVhY2goKFt0YWdOYW1lLCBnZXRQYXJlbnRdKSA9PiB7XG4gICAgICBjb25zdCBlbWJlZGRlZEVsZW1lbnQgPSBnZXRQYXJlbnQoKS5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgOnNjb3BlID4gJHt0YWdOYW1lfWApO1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChlbWJlZGRlZEVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbWJlZGRlZENvbXBvbmVudEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25maWcubW9kYWxSb3V0ZVxuICAgICAgPyB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQubGFzdEVsZW1lbnRDaGlsZFxuICAgICAgOiB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gIH1cblxuICBwcml2YXRlIGdldEVtYmVkZGVkRm9vdGVyRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ2tpcmJ5LW1vZGFsLWZvb3RlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQ2hpbGQoY2hpbGQ6IEVsZW1lbnQsIG5ld1BhcmVudDogRWxlbWVudCkge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoY2hpbGQucGFyZW50RWxlbWVudCwgY2hpbGQpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobmV3UGFyZW50LCBjaGlsZCk7XG4gICAgaWYgKGNoaWxkLnRhZ05hbWUgPT09ICdLSVJCWS1NT0RBTC1GT09URVInKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKGNoaWxkLCAoZW50cnkpID0+IHtcbiAgICAgICAgY29uc3QgW3Byb3BlcnR5LCBwaXhlbFZhbHVlXSA9IFtcbiAgICAgICAgICAnLS1mb290ZXItaGVpZ2h0JyxcbiAgICAgICAgICBgJHtNYXRoLmZsb29yKGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodCl9cHhgLFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLnNldENzc1Zhcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgcHJvcGVydHksIHBpeGVsVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVDaGlsZChjaGlsZD86IEVsZW1lbnQpIHtcbiAgICBpZiAoISFjaGlsZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnRFbGVtZW50LCBjaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlRW1iZWRkZWRFbGVtZW50cygpIHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5nZXRFbWJlZGRlZENvbXBvbmVudEVsZW1lbnQoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnRFbGVtZW50LCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsIC8vIExpc3RlbiBmb3IgYWRkaXRpb24gb3IgcmVtb3ZhbCBvZiBjaGlsZCBub2Rlc1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbWJlZGRlZEVsZW1lbnRzTXV0YXRpb25PYnNlcnZlcigpOiBNdXRhdGlvbk9ic2VydmVyIHtcbiAgICBjb25zdCBvYnNlcnZlZEVsZW1lbnRzID0gT2JqZWN0LmtleXModGhpcy5lbGVtZW50VG9QYXJlbnRNYXApO1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uczogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgICAgY29uc3QgYWRkZWROb2RlcyA9IG11dGF0aW9uc1xuICAgICAgICAuZmlsdGVyKChtdXRhdGlvbikgPT4gbXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcpIC8vIEZpbHRlciBmb3IgbXV0YXRpb24gdG8gdGhlIHRyZWUgb2Ygbm9kZXNcbiAgICAgICAgLm1hcCgobXV0YXRpb24pID0+IHtcbiAgICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBhZGRlZE5vZGVzIGFzIHJlbW92YWwgaXMgaGFuZGxlZCBieSB0aGUgQW5ndWxhciByZW5kZXJlcjpcbiAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShtdXRhdGlvbi5hZGRlZE5vZGVzKS5maWx0ZXIoKG5vZGUpID0+XG4gICAgICAgICAgICBvYnNlcnZlZEVsZW1lbnRzLmluY2x1ZGVzKG5vZGUubm9kZU5hbWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZGVkRWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGVcbiAgICAgICAgLmNvbmNhdCguLi5hZGRlZE5vZGVzKVxuICAgICAgICAuZmlsdGVyKChub2RlKTogbm9kZSBpcyBIVE1MRWxlbWVudCA9PiBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpO1xuXG4gICAgICBhZGRlZEVsZW1lbnRzLmZvckVhY2goKGFkZGVkRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdQYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50VG9QYXJlbnRNYXBbYWRkZWRFbGVtZW50Lm5vZGVOYW1lXSgpO1xuICAgICAgICAvLyBNb3ZlIGVtYmVkZGVkIGVsZW1lbnQgb3V0IG9mIGNvbnRlbnQgYW5kIGFwcGVuZCB0byBuZXcgcGFyZW50OlxuICAgICAgICB0aGlzLm1vdmVDaGlsZChhZGRlZEVsZW1lbnQsIG5ld1BhcmVudEVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNb2RhbFdyYXBwZXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgY29uc3QgY2FsbGJhY2s6IEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllcykgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgY29uc3QgaXNUb3VjaGluZ1ZpZXdwb3J0ID0gZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPCAxO1xuICAgICAgaWYgKGlzVG91Y2hpbmdWaWV3cG9ydCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVudHJ5LnRhcmdldCwgJ2Z1bGwtaGVpZ2h0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVudHJ5LnRhcmdldCwgJ2Z1bGwtaGVpZ2h0Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFNldCBleHBsaWNpdCB2aWV3cG9ydCByb290IGlmIHdpdGhpbiBpZnJhbWU6XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5mcmFtZUVsZW1lbnRcbiAgICAgID8gKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudCBhcyBhbnkpIC8vIENhc3QgdG8gYGFueWAgYXMgVHlwZXNjcmlwdCBsaWIuZC50cyBkb2VzbnQgc3VwcG9ydCBEb2N1bWVudCB0eXBlIHlldFxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb3B0aW9uczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICAgICAgcm9vdE1hcmdpbjogJzBweCAwcHggLTFweCAwcHgnLCAvLyBgYm90dG9tOiAtMXB4YCBhbGxvd3MgY2hlY2tpbmcgd2hlbiB0aGUgbW9kYWwgYm90dG9tIGlzIHRvdWNoaW5nIHRoZSB2aWV3cG9ydFxuICAgICAgcm9vdCxcbiAgICAgIHRocmVzaG9sZDogWzAuOTksIDFdLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnJvdXRlck91dGxldC5pc0FjdGl2YXRlZCkge1xuICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgICAvL2NsZWFuIHVwIHRoZSBvYnNlcnZlclxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgZGVsZXRlIHRoaXMuX211dGF0aW9uT2JzZXJ2ZXI7XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgZGVsZXRlIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZSkge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5ib2R5KTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLnVub2JzZXJ2ZSh0aGlzLmlvbkhlYWRlckVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5nZXRFbWJlZGRlZEZvb3RlckVsZW1lbnQoKSk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
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==