@kirbydesign/designsystem 11.4.2 → 11.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/fesm2022/kirbydesign-designsystem-accordion.mjs +11 -11
  2. package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
  3. package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
  4. package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
  5. package/fesm2022/kirbydesign-designsystem-avatar.mjs +3 -3
  6. package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
  7. package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
  8. package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
  9. package/fesm2022/kirbydesign-designsystem-button.mjs +4 -4
  10. package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
  11. package/fesm2022/kirbydesign-designsystem-calendar.mjs +3 -3
  12. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  13. package/fesm2022/kirbydesign-designsystem-card.mjs +17 -17
  14. package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
  15. package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
  16. package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
  17. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +5 -5
  18. package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
  19. package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
  20. package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
  21. package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
  22. package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
  23. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +12 -12
  24. package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  25. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
  26. package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
  27. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +4 -4
  28. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
  29. package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
  30. package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
  31. package/fesm2022/kirbydesign-designsystem-form-field.mjs +132 -113
  32. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  33. package/fesm2022/kirbydesign-designsystem-header.mjs +20 -20
  34. package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
  35. package/fesm2022/kirbydesign-designsystem-helpers.mjs +73 -10
  36. package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
  37. package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
  38. package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
  39. package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
  40. package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
  41. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
  42. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
  43. package/fesm2022/kirbydesign-designsystem-item.mjs +11 -11
  44. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  45. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
  46. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
  47. package/fesm2022/kirbydesign-designsystem-list.mjs +40 -40
  48. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  49. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
  50. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
  51. package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
  52. package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
  53. package/fesm2022/kirbydesign-designsystem-modal.mjs +51 -51
  54. package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
  55. package/fesm2022/kirbydesign-designsystem-page.mjs +41 -41
  56. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  57. package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
  58. package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
  59. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
  60. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
  61. package/fesm2022/kirbydesign-designsystem-radio.mjs +11 -11
  62. package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
  63. package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
  64. package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
  65. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
  66. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
  67. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
  68. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
  69. package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
  70. package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
  71. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +4 -4
  72. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  73. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
  74. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
  75. package/fesm2022/kirbydesign-designsystem-shared.mjs +18 -18
  76. package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
  77. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +4 -4
  78. package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
  79. package/fesm2022/kirbydesign-designsystem-slide.mjs +14 -14
  80. package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
  81. package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
  82. package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
  83. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +11 -11
  84. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
  85. package/fesm2022/kirbydesign-designsystem-tabs.mjs +15 -15
  86. package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
  87. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +294 -287
  88. package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
  89. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
  90. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
  91. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
  92. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
  93. package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
  94. package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
  95. package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
  96. package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
  97. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
  98. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
  99. package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -5
  100. package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
  101. package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
  102. package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
  103. package/fesm2022/kirbydesign-designsystem.mjs +15 -15
  104. package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
  105. package/package.json +63 -63
  106. package/{accordion/index.d.ts → types/kirbydesign-designsystem-accordion.d.ts} +1 -1
  107. package/types/kirbydesign-designsystem-accordion.d.ts.map +1 -0
  108. package/{action-group/index.d.ts → types/kirbydesign-designsystem-action-group.d.ts} +1 -1
  109. package/types/kirbydesign-designsystem-action-group.d.ts.map +1 -0
  110. package/{avatar/index.d.ts → types/kirbydesign-designsystem-avatar.d.ts} +2 -2
  111. package/types/kirbydesign-designsystem-avatar.d.ts.map +1 -0
  112. package/{badge/index.d.ts → types/kirbydesign-designsystem-badge.d.ts} +1 -1
  113. package/types/kirbydesign-designsystem-badge.d.ts.map +1 -0
  114. package/{button/index.d.ts → types/kirbydesign-designsystem-button.d.ts} +2 -2
  115. package/types/kirbydesign-designsystem-button.d.ts.map +1 -0
  116. package/{calendar/index.d.ts → types/kirbydesign-designsystem-calendar.d.ts} +1 -1
  117. package/types/kirbydesign-designsystem-calendar.d.ts.map +1 -0
  118. package/{card/index.d.ts → types/kirbydesign-designsystem-card.d.ts} +2 -2
  119. package/types/kirbydesign-designsystem-card.d.ts.map +1 -0
  120. package/{chart/index.d.ts → types/kirbydesign-designsystem-chart.d.ts} +1 -1
  121. package/types/kirbydesign-designsystem-chart.d.ts.map +1 -0
  122. package/{checkbox/index.d.ts → types/kirbydesign-designsystem-checkbox.d.ts} +1 -1
  123. package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -0
  124. package/{config/index.d.ts → types/kirbydesign-designsystem-config.d.ts} +1 -1
  125. package/types/kirbydesign-designsystem-config.d.ts.map +1 -0
  126. package/{data-table/index.d.ts → types/kirbydesign-designsystem-data-table.d.ts} +1 -1
  127. package/types/kirbydesign-designsystem-data-table.d.ts.map +1 -0
  128. package/{divider/index.d.ts → types/kirbydesign-designsystem-divider.d.ts} +1 -1
  129. package/types/kirbydesign-designsystem-divider.d.ts.map +1 -0
  130. package/{dropdown/index.d.ts → types/kirbydesign-designsystem-dropdown.d.ts} +1 -1
  131. package/types/kirbydesign-designsystem-dropdown.d.ts.map +1 -0
  132. package/{empty-state/index.d.ts → types/kirbydesign-designsystem-empty-state.d.ts} +1 -1
  133. package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -0
  134. package/{fab-sheet/index.d.ts → types/kirbydesign-designsystem-fab-sheet.d.ts} +1 -1
  135. package/types/kirbydesign-designsystem-fab-sheet.d.ts.map +1 -0
  136. package/{flag/index.d.ts → types/kirbydesign-designsystem-flag.d.ts} +1 -1
  137. package/types/kirbydesign-designsystem-flag.d.ts.map +1 -0
  138. package/{form-field/index.d.ts → types/kirbydesign-designsystem-form-field.d.ts} +21 -24
  139. package/types/kirbydesign-designsystem-form-field.d.ts.map +1 -0
  140. package/{header/index.d.ts → types/kirbydesign-designsystem-header.d.ts} +1 -1
  141. package/types/kirbydesign-designsystem-header.d.ts.map +1 -0
  142. package/{helpers/scss/index.d.ts → types/kirbydesign-designsystem-helpers-scss.d.ts} +1 -1
  143. package/types/kirbydesign-designsystem-helpers-scss.d.ts.map +1 -0
  144. package/{helpers/index.d.ts → types/kirbydesign-designsystem-helpers.d.ts} +81 -13
  145. package/types/kirbydesign-designsystem-helpers.d.ts.map +1 -0
  146. package/{icon/index.d.ts → types/kirbydesign-designsystem-icon.d.ts} +1 -1
  147. package/types/kirbydesign-designsystem-icon.d.ts.map +1 -0
  148. package/{item-group/index.d.ts → types/kirbydesign-designsystem-item-group.d.ts} +1 -1
  149. package/types/kirbydesign-designsystem-item-group.d.ts.map +1 -0
  150. package/{item-sliding/index.d.ts → types/kirbydesign-designsystem-item-sliding.d.ts} +1 -1
  151. package/types/kirbydesign-designsystem-item-sliding.d.ts.map +1 -0
  152. package/{item/index.d.ts → types/kirbydesign-designsystem-item.d.ts} +1 -1
  153. package/types/kirbydesign-designsystem-item.d.ts.map +1 -0
  154. package/{kirby-app/index.d.ts → types/kirbydesign-designsystem-kirby-app.d.ts} +1 -1
  155. package/types/kirbydesign-designsystem-kirby-app.d.ts.map +1 -0
  156. package/{list/index.d.ts → types/kirbydesign-designsystem-list.d.ts} +1 -1
  157. package/types/kirbydesign-designsystem-list.d.ts.map +1 -0
  158. package/{loading-overlay/index.d.ts → types/kirbydesign-designsystem-loading-overlay.d.ts} +1 -1
  159. package/types/kirbydesign-designsystem-loading-overlay.d.ts.map +1 -0
  160. package/{menu/index.d.ts → types/kirbydesign-designsystem-menu.d.ts} +1 -1
  161. package/types/kirbydesign-designsystem-menu.d.ts.map +1 -0
  162. package/{modal/index.d.ts → types/kirbydesign-designsystem-modal.d.ts} +2 -2
  163. package/types/kirbydesign-designsystem-modal.d.ts.map +1 -0
  164. package/{page/index.d.ts → types/kirbydesign-designsystem-page.d.ts} +1 -1
  165. package/types/kirbydesign-designsystem-page.d.ts.map +1 -0
  166. package/{popover/index.d.ts → types/kirbydesign-designsystem-popover.d.ts} +1 -1
  167. package/types/kirbydesign-designsystem-popover.d.ts.map +1 -0
  168. package/{progress-circle/index.d.ts → types/kirbydesign-designsystem-progress-circle.d.ts} +1 -1
  169. package/types/kirbydesign-designsystem-progress-circle.d.ts.map +1 -0
  170. package/{radio/index.d.ts → types/kirbydesign-designsystem-radio.d.ts} +1 -1
  171. package/types/kirbydesign-designsystem-radio.d.ts.map +1 -0
  172. package/{range/index.d.ts → types/kirbydesign-designsystem-range.d.ts} +1 -1
  173. package/types/kirbydesign-designsystem-range.d.ts.map +1 -0
  174. package/{reorder-list/index.d.ts → types/kirbydesign-designsystem-reorder-list.d.ts} +1 -1
  175. package/types/kirbydesign-designsystem-reorder-list.d.ts.map +1 -0
  176. package/{router-outlet/index.d.ts → types/kirbydesign-designsystem-router-outlet.d.ts} +1 -1
  177. package/types/kirbydesign-designsystem-router-outlet.d.ts.map +1 -0
  178. package/{section-header/index.d.ts → types/kirbydesign-designsystem-section-header.d.ts} +1 -1
  179. package/types/kirbydesign-designsystem-section-header.d.ts.map +1 -0
  180. package/{shared/floating/index.d.ts → types/kirbydesign-designsystem-shared-floating.d.ts} +1 -1
  181. package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -0
  182. package/{shared/portal/index.d.ts → types/kirbydesign-designsystem-shared-portal.d.ts} +1 -1
  183. package/types/kirbydesign-designsystem-shared-portal.d.ts.map +1 -0
  184. package/{shared/index.d.ts → types/kirbydesign-designsystem-shared.d.ts} +1 -1
  185. package/types/kirbydesign-designsystem-shared.d.ts.map +1 -0
  186. package/{slide-button/index.d.ts → types/kirbydesign-designsystem-slide-button.d.ts} +1 -1
  187. package/types/kirbydesign-designsystem-slide-button.d.ts.map +1 -0
  188. package/{slide/index.d.ts → types/kirbydesign-designsystem-slide.d.ts} +1 -1
  189. package/types/kirbydesign-designsystem-slide.d.ts.map +1 -0
  190. package/{spinner/index.d.ts → types/kirbydesign-designsystem-spinner.d.ts} +1 -1
  191. package/types/kirbydesign-designsystem-spinner.d.ts.map +1 -0
  192. package/{tab-navigation/index.d.ts → types/kirbydesign-designsystem-tab-navigation.d.ts} +1 -1
  193. package/types/kirbydesign-designsystem-tab-navigation.d.ts.map +1 -0
  194. package/{tabs/index.d.ts → types/kirbydesign-designsystem-tabs.d.ts} +1 -1
  195. package/types/kirbydesign-designsystem-tabs.d.ts.map +1 -0
  196. package/{testing-base/index.d.ts → types/kirbydesign-designsystem-testing-base.d.ts} +5 -3
  197. package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -0
  198. package/{testing-jasmine/index.d.ts → types/kirbydesign-designsystem-testing-jasmine.d.ts} +1 -1
  199. package/types/kirbydesign-designsystem-testing-jasmine.d.ts.map +1 -0
  200. package/{testing-jest/index.d.ts → types/kirbydesign-designsystem-testing-jest.d.ts} +1 -1
  201. package/types/kirbydesign-designsystem-testing-jest.d.ts.map +1 -0
  202. package/{testing/index.d.ts → types/kirbydesign-designsystem-testing.d.ts} +1 -1
  203. package/types/kirbydesign-designsystem-testing.d.ts.map +1 -0
  204. package/{toast/index.d.ts → types/kirbydesign-designsystem-toast.d.ts} +1 -1
  205. package/types/kirbydesign-designsystem-toast.d.ts.map +1 -0
  206. package/{toggle-button/index.d.ts → types/kirbydesign-designsystem-toggle-button.d.ts} +1 -1
  207. package/types/kirbydesign-designsystem-toggle-button.d.ts.map +1 -0
  208. package/{toggle/index.d.ts → types/kirbydesign-designsystem-toggle.d.ts} +1 -1
  209. package/types/kirbydesign-designsystem-toggle.d.ts.map +1 -0
  210. package/types/{index.d.ts → kirbydesign-designsystem-types.d.ts} +1 -1
  211. package/types/kirbydesign-designsystem-types.d.ts.map +1 -0
  212. package/{index.d.ts → types/kirbydesign-designsystem.d.ts} +1 -1
  213. package/types/kirbydesign-designsystem.d.ts.map +1 -0
  214. package/accordion/index.d.ts.map +0 -1
  215. package/action-group/index.d.ts.map +0 -1
  216. package/avatar/index.d.ts.map +0 -1
  217. package/badge/index.d.ts.map +0 -1
  218. package/button/index.d.ts.map +0 -1
  219. package/calendar/index.d.ts.map +0 -1
  220. package/card/index.d.ts.map +0 -1
  221. package/chart/index.d.ts.map +0 -1
  222. package/checkbox/index.d.ts.map +0 -1
  223. package/config/index.d.ts.map +0 -1
  224. package/data-table/index.d.ts.map +0 -1
  225. package/divider/index.d.ts.map +0 -1
  226. package/dropdown/index.d.ts.map +0 -1
  227. package/empty-state/index.d.ts.map +0 -1
  228. package/fab-sheet/index.d.ts.map +0 -1
  229. package/flag/index.d.ts.map +0 -1
  230. package/form-field/index.d.ts.map +0 -1
  231. package/header/index.d.ts.map +0 -1
  232. package/helpers/index.d.ts.map +0 -1
  233. package/helpers/scss/index.d.ts.map +0 -1
  234. package/icon/index.d.ts.map +0 -1
  235. package/index.d.ts.map +0 -1
  236. package/item/index.d.ts.map +0 -1
  237. package/item-group/index.d.ts.map +0 -1
  238. package/item-sliding/index.d.ts.map +0 -1
  239. package/kirby-app/index.d.ts.map +0 -1
  240. package/list/index.d.ts.map +0 -1
  241. package/loading-overlay/index.d.ts.map +0 -1
  242. package/menu/index.d.ts.map +0 -1
  243. package/modal/index.d.ts.map +0 -1
  244. package/page/index.d.ts.map +0 -1
  245. package/popover/index.d.ts.map +0 -1
  246. package/progress-circle/index.d.ts.map +0 -1
  247. package/radio/index.d.ts.map +0 -1
  248. package/range/index.d.ts.map +0 -1
  249. package/reorder-list/index.d.ts.map +0 -1
  250. package/router-outlet/index.d.ts.map +0 -1
  251. package/section-header/index.d.ts.map +0 -1
  252. package/shared/floating/index.d.ts.map +0 -1
  253. package/shared/index.d.ts.map +0 -1
  254. package/shared/portal/index.d.ts.map +0 -1
  255. package/slide/index.d.ts.map +0 -1
  256. package/slide-button/index.d.ts.map +0 -1
  257. package/spinner/index.d.ts.map +0 -1
  258. package/tab-navigation/index.d.ts.map +0 -1
  259. package/tabs/index.d.ts.map +0 -1
  260. package/testing/index.d.ts.map +0 -1
  261. package/testing-base/index.d.ts.map +0 -1
  262. package/testing-jasmine/index.d.ts.map +0 -1
  263. package/testing-jest/index.d.ts.map +0 -1
  264. package/toast/index.d.ts.map +0 -1
  265. package/toggle/index.d.ts.map +0 -1
  266. package/toggle-button/index.d.ts.map +0 -1
  267. package/types/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-checkbox.mjs","sources":["../../checkbox/src/checkbox.component.ts","../../checkbox/src/checkbox.component.html","../../checkbox/src/kirbydesign-designsystem-checkbox.ts"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { IonicElementPartHelper } from '@kirbydesign/designsystem/helpers';\nimport { IonCheckbox } from '@ionic/angular/standalone';\nimport { inheritAriaLabelText, setAccessibleLabel } from '@kirbydesign/designsystem/shared';\n\n@Component({\n imports: [IonCheckbox],\n selector: 'kirby-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n IonicElementPartHelper,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n },\n ],\n})\nexport class CheckboxComponent\n implements AfterViewInit, ControlValueAccessor, OnInit, AfterContentInit\n{\n @ViewChild(IonCheckbox, { read: ElementRef, static: true })\n private ionCheckboxElement?: ElementRef<HTMLIonCheckboxElement>;\n\n @Input() checked: boolean = false;\n @Input() indeterminate: boolean = false;\n @Input() attentionLevel: '1' | '2' = '2';\n\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size: 'xs' | 'sm' | 'md' = 'md';\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean = false;\n\n @Input() disabled = false;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.attention-level1') get isAttentionLevel1() {\n return this.attentionLevel === '1';\n }\n @HostBinding('class.attention-level2') get isAttentionLevel2() {\n return this.attentionLevel === '2';\n }\n\n @HostBinding('class.has-hidden-label') _labelText: string;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n _justify: 'start' | 'end' | 'space-between' = 'start';\n _labelPlacement: 'end' | 'fixed' | 'stacked' | 'start' = 'end';\n _hasSlottedContent: boolean;\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private ionicElementPartHelper: IonicElementPartHelper,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n /**\n * We cannot query ion-checkbox for slotted content at this point as the slot has not been rendered.\n * But we need to know if content is slotted to set justify and labelPlacement BEFORE ion-checkbox is rendered.\n * So it has to be done by querying an additional wrapper around the default content slot like this.\n */\n this._hasSlottedContent = this.element.nativeElement\n .querySelector('.default-content')\n .hasChildNodes();\n\n const slot = this.element.nativeElement.getAttribute('slot');\n if (slot === 'end' && this._hasSlottedContent) {\n this._justify = 'space-between';\n this._labelPlacement = 'start';\n }\n }\n\n ngAfterViewInit(): void {\n this.ionicElementPartHelper.setPart('label', this.ionCheckboxElement, '.checkbox-wrapper');\n this.ionicElementPartHelper.setPart(\n 'label-text-wrapper',\n this.ionCheckboxElement,\n '.label-text-wrapper'\n );\n this.ionicElementPartHelper.setPart(\n 'native-wrapper',\n this.ionCheckboxElement,\n '.native-wrapper'\n );\n }\n\n ngAfterContentInit(): void {\n this._labelText = inheritAriaLabelText(this.element.nativeElement);\n\n if (!this.text && !this._labelText && !this._hasSlottedContent) {\n // if no label has been set try to find a label in an item and use its text content\n this._labelText = setAccessibleLabel(this.element.nativeElement);\n }\n }\n\n onChecked(checked: boolean): void {\n this.checked = checked;\n this._onChange(this.checked);\n this.checkedChange.emit(this.checked);\n }\n\n onBlur() {\n this._onTouched();\n }\n\n // Initialize default ControlValueAccessor callback functions (noop)\n // eslint-disable-next-line no-empty-function\n private _onChange: (value: boolean) => void = () => {};\n // eslint-disable-next-line no-empty-function\n private _onTouched = () => {};\n\n /**\n * Sets the checkbox's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: boolean): void {\n this.checked = value;\n this.cdr.markForCheck();\n }\n\n /**\n * Saves a callback function to be invoked when the checkbox's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the checkbox is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the checkbox. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","<ion-checkbox\n mode=\"md\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [indeterminate]=\"indeterminate\"\n (ionChange)=\"onChecked($event.detail.checked)\"\n (ionBlur)=\"onBlur()\"\n [labelPlacement]=\"_labelPlacement\"\n [justify]=\"_justify\"\n>\n @if (_labelText) {\n <span class=\"hidden-label\">{{ _labelText }}</span>\n }\n @if (text) {\n <span [attr.aria-hidden]=\"_labelText ? true : undefined\">{{ text }}</span>\n }\n <span class=\"default-content\" [attr.aria-hidden]=\"_labelText ? true : undefined\">\n <ng-content></ng-content>\n </span>\n</ion-checkbox>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-checkbox.mjs","sources":["../../checkbox/src/checkbox.component.ts","../../checkbox/src/checkbox.component.html","../../checkbox/src/kirbydesign-designsystem-checkbox.ts"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { IonicElementPartHelper } from '@kirbydesign/designsystem/helpers';\nimport { IonCheckbox } from '@ionic/angular/standalone';\nimport { inheritAriaLabelText, setAccessibleLabel } from '@kirbydesign/designsystem/shared';\n\n@Component({\n imports: [IonCheckbox],\n selector: 'kirby-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n IonicElementPartHelper,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n },\n ],\n})\nexport class CheckboxComponent\n implements AfterViewInit, ControlValueAccessor, OnInit, AfterContentInit\n{\n @ViewChild(IonCheckbox, { read: ElementRef, static: true })\n private ionCheckboxElement?: ElementRef<HTMLIonCheckboxElement>;\n\n @Input() checked: boolean = false;\n @Input() indeterminate: boolean = false;\n @Input() attentionLevel: '1' | '2' = '2';\n\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size: 'xs' | 'sm' | 'md' = 'md';\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean = false;\n\n @Input() disabled = false;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.attention-level1') get isAttentionLevel1() {\n return this.attentionLevel === '1';\n }\n @HostBinding('class.attention-level2') get isAttentionLevel2() {\n return this.attentionLevel === '2';\n }\n\n @HostBinding('class.has-hidden-label') _labelText: string;\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n _justify: 'start' | 'end' | 'space-between' = 'start';\n _labelPlacement: 'end' | 'fixed' | 'stacked' | 'start' = 'end';\n _hasSlottedContent: boolean;\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private ionicElementPartHelper: IonicElementPartHelper,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n /**\n * We cannot query ion-checkbox for slotted content at this point as the slot has not been rendered.\n * But we need to know if content is slotted to set justify and labelPlacement BEFORE ion-checkbox is rendered.\n * So it has to be done by querying an additional wrapper around the default content slot like this.\n */\n this._hasSlottedContent = this.element.nativeElement\n .querySelector('.default-content')\n .hasChildNodes();\n\n const slot = this.element.nativeElement.getAttribute('slot');\n if (slot === 'end' && this._hasSlottedContent) {\n this._justify = 'space-between';\n this._labelPlacement = 'start';\n }\n }\n\n ngAfterViewInit(): void {\n this.ionicElementPartHelper.setPart('label', this.ionCheckboxElement, '.checkbox-wrapper');\n this.ionicElementPartHelper.setPart(\n 'label-text-wrapper',\n this.ionCheckboxElement,\n '.label-text-wrapper'\n );\n this.ionicElementPartHelper.setPart(\n 'native-wrapper',\n this.ionCheckboxElement,\n '.native-wrapper'\n );\n }\n\n ngAfterContentInit(): void {\n this._labelText = inheritAriaLabelText(this.element.nativeElement);\n\n if (!this.text && !this._labelText && !this._hasSlottedContent) {\n // if no label has been set try to find a label in an item and use its text content\n this._labelText = setAccessibleLabel(this.element.nativeElement);\n }\n }\n\n onChecked(checked: boolean): void {\n this.checked = checked;\n this._onChange(this.checked);\n this.checkedChange.emit(this.checked);\n }\n\n onBlur() {\n this._onTouched();\n }\n\n // Initialize default ControlValueAccessor callback functions (noop)\n // eslint-disable-next-line no-empty-function\n private _onChange: (value: boolean) => void = () => {};\n // eslint-disable-next-line no-empty-function\n private _onTouched = () => {};\n\n /**\n * Sets the checkbox's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: boolean): void {\n this.checked = value;\n this.cdr.markForCheck();\n }\n\n /**\n * Saves a callback function to be invoked when the checkbox's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the checkbox is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the checkbox. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","<ion-checkbox\n mode=\"md\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [indeterminate]=\"indeterminate\"\n (ionChange)=\"onChecked($event.detail.checked)\"\n (ionBlur)=\"onBlur()\"\n [labelPlacement]=\"_labelPlacement\"\n [justify]=\"_justify\"\n>\n @if (_labelText) {\n <span class=\"hidden-label\">{{ _labelText }}</span>\n }\n @if (text) {\n <span [attr.aria-hidden]=\"_labelText ? true : undefined\">{{ text }}</span>\n }\n <span class=\"default-content\" [attr.aria-hidden]=\"_labelText ? true : undefined\">\n <ng-content></ng-content>\n </span>\n</ion-checkbox>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;MAoCa,iBAAiB,CAAA;AAsB5B,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI;IAC1C;AAEA,IAAA,IAA2C,iBAAiB,GAAA;AAC1D,QAAA,OAAO,IAAI,CAAC,cAAc,KAAK,GAAG;IACpC;AACA,IAAA,IAA2C,iBAAiB,GAAA;AAC1D,QAAA,OAAO,IAAI,CAAC,cAAc,KAAK,GAAG;IACpC;AAUA,IAAA,WAAA,CACU,OAAgC,EAChC,sBAA8C,EAC9C,GAAsB,EAAA;QAFtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,sBAAsB,GAAtB,sBAAsB;QACtB,IAAA,CAAA,GAAG,GAAH,GAAG;QAvCJ,IAAA,CAAA,OAAO,GAAY,KAAK;QACxB,IAAA,CAAA,aAAa,GAAY,KAAK;QAC9B,IAAA,CAAA,cAAc,GAAc,GAAG;QAOxC,IAAA,CAAA,IAAI,GAAuB,IAAI;QAI/B,IAAA,CAAA,QAAQ,GAAY,KAAK;QAEhB,IAAA,CAAA,QAAQ,GAAG,KAAK;AAef,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAW;QAErD,IAAA,CAAA,QAAQ,GAAsC,OAAO;QACrD,IAAA,CAAA,eAAe,GAA0C,KAAK;;;AA6DtD,QAAA,IAAA,CAAA,SAAS,GAA6B,MAAK,EAAE,CAAC;;AAE9C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAK,EAAE,CAAC;IAxD1B;IAEH,QAAQ,GAAA;AACN;;;;AAIG;AACH,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC;aACpC,aAAa,CAAC,kBAAkB;AAChC,aAAA,aAAa,EAAE;AAElB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC;QAC5D,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7C,YAAA,IAAI,CAAC,QAAQ,GAAG,eAAe;AAC/B,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO;QAChC;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;AAC1F,QAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CACjC,oBAAoB,EACpB,IAAI,CAAC,kBAAkB,EACvB,qBAAqB,CACtB;AACD,QAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CACjC,gBAAgB,EAChB,IAAI,CAAC,kBAAkB,EACvB,iBAAiB,CAClB;IACH;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAElE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;;YAE9D,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAClE;IACF;AAEA,IAAA,SAAS,CAAC,OAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACvC;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;IACnB;AAQA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA;;;;;;AAMG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;iIAlJW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EATjB;YACT,sBAAsB;AACtB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,EAAC,MAAM,iBAAiB,EAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKU,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,UAAU,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvC5C,4lBAoBA,inJDEY,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAcV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;8BACC,CAAC,WAAW,CAAC,EAAA,QAAA,EACZ,gBAAgB,mBAGT,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;wBACT,sBAAsB;AACtB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,EAAC,uBAAuB,EAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,4lBAAA,EAAA,MAAA,EAAA,CAAA,yjJAAA,CAAA,EAAA;;sBAKA,SAAS;uBAAC,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGzD;;sBACA;;sBACA;;sBAEA;;sBAGA,WAAW;uBAAC,OAAO;;sBACnB;;sBAGA,WAAW;uBAAC,aAAa;;sBACzB;;sBAGA;;sBACA,WAAW;uBAAC,eAAe;;sBAK3B,WAAW;uBAAC,wBAAwB;;sBAGpC,WAAW;uBAAC,wBAAwB;;sBAIpC,WAAW;uBAAC,wBAAwB;;sBAEpC;;;AExEH;;AAEG;;;;"}
@@ -29,10 +29,10 @@ class TableSortableComponent {
29
29
  this.renderer.setAttribute(this.spanElement.nativeElement, 'data-text', this.spanElement.nativeElement.textContent);
30
30
  }
31
31
  }
32
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TableSortableComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
33
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: TableSortableComponent, isStandalone: true, selector: "th[sortable]", inputs: { sortable: "sortable", active: "active", sortDirection: "sortDirection", iconAlignment: "iconAlignment", alignment: "alignment" }, host: { properties: { "class.sortable": "this.sortable", "class.active": "this.isActive" } }, viewQueries: [{ propertyName: "spanElement", first: true, predicate: ["span"], descendants: true }], ngImport: i0, template: "@if (!sortable) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n} @else {\n <button [ngClass]=\"_getAlignmentClasses()\">\n <span #span><ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container></span>\n <kirby-icon [name]=\"sortDirection === 'asc' ? 'arrow-up-fill' : 'arrow-down-fill'\"></kirby-icon>\n </button>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
32
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TableSortableComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
33
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: TableSortableComponent, isStandalone: true, selector: "th[sortable]", inputs: { sortable: "sortable", active: "active", sortDirection: "sortDirection", iconAlignment: "iconAlignment", alignment: "alignment" }, host: { properties: { "class.sortable": "this.sortable", "class.active": "this.isActive" } }, viewQueries: [{ propertyName: "spanElement", first: true, predicate: ["span"], descendants: true }], ngImport: i0, template: "@if (!sortable) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n} @else {\n <button [ngClass]=\"_getAlignmentClasses()\">\n <span #span><ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container></span>\n <kirby-icon [name]=\"sortDirection === 'asc' ? 'arrow-up-fill' : 'arrow-down-fill'\"></kirby-icon>\n </button>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
34
34
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TableSortableComponent, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TableSortableComponent, decorators: [{
36
36
  type: Component,
37
37
  args: [{ selector: 'th[sortable]', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, IconComponent], template: "@if (!sortable) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n} @else {\n <button [ngClass]=\"_getAlignmentClasses()\">\n <span #span><ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container></span>\n <kirby-icon [name]=\"sortDirection === 'asc' ? 'arrow-up-fill' : 'arrow-down-fill'\"></kirby-icon>\n </button>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n" }]
38
38
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { sortable: [{
@@ -65,11 +65,11 @@ class DataTableModule {
65
65
  console.warn(`'DataTableModule' has been deprecated in favor of the standalone 'TableSortableComponent'.
66
66
  Please import 'TableSortableComponent' instead. 'DataTableModule' will be removed in Kirby v11.`);
67
67
  }
68
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
69
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: DataTableModule, imports: [TableSortableComponent], exports: [TableSortableComponent] }); }
70
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataTableModule, imports: [TableSortableComponent] }); }
68
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DataTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
69
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: DataTableModule, imports: [TableSortableComponent], exports: [TableSortableComponent] }); }
70
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DataTableModule, imports: [TableSortableComponent] }); }
71
71
  }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DataTableModule, decorators: [{
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DataTableModule, decorators: [{
73
73
  type: NgModule,
74
74
  args: [{
75
75
  imports: [TableSortableComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-data-table.mjs","sources":["../../data-table/src/sortable/sortable.component.ts","../../data-table/src/sortable/sortable.component.html","../../data-table/src/data-table.module.ts","../../data-table/src/kirbydesign-designsystem-data-table.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'th[sortable]',\n templateUrl: './sortable.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, IconComponent],\n})\nexport class TableSortableComponent implements AfterViewInit {\n constructor(private renderer: Renderer2) {}\n\n @HostBinding('class.sortable')\n @Input()\n sortable = false;\n\n @Input() active = false;\n\n @Input() sortDirection: 'asc' | 'desc' = 'asc';\n @Input() iconAlignment: 'start' | 'end' = 'end';\n @Input() alignment: 'start' | 'center' | 'end' = 'start';\n\n @HostBinding('class.active')\n get isActive() {\n return this.sortable && this.active;\n }\n\n _getAlignmentClasses() {\n const alignmentClasses: string[] = [];\n\n if (this.iconAlignment === 'start') {\n alignmentClasses.push('row-reverse');\n }\n\n alignmentClasses.push(`align-${this.alignment}`);\n\n return alignmentClasses;\n }\n\n @ViewChild('span') spanElement: ElementRef;\n\n ngAfterViewInit(): void {\n if (this.spanElement) {\n this.renderer.setAttribute(\n this.spanElement.nativeElement,\n 'data-text',\n this.spanElement.nativeElement.textContent\n );\n }\n }\n}\n","@if (!sortable) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n} @else {\n <button [ngClass]=\"_getAlignmentClasses()\">\n <span #span><ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container></span>\n <kirby-icon [name]=\"sortDirection === 'asc' ? 'arrow-up-fill' : 'arrow-down-fill'\"></kirby-icon>\n </button>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { TableSortableComponent } from './sortable/sortable.component';\n\n/**\n * @deprecated 'DataTableModule' has been deprecated in favor of the standalone 'TableSortableComponent'.\n * Please import 'TableSortableComponent' instead. 'DataTableModule' will be removed in Kirby v11.\n */\n@NgModule({\n imports: [TableSortableComponent],\n exports: [TableSortableComponent],\n})\nexport class DataTableModule {\n constructor() {\n console.warn(`'DataTableModule' has been deprecated in favor of the standalone 'TableSortableComponent'.\nPlease import 'TableSortableComponent' instead. 'DataTableModule' will be removed in Kirby v11.`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-data-table.mjs","sources":["../../data-table/src/sortable/sortable.component.ts","../../data-table/src/sortable/sortable.component.html","../../data-table/src/data-table.module.ts","../../data-table/src/kirbydesign-designsystem-data-table.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'th[sortable]',\n templateUrl: './sortable.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, IconComponent],\n})\nexport class TableSortableComponent implements AfterViewInit {\n constructor(private renderer: Renderer2) {}\n\n @HostBinding('class.sortable')\n @Input()\n sortable = false;\n\n @Input() active = false;\n\n @Input() sortDirection: 'asc' | 'desc' = 'asc';\n @Input() iconAlignment: 'start' | 'end' = 'end';\n @Input() alignment: 'start' | 'center' | 'end' = 'start';\n\n @HostBinding('class.active')\n get isActive() {\n return this.sortable && this.active;\n }\n\n _getAlignmentClasses() {\n const alignmentClasses: string[] = [];\n\n if (this.iconAlignment === 'start') {\n alignmentClasses.push('row-reverse');\n }\n\n alignmentClasses.push(`align-${this.alignment}`);\n\n return alignmentClasses;\n }\n\n @ViewChild('span') spanElement: ElementRef;\n\n ngAfterViewInit(): void {\n if (this.spanElement) {\n this.renderer.setAttribute(\n this.spanElement.nativeElement,\n 'data-text',\n this.spanElement.nativeElement.textContent\n );\n }\n }\n}\n","@if (!sortable) {\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n} @else {\n <button [ngClass]=\"_getAlignmentClasses()\">\n <span #span><ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container></span>\n <kirby-icon [name]=\"sortDirection === 'asc' ? 'arrow-up-fill' : 'arrow-down-fill'\"></kirby-icon>\n </button>\n}\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { TableSortableComponent } from './sortable/sortable.component';\n\n/**\n * @deprecated 'DataTableModule' has been deprecated in favor of the standalone 'TableSortableComponent'.\n * Please import 'TableSortableComponent' instead. 'DataTableModule' will be removed in Kirby v11.\n */\n@NgModule({\n imports: [TableSortableComponent],\n exports: [TableSortableComponent],\n})\nexport class DataTableModule {\n constructor() {\n console.warn(`'DataTableModule' has been deprecated in favor of the standalone 'TableSortableComponent'.\nPlease import 'TableSortableComponent' instead. 'DataTableModule' will be removed in Kirby v11.`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@ import * as i0 from '@angular/core';
2
2
  import { Input, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
 
4
4
  class DividerComponent {
5
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DividerComponent, isStandalone: true, selector: "kirby-divider", inputs: { hasMargin: "hasMargin" }, ngImport: i0, template: "<hr role=\"presentation\" [class.no-margin]=\"!hasMargin\" />\n", styles: ["hr{margin-top:8px;margin-bottom:8px;border:0;border-top:1px solid var(--kirby-divider-color, var(--kirby-medium))}hr.no-margin{margin-top:0;margin-bottom:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: DividerComponent, isStandalone: true, selector: "kirby-divider", inputs: { hasMargin: "hasMargin" }, ngImport: i0, template: "<hr role=\"presentation\" [class.no-margin]=\"!hasMargin\" />\n", styles: ["hr{margin-top:8px;margin-bottom:8px;border:0;border-top:1px solid var(--kirby-divider-color, var(--kirby-medium))}hr.no-margin{margin-top:0;margin-bottom:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DividerComponent, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DividerComponent, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'kirby-divider', changeDetection: ChangeDetectionStrategy.OnPush, template: "<hr role=\"presentation\" [class.no-margin]=\"!hasMargin\" />\n", styles: ["hr{margin-top:8px;margin-bottom:8px;border:0;border-top:1px solid var(--kirby-divider-color, var(--kirby-medium))}hr.no-margin{margin-top:0;margin-bottom:0}\n"] }]
11
11
  }], propDecorators: { hasMargin: [{
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-divider.mjs","sources":["../../divider/src/divider.component.ts","../../divider/src/divider.component.html","../../divider/src/kirbydesign-designsystem-divider.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-divider',\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DividerComponent {\n @Input()\n hasMargin: boolean;\n}\n","<hr role=\"presentation\" [class.no-margin]=\"!hasMargin\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;MAQa,gBAAgB,CAAA;kIAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,6GCR7B,iEACA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDOa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iEAAA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA;;sBAG9C;;;AETH;;AAEG;;;;"}
1
+ {"version":3,"file":"kirbydesign-designsystem-divider.mjs","sources":["../../divider/src/divider.component.ts","../../divider/src/divider.component.html","../../divider/src/kirbydesign-designsystem-divider.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-divider',\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DividerComponent {\n @Input()\n hasMargin: boolean;\n}\n","<hr role=\"presentation\" [class.no-margin]=\"!hasMargin\" />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;MAQa,gBAAgB,CAAA;iIAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,6GCR7B,iEACA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDOa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iEAAA,EAAA,MAAA,EAAA,CAAA,gKAAA,CAAA,EAAA;;sBAG9C;;;AETH;;AAEG;;;;"}
@@ -62,10 +62,10 @@ class KeyboardHandlerService {
62
62
  }
63
63
  return newIndex;
64
64
  }
65
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KeyboardHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KeyboardHandlerService, providedIn: 'root' }); }
65
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: KeyboardHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: KeyboardHandlerService, providedIn: 'root' }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: KeyboardHandlerService, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: KeyboardHandlerService, decorators: [{
69
69
  type: Injectable,
70
70
  args: [{
71
71
  providedIn: 'root',
@@ -631,16 +631,16 @@ class DropdownComponent {
631
631
  this.intersectionObserverRef.disconnect();
632
632
  }
633
633
  }
634
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: KeyboardHandlerService }, { token: i2.ResizeObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
635
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DropdownComponent, isStandalone: true, selector: "kirby-dropdown", inputs: { items: "items", selectedIndex: "selectedIndex", focusedIndex: "focusedIndex", itemTextProperty: "itemTextProperty", placeholder: "placeholder", popout: "popout", attentionLevel: "attentionLevel", expand: "expand", disabled: "disabled", hasError: "hasError", size: "size", tabindex: "tabindex", usePopover: "usePopover" }, outputs: { hasErrorChange: "hasErrorChange", change: "change" }, host: { listeners: { "keydown.tab": "_onTab()", "keydown": "_onKeydown($event)", "mousedown": "_onMouseDown($event)", "touchstart": "_onTouchStart($event)", "keydown.enter": "_onEnterOrSpace($event)", "keydown.escape": "_onEnterOrEscape()", "keydown.space": "_onEnterOrSpace($event)", "keydown.arrowup": "_onArrowKeys($event)", "keydown.arrowdown": "_onArrowKeys($event)", "keydown.arrowleft": "_onArrowKeys($event)", "keydown.arrowright": "_onArrowKeys($event)", "keydown.home": "_onHomeEndKeys($event)", "keydown.end": "_onHomeEndKeys($event)" }, properties: { "attr.disabled": "this._isDisabled", "class.error": "this.hasError", "class.with-popover": "this.usePopover", "attr.no-blur": "this._noBlurOnScroll", "class.expand": "this._isBlockLevel", "class.is-opening": "this._isOpening", "class.is-open": "this.isOpen", "class.popout-left": "this._popoutLeft", "class.popout-up": "this._popoutUp", "class.clicked": "this.clicked" } }, providers: [
634
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: KeyboardHandlerService }, { token: i2.ResizeObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
635
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: DropdownComponent, isStandalone: true, selector: "kirby-dropdown", inputs: { items: "items", selectedIndex: "selectedIndex", focusedIndex: "focusedIndex", itemTextProperty: "itemTextProperty", placeholder: "placeholder", popout: "popout", attentionLevel: "attentionLevel", expand: "expand", disabled: "disabled", hasError: "hasError", size: "size", tabindex: "tabindex", usePopover: "usePopover" }, outputs: { hasErrorChange: "hasErrorChange", change: "change" }, host: { listeners: { "keydown.tab": "_onTab()", "keydown": "_onKeydown($event)", "mousedown": "_onMouseDown($event)", "touchstart": "_onTouchStart($event)", "keydown.enter": "_onEnterOrSpace($event)", "keydown.escape": "_onEnterOrEscape()", "keydown.space": "_onEnterOrSpace($event)", "keydown.arrowup": "_onArrowKeys($event)", "keydown.arrowdown": "_onArrowKeys($event)", "keydown.arrowleft": "_onArrowKeys($event)", "keydown.arrowright": "_onArrowKeys($event)", "keydown.home": "_onHomeEndKeys($event)", "keydown.end": "_onHomeEndKeys($event)" }, properties: { "attr.disabled": "this._isDisabled", "class.error": "this.hasError", "class.with-popover": "this.usePopover", "attr.no-blur": "this._noBlurOnScroll", "class.expand": "this._isBlockLevel", "class.is-opening": "this._isOpening", "class.is-open": "this.isOpen", "class.popout-left": "this._popoutLeft", "class.popout-up": "this._popoutUp", "class.clicked": "this.clicked" } }, providers: [
636
636
  {
637
637
  provide: NG_VALUE_ACCESSOR,
638
638
  useExisting: forwardRef((() => DropdownComponent)),
639
639
  multi: true,
640
640
  },
641
- ], queries: [{ propertyName: "itemTemplate", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "slottedItems", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: "kirbyItemsSlotted", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "cardElement", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "buttonElement", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "kirbyItemsDefault", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<button\n kirby-button\n type=\"button\"\n [attr.id]=\"_comboboxId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"_listboxId + '-item-' + focusedIndex\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\n (blur)=\"_onBlur()\"\n [disabled]=\"disabled\"\n [tabindex]=\"_tabindex\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card role=\"listbox\" [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @for (item of items; track item; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i,\n }\n \"\n ></ng-container>\n }\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <p class=\"kirby-item-title\">{{ getTextFromItem(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n", styles: ["@media (hover: hover) and (pointer: fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{outline-color:var(--kirby-danger)}:host>button{position:relative;margin:0;width:100%;min-width:0;outline:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media (min-width: 321px){kirby-card{min-width:343px}}@media (hover: hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "kirby-popover", inputs: ["popout", "target"], outputs: ["willHide"] }, { kind: "component", type: CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "variant"] }, { kind: "component", type: ItemComponent, selector: "kirby-item", inputs: ["disabled", "selected", "disclosure", "selectable", "reorderable", "size", "href", "rotateIcon"] }, { kind: "component", type: IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }] }); }
641
+ ], queries: [{ propertyName: "itemTemplate", first: true, predicate: ListItemTemplateDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "slottedItems", predicate: ListItemTemplateDirective, read: ElementRef }, { propertyName: "kirbyItemsSlotted", predicate: ItemComponent, read: ElementRef }], viewQueries: [{ propertyName: "cardElement", first: true, predicate: CardComponent, descendants: true, read: ElementRef }, { propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "buttonElement", first: true, predicate: ButtonComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "kirbyItemsDefault", predicate: ItemComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<button\n kirby-button\n type=\"button\"\n [attr.id]=\"_comboboxId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"_listboxId + '-item-' + focusedIndex\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\n (blur)=\"_onBlur()\"\n [disabled]=\"disabled\"\n [tabindex]=\"_tabindex\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card role=\"listbox\" [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @for (item of items; track item; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i,\n }\n \"\n ></ng-container>\n }\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <p class=\"kirby-item-title\">{{ getTextFromItem(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n", styles: ["@media(hover:hover)and (pointer:fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{outline-color:var(--kirby-danger)}:host>button{position:relative;margin:0;width:100%;min-width:0;outline:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media(min-width:321px){kirby-card{min-width:343px}}@media(hover:hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "kirby-popover", inputs: ["popout", "target"], outputs: ["willHide"] }, { kind: "component", type: CardComponent, selector: "kirby-card", inputs: ["title", "subtitle", "backgroundImageUrl", "hasPadding", "sizes", "variant"] }, { kind: "component", type: ItemComponent, selector: "kirby-item", inputs: ["disabled", "selected", "disclosure", "selectable", "reorderable", "size", "href", "rotateIcon"] }, { kind: "component", type: IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }] }); }
642
642
  }
643
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownComponent, decorators: [{
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownComponent, decorators: [{
644
644
  type: Component,
645
645
  args: [{ selector: 'kirby-dropdown', providers: [
646
646
  {
@@ -655,7 +655,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
655
655
  CardComponent,
656
656
  ItemComponent,
657
657
  IconComponent,
658
- ], template: "<button\n kirby-button\n type=\"button\"\n [attr.id]=\"_comboboxId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"_listboxId + '-item-' + focusedIndex\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\n (blur)=\"_onBlur()\"\n [disabled]=\"disabled\"\n [tabindex]=\"_tabindex\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card role=\"listbox\" [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @for (item of items; track item; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i,\n }\n \"\n ></ng-container>\n }\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <p class=\"kirby-item-title\">{{ getTextFromItem(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n", styles: ["@media (hover: hover) and (pointer: fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{outline-color:var(--kirby-danger)}:host>button{position:relative;margin:0;width:100%;min-width:0;outline:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media (min-width: 321px){kirby-card{min-width:343px}}@media (hover: hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"] }]
658
+ ], template: "<button\n kirby-button\n type=\"button\"\n [attr.id]=\"_comboboxId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"_listboxId + '-item-' + focusedIndex\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\n (blur)=\"_onBlur()\"\n [disabled]=\"disabled\"\n [tabindex]=\"_tabindex\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card role=\"listbox\" [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @for (item of items; track item; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i,\n }\n \"\n ></ng-container>\n }\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <p class=\"kirby-item-title\">{{ getTextFromItem(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n", styles: ["@media(hover:hover)and (pointer:fine){:host{outline:none;border-radius:999px}:host:focus{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}:host:focus:not(:focus-visible){box-shadow:0 0 0 0 transparent}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}:host{display:inline-block;position:relative;max-width:calc(100vw - 32px)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error>button,:host.ng-touched.ng-invalid>button{outline-color:var(--kirby-danger)}:host>button{position:relative;margin:0;width:100%;min-width:0;outline:1px solid transparent}:host>button .text{overflow:hidden;text-overflow:ellipsis}:host kirby-card{display:none;opacity:0;position:absolute;z-index:800}:host.is-opening kirby-card{display:block}:host.is-open kirby-card{display:block;opacity:1}:host.is-open>button{box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26}:host.popout-left kirby-card{right:0}:host.popout-up kirby-card{top:0;margin-top:-4px;transform:translateY(-100%)}:host.popout-up.is-open>button{z-index:801}kirby-popover{--max-height: 352px}kirby-card{max-height:352px;margin-block:4px;overflow-y:auto;box-shadow:0 0 5px #1c1c1c0a,0 10px 15px -10px #1c1c1c26;max-width:calc(100vw - 32px);min-width:288px}@media(min-width:321px){kirby-card{min-width:343px}}@media(hover:hover){:host-context(kirby-calendar)>button:hover{--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black);cursor:pointer}}:host-context(kirby-calendar)>button:active,:host-context(kirby-calendar)>button.interaction-state-active{--state-layer-opacity: .16;--state-layer-background-color: var(--kirby-black)}:host-context(kirby-calendar)>button{border-color:transparent;font-weight:700;font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"] }]
659
659
  }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: KeyboardHandlerService }, { type: i2.ResizeObserverService }], propDecorators: { items: [{
660
660
  type: Input
661
661
  }], selectedIndex: [{
@@ -782,8 +782,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
782
782
  }] } });
783
783
 
784
784
  class DropdownModule {
785
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
786
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: DropdownModule, imports: [CardModule,
785
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
786
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: DropdownModule, imports: [CardModule,
787
787
  IconModule,
788
788
  ItemModule,
789
789
  PopoverComponent,
@@ -791,7 +791,7 @@ class DropdownModule {
791
791
  CommonModule,
792
792
  ListModule,
793
793
  DropdownComponent], exports: [DropdownComponent, ListItemTemplateDirective] }); }
794
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownModule, providers: [KeyboardHandlerService], imports: [CardModule,
794
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownModule, providers: [KeyboardHandlerService], imports: [CardModule,
795
795
  IconModule,
796
796
  ItemModule,
797
797
  PopoverComponent,
@@ -800,7 +800,7 @@ class DropdownModule {
800
800
  ListModule,
801
801
  DropdownComponent] }); }
802
802
  }
803
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DropdownModule, decorators: [{
803
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DropdownModule, decorators: [{
804
804
  type: NgModule,
805
805
  args: [{
806
806
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"kirbydesign-designsystem-dropdown.mjs","sources":["../../dropdown/src/dropdown.types.ts","../../dropdown/src/keyboard-handler.service.ts","../../dropdown/src/dropdown.component.ts","../../dropdown/src/dropdown.component.html","../../dropdown/src/dropdown.module.ts","../../dropdown/src/kirbydesign-designsystem-dropdown.ts"],"sourcesContent":["export enum OpenState {\n closed,\n opening,\n open,\n}\n\nexport enum VerticalDirection {\n up,\n down,\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardHandlerService {\n handle(event: KeyboardEvent, selectedIndex: number, maxIndex: number, cyclicIndex = false) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n if (selectedIndex === 0 && cyclicIndex) {\n newIndex = maxIndex;\n } else {\n // Select previous item:\n newIndex = selectedIndex - 1;\n }\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {\n // None selected, select first item:\n newIndex = 0;\n } else if (selectedIndex < maxIndex) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = maxIndex;\n break;\n default:\n break;\n }\n return newIndex;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport {\n DesignTokenHelper,\n StringSearchHelper,\n UniqueIdGenerator,\n} from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { EventListenerDisposeFn } from '@kirbydesign/designsystem/types';\nimport { forwardAttributes, ResizeObserverService } from '@kirbydesign/designsystem/shared';\n\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@Component({\n selector: 'kirby-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n imports: [\n ButtonComponent,\n NgTemplateOutlet,\n PopoverComponent,\n CardComponent,\n ItemComponent,\n IconComponent,\n ],\n})\nexport class DropdownComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private horizontalDirection: HorizontalDirection | `${HorizontalDirection}` =\n HorizontalDirection.right;\n private verticalDirection: VerticalDirection | `${VerticalDirection}` = VerticalDirection.down;\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n _listboxId = UniqueIdGenerator.scopedTo('kirby-dropdown').next();\n _comboboxId = UniqueIdGenerator.scopedTo('kirby-button').next();\n\n private _items: string[] | any[] = [];\n\n get items(): string[] | any[] {\n return this._items;\n }\n\n @Input() set items(value: string[] | any[]) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (value !== undefined && this._selectedIndex != value) {\n this._selectedIndex = value;\n this.focusedIndex = this._selectedIndex;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n\n // _focusedIndex keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER or SPACE key)\n private _focusedIndex: number = 0;\n get focusedIndex(): number {\n return this._focusedIndex;\n }\n\n @Input() set focusedIndex(value: number) {\n if (this._focusedIndex !== value) {\n this._focusedIndex = value;\n this.scrollItemIntoView(this._focusedIndex);\n }\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n placeholder = 'Please select:';\n\n @Input() set popout(direction: HorizontalDirection | `${HorizontalDirection}`) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n\n get popout() {\n return this.horizontalDirection;\n }\n\n @Input()\n attentionLevel: '1' | '2' | '3' = '3';\n\n @Input()\n expand?: 'block';\n\n @Input()\n disabled = false;\n\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n private _hasError: boolean;\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @Input()\n size: 'sm' | 'md' = 'md';\n\n // Tabindex defaults to 0 instead of no value to align tabbing behavior in Safari\n // with other browsers and the default select behavior: https://mayank.co/blog/safari-focus/\n @Input()\n tabindex = 0;\n\n @HostBinding('class.with-popover')\n @Input()\n usePopover = false;\n\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n get _noBlurOnScroll() {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output() change: EventEmitter<string | any> = new EventEmitter<string | any>();\n\n private _value: string | any = null;\n get value(): string | any {\n return this._value;\n }\n\n get selectedText(): string {\n return this.getTextFromItem(this.value);\n }\n\n @HostBinding('class.expand')\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('class.is-opening')\n get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.popout-left')\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n\n @HostBinding('class.popout-up')\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n\n /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.\n There is a bug that causes the dropdown to get a focus ring on click, if it is the first element that is interacted with\n after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.\n See issue: https://github.com/kirbydesign/designsystem/issues/2477.\n\n This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible\n to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized\n by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when\n clicking outside of the dropdown.\n */\n @HostBinding('class.clicked')\n clicked = false;\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n slottedItems: QueryList<ElementRef<HTMLElement>>;\n @ViewChild(CardComponent, { read: ElementRef })\n cardElement: ElementRef<HTMLElement>;\n @ViewChild(PopoverComponent)\n popover?: PopoverComponent;\n @ViewChild(ButtonComponent, { static: true, read: ElementRef })\n buttonElement: ElementRef<HTMLElement>;\n\n private forwardAriaLabelToDropdownButton() {\n forwardAttributes(\n this.elementRef.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.buttonElement.nativeElement\n );\n }\n @ViewChildren(ItemComponent, { read: ElementRef })\n kirbyItemsDefault: QueryList<ElementRef<HTMLElement>>;\n\n _kirbyItemsSlotted: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n set kirbyItemsSlotted(kirbyItems: QueryList<ElementRef<HTMLElement>>) {\n const hasSlottedItems = this.disposeItemClickListeners?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n\n // Setup a click listener for each new slotted items\n kirbyItems.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const disposeClickListener: EventListenerDisposeFn = this.renderer.listen(\n kirbyItem.nativeElement,\n 'click',\n () => {\n this.onItemSelect(index);\n }\n );\n\n this.disposeItemClickListeners.push(disposeClickListener);\n });\n\n this._kirbyItemsSlotted = kirbyItems;\n }\n\n get kirbyItemsSlotted(): QueryList<ElementRef<HTMLElement>> {\n return this._kirbyItemsSlotted;\n }\n\n private disposeItemClickListeners: EventListenerDisposeFn[] = [];\n private intersectionObserverRef: IntersectionObserver;\n private showDropdownTimeoutId: ReturnType<typeof setTimeout>;\n private searchBuffer: string = '';\n private searchBufferTimeout: ReturnType<typeof setTimeout>;\n private SEARCH_BUFFER_DELAY = 500; // ms\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n private keyboardHandlerService: KeyboardHandlerService,\n private resizeObserverService: ResizeObserverService\n ) {}\n\n onToggle(event: MouseEvent) {\n event.stopPropagation();\n\n this.clicked = true;\n\n this.toggle();\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n /* Utility that makes it easier to set styles on card element\n when using popover*/\n private setPopoverCardStyle(style: string, value: string) {\n if (!this.usePopover) return;\n\n this.renderer.setStyle(\n this.cardElement.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n // Ensure initial width is set even if the resize observer callback also fires initially:\n this.setPopoverCardStyle('--kirby-card-width', `${initialWidth}px`);\n\n this.resizeObserverService.observe(this.elementRef, (entry) => {\n const newWidth = entry.contentRect.width;\n if (newWidth > 0) {\n this.setPopoverCardStyle('--kirby-card-width', `${newWidth}px`);\n }\n });\n }\n this.forwardAriaLabelToDropdownButton();\n this.initializeAlignment();\n }\n\n private initializeAlignment() {\n if (this.usePopover) return;\n if (!this.intersectionObserverRef) {\n // Get the design token size of the button. In the button stylesheet a medium button height is utils.size(xl)\n // and a small button height is utils.size(\"l\")\n const designTokenSizeHeight = this.size === 'md' ? 'xl' : 'l';\n\n // Setting the rootMargin equal to the height of the button\n // allows the Intersection Observer Callback to be called\n // even if the dropdown button is intersecting with the viewport\n const options = {\n rootMargin: DesignTokenHelper.size(designTokenSizeHeight),\n };\n const callback: IntersectionObserverCallback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.cdr.markForCheck();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n\n private setHorizontalDirection(entry: IntersectionObserverEntry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n } else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n\n private setVerticalDirection(entry: IntersectionObserverEntry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(\n () => this.showDropdown(),\n DropdownComponent.OPEN_DELAY_IN_MS\n );\n\n // Move focus to selected item (if any) or first item\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n }\n\n private showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.focusedIndex);\n this.cdr.markForCheck();\n }\n }\n\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n\n onItemSelect(index: number) {\n this.selectItem(index);\n this.close();\n }\n\n private _onChange: (value: any) => void = () => {};\n private _onTouched = () => {};\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._selectItemByValue(value);\n this.cdr.markForCheck();\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n private selectItem(index: number) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.focusedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n }\n }\n\n private _selectItemByValue(value: string | any) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n getTextFromItem(item: string | any) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n scrollItemIntoView(index: number) {\n const kirbyItems =\n this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n itemElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }\n\n @HostListener('keydown.tab')\n _onTab() {\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n\n if (this.clicked) {\n // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,\n // since the class prevents the focus ring from showing,\n // which is expected to happen, when using the tab key\n this.clicked = false;\n }\n }\n\n private preventDefaultAndStopImmediatePropagation(event: KeyboardEvent) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n private addToSearchBuffer(char: string) {\n clearTimeout(this.searchBufferTimeout);\n this.searchBuffer += char;\n this.searchBufferTimeout = setTimeout(() => {\n this.resetSearchBuffer();\n }, this.SEARCH_BUFFER_DELAY);\n }\n private resetSearchBuffer() {\n this.searchBuffer = '';\n }\n\n @HostListener('keydown', ['$event'])\n _onKeydown(event: KeyboardEvent) {\n const key = event.key;\n\n if (this.items.length === 0) {\n console.warn('[Kirby] No items found within dropdown');\n return;\n }\n\n if (this.disabled) return;\n\n if (StringSearchHelper.isPrintableCharacter(key)) {\n this.handlePrintableCharacterKey(event, this.isOpen);\n }\n\n // ALT + ArrowDown: Open dropdown\n if (key === 'ArrowDown' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n return;\n }\n\n // ALT + ArrowUp: Select focused item and close dropdown\n if (key === 'ArrowUp' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex > -1) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n }\n // PageUp: Jump up 10 options or to first\n if (key === 'PageUp') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.max(0, this.focusedIndex - 10);\n return;\n }\n\n // PageDown: Jump down 10 options or to last\n if (key === 'PageDown') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.min(this.items.length - 1, this.focusedIndex + 10);\n return;\n }\n }\n\n private handlePrintableCharacterKey(event: KeyboardEvent, isOpen: boolean) {\n const key = event.key;\n\n if (isOpen) {\n this.preventDefaultAndStopImmediatePropagation(event);\n } else {\n this.open();\n }\n\n // If the same character is typed twice, the search buffer should only contain that character once\n if (\n this.searchBuffer.length === 1 &&\n this.searchBuffer[0].toLowerCase() === key.toLowerCase()\n ) {\n this.searchBuffer = key;\n } else {\n this.addToSearchBuffer(key);\n }\n\n const isMultiCharSearch = this.searchBuffer.length > 1;\n let startIndex = 0;\n\n if (!isMultiCharSearch && this.isOpen) {\n startIndex = this.focusedIndex + 1;\n }\n\n let foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, startIndex);\n\n if (foundItemIndex === -1 && isMultiCharSearch) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(key, startIndex);\n }\n\n if (foundItemIndex === -1 && !isMultiCharSearch && this.isOpen) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, 0);\n }\n\n if (foundItemIndex > -1) {\n this.focusedIndex = foundItemIndex;\n }\n }\n\n private getIndexOfItemByFirstCharacter(char: string, startIndex: number = 0) {\n let itemTexts: string[];\n // Prefer slotted/projected items if present\n if (this.kirbyItemsSlotted && this.kirbyItemsSlotted.length) {\n itemTexts = this.kirbyItemsSlotted\n .toArray()\n .map((ref) => ref.nativeElement.textContent?.trim() ?? '');\n } else {\n itemTexts = this.items.map((item) => this.getTextFromItem(item) ?? '');\n }\n\n return StringSearchHelper.getIndexByFirstMatchingStartString(char, itemTexts, startIndex);\n }\n\n @HostListener('mousedown', ['$event'])\n _onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('touchstart', ['$event'])\n _onTouchStart(event: TouchEvent) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.buttonElement.nativeElement.focus();\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.escape')\n _onEnterOrEscape() {\n this.close();\n this._onTouched();\n }\n\n _onPopoverClick() {\n this.close();\n }\n\n _onBlur() {\n if (this.usePopover) return;\n this.close();\n this._onTouched();\n }\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.space', ['$event'])\n _onEnterOrSpace(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n }\n this.toggle();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n @HostListener('keydown.arrowdown', ['$event'])\n @HostListener('keydown.arrowleft', ['$event'])\n @HostListener('keydown.arrowright', ['$event'])\n _onArrowKeys(event: KeyboardEvent) {\n if (this.disabled) return false;\n\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return false;\n }\n\n if (!this.isOpen) {\n // Avoid page scroll\n event.preventDefault();\n this.open();\n\n // If no selected item then focus first or last item\n if (!event.altKey && this.selectedIndex < 0) {\n switch (event.key) {\n case 'ArrowUp':\n this.focusedIndex = 0;\n break;\n case 'ArrowDown':\n this.focusedIndex = this.items.length - 1;\n break;\n default:\n break;\n }\n }\n return false;\n }\n\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n _onHomeEndKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.isOpen) {\n event.preventDefault();\n this.open();\n }\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n\n private unlistenAllSlottedItems() {\n let disposeClickListener: EventListenerDisposeFn;\n while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== undefined) {\n disposeClickListener();\n }\n }\n\n ngOnDestroy(): void {\n this.unlistenAllSlottedItems();\n this.resizeObserverService.unobserve(this.elementRef);\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n}\n","<button\n kirby-button\n type=\"button\"\n [attr.id]=\"_comboboxId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"_listboxId + '-item-' + focusedIndex\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\n (blur)=\"_onBlur()\"\n [disabled]=\"disabled\"\n [tabindex]=\"_tabindex\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card role=\"listbox\" [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @for (item of items; track item; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i,\n }\n \"\n ></ng-container>\n }\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <p class=\"kirby-item-title\">{{ getTextFromItem(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { PopoverComponent } from '@kirbydesign/designsystem/popover';\n\nimport { ListItemTemplateDirective, ListModule } from '@kirbydesign/designsystem/list';\nimport { DropdownComponent } from './dropdown.component';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@NgModule({\n imports: [\n CardModule,\n IconModule,\n ItemModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule,\n DropdownComponent,\n ],\n exports: [DropdownComponent, ListItemTemplateDirective],\n providers: [KeyboardHandlerService],\n})\nexport class DropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.KeyboardHandlerService"],"mappings":"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"}
1
+ {"version":3,"file":"kirbydesign-designsystem-dropdown.mjs","sources":["../../dropdown/src/dropdown.types.ts","../../dropdown/src/keyboard-handler.service.ts","../../dropdown/src/dropdown.component.ts","../../dropdown/src/dropdown.component.html","../../dropdown/src/dropdown.module.ts","../../dropdown/src/kirbydesign-designsystem-dropdown.ts"],"sourcesContent":["export enum OpenState {\n closed,\n opening,\n open,\n}\n\nexport enum VerticalDirection {\n up,\n down,\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardHandlerService {\n handle(event: KeyboardEvent, selectedIndex: number, maxIndex: number, cyclicIndex = false) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n if (selectedIndex === 0 && cyclicIndex) {\n newIndex = maxIndex;\n } else {\n // Select previous item:\n newIndex = selectedIndex - 1;\n }\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {\n // None selected, select first item:\n newIndex = 0;\n } else if (selectedIndex < maxIndex) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = maxIndex;\n break;\n default:\n break;\n }\n return newIndex;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CardComponent } from '@kirbydesign/designsystem/card';\nimport {\n DesignTokenHelper,\n StringSearchHelper,\n UniqueIdGenerator,\n} from '@kirbydesign/designsystem/helpers';\nimport { ItemComponent } from '@kirbydesign/designsystem/item';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { EventListenerDisposeFn } from '@kirbydesign/designsystem/types';\nimport { forwardAttributes, ResizeObserverService } from '@kirbydesign/designsystem/shared';\n\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@Component({\n selector: 'kirby-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n imports: [\n ButtonComponent,\n NgTemplateOutlet,\n PopoverComponent,\n CardComponent,\n ItemComponent,\n IconComponent,\n ],\n})\nexport class DropdownComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private horizontalDirection: HorizontalDirection | `${HorizontalDirection}` =\n HorizontalDirection.right;\n private verticalDirection: VerticalDirection | `${VerticalDirection}` = VerticalDirection.down;\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n _listboxId = UniqueIdGenerator.scopedTo('kirby-dropdown').next();\n _comboboxId = UniqueIdGenerator.scopedTo('kirby-button').next();\n\n private _items: string[] | any[] = [];\n\n get items(): string[] | any[] {\n return this._items;\n }\n\n @Input() set items(value: string[] | any[]) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (value !== undefined && this._selectedIndex != value) {\n this._selectedIndex = value;\n this.focusedIndex = this._selectedIndex;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n\n // _focusedIndex keeps track of which element has focus and will be selected\n // if it is activated (by pressing ENTER or SPACE key)\n private _focusedIndex: number = 0;\n get focusedIndex(): number {\n return this._focusedIndex;\n }\n\n @Input() set focusedIndex(value: number) {\n if (this._focusedIndex !== value) {\n this._focusedIndex = value;\n this.scrollItemIntoView(this._focusedIndex);\n }\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n placeholder = 'Please select:';\n\n @Input() set popout(direction: HorizontalDirection | `${HorizontalDirection}`) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n\n get popout() {\n return this.horizontalDirection;\n }\n\n @Input()\n attentionLevel: '1' | '2' | '3' = '3';\n\n @Input()\n expand?: 'block';\n\n @Input()\n disabled = false;\n\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n private _hasError: boolean;\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @Input()\n size: 'sm' | 'md' = 'md';\n\n // Tabindex defaults to 0 instead of no value to align tabbing behavior in Safari\n // with other browsers and the default select behavior: https://mayank.co/blog/safari-focus/\n @Input()\n tabindex = 0;\n\n @HostBinding('class.with-popover')\n @Input()\n usePopover = false;\n\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n get _noBlurOnScroll() {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output() change: EventEmitter<string | any> = new EventEmitter<string | any>();\n\n private _value: string | any = null;\n get value(): string | any {\n return this._value;\n }\n\n get selectedText(): string {\n return this.getTextFromItem(this.value);\n }\n\n @HostBinding('class.expand')\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('class.is-opening')\n get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.popout-left')\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n\n @HostBinding('class.popout-up')\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n\n /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.\n There is a bug that causes the dropdown to get a focus ring on click, if it is the first element that is interacted with\n after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.\n See issue: https://github.com/kirbydesign/designsystem/issues/2477.\n\n This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible\n to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized\n by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when\n clicking outside of the dropdown.\n */\n @HostBinding('class.clicked')\n clicked = false;\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n slottedItems: QueryList<ElementRef<HTMLElement>>;\n @ViewChild(CardComponent, { read: ElementRef })\n cardElement: ElementRef<HTMLElement>;\n @ViewChild(PopoverComponent)\n popover?: PopoverComponent;\n @ViewChild(ButtonComponent, { static: true, read: ElementRef })\n buttonElement: ElementRef<HTMLElement>;\n\n private forwardAriaLabelToDropdownButton() {\n forwardAttributes(\n this.elementRef.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.buttonElement.nativeElement\n );\n }\n @ViewChildren(ItemComponent, { read: ElementRef })\n kirbyItemsDefault: QueryList<ElementRef<HTMLElement>>;\n\n _kirbyItemsSlotted: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n set kirbyItemsSlotted(kirbyItems: QueryList<ElementRef<HTMLElement>>) {\n const hasSlottedItems = this.disposeItemClickListeners?.length > 0;\n if (hasSlottedItems) {\n this.unlistenAllSlottedItems();\n }\n\n // Setup a click listener for each new slotted items\n kirbyItems.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const disposeClickListener: EventListenerDisposeFn = this.renderer.listen(\n kirbyItem.nativeElement,\n 'click',\n () => {\n this.onItemSelect(index);\n }\n );\n\n this.disposeItemClickListeners.push(disposeClickListener);\n });\n\n this._kirbyItemsSlotted = kirbyItems;\n }\n\n get kirbyItemsSlotted(): QueryList<ElementRef<HTMLElement>> {\n return this._kirbyItemsSlotted;\n }\n\n private disposeItemClickListeners: EventListenerDisposeFn[] = [];\n private intersectionObserverRef: IntersectionObserver;\n private showDropdownTimeoutId: ReturnType<typeof setTimeout>;\n private searchBuffer: string = '';\n private searchBufferTimeout: ReturnType<typeof setTimeout>;\n private SEARCH_BUFFER_DELAY = 500; // ms\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n private keyboardHandlerService: KeyboardHandlerService,\n private resizeObserverService: ResizeObserverService\n ) {}\n\n onToggle(event: MouseEvent) {\n event.stopPropagation();\n\n this.clicked = true;\n\n this.toggle();\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n /* Utility that makes it easier to set styles on card element\n when using popover*/\n private setPopoverCardStyle(style: string, value: string) {\n if (!this.usePopover) return;\n\n this.renderer.setStyle(\n this.cardElement.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n // Ensure initial width is set even if the resize observer callback also fires initially:\n this.setPopoverCardStyle('--kirby-card-width', `${initialWidth}px`);\n\n this.resizeObserverService.observe(this.elementRef, (entry) => {\n const newWidth = entry.contentRect.width;\n if (newWidth > 0) {\n this.setPopoverCardStyle('--kirby-card-width', `${newWidth}px`);\n }\n });\n }\n this.forwardAriaLabelToDropdownButton();\n this.initializeAlignment();\n }\n\n private initializeAlignment() {\n if (this.usePopover) return;\n if (!this.intersectionObserverRef) {\n // Get the design token size of the button. In the button stylesheet a medium button height is utils.size(xl)\n // and a small button height is utils.size(\"l\")\n const designTokenSizeHeight = this.size === 'md' ? 'xl' : 'l';\n\n // Setting the rootMargin equal to the height of the button\n // allows the Intersection Observer Callback to be called\n // even if the dropdown button is intersecting with the viewport\n const options = {\n rootMargin: DesignTokenHelper.size(designTokenSizeHeight),\n };\n const callback: IntersectionObserverCallback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.cdr.markForCheck();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n\n private setHorizontalDirection(entry: IntersectionObserverEntry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n } else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n\n private setVerticalDirection(entry: IntersectionObserverEntry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(\n () => this.showDropdown(),\n DropdownComponent.OPEN_DELAY_IN_MS\n );\n\n // Move focus to selected item (if any) or first item\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n }\n\n private showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.focusedIndex);\n this.cdr.markForCheck();\n }\n }\n\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n\n onItemSelect(index: number) {\n this.selectItem(index);\n this.close();\n }\n\n private _onChange: (value: any) => void = () => {};\n private _onTouched = () => {};\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._selectItemByValue(value);\n this.cdr.markForCheck();\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n private selectItem(index: number) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.focusedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n }\n }\n\n private _selectItemByValue(value: string | any) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n getTextFromItem(item: string | any) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n scrollItemIntoView(index: number) {\n const kirbyItems =\n this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n itemElement.scrollIntoView({ block: 'nearest' });\n }\n }\n }\n\n @HostListener('keydown.tab')\n _onTab() {\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n\n if (this.clicked) {\n // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,\n // since the class prevents the focus ring from showing,\n // which is expected to happen, when using the tab key\n this.clicked = false;\n }\n }\n\n private preventDefaultAndStopImmediatePropagation(event: KeyboardEvent) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n private addToSearchBuffer(char: string) {\n clearTimeout(this.searchBufferTimeout);\n this.searchBuffer += char;\n this.searchBufferTimeout = setTimeout(() => {\n this.resetSearchBuffer();\n }, this.SEARCH_BUFFER_DELAY);\n }\n private resetSearchBuffer() {\n this.searchBuffer = '';\n }\n\n @HostListener('keydown', ['$event'])\n _onKeydown(event: KeyboardEvent) {\n const key = event.key;\n\n if (this.items.length === 0) {\n console.warn('[Kirby] No items found within dropdown');\n return;\n }\n\n if (this.disabled) return;\n\n if (StringSearchHelper.isPrintableCharacter(key)) {\n this.handlePrintableCharacterKey(event, this.isOpen);\n }\n\n // ALT + ArrowDown: Open dropdown\n if (key === 'ArrowDown' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;\n }\n return;\n }\n\n // ALT + ArrowUp: Select focused item and close dropdown\n if (key === 'ArrowUp' && event.altKey) {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (this.focusedIndex > -1) {\n this.selectItem(this.focusedIndex);\n this.close();\n }\n }\n // PageUp: Jump up 10 options or to first\n if (key === 'PageUp') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.max(0, this.focusedIndex - 10);\n return;\n }\n\n // PageDown: Jump down 10 options or to last\n if (key === 'PageDown') {\n this.preventDefaultAndStopImmediatePropagation(event);\n if (!this.isOpen) {\n this.open();\n }\n this.focusedIndex = Math.min(this.items.length - 1, this.focusedIndex + 10);\n return;\n }\n }\n\n private handlePrintableCharacterKey(event: KeyboardEvent, isOpen: boolean) {\n const key = event.key;\n\n if (isOpen) {\n this.preventDefaultAndStopImmediatePropagation(event);\n } else {\n this.open();\n }\n\n // If the same character is typed twice, the search buffer should only contain that character once\n if (\n this.searchBuffer.length === 1 &&\n this.searchBuffer[0].toLowerCase() === key.toLowerCase()\n ) {\n this.searchBuffer = key;\n } else {\n this.addToSearchBuffer(key);\n }\n\n const isMultiCharSearch = this.searchBuffer.length > 1;\n let startIndex = 0;\n\n if (!isMultiCharSearch && this.isOpen) {\n startIndex = this.focusedIndex + 1;\n }\n\n let foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, startIndex);\n\n if (foundItemIndex === -1 && isMultiCharSearch) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(key, startIndex);\n }\n\n if (foundItemIndex === -1 && !isMultiCharSearch && this.isOpen) {\n foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, 0);\n }\n\n if (foundItemIndex > -1) {\n this.focusedIndex = foundItemIndex;\n }\n }\n\n private getIndexOfItemByFirstCharacter(char: string, startIndex: number = 0) {\n let itemTexts: string[];\n // Prefer slotted/projected items if present\n if (this.kirbyItemsSlotted && this.kirbyItemsSlotted.length) {\n itemTexts = this.kirbyItemsSlotted\n .toArray()\n .map((ref) => ref.nativeElement.textContent?.trim() ?? '');\n } else {\n itemTexts = this.items.map((item) => this.getTextFromItem(item) ?? '');\n }\n\n return StringSearchHelper.getIndexByFirstMatchingStartString(char, itemTexts, startIndex);\n }\n\n @HostListener('mousedown', ['$event'])\n _onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('touchstart', ['$event'])\n _onTouchStart(event: TouchEvent) {\n if (this.isOpen) {\n event.stopPropagation();\n }\n }\n\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.buttonElement.nativeElement.focus();\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.escape')\n _onEnterOrEscape() {\n this.close();\n this._onTouched();\n }\n\n _onPopoverClick() {\n this.close();\n }\n\n _onBlur() {\n if (this.usePopover) return;\n this.close();\n this._onTouched();\n }\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.space', ['$event'])\n _onEnterOrSpace(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isOpen) {\n this.selectItem(this.focusedIndex);\n }\n this.toggle();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n @HostListener('keydown.arrowdown', ['$event'])\n @HostListener('keydown.arrowleft', ['$event'])\n @HostListener('keydown.arrowright', ['$event'])\n _onArrowKeys(event: KeyboardEvent) {\n if (this.disabled) return false;\n\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return false;\n }\n\n if (!this.isOpen) {\n // Avoid page scroll\n event.preventDefault();\n this.open();\n\n // If no selected item then focus first or last item\n if (!event.altKey && this.selectedIndex < 0) {\n switch (event.key) {\n case 'ArrowUp':\n this.focusedIndex = 0;\n break;\n case 'ArrowDown':\n this.focusedIndex = this.items.length - 1;\n break;\n default:\n break;\n }\n }\n return false;\n }\n\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n _onHomeEndKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n if (!this.isOpen) {\n event.preventDefault();\n this.open();\n }\n const newFocusedIndex = this.keyboardHandlerService.handle(\n event,\n this.focusedIndex,\n this.items.length - 1\n );\n if (newFocusedIndex > -1) {\n this.focusedIndex = newFocusedIndex;\n }\n return false;\n }\n\n private unlistenAllSlottedItems() {\n let disposeClickListener: EventListenerDisposeFn;\n while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== undefined) {\n disposeClickListener();\n }\n }\n\n ngOnDestroy(): void {\n this.unlistenAllSlottedItems();\n this.resizeObserverService.unobserve(this.elementRef);\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n}\n","<button\n kirby-button\n type=\"button\"\n [attr.id]=\"_comboboxId\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"_listboxId\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-activedescendant]=\"_listboxId + '-item-' + focusedIndex\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\n (blur)=\"_onBlur()\"\n [disabled]=\"disabled\"\n [tabindex]=\"_tabindex\"\n>\n <span class=\"text\">{{ selectedText || placeholder }}</span>\n <kirby-icon [name]=\"isOpen ? 'arrow-up' : 'arrow-down'\"></kirby-icon>\n</button>\n\n<ng-container *ngTemplateOutlet=\"usePopover ? popoverTemplate : itemWrapperTemplate\"></ng-container>\n\n<ng-template #popoverTemplate>\n <kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n >\n <ng-container *ngTemplateOutlet=\"itemWrapperTemplate\"></ng-container>\n </kirby-popover>\n</ng-template>\n\n<ng-template #itemWrapperTemplate>\n <kirby-card role=\"listbox\" [attr.id]=\"_listboxId\" [attr.aria-labelledby]=\"_comboboxId\">\n @for (item of items; track item; let i = $index) {\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate || defaultItemTemplate;\n context: {\n $implicit: item,\n selected: i === selectedIndex,\n focused: i === focusedIndex,\n index: i,\n }\n \"\n ></ng-container>\n }\n </kirby-card>\n</ng-template>\n\n<ng-template\n #defaultItemTemplate\n let-item\n let-selected=\"selected\"\n let-index=\"index\"\n let-focused=\"focused\"\n>\n <kirby-item\n [selectable]=\"true\"\n [selected]=\"selected\"\n (click)=\"onItemSelect(index)\"\n [class.focused]=\"focused\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\n <!-- Tabindex fixes issue with popover dropdown not working in safari -->\n <p class=\"kirby-item-title\">{{ getTextFromItem(item) }}</p>\n @if (selected) {\n <kirby-icon name=\"checkmark-selected\" slot=\"end\"></kirby-icon>\n }\n </kirby-item>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ItemModule } from '@kirbydesign/designsystem/item';\nimport { PopoverComponent } from '@kirbydesign/designsystem/popover';\n\nimport { ListItemTemplateDirective, ListModule } from '@kirbydesign/designsystem/list';\nimport { DropdownComponent } from './dropdown.component';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@NgModule({\n imports: [\n CardModule,\n IconModule,\n ItemModule,\n PopoverComponent,\n ButtonComponent,\n CommonModule,\n ListModule,\n DropdownComponent,\n ],\n exports: [DropdownComponent, ListItemTemplateDirective],\n providers: [KeyboardHandlerService],\n})\nexport class DropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.KeyboardHandlerService"],"mappings":"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"}