@kirbydesign/designsystem 11.0.0 → 11.1.1

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 (986) hide show
  1. package/accordion/index.d.ts +42 -6
  2. package/accordion/index.d.ts.map +1 -0
  3. package/action-group/index.d.ts +43 -6
  4. package/action-group/index.d.ts.map +1 -0
  5. package/avatar/index.d.ts +28 -6
  6. package/avatar/index.d.ts.map +1 -0
  7. package/badge/index.d.ts +20 -6
  8. package/badge/index.d.ts.map +1 -0
  9. package/button/index.d.ts +43 -6
  10. package/button/index.d.ts.map +1 -0
  11. package/calendar/index.d.ts +137 -6
  12. package/calendar/index.d.ts.map +1 -0
  13. package/card/index.d.ts +72 -6
  14. package/card/index.d.ts.map +1 -0
  15. package/chart/index.d.ts +198 -4
  16. package/chart/index.d.ts.map +1 -0
  17. package/checkbox/index.d.ts +69 -6
  18. package/checkbox/index.d.ts.map +1 -0
  19. package/config/index.d.ts +40 -4
  20. package/config/index.d.ts.map +1 -0
  21. package/data-table/index.d.ts +30 -4
  22. package/data-table/index.d.ts.map +1 -0
  23. package/divider/index.d.ts +10 -6
  24. package/divider/index.d.ts.map +1 -0
  25. package/dropdown/index.d.ts +166 -6
  26. package/dropdown/index.d.ts.map +1 -0
  27. package/empty-state/index.d.ts +37 -6
  28. package/empty-state/index.d.ts.map +1 -0
  29. package/fab-sheet/index.d.ts +29 -6
  30. package/fab-sheet/index.d.ts.map +1 -0
  31. package/fesm2022/kirbydesign-designsystem-accordion.mjs +42 -22
  32. package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
  33. package/fesm2022/kirbydesign-designsystem-action-group.mjs +5 -7
  34. package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
  35. package/fesm2022/kirbydesign-designsystem-avatar.mjs +4 -4
  36. package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
  37. package/fesm2022/kirbydesign-designsystem-badge.mjs +4 -6
  38. package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
  39. package/fesm2022/kirbydesign-designsystem-button.mjs +4 -5
  40. package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
  41. package/fesm2022/kirbydesign-designsystem-calendar.mjs +4 -6
  42. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  43. package/fesm2022/kirbydesign-designsystem-card.mjs +20 -21
  44. package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
  45. package/fesm2022/kirbydesign-designsystem-chart.mjs +478 -478
  46. package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
  47. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +6 -8
  48. package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
  49. package/fesm2022/kirbydesign-designsystem-config.mjs.map +1 -1
  50. package/fesm2022/kirbydesign-designsystem-data-table.mjs +8 -8
  51. package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
  52. package/fesm2022/kirbydesign-designsystem-divider.mjs +4 -5
  53. package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
  54. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +27 -22
  55. package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  56. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +10 -9
  57. package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
  58. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +5 -6
  59. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
  60. package/fesm2022/kirbydesign-designsystem-flag.mjs +5 -6
  61. package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
  62. package/fesm2022/kirbydesign-designsystem-form-field.mjs +48 -41
  63. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  64. package/fesm2022/kirbydesign-designsystem-header.mjs +20 -20
  65. package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
  66. package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
  67. package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
  68. package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
  69. package/fesm2022/kirbydesign-designsystem-icon.mjs +11 -10
  70. package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
  71. package/fesm2022/kirbydesign-designsystem-item-group.mjs +4 -5
  72. package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
  73. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +4 -4
  74. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
  75. package/fesm2022/kirbydesign-designsystem-item.mjs +12 -13
  76. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  77. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
  78. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
  79. package/fesm2022/kirbydesign-designsystem-list.mjs +43 -46
  80. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  81. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +8 -8
  82. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
  83. package/fesm2022/kirbydesign-designsystem-menu.mjs +8 -10
  84. package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
  85. package/fesm2022/kirbydesign-designsystem-modal.mjs +643 -634
  86. package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
  87. package/fesm2022/kirbydesign-designsystem-page.mjs +67 -54
  88. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  89. package/fesm2022/kirbydesign-designsystem-popover.mjs +5 -6
  90. package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
  91. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +8 -9
  92. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
  93. package/fesm2022/kirbydesign-designsystem-radio.mjs +16 -16
  94. package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
  95. package/fesm2022/kirbydesign-designsystem-range.mjs +6 -8
  96. package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
  97. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +4 -4
  98. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
  99. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +9 -10
  100. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
  101. package/fesm2022/kirbydesign-designsystem-section-header.mjs +4 -5
  102. package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
  103. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
  104. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  105. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
  106. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
  107. package/fesm2022/kirbydesign-designsystem-shared.mjs +18 -18
  108. package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
  109. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +17 -70
  110. package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
  111. package/fesm2022/kirbydesign-designsystem-slide.mjs +14 -14
  112. package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
  113. package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
  114. package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
  115. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +11 -11
  116. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
  117. package/fesm2022/kirbydesign-designsystem-tabs.mjs +14 -15
  118. package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
  119. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +286 -286
  120. package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
  121. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
  122. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
  123. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
  124. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
  125. package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
  126. package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
  127. package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
  128. package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
  129. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +9 -10
  130. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
  131. package/fesm2022/kirbydesign-designsystem-toggle.mjs +6 -8
  132. package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
  133. package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
  134. package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
  135. package/fesm2022/kirbydesign-designsystem.mjs +17 -18
  136. package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
  137. package/flag/index.d.ts +14 -6
  138. package/flag/index.d.ts.map +1 -0
  139. package/form-field/index.d.ts +230 -6
  140. package/form-field/index.d.ts.map +1 -0
  141. package/header/index.d.ts +70 -6
  142. package/header/index.d.ts.map +1 -0
  143. package/helpers/index.d.ts +94 -4
  144. package/helpers/index.d.ts.map +1 -0
  145. package/helpers/scss/index.d.ts +9 -6
  146. package/helpers/scss/index.d.ts.map +1 -0
  147. package/icon/index.d.ts +66 -4
  148. package/icon/index.d.ts.map +1 -0
  149. package/icons/svg/top-up.svg +1 -0
  150. package/index.d.ts +222 -6
  151. package/index.d.ts.map +1 -0
  152. package/item/index.d.ts +53 -6
  153. package/item/index.d.ts.map +1 -0
  154. package/item-group/index.d.ts +10 -6
  155. package/item-group/index.d.ts.map +1 -0
  156. package/item-sliding/index.d.ts +28 -6
  157. package/item-sliding/index.d.ts.map +1 -0
  158. package/kirby-app/index.d.ts +21 -6
  159. package/kirby-app/index.d.ts.map +1 -0
  160. package/list/index.d.ts +282 -4
  161. package/list/index.d.ts.map +1 -0
  162. package/loading-overlay/index.d.ts +26 -6
  163. package/loading-overlay/index.d.ts.map +1 -0
  164. package/menu/index.d.ts +71 -6
  165. package/menu/index.d.ts.map +1 -0
  166. package/modal/index.d.ts +492 -4
  167. package/modal/index.d.ts.map +1 -0
  168. package/package.json +17 -17
  169. package/page/index.d.ts +233 -4
  170. package/page/index.d.ts.map +1 -0
  171. package/popover/index.d.ts +40 -6
  172. package/popover/index.d.ts.map +1 -0
  173. package/progress-circle/index.d.ts +64 -6
  174. package/progress-circle/index.d.ts.map +1 -0
  175. package/radio/index.d.ts +100 -6
  176. package/radio/index.d.ts.map +1 -0
  177. package/range/index.d.ts +45 -6
  178. package/range/index.d.ts.map +1 -0
  179. package/reorder-list/index.d.ts +34 -6
  180. package/reorder-list/index.d.ts.map +1 -0
  181. package/router-outlet/index.d.ts +20 -6
  182. package/router-outlet/index.d.ts.map +1 -0
  183. package/section-header/index.d.ts +9 -6
  184. package/section-header/index.d.ts.map +1 -0
  185. package/shared/floating/index.d.ts +138 -4
  186. package/shared/floating/index.d.ts.map +1 -0
  187. package/shared/index.d.ts +150 -4
  188. package/shared/index.d.ts.map +1 -0
  189. package/shared/portal/index.d.ts +36 -4
  190. package/shared/portal/index.d.ts.map +1 -0
  191. package/slide/index.d.ts +66 -6
  192. package/slide/index.d.ts.map +1 -0
  193. package/slide-button/index.d.ts +35 -6
  194. package/slide-button/index.d.ts.map +1 -0
  195. package/spinner/index.d.ts +16 -6
  196. package/spinner/index.d.ts.map +1 -0
  197. package/tab-navigation/index.d.ts +58 -6
  198. package/tab-navigation/index.d.ts.map +1 -0
  199. package/tabs/index.d.ts +49 -6
  200. package/tabs/index.d.ts.map +1 -0
  201. package/testing/index.d.ts +62 -6
  202. package/testing/index.d.ts.map +1 -0
  203. package/testing-base/index.d.ts +816 -6
  204. package/testing-base/index.d.ts.map +1 -0
  205. package/testing-jasmine/index.d.ts +11 -6
  206. package/testing-jasmine/index.d.ts.map +1 -0
  207. package/testing-jest/index.d.ts +11 -6
  208. package/testing-jest/index.d.ts.map +1 -0
  209. package/toast/index.d.ts +34 -6
  210. package/toast/index.d.ts.map +1 -0
  211. package/toggle/index.d.ts +64 -6
  212. package/toggle/index.d.ts.map +1 -0
  213. package/toggle-button/index.d.ts +58 -6
  214. package/toggle-button/index.d.ts.map +1 -0
  215. package/types/index.d.ts +21 -6
  216. package/types/index.d.ts.map +1 -0
  217. package/accordion/accordion-item.component.d.ts +0 -22
  218. package/accordion/accordion-item.component.d.ts.map +0 -1
  219. package/accordion/accordion.directive.d.ts +0 -6
  220. package/accordion/accordion.directive.d.ts.map +0 -1
  221. package/accordion/accordion.module.d.ts +0 -10
  222. package/accordion/accordion.module.d.ts.map +0 -1
  223. package/accordion/kirbydesign-designsystem-accordion.d.ts.map +0 -1
  224. package/accordion/public_api.d.ts +0 -4
  225. package/accordion/public_api.d.ts.map +0 -1
  226. package/action-group/action-group.component.d.ts +0 -40
  227. package/action-group/action-group.component.d.ts.map +0 -1
  228. package/action-group/kirbydesign-designsystem-action-group.d.ts.map +0 -1
  229. package/action-group/public_api.d.ts +0 -2
  230. package/action-group/public_api.d.ts.map +0 -1
  231. package/avatar/avatar.component.d.ts +0 -25
  232. package/avatar/avatar.component.d.ts.map +0 -1
  233. package/avatar/kirbydesign-designsystem-avatar.d.ts.map +0 -1
  234. package/avatar/public_api.d.ts +0 -2
  235. package/avatar/public_api.d.ts.map +0 -1
  236. package/badge/badge.component.d.ts +0 -16
  237. package/badge/badge.component.d.ts.map +0 -1
  238. package/badge/kirbydesign-designsystem-badge.d.ts.map +0 -1
  239. package/badge/public_api.d.ts +0 -2
  240. package/badge/public_api.d.ts.map +0 -1
  241. package/button/button.component.d.ts +0 -39
  242. package/button/button.component.d.ts.map +0 -1
  243. package/button/kirbydesign-designsystem-button.d.ts.map +0 -1
  244. package/button/public_api.d.ts +0 -2
  245. package/button/public_api.d.ts.map +0 -1
  246. package/calendar/calendar.component.d.ts +0 -113
  247. package/calendar/calendar.component.d.ts.map +0 -1
  248. package/calendar/interfaces/calendar-day.d.ts +0 -18
  249. package/calendar/interfaces/calendar-day.d.ts.map +0 -1
  250. package/calendar/interfaces/calendar-year-navigator-config.d.ts +0 -5
  251. package/calendar/interfaces/calendar-year-navigator-config.d.ts.map +0 -1
  252. package/calendar/kirbydesign-designsystem-calendar.d.ts.map +0 -1
  253. package/calendar/public_api.d.ts +0 -3
  254. package/calendar/public_api.d.ts.map +0 -1
  255. package/card/card-as-button/card-as-button.directive.d.ts +0 -16
  256. package/card/card-as-button/card-as-button.directive.d.ts.map +0 -1
  257. package/card/card-flag-level.d.ts +0 -3
  258. package/card/card-flag-level.d.ts.map +0 -1
  259. package/card/card-footer/card-footer.component.d.ts +0 -7
  260. package/card/card-footer/card-footer.component.d.ts.map +0 -1
  261. package/card/card-header/card-header.component.d.ts +0 -13
  262. package/card/card-header/card-header.component.d.ts.map +0 -1
  263. package/card/card.component.d.ts +0 -27
  264. package/card/card.component.d.ts.map +0 -1
  265. package/card/card.module.d.ts +0 -13
  266. package/card/card.module.d.ts.map +0 -1
  267. package/card/kirbydesign-designsystem-card.d.ts.map +0 -1
  268. package/card/public_api.d.ts +0 -7
  269. package/card/public_api.d.ts.map +0 -1
  270. package/chart/chart/chart.component.d.ts +0 -8
  271. package/chart/chart/chart.component.d.ts.map +0 -1
  272. package/chart/chart/index.d.ts +0 -2
  273. package/chart/chart/index.d.ts.map +0 -1
  274. package/chart/chart-config/chart-bar-config/chart-bar-config.d.ts +0 -10
  275. package/chart/chart-config/chart-bar-config/chart-bar-config.d.ts.map +0 -1
  276. package/chart/chart-config/chart-base-config.d.ts +0 -7
  277. package/chart/chart-config/chart-base-config.d.ts.map +0 -1
  278. package/chart/chart-config/chart-stock-config/chart-stock-config.d.ts +0 -21
  279. package/chart/chart-config/chart-stock-config/chart-stock-config.d.ts.map +0 -1
  280. package/chart/chart-config/chart-stock-config/data-label-position/data-label-position.d.ts +0 -5
  281. package/chart/chart-config/chart-stock-config/data-label-position/data-label-position.d.ts.map +0 -1
  282. package/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.d.ts +0 -3
  283. package/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.d.ts.map +0 -1
  284. package/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.model.d.ts +0 -13
  285. package/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.model.d.ts.map +0 -1
  286. package/chart/charts.module.d.ts +0 -9
  287. package/chart/charts.module.d.ts.map +0 -1
  288. package/chart/kirbydesign-designsystem-chart.d.ts.map +0 -1
  289. package/chart/public_api.d.ts +0 -7
  290. package/chart/public_api.d.ts.map +0 -1
  291. package/chart/shared/base-chart/base-chart.component.d.ts +0 -35
  292. package/chart/shared/base-chart/base-chart.component.d.ts.map +0 -1
  293. package/chart/shared/base-chart/index.d.ts +0 -2
  294. package/chart/shared/base-chart/index.d.ts.map +0 -1
  295. package/chart/shared/chart-config-service/chart-config.service.d.ts +0 -31
  296. package/chart/shared/chart-config-service/chart-config.service.d.ts.map +0 -1
  297. package/chart/shared/chart-config-service/configs/annotations.config.d.ts +0 -3
  298. package/chart/shared/chart-config-service/configs/annotations.config.d.ts.map +0 -1
  299. package/chart/shared/chart-config-service/configs/global-defaults.config.d.ts +0 -49
  300. package/chart/shared/chart-config-service/configs/global-defaults.config.d.ts.map +0 -1
  301. package/chart/shared/chart-config-service/configs/interaction-functions-extensions.config.d.ts +0 -5
  302. package/chart/shared/chart-config-service/configs/interaction-functions-extensions.config.d.ts.map +0 -1
  303. package/chart/shared/chart-config-service/configs/type.config.d.ts +0 -3
  304. package/chart/shared/chart-config-service/configs/type.config.d.ts.map +0 -1
  305. package/chart/shared/chart-config-service/index.d.ts +0 -2
  306. package/chart/shared/chart-config-service/index.d.ts.map +0 -1
  307. package/chart/shared/chart-js-service/annotations.delegate.d.ts +0 -17
  308. package/chart/shared/chart-js-service/annotations.delegate.d.ts.map +0 -1
  309. package/chart/shared/chart-js-service/chart-js.service.d.ts +0 -46
  310. package/chart/shared/chart-js-service/chart-js.service.d.ts.map +0 -1
  311. package/chart/shared/chart-js-service/chartjs-plugin-marker/chartjs-plugin-marker.d.ts +0 -15
  312. package/chart/shared/chart-js-service/chartjs-plugin-marker/chartjs-plugin-marker.d.ts.map +0 -1
  313. package/chart/shared/chart-js-service/configured-chart-js.d.ts +0 -4
  314. package/chart/shared/chart-js-service/configured-chart-js.d.ts.map +0 -1
  315. package/chart/shared/chart-js-service/index.d.ts +0 -3
  316. package/chart/shared/chart-js-service/index.d.ts.map +0 -1
  317. package/chart/shared/chart-js-service/test-utils.d.ts +0 -5
  318. package/chart/shared/chart-js-service/test-utils.d.ts.map +0 -1
  319. package/chart/shared/charts.types.d.ts +0 -27
  320. package/chart/shared/charts.types.d.ts.map +0 -1
  321. package/chart/shared/index.d.ts +0 -5
  322. package/chart/shared/index.d.ts.map +0 -1
  323. package/chart/stock-chart/index.d.ts +0 -2
  324. package/chart/stock-chart/index.d.ts.map +0 -1
  325. package/chart/stock-chart/stock-chart-js.service.d.ts +0 -38
  326. package/chart/stock-chart/stock-chart-js.service.d.ts.map +0 -1
  327. package/chart/stock-chart/stock-chart.component.d.ts +0 -10
  328. package/chart/stock-chart/stock-chart.component.d.ts.map +0 -1
  329. package/checkbox/checkbox.component.d.ts +0 -66
  330. package/checkbox/checkbox.component.d.ts.map +0 -1
  331. package/checkbox/kirbydesign-designsystem-checkbox.d.ts.map +0 -1
  332. package/checkbox/public_api.d.ts +0 -2
  333. package/checkbox/public_api.d.ts.map +0 -1
  334. package/config/kirbydesign-designsystem-config.d.ts.map +0 -1
  335. package/config/provide-kirby.d.ts +0 -38
  336. package/config/provide-kirby.d.ts.map +0 -1
  337. package/config/public_api.d.ts +0 -2
  338. package/config/public_api.d.ts.map +0 -1
  339. package/data-table/data-table.module.d.ts +0 -13
  340. package/data-table/data-table.module.d.ts.map +0 -1
  341. package/data-table/kirbydesign-designsystem-data-table.d.ts.map +0 -1
  342. package/data-table/public_api.d.ts +0 -3
  343. package/data-table/public_api.d.ts.map +0 -1
  344. package/data-table/sortable/sortable.component.d.ts +0 -18
  345. package/data-table/sortable/sortable.component.d.ts.map +0 -1
  346. package/divider/divider.component.d.ts +0 -7
  347. package/divider/divider.component.d.ts.map +0 -1
  348. package/divider/kirbydesign-designsystem-divider.d.ts.map +0 -1
  349. package/divider/public_api.d.ts +0 -2
  350. package/divider/public_api.d.ts.map +0 -1
  351. package/dropdown/dropdown.component.d.ts +0 -131
  352. package/dropdown/dropdown.component.d.ts.map +0 -1
  353. package/dropdown/dropdown.module.d.ts +0 -16
  354. package/dropdown/dropdown.module.d.ts.map +0 -1
  355. package/dropdown/dropdown.types.d.ts +0 -10
  356. package/dropdown/dropdown.types.d.ts.map +0 -1
  357. package/dropdown/keyboard-handler.service.d.ts +0 -7
  358. package/dropdown/keyboard-handler.service.d.ts.map +0 -1
  359. package/dropdown/kirbydesign-designsystem-dropdown.d.ts.map +0 -1
  360. package/dropdown/public_api.d.ts +0 -6
  361. package/dropdown/public_api.d.ts.map +0 -1
  362. package/empty-state/empty-state.component.d.ts +0 -24
  363. package/empty-state/empty-state.component.d.ts.map +0 -1
  364. package/empty-state/empty-state.module.d.ts +0 -11
  365. package/empty-state/empty-state.module.d.ts.map +0 -1
  366. package/empty-state/kirbydesign-designsystem-empty-state.d.ts.map +0 -1
  367. package/empty-state/public_api.d.ts +0 -3
  368. package/empty-state/public_api.d.ts.map +0 -1
  369. package/fab-sheet/fab-sheet.component.d.ts +0 -26
  370. package/fab-sheet/fab-sheet.component.d.ts.map +0 -1
  371. package/fab-sheet/kirbydesign-designsystem-fab-sheet.d.ts.map +0 -1
  372. package/fab-sheet/public_api.d.ts +0 -2
  373. package/fab-sheet/public_api.d.ts.map +0 -1
  374. package/flag/flag.component.d.ts +0 -10
  375. package/flag/flag.component.d.ts.map +0 -1
  376. package/flag/kirbydesign-designsystem-flag.d.ts.map +0 -1
  377. package/flag/public_api.d.ts +0 -2
  378. package/flag/public_api.d.ts.map +0 -1
  379. package/form-field/directives/affix/affix.directive.d.ts +0 -10
  380. package/form-field/directives/affix/affix.directive.d.ts.map +0 -1
  381. package/form-field/directives/date/date-input.directive.d.ts +0 -45
  382. package/form-field/directives/date/date-input.directive.d.ts.map +0 -1
  383. package/form-field/directives/decimal-mask/decimal-mask.directive.d.ts +0 -41
  384. package/form-field/directives/decimal-mask/decimal-mask.directive.d.ts.map +0 -1
  385. package/form-field/form-field-message/form-field-message.component.d.ts +0 -8
  386. package/form-field/form-field-message/form-field-message.component.d.ts.map +0 -1
  387. package/form-field/form-field.component.d.ts +0 -58
  388. package/form-field/form-field.component.d.ts.map +0 -1
  389. package/form-field/form-field.module.d.ts +0 -14
  390. package/form-field/form-field.module.d.ts.map +0 -1
  391. package/form-field/input/input.component.d.ts +0 -39
  392. package/form-field/input/input.component.d.ts.map +0 -1
  393. package/form-field/input-counter/input-counter.component.d.ts +0 -16
  394. package/form-field/input-counter/input-counter.component.d.ts.map +0 -1
  395. package/form-field/kirbydesign-designsystem-form-field.d.ts.map +0 -1
  396. package/form-field/public_api.d.ts +0 -10
  397. package/form-field/public_api.d.ts.map +0 -1
  398. package/form-field/textarea/textarea.component.d.ts +0 -28
  399. package/form-field/textarea/textarea.component.d.ts.map +0 -1
  400. package/header/header.component.d.ts +0 -59
  401. package/header/header.component.d.ts.map +0 -1
  402. package/header/header.module.d.ts +0 -10
  403. package/header/header.module.d.ts.map +0 -1
  404. package/header/kirbydesign-designsystem-header.d.ts.map +0 -1
  405. package/header/public_api.d.ts +0 -3
  406. package/header/public_api.d.ts.map +0 -1
  407. package/helpers/chart-config-has-type.d.ts +0 -3
  408. package/helpers/chart-config-has-type.d.ts.map +0 -1
  409. package/helpers/color-helper.d.ts +0 -2
  410. package/helpers/color-helper.d.ts.map +0 -1
  411. package/helpers/content-mutation-observer.d.ts +0 -9
  412. package/helpers/content-mutation-observer.d.ts.map +0 -1
  413. package/helpers/deep-copy.d.ts +0 -2
  414. package/helpers/deep-copy.d.ts.map +0 -1
  415. package/helpers/design-token-helper.d.ts +0 -2
  416. package/helpers/design-token-helper.d.ts.map +0 -1
  417. package/helpers/element-ancestor-utils.d.ts +0 -3
  418. package/helpers/element-ancestor-utils.d.ts.map +0 -1
  419. package/helpers/ionic-element-part-helper.d.ts +0 -10
  420. package/helpers/ionic-element-part-helper.d.ts.map +0 -1
  421. package/helpers/kirby-animation.d.ts +0 -20
  422. package/helpers/kirby-animation.d.ts.map +0 -1
  423. package/helpers/kirbydesign-designsystem-helpers.d.ts.map +0 -1
  424. package/helpers/line-clamp-helper.d.ts +0 -12
  425. package/helpers/line-clamp-helper.d.ts.map +0 -1
  426. package/helpers/merge-deep.d.ts +0 -17
  427. package/helpers/merge-deep.d.ts.map +0 -1
  428. package/helpers/platform.service.d.ts +0 -11
  429. package/helpers/platform.service.d.ts.map +0 -1
  430. package/helpers/public_api.d.ts +0 -15
  431. package/helpers/public_api.d.ts.map +0 -1
  432. package/helpers/scss/kirbydesign-designsystem-helpers-scss.d.ts.map +0 -1
  433. package/helpers/scss/public_api.d.ts +0 -2
  434. package/helpers/scss/public_api.d.ts.map +0 -1
  435. package/helpers/scss/scss-helper.d.ts +0 -7
  436. package/helpers/scss/scss-helper.d.ts.map +0 -1
  437. package/helpers/string-helper.d.ts +0 -2
  438. package/helpers/string-helper.d.ts.map +0 -1
  439. package/helpers/theme-color.type.d.ts +0 -2
  440. package/helpers/theme-color.type.d.ts.map +0 -1
  441. package/helpers/unique-id-generator.helper.d.ts +0 -9
  442. package/helpers/unique-id-generator.helper.d.ts.map +0 -1
  443. package/icon/icon-registry.service.d.ts +0 -21
  444. package/icon/icon-registry.service.d.ts.map +0 -1
  445. package/icon/icon-settings.d.ts +0 -8
  446. package/icon/icon-settings.d.ts.map +0 -1
  447. package/icon/icon.component.d.ts +0 -29
  448. package/icon/icon.component.d.ts.map +0 -1
  449. package/icon/icon.module.d.ts +0 -10
  450. package/icon/icon.module.d.ts.map +0 -1
  451. package/icon/kirby-icon-settings.d.ts +0 -4
  452. package/icon/kirby-icon-settings.d.ts.map +0 -1
  453. package/icon/kirbydesign-designsystem-icon.d.ts.map +0 -1
  454. package/icon/public_api.d.ts +0 -6
  455. package/icon/public_api.d.ts.map +0 -1
  456. package/item/item.component.d.ts +0 -34
  457. package/item/item.component.d.ts.map +0 -1
  458. package/item/item.module.d.ts +0 -12
  459. package/item/item.module.d.ts.map +0 -1
  460. package/item/kirbydesign-designsystem-item.d.ts.map +0 -1
  461. package/item/label/label.component.d.ts +0 -8
  462. package/item/label/label.component.d.ts.map +0 -1
  463. package/item/public_api.d.ts +0 -4
  464. package/item/public_api.d.ts.map +0 -1
  465. package/item-group/item-group.component.d.ts +0 -7
  466. package/item-group/item-group.component.d.ts.map +0 -1
  467. package/item-group/kirbydesign-designsystem-item-group.d.ts.map +0 -1
  468. package/item-group/public_api.d.ts +0 -2
  469. package/item-group/public_api.d.ts.map +0 -1
  470. package/item-sliding/item-sliding.component.d.ts +0 -14
  471. package/item-sliding/item-sliding.component.d.ts.map +0 -1
  472. package/item-sliding/item-sliding.types.d.ts +0 -11
  473. package/item-sliding/item-sliding.types.d.ts.map +0 -1
  474. package/item-sliding/kirbydesign-designsystem-item-sliding.d.ts.map +0 -1
  475. package/item-sliding/public_api.d.ts +0 -3
  476. package/item-sliding/public_api.d.ts.map +0 -1
  477. package/kirby-app/kirby-app.component.d.ts +0 -10
  478. package/kirby-app/kirby-app.component.d.ts.map +0 -1
  479. package/kirby-app/kirby-app.module.d.ts +0 -10
  480. package/kirby-app/kirby-app.module.d.ts.map +0 -1
  481. package/kirby-app/kirbydesign-designsystem-kirby-app.d.ts.map +0 -1
  482. package/kirby-app/public_api.d.ts +0 -3
  483. package/kirby-app/public_api.d.ts.map +0 -1
  484. package/kirbydesign-designsystem.d.ts.map +0 -1
  485. package/lib/components/index.d.ts +0 -3
  486. package/lib/components/index.d.ts.map +0 -1
  487. package/lib/components/segmented-control/segment-item.d.ts +0 -14
  488. package/lib/components/segmented-control/segment-item.d.ts.map +0 -1
  489. package/lib/components/segmented-control/segmented-control.component.d.ts +0 -86
  490. package/lib/components/segmented-control/segmented-control.component.d.ts.map +0 -1
  491. package/lib/directives/index.d.ts +0 -3
  492. package/lib/directives/index.d.ts.map +0 -1
  493. package/lib/directives/key-handler/key-handler.directive.d.ts +0 -10
  494. package/lib/directives/key-handler/key-handler.directive.d.ts.map +0 -1
  495. package/lib/directives/modal-router-link/modal-router-link.directive.d.ts +0 -16
  496. package/lib/directives/modal-router-link/modal-router-link.directive.d.ts.map +0 -1
  497. package/lib/index.d.ts +0 -49
  498. package/lib/index.d.ts.map +0 -1
  499. package/lib/kirby.module.d.ts +0 -57
  500. package/lib/kirby.module.d.ts.map +0 -1
  501. package/list/directives/index.d.ts +0 -4
  502. package/list/directives/index.d.ts.map +0 -1
  503. package/list/directives/infinite-scroll.directive.d.ts +0 -50
  504. package/list/directives/infinite-scroll.directive.d.ts.map +0 -1
  505. package/list/directives/list-item-color.directive.d.ts +0 -13
  506. package/list/directives/list-item-color.directive.d.ts.map +0 -1
  507. package/list/directives/scroll.model.d.ts +0 -6
  508. package/list/directives/scroll.model.d.ts.map +0 -1
  509. package/list/helpers/index.d.ts +0 -2
  510. package/list/helpers/index.d.ts.map +0 -1
  511. package/list/helpers/list-helper.d.ts +0 -22
  512. package/list/helpers/list-helper.d.ts.map +0 -1
  513. package/list/kirbydesign-designsystem-list.d.ts.map +0 -1
  514. package/list/list-experimental/index.d.ts +0 -2
  515. package/list/list-experimental/index.d.ts.map +0 -1
  516. package/list/list-experimental/list-experimental.component.d.ts +0 -9
  517. package/list/list-experimental/list-experimental.component.d.ts.map +0 -1
  518. package/list/list-header/index.d.ts +0 -2
  519. package/list/list-header/index.d.ts.map +0 -1
  520. package/list/list-header/list-header.component.d.ts +0 -7
  521. package/list/list-header/list-header.component.d.ts.map +0 -1
  522. package/list/list-item/index.d.ts +0 -2
  523. package/list/list-item/index.d.ts.map +0 -1
  524. package/list/list-item/list-item.component.d.ts +0 -37
  525. package/list/list-item/list-item.component.d.ts.map +0 -1
  526. package/list/list-section-header/index.d.ts +0 -2
  527. package/list/list-section-header/index.d.ts.map +0 -1
  528. package/list/list-section-header/list-section-header.component.d.ts +0 -7
  529. package/list/list-section-header/list-section-header.component.d.ts.map +0 -1
  530. package/list/list-swipe-action.d.ts +0 -2
  531. package/list/list-swipe-action.d.ts.map +0 -1
  532. package/list/list-swipe-action.type.d.ts +0 -12
  533. package/list/list-swipe-action.type.d.ts.map +0 -1
  534. package/list/list.component.d.ts +0 -108
  535. package/list/list.component.d.ts.map +0 -1
  536. package/list/list.directive.d.ts +0 -18
  537. package/list/list.directive.d.ts.map +0 -1
  538. package/list/list.event.d.ts +0 -8
  539. package/list/list.event.d.ts.map +0 -1
  540. package/list/list.module.d.ts +0 -19
  541. package/list/list.module.d.ts.map +0 -1
  542. package/list/public_api.d.ts +0 -12
  543. package/list/public_api.d.ts.map +0 -1
  544. package/loading-overlay/kirbydesign-designsystem-loading-overlay.d.ts.map +0 -1
  545. package/loading-overlay/loading-overlay.component.d.ts +0 -9
  546. package/loading-overlay/loading-overlay.component.d.ts.map +0 -1
  547. package/loading-overlay/loading-overlay.service.d.ts +0 -15
  548. package/loading-overlay/loading-overlay.service.d.ts.map +0 -1
  549. package/loading-overlay/public_api.d.ts +0 -3
  550. package/loading-overlay/public_api.d.ts.map +0 -1
  551. package/menu/kirbydesign-designsystem-menu.d.ts.map +0 -1
  552. package/menu/menu.component.d.ts +0 -68
  553. package/menu/menu.component.d.ts.map +0 -1
  554. package/menu/public_api.d.ts +0 -2
  555. package/menu/public_api.d.ts.map +0 -1
  556. package/modal/kirbydesign-designsystem-modal.d.ts.map +0 -1
  557. package/modal/modal/action-sheet/action-sheet.component.d.ts +0 -18
  558. package/modal/modal/action-sheet/action-sheet.component.d.ts.map +0 -1
  559. package/modal/modal/action-sheet/config/action-sheet-config.d.ts +0 -8
  560. package/modal/modal/action-sheet/config/action-sheet-config.d.ts.map +0 -1
  561. package/modal/modal/action-sheet/config/action-sheet-item.d.ts +0 -5
  562. package/modal/modal/action-sheet/config/action-sheet-item.d.ts.map +0 -1
  563. package/modal/modal/action-sheet/index.d.ts +0 -4
  564. package/modal/modal/action-sheet/index.d.ts.map +0 -1
  565. package/modal/modal/alert/alert.component.d.ts +0 -29
  566. package/modal/modal/alert/alert.component.d.ts.map +0 -1
  567. package/modal/modal/alert/config/alert-config.d.ts +0 -15
  568. package/modal/modal/alert/config/alert-config.d.ts.map +0 -1
  569. package/modal/modal/alert/index.d.ts +0 -3
  570. package/modal/modal/alert/index.d.ts.map +0 -1
  571. package/modal/modal/footer/modal-footer.component.d.ts +0 -13
  572. package/modal/modal/footer/modal-footer.component.d.ts.map +0 -1
  573. package/modal/modal/index.d.ts +0 -7
  574. package/modal/modal/index.d.ts.map +0 -1
  575. package/modal/modal/modal-component/modal.component.d.ts +0 -53
  576. package/modal/modal/modal-component/modal.component.d.ts.map +0 -1
  577. package/modal/modal/services/action-sheet.helper.d.ts +0 -12
  578. package/modal/modal/services/action-sheet.helper.d.ts.map +0 -1
  579. package/modal/modal/services/alert.helper.d.ts +0 -15
  580. package/modal/modal/services/alert.helper.d.ts.map +0 -1
  581. package/modal/modal/services/can-dismiss-modal-guard.d.ts +0 -3
  582. package/modal/modal/services/can-dismiss-modal-guard.d.ts.map +0 -1
  583. package/modal/modal/services/can-dismiss.helper.d.ts +0 -13
  584. package/modal/modal/services/can-dismiss.helper.d.ts.map +0 -1
  585. package/modal/modal/services/index.d.ts +0 -7
  586. package/modal/modal/services/index.d.ts.map +0 -1
  587. package/modal/modal/services/modal-animation-builder.service.d.ts +0 -28
  588. package/modal/modal/services/modal-animation-builder.service.d.ts.map +0 -1
  589. package/modal/modal/services/modal.controller.d.ts +0 -39
  590. package/modal/modal/services/modal.controller.d.ts.map +0 -1
  591. package/modal/modal/services/modal.helper.d.ts +0 -21
  592. package/modal/modal/services/modal.helper.d.ts.map +0 -1
  593. package/modal/modal-navigation.service.d.ts +0 -39
  594. package/modal/modal-navigation.service.d.ts.map +0 -1
  595. package/modal/modal-wrapper/compact/index.d.ts +0 -2
  596. package/modal/modal-wrapper/compact/index.d.ts.map +0 -1
  597. package/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts +0 -36
  598. package/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts.map +0 -1
  599. package/modal/modal-wrapper/config/drawer-supplementary-action.d.ts +0 -5
  600. package/modal/modal-wrapper/config/drawer-supplementary-action.d.ts.map +0 -1
  601. package/modal/modal-wrapper/config/index.d.ts +0 -4
  602. package/modal/modal-wrapper/config/index.d.ts.map +0 -1
  603. package/modal/modal-wrapper/config/modal-config.d.ts +0 -42
  604. package/modal/modal-wrapper/config/modal-config.d.ts.map +0 -1
  605. package/modal/modal-wrapper/config/modal-config.helper.d.ts +0 -3
  606. package/modal/modal-wrapper/config/modal-config.helper.d.ts.map +0 -1
  607. package/modal/modal-wrapper/index.d.ts +0 -4
  608. package/modal/modal-wrapper/index.d.ts.map +0 -1
  609. package/modal/modal-wrapper/modal-elements-mover.delegate.d.ts +0 -15
  610. package/modal/modal-wrapper/modal-elements-mover.delegate.d.ts.map +0 -1
  611. package/modal/modal-wrapper/modal-wrapper.component.d.ts +0 -112
  612. package/modal/modal-wrapper/modal-wrapper.component.d.ts.map +0 -1
  613. package/modal/modal.interfaces.d.ts +0 -58
  614. package/modal/modal.interfaces.d.ts.map +0 -1
  615. package/modal/public_api.d.ts +0 -5
  616. package/modal/public_api.d.ts.map +0 -1
  617. package/page/kirbydesign-designsystem-page.d.ts.map +0 -1
  618. package/page/page-footer/page-footer.component.d.ts +0 -15
  619. package/page/page-footer/page-footer.component.d.ts.map +0 -1
  620. package/page/page.component.d.ts +0 -207
  621. package/page/page.component.d.ts.map +0 -1
  622. package/page/page.module.d.ts +0 -14
  623. package/page/page.module.d.ts.map +0 -1
  624. package/page/public_api.d.ts +0 -4
  625. package/page/public_api.d.ts.map +0 -1
  626. package/popover/kirbydesign-designsystem-popover.d.ts.map +0 -1
  627. package/popover/popover.component.d.ts +0 -37
  628. package/popover/popover.component.d.ts.map +0 -1
  629. package/popover/public_api.d.ts +0 -2
  630. package/popover/public_api.d.ts.map +0 -1
  631. package/progress-circle/kirbydesign-designsystem-progress-circle.d.ts.map +0 -1
  632. package/progress-circle/progress-circle-ring.component.d.ts +0 -20
  633. package/progress-circle/progress-circle-ring.component.d.ts.map +0 -1
  634. package/progress-circle/progress-circle.component.d.ts +0 -43
  635. package/progress-circle/progress-circle.component.d.ts.map +0 -1
  636. package/progress-circle/public_api.d.ts +0 -3
  637. package/progress-circle/public_api.d.ts.map +0 -1
  638. package/public-api.d.ts +0 -2
  639. package/public-api.d.ts.map +0 -1
  640. package/radio/kirbydesign-designsystem-radio.d.ts.map +0 -1
  641. package/radio/public_api.d.ts +0 -4
  642. package/radio/public_api.d.ts.map +0 -1
  643. package/radio/radio-group/radio-group.component.d.ts +0 -65
  644. package/radio/radio-group/radio-group.component.d.ts.map +0 -1
  645. package/radio/radio-module.d.ts +0 -11
  646. package/radio/radio-module.d.ts.map +0 -1
  647. package/radio/radio.component.d.ts +0 -26
  648. package/radio/radio.component.d.ts.map +0 -1
  649. package/range/kirbydesign-designsystem-range.d.ts.map +0 -1
  650. package/range/public_api.d.ts +0 -2
  651. package/range/public_api.d.ts.map +0 -1
  652. package/range/range.component.d.ts +0 -42
  653. package/range/range.component.d.ts.map +0 -1
  654. package/reorder-list/kirbydesign-designsystem-reorder-list.d.ts.map +0 -1
  655. package/reorder-list/public_api.d.ts +0 -3
  656. package/reorder-list/public_api.d.ts.map +0 -1
  657. package/reorder-list/reorder-event.d.ts +0 -8
  658. package/reorder-list/reorder-event.d.ts.map +0 -1
  659. package/reorder-list/reorder-list.component.d.ts +0 -24
  660. package/reorder-list/reorder-list.component.d.ts.map +0 -1
  661. package/router-outlet/kirbydesign-designsystem-router-outlet.d.ts.map +0 -1
  662. package/router-outlet/public_api.d.ts +0 -4
  663. package/router-outlet/public_api.d.ts.map +0 -1
  664. package/router-outlet/router-outlet.component.d.ts +0 -8
  665. package/router-outlet/router-outlet.component.d.ts.map +0 -1
  666. package/router-outlet/router-outlet.module.d.ts +0 -10
  667. package/router-outlet/router-outlet.module.d.ts.map +0 -1
  668. package/section-header/kirbydesign-designsystem-section-header.d.ts.map +0 -1
  669. package/section-header/public_api.d.ts +0 -2
  670. package/section-header/public_api.d.ts.map +0 -1
  671. package/section-header/section-header.component.d.ts +0 -6
  672. package/section-header/section-header.component.d.ts.map +0 -1
  673. package/shared/component-configuration.d.ts +0 -6
  674. package/shared/component-configuration.d.ts.map +0 -1
  675. package/shared/component-loader.directive.d.ts +0 -16
  676. package/shared/component-loader.directive.d.ts.map +0 -1
  677. package/shared/controls/label-helpers.d.ts +0 -17
  678. package/shared/controls/label-helpers.d.ts.map +0 -1
  679. package/shared/dynamic-component.d.ts +0 -4
  680. package/shared/dynamic-component.d.ts.map +0 -1
  681. package/shared/fit-heading/fit-heading.directive.d.ts +0 -29
  682. package/shared/fit-heading/fit-heading.directive.d.ts.map +0 -1
  683. package/shared/fit-heading/index.d.ts +0 -2
  684. package/shared/fit-heading/index.d.ts.map +0 -1
  685. package/shared/floating/floating.directive.d.ts +0 -136
  686. package/shared/floating/floating.directive.d.ts.map +0 -1
  687. package/shared/floating/kirbydesign-designsystem-shared-floating.d.ts.map +0 -1
  688. package/shared/floating/public_api.d.ts +0 -2
  689. package/shared/floating/public_api.d.ts.map +0 -1
  690. package/shared/kirbydesign-designsystem-shared.d.ts.map +0 -1
  691. package/shared/portal/kirbydesign-designsystem-shared-portal.d.ts.map +0 -1
  692. package/shared/portal/portal.directive.d.ts +0 -35
  693. package/shared/portal/portal.directive.d.ts.map +0 -1
  694. package/shared/portal/public_api.d.ts +0 -2
  695. package/shared/portal/public_api.d.ts.map +0 -1
  696. package/shared/public_api.d.ts +0 -10
  697. package/shared/public_api.d.ts.map +0 -1
  698. package/shared/resize-observer/resize-observer.factory.d.ts +0 -11
  699. package/shared/resize-observer/resize-observer.factory.d.ts.map +0 -1
  700. package/shared/resize-observer/resize-observer.service.d.ts +0 -16
  701. package/shared/resize-observer/resize-observer.service.d.ts.map +0 -1
  702. package/shared/theme-color/theme-color.directive.d.ts +0 -36
  703. package/shared/theme-color/theme-color.directive.d.ts.map +0 -1
  704. package/shared/translation/translation.interface.d.ts +0 -13
  705. package/shared/translation/translation.interface.d.ts.map +0 -1
  706. package/shared/translation/translation.service.d.ts +0 -13
  707. package/shared/translation/translation.service.d.ts.map +0 -1
  708. package/shared/translation/translations/da.d.ts +0 -3
  709. package/shared/translation/translations/da.d.ts.map +0 -1
  710. package/shared/translation/translations/de.d.ts +0 -3
  711. package/shared/translation/translations/de.d.ts.map +0 -1
  712. package/shared/translation/translations/en.d.ts +0 -3
  713. package/shared/translation/translations/en.d.ts.map +0 -1
  714. package/slide/kirbydesign-designsystem-slide.d.ts.map +0 -1
  715. package/slide/public_api.d.ts +0 -5
  716. package/slide/public_api.d.ts.map +0 -1
  717. package/slide/slide-stretch-height.directive.d.ts +0 -10
  718. package/slide/slide-stretch-height.directive.d.ts.map +0 -1
  719. package/slide/slide.directive.d.ts +0 -6
  720. package/slide/slide.directive.d.ts.map +0 -1
  721. package/slide/slide.module.d.ts +0 -13
  722. package/slide/slide.module.d.ts.map +0 -1
  723. package/slide/slides.component.d.ts +0 -42
  724. package/slide/slides.component.d.ts.map +0 -1
  725. package/slide-button/kirbydesign-designsystem-slide-button.d.ts.map +0 -1
  726. package/slide-button/public_api.d.ts +0 -2
  727. package/slide-button/public_api.d.ts.map +0 -1
  728. package/slide-button/slide-button.component.d.ts +0 -32
  729. package/slide-button/slide-button.component.d.ts.map +0 -1
  730. package/spinner/kirbydesign-designsystem-spinner.d.ts.map +0 -1
  731. package/spinner/public_api.d.ts +0 -3
  732. package/spinner/public_api.d.ts.map +0 -1
  733. package/spinner/spinner.component.d.ts +0 -6
  734. package/spinner/spinner.component.d.ts.map +0 -1
  735. package/spinner/spinner.module.d.ts +0 -9
  736. package/spinner/spinner.module.d.ts.map +0 -1
  737. package/tab-navigation/kirbydesign-designsystem-tab-navigation.d.ts.map +0 -1
  738. package/tab-navigation/public_api.d.ts +0 -4
  739. package/tab-navigation/public_api.d.ts.map +0 -1
  740. package/tab-navigation/tab-navigation/tab-navigation.component.d.ts +0 -36
  741. package/tab-navigation/tab-navigation/tab-navigation.component.d.ts.map +0 -1
  742. package/tab-navigation/tab-navigation-item/tab-navigation-item.component.d.ts +0 -14
  743. package/tab-navigation/tab-navigation-item/tab-navigation-item.component.d.ts.map +0 -1
  744. package/tab-navigation/tab-navigation.module.d.ts +0 -10
  745. package/tab-navigation/tab-navigation.module.d.ts.map +0 -1
  746. package/tabs/kirbydesign-designsystem-tabs.d.ts.map +0 -1
  747. package/tabs/public_api.d.ts +0 -6
  748. package/tabs/public_api.d.ts.map +0 -1
  749. package/tabs/tab-button/tab-button.component.d.ts +0 -12
  750. package/tabs/tab-button/tab-button.component.d.ts.map +0 -1
  751. package/tabs/tab-button/tab-button.events.d.ts +0 -2
  752. package/tabs/tab-button/tab-button.events.d.ts.map +0 -1
  753. package/tabs/tabs.component.d.ts +0 -15
  754. package/tabs/tabs.component.d.ts.map +0 -1
  755. package/tabs/tabs.module.d.ts +0 -12
  756. package/tabs/tabs.module.d.ts.map +0 -1
  757. package/tabs/tabs.service.d.ts +0 -12
  758. package/tabs/tabs.service.d.ts.map +0 -1
  759. package/testing/element-css-custom-matchers.d.ts +0 -4
  760. package/testing/element-css-custom-matchers.d.ts.map +0 -1
  761. package/testing/kirbydesign-designsystem-testing.d.ts.map +0 -1
  762. package/testing/public_api.d.ts +0 -3
  763. package/testing/public_api.d.ts.map +0 -1
  764. package/testing/test-helper.d.ts +0 -55
  765. package/testing/test-helper.d.ts.map +0 -1
  766. package/testing-base/kirbydesign-designsystem-testing-base.d.ts.map +0 -1
  767. package/testing-base/lib/components/index.d.ts +0 -64
  768. package/testing-base/lib/components/index.d.ts.map +0 -1
  769. package/testing-base/lib/components/mock.accordion-item.component.d.ts +0 -10
  770. package/testing-base/lib/components/mock.accordion-item.component.d.ts.map +0 -1
  771. package/testing-base/lib/components/mock.action-group.component.d.ts +0 -9
  772. package/testing-base/lib/components/mock.action-group.component.d.ts.map +0 -1
  773. package/testing-base/lib/components/mock.action-sheet.component.d.ts +0 -16
  774. package/testing-base/lib/components/mock.action-sheet.component.d.ts.map +0 -1
  775. package/testing-base/lib/components/mock.alert.component.d.ts +0 -15
  776. package/testing-base/lib/components/mock.alert.component.d.ts.map +0 -1
  777. package/testing-base/lib/components/mock.avatar.component.d.ts +0 -16
  778. package/testing-base/lib/components/mock.avatar.component.d.ts.map +0 -1
  779. package/testing-base/lib/components/mock.badge.component.d.ts +0 -8
  780. package/testing-base/lib/components/mock.badge.component.d.ts.map +0 -1
  781. package/testing-base/lib/components/mock.base-chart.component.d.ts +0 -16
  782. package/testing-base/lib/components/mock.base-chart.component.d.ts.map +0 -1
  783. package/testing-base/lib/components/mock.button.component.d.ts +0 -15
  784. package/testing-base/lib/components/mock.button.component.d.ts.map +0 -1
  785. package/testing-base/lib/components/mock.calendar.component.d.ts +0 -33
  786. package/testing-base/lib/components/mock.calendar.component.d.ts.map +0 -1
  787. package/testing-base/lib/components/mock.card-footer.component.d.ts +0 -7
  788. package/testing-base/lib/components/mock.card-footer.component.d.ts.map +0 -1
  789. package/testing-base/lib/components/mock.card-header.component.d.ts +0 -12
  790. package/testing-base/lib/components/mock.card-header.component.d.ts.map +0 -1
  791. package/testing-base/lib/components/mock.card.component.d.ts +0 -14
  792. package/testing-base/lib/components/mock.card.component.d.ts.map +0 -1
  793. package/testing-base/lib/components/mock.chart.component.d.ts +0 -9
  794. package/testing-base/lib/components/mock.chart.component.d.ts.map +0 -1
  795. package/testing-base/lib/components/mock.checkbox.component.d.ts +0 -14
  796. package/testing-base/lib/components/mock.checkbox.component.d.ts.map +0 -1
  797. package/testing-base/lib/components/mock.divider.component.d.ts +0 -7
  798. package/testing-base/lib/components/mock.divider.component.d.ts.map +0 -1
  799. package/testing-base/lib/components/mock.dropdown.component.d.ts +0 -22
  800. package/testing-base/lib/components/mock.dropdown.component.d.ts.map +0 -1
  801. package/testing-base/lib/components/mock.empty-state.component.d.ts +0 -9
  802. package/testing-base/lib/components/mock.empty-state.component.d.ts.map +0 -1
  803. package/testing-base/lib/components/mock.fab-sheet.component.d.ts +0 -8
  804. package/testing-base/lib/components/mock.fab-sheet.component.d.ts.map +0 -1
  805. package/testing-base/lib/components/mock.flag.component.d.ts +0 -8
  806. package/testing-base/lib/components/mock.flag.component.d.ts.map +0 -1
  807. package/testing-base/lib/components/mock.form-field-message.component.d.ts +0 -8
  808. package/testing-base/lib/components/mock.form-field-message.component.d.ts.map +0 -1
  809. package/testing-base/lib/components/mock.form-field.component.d.ts +0 -9
  810. package/testing-base/lib/components/mock.form-field.component.d.ts.map +0 -1
  811. package/testing-base/lib/components/mock.header.component.d.ts +0 -22
  812. package/testing-base/lib/components/mock.header.component.d.ts.map +0 -1
  813. package/testing-base/lib/components/mock.icon.component.d.ts +0 -9
  814. package/testing-base/lib/components/mock.icon.component.d.ts.map +0 -1
  815. package/testing-base/lib/components/mock.input-counter.component.d.ts +0 -8
  816. package/testing-base/lib/components/mock.input-counter.component.d.ts.map +0 -1
  817. package/testing-base/lib/components/mock.input.component.d.ts +0 -16
  818. package/testing-base/lib/components/mock.input.component.d.ts.map +0 -1
  819. package/testing-base/lib/components/mock.item-group.component.d.ts +0 -6
  820. package/testing-base/lib/components/mock.item-group.component.d.ts.map +0 -1
  821. package/testing-base/lib/components/mock.item-sliding.component.d.ts +0 -9
  822. package/testing-base/lib/components/mock.item-sliding.component.d.ts.map +0 -1
  823. package/testing-base/lib/components/mock.item.component.d.ts +0 -13
  824. package/testing-base/lib/components/mock.item.component.d.ts.map +0 -1
  825. package/testing-base/lib/components/mock.kirby-app.component.d.ts +0 -6
  826. package/testing-base/lib/components/mock.kirby-app.component.d.ts.map +0 -1
  827. package/testing-base/lib/components/mock.label.component.d.ts +0 -7
  828. package/testing-base/lib/components/mock.label.component.d.ts.map +0 -1
  829. package/testing-base/lib/components/mock.list-experimental.component.d.ts +0 -6
  830. package/testing-base/lib/components/mock.list-experimental.component.d.ts.map +0 -1
  831. package/testing-base/lib/components/mock.list-header.component.d.ts +0 -6
  832. package/testing-base/lib/components/mock.list-header.component.d.ts.map +0 -1
  833. package/testing-base/lib/components/mock.list-item.component.d.ts +0 -17
  834. package/testing-base/lib/components/mock.list-item.component.d.ts.map +0 -1
  835. package/testing-base/lib/components/mock.list-section-header.component.d.ts +0 -7
  836. package/testing-base/lib/components/mock.list-section-header.component.d.ts.map +0 -1
  837. package/testing-base/lib/components/mock.list.component.d.ts +0 -24
  838. package/testing-base/lib/components/mock.list.component.d.ts.map +0 -1
  839. package/testing-base/lib/components/mock.loading-overlay.component.d.ts +0 -9
  840. package/testing-base/lib/components/mock.loading-overlay.component.d.ts.map +0 -1
  841. package/testing-base/lib/components/mock.menu.component.d.ts +0 -21
  842. package/testing-base/lib/components/mock.menu.component.d.ts.map +0 -1
  843. package/testing-base/lib/components/mock.modal-compact-wrapper.component.d.ts +0 -8
  844. package/testing-base/lib/components/mock.modal-compact-wrapper.component.d.ts.map +0 -1
  845. package/testing-base/lib/components/mock.modal-footer.component.d.ts +0 -8
  846. package/testing-base/lib/components/mock.modal-footer.component.d.ts.map +0 -1
  847. package/testing-base/lib/components/mock.modal-wrapper.component.d.ts +0 -10
  848. package/testing-base/lib/components/mock.modal-wrapper.component.d.ts.map +0 -1
  849. package/testing-base/lib/components/mock.page-footer.component.d.ts +0 -7
  850. package/testing-base/lib/components/mock.page-footer.component.d.ts.map +0 -1
  851. package/testing-base/lib/components/mock.page.component.d.ts +0 -70
  852. package/testing-base/lib/components/mock.page.component.d.ts.map +0 -1
  853. package/testing-base/lib/components/mock.popover.component.d.ts +0 -11
  854. package/testing-base/lib/components/mock.popover.component.d.ts.map +0 -1
  855. package/testing-base/lib/components/mock.progress-circle-ring.component.d.ts +0 -11
  856. package/testing-base/lib/components/mock.progress-circle-ring.component.d.ts.map +0 -1
  857. package/testing-base/lib/components/mock.progress-circle.component.d.ts +0 -9
  858. package/testing-base/lib/components/mock.progress-circle.component.d.ts.map +0 -1
  859. package/testing-base/lib/components/mock.radio-group.component.d.ts +0 -15
  860. package/testing-base/lib/components/mock.radio-group.component.d.ts.map +0 -1
  861. package/testing-base/lib/components/mock.radio.component.d.ts +0 -10
  862. package/testing-base/lib/components/mock.radio.component.d.ts.map +0 -1
  863. package/testing-base/lib/components/mock.range.component.d.ts +0 -22
  864. package/testing-base/lib/components/mock.range.component.d.ts.map +0 -1
  865. package/testing-base/lib/components/mock.reorder-list.component.d.ts +0 -13
  866. package/testing-base/lib/components/mock.reorder-list.component.d.ts.map +0 -1
  867. package/testing-base/lib/components/mock.router-outlet.component.d.ts +0 -7
  868. package/testing-base/lib/components/mock.router-outlet.component.d.ts.map +0 -1
  869. package/testing-base/lib/components/mock.section-header.component.d.ts +0 -6
  870. package/testing-base/lib/components/mock.section-header.component.d.ts.map +0 -1
  871. package/testing-base/lib/components/mock.segmented-control.component.d.ts +0 -16
  872. package/testing-base/lib/components/mock.segmented-control.component.d.ts.map +0 -1
  873. package/testing-base/lib/components/mock.slide-button.component.d.ts +0 -11
  874. package/testing-base/lib/components/mock.slide-button.component.d.ts.map +0 -1
  875. package/testing-base/lib/components/mock.slides.component.d.ts +0 -11
  876. package/testing-base/lib/components/mock.slides.component.d.ts.map +0 -1
  877. package/testing-base/lib/components/mock.spinner.component.d.ts +0 -6
  878. package/testing-base/lib/components/mock.spinner.component.d.ts.map +0 -1
  879. package/testing-base/lib/components/mock.stock-chart.component.d.ts +0 -9
  880. package/testing-base/lib/components/mock.stock-chart.component.d.ts.map +0 -1
  881. package/testing-base/lib/components/mock.tab-button.component.d.ts +0 -9
  882. package/testing-base/lib/components/mock.tab-button.component.d.ts.map +0 -1
  883. package/testing-base/lib/components/mock.tab-navigation-item.component.d.ts +0 -7
  884. package/testing-base/lib/components/mock.tab-navigation-item.component.d.ts.map +0 -1
  885. package/testing-base/lib/components/mock.tab-navigation.component.d.ts +0 -8
  886. package/testing-base/lib/components/mock.tab-navigation.component.d.ts.map +0 -1
  887. package/testing-base/lib/components/mock.tabs.component.d.ts +0 -6
  888. package/testing-base/lib/components/mock.tabs.component.d.ts.map +0 -1
  889. package/testing-base/lib/components/mock.textarea.component.d.ts +0 -12
  890. package/testing-base/lib/components/mock.textarea.component.d.ts.map +0 -1
  891. package/testing-base/lib/components/mock.toggle-button.component.d.ts +0 -9
  892. package/testing-base/lib/components/mock.toggle-button.component.d.ts.map +0 -1
  893. package/testing-base/lib/components/mock.toggle.component.d.ts +0 -10
  894. package/testing-base/lib/components/mock.toggle.component.d.ts.map +0 -1
  895. package/testing-base/lib/directives/index.d.ts +0 -17
  896. package/testing-base/lib/directives/index.d.ts.map +0 -1
  897. package/testing-base/lib/directives/mock.accordion.directive.d.ts +0 -6
  898. package/testing-base/lib/directives/mock.accordion.directive.d.ts.map +0 -1
  899. package/testing-base/lib/directives/mock.affix.directive.d.ts +0 -7
  900. package/testing-base/lib/directives/mock.affix.directive.d.ts.map +0 -1
  901. package/testing-base/lib/directives/mock.card-as-button.directive.d.ts +0 -6
  902. package/testing-base/lib/directives/mock.card-as-button.directive.d.ts.map +0 -1
  903. package/testing-base/lib/directives/mock.component-loader.directive.d.ts +0 -9
  904. package/testing-base/lib/directives/mock.component-loader.directive.d.ts.map +0 -1
  905. package/testing-base/lib/directives/mock.date-input.directive.d.ts +0 -6
  906. package/testing-base/lib/directives/mock.date-input.directive.d.ts.map +0 -1
  907. package/testing-base/lib/directives/mock.decimal-mask.directive.d.ts +0 -13
  908. package/testing-base/lib/directives/mock.decimal-mask.directive.d.ts.map +0 -1
  909. package/testing-base/lib/directives/mock.fit-heading.directive.d.ts +0 -8
  910. package/testing-base/lib/directives/mock.fit-heading.directive.d.ts.map +0 -1
  911. package/testing-base/lib/directives/mock.floating.directive.d.ts +0 -27
  912. package/testing-base/lib/directives/mock.floating.directive.d.ts.map +0 -1
  913. package/testing-base/lib/directives/mock.infinite-scroll.directive.d.ts +0 -9
  914. package/testing-base/lib/directives/mock.infinite-scroll.directive.d.ts.map +0 -1
  915. package/testing-base/lib/directives/mock.key-handler.directive.d.ts +0 -6
  916. package/testing-base/lib/directives/mock.key-handler.directive.d.ts.map +0 -1
  917. package/testing-base/lib/directives/mock.list-item-color.directive.d.ts +0 -9
  918. package/testing-base/lib/directives/mock.list-item-color.directive.d.ts.map +0 -1
  919. package/testing-base/lib/directives/mock.list.directive.d.ts +0 -18
  920. package/testing-base/lib/directives/mock.list.directive.d.ts.map +0 -1
  921. package/testing-base/lib/directives/mock.modal-router-link.directive.d.ts +0 -9
  922. package/testing-base/lib/directives/mock.modal-router-link.directive.d.ts.map +0 -1
  923. package/testing-base/lib/directives/mock.portal.directive.d.ts +0 -7
  924. package/testing-base/lib/directives/mock.portal.directive.d.ts.map +0 -1
  925. package/testing-base/lib/directives/mock.slide.directive.d.ts +0 -6
  926. package/testing-base/lib/directives/mock.slide.directive.d.ts.map +0 -1
  927. package/testing-base/lib/directives/mock.theme-color.directive.d.ts +0 -8
  928. package/testing-base/lib/directives/mock.theme-color.directive.d.ts.map +0 -1
  929. package/testing-base/lib/index.d.ts +0 -4
  930. package/testing-base/lib/index.d.ts.map +0 -1
  931. package/testing-base/lib/kirby-testing-base.module.d.ts +0 -86
  932. package/testing-base/lib/kirby-testing-base.module.d.ts.map +0 -1
  933. package/testing-base/lib/mock-components.d.ts +0 -3
  934. package/testing-base/lib/mock-components.d.ts.map +0 -1
  935. package/testing-base/lib/mock-directives.d.ts +0 -3
  936. package/testing-base/lib/mock-directives.d.ts.map +0 -1
  937. package/testing-base/public_api.d.ts +0 -2
  938. package/testing-base/public_api.d.ts.map +0 -1
  939. package/testing-jasmine/kirbydesign-designsystem-testing-jasmine.d.ts.map +0 -1
  940. package/testing-jasmine/lib/kirby-testing.module.d.ts +0 -8
  941. package/testing-jasmine/lib/kirby-testing.module.d.ts.map +0 -1
  942. package/testing-jasmine/lib/mock-providers.d.ts +0 -33
  943. package/testing-jasmine/lib/mock-providers.d.ts.map +0 -1
  944. package/testing-jasmine/public_api.d.ts +0 -2
  945. package/testing-jasmine/public_api.d.ts.map +0 -1
  946. package/testing-jest/kirbydesign-designsystem-testing-jest.d.ts.map +0 -1
  947. package/testing-jest/lib/kirby-testing.module.d.ts +0 -8
  948. package/testing-jest/lib/kirby-testing.module.d.ts.map +0 -1
  949. package/testing-jest/lib/mock-providers.d.ts +0 -68
  950. package/testing-jest/lib/mock-providers.d.ts.map +0 -1
  951. package/testing-jest/public_api.d.ts +0 -2
  952. package/testing-jest/public_api.d.ts.map +0 -1
  953. package/toast/config/toast-config.d.ts +0 -8
  954. package/toast/config/toast-config.d.ts.map +0 -1
  955. package/toast/kirbydesign-designsystem-toast.d.ts.map +0 -1
  956. package/toast/public_api.d.ts +0 -4
  957. package/toast/public_api.d.ts.map +0 -1
  958. package/toast/services/indexs.d.ts +0 -3
  959. package/toast/services/indexs.d.ts.map +0 -1
  960. package/toast/services/toast.controller.d.ts +0 -11
  961. package/toast/services/toast.controller.d.ts.map +0 -1
  962. package/toast/services/toast.helper.d.ts +0 -15
  963. package/toast/services/toast.helper.d.ts.map +0 -1
  964. package/toggle/kirbydesign-designsystem-toggle.d.ts.map +0 -1
  965. package/toggle/public_api.d.ts +0 -2
  966. package/toggle/public_api.d.ts.map +0 -1
  967. package/toggle/toggle.component.d.ts +0 -61
  968. package/toggle/toggle.component.d.ts.map +0 -1
  969. package/toggle-button/kirbydesign-designsystem-toggle-button.d.ts.map +0 -1
  970. package/toggle-button/public_api.d.ts +0 -3
  971. package/toggle-button/public_api.d.ts.map +0 -1
  972. package/toggle-button/toggle-button.component.d.ts +0 -48
  973. package/toggle-button/toggle-button.component.d.ts.map +0 -1
  974. package/toggle-button/toggle-button.module.d.ts +0 -9
  975. package/toggle-button/toggle-button.module.d.ts.map +0 -1
  976. package/types/event-listener-dispose-fn.d.ts +0 -2
  977. package/types/event-listener-dispose-fn.d.ts.map +0 -1
  978. package/types/form-field-control.d.ts +0 -6
  979. package/types/form-field-control.d.ts.map +0 -1
  980. package/types/kirbydesign-designsystem-types.d.ts.map +0 -1
  981. package/types/public_api.d.ts +0 -5
  982. package/types/public_api.d.ts.map +0 -1
  983. package/types/unobserve-fn.d.ts +0 -2
  984. package/types/unobserve-fn.d.ts.map +0 -1
  985. package/types/window-ref.d.ts +0 -7
  986. package/types/window-ref.d.ts.map +0 -1
@@ -1,363 +1,139 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, Output, Input, Component, ViewChild, ChangeDetectionStrategy, Optional, InjectionToken, ElementRef, Injector, RendererStyleFlags2, TemplateRef, HostListener, HostBinding, ViewChildren, ContentChild, Inject, inject } from '@angular/core';
3
- import * as i1 from '@angular/router';
4
- import { NavigationEnd, NavigationStart, RouterModule, RouterOutlet, ROUTES } from '@angular/router';
5
- import { firstValueFrom, EMPTY, of, Subject, merge } from 'rxjs';
6
- import { filter, startWith, map, pairwise, skipUntil, takeUntil, debounceTime, first } from 'rxjs/operators';
7
- import * as i1$2 from '@ionic/angular/standalone';
8
- import { IonHeader, IonToolbar, IonTitle, IonButtons, IonContent, createAnimation, ModalController as ModalController$1, IonModal, IonFooter } from '@ionic/angular/standalone';
9
- import * as i4 from '@angular/common';
2
+ import { Optional, Component, InjectionToken, ElementRef, Input, ViewChild, ChangeDetectionStrategy, Injectable, Injector, RendererStyleFlags2, TemplateRef, HostListener, HostBinding, ViewChildren, ContentChild, EventEmitter, Output, Inject, inject } from '@angular/core';
3
+ import * as i1$3 from '@angular/router';
4
+ import { RouterModule, RouterOutlet, NavigationEnd, NavigationStart, ROUTES } from '@angular/router';
5
+ import { of, isObservable, Subject, firstValueFrom, merge, EMPTY } from 'rxjs';
6
+ import { debounceTime, first, takeUntil, map, filter, startWith, pairwise, skipUntil } from 'rxjs/operators';
7
+ import * as i3$1 from '@kirbydesign/designsystem/helpers';
8
+ import { getIonModalDialogAncestor, DesignTokenHelper, observeContent, KirbyAnimation } from '@kirbydesign/designsystem/helpers';
9
+ import * as i7 from '@angular/common';
10
10
  import { CommonModule } from '@angular/common';
11
- import { ButtonComponent } from '@kirbydesign/designsystem/button';
12
- import * as i1$1 from '@kirbydesign/designsystem/card';
13
- import { CardModule } from '@kirbydesign/designsystem/card';
14
- import * as i1$3 from '@kirbydesign/designsystem/types';
15
11
  import * as i6 from '@kirbydesign/designsystem/icon';
16
12
  import { IconModule } from '@kirbydesign/designsystem/icon';
17
- import * as i1$4 from '@kirbydesign/designsystem/shared';
13
+ import { ButtonComponent } from '@kirbydesign/designsystem/button';
14
+ import * as i1$2 from '@ionic/angular/standalone';
15
+ import { IonHeader, IonToolbar, IonTitle, IonButtons, IonContent, createAnimation, ModalController as ModalController$1, IonModal, IonFooter } from '@ionic/angular/standalone';
16
+ import * as i1$1 from '@kirbydesign/designsystem/shared';
18
17
  import { ThemeColorDirective, inheritAriaLabelText } from '@kirbydesign/designsystem/shared';
18
+ import * as i1 from '@kirbydesign/designsystem/types';
19
19
  import * as i3 from '@kirbydesign/designsystem/empty-state';
20
20
  import { EmptyStateModule } from '@kirbydesign/designsystem/empty-state';
21
- import * as i3$1 from '@kirbydesign/designsystem/helpers';
22
- import { getIonModalDialogAncestor, DesignTokenHelper, observeContent, KirbyAnimation } from '@kirbydesign/designsystem/helpers';
21
+ import * as i1$4 from '@kirbydesign/designsystem/card';
22
+ import { CardModule } from '@kirbydesign/designsystem/card';
23
23
 
24
- class ModalNavigationService {
25
- constructor(router, route) {
26
- this.router = router;
27
- this.route = route;
28
- this.navigationEndListener$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd));
29
- }
30
- isModalRoute(url) {
31
- return url.includes('(modal:');
32
- }
33
- getCurrentActivatedRoute() {
34
- let childRoute = this.route.root;
35
- while (childRoute.firstChild) {
36
- childRoute = childRoute.firstChild;
37
- }
38
- return childRoute;
39
- }
40
- async getModalRoutes(routeConfig, moduleRootRoutePath) {
41
- const flattenedRoutes = [].concat(...routeConfig);
42
- let modalRoutes = [];
43
- const moduleRootPaths = await this.getModuleRootPath(flattenedRoutes, moduleRootRoutePath);
44
- if (moduleRootPaths) {
45
- modalRoutes = this.getModalRoutePaths(flattenedRoutes, moduleRootPaths);
46
- }
47
- return modalRoutes;
48
- }
49
- async getModuleRootPath(routes, moduleRootRoutePath) {
50
- if (moduleRootRoutePath) {
51
- const trimmedPaths = moduleRootRoutePath
52
- .trim()
53
- .split('/')
54
- .filter((path) => !!path);
55
- const rootPath = [''];
56
- return rootPath.concat(trimmedPaths);
57
- }
58
- const currentRoutePaths = await this.getCurrentRoutePaths();
59
- const moduleRootPaths = this.getRoutePathsWithoutChildSegments(currentRoutePaths, routes);
60
- return moduleRootPaths;
61
- }
62
- async getCurrentRoutePaths() {
63
- const rootPath = [''];
64
- const currentNavigation = this.router.getCurrentNavigation();
65
- if (!this.router.navigated && !currentNavigation) {
66
- // If router hasn't navigated yet and we are not in the middle of navigating, assume root:
67
- return rootPath;
68
- }
69
- if (currentNavigation) {
70
- // Wait for current navigation to finish:
71
- await firstValueFrom(this.navigationEndListener$);
72
- }
73
- let childRoute = this.route.snapshot.root;
74
- while (childRoute.firstChild) {
75
- childRoute = childRoute.firstChild;
76
- }
77
- const currentBackdropRoutePath = childRoute.pathFromRoot.filter((route) => route.outlet !== 'modal');
78
- return rootPath.concat(...currentBackdropRoutePath.map((route) => route.url.filter((segment) => !!segment.path).map((segment) => segment.path)));
79
- }
80
- getRoutePathsWithoutChildSegments(routePaths, routes) {
81
- if (!routePaths.length)
82
- return routePaths;
83
- const matchedChildRoute = this.findChildRouteForUrl(routePaths.join('/'), routes);
84
- if (!matchedChildRoute)
85
- return routePaths;
86
- const startSlashRegex = /^\//;
87
- const relativeChildRoute = matchedChildRoute.replace(startSlashRegex, '');
88
- const childSegmentCount = relativeChildRoute.split('/').length;
89
- const routePathsWithoutChildSegments = routePaths.slice(0, -childSegmentCount); // Remove child segments from end of route path array
90
- return routePathsWithoutChildSegments;
91
- }
92
- findChildRouteForUrl(url, routes) {
93
- const moduleRelativePaths = this.getRoutePaths(routes, ['']).sort().reverse(); // Ensure child paths are evaluated first
94
- let matchedChildRoute = moduleRelativePaths.find((path) => url.endsWith(path));
95
- if (!matchedChildRoute) {
96
- // No static child route found matching current route - look for child route with url params:
97
- const exactMatch = false;
98
- matchedChildRoute = moduleRelativePaths.find((path) => path.includes('/:') && this.pathContainsChildRouteWithUrlParams(url, path, exactMatch));
99
- }
100
- return matchedChildRoute;
101
- }
102
- pathContainsChildRouteWithUrlParams(path, childRouteWithUrlParams, exactMatch) {
103
- const pathSegments = path.split('/');
104
- const startSlashRegex = /^\//;
105
- let childRouteToMatch = childRouteWithUrlParams;
106
- if (!exactMatch) {
107
- const relativeChildRoute = childRouteWithUrlParams.replace(startSlashRegex, '');
108
- childRouteToMatch = relativeChildRoute;
109
- }
110
- const childRouteSegments = childRouteToMatch.split('/');
111
- // Match each child route segment against url
112
- // Match backwards from end to start of child route, i.e. "url ends with child route":
113
- const pathContainsChildRoute = childRouteSegments.reverse().every((childRouteSegment) => {
114
- const pathSegment = pathSegments.pop();
115
- // url params (e.g. `/:id/`) are treated as a match:
116
- return childRouteSegment.startsWith(':') || childRouteSegment === pathSegment;
117
- });
118
- if (exactMatch) {
119
- // Only match if we've reached the start of the url to match against:
120
- return pathSegments.length === 0 && pathContainsChildRoute;
121
- }
122
- return pathContainsChildRoute;
123
- }
124
- getRoutePaths(routes, parentPath) {
125
- return Array.isArray(routes)
126
- ? [].concat(...routes.map((route) => this.getRoutePath(route, parentPath)))
127
- : [];
128
- }
129
- getRoutePath(route, parentPath) {
130
- const routes = [];
131
- if (route.outlet)
132
- return routes; // Don't return relative paths for outlet routes
133
- const currentPath = [...parentPath];
134
- if (route.path) {
135
- currentPath.push(route.path);
136
- routes.push(currentPath.join('/'));
137
- }
138
- return routes.concat(this.getRoutePaths(route.children, currentPath));
139
- }
140
- getModalRoutePath(route, parentPath) {
141
- const modalOutletName = 'modal';
142
- if (!!route.path && route.outlet === modalOutletName) {
143
- const modalOutletPath = `(${modalOutletName}:${route.path})`;
144
- const modalRoutePath = [...parentPath, modalOutletPath].join('/');
145
- return [modalRoutePath];
146
- }
147
- const currentPath = [...parentPath];
148
- if (route.path) {
149
- currentPath.push(route.path);
150
- }
151
- return [].concat(...this.getModalRoutePaths(route.children, currentPath));
24
+ class Modal {
25
+ }
26
+ /**
27
+ * WARNING: This is for internal use only and should not be used outside of Kirby.
28
+ */
29
+ var ModalElementType;
30
+ (function (ModalElementType) {
31
+ ModalElementType[ModalElementType["PAGE_PROGRESS"] = 0] = "PAGE_PROGRESS";
32
+ ModalElementType[ModalElementType["FOOTER"] = 1] = "FOOTER";
33
+ ModalElementType[ModalElementType["TITLE"] = 2] = "TITLE";
34
+ })(ModalElementType || (ModalElementType = {}));
35
+ /**
36
+ * WARNING: This is for internal use only and should not be used outside of Kirby.
37
+ */
38
+ class ModalElementsAdvertiser {
39
+ }
40
+ /**
41
+ * WARNING: This is for internal use only and should not be used outside of Kirby.
42
+ */
43
+ class ModalElementComponent {
44
+ get isContainedInModal() {
45
+ return this.modalElementsAdvertiser !== null;
152
46
  }
153
- getModalRoutePaths(routes, parentPath) {
154
- return Array.isArray(routes)
155
- ? [].concat(...routes.map((route) => this.getModalRoutePath(route, parentPath)))
156
- : [];
47
+ constructor(modalElementType, elementRef, modalElementsAdvertiser) {
48
+ this.modalElementType = modalElementType;
49
+ this.elementRef = elementRef;
50
+ this.modalElementsAdvertiser = modalElementsAdvertiser;
157
51
  }
158
- isNewModalWindow(navigationEnd) {
159
- const currentNavigation = this.router.getCurrentNavigation();
160
- if (!currentNavigation || !currentNavigation.previousNavigation) {
161
- return true;
162
- }
163
- const previousRoutePath = (currentNavigation.previousNavigation.finalUrl ||
164
- currentNavigation.previousNavigation.extractedUrl).toString();
165
- const wasModalRoute = this.isModalRoute(previousRoutePath);
166
- const isModalRoute = this.isModalRoute(navigationEnd.urlAfterRedirects);
167
- if (!wasModalRoute && isModalRoute) {
168
- return true;
52
+ ngAfterViewInit() {
53
+ if (this.isContainedInModal) {
54
+ this.modalElementsAdvertiser.addModalElement(this.modalElementType, this.elementRef);
169
55
  }
170
- const currentModalRouteParent = navigationEnd.urlAfterRedirects.split('/(modal:')[0];
171
- const previousModalRouteParent = previousRoutePath.split('/(modal:')[0];
172
- return previousModalRouteParent !== currentModalRouteParent;
173
56
  }
174
- async waitForCurrentThenGetNavigationEndStream() {
175
- if (this.router.getCurrentNavigation()) {
176
- const currentNavigationEnd = await firstValueFrom(this.navigationEndListener$);
177
- return this.navigationEndListener$.pipe(startWith(currentNavigationEnd));
57
+ ngOnDestroy() {
58
+ if (this.isContainedInModal) {
59
+ this.modalElementsAdvertiser.removeModalElement(this.modalElementType, this.elementRef);
178
60
  }
179
- return this.navigationEndListener$;
180
- }
181
- modalRouteActivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams) {
182
- return navigationEnd$.pipe(filter((navigationEnd) => this.modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams)), map((navigationEnd) => {
183
- return {
184
- route: this.getCurrentActivatedRoute(),
185
- isNewModal: this.isNewModalWindow(navigationEnd),
186
- };
187
- }));
188
61
  }
189
- modalRouteDeactivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams) {
190
- return navigationEnd$.pipe(pairwise(),
191
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
192
- filter(([prevNavigation, _]) => this.modalRouteSetContainsPath(modalRouteSet, prevNavigation, modalRoutesContainsUrlParams)), // Only emit if previous route was modal
193
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
194
- map(([_, currentNavigation]) => {
195
- const isNewModalRoute = this.isModalRoute(currentNavigation.urlAfterRedirects);
196
- // Deactivate modal route if new route is NOT modal OR is outside current parent route:
197
- return !isNewModalRoute || this.isNewModalWindow(currentNavigation);
198
- }), filter((isDeactivation) => isDeactivation));
62
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalElementComponent, deps: [{ token: ModalElementType }, { token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
63
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.0", type: ModalElementComponent, isStandalone: false, selector: "ng-component", ngImport: i0, template: '', isInline: true }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalElementComponent, decorators: [{
66
+ type: Component,
67
+ args: [{
68
+ template: '',
69
+ standalone: false,
70
+ }]
71
+ }], ctorParameters: () => [{ type: ModalElementType }, { type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{
72
+ type: Optional
73
+ }] }] });
74
+
75
+ const COMPONENT_PROPS = new InjectionToken('componentProps');
76
+
77
+ /*
78
+ The ModalWrapperComponent class was growing large.
79
+
80
+ Hence the functions responsible for moving modal elements around
81
+ has been encapsulated in this class.
82
+ */
83
+ class ModalElementsMoverDelegate {
84
+ constructor(renderer, elementRef) {
85
+ this.renderer = renderer;
86
+ this.elementRef = elementRef;
199
87
  }
200
- modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams) {
201
- const pathname = navigationEnd.urlAfterRedirects.split('?')[0];
202
- let hasRoute = modalRouteSet.has(pathname);
203
- if (!hasRoute && modalRoutesContainsUrlParams) {
204
- // Use `for ... of` instead of `forEach` so we can break out of the loop if route is found:
205
- for (const route of modalRouteSet) {
206
- const exactMatch = true;
207
- const routeMatchesPath = this.pathContainsChildRouteWithUrlParams(pathname, route, exactMatch);
208
- if (routeMatchesPath) {
209
- hasRoute = true;
210
- break;
211
- }
212
- }
213
- }
214
- return hasRoute;
88
+ addFooter(footerElementRef) {
89
+ // Move the footer next to ion-content
90
+ this.moveChild(footerElementRef, this.elementRef);
215
91
  }
216
- async getModalNavigation(routeConfig, moduleRootRoutePath) {
217
- if (Array.isArray(routeConfig)) {
218
- const navigationEnd$ = await this.waitForCurrentThenGetNavigationEndStream();
219
- const modalRoutes = await this.getModalRoutes(routeConfig, moduleRootRoutePath);
220
- const hasModalRoutes = modalRoutes.length > 0;
221
- if (hasModalRoutes) {
222
- const modalRoutesContainsUrlParams = modalRoutes.some((route) => route.includes('/:'));
223
- const modalRouteSet = new Set(modalRoutes);
224
- const activated$ = this.modalRouteActivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams);
225
- const deactivated$ = this.modalRouteDeactivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams);
226
- return { activated$, deactivated$ };
227
- }
228
- }
229
- return { activated$: EMPTY, deactivated$: EMPTY };
92
+ removeFooter(footerElementRef) {
93
+ this.removeChild(footerElementRef);
230
94
  }
231
- async navigateToModal(path, queryParams) {
232
- const commands = Array.isArray(path) ? [...path] : path.split('/');
233
- const childPath = commands.pop();
234
- const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {
235
- queryParams,
236
- relativeTo: this.getCurrentActivatedRoute(),
237
- });
238
- return result;
95
+ addPageProgress(pageProgressElementRef, ionToolbarElement) {
96
+ this.moveChild(pageProgressElementRef, ionToolbarElement);
239
97
  }
240
- async navigateWithinModal(relativePath, queryParams) {
241
- return this.router.navigate([relativePath], {
242
- queryParams,
243
- relativeTo: this.getCurrentActivatedRoute(),
244
- });
98
+ removePageProgress(pageProgressElementRef) {
99
+ this.removeChild(pageProgressElementRef);
245
100
  }
246
- async navigateOutOfModalOutlet() {
247
- const currentActivatedRoute = this.getCurrentActivatedRoute();
248
- const currentNavigationFinalUrl = this.router.getCurrentNavigation()?.finalUrl?.toString();
249
- const isCurrentlyNavigatingOutOfModalOutlet = currentNavigationFinalUrl && !this.isModalRoute(currentNavigationFinalUrl);
250
- if (currentActivatedRoute.outlet !== 'modal' || isCurrentlyNavigatingOutOfModalOutlet) {
251
- // Nothing to do here, bail out:
252
- return Promise.resolve(true);
101
+ /*
102
+ contentTitleElement & ionTitleElement has to be passed
103
+ as arguments to the method; not part of the constructor, as they
104
+ might reference completely different elements between calls.
105
+
106
+ For example in a multi-page routed modal where the elements are destroyed
107
+ and recreated.
108
+ */
109
+ addTitle(titleElementRef, contentTitleElement, hasCollapsibleTitle, ionTitleElement) {
110
+ this.moveChild(titleElementRef, ionTitleElement);
111
+ // If title is collapsible append it to content area; required by ionic implementation.
112
+ if (hasCollapsibleTitle) {
113
+ const titleElementClone = titleElementRef.nativeElement.cloneNode(true);
114
+ this.moveChild(new ElementRef(titleElementClone), contentTitleElement);
253
115
  }
254
- const parentRoute = this.getBackdropRoute(currentActivatedRoute);
255
- return this.router.navigate(['./'], {
256
- relativeTo: parentRoute,
257
- });
258
116
  }
259
- getBackdropRoute(currentActivatedRoute) {
260
- let parentRoute = currentActivatedRoute.parent;
261
- while (parentRoute && !parentRoute.component && !!parentRoute.parent) {
262
- parentRoute = parentRoute.parent;
117
+ removeTitle(titleElementRef, hasCollapsibleTitle, contentTitleElement) {
118
+ this.removeChild(titleElementRef);
119
+ if (hasCollapsibleTitle) {
120
+ const kirbyPageTitleElement = contentTitleElement.nativeElement.querySelector('kirby-page-title');
121
+ this.removeChild(new ElementRef(kirbyPageTitleElement));
263
122
  }
264
- return parentRoute;
265
123
  }
266
- handleBrowserBackButton(modal) {
267
- const popstateNavigationStart$ = this.router.events.pipe(filter((event) => event instanceof NavigationStart && event.navigationTrigger === 'popstate'));
268
- const navigationEnd$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd));
269
- navigationEnd$
270
- .pipe(skipUntil(popstateNavigationStart$), takeUntil(modal.onWillDismiss()))
271
- .subscribe(() => {
272
- modal.dismiss();
273
- });
274
- }
275
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalNavigationService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
276
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalNavigationService, providedIn: 'root' }); }
277
- }
278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalNavigationService, decorators: [{
279
- type: Injectable,
280
- args: [{ providedIn: 'root' }]
281
- }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });
282
-
283
- class ActionSheetComponent {
284
- constructor() {
285
- this.cancelButtonText = 'Cancel';
286
- this.hideCancel = false;
287
- this.disabled = false;
288
- this.cancel = new EventEmitter();
289
- this.itemSelect = new EventEmitter();
290
- }
291
- onItemSelect(selection) {
292
- this.itemSelect.emit(selection);
293
- }
294
- onCancel() {
295
- this.cancel.emit();
296
- }
297
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
298
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ActionSheetComponent, isStandalone: true, selector: "kirby-action-sheet", inputs: { cancelButtonText: "cancelButtonText", hideCancel: "hideCancel", disabled: "disabled", header: "header", subheader: "subheader", items: "items" }, outputs: { cancel: "cancel", itemSelect: "itemSelect" }, ngImport: i0, template: "<kirby-card>\n <kirby-card-header\n *ngIf=\"header\"\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n *ngFor=\"let item of items\"\n >\n {{ item.text }}\n </button>\n</kirby-card>\n<button\n *ngIf=\"!hideCancel\"\n kirby-button\n class=\"cancel-btn\"\n size=\"lg\"\n attentionLevel=\"3\"\n (click)=\"onCancel()\"\n>\n {{ cancelButtonText }}\n</button>\n", styles: [":host{--kirby-internal-margin-horizontal-default: 32px}@media (max-width: 320px){:host{--kirby-internal-margin-horizontal-default: 16px}}:host{--kirby-internal-margin-horizontal-total: calc( 2 * var(--kirby-action-sheet-margin-horizontal, var(--kirby-internal-margin-horizontal-default)) );display:flex;flex-direction:column;align-items:center;justify-content:flex-end;margin:0 auto;width:calc(100vw - var(--kirby-internal-margin-horizontal-total));max-width:calc(375px - var(--kirby-internal-margin-horizontal-total))}@media (hover: hover) and (pointer: fine){:host button[kirby-button].no-decoration:focus-visible{box-shadow:none;--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black)}}kirby-card{align-self:stretch;pointer-events:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}kirby-card button[kirby-button]{margin:0;border-radius:0}kirby-card button[kirby-button]:not(:focus){border-top:1px solid var(--kirby-background-color)}@media (hover: hover) and (pointer: fine){.cancel-btn:focus{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}.cancel-btn:focus:not(:focus-visible){box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 0 transparent}.cancel-btn:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}.cancel-btn{font-weight:700;margin-top:16px;margin-bottom:24px;pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: CardModule }, { kind: "component", type: i1$1.CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "variant"] }, { kind: "component", type: i1$1.CardHeaderComponent, selector: "kirby-card-header", inputs: ["title", "subtitle", "isTitleBold", "flagged", "hasPadding"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
299
- }
300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionSheetComponent, decorators: [{
301
- type: Component,
302
- args: [{ imports: [CardModule, ButtonComponent, CommonModule], selector: 'kirby-action-sheet', template: "<kirby-card>\n <kirby-card-header\n *ngIf=\"header\"\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n *ngFor=\"let item of items\"\n >\n {{ item.text }}\n </button>\n</kirby-card>\n<button\n *ngIf=\"!hideCancel\"\n kirby-button\n class=\"cancel-btn\"\n size=\"lg\"\n attentionLevel=\"3\"\n (click)=\"onCancel()\"\n>\n {{ cancelButtonText }}\n</button>\n", styles: [":host{--kirby-internal-margin-horizontal-default: 32px}@media (max-width: 320px){:host{--kirby-internal-margin-horizontal-default: 16px}}:host{--kirby-internal-margin-horizontal-total: calc( 2 * var(--kirby-action-sheet-margin-horizontal, var(--kirby-internal-margin-horizontal-default)) );display:flex;flex-direction:column;align-items:center;justify-content:flex-end;margin:0 auto;width:calc(100vw - var(--kirby-internal-margin-horizontal-total));max-width:calc(375px - var(--kirby-internal-margin-horizontal-total))}@media (hover: hover) and (pointer: fine){:host button[kirby-button].no-decoration:focus-visible{box-shadow:none;--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black)}}kirby-card{align-self:stretch;pointer-events:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}kirby-card button[kirby-button]{margin:0;border-radius:0}kirby-card button[kirby-button]:not(:focus){border-top:1px solid var(--kirby-background-color)}@media (hover: hover) and (pointer: fine){.cancel-btn:focus{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}.cancel-btn:focus:not(:focus-visible){box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 0 transparent}.cancel-btn:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}.cancel-btn{font-weight:700;margin-top:16px;margin-bottom:24px;pointer-events:auto}\n"] }]
303
- }], propDecorators: { cancelButtonText: [{
304
- type: Input
305
- }], hideCancel: [{
306
- type: Input
307
- }], disabled: [{
308
- type: Input
309
- }], header: [{
310
- type: Input
311
- }], subheader: [{
312
- type: Input
313
- }], items: [{
314
- type: Input
315
- }], cancel: [{
316
- type: Output
317
- }], itemSelect: [{
318
- type: Output
319
- }] } });
320
-
321
- class ActionSheetHelper {
322
- constructor(ionicModalController) {
323
- this.ionicModalController = ionicModalController;
124
+ moveChild(childElementRef, newParentElementRef) {
125
+ const child = childElementRef.nativeElement;
126
+ const newParent = newParentElementRef.nativeElement;
127
+ this.renderer.removeChild(child.parentElement, child);
128
+ this.renderer.appendChild(newParent, child);
324
129
  }
325
- async showActionSheet(config) {
326
- const cancel = new EventEmitter();
327
- const itemSelect = new EventEmitter();
328
- const ionModal = await this.ionicModalController.create({
329
- component: ActionSheetComponent,
330
- cssClass: ['kirby-overlay', 'kirby-action-sheet'],
331
- componentProps: {
332
- ...config,
333
- cancel: cancel,
334
- itemSelect: itemSelect,
335
- },
336
- backdropDismiss: true,
337
- });
338
- // Remove 'modal-shadow' element as we are no longer able to hide it with CSS in Ionic 6.
339
- // We need to remove it so it does not obstruct the backdrop-click to dismiss functionality.
340
- ionModal.shadowRoot.querySelector('.modal-shadow').remove();
341
- const cancelSubscription = cancel.subscribe(() => ionModal.dismiss());
342
- const itemSelectSubscription = itemSelect.subscribe((item) => ionModal.dismiss(item));
343
- const onDidDismiss = ionModal.onDidDismiss();
344
- onDidDismiss.then(() => {
345
- cancelSubscription.unsubscribe();
346
- itemSelectSubscription.unsubscribe();
347
- });
348
- await ionModal.present();
349
- return {
350
- dismiss: ionModal.dismiss.bind(ionModal),
351
- onWillDismiss: ionModal.onWillDismiss(),
352
- onDidDismiss: ionModal.onDidDismiss(),
353
- };
130
+ removeChild(childElementRef, parentElement) {
131
+ const child = childElementRef.nativeElement;
132
+ if (child) {
133
+ this.renderer.removeChild(parentElement || child.parentElement, child);
134
+ }
354
135
  }
355
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionSheetHelper, deps: [{ token: i1$2.ModalController }], target: i0.ɵɵFactoryTarget.Injectable }); }
356
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionSheetHelper }); }
357
136
  }
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionSheetHelper, decorators: [{
359
- type: Injectable
360
- }], ctorParameters: () => [{ type: i1$2.ModalController }] });
361
137
 
362
138
  class AlertComponent {
363
139
  set title(title) {
@@ -366,6 +142,12 @@ class AlertComponent {
366
142
  set message(message) {
367
143
  this.message$ = typeof message === 'string' ? of(message) : message;
368
144
  }
145
+ set okBtn(okBtn) {
146
+ this.okBtn$ = typeof okBtn === 'string' ? of(okBtn) : okBtn;
147
+ }
148
+ set cancelBtn(cancelBtn) {
149
+ this.cancelBtn$ = typeof cancelBtn === 'string' ? of(cancelBtn) : cancelBtn;
150
+ }
369
151
  constructor(elementRef, windowRef) {
370
152
  this.elementRef = elementRef;
371
153
  this.windowRef = windowRef;
@@ -390,10 +172,10 @@ class AlertComponent {
390
172
  const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');
391
173
  ionModalElement?.dismiss(true);
392
174
  }
393
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertComponent, deps: [{ token: i0.ElementRef }, { token: i1$3.WindowRef }], target: i0.ɵɵFactoryTarget.Component }); }
394
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AlertComponent, isStandalone: true, selector: "kirby-alert", inputs: { title: "title", message: "message", iconName: "iconName", iconThemeColor: "iconThemeColor", okBtn: "okBtn", okBtnIsDestructive: "okBtnIsDestructive", cancelBtn: "cancelBtn" }, host: { properties: { "class.ion-page": "false" } }, viewQueries: [{ propertyName: "alertWrapper", first: true, predicate: ["alertWrapper"], descendants: true, static: true }], ngImport: i0, template: "<article #alertWrapper>\n <kirby-empty-state\n [iconName]=\"iconName\"\n [themeColor]=\"iconThemeColor\"\n [title]=\"title$ | async\"\n [subtitle]=\"message$ | async\"\n ></kirby-empty-state>\n <div class=\"buttongroup\">\n <button\n kirby-button\n *ngIf=\"cancelBtn\"\n attentionLevel=\"3\"\n class=\"cancel-btn\"\n (click)=\"onCancel()\"\n >\n {{ cancelBtn }}\n </button>\n <button\n kirby-button\n [size]=\"cancelBtn ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn }}\n </button>\n </div>\n</article>\n", styles: ["article{overflow:hidden;padding:24px 16px 16px}@media (max-width: 320px){article{padding:8px}}.buttongroup{display:flex;justify-content:center;column-gap:8px}.buttongroup button{flex:1 1 50%;margin-inline:0}.buttongroup button:only-child{flex-grow:0}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "directive", type: i1$4.ThemeColorDirective, selector: "kirby-avatar[themeColor], kirby-card[themeColor], kirby-icon[themeColor], kirby-progress-circle-ring[themeColor], kirby-modal-footer[themeColor], kirby-empty-state[themeColor]", inputs: ["themeColor"] }, { kind: "ngmodule", type: EmptyStateModule }, { kind: "component", type: i3.EmptyStateComponent, selector: "kirby-empty-state", inputs: ["iconName", "title", "subtitle"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
175
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AlertComponent, deps: [{ token: i0.ElementRef }, { token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Component }); }
176
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: AlertComponent, isStandalone: true, selector: "kirby-alert", inputs: { title: "title", message: "message", iconName: "iconName", iconThemeColor: "iconThemeColor", okBtn: "okBtn", okBtnIsDestructive: "okBtnIsDestructive", cancelBtn: "cancelBtn" }, host: { properties: { "class.ion-page": "false" } }, viewQueries: [{ propertyName: "alertWrapper", first: true, predicate: ["alertWrapper"], descendants: true, static: true }], ngImport: i0, template: "<article #alertWrapper>\n <kirby-empty-state\n [iconName]=\"iconName\"\n [themeColor]=\"iconThemeColor\"\n [title]=\"title$ | async\"\n [subtitle]=\"message$ | async\"\n ></kirby-empty-state>\n <div class=\"buttongroup\">\n @if (cancelBtn$ | async; as cancelBtn) {\n <button kirby-button attentionLevel=\"3\" class=\"cancel-btn\" (click)=\"onCancel()\">\n {{ cancelBtn }}\n </button>\n }\n <button\n kirby-button\n [size]=\"(cancelBtn$ | async) ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn$ | async }}\n </button>\n </div>\n</article>\n", styles: ["article{overflow:hidden;padding:24px 16px 16px}@media (max-width: 320px){article{padding:8px}}.buttongroup{display:flex;justify-content:center;column-gap:8px}.buttongroup button{flex:1 1 50%;margin-inline:0}.buttongroup button:only-child{flex-grow:0}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "directive", type: i1$1.ThemeColorDirective, selector: "kirby-avatar[themeColor], kirby-card[themeColor], kirby-icon[themeColor], kirby-progress-circle-ring[themeColor], kirby-modal-footer[themeColor], kirby-empty-state[themeColor]", inputs: ["themeColor"] }, { kind: "ngmodule", type: EmptyStateModule }, { kind: "component", type: i3.EmptyStateComponent, selector: "kirby-empty-state", inputs: ["iconName", "title", "subtitle"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
395
177
  }
396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertComponent, decorators: [{
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AlertComponent, decorators: [{
397
179
  type: Component,
398
180
  args: [{ imports: [
399
181
  IconModule,
@@ -402,8 +184,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
402
184
  CommonModule,
403
185
  EmptyStateModule,
404
186
  ThemeColorDirective,
405
- ], selector: 'kirby-alert', host: { '[class.ion-page]': 'false' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<article #alertWrapper>\n <kirby-empty-state\n [iconName]=\"iconName\"\n [themeColor]=\"iconThemeColor\"\n [title]=\"title$ | async\"\n [subtitle]=\"message$ | async\"\n ></kirby-empty-state>\n <div class=\"buttongroup\">\n <button\n kirby-button\n *ngIf=\"cancelBtn\"\n attentionLevel=\"3\"\n class=\"cancel-btn\"\n (click)=\"onCancel()\"\n >\n {{ cancelBtn }}\n </button>\n <button\n kirby-button\n [size]=\"cancelBtn ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn }}\n </button>\n </div>\n</article>\n", styles: ["article{overflow:hidden;padding:24px 16px 16px}@media (max-width: 320px){article{padding:8px}}.buttongroup{display:flex;justify-content:center;column-gap:8px}.buttongroup button{flex:1 1 50%;margin-inline:0}.buttongroup button:only-child{flex-grow:0}\n"] }]
406
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$3.WindowRef }], propDecorators: { alertWrapper: [{
187
+ ], selector: 'kirby-alert', host: { '[class.ion-page]': 'false' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<article #alertWrapper>\n <kirby-empty-state\n [iconName]=\"iconName\"\n [themeColor]=\"iconThemeColor\"\n [title]=\"title$ | async\"\n [subtitle]=\"message$ | async\"\n ></kirby-empty-state>\n <div class=\"buttongroup\">\n @if (cancelBtn$ | async; as cancelBtn) {\n <button kirby-button attentionLevel=\"3\" class=\"cancel-btn\" (click)=\"onCancel()\">\n {{ cancelBtn }}\n </button>\n }\n <button\n kirby-button\n [size]=\"(cancelBtn$ | async) ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn$ | async }}\n </button>\n </div>\n</article>\n", styles: ["article{overflow:hidden;padding:24px 16px 16px}@media (max-width: 320px){article{padding:8px}}.buttongroup{display:flex;justify-content:center;column-gap:8px}.buttongroup button{flex:1 1 50%;margin-inline:0}.buttongroup button:only-child{flex-grow:0}\n"] }]
188
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.WindowRef }], propDecorators: { alertWrapper: [{
407
189
  type: ViewChild,
408
190
  args: ['alertWrapper', { static: true }]
409
191
  }], title: [{
@@ -445,7 +227,6 @@ class AlertHelper {
445
227
  return {
446
228
  ...config,
447
229
  okBtn: this.getOkBtn(config),
448
- cancelBtn: config.cancelBtn,
449
230
  okBtnIsDestructive: this.getOkBtnIsDestructive(config),
450
231
  iconName: config.icon && config.icon.name,
451
232
  iconThemeColor: config.icon && config.icon.themeColor,
@@ -454,11 +235,11 @@ class AlertHelper {
454
235
  getOkBtn(config) {
455
236
  let text;
456
237
  if (config.okBtn) {
457
- if (typeof config.okBtn === 'string') {
238
+ if (typeof config.okBtn === 'string' || isObservable(config.okBtn)) {
458
239
  text = config.okBtn;
459
240
  }
460
241
  else {
461
- text = config.okBtn.text;
242
+ text = config.okBtn?.text;
462
243
  }
463
244
  }
464
245
  return text;
@@ -466,64 +247,13 @@ class AlertHelper {
466
247
  getOkBtnIsDestructive(config) {
467
248
  return typeof config.okBtn === 'object' ? config.okBtn.isDestructive : undefined;
468
249
  }
469
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertHelper, deps: [{ token: i1$2.ModalController }], target: i0.ɵɵFactoryTarget.Injectable }); }
470
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertHelper }); }
250
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AlertHelper, deps: [{ token: i1$2.ModalController }], target: i0.ɵɵFactoryTarget.Injectable }); }
251
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AlertHelper }); }
471
252
  }
472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertHelper, decorators: [{
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AlertHelper, decorators: [{
473
254
  type: Injectable
474
255
  }], ctorParameters: () => [{ type: i1$2.ModalController }] });
475
256
 
476
- class Modal {
477
- }
478
- /**
479
- * WARNING: This is for internal use only and should not be used outside of Kirby.
480
- */
481
- var ModalElementType;
482
- (function (ModalElementType) {
483
- ModalElementType[ModalElementType["PAGE_PROGRESS"] = 0] = "PAGE_PROGRESS";
484
- ModalElementType[ModalElementType["FOOTER"] = 1] = "FOOTER";
485
- ModalElementType[ModalElementType["TITLE"] = 2] = "TITLE";
486
- })(ModalElementType || (ModalElementType = {}));
487
- /**
488
- * WARNING: This is for internal use only and should not be used outside of Kirby.
489
- */
490
- class ModalElementsAdvertiser {
491
- }
492
- /**
493
- * WARNING: This is for internal use only and should not be used outside of Kirby.
494
- */
495
- class ModalElementComponent {
496
- get isContainedInModal() {
497
- return this.modalElementsAdvertiser !== null;
498
- }
499
- constructor(modalElementType, elementRef, modalElementsAdvertiser) {
500
- this.modalElementType = modalElementType;
501
- this.elementRef = elementRef;
502
- this.modalElementsAdvertiser = modalElementsAdvertiser;
503
- }
504
- ngAfterViewInit() {
505
- if (this.isContainedInModal) {
506
- this.modalElementsAdvertiser.addModalElement(this.modalElementType, this.elementRef);
507
- }
508
- }
509
- ngOnDestroy() {
510
- if (this.isContainedInModal) {
511
- this.modalElementsAdvertiser.removeModalElement(this.modalElementType, this.elementRef);
512
- }
513
- }
514
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalElementComponent, deps: [{ token: ModalElementType }, { token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
515
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ModalElementComponent, isStandalone: false, selector: "ng-component", ngImport: i0, template: '', isInline: true }); }
516
- }
517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalElementComponent, decorators: [{
518
- type: Component,
519
- args: [{
520
- template: '',
521
- standalone: false,
522
- }]
523
- }], ctorParameters: () => [{ type: ModalElementType }, { type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{
524
- type: Optional
525
- }] }] });
526
-
527
257
  class CanDismissHelper {
528
258
  constructor(alertHelper) {
529
259
  this.alertHelper = alertHelper;
@@ -542,76 +272,13 @@ class CanDismissHelper {
542
272
  const result = await alert.onWillDismiss;
543
273
  return result.data;
544
274
  }
545
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CanDismissHelper, deps: [{ token: AlertHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
546
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CanDismissHelper }); }
275
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: CanDismissHelper, deps: [{ token: AlertHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
276
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: CanDismissHelper }); }
547
277
  }
548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CanDismissHelper, decorators: [{
278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: CanDismissHelper, decorators: [{
549
279
  type: Injectable
550
280
  }], ctorParameters: () => [{ type: AlertHelper }] });
551
281
 
552
- const COMPONENT_PROPS = new InjectionToken('componentProps');
553
-
554
- /*
555
- The ModalWrapperComponent class was growing large.
556
-
557
- Hence the functions responsible for moving modal elements around
558
- has been encapsulated in this class.
559
- */
560
- class ModalElementsMoverDelegate {
561
- constructor(renderer, elementRef) {
562
- this.renderer = renderer;
563
- this.elementRef = elementRef;
564
- }
565
- addFooter(footerElementRef) {
566
- // Move the footer next to ion-content
567
- this.moveChild(footerElementRef, this.elementRef);
568
- }
569
- removeFooter(footerElementRef) {
570
- this.removeChild(footerElementRef);
571
- }
572
- addPageProgress(pageProgressElementRef, ionToolbarElement) {
573
- this.moveChild(pageProgressElementRef, ionToolbarElement);
574
- }
575
- removePageProgress(pageProgressElementRef) {
576
- this.removeChild(pageProgressElementRef);
577
- }
578
- /*
579
- contentTitleElement & ionTitleElement has to be passed
580
- as arguments to the method; not part of the constructor, as they
581
- might reference completely different elements between calls.
582
-
583
- For example in a multi-page routed modal where the elements are destroyed
584
- and recreated.
585
- */
586
- addTitle(titleElementRef, contentTitleElement, hasCollapsibleTitle, ionTitleElement) {
587
- this.moveChild(titleElementRef, ionTitleElement);
588
- // If title is collapsible append it to content area; required by ionic implementation.
589
- if (hasCollapsibleTitle) {
590
- const titleElementClone = titleElementRef.nativeElement.cloneNode(true);
591
- this.moveChild(new ElementRef(titleElementClone), contentTitleElement);
592
- }
593
- }
594
- removeTitle(titleElementRef, hasCollapsibleTitle, contentTitleElement) {
595
- this.removeChild(titleElementRef);
596
- if (hasCollapsibleTitle) {
597
- const kirbyPageTitleElement = contentTitleElement.nativeElement.querySelector('kirby-page-title');
598
- this.removeChild(new ElementRef(kirbyPageTitleElement));
599
- }
600
- }
601
- moveChild(childElementRef, newParentElementRef) {
602
- const child = childElementRef.nativeElement;
603
- const newParent = newParentElementRef.nativeElement;
604
- this.renderer.removeChild(child.parentElement, child);
605
- this.renderer.appendChild(newParent, child);
606
- }
607
- removeChild(childElementRef, parentElement) {
608
- const child = childElementRef.nativeElement;
609
- if (child) {
610
- this.renderer.removeChild(parentElement || child.parentElement, child);
611
- }
612
- }
613
- }
614
-
615
282
  const contentScrollDebounceTimeInMS = 10;
616
283
  const contentScrolledOffsetInPixels = 4;
617
284
  class ModalWrapperComponent {
@@ -709,6 +376,10 @@ class ModalWrapperComponent {
709
376
  this.setAriaLabel();
710
377
  }
711
378
  set currentFooter(footer) {
379
+ if (this._currentFooter) {
380
+ this.resizeObserverService.unobserve(this._currentFooter);
381
+ }
382
+ this._currentFooter = footer;
712
383
  if (footer !== null) {
713
384
  this.resizeObserverService.observe(footer, (entry) => {
714
385
  const [property, pixelValue] = [
@@ -1061,13 +732,13 @@ class ModalWrapperComponent {
1061
732
  this.destroy$.next();
1062
733
  this.destroy$.complete();
1063
734
  }
1064
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1$4.ResizeObserverService }, { token: i1$3.WindowRef }, { token: i3$1.PlatformService }, { token: CanDismissHelper }, { token: i0.EnvironmentInjector }, { token: i1$4.TranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
1065
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ModalWrapperComponent, isStandalone: true, selector: "kirby-modal-wrapper", inputs: { scrollDisabled: "scrollDisabled", config: "config", content: "content" }, 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: [
735
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1$1.ResizeObserverService }, { token: i1.WindowRef }, { token: i3$1.PlatformService }, { token: CanDismissHelper }, { token: i0.EnvironmentInjector }, { token: i1$1.TranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
736
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: ModalWrapperComponent, isStandalone: true, selector: "kirby-modal-wrapper", inputs: { scrollDisabled: "scrollDisabled", config: "config", content: "content" }, 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: [
1066
737
  { provide: Modal, useExisting: ModalWrapperComponent },
1067
738
  { provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },
1068
- ], queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], 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: "_contentTitleElement", first: true, predicate: ["contentTitle"], descendants: true, read: ElementRef }, { propertyName: "toolbarButtonsQuery", predicate: ButtonComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<ion-header\n role=\"presentation\"\n [class.content-scrolled]=\"isContentScrolled\"\n (touchstart)=\"onHeaderTouchStart($event)\"\n>\n <ion-toolbar>\n <ion-title role=\"heading\" aria-level=\"2\" tabindex=\"-1\"></ion-title>\n <ion-buttons\n slot=\"secondary\"\n *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\"\n >\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n (click)=\"config.drawerSupplementaryAction.action($event)\"\n >\n <kirby-icon [name]=\"config.drawerSupplementaryAction.iconName\"></kirby-icon>\n </button>\n </ion-buttons>\n <ion-buttons slot=\"primary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n [noDecoration]=\"config.interactWithBackground\"\n [attr.aria-label]=\"translations.get('close')\"\n (click)=\"close()\"\n >\n <kirby-icon name=\"close\"></kirby-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"scrollEventsEnabled\">\n <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n\n <!-- Outlet for ModalController -->\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n\n <!-- Outlet for projected content -->\n <ng-container *ngTemplateOutlet=\"content; injector: modalWrapperInjector\"></ng-container>\n\n <!-- Outlet for route-based modal -->\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n", styles: ["ion-header{box-sizing:border-box}ion-header ion-toolbar{--padding-start: 8px;--padding-end: 8px;--padding-bottom: 7px;--padding-top: 8px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));border-bottom:1px solid transparent;transition:border-color .2s linear}@media (min-width: 768px){ion-header ion-toolbar{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-header ion-toolbar button{color:var(--color)}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}@media (max-width: 767px){:host.drawer ion-header ion-toolbar{--padding-top: 16px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}}@media (min-width: 768px){ion-header ion-toolbar{border-bottom-color:var(--kirby-medium)}}ion-header.content-scrolled ion-toolbar{border-bottom-color:var(--kirby-medium)}:host-context(ion-modal.no-header-area-border) ion-header ion-toolbar{border-bottom-color:transparent}@media (max-width: 767px){:host-context(ion-modal.kirby-drawer: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.kirby-drawer: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.kirby-drawer:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal.kirby-drawer.interact-with-background){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.kirby-drawer.interact-with-background) 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.kirby-drawer.interact-with-background) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-header ion-toolbar{border-bottom-color:transparent}: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: 768px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-title{box-sizing:border-box;padding-inline:calc(48px + var(--padding-start)) calc(48px + var(--padding-end));font-size:16px;font-weight:700}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px;display:flex;flex-direction:column;height:calc(var(--height) - var(--header-height) - var(--footer-height));max-height:calc(var(--max-height) - var(--header-height) - var(--footer-height))}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 768px){ion-content{--padding-start: 48px;--padding-end: 48px}}:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-top: 0px;--padding-bottom: 32px;--padding-start: 8px;--padding-end: 8px;border:none}@media (min-width: 768px){:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-start: 16px;--padding-end: 16px}}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i6.IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
739
+ ], queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], 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: "_contentTitleElement", first: true, predicate: ["contentTitle"], descendants: true, read: ElementRef }, { propertyName: "toolbarButtonsQuery", predicate: ButtonComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<ion-header\n role=\"presentation\"\n [class.content-scrolled]=\"isContentScrolled\"\n (touchstart)=\"onHeaderTouchStart($event)\"\n>\n <ion-toolbar>\n <ion-title role=\"heading\" aria-level=\"2\" tabindex=\"-1\"></ion-title>\n @if (config.flavor === 'drawer' && config.drawerSupplementaryAction) {\n <ion-buttons slot=\"secondary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n (click)=\"config.drawerSupplementaryAction.action($event)\"\n >\n <kirby-icon [name]=\"config.drawerSupplementaryAction.iconName\"></kirby-icon>\n </button>\n </ion-buttons>\n }\n <ion-buttons slot=\"primary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n [noDecoration]=\"config.interactWithBackground\"\n [attr.aria-label]=\"translations.get('close')\"\n (click)=\"close()\"\n >\n <kirby-icon name=\"close\"></kirby-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"scrollEventsEnabled\">\n @if (_hasCollapsibleTitle) {\n <ion-header collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n }\n\n <!-- Outlet for ModalController -->\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n\n <!-- Outlet for projected content -->\n <ng-container *ngTemplateOutlet=\"content; injector: modalWrapperInjector\"></ng-container>\n\n <!-- Outlet for route-based modal -->\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n", styles: ["ion-header{box-sizing:border-box}ion-header ion-toolbar{--padding-start: 8px;--padding-end: 8px;--padding-bottom: 7px;--padding-top: 8px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));border-bottom:1px solid transparent;transition:border-color .2s linear}@media (min-width: 768px){ion-header ion-toolbar{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-header ion-toolbar button{color:var(--color)}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}@media (max-width: 767px){:host.drawer ion-header ion-toolbar{--padding-top: 16px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}}@media (min-width: 768px){ion-header ion-toolbar{border-bottom-color:var(--kirby-medium)}}ion-header.content-scrolled ion-toolbar{border-bottom-color:var(--kirby-medium)}:host-context(ion-modal.no-header-area-border) ion-header ion-toolbar{border-bottom-color:transparent}@media (max-width: 767px){:host-context(ion-modal.kirby-drawer: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.kirby-drawer: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.kirby-drawer:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal.kirby-drawer.interact-with-background){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.kirby-drawer.interact-with-background) 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.kirby-drawer.interact-with-background) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-header ion-toolbar{border-bottom-color:transparent}: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: 768px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-title{box-sizing:border-box;padding-inline:calc(48px + var(--padding-start)) calc(48px + var(--padding-end));font-size:16px;font-weight:700}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px;display:flex;flex-direction:column;height:calc(var(--height) - var(--header-height) - var(--footer-height));max-height:calc(var(--max-height) - var(--header-height) - var(--footer-height))}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 768px){ion-content{--padding-start: 48px;--padding-end: 48px}}:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-top: 0px;--padding-bottom: 32px;--padding-start: 8px;--padding-end: 8px;border:none}@media (min-width: 768px){:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-start: 16px;--padding-end: 16px}}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i6.IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }] }); }
1069
740
  }
1070
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalWrapperComponent, decorators: [{
741
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalWrapperComponent, decorators: [{
1071
742
  type: Component,
1072
743
  args: [{ imports: [
1073
744
  RouterModule,
@@ -1082,8 +753,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
1082
753
  ], selector: 'kirby-modal-wrapper', providers: [
1083
754
  { provide: Modal, useExisting: ModalWrapperComponent },
1084
755
  { provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },
1085
- ], template: "<ion-header\n role=\"presentation\"\n [class.content-scrolled]=\"isContentScrolled\"\n (touchstart)=\"onHeaderTouchStart($event)\"\n>\n <ion-toolbar>\n <ion-title role=\"heading\" aria-level=\"2\" tabindex=\"-1\"></ion-title>\n <ion-buttons\n slot=\"secondary\"\n *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\"\n >\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n (click)=\"config.drawerSupplementaryAction.action($event)\"\n >\n <kirby-icon [name]=\"config.drawerSupplementaryAction.iconName\"></kirby-icon>\n </button>\n </ion-buttons>\n <ion-buttons slot=\"primary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n [noDecoration]=\"config.interactWithBackground\"\n [attr.aria-label]=\"translations.get('close')\"\n (click)=\"close()\"\n >\n <kirby-icon name=\"close\"></kirby-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"scrollEventsEnabled\">\n <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n\n <!-- Outlet for ModalController -->\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n\n <!-- Outlet for projected content -->\n <ng-container *ngTemplateOutlet=\"content; injector: modalWrapperInjector\"></ng-container>\n\n <!-- Outlet for route-based modal -->\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n", styles: ["ion-header{box-sizing:border-box}ion-header ion-toolbar{--padding-start: 8px;--padding-end: 8px;--padding-bottom: 7px;--padding-top: 8px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));border-bottom:1px solid transparent;transition:border-color .2s linear}@media (min-width: 768px){ion-header ion-toolbar{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-header ion-toolbar button{color:var(--color)}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}@media (max-width: 767px){:host.drawer ion-header ion-toolbar{--padding-top: 16px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}}@media (min-width: 768px){ion-header ion-toolbar{border-bottom-color:var(--kirby-medium)}}ion-header.content-scrolled ion-toolbar{border-bottom-color:var(--kirby-medium)}:host-context(ion-modal.no-header-area-border) ion-header ion-toolbar{border-bottom-color:transparent}@media (max-width: 767px){:host-context(ion-modal.kirby-drawer: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.kirby-drawer: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.kirby-drawer:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal.kirby-drawer.interact-with-background){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.kirby-drawer.interact-with-background) 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.kirby-drawer.interact-with-background) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-header ion-toolbar{border-bottom-color:transparent}: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: 768px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-title{box-sizing:border-box;padding-inline:calc(48px + var(--padding-start)) calc(48px + var(--padding-end));font-size:16px;font-weight:700}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px;display:flex;flex-direction:column;height:calc(var(--height) - var(--header-height) - var(--footer-height));max-height:calc(var(--max-height) - var(--header-height) - var(--footer-height))}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 768px){ion-content{--padding-start: 48px;--padding-end: 48px}}:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-top: 0px;--padding-bottom: 32px;--padding-start: 8px;--padding-end: 8px;border:none}@media (min-width: 768px){:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-start: 16px;--padding-end: 16px}}\n"] }]
1086
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1$4.ResizeObserverService }, { type: i1$3.WindowRef }, { type: i3$1.PlatformService }, { type: CanDismissHelper }, { type: i0.EnvironmentInjector }, { type: i1$4.TranslationService }], propDecorators: { _hasCollapsibleTitle: [{
756
+ ], template: "<ion-header\n role=\"presentation\"\n [class.content-scrolled]=\"isContentScrolled\"\n (touchstart)=\"onHeaderTouchStart($event)\"\n>\n <ion-toolbar>\n <ion-title role=\"heading\" aria-level=\"2\" tabindex=\"-1\"></ion-title>\n @if (config.flavor === 'drawer' && config.drawerSupplementaryAction) {\n <ion-buttons slot=\"secondary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n (click)=\"config.drawerSupplementaryAction.action($event)\"\n >\n <kirby-icon [name]=\"config.drawerSupplementaryAction.iconName\"></kirby-icon>\n </button>\n </ion-buttons>\n }\n <ion-buttons slot=\"primary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n [noDecoration]=\"config.interactWithBackground\"\n [attr.aria-label]=\"translations.get('close')\"\n (click)=\"close()\"\n >\n <kirby-icon name=\"close\"></kirby-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"scrollEventsEnabled\">\n @if (_hasCollapsibleTitle) {\n <ion-header collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n }\n\n <!-- Outlet for ModalController -->\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n\n <!-- Outlet for projected content -->\n <ng-container *ngTemplateOutlet=\"content; injector: modalWrapperInjector\"></ng-container>\n\n <!-- Outlet for route-based modal -->\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n", styles: ["ion-header{box-sizing:border-box}ion-header ion-toolbar{--padding-start: 8px;--padding-end: 8px;--padding-bottom: 7px;--padding-top: 8px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));border-bottom:1px solid transparent;transition:border-color .2s linear}@media (min-width: 768px){ion-header ion-toolbar{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-header ion-toolbar button{color:var(--color)}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}@media (max-width: 767px){:host.drawer ion-header ion-toolbar{--padding-top: 16px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}}@media (min-width: 768px){ion-header ion-toolbar{border-bottom-color:var(--kirby-medium)}}ion-header.content-scrolled ion-toolbar{border-bottom-color:var(--kirby-medium)}:host-context(ion-modal.no-header-area-border) ion-header ion-toolbar{border-bottom-color:transparent}@media (max-width: 767px){:host-context(ion-modal.kirby-drawer: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.kirby-drawer: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.kirby-drawer:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal.kirby-drawer.interact-with-background){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.kirby-drawer.interact-with-background) 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.kirby-drawer.interact-with-background) ion-content::part(scroll){height:\"100%\";position:relative}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-header ion-toolbar{border-bottom-color:transparent}: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: 768px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-title{box-sizing:border-box;padding-inline:calc(48px + var(--padding-start)) calc(48px + var(--padding-end));font-size:16px;font-weight:700}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px;display:flex;flex-direction:column;height:calc(var(--height) - var(--header-height) - var(--footer-height));max-height:calc(var(--max-height) - var(--header-height) - var(--footer-height))}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 768px){ion-content{--padding-start: 48px;--padding-end: 48px}}:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-top: 0px;--padding-bottom: 32px;--padding-start: 8px;--padding-end: 8px;border:none}@media (min-width: 768px){:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-start: 16px;--padding-end: 16px}}\n"] }]
757
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1$1.ResizeObserverService }, { type: i1.WindowRef }, { type: i3$1.PlatformService }, { type: CanDismissHelper }, { type: i0.EnvironmentInjector }, { type: i1$1.TranslationService }], propDecorators: { _hasCollapsibleTitle: [{
1087
758
  type: HostBinding,
1088
759
  args: ['class.collapsible-title']
1089
760
  }], scrollDisabled: [{
@@ -1207,13 +878,13 @@ class ModalCompactWrapperComponent {
1207
878
  // This fixes an undesired scroll behaviour occurring on keyboard-tabbing backwards (with shift+tab):
1208
879
  this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });
1209
880
  }
1210
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalCompactWrapperComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1$3.WindowRef }, { token: CanDismissHelper }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
1211
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ModalCompactWrapperComponent, isStandalone: true, selector: "kirby-modal-compact-wrapper", inputs: { config: "config", content: "content" }, host: { listeners: { "window:focus": "onFocusChange()", "window:focusout": "onFocusChange()" }, properties: { "class.ion-page": "false" } }, providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }], ngImport: i0, template: "<!-- Outlet for ModalController -->\n<ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n></ng-container>\n\n<!-- Outlet for projected content -->\n<ng-container *ngTemplateOutlet=\"content\"></ng-container>\n", styles: [":host{display:block;padding:24px 16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
881
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalCompactWrapperComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.WindowRef }, { token: CanDismissHelper }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
882
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.0", type: ModalCompactWrapperComponent, isStandalone: true, selector: "kirby-modal-compact-wrapper", inputs: { config: "config", content: "content" }, host: { listeners: { "window:focus": "onFocusChange()", "window:focusout": "onFocusChange()" }, properties: { "class.ion-page": "false" } }, providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }], ngImport: i0, template: "<!-- Outlet for ModalController -->\n<ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n></ng-container>\n\n<!-- Outlet for projected content -->\n<ng-container *ngTemplateOutlet=\"content\"></ng-container>\n", styles: [":host{display:block;padding:24px 16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
1212
883
  }
1213
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalCompactWrapperComponent, decorators: [{
884
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalCompactWrapperComponent, decorators: [{
1214
885
  type: Component,
1215
886
  args: [{ selector: 'kirby-modal-compact-wrapper', providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }], imports: [CommonModule], host: { '[class.ion-page]': 'false' }, template: "<!-- Outlet for ModalController -->\n<ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n></ng-container>\n\n<!-- Outlet for projected content -->\n<ng-container *ngTemplateOutlet=\"content\"></ng-container>\n", styles: [":host{display:block;padding:24px 16px}\n"] }]
1216
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i1$3.WindowRef }, { type: CanDismissHelper }, { type: i0.Renderer2 }], propDecorators: { config: [{
887
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i1.WindowRef }, { type: CanDismissHelper }, { type: i0.Renderer2 }], propDecorators: { config: [{
1217
888
  type: Input
1218
889
  }], content: [{
1219
890
  type: Input
@@ -1262,68 +933,176 @@ class ModalAnimationBuilderService {
1262
933
  return el.shadowRoot || fallback;
1263
934
  };
1264
935
  }
1265
- enterAnimation(currentBackdrop) {
1266
- return (baseEl, opts) => {
936
+ enterAnimation(currentBackdrop) {
937
+ return (baseEl, opts) => {
938
+ const { presentingEl } = opts;
939
+ const root = this.getElementRoot(baseEl);
940
+ const { wrapperAnimation, backdropAnimation } = this.createEnterAnimation();
941
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
942
+ wrapperAnimation
943
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
944
+ .beforeStyles({ opacity: 1 });
945
+ const baseAnimation = createAnimation('entering-base')
946
+ .addElement(baseEl)
947
+ .easing(this.easingEnter)
948
+ .duration(this.duration)
949
+ .addAnimation(wrapperAnimation);
950
+ let currentBackdropAnimation;
951
+ if (currentBackdrop) {
952
+ currentBackdropAnimation = createAnimation()
953
+ .addElement(currentBackdrop)
954
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
955
+ }
956
+ if (presentingEl) {
957
+ const isMobile = !this.platform.isPhabletOrBigger();
958
+ const hasCardModal = presentingEl.tagName === 'ION-MODAL' &&
959
+ presentingEl.presentingElement !== undefined;
960
+ const presentingElRoot = this.getElementRoot(presentingEl);
961
+ const presentingAnimation = createAnimation().beforeStyles({
962
+ transform: 'translateY(0)',
963
+ 'transform-origin': 'top center',
964
+ overflow: 'hidden',
965
+ });
966
+ const bodyEl = document.body;
967
+ if (isMobile) {
968
+ /**
969
+ * Fallback for browsers that does not support `max()` (ex: Firefox)
970
+ * No need to worry about statusbar padding since engines like Gecko
971
+ * are not used as the engine for standalone Cordova/Capacitor apps
972
+ */
973
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)')
974
+ ? '30px'
975
+ : 'max(30px, var(--ion-safe-area-top))';
976
+ const modalTransform = hasCardModal ? '-10px' : transformOffset;
977
+ const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
978
+ const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
979
+ presentingAnimation
980
+ .afterStyles({
981
+ transform: finalTransform,
982
+ })
983
+ .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
984
+ .addElement(presentingEl)
985
+ .keyframes([
986
+ {
987
+ offset: 0,
988
+ filter: 'contrast(1)',
989
+ transform: 'translateY(0px) scale(1)',
990
+ borderRadius: '0px',
991
+ },
992
+ {
993
+ offset: 1,
994
+ filter: 'contrast(0.85)',
995
+ transform: finalTransform,
996
+ borderRadius: '10px 10px 0 0',
997
+ },
998
+ ]);
999
+ baseAnimation.addAnimation(presentingAnimation);
1000
+ }
1001
+ else {
1002
+ baseAnimation.addAnimation(backdropAnimation);
1003
+ if (currentBackdropAnimation) {
1004
+ baseAnimation.addAnimation(currentBackdropAnimation);
1005
+ }
1006
+ if (!hasCardModal) {
1007
+ wrapperAnimation.fromTo('opacity', '0', '1');
1008
+ }
1009
+ else {
1010
+ const toPresentingScale = hasCardModal
1011
+ ? this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE
1012
+ : 1;
1013
+ const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
1014
+ presentingAnimation
1015
+ .afterStyles({
1016
+ transform: finalTransform,
1017
+ })
1018
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
1019
+ .keyframes([
1020
+ { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
1021
+ { offset: 1, filter: 'contrast(0.85)', transform: finalTransform },
1022
+ ]);
1023
+ const shadowAnimation = createAnimation()
1024
+ .afterStyles({
1025
+ transform: finalTransform,
1026
+ })
1027
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
1028
+ .keyframes([
1029
+ { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },
1030
+ { offset: 1, opacity: '0', transform: finalTransform },
1031
+ ]);
1032
+ baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
1033
+ }
1034
+ }
1035
+ }
1036
+ else {
1037
+ baseAnimation.addAnimation(backdropAnimation);
1038
+ if (currentBackdropAnimation) {
1039
+ baseAnimation.addAnimation(currentBackdropAnimation);
1040
+ }
1041
+ }
1042
+ return baseAnimation;
1043
+ };
1044
+ }
1045
+ leaveAnimation(currentBackdrop) {
1046
+ return (baseEl, opts, duration = this.duration) => {
1267
1047
  const { presentingEl } = opts;
1268
1048
  const root = this.getElementRoot(baseEl);
1269
- const { wrapperAnimation, backdropAnimation } = this.createEnterAnimation();
1049
+ const { wrapperAnimation, backdropAnimation } = this.createLeaveAnimation();
1270
1050
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
1271
1051
  wrapperAnimation
1272
1052
  .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
1273
1053
  .beforeStyles({ opacity: 1 });
1274
- const baseAnimation = createAnimation('entering-base')
1054
+ const baseAnimation = createAnimation('leaving-base')
1275
1055
  .addElement(baseEl)
1276
- .easing(this.easingEnter)
1277
- .duration(this.duration)
1056
+ .easing(this.easingLeave)
1057
+ .duration(duration)
1278
1058
  .addAnimation(wrapperAnimation);
1279
1059
  let currentBackdropAnimation;
1280
1060
  if (currentBackdrop) {
1281
1061
  currentBackdropAnimation = createAnimation()
1282
1062
  .addElement(currentBackdrop)
1283
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);
1063
+ .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
1064
+ .afterStyles({ opacity: 'var(--backdrop-opacity)' }); //Ensures backdrop is reset to default opacity after swipe to close
1284
1065
  }
1285
1066
  if (presentingEl) {
1286
1067
  const isMobile = !this.platform.isPhabletOrBigger();
1287
1068
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' &&
1288
1069
  presentingEl.presentingElement !== undefined;
1289
1070
  const presentingElRoot = this.getElementRoot(presentingEl);
1290
- const presentingAnimation = createAnimation().beforeStyles({
1291
- transform: 'translateY(0)',
1292
- 'transform-origin': 'top center',
1293
- overflow: 'hidden',
1071
+ const presentingAnimation = createAnimation()
1072
+ .beforeClearStyles(['transform'])
1073
+ .afterClearStyles(['transform'])
1074
+ .onFinish((currentStep) => {
1075
+ // only reset background color if this is the last card-style modal
1076
+ if (currentStep !== 1) {
1077
+ return;
1078
+ }
1079
+ presentingEl.style.setProperty('overflow', '');
1080
+ const numModals = Array.from(bodyEl.querySelectorAll('ion-modal')).filter((m) => m.presentingElement !== undefined).length;
1081
+ if (numModals <= 1) {
1082
+ bodyEl.style.setProperty('background-color', '');
1083
+ }
1294
1084
  });
1295
1085
  const bodyEl = document.body;
1296
1086
  if (isMobile) {
1297
- /**
1298
- * Fallback for browsers that does not support `max()` (ex: Firefox)
1299
- * No need to worry about statusbar padding since engines like Gecko
1300
- * are not used as the engine for standalone Cordova/Capacitor apps
1301
- */
1302
1087
  const transformOffset = !CSS.supports('width', 'max(0px, 1px)')
1303
1088
  ? '30px'
1304
1089
  : 'max(30px, var(--ion-safe-area-top))';
1305
1090
  const modalTransform = hasCardModal ? '-10px' : transformOffset;
1306
1091
  const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
1307
1092
  const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
1308
- presentingAnimation
1309
- .afterStyles({
1310
- transform: finalTransform,
1311
- })
1312
- .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
1313
- .addElement(presentingEl)
1314
- .keyframes([
1093
+ presentingAnimation.addElement(presentingEl).keyframes([
1315
1094
  {
1316
1095
  offset: 0,
1317
- filter: 'contrast(1)',
1318
- transform: 'translateY(0px) scale(1)',
1319
- borderRadius: '0px',
1320
- },
1321
- {
1322
- offset: 1,
1323
1096
  filter: 'contrast(0.85)',
1324
1097
  transform: finalTransform,
1325
1098
  borderRadius: '10px 10px 0 0',
1326
1099
  },
1100
+ {
1101
+ offset: 1,
1102
+ filter: 'contrast(1)',
1103
+ transform: 'translateY(0px) scale(1)',
1104
+ borderRadius: '0px',
1105
+ },
1327
1106
  ]);
1328
1107
  baseAnimation.addAnimation(presentingAnimation);
1329
1108
  }
@@ -1333,7 +1112,7 @@ class ModalAnimationBuilderService {
1333
1112
  baseAnimation.addAnimation(currentBackdropAnimation);
1334
1113
  }
1335
1114
  if (!hasCardModal) {
1336
- wrapperAnimation.fromTo('opacity', '0', '1');
1115
+ wrapperAnimation.fromTo('opacity', '1', '0');
1337
1116
  }
1338
1117
  else {
1339
1118
  const toPresentingScale = hasCardModal
@@ -1341,22 +1120,22 @@ class ModalAnimationBuilderService {
1341
1120
  : 1;
1342
1121
  const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
1343
1122
  presentingAnimation
1123
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
1344
1124
  .afterStyles({
1345
- transform: finalTransform,
1125
+ transform: 'translate3d(0, 0, 0)',
1346
1126
  })
1347
- .addElement(presentingElRoot.querySelector('.modal-wrapper'))
1348
1127
  .keyframes([
1349
- { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
1350
- { offset: 1, filter: 'contrast(0.85)', transform: finalTransform },
1128
+ { offset: 0, filter: 'contrast(0.85)', transform: finalTransform },
1129
+ { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
1351
1130
  ]);
1352
1131
  const shadowAnimation = createAnimation()
1132
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
1353
1133
  .afterStyles({
1354
- transform: finalTransform,
1134
+ transform: 'translateY(0) scale(1)',
1355
1135
  })
1356
- .addElement(presentingElRoot.querySelector('.modal-shadow'))
1357
1136
  .keyframes([
1358
- { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },
1359
- { offset: 1, opacity: '0', transform: finalTransform },
1137
+ { offset: 0, opacity: '0', transform: finalTransform },
1138
+ { offset: 1, opacity: '1', transform: 'translateY(0) scale(1)' },
1360
1139
  ]);
1361
1140
  baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
1362
1141
  }
@@ -1371,121 +1150,272 @@ class ModalAnimationBuilderService {
1371
1150
  return baseAnimation;
1372
1151
  };
1373
1152
  }
1374
- leaveAnimation(currentBackdrop) {
1375
- return (baseEl, opts, duration = this.duration) => {
1376
- const { presentingEl } = opts;
1377
- const root = this.getElementRoot(baseEl);
1378
- const { wrapperAnimation, backdropAnimation } = this.createLeaveAnimation();
1379
- backdropAnimation.addElement(root.querySelector('ion-backdrop'));
1380
- wrapperAnimation
1381
- .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
1382
- .beforeStyles({ opacity: 1 });
1383
- const baseAnimation = createAnimation('leaving-base')
1384
- .addElement(baseEl)
1385
- .easing(this.easingLeave)
1386
- .duration(duration)
1387
- .addAnimation(wrapperAnimation);
1388
- let currentBackdropAnimation;
1389
- if (currentBackdrop) {
1390
- currentBackdropAnimation = createAnimation()
1391
- .addElement(currentBackdrop)
1392
- .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
1393
- .afterStyles({ opacity: 'var(--backdrop-opacity)' }); //Ensures backdrop is reset to default opacity after swipe to close
1394
- }
1395
- if (presentingEl) {
1396
- const isMobile = !this.platform.isPhabletOrBigger();
1397
- const hasCardModal = presentingEl.tagName === 'ION-MODAL' &&
1398
- presentingEl.presentingElement !== undefined;
1399
- const presentingElRoot = this.getElementRoot(presentingEl);
1400
- const presentingAnimation = createAnimation()
1401
- .beforeClearStyles(['transform'])
1402
- .afterClearStyles(['transform'])
1403
- .onFinish((currentStep) => {
1404
- // only reset background color if this is the last card-style modal
1405
- if (currentStep !== 1) {
1406
- return;
1407
- }
1408
- presentingEl.style.setProperty('overflow', '');
1409
- const numModals = Array.from(bodyEl.querySelectorAll('ion-modal')).filter((m) => m.presentingElement !== undefined).length;
1410
- if (numModals <= 1) {
1411
- bodyEl.style.setProperty('background-color', '');
1412
- }
1413
- });
1414
- const bodyEl = document.body;
1415
- if (isMobile) {
1416
- const transformOffset = !CSS.supports('width', 'max(0px, 1px)')
1417
- ? '30px'
1418
- : 'max(30px, var(--ion-safe-area-top))';
1419
- const modalTransform = hasCardModal ? '-10px' : transformOffset;
1420
- const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
1421
- const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;
1422
- presentingAnimation.addElement(presentingEl).keyframes([
1423
- {
1424
- offset: 0,
1425
- filter: 'contrast(0.85)',
1426
- transform: finalTransform,
1427
- borderRadius: '10px 10px 0 0',
1428
- },
1429
- {
1430
- offset: 1,
1431
- filter: 'contrast(1)',
1432
- transform: 'translateY(0px) scale(1)',
1433
- borderRadius: '0px',
1434
- },
1435
- ]);
1436
- baseAnimation.addAnimation(presentingAnimation);
1437
- }
1438
- else {
1439
- baseAnimation.addAnimation(backdropAnimation);
1440
- if (currentBackdropAnimation) {
1441
- baseAnimation.addAnimation(currentBackdropAnimation);
1442
- }
1443
- if (!hasCardModal) {
1444
- wrapperAnimation.fromTo('opacity', '1', '0');
1445
- }
1446
- else {
1447
- const toPresentingScale = hasCardModal
1448
- ? this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE
1449
- : 1;
1450
- const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
1451
- presentingAnimation
1452
- .addElement(presentingElRoot.querySelector('.modal-wrapper'))
1453
- .afterStyles({
1454
- transform: 'translate3d(0, 0, 0)',
1455
- })
1456
- .keyframes([
1457
- { offset: 0, filter: 'contrast(0.85)', transform: finalTransform },
1458
- { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
1459
- ]);
1460
- const shadowAnimation = createAnimation()
1461
- .addElement(presentingElRoot.querySelector('.modal-shadow'))
1462
- .afterStyles({
1463
- transform: 'translateY(0) scale(1)',
1464
- })
1465
- .keyframes([
1466
- { offset: 0, opacity: '0', transform: finalTransform },
1467
- { offset: 1, opacity: '1', transform: 'translateY(0) scale(1)' },
1468
- ]);
1469
- baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
1470
- }
1153
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalAnimationBuilderService, deps: [{ token: i3$1.PlatformService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1154
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalAnimationBuilderService, providedIn: 'root' }); }
1155
+ }
1156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalAnimationBuilderService, decorators: [{
1157
+ type: Injectable,
1158
+ args: [{ providedIn: 'root' }]
1159
+ }], ctorParameters: () => [{ type: i3$1.PlatformService }] });
1160
+
1161
+ class ModalNavigationService {
1162
+ constructor(router, route) {
1163
+ this.router = router;
1164
+ this.route = route;
1165
+ this.navigationEndListener$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd));
1166
+ }
1167
+ isModalRoute(url) {
1168
+ return url.includes('(modal:');
1169
+ }
1170
+ getCurrentActivatedRoute() {
1171
+ let childRoute = this.route.root;
1172
+ while (childRoute.firstChild) {
1173
+ childRoute = childRoute.firstChild;
1174
+ }
1175
+ return childRoute;
1176
+ }
1177
+ async getModalRoutes(routeConfig, moduleRootRoutePath) {
1178
+ const flattenedRoutes = [].concat(...routeConfig);
1179
+ let modalRoutes = [];
1180
+ const moduleRootPaths = await this.getModuleRootPath(flattenedRoutes, moduleRootRoutePath);
1181
+ if (moduleRootPaths) {
1182
+ modalRoutes = this.getModalRoutePaths(flattenedRoutes, moduleRootPaths);
1183
+ }
1184
+ return modalRoutes;
1185
+ }
1186
+ async getModuleRootPath(routes, moduleRootRoutePath) {
1187
+ if (moduleRootRoutePath) {
1188
+ const trimmedPaths = moduleRootRoutePath
1189
+ .trim()
1190
+ .split('/')
1191
+ .filter((path) => !!path);
1192
+ const rootPath = [''];
1193
+ return rootPath.concat(trimmedPaths);
1194
+ }
1195
+ const currentRoutePaths = await this.getCurrentRoutePaths();
1196
+ const moduleRootPaths = this.getRoutePathsWithoutChildSegments(currentRoutePaths, routes);
1197
+ return moduleRootPaths;
1198
+ }
1199
+ async getCurrentRoutePaths() {
1200
+ const rootPath = [''];
1201
+ const currentNavigation = this.router.getCurrentNavigation();
1202
+ if (!this.router.navigated && !currentNavigation) {
1203
+ // If router hasn't navigated yet and we are not in the middle of navigating, assume root:
1204
+ return rootPath;
1205
+ }
1206
+ if (currentNavigation) {
1207
+ // Wait for current navigation to finish:
1208
+ await firstValueFrom(this.navigationEndListener$);
1209
+ }
1210
+ let childRoute = this.route.snapshot.root;
1211
+ while (childRoute.firstChild) {
1212
+ childRoute = childRoute.firstChild;
1213
+ }
1214
+ const currentBackdropRoutePath = childRoute.pathFromRoot.filter((route) => route.outlet !== 'modal');
1215
+ return rootPath.concat(...currentBackdropRoutePath.map((route) => route.url.filter((segment) => !!segment.path).map((segment) => segment.path)));
1216
+ }
1217
+ getRoutePathsWithoutChildSegments(routePaths, routes) {
1218
+ if (!routePaths.length)
1219
+ return routePaths;
1220
+ const matchedChildRoute = this.findChildRouteForUrl(routePaths.join('/'), routes);
1221
+ if (!matchedChildRoute)
1222
+ return routePaths;
1223
+ const startSlashRegex = /^\//;
1224
+ const relativeChildRoute = matchedChildRoute.replace(startSlashRegex, '');
1225
+ const childSegmentCount = relativeChildRoute.split('/').length;
1226
+ const routePathsWithoutChildSegments = routePaths.slice(0, -childSegmentCount); // Remove child segments from end of route path array
1227
+ return routePathsWithoutChildSegments;
1228
+ }
1229
+ findChildRouteForUrl(url, routes) {
1230
+ const moduleRelativePaths = this.getRoutePaths(routes, ['']).sort().reverse(); // Ensure child paths are evaluated first
1231
+ let matchedChildRoute = moduleRelativePaths.find((path) => url.endsWith(path));
1232
+ if (!matchedChildRoute) {
1233
+ // No static child route found matching current route - look for child route with url params:
1234
+ const exactMatch = false;
1235
+ matchedChildRoute = moduleRelativePaths.find((path) => path.includes('/:') && this.pathContainsChildRouteWithUrlParams(url, path, exactMatch));
1236
+ }
1237
+ return matchedChildRoute;
1238
+ }
1239
+ pathContainsChildRouteWithUrlParams(path, childRouteWithUrlParams, exactMatch) {
1240
+ const pathSegments = path.split('/');
1241
+ const startSlashRegex = /^\//;
1242
+ let childRouteToMatch = childRouteWithUrlParams;
1243
+ if (!exactMatch) {
1244
+ const relativeChildRoute = childRouteWithUrlParams.replace(startSlashRegex, '');
1245
+ childRouteToMatch = relativeChildRoute;
1246
+ }
1247
+ const childRouteSegments = childRouteToMatch.split('/');
1248
+ // Match each child route segment against url
1249
+ // Match backwards from end to start of child route, i.e. "url ends with child route":
1250
+ const pathContainsChildRoute = childRouteSegments.reverse().every((childRouteSegment) => {
1251
+ const pathSegment = pathSegments.pop();
1252
+ // url params (e.g. `/:id/`) are treated as a match:
1253
+ return childRouteSegment.startsWith(':') || childRouteSegment === pathSegment;
1254
+ });
1255
+ if (exactMatch) {
1256
+ // Only match if we've reached the start of the url to match against:
1257
+ return pathSegments.length === 0 && pathContainsChildRoute;
1258
+ }
1259
+ return pathContainsChildRoute;
1260
+ }
1261
+ getRoutePaths(routes, parentPath) {
1262
+ return Array.isArray(routes)
1263
+ ? [].concat(...routes.map((route) => this.getRoutePath(route, parentPath)))
1264
+ : [];
1265
+ }
1266
+ getRoutePath(route, parentPath) {
1267
+ const routes = [];
1268
+ if (route.outlet)
1269
+ return routes; // Don't return relative paths for outlet routes
1270
+ const currentPath = [...parentPath];
1271
+ if (route.path) {
1272
+ currentPath.push(route.path);
1273
+ routes.push(currentPath.join('/'));
1274
+ }
1275
+ return routes.concat(this.getRoutePaths(route.children, currentPath));
1276
+ }
1277
+ getModalRoutePath(route, parentPath) {
1278
+ const modalOutletName = 'modal';
1279
+ if (!!route.path && route.outlet === modalOutletName) {
1280
+ const modalOutletPath = `(${modalOutletName}:${route.path})`;
1281
+ const modalRoutePath = [...parentPath, modalOutletPath].join('/');
1282
+ return [modalRoutePath];
1283
+ }
1284
+ const currentPath = [...parentPath];
1285
+ if (route.path) {
1286
+ currentPath.push(route.path);
1287
+ }
1288
+ return [].concat(...this.getModalRoutePaths(route.children, currentPath));
1289
+ }
1290
+ getModalRoutePaths(routes, parentPath) {
1291
+ return Array.isArray(routes)
1292
+ ? [].concat(...routes.map((route) => this.getModalRoutePath(route, parentPath)))
1293
+ : [];
1294
+ }
1295
+ isNewModalWindow(navigationEnd) {
1296
+ const currentNavigation = this.router.getCurrentNavigation();
1297
+ if (!currentNavigation || !currentNavigation.previousNavigation) {
1298
+ return true;
1299
+ }
1300
+ const previousRoutePath = (currentNavigation.previousNavigation.finalUrl ||
1301
+ currentNavigation.previousNavigation.extractedUrl).toString();
1302
+ const wasModalRoute = this.isModalRoute(previousRoutePath);
1303
+ const isModalRoute = this.isModalRoute(navigationEnd.urlAfterRedirects);
1304
+ if (!wasModalRoute && isModalRoute) {
1305
+ return true;
1306
+ }
1307
+ const currentModalRouteParent = navigationEnd.urlAfterRedirects.split('/(modal:')[0];
1308
+ const previousModalRouteParent = previousRoutePath.split('/(modal:')[0];
1309
+ return previousModalRouteParent !== currentModalRouteParent;
1310
+ }
1311
+ async waitForCurrentThenGetNavigationEndStream() {
1312
+ if (this.router.getCurrentNavigation()) {
1313
+ const currentNavigationEnd = await firstValueFrom(this.navigationEndListener$);
1314
+ return this.navigationEndListener$.pipe(startWith(currentNavigationEnd));
1315
+ }
1316
+ return this.navigationEndListener$;
1317
+ }
1318
+ modalRouteActivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams) {
1319
+ return navigationEnd$.pipe(filter((navigationEnd) => this.modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams)), map((navigationEnd) => {
1320
+ return {
1321
+ route: this.getCurrentActivatedRoute(),
1322
+ isNewModal: this.isNewModalWindow(navigationEnd),
1323
+ };
1324
+ }));
1325
+ }
1326
+ modalRouteDeactivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams) {
1327
+ return navigationEnd$.pipe(pairwise(),
1328
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1329
+ filter(([prevNavigation, _]) => this.modalRouteSetContainsPath(modalRouteSet, prevNavigation, modalRoutesContainsUrlParams)), // Only emit if previous route was modal
1330
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1331
+ map(([_, currentNavigation]) => {
1332
+ const isNewModalRoute = this.isModalRoute(currentNavigation.urlAfterRedirects);
1333
+ // Deactivate modal route if new route is NOT modal OR is outside current parent route:
1334
+ return !isNewModalRoute || this.isNewModalWindow(currentNavigation);
1335
+ }), filter((isDeactivation) => isDeactivation));
1336
+ }
1337
+ modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams) {
1338
+ const pathname = navigationEnd.urlAfterRedirects.split('?')[0];
1339
+ let hasRoute = modalRouteSet.has(pathname);
1340
+ if (!hasRoute && modalRoutesContainsUrlParams) {
1341
+ // Use `for ... of` instead of `forEach` so we can break out of the loop if route is found:
1342
+ for (const route of modalRouteSet) {
1343
+ const exactMatch = true;
1344
+ const routeMatchesPath = this.pathContainsChildRouteWithUrlParams(pathname, route, exactMatch);
1345
+ if (routeMatchesPath) {
1346
+ hasRoute = true;
1347
+ break;
1471
1348
  }
1472
1349
  }
1473
- else {
1474
- baseAnimation.addAnimation(backdropAnimation);
1475
- if (currentBackdropAnimation) {
1476
- baseAnimation.addAnimation(currentBackdropAnimation);
1477
- }
1350
+ }
1351
+ return hasRoute;
1352
+ }
1353
+ async getModalNavigation(routeConfig, moduleRootRoutePath) {
1354
+ if (Array.isArray(routeConfig)) {
1355
+ const navigationEnd$ = await this.waitForCurrentThenGetNavigationEndStream();
1356
+ const modalRoutes = await this.getModalRoutes(routeConfig, moduleRootRoutePath);
1357
+ const hasModalRoutes = modalRoutes.length > 0;
1358
+ if (hasModalRoutes) {
1359
+ const modalRoutesContainsUrlParams = modalRoutes.some((route) => route.includes('/:'));
1360
+ const modalRouteSet = new Set(modalRoutes);
1361
+ const activated$ = this.modalRouteActivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams);
1362
+ const deactivated$ = this.modalRouteDeactivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams);
1363
+ return { activated$, deactivated$ };
1478
1364
  }
1479
- return baseAnimation;
1480
- };
1365
+ }
1366
+ return { activated$: EMPTY, deactivated$: EMPTY };
1367
+ }
1368
+ async navigateToModal(path, queryParams) {
1369
+ const commands = Array.isArray(path) ? [...path] : path.split('/');
1370
+ const childPath = commands.pop();
1371
+ const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {
1372
+ queryParams,
1373
+ relativeTo: this.getCurrentActivatedRoute(),
1374
+ });
1375
+ return result;
1376
+ }
1377
+ async navigateWithinModal(relativePath, queryParams) {
1378
+ return this.router.navigate([relativePath], {
1379
+ queryParams,
1380
+ relativeTo: this.getCurrentActivatedRoute(),
1381
+ });
1382
+ }
1383
+ async navigateOutOfModalOutlet() {
1384
+ const currentActivatedRoute = this.getCurrentActivatedRoute();
1385
+ const currentNavigationFinalUrl = this.router.getCurrentNavigation()?.finalUrl?.toString();
1386
+ const isCurrentlyNavigatingOutOfModalOutlet = currentNavigationFinalUrl && !this.isModalRoute(currentNavigationFinalUrl);
1387
+ if (currentActivatedRoute.outlet !== 'modal' || isCurrentlyNavigatingOutOfModalOutlet) {
1388
+ // Nothing to do here, bail out:
1389
+ return Promise.resolve(true);
1390
+ }
1391
+ const parentRoute = this.getBackdropRoute(currentActivatedRoute);
1392
+ return this.router.navigate(['./'], {
1393
+ relativeTo: parentRoute,
1394
+ });
1395
+ }
1396
+ getBackdropRoute(currentActivatedRoute) {
1397
+ let parentRoute = currentActivatedRoute.parent;
1398
+ while (parentRoute && !parentRoute.component && !!parentRoute.parent) {
1399
+ parentRoute = parentRoute.parent;
1400
+ }
1401
+ return parentRoute;
1402
+ }
1403
+ handleBrowserBackButton(modal) {
1404
+ const popstateNavigationStart$ = this.router.events.pipe(filter((event) => event instanceof NavigationStart && event.navigationTrigger === 'popstate'));
1405
+ const navigationEnd$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd));
1406
+ navigationEnd$
1407
+ .pipe(skipUntil(popstateNavigationStart$), takeUntil(modal.onWillDismiss()))
1408
+ .subscribe(() => {
1409
+ modal.dismiss();
1410
+ });
1481
1411
  }
1482
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalAnimationBuilderService, deps: [{ token: i3$1.PlatformService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1483
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalAnimationBuilderService, providedIn: 'root' }); }
1412
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalNavigationService, deps: [{ token: i1$3.Router }, { token: i1$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
1413
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalNavigationService, providedIn: 'root' }); }
1484
1414
  }
1485
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalAnimationBuilderService, decorators: [{
1415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalNavigationService, decorators: [{
1486
1416
  type: Injectable,
1487
1417
  args: [{ providedIn: 'root' }]
1488
- }], ctorParameters: () => [{ type: i3$1.PlatformService }] });
1418
+ }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }] });
1489
1419
 
1490
1420
  class ModalHelper {
1491
1421
  constructor(ionicModalController, modalAnimationBuilder, modalNavigationService, windowRef, canDismissHelper) {
@@ -1585,12 +1515,91 @@ class ModalHelper {
1585
1515
  this.isModalOpening = false;
1586
1516
  return overlay;
1587
1517
  }
1588
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalHelper, deps: [{ token: i1$2.ModalController }, { token: ModalAnimationBuilderService }, { token: ModalNavigationService }, { token: i1$3.WindowRef }, { token: CanDismissHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
1589
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalHelper }); }
1518
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalHelper, deps: [{ token: i1$2.ModalController }, { token: ModalAnimationBuilderService }, { token: ModalNavigationService }, { token: i1.WindowRef }, { token: CanDismissHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
1519
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalHelper }); }
1520
+ }
1521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalHelper, decorators: [{
1522
+ type: Injectable
1523
+ }], ctorParameters: () => [{ type: i1$2.ModalController }, { type: ModalAnimationBuilderService }, { type: ModalNavigationService }, { type: i1.WindowRef }, { type: CanDismissHelper }] });
1524
+
1525
+ class ActionSheetComponent {
1526
+ constructor() {
1527
+ this.cancelButtonText = 'Cancel';
1528
+ this.hideCancel = false;
1529
+ this.disabled = false;
1530
+ this.cancel = new EventEmitter();
1531
+ this.itemSelect = new EventEmitter();
1532
+ }
1533
+ onItemSelect(selection) {
1534
+ this.itemSelect.emit(selection);
1535
+ }
1536
+ onCancel() {
1537
+ this.cancel.emit();
1538
+ }
1539
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ActionSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1540
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: ActionSheetComponent, isStandalone: true, selector: "kirby-action-sheet", inputs: { cancelButtonText: "cancelButtonText", hideCancel: "hideCancel", disabled: "disabled", header: "header", subheader: "subheader", items: "items" }, outputs: { cancel: "cancel", itemSelect: "itemSelect" }, ngImport: i0, template: "<kirby-card>\n @if (header) {\n <kirby-card-header\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n }\n @for (item of items; track item.id) {\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n >\n {{ item.text }}\n </button>\n }\n</kirby-card>\n@if (!hideCancel) {\n <button kirby-button class=\"cancel-btn\" size=\"lg\" attentionLevel=\"3\" (click)=\"onCancel()\">\n {{ cancelButtonText }}\n </button>\n}\n", styles: [":host{--kirby-internal-margin-horizontal-default: 32px}@media (max-width: 320px){:host{--kirby-internal-margin-horizontal-default: 16px}}:host{--kirby-internal-margin-horizontal-total: calc( 2 * var(--kirby-action-sheet-margin-horizontal, var(--kirby-internal-margin-horizontal-default)) );display:flex;flex-direction:column;align-items:center;justify-content:flex-end;margin:0 auto;width:calc(100vw - var(--kirby-internal-margin-horizontal-total));max-width:calc(375px - var(--kirby-internal-margin-horizontal-total))}@media (hover: hover) and (pointer: fine){:host button[kirby-button].no-decoration:focus-visible{box-shadow:none;--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black)}}kirby-card{align-self:stretch;pointer-events:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}kirby-card button[kirby-button]{margin:0;border-radius:0}kirby-card button[kirby-button]:not(:focus){border-top:1px solid var(--kirby-background-color)}@media (hover: hover) and (pointer: fine){.cancel-btn:focus{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}.cancel-btn:focus:not(:focus-visible){box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 0 transparent}.cancel-btn:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}.cancel-btn{font-weight:700;margin-top:16px;margin-bottom:24px;pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: CardModule }, { kind: "component", type: i1$4.CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "variant"] }, { kind: "component", type: i1$4.CardHeaderComponent, selector: "kirby-card-header", inputs: ["title", "subtitle", "isTitleBold", "flagged", "hasPadding"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }] }); }
1541
+ }
1542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ActionSheetComponent, decorators: [{
1543
+ type: Component,
1544
+ args: [{ imports: [CardModule, ButtonComponent], selector: 'kirby-action-sheet', template: "<kirby-card>\n @if (header) {\n <kirby-card-header\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n }\n @for (item of items; track item.id) {\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n >\n {{ item.text }}\n </button>\n }\n</kirby-card>\n@if (!hideCancel) {\n <button kirby-button class=\"cancel-btn\" size=\"lg\" attentionLevel=\"3\" (click)=\"onCancel()\">\n {{ cancelButtonText }}\n </button>\n}\n", styles: [":host{--kirby-internal-margin-horizontal-default: 32px}@media (max-width: 320px){:host{--kirby-internal-margin-horizontal-default: 16px}}:host{--kirby-internal-margin-horizontal-total: calc( 2 * var(--kirby-action-sheet-margin-horizontal, var(--kirby-internal-margin-horizontal-default)) );display:flex;flex-direction:column;align-items:center;justify-content:flex-end;margin:0 auto;width:calc(100vw - var(--kirby-internal-margin-horizontal-total));max-width:calc(375px - var(--kirby-internal-margin-horizontal-total))}@media (hover: hover) and (pointer: fine){:host button[kirby-button].no-decoration:focus-visible{box-shadow:none;--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black)}}kirby-card{align-self:stretch;pointer-events:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}kirby-card button[kirby-button]{margin:0;border-radius:0}kirby-card button[kirby-button]:not(:focus){border-top:1px solid var(--kirby-background-color)}@media (hover: hover) and (pointer: fine){.cancel-btn:focus{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}.cancel-btn:focus:not(:focus-visible){box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 0 transparent}.cancel-btn:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}.cancel-btn{font-weight:700;margin-top:16px;margin-bottom:24px;pointer-events:auto}\n"] }]
1545
+ }], propDecorators: { cancelButtonText: [{
1546
+ type: Input
1547
+ }], hideCancel: [{
1548
+ type: Input
1549
+ }], disabled: [{
1550
+ type: Input
1551
+ }], header: [{
1552
+ type: Input
1553
+ }], subheader: [{
1554
+ type: Input
1555
+ }], items: [{
1556
+ type: Input
1557
+ }], cancel: [{
1558
+ type: Output
1559
+ }], itemSelect: [{
1560
+ type: Output
1561
+ }] } });
1562
+
1563
+ class ActionSheetHelper {
1564
+ constructor(ionicModalController) {
1565
+ this.ionicModalController = ionicModalController;
1566
+ }
1567
+ async showActionSheet(config) {
1568
+ const cancel = new EventEmitter();
1569
+ const itemSelect = new EventEmitter();
1570
+ const ionModal = await this.ionicModalController.create({
1571
+ component: ActionSheetComponent,
1572
+ cssClass: ['kirby-overlay', 'kirby-action-sheet'],
1573
+ componentProps: {
1574
+ ...config,
1575
+ cancel: cancel,
1576
+ itemSelect: itemSelect,
1577
+ },
1578
+ backdropDismiss: true,
1579
+ });
1580
+ // Remove 'modal-shadow' element as we are no longer able to hide it with CSS in Ionic 6.
1581
+ // We need to remove it so it does not obstruct the backdrop-click to dismiss functionality.
1582
+ ionModal.shadowRoot.querySelector('.modal-shadow').remove();
1583
+ const cancelSubscription = cancel.subscribe(() => ionModal.dismiss());
1584
+ const itemSelectSubscription = itemSelect.subscribe((item) => ionModal.dismiss(item));
1585
+ const onDidDismiss = ionModal.onDidDismiss();
1586
+ onDidDismiss.then(() => {
1587
+ cancelSubscription.unsubscribe();
1588
+ itemSelectSubscription.unsubscribe();
1589
+ });
1590
+ await ionModal.present();
1591
+ return {
1592
+ dismiss: ionModal.dismiss.bind(ionModal),
1593
+ onWillDismiss: ionModal.onWillDismiss(),
1594
+ onDidDismiss: ionModal.onDidDismiss(),
1595
+ };
1596
+ }
1597
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ActionSheetHelper, deps: [{ token: i1$2.ModalController }], target: i0.ɵɵFactoryTarget.Injectable }); }
1598
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ActionSheetHelper }); }
1590
1599
  }
1591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalHelper, decorators: [{
1600
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ActionSheetHelper, decorators: [{
1592
1601
  type: Injectable
1593
- }], ctorParameters: () => [{ type: i1$2.ModalController }, { type: ModalAnimationBuilderService }, { type: ModalNavigationService }, { type: i1$3.WindowRef }, { type: CanDismissHelper }] });
1602
+ }], ctorParameters: () => [{ type: i1$2.ModalController }] });
1594
1603
 
1595
1604
  class ModalController {
1596
1605
  constructor(modalHelper, actionSheetHelper, alertHelper, modalNavigationService, routeConfig) {
@@ -1688,10 +1697,10 @@ class ModalController {
1688
1697
  this.destroy$.next();
1689
1698
  this.destroy$.complete();
1690
1699
  }
1691
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalController, deps: [{ token: ModalHelper }, { token: ActionSheetHelper }, { token: AlertHelper }, { token: ModalNavigationService }, { token: ROUTES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1692
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalController }); }
1700
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalController, deps: [{ token: ModalHelper }, { token: ActionSheetHelper }, { token: AlertHelper }, { token: ModalNavigationService }, { token: ROUTES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1701
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalController }); }
1693
1702
  }
1694
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalController, decorators: [{
1703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalController, decorators: [{
1695
1704
  type: Injectable
1696
1705
  }], ctorParameters: () => [{ type: ModalHelper }, { type: ActionSheetHelper }, { type: AlertHelper }, { type: ModalNavigationService }, { type: undefined, decorators: [{
1697
1706
  type: Optional
@@ -1812,10 +1821,10 @@ class ModalComponent {
1812
1821
  'aria-label': inheritAriaLabelText(this.elementRef.nativeElement),
1813
1822
  };
1814
1823
  }
1815
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalComponent, deps: [{ token: CanDismissHelper }, { token: ModalNavigationService }, { token: i1$3.WindowRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1816
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ModalComponent, isStandalone: true, selector: "kirby-modal", inputs: { isOpen: "isOpen", trigger: "trigger", size: "size", scrollDisabled: "scrollDisabled", canDismiss: "canDismiss", collapseTitle: "collapseTitle", customHeight: "customHeight", flavor: "flavor", drawerSupplementaryAction: "drawerSupplementaryAction", interactWithBackground: "interactWithBackground" }, outputs: { willPresent: "willPresent", didPresent: "didPresent", didDismiss: "didDismiss", willDismiss: "willDismiss" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, static: true }], viewQueries: [{ propertyName: "modalElement", first: true, predicate: IonModal, descendants: true, read: ElementRef, static: true }, { propertyName: "ionContent", first: true, predicate: IonContent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-modal\n class=\"kirby-modal kirby-overlay kirby-modal-{{ size }}\"\n [ngClass]=\"[\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\n interactWithBackground ? 'interact-with-background' : ''\n ]\"\n [isOpen]=\"isOpen\"\n [trigger]=\"trigger\"\n [canDismiss]=\"_canDismiss\"\n [showBackdrop]=\"!interactWithBackground\"\n [style.--kirby-modal-height]=\"customHeight\"\n (willPresent)=\"_onWillPresent($event)\"\n (didPresent)=\"_onDidPresent($event)\"\n (willDismiss)=\"_onWillDismiss($event)\"\n (didDismiss)=\"_onDidDismiss($event)\"\n>\n <ng-template>\n <kirby-modal-compact-wrapper\n *ngIf=\"flavor === 'compact'; else modalWrapper\"\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n </ng-template>\n</ion-modal>\n\n<ng-template #modalWrapper>\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalWrapperComponent, selector: "kirby-modal-wrapper", inputs: ["scrollDisabled", "config", "content"] }, { kind: "component", type: ModalCompactWrapperComponent, selector: "kirby-modal-compact-wrapper", inputs: ["config", "content"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1824
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalComponent, deps: [{ token: CanDismissHelper }, { token: ModalNavigationService }, { token: i1.WindowRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1825
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: ModalComponent, isStandalone: true, selector: "kirby-modal", inputs: { isOpen: "isOpen", trigger: "trigger", size: "size", scrollDisabled: "scrollDisabled", canDismiss: "canDismiss", collapseTitle: "collapseTitle", customHeight: "customHeight", flavor: "flavor", drawerSupplementaryAction: "drawerSupplementaryAction", interactWithBackground: "interactWithBackground" }, outputs: { willPresent: "willPresent", didPresent: "didPresent", didDismiss: "didDismiss", willDismiss: "willDismiss" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true, static: true }], viewQueries: [{ propertyName: "modalElement", first: true, predicate: IonModal, descendants: true, read: ElementRef, static: true }, { propertyName: "ionContent", first: true, predicate: IonContent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-modal\n class=\"kirby-modal kirby-overlay kirby-modal-{{ size }}\"\n [ngClass]=\"[\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\n interactWithBackground ? 'interact-with-background' : '',\n ]\"\n [isOpen]=\"isOpen\"\n [trigger]=\"trigger\"\n [canDismiss]=\"_canDismiss\"\n [showBackdrop]=\"!interactWithBackground\"\n [style.--kirby-modal-height]=\"customHeight\"\n (willPresent)=\"_onWillPresent($event)\"\n (didPresent)=\"_onDidPresent($event)\"\n (willDismiss)=\"_onWillDismiss($event)\"\n (didDismiss)=\"_onDidDismiss($event)\"\n>\n <ng-template>\n @if (flavor === 'compact') {\n <kirby-modal-compact-wrapper\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n } @else {\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n }\n </ng-template>\n</ion-modal>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalWrapperComponent, selector: "kirby-modal-wrapper", inputs: ["scrollDisabled", "config", "content"] }, { kind: "component", type: ModalCompactWrapperComponent, selector: "kirby-modal-compact-wrapper", inputs: ["config", "content"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1817
1826
  }
1818
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalComponent, decorators: [{
1827
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalComponent, decorators: [{
1819
1828
  type: Component,
1820
1829
  args: [{ selector: 'kirby-modal', imports: [
1821
1830
  CommonModule,
@@ -1823,8 +1832,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
1823
1832
  IonModal,
1824
1833
  ModalWrapperComponent,
1825
1834
  ModalCompactWrapperComponent,
1826
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-modal\n class=\"kirby-modal kirby-overlay kirby-modal-{{ size }}\"\n [ngClass]=\"[\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\n interactWithBackground ? 'interact-with-background' : ''\n ]\"\n [isOpen]=\"isOpen\"\n [trigger]=\"trigger\"\n [canDismiss]=\"_canDismiss\"\n [showBackdrop]=\"!interactWithBackground\"\n [style.--kirby-modal-height]=\"customHeight\"\n (willPresent)=\"_onWillPresent($event)\"\n (didPresent)=\"_onDidPresent($event)\"\n (willDismiss)=\"_onWillDismiss($event)\"\n (didDismiss)=\"_onDidDismiss($event)\"\n>\n <ng-template>\n <kirby-modal-compact-wrapper\n *ngIf=\"flavor === 'compact'; else modalWrapper\"\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n </ng-template>\n</ion-modal>\n\n<ng-template #modalWrapper>\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n</ng-template>\n" }]
1827
- }], ctorParameters: () => [{ type: CanDismissHelper }, { type: ModalNavigationService }, { type: i1$3.WindowRef }, { type: i0.ElementRef }], propDecorators: { modalElement: [{
1835
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-modal\n class=\"kirby-modal kirby-overlay kirby-modal-{{ size }}\"\n [ngClass]=\"[\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\n interactWithBackground ? 'interact-with-background' : '',\n ]\"\n [isOpen]=\"isOpen\"\n [trigger]=\"trigger\"\n [canDismiss]=\"_canDismiss\"\n [showBackdrop]=\"!interactWithBackground\"\n [style.--kirby-modal-height]=\"customHeight\"\n (willPresent)=\"_onWillPresent($event)\"\n (didPresent)=\"_onDidPresent($event)\"\n (willDismiss)=\"_onWillDismiss($event)\"\n (didDismiss)=\"_onDidDismiss($event)\"\n>\n <ng-template>\n @if (flavor === 'compact') {\n <kirby-modal-compact-wrapper\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n } @else {\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n }\n </ng-template>\n</ion-modal>\n" }]
1836
+ }], ctorParameters: () => [{ type: CanDismissHelper }, { type: ModalNavigationService }, { type: i1.WindowRef }, { type: i0.ElementRef }], propDecorators: { modalElement: [{
1828
1837
  type: ViewChild,
1829
1838
  args: [IonModal, { static: true, read: ElementRef }]
1830
1839
  }], ionContent: [{
@@ -1873,12 +1882,12 @@ class ModalFooterComponent extends ModalElementComponent {
1873
1882
  this.type = 'fixed';
1874
1883
  this.themeColor = 'white';
1875
1884
  }
1876
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalFooterComponent, deps: [{ token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1877
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: ModalFooterComponent, isStandalone: true, selector: "kirby-modal-footer", inputs: { snapToKeyboard: "snapToKeyboard", type: "type", themeColor: "themeColor" }, host: { properties: { "class.snap-to-keyboard": "this.snapToKeyboard", "class": "this._cssClass" } }, usesInheritance: true, ngImport: i0, template: "<ion-footer role=\"presentation\">\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}ion-footer{--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color);box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;box-sizing:inherit;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:16px;padding-bottom:calc(12px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (min-width: 768px){ion-footer{padding:24px}}@media (max-width: 767px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host{box-sizing:border-box;display:block}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background-color:var(--kirby-background-color)}:host(.inline) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1885
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalFooterComponent, deps: [{ token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1886
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.0", type: ModalFooterComponent, isStandalone: true, selector: "kirby-modal-footer", inputs: { snapToKeyboard: "snapToKeyboard", type: "type", themeColor: "themeColor" }, host: { properties: { "class.snap-to-keyboard": "this.snapToKeyboard", "class": "this._cssClass" } }, usesInheritance: true, ngImport: i0, template: "<ion-footer role=\"presentation\">\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}ion-footer{--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color);box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;box-sizing:inherit;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:16px;padding-bottom:calc(12px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (min-width: 768px){ion-footer{padding:24px}}@media (max-width: 767px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host{box-sizing:border-box;display:block}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background-color:var(--kirby-background-color)}:host(.inline) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"], dependencies: [{ kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1878
1887
  }
1879
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ModalFooterComponent, decorators: [{
1888
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: ModalFooterComponent, decorators: [{
1880
1889
  type: Component,
1881
- args: [{ imports: [CommonModule, IonFooter], selector: 'kirby-modal-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-footer role=\"presentation\">\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}ion-footer{--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color);box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;box-sizing:inherit;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:16px;padding-bottom:calc(12px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (min-width: 768px){ion-footer{padding:24px}}@media (max-width: 767px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host{box-sizing:border-box;display:block}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background-color:var(--kirby-background-color)}:host(.inline) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"] }]
1890
+ args: [{ imports: [IonFooter], selector: 'kirby-modal-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-footer role=\"presentation\">\n <ng-content></ng-content>\n</ion-footer>\n", styles: ["ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}ion-footer{--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color);box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;box-sizing:inherit;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:16px;padding-bottom:calc(12px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (min-width: 768px){ion-footer{padding:24px}}@media (max-width: 767px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host{box-sizing:border-box;display:block}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background-color:var(--kirby-background-color)}:host(.inline) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\n"] }]
1882
1891
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{
1883
1892
  type: Optional
1884
1893
  }] }], propDecorators: { snapToKeyboard: [{