@kirbydesign/designsystem 11.11.3 → 12.0.0-dev-67d5287

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 (282) hide show
  1. package/fesm2022/kirbydesign-designsystem-accordion.mjs +246 -135
  2. package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
  3. package/fesm2022/kirbydesign-designsystem-action-group.mjs +229 -134
  4. package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
  5. package/fesm2022/kirbydesign-designsystem-avatar.mjs +102 -55
  6. package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
  7. package/fesm2022/kirbydesign-designsystem-badge.mjs +85 -42
  8. package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
  9. package/fesm2022/kirbydesign-designsystem-button.mjs +203 -170
  10. package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
  11. package/fesm2022/kirbydesign-designsystem-calendar.mjs +524 -516
  12. package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
  13. package/fesm2022/kirbydesign-designsystem-card.mjs +439 -205
  14. package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
  15. package/fesm2022/kirbydesign-designsystem-chart.mjs +1388 -1469
  16. package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
  17. package/fesm2022/kirbydesign-designsystem-checkbox.mjs +215 -176
  18. package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
  19. package/fesm2022/kirbydesign-designsystem-config.mjs +50 -96
  20. package/fesm2022/kirbydesign-designsystem-config.mjs.map +1 -1
  21. package/fesm2022/kirbydesign-designsystem-data-table.mjs +180 -83
  22. package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
  23. package/fesm2022/kirbydesign-designsystem-divider.mjs +46 -19
  24. package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
  25. package/fesm2022/kirbydesign-designsystem-dropdown.mjs +878 -752
  26. package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
  27. package/fesm2022/kirbydesign-designsystem-empty-state.mjs +164 -91
  28. package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
  29. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +213 -85
  30. package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
  31. package/fesm2022/kirbydesign-designsystem-flag.mjs +67 -33
  32. package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
  33. package/fesm2022/kirbydesign-designsystem-form-field.mjs +1260 -901
  34. package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
  35. package/fesm2022/kirbydesign-designsystem-gesture.mjs +38 -23
  36. package/fesm2022/kirbydesign-designsystem-gesture.mjs.map +1 -1
  37. package/fesm2022/kirbydesign-designsystem-header.mjs +422 -182
  38. package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
  39. package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs +16 -14
  40. package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
  41. package/fesm2022/kirbydesign-designsystem-helpers.mjs +251 -361
  42. package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
  43. package/fesm2022/kirbydesign-designsystem-icon.mjs +881 -303
  44. package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
  45. package/fesm2022/kirbydesign-designsystem-item-group.mjs +52 -23
  46. package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
  47. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +147 -43
  48. package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
  49. package/fesm2022/kirbydesign-designsystem-item.mjs +395 -151
  50. package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
  51. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +136 -54
  52. package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
  53. package/fesm2022/kirbydesign-designsystem-list.mjs +1185 -697
  54. package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
  55. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +166 -76
  56. package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
  57. package/fesm2022/kirbydesign-designsystem-menu.mjs +420 -311
  58. package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
  59. package/fesm2022/kirbydesign-designsystem-modal.mjs +2467 -1912
  60. package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
  61. package/fesm2022/kirbydesign-designsystem-page.mjs +1505 -905
  62. package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
  63. package/fesm2022/kirbydesign-designsystem-popover.mjs +203 -183
  64. package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
  65. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +209 -121
  66. package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
  67. package/fesm2022/kirbydesign-designsystem-radio.mjs +537 -365
  68. package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
  69. package/fesm2022/kirbydesign-designsystem-range.mjs +207 -150
  70. package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
  71. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +217 -104
  72. package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
  73. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +113 -38
  74. package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
  75. package/fesm2022/kirbydesign-designsystem-section-header.mjs +56 -18
  76. package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
  77. package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +276 -232
  78. package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
  79. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +319 -382
  80. package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
  81. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +73 -84
  82. package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
  83. package/fesm2022/kirbydesign-designsystem-shared.mjs +665 -529
  84. package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
  85. package/fesm2022/kirbydesign-designsystem-slide-button.mjs +140 -91
  86. package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
  87. package/fesm2022/kirbydesign-designsystem-slide.mjs +360 -158
  88. package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
  89. package/fesm2022/kirbydesign-designsystem-spinner.mjs +90 -32
  90. package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
  91. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +348 -181
  92. package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
  93. package/fesm2022/kirbydesign-designsystem-tabs.mjs +286 -121
  94. package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
  95. package/fesm2022/kirbydesign-designsystem-testing-base.mjs +6232 -3164
  96. package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
  97. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +118 -95
  98. package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
  99. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +128 -101
  100. package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
  101. package/fesm2022/kirbydesign-designsystem-testing.mjs +236 -243
  102. package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
  103. package/fesm2022/kirbydesign-designsystem-toast.mjs +98 -62
  104. package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
  105. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +155 -127
  106. package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
  107. package/fesm2022/kirbydesign-designsystem-toggle.mjs +180 -150
  108. package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
  109. package/fesm2022/kirbydesign-designsystem-types.mjs +39 -24
  110. package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
  111. package/fesm2022/kirbydesign-designsystem.mjs +516 -407
  112. package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
  113. package/icons/svg/megaphone.svg +3 -0
  114. package/package.json +10 -10
  115. package/readme.md +37 -0
  116. package/types/kirbydesign-designsystem-accordion.d.ts +72 -39
  117. package/types/kirbydesign-designsystem-accordion.d.ts.map +1 -1
  118. package/types/kirbydesign-designsystem-action-group.d.ts +46 -39
  119. package/types/kirbydesign-designsystem-action-group.d.ts.map +1 -1
  120. package/types/kirbydesign-designsystem-avatar.d.ts +62 -26
  121. package/types/kirbydesign-designsystem-avatar.d.ts.map +1 -1
  122. package/types/kirbydesign-designsystem-badge.d.ts +30 -19
  123. package/types/kirbydesign-designsystem-badge.d.ts.map +1 -1
  124. package/types/kirbydesign-designsystem-button.d.ts +70 -45
  125. package/types/kirbydesign-designsystem-button.d.ts.map +1 -1
  126. package/types/kirbydesign-designsystem-calendar.d.ts +193 -132
  127. package/types/kirbydesign-designsystem-calendar.d.ts.map +1 -1
  128. package/types/kirbydesign-designsystem-card.d.ts +130 -66
  129. package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
  130. package/types/kirbydesign-designsystem-chart.d.ts +198 -172
  131. package/types/kirbydesign-designsystem-chart.d.ts.map +1 -1
  132. package/types/kirbydesign-designsystem-checkbox.d.ts +96 -68
  133. package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
  134. package/types/kirbydesign-designsystem-config.d.ts +17 -21
  135. package/types/kirbydesign-designsystem-config.d.ts.map +1 -1
  136. package/types/kirbydesign-designsystem-data-table.d.ts +46 -26
  137. package/types/kirbydesign-designsystem-data-table.d.ts.map +1 -1
  138. package/types/kirbydesign-designsystem-divider.d.ts +11 -9
  139. package/types/kirbydesign-designsystem-divider.d.ts.map +1 -1
  140. package/types/kirbydesign-designsystem-dropdown.d.ts +219 -166
  141. package/types/kirbydesign-designsystem-dropdown.d.ts.map +1 -1
  142. package/types/kirbydesign-designsystem-empty-state.d.ts +47 -35
  143. package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
  144. package/types/kirbydesign-designsystem-fab-sheet.d.ts +34 -28
  145. package/types/kirbydesign-designsystem-fab-sheet.d.ts.map +1 -1
  146. package/types/kirbydesign-designsystem-flag.d.ts +18 -13
  147. package/types/kirbydesign-designsystem-flag.d.ts.map +1 -1
  148. package/types/kirbydesign-designsystem-form-field.d.ts +409 -242
  149. package/types/kirbydesign-designsystem-form-field.d.ts.map +1 -1
  150. package/types/kirbydesign-designsystem-gesture.d.ts +41 -46
  151. package/types/kirbydesign-designsystem-gesture.d.ts.map +1 -1
  152. package/types/kirbydesign-designsystem-header.d.ts +102 -64
  153. package/types/kirbydesign-designsystem-header.d.ts.map +1 -1
  154. package/types/kirbydesign-designsystem-helpers-scss.d.ts +6 -8
  155. package/types/kirbydesign-designsystem-helpers-scss.d.ts.map +1 -1
  156. package/types/kirbydesign-designsystem-helpers.d.ts +83 -97
  157. package/types/kirbydesign-designsystem-helpers.d.ts.map +1 -1
  158. package/types/kirbydesign-designsystem-icon.d.ts +63 -59
  159. package/types/kirbydesign-designsystem-icon.d.ts.map +1 -1
  160. package/types/kirbydesign-designsystem-item-group.d.ts +6 -9
  161. package/types/kirbydesign-designsystem-item-group.d.ts.map +1 -1
  162. package/types/kirbydesign-designsystem-item-sliding.d.ts +30 -26
  163. package/types/kirbydesign-designsystem-item-sliding.d.ts.map +1 -1
  164. package/types/kirbydesign-designsystem-item.d.ts +93 -54
  165. package/types/kirbydesign-designsystem-item.d.ts.map +1 -1
  166. package/types/kirbydesign-designsystem-kirby-app.d.ts +18 -19
  167. package/types/kirbydesign-designsystem-kirby-app.d.ts.map +1 -1
  168. package/types/kirbydesign-designsystem-list.d.ts +387 -263
  169. package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
  170. package/types/kirbydesign-designsystem-loading-overlay.d.ts +35 -24
  171. package/types/kirbydesign-designsystem-loading-overlay.d.ts.map +1 -1
  172. package/types/kirbydesign-designsystem-menu.d.ts +119 -69
  173. package/types/kirbydesign-designsystem-menu.d.ts.map +1 -1
  174. package/types/kirbydesign-designsystem-modal.d.ts +577 -455
  175. package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
  176. package/types/kirbydesign-designsystem-page.d.ts +304 -226
  177. package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
  178. package/types/kirbydesign-designsystem-popover.d.ts +48 -40
  179. package/types/kirbydesign-designsystem-popover.d.ts.map +1 -1
  180. package/types/kirbydesign-designsystem-progress-circle.d.ts +60 -38
  181. package/types/kirbydesign-designsystem-progress-circle.d.ts.map +1 -1
  182. package/types/kirbydesign-designsystem-radio.d.ts +147 -98
  183. package/types/kirbydesign-designsystem-radio.d.ts.map +1 -1
  184. package/types/kirbydesign-designsystem-range.d.ts +90 -45
  185. package/types/kirbydesign-designsystem-range.d.ts.map +1 -1
  186. package/types/kirbydesign-designsystem-reorder-list.d.ts +44 -32
  187. package/types/kirbydesign-designsystem-reorder-list.d.ts.map +1 -1
  188. package/types/kirbydesign-designsystem-router-outlet.d.ts +23 -18
  189. package/types/kirbydesign-designsystem-router-outlet.d.ts.map +1 -1
  190. package/types/kirbydesign-designsystem-section-header.d.ts +5 -8
  191. package/types/kirbydesign-designsystem-section-header.d.ts.map +1 -1
  192. package/types/kirbydesign-designsystem-segmented-control.d.ts +123 -100
  193. package/types/kirbydesign-designsystem-segmented-control.d.ts.map +1 -1
  194. package/types/kirbydesign-designsystem-shared-floating.d.ts +183 -128
  195. package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
  196. package/types/kirbydesign-designsystem-shared-portal.d.ts +29 -28
  197. package/types/kirbydesign-designsystem-shared-portal.d.ts.map +1 -1
  198. package/types/kirbydesign-designsystem-shared.d.ts +143 -139
  199. package/types/kirbydesign-designsystem-shared.d.ts.map +1 -1
  200. package/types/kirbydesign-designsystem-slide-button.d.ts +43 -34
  201. package/types/kirbydesign-designsystem-slide-button.d.ts.map +1 -1
  202. package/types/kirbydesign-designsystem-slide.d.ts +80 -59
  203. package/types/kirbydesign-designsystem-slide.d.ts.map +1 -1
  204. package/types/kirbydesign-designsystem-spinner.d.ts +13 -14
  205. package/types/kirbydesign-designsystem-spinner.d.ts.map +1 -1
  206. package/types/kirbydesign-designsystem-tab-navigation.d.ts +78 -55
  207. package/types/kirbydesign-designsystem-tab-navigation.d.ts.map +1 -1
  208. package/types/kirbydesign-designsystem-tabs.d.ts +50 -45
  209. package/types/kirbydesign-designsystem-tabs.d.ts.map +1 -1
  210. package/types/kirbydesign-designsystem-testing-base.d.ts +2430 -815
  211. package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
  212. package/types/kirbydesign-designsystem-testing-jasmine.d.ts +9 -10
  213. package/types/kirbydesign-designsystem-testing-jasmine.d.ts.map +1 -1
  214. package/types/kirbydesign-designsystem-testing-jest.d.ts +9 -10
  215. package/types/kirbydesign-designsystem-testing-jest.d.ts.map +1 -1
  216. package/types/kirbydesign-designsystem-testing.d.ts +52 -58
  217. package/types/kirbydesign-designsystem-testing.d.ts.map +1 -1
  218. package/types/kirbydesign-designsystem-toast.d.ts +25 -31
  219. package/types/kirbydesign-designsystem-toast.d.ts.map +1 -1
  220. package/types/kirbydesign-designsystem-toggle-button.d.ts +62 -56
  221. package/types/kirbydesign-designsystem-toggle-button.d.ts.map +1 -1
  222. package/types/kirbydesign-designsystem-toggle.d.ts +71 -63
  223. package/types/kirbydesign-designsystem-toggle.d.ts.map +1 -1
  224. package/types/kirbydesign-designsystem-types.d.ts +15 -22
  225. package/types/kirbydesign-designsystem-types.d.ts.map +1 -1
  226. package/types/kirbydesign-designsystem.d.ts +135 -123
  227. package/types/kirbydesign-designsystem.d.ts.map +1 -1
  228. package/accordion/package.json +0 -4
  229. package/action-group/package.json +0 -4
  230. package/avatar/package.json +0 -4
  231. package/badge/package.json +0 -4
  232. package/button/package.json +0 -4
  233. package/calendar/package.json +0 -4
  234. package/card/package.json +0 -4
  235. package/chart/package.json +0 -4
  236. package/checkbox/package.json +0 -4
  237. package/config/package.json +0 -4
  238. package/data-table/package.json +0 -4
  239. package/divider/package.json +0 -4
  240. package/dropdown/package.json +0 -4
  241. package/empty-state/package.json +0 -4
  242. package/fab-sheet/package.json +0 -4
  243. package/flag/package.json +0 -4
  244. package/form-field/package.json +0 -4
  245. package/gesture/package.json +0 -4
  246. package/header/package.json +0 -4
  247. package/helpers/package.json +0 -4
  248. package/helpers/scss/package.json +0 -4
  249. package/icon/package.json +0 -4
  250. package/item/package.json +0 -4
  251. package/item-group/package.json +0 -4
  252. package/item-sliding/package.json +0 -4
  253. package/kirby-app/package.json +0 -4
  254. package/list/package.json +0 -4
  255. package/loading-overlay/package.json +0 -4
  256. package/menu/package.json +0 -4
  257. package/modal/package.json +0 -4
  258. package/page/package.json +0 -4
  259. package/popover/package.json +0 -4
  260. package/progress-circle/package.json +0 -4
  261. package/radio/package.json +0 -4
  262. package/range/package.json +0 -4
  263. package/reorder-list/package.json +0 -4
  264. package/router-outlet/package.json +0 -4
  265. package/section-header/package.json +0 -4
  266. package/segmented-control/package.json +0 -4
  267. package/shared/floating/package.json +0 -4
  268. package/shared/package.json +0 -4
  269. package/shared/portal/package.json +0 -4
  270. package/slide/package.json +0 -4
  271. package/slide-button/package.json +0 -4
  272. package/spinner/package.json +0 -4
  273. package/tab-navigation/package.json +0 -4
  274. package/tabs/package.json +0 -4
  275. package/testing/package.json +0 -4
  276. package/testing-base/package.json +0 -4
  277. package/testing-jasmine/package.json +0 -4
  278. package/testing-jest/package.json +0 -4
  279. package/toast/package.json +0 -4
  280. package/toggle/package.json +0 -4
  281. package/toggle-button/package.json +0 -4
  282. package/types/package.json +0 -4
@@ -1,756 +1,882 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, RendererStyleFlags2, ElementRef, TemplateRef, forwardRef, HostListener, ContentChildren, ViewChildren, ViewChild, ContentChild, HostBinding, Output, Input, Component, NgModule } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { CardComponent, CardModule } from '@kirbydesign/designsystem/card';
5
- import { UniqueIdGenerator, StringSearchHelper } from '@kirbydesign/designsystem/helpers';
6
- import { ItemComponent, ItemModule } from '@kirbydesign/designsystem/item';
7
- import { ListItemTemplateDirective, ListModule } from '@kirbydesign/designsystem/list';
8
- import { HorizontalDirection, PopoverComponent } from '@kirbydesign/designsystem/popover';
9
- import { ButtonComponent } from '@kirbydesign/designsystem/button';
10
- import { FORM_FIELD_CONTROL } from '@kirbydesign/designsystem/types';
11
- import * as i2 from '@kirbydesign/designsystem/shared';
12
- import { forwardAttributes } from '@kirbydesign/designsystem/shared';
13
- import { IconComponent, IconModule } from '@kirbydesign/designsystem/icon';
14
- import { NgTemplateOutlet, CommonModule } from '@angular/common';
15
-
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Injectable, Input, NgModule, Output, RendererStyleFlags2, TemplateRef, ViewChild, ViewChildren, forwardRef } from "@angular/core";
3
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
+ import { CardComponent, CardModule } from "@kirbydesign/designsystem/card";
5
+ import { StringSearchHelper, UniqueIdGenerator } from "@kirbydesign/designsystem/helpers";
6
+ import { ItemComponent, ItemModule } from "@kirbydesign/designsystem/item";
7
+ import { ListItemTemplateDirective, ListModule } from "@kirbydesign/designsystem/list";
8
+ import { HorizontalDirection, PopoverComponent } from "@kirbydesign/designsystem/popover";
9
+ import { ButtonComponent } from "@kirbydesign/designsystem/button";
10
+ import { FORM_FIELD_CONTROL } from "@kirbydesign/designsystem/types";
11
+ import * as i2 from "@kirbydesign/designsystem/shared";
12
+ import { forwardAttributes } from "@kirbydesign/designsystem/shared";
13
+ import { IconComponent, IconModule } from "@kirbydesign/designsystem/icon";
14
+ import { CommonModule, NgTemplateOutlet } from "@angular/common";
16
15
  var OpenState;
17
- (function (OpenState) {
18
- OpenState[OpenState["closed"] = 0] = "closed";
19
- OpenState[OpenState["opening"] = 1] = "opening";
20
- OpenState[OpenState["open"] = 2] = "open";
16
+ (function(OpenState) {
17
+ OpenState[OpenState["closed"] = 0] = "closed";
18
+ OpenState[OpenState["opening"] = 1] = "opening";
19
+ OpenState[OpenState["open"] = 2] = "open";
21
20
  })(OpenState || (OpenState = {}));
22
-
23
- class KeyboardHandlerService {
24
- handle(event, selectedIndex, maxIndex, cyclicIndex = false) {
25
- let newIndex = -1;
26
- switch (event.key) {
27
- case 'ArrowUp':
28
- case 'ArrowLeft':
29
- if (selectedIndex === 0 && cyclicIndex) {
30
- newIndex = maxIndex;
31
- }
32
- else {
33
- // Select previous item:
34
- newIndex = selectedIndex - 1;
35
- }
36
- break;
37
- case 'ArrowDown':
38
- case 'ArrowRight':
39
- if (selectedIndex === undefined || (selectedIndex === maxIndex && cyclicIndex)) {
40
- // None selected, select first item:
41
- newIndex = 0;
42
- }
43
- else if (selectedIndex < maxIndex) {
44
- // Select next item:
45
- newIndex = selectedIndex + 1;
46
- }
47
- break;
48
- case 'Home':
49
- // Select first item:
50
- newIndex = 0;
51
- break;
52
- case 'End':
53
- // Select last item:
54
- newIndex = maxIndex;
55
- break;
56
- default:
57
- break;
58
- }
59
- return newIndex;
60
- }
61
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: KeyboardHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
62
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: KeyboardHandlerService, providedIn: 'root' }); }
63
- }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: KeyboardHandlerService, decorators: [{
65
- type: Injectable,
66
- args: [{
67
- providedIn: 'root',
68
- }]
69
- }] });
70
-
71
- class DropdownComponent {
72
- static { this.OPEN_DELAY_IN_MS = 100; }
73
- get items() {
74
- return this._items;
75
- }
76
- set items(value) {
77
- this._items = value;
78
- this._value = this.items[this.selectedIndex] || null;
79
- }
80
- get selectedIndex() {
81
- return this._selectedIndex;
82
- }
83
- set selectedIndex(value) {
84
- if (value !== undefined && this._selectedIndex != value) {
85
- this._selectedIndex = value;
86
- this.focusedIndex = this._selectedIndex;
87
- this._value = this.items[this.selectedIndex] || null;
88
- }
89
- }
90
- get focusedIndex() {
91
- return this._focusedIndex;
92
- }
93
- set focusedIndex(value) {
94
- if (this._focusedIndex !== value) {
95
- this._focusedIndex = value;
96
- this.scrollItemIntoView(this._focusedIndex);
97
- }
98
- }
99
- set popout(direction) {
100
- this._popout = direction || HorizontalDirection.right;
101
- }
102
- get popout() {
103
- return this._popout;
104
- }
105
- get _isDisabled() {
106
- return this.disabled ? 'disabled' : null;
107
- }
108
- get hasError() {
109
- return this._hasError;
110
- }
111
- set hasError(value) {
112
- if (this._hasError !== value) {
113
- this._hasError = value;
114
- this.hasErrorChange.emit(this._hasError);
115
- }
116
- }
117
- /**
118
- * @deprecated This input is no longer needed. The dropdown now always uses popover positioning.
119
- * This input will be removed in a future major version.
120
- */
121
- set usePopover(_value) {
122
- console.warn(`[Kirby Dropdown] The 'usePopover' input is deprecated and no longer has any effect.
21
+ var KeyboardHandlerService = class KeyboardHandlerService {
22
+ handle(event, selectedIndex, maxIndex, cyclicIndex = false) {
23
+ let newIndex = -1;
24
+ switch (event.key) {
25
+ case "ArrowUp":
26
+ case "ArrowLeft":
27
+ if (selectedIndex === 0 && cyclicIndex) newIndex = maxIndex;
28
+ else newIndex = selectedIndex - 1;
29
+ break;
30
+ case "ArrowDown":
31
+ case "ArrowRight":
32
+ if (selectedIndex === void 0 || selectedIndex === maxIndex && cyclicIndex) newIndex = 0;
33
+ else if (selectedIndex < maxIndex) newIndex = selectedIndex + 1;
34
+ break;
35
+ case "Home":
36
+ newIndex = 0;
37
+ break;
38
+ case "End": newIndex = maxIndex;
39
+ }
40
+ return newIndex;
41
+ }
42
+ static {
43
+ this.ɵfac = i0.ɵɵngDeclareFactory({
44
+ minVersion: "12.0.0",
45
+ version: "22.2.2",
46
+ ngImport: i0,
47
+ type: KeyboardHandlerService,
48
+ deps: [],
49
+ target: i0.ɵɵFactoryTarget.Injectable
50
+ });
51
+ }
52
+ static {
53
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
54
+ minVersion: "12.0.0",
55
+ version: "22.2.2",
56
+ ngImport: i0,
57
+ type: KeyboardHandlerService,
58
+ providedIn: "root"
59
+ });
60
+ }
61
+ };
62
+ i0.ɵɵngDeclareClassMetadata({
63
+ minVersion: "12.0.0",
64
+ version: "22.2.2",
65
+ ngImport: i0,
66
+ type: KeyboardHandlerService,
67
+ decorators: [{
68
+ type: Injectable,
69
+ args: [{ providedIn: "root" }]
70
+ }]
71
+ });
72
+ var DropdownComponent = class DropdownComponent {
73
+ static {
74
+ this.OPEN_DELAY_IN_MS = 100;
75
+ }
76
+ get items() {
77
+ return this._items;
78
+ }
79
+ set items(value) {
80
+ this._items = value;
81
+ this._value = this.items[this.selectedIndex] || null;
82
+ }
83
+ get selectedIndex() {
84
+ return this._selectedIndex;
85
+ }
86
+ set selectedIndex(value) {
87
+ if (value !== void 0 && this._selectedIndex != value) {
88
+ this._selectedIndex = value;
89
+ this.focusedIndex = this._selectedIndex;
90
+ this._value = this.items[this.selectedIndex] || null;
91
+ }
92
+ }
93
+ get focusedIndex() {
94
+ return this._focusedIndex;
95
+ }
96
+ set focusedIndex(value) {
97
+ if (this._focusedIndex !== value) {
98
+ this._focusedIndex = value;
99
+ this.scrollItemIntoView(this._focusedIndex);
100
+ }
101
+ }
102
+ set popout(direction) {
103
+ this._popout = direction || HorizontalDirection.right;
104
+ }
105
+ get popout() {
106
+ return this._popout;
107
+ }
108
+ get _isDisabled() {
109
+ return this.disabled ? "disabled" : null;
110
+ }
111
+ get hasError() {
112
+ return this._hasError;
113
+ }
114
+ set hasError(value) {
115
+ if (this._hasError !== value) {
116
+ this._hasError = value;
117
+ this.hasErrorChange.emit(this._hasError);
118
+ }
119
+ }
120
+ set usePopover(_value) {
121
+ console.warn(`[Kirby Dropdown] The 'usePopover' input is deprecated and no longer has any effect.
123
122
  The dropdown now always uses popover positioning. This input will be removed in a future major version.`);
124
- }
125
- get _tabindex() {
126
- return this.disabled ? -1 : this.tabindex;
127
- }
128
- // Prevent Ionic blur on scroll
129
- get _noBlurOnScroll() {
130
- return true;
131
- }
132
- get value() {
133
- return this._value;
134
- }
135
- get selectedText() {
136
- return this.getTextFromItem(this.value);
137
- }
138
- get _isBlockLevel() {
139
- return this.expand === 'block';
140
- }
141
- get _isOpening() {
142
- return this.state === OpenState.opening;
143
- }
144
- get isOpen() {
145
- return this.state === OpenState.open;
146
- }
147
- get interactiveElement() {
148
- return this.buttonElement.nativeElement;
149
- }
150
- forwardAriaLabelToDropdownButton() {
151
- forwardAttributes(this.elementRef.nativeElement, this._attributesToForward, this.renderer, this.buttonElement.nativeElement);
152
- }
153
- set kirbyItemsSlotted(kirbyItems) {
154
- const hasSlottedItems = this.disposeItemClickListeners?.length > 0;
155
- if (hasSlottedItems) {
156
- this.unlistenAllSlottedItems();
157
- }
158
- // Setup a click listener for each new slotted items
159
- kirbyItems.forEach((kirbyItem) => {
160
- this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');
161
- const disposeClickListener = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {
162
- this.onItemSelect(this.domIndexOf(kirbyItem));
163
- });
164
- this.disposeItemClickListeners.push(disposeClickListener);
165
- });
166
- this._kirbyItemsSlotted = kirbyItems;
167
- }
168
- get kirbyItemsSlotted() {
169
- return this._kirbyItemsSlotted;
170
- }
171
- constructor(renderer, elementRef, cdr, keyboardHandlerService, resizeObserverService) {
172
- this.renderer = renderer;
173
- this.elementRef = elementRef;
174
- this.cdr = cdr;
175
- this.keyboardHandlerService = keyboardHandlerService;
176
- this.resizeObserverService = resizeObserverService;
177
- this.state = OpenState.closed;
178
- this._popout = HorizontalDirection.right;
179
- this._attributesToForward = ['aria-label', 'aria-labelledby'];
180
- this._listboxId = UniqueIdGenerator.scopedTo('kirby-dropdown').next();
181
- this._comboboxId = UniqueIdGenerator.scopedTo('kirby-button').next();
182
- this._items = [];
183
- this._selectedIndex = -1;
184
- // _focusedIndex keeps track of which element has focus and will be selected
185
- // if it is activated (by pressing ENTER or SPACE key)
186
- this._focusedIndex = 0;
187
- this.itemTextProperty = 'text';
188
- this.placeholder = 'Please select:';
189
- this.attentionLevel = '3';
190
- this.disabled = false;
191
- this.hasErrorChange = new EventEmitter();
192
- this.size = 'md';
193
- // Tabindex defaults to 0 instead of no value to align tabbing behavior in Safari
194
- // with other browsers and the default select behavior: https://mayank.co/blog/safari-focus/
195
- this.tabindex = 0;
196
- /**
197
- * Emitted when an item is selected (tap on mobile, click/keypress on web)
198
- */
199
- this.change = new EventEmitter();
200
- this._value = null;
201
- /* The 'clicked' class is applied through Hostbinding to prevent the dropdown from getting a focus ring on click.
202
- 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
203
- after the page is loaded. If the user interacts with any other element before, then the dropdown won't get a focus ring.
204
- See issue: https://github.com/kirbydesign/designsystem/issues/2477.
205
-
206
- This solution can potentially be refactored, when popover is not experimental anymore. Then it could be possible
207
- to close the dropdown when the popover backdrop is clicked, instead of relying on the blur event, which is utilized
208
- by this line below: this.elementRef.nativeElement.focus(). Right now this forces the blur event to be triggered, when
209
- clicking outside of the dropdown.
210
- */
211
- this.clicked = false;
212
- this.disposeItemClickListeners = [];
213
- this.searchBuffer = '';
214
- this.SEARCH_BUFFER_DELAY = 500; // ms
215
- this._onChange = () => { };
216
- this._onTouched = () => { };
217
- }
218
- onToggle(event) {
219
- event.stopPropagation();
220
- this.clicked = true;
221
- this.toggle();
222
- }
223
- toggle() {
224
- if (this.disabled) {
225
- return;
226
- }
227
- this.isOpen ? this.close() : this.open();
228
- }
229
- /* Utility that makes it easier to set styles on card element */
230
- setPopoverCardStyle(style, value) {
231
- this.renderer.setStyle(this.cardElement.nativeElement, style, value, RendererStyleFlags2.DashCase);
232
- }
233
- ngAfterViewInit() {
234
- if (this.expand === 'block') {
235
- const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();
236
- this.setPopoverCardStyle('max-width', 'initial');
237
- this.setPopoverCardStyle('min-width', 'initial');
238
- // Ensure initial width is set even if the resize observer callback also fires initially:
239
- this.setPopoverCardStyle('--kirby-card-width', `${initialWidth}px`);
240
- this.resizeObserverService.observe(this.elementRef, (entry) => {
241
- const newWidth = entry.contentRect.width;
242
- if (newWidth > 0) {
243
- this.setPopoverCardStyle('--kirby-card-width', `${newWidth}px`);
244
- }
245
- });
246
- }
247
- this.forwardAriaLabelToDropdownButton();
248
- }
249
- open() {
250
- if (this.disabled) {
251
- return;
252
- }
253
- if (!this.isOpen) {
254
- this.state = OpenState.opening;
255
- // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked
256
- setTimeout(() => this.showDropdown(), DropdownComponent.OPEN_DELAY_IN_MS);
257
- // Move focus to selected item (if any) or first item
258
- this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;
259
- }
260
- }
261
- showDropdown() {
262
- if (this.state === OpenState.opening) {
263
- this.state = OpenState.open;
264
- this.popover?.show();
265
- this.scrollItemIntoView(this.focusedIndex);
266
- this.cdr.markForCheck();
267
- }
268
- }
269
- close() {
270
- if (this.disabled) {
271
- return;
272
- }
273
- if (this.isOpen) {
274
- this.state = OpenState.closed;
275
- this.popover?.hide();
276
- }
277
- }
278
- onItemSelect(index) {
279
- this.selectItem(index);
280
- this.close();
281
- }
282
- /**
283
- * Sets the select's value. Part of the ControlValueAccessor interface
284
- * required to integrate with Angular's core forms API.
285
- *
286
- * @param value New value to be written to the model.
287
- */
288
- writeValue(value) {
289
- this._selectItemByValue(value);
290
- this.cdr.markForCheck();
291
- }
292
- /**
293
- * Saves a callback function to be invoked when the select's value
294
- * changes from user input. Part of the ControlValueAccessor interface
295
- * required to integrate with Angular's core forms API.
296
- *
297
- * @param fn Callback to be triggered when the value changes.
298
- */
299
- registerOnChange(fn) {
300
- this._onChange = fn;
301
- }
302
- /**
303
- * Saves a callback function to be invoked when the select is blurred
304
- * by the user. Part of the ControlValueAccessor interface required
305
- * to integrate with Angular's core forms API.
306
- *
307
- * @param fn Callback to be triggered when the component has been touched.
308
- */
309
- registerOnTouched(fn) {
310
- this._onTouched = fn;
311
- }
312
- /**
313
- * Disables the select. Part of the ControlValueAccessor interface required
314
- * to integrate with Angular's core forms API.
315
- *
316
- * @param isDisabled Sets whether the component is disabled.
317
- */
318
- setDisabledState(isDisabled) {
319
- this.disabled = isDisabled;
320
- this.cdr.markForCheck();
321
- }
322
- selectItem(index) {
323
- if (index != this.selectedIndex) {
324
- this.selectedIndex = index;
325
- this.focusedIndex = index;
326
- this.change.emit(this.value);
327
- this._onChange(this.value);
328
- }
329
- }
330
- _selectItemByValue(value) {
331
- this.selectedIndex = this.items.indexOf(value);
332
- }
333
- getTextFromItem(item) {
334
- if (!item) {
335
- return null;
336
- }
337
- return typeof item === 'string' ? item : item[this.itemTextProperty];
338
- }
339
- scrollItemIntoView(index) {
340
- const kirbyItems = this.kirbyItemsSlotted && this.kirbyItemsSlotted.length
341
- ? this.kirbyItemsSlotted
342
- : this.kirbyItemsDefault;
343
- if (kirbyItems && kirbyItems.length) {
344
- const selectedKirbyItem = kirbyItems.toArray()[index];
345
- if (selectedKirbyItem && selectedKirbyItem.nativeElement) {
346
- const itemElement = selectedKirbyItem.nativeElement;
347
- itemElement.scrollIntoView({ block: 'nearest' });
348
- }
349
- }
350
- }
351
- _onTab() {
352
- if (this.isOpen) {
353
- this.selectItem(this.focusedIndex);
354
- this.close();
355
- }
356
- if (this.clicked) {
357
- // Remove the 'clicked' class (Hostbinding) if the user has previously opened the dropdown by clicking,
358
- // since the class prevents the focus ring from showing,
359
- // which is expected to happen, when using the tab key
360
- this.clicked = false;
361
- }
362
- }
363
- preventDefaultAndStopImmediatePropagation(event) {
364
- event.stopImmediatePropagation();
365
- event.preventDefault();
366
- }
367
- addToSearchBuffer(char) {
368
- clearTimeout(this.searchBufferTimeout);
369
- this.searchBuffer += char;
370
- this.searchBufferTimeout = setTimeout(() => {
371
- this.resetSearchBuffer();
372
- }, this.SEARCH_BUFFER_DELAY);
373
- }
374
- resetSearchBuffer() {
375
- this.searchBuffer = '';
376
- }
377
- _onKeydown(event) {
378
- const key = event.key;
379
- if (this.items.length === 0) {
380
- console.warn('[Kirby] No items found within dropdown');
381
- return;
382
- }
383
- if (this.disabled)
384
- return;
385
- if (StringSearchHelper.isPrintableCharacter(key)) {
386
- this.handlePrintableCharacterKey(event, this.isOpen);
387
- }
388
- // ALT + ArrowDown: Open dropdown
389
- if (key === 'ArrowDown' && event.altKey) {
390
- this.preventDefaultAndStopImmediatePropagation(event);
391
- if (!this.isOpen) {
392
- this.open();
393
- this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;
394
- }
395
- return;
396
- }
397
- // ALT + ArrowUp: Select focused item and close dropdown
398
- if (key === 'ArrowUp' && event.altKey) {
399
- this.preventDefaultAndStopImmediatePropagation(event);
400
- if (this.focusedIndex > -1) {
401
- this.selectItem(this.focusedIndex);
402
- this.close();
403
- }
404
- }
405
- // PageUp: Jump up 10 options or to first
406
- if (key === 'PageUp') {
407
- this.preventDefaultAndStopImmediatePropagation(event);
408
- if (!this.isOpen) {
409
- this.open();
410
- }
411
- this.focusedIndex = Math.max(0, this.focusedIndex - 10);
412
- return;
413
- }
414
- // PageDown: Jump down 10 options or to last
415
- if (key === 'PageDown') {
416
- this.preventDefaultAndStopImmediatePropagation(event);
417
- if (!this.isOpen) {
418
- this.open();
419
- }
420
- this.focusedIndex = Math.min(this.items.length - 1, this.focusedIndex + 10);
421
- return;
422
- }
423
- }
424
- handlePrintableCharacterKey(event, isOpen) {
425
- const key = event.key;
426
- if (isOpen) {
427
- this.preventDefaultAndStopImmediatePropagation(event);
428
- }
429
- else {
430
- this.open();
431
- }
432
- // If the same character is typed twice, the search buffer should only contain that character once
433
- if (this.searchBuffer.length === 1 &&
434
- this.searchBuffer[0].toLowerCase() === key.toLowerCase()) {
435
- this.searchBuffer = key;
436
- }
437
- else {
438
- this.addToSearchBuffer(key);
439
- }
440
- const isMultiCharSearch = this.searchBuffer.length > 1;
441
- let startIndex = 0;
442
- if (!isMultiCharSearch && this.isOpen) {
443
- startIndex = this.focusedIndex + 1;
444
- }
445
- let foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, startIndex);
446
- if (foundItemIndex === -1 && isMultiCharSearch) {
447
- foundItemIndex = this.getIndexOfItemByFirstCharacter(key, startIndex);
448
- }
449
- if (foundItemIndex === -1 && !isMultiCharSearch && this.isOpen) {
450
- foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, 0);
451
- }
452
- if (foundItemIndex > -1) {
453
- this.focusedIndex = foundItemIndex;
454
- }
455
- }
456
- getIndexOfItemByFirstCharacter(char, startIndex = 0) {
457
- let itemTexts;
458
- // Prefer slotted/projected items if present
459
- if (this.kirbyItemsSlotted && this.kirbyItemsSlotted.length) {
460
- itemTexts = this.kirbyItemsSlotted
461
- .toArray()
462
- .map((ref) => ref.nativeElement.textContent?.trim() ?? '');
463
- }
464
- else {
465
- itemTexts = this.items.map((item) => this.getTextFromItem(item) ?? '');
466
- }
467
- return StringSearchHelper.getIndexByFirstMatchingStartString(char, itemTexts, startIndex);
468
- }
469
- _onMouseDown(event) {
470
- if (this.disabled) {
471
- event.preventDefault();
472
- event.stopImmediatePropagation();
473
- }
474
- }
475
- _onTouchStart(event) {
476
- if (this.isOpen) {
477
- event.stopPropagation();
478
- }
479
- }
480
- _onPopoverWillHide() {
481
- this.state = OpenState.closed;
482
- this.buttonElement.nativeElement.focus();
483
- this._onTouched();
484
- }
485
- _onFocusOut() {
486
- if (!this.isOpen) {
487
- this._onTouched();
488
- }
489
- }
490
- _onEnterOrEscape() {
491
- this.close();
492
- }
493
- _onPopoverClick() {
494
- this.close();
495
- }
496
- _onEnterOrSpace(event) {
497
- event.preventDefault();
498
- event.stopPropagation();
499
- if (this.isOpen) {
500
- this.selectItem(this.focusedIndex);
501
- }
502
- this.toggle();
503
- }
504
- _onArrowKeys(event) {
505
- if (this.disabled)
506
- return false;
507
- // Mirror default HTML5 select behaviour - prevent left/right arrows when open:
508
- if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {
509
- return false;
510
- }
511
- if (!this.isOpen) {
512
- // Avoid page scroll
513
- event.preventDefault();
514
- this.open();
515
- // If no selected item then focus first or last item
516
- if (!event.altKey && this.selectedIndex < 0) {
517
- switch (event.key) {
518
- case 'ArrowUp':
519
- this.focusedIndex = 0;
520
- break;
521
- case 'ArrowDown':
522
- this.focusedIndex = this.items.length - 1;
523
- break;
524
- default:
525
- break;
526
- }
527
- }
528
- return false;
529
- }
530
- const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);
531
- if (newFocusedIndex > -1) {
532
- this.focusedIndex = newFocusedIndex;
533
- }
534
- return false;
535
- }
536
- _onHomeEndKeys(event) {
537
- if (this.disabled)
538
- return;
539
- if (!this.isOpen) {
540
- event.preventDefault();
541
- this.open();
542
- }
543
- const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);
544
- if (newFocusedIndex > -1) {
545
- this.focusedIndex = newFocusedIndex;
546
- }
547
- return false;
548
- }
549
- domIndexOf(kirbyItem) {
550
- return this.kirbyItemsSlotted
551
- .toArray()
552
- .filter((item) => item.nativeElement.compareDocumentPosition(kirbyItem.nativeElement) &
553
- Node.DOCUMENT_POSITION_FOLLOWING).length;
554
- }
555
- unlistenAllSlottedItems() {
556
- let disposeClickListener;
557
- while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== undefined) {
558
- disposeClickListener();
559
- }
560
- }
561
- ngOnDestroy() {
562
- this.unlistenAllSlottedItems();
563
- this.resizeObserverService.unobserve(this.elementRef);
564
- }
565
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: KeyboardHandlerService }, { token: i2.ResizeObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
566
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", 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.shift.tab": "_onTab()", "keydown": "_onKeydown($event)", "mousedown": "_onMouseDown($event)", "touchstart": "_onTouchStart($event)", "focusout": "_onFocusOut()", "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", "attr.no-blur": "this._noBlurOnScroll", "class.expand": "this._isBlockLevel", "class.is-opening": "this._isOpening", "class.is-open": "this.isOpen", "class.clicked": "this.clicked" } }, providers: [
567
- {
568
- provide: NG_VALUE_ACCESSOR,
569
- useExisting: forwardRef((() => DropdownComponent)),
570
- multi: true,
571
- },
572
- { provide: FORM_FIELD_CONTROL, useExisting: forwardRef((() => DropdownComponent)) },
573
- ], 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]=\"isOpen ? _listboxId + '-item-' + focusedIndex : null\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\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<kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n>\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</kirby-popover>\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 [class.keyboard-focused]=\"focused && !clicked\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\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: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-focus-ring-md-inset);outline:none;border-radius:var(--kirby-border-radius-pill)}:host{display:inline-block;position:relative;max-width:min(100vw - calc(2 * var(--kirby-spacing-s)),100%)}: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;white-space:nowrap}:host.is-open>button{box-shadow:var(--kirby-elevation-4)}kirby-card{max-height:min(352px,var(--kirby-popover-available-max-height, 352px));overflow-y:auto;box-shadow:var(--kirby-elevation-4);max-width:calc(100vw - calc(2 * var(--kirby-spacing-s)));min-width:calc(320px - calc(2 * var(--kirby-spacing-s)))}@media(min-width:321px){kirby-card{min-width:calc(375px - calc(2 * var(--kirby-spacing-s)))}}@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:var(--kirby-font-weight-bold);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"] }] }); }
574
- }
575
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: DropdownComponent, decorators: [{
576
- type: Component,
577
- args: [{ selector: 'kirby-dropdown', providers: [
578
- {
579
- provide: NG_VALUE_ACCESSOR,
580
- useExisting: forwardRef((() => DropdownComponent)),
581
- multi: true,
582
- },
583
- { provide: FORM_FIELD_CONTROL, useExisting: forwardRef((() => DropdownComponent)) },
584
- ], imports: [
585
- ButtonComponent,
586
- NgTemplateOutlet,
587
- PopoverComponent,
588
- CardComponent,
589
- ItemComponent,
590
- IconComponent,
591
- ], 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]=\"isOpen ? _listboxId + '-item-' + focusedIndex : null\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\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<kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n>\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</kirby-popover>\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 [class.keyboard-focused]=\"focused && !clicked\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\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: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-focus-ring-md-inset);outline:none;border-radius:var(--kirby-border-radius-pill)}:host{display:inline-block;position:relative;max-width:min(100vw - calc(2 * var(--kirby-spacing-s)),100%)}: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;white-space:nowrap}:host.is-open>button{box-shadow:var(--kirby-elevation-4)}kirby-card{max-height:min(352px,var(--kirby-popover-available-max-height, 352px));overflow-y:auto;box-shadow:var(--kirby-elevation-4);max-width:calc(100vw - calc(2 * var(--kirby-spacing-s)));min-width:calc(320px - calc(2 * var(--kirby-spacing-s)))}@media(min-width:321px){kirby-card{min-width:calc(375px - calc(2 * var(--kirby-spacing-s)))}}@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:var(--kirby-font-weight-bold);font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"] }]
592
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: KeyboardHandlerService }, { type: i2.ResizeObserverService }], propDecorators: { items: [{
593
- type: Input
594
- }], selectedIndex: [{
595
- type: Input
596
- }], focusedIndex: [{
597
- type: Input
598
- }], itemTextProperty: [{
599
- type: Input
600
- }], placeholder: [{
601
- type: Input
602
- }], popout: [{
603
- type: Input
604
- }], attentionLevel: [{
605
- type: Input
606
- }], expand: [{
607
- type: Input
608
- }], disabled: [{
609
- type: Input
610
- }], _isDisabled: [{
611
- type: HostBinding,
612
- args: ['attr.disabled']
613
- }], hasErrorChange: [{
614
- type: Output
615
- }], hasError: [{
616
- type: HostBinding,
617
- args: ['class.error']
618
- }, {
619
- type: Input
620
- }], size: [{
621
- type: Input
622
- }], tabindex: [{
623
- type: Input
624
- }], usePopover: [{
625
- type: Input
626
- }], _noBlurOnScroll: [{
627
- type: HostBinding,
628
- args: ['attr.no-blur']
629
- }], change: [{
630
- type: Output
631
- }], _isBlockLevel: [{
632
- type: HostBinding,
633
- args: ['class.expand']
634
- }], _isOpening: [{
635
- type: HostBinding,
636
- args: ['class.is-opening']
637
- }], isOpen: [{
638
- type: HostBinding,
639
- args: ['class.is-open']
640
- }], clicked: [{
641
- type: HostBinding,
642
- args: ['class.clicked']
643
- }], itemTemplate: [{
644
- type: ContentChild,
645
- args: [ListItemTemplateDirective, { static: true, read: TemplateRef }]
646
- }], slottedItems: [{
647
- type: ContentChildren,
648
- args: [ListItemTemplateDirective, { read: ElementRef }]
649
- }], cardElement: [{
650
- type: ViewChild,
651
- args: [CardComponent, { read: ElementRef }]
652
- }], popover: [{
653
- type: ViewChild,
654
- args: [PopoverComponent]
655
- }], buttonElement: [{
656
- type: ViewChild,
657
- args: [ButtonComponent, { static: true, read: ElementRef }]
658
- }], kirbyItemsDefault: [{
659
- type: ViewChildren,
660
- args: [ItemComponent, { read: ElementRef }]
661
- }], kirbyItemsSlotted: [{
662
- type: ContentChildren,
663
- args: [ItemComponent, { read: ElementRef }]
664
- }], _onTab: [{
665
- type: HostListener,
666
- args: ['keydown.tab']
667
- }, {
668
- type: HostListener,
669
- args: ['keydown.shift.tab']
670
- }], _onKeydown: [{
671
- type: HostListener,
672
- args: ['keydown', ['$event']]
673
- }], _onMouseDown: [{
674
- type: HostListener,
675
- args: ['mousedown', ['$event']]
676
- }], _onTouchStart: [{
677
- type: HostListener,
678
- args: ['touchstart', ['$event']]
679
- }], _onFocusOut: [{
680
- type: HostListener,
681
- args: ['focusout']
682
- }], _onEnterOrEscape: [{
683
- type: HostListener,
684
- args: ['keydown.enter']
685
- }, {
686
- type: HostListener,
687
- args: ['keydown.escape']
688
- }], _onEnterOrSpace: [{
689
- type: HostListener,
690
- args: ['keydown.enter', ['$event']]
691
- }, {
692
- type: HostListener,
693
- args: ['keydown.space', ['$event']]
694
- }], _onArrowKeys: [{
695
- type: HostListener,
696
- args: ['keydown.arrowup', ['$event']]
697
- }, {
698
- type: HostListener,
699
- args: ['keydown.arrowdown', ['$event']]
700
- }, {
701
- type: HostListener,
702
- args: ['keydown.arrowleft', ['$event']]
703
- }, {
704
- type: HostListener,
705
- args: ['keydown.arrowright', ['$event']]
706
- }], _onHomeEndKeys: [{
707
- type: HostListener,
708
- args: ['keydown.home', ['$event']]
709
- }, {
710
- type: HostListener,
711
- args: ['keydown.end', ['$event']]
712
- }] } });
713
-
714
- class DropdownModule {
715
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
716
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.23", ngImport: i0, type: DropdownModule, imports: [CardModule,
717
- IconModule,
718
- ItemModule,
719
- PopoverComponent,
720
- ButtonComponent,
721
- CommonModule,
722
- ListModule,
723
- DropdownComponent], exports: [DropdownComponent, ListItemTemplateDirective] }); }
724
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: DropdownModule, providers: [KeyboardHandlerService], imports: [CardModule,
725
- IconModule,
726
- ItemModule,
727
- PopoverComponent,
728
- ButtonComponent,
729
- CommonModule,
730
- ListModule,
731
- DropdownComponent] }); }
732
- }
733
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: DropdownModule, decorators: [{
734
- type: NgModule,
735
- args: [{
736
- imports: [
737
- CardModule,
738
- IconModule,
739
- ItemModule,
740
- PopoverComponent,
741
- ButtonComponent,
742
- CommonModule,
743
- ListModule,
744
- DropdownComponent,
745
- ],
746
- exports: [DropdownComponent, ListItemTemplateDirective],
747
- providers: [KeyboardHandlerService],
748
- }]
749
- }] });
750
-
751
- /**
752
- * Generated bundle index. Do not edit.
753
- */
754
-
123
+ }
124
+ get _tabindex() {
125
+ return this.disabled ? -1 : this.tabindex;
126
+ }
127
+ get _noBlurOnScroll() {
128
+ return true;
129
+ }
130
+ get value() {
131
+ return this._value;
132
+ }
133
+ get selectedText() {
134
+ return this.getTextFromItem(this.value);
135
+ }
136
+ get _isBlockLevel() {
137
+ return this.expand === "block";
138
+ }
139
+ get _isOpening() {
140
+ return this.state === OpenState.opening;
141
+ }
142
+ get isOpen() {
143
+ return this.state === OpenState.open;
144
+ }
145
+ get interactiveElement() {
146
+ return this.buttonElement.nativeElement;
147
+ }
148
+ forwardAriaLabelToDropdownButton() {
149
+ forwardAttributes(this.elementRef.nativeElement, this._attributesToForward, this.renderer, this.buttonElement.nativeElement);
150
+ }
151
+ set kirbyItemsSlotted(kirbyItems) {
152
+ if (this.disposeItemClickListeners?.length > 0) this.unlistenAllSlottedItems();
153
+ kirbyItems.forEach((kirbyItem) => {
154
+ this.renderer.setAttribute(kirbyItem.nativeElement, "role", "option");
155
+ const disposeClickListener = this.renderer.listen(kirbyItem.nativeElement, "click", () => {
156
+ this.onItemSelect(this.domIndexOf(kirbyItem));
157
+ });
158
+ this.disposeItemClickListeners.push(disposeClickListener);
159
+ });
160
+ this._kirbyItemsSlotted = kirbyItems;
161
+ }
162
+ get kirbyItemsSlotted() {
163
+ return this._kirbyItemsSlotted;
164
+ }
165
+ constructor(renderer, elementRef, cdr, keyboardHandlerService, resizeObserverService) {
166
+ this.renderer = renderer;
167
+ this.elementRef = elementRef;
168
+ this.cdr = cdr;
169
+ this.keyboardHandlerService = keyboardHandlerService;
170
+ this.resizeObserverService = resizeObserverService;
171
+ this.state = OpenState.closed;
172
+ this._popout = HorizontalDirection.right;
173
+ this._attributesToForward = ["aria-label", "aria-labelledby"];
174
+ this._listboxId = UniqueIdGenerator.scopedTo("kirby-dropdown").next();
175
+ this._comboboxId = UniqueIdGenerator.scopedTo("kirby-button").next();
176
+ this._items = [];
177
+ this._selectedIndex = -1;
178
+ this._focusedIndex = 0;
179
+ this.itemTextProperty = "text";
180
+ this.placeholder = "Please select:";
181
+ this.attentionLevel = "3";
182
+ this.disabled = false;
183
+ this.hasErrorChange = new EventEmitter();
184
+ this.size = "md";
185
+ this.tabindex = 0;
186
+ this.change = new EventEmitter();
187
+ this._value = null;
188
+ this.clicked = false;
189
+ this.disposeItemClickListeners = [];
190
+ this.searchBuffer = "";
191
+ this.SEARCH_BUFFER_DELAY = 500;
192
+ this._onChange = () => {};
193
+ this._onTouched = () => {};
194
+ }
195
+ onToggle(event) {
196
+ event.stopPropagation();
197
+ this.clicked = true;
198
+ this.toggle();
199
+ }
200
+ toggle() {
201
+ if (this.disabled) return;
202
+ this.isOpen ? this.close() : this.open();
203
+ }
204
+ setPopoverCardStyle(style, value) {
205
+ this.renderer.setStyle(this.cardElement.nativeElement, style, value, RendererStyleFlags2.DashCase);
206
+ }
207
+ ngAfterViewInit() {
208
+ if (this.expand === "block") {
209
+ const { width: initialWidth } = this.elementRef.nativeElement.getBoundingClientRect();
210
+ this.setPopoverCardStyle("max-width", "initial");
211
+ this.setPopoverCardStyle("min-width", "initial");
212
+ this.setPopoverCardStyle("--kirby-card-width", `${initialWidth}px`);
213
+ this.resizeObserverService.observe(this.elementRef, (entry) => {
214
+ const newWidth = entry.contentRect.width;
215
+ if (newWidth > 0) this.setPopoverCardStyle("--kirby-card-width", `${newWidth}px`);
216
+ });
217
+ }
218
+ this.forwardAriaLabelToDropdownButton();
219
+ }
220
+ open() {
221
+ if (this.disabled) return;
222
+ if (!this.isOpen) {
223
+ this.state = OpenState.opening;
224
+ setTimeout(() => this.showDropdown(), DropdownComponent.OPEN_DELAY_IN_MS);
225
+ this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;
226
+ }
227
+ }
228
+ showDropdown() {
229
+ if (this.state === OpenState.opening) {
230
+ this.state = OpenState.open;
231
+ this.popover?.show();
232
+ this.scrollItemIntoView(this.focusedIndex);
233
+ this.cdr.markForCheck();
234
+ }
235
+ }
236
+ close() {
237
+ if (this.disabled) return;
238
+ if (this.isOpen) {
239
+ this.state = OpenState.closed;
240
+ this.popover?.hide();
241
+ }
242
+ }
243
+ onItemSelect(index) {
244
+ this.selectItem(index);
245
+ this.close();
246
+ }
247
+ writeValue(value) {
248
+ this._selectItemByValue(value);
249
+ this.cdr.markForCheck();
250
+ }
251
+ registerOnChange(fn) {
252
+ this._onChange = fn;
253
+ }
254
+ registerOnTouched(fn) {
255
+ this._onTouched = fn;
256
+ }
257
+ setDisabledState(isDisabled) {
258
+ this.disabled = isDisabled;
259
+ this.cdr.markForCheck();
260
+ }
261
+ selectItem(index) {
262
+ if (index != this.selectedIndex) {
263
+ this.selectedIndex = index;
264
+ this.focusedIndex = index;
265
+ this.change.emit(this.value);
266
+ this._onChange(this.value);
267
+ }
268
+ }
269
+ _selectItemByValue(value) {
270
+ this.selectedIndex = this.items.indexOf(value);
271
+ }
272
+ getTextFromItem(item) {
273
+ if (!item) return null;
274
+ return typeof item === "string" ? item : item[this.itemTextProperty];
275
+ }
276
+ scrollItemIntoView(index) {
277
+ const kirbyItems = this.kirbyItemsSlotted && this.kirbyItemsSlotted.length ? this.kirbyItemsSlotted : this.kirbyItemsDefault;
278
+ if (kirbyItems && kirbyItems.length) {
279
+ const selectedKirbyItem = kirbyItems.toArray()[index];
280
+ if (selectedKirbyItem && selectedKirbyItem.nativeElement) selectedKirbyItem.nativeElement.scrollIntoView({ block: "nearest" });
281
+ }
282
+ }
283
+ _onTab() {
284
+ if (this.isOpen) {
285
+ this.selectItem(this.focusedIndex);
286
+ this.close();
287
+ }
288
+ if (this.clicked) this.clicked = false;
289
+ }
290
+ preventDefaultAndStopImmediatePropagation(event) {
291
+ event.stopImmediatePropagation();
292
+ event.preventDefault();
293
+ }
294
+ addToSearchBuffer(char) {
295
+ clearTimeout(this.searchBufferTimeout);
296
+ this.searchBuffer += char;
297
+ this.searchBufferTimeout = setTimeout(() => {
298
+ this.resetSearchBuffer();
299
+ }, this.SEARCH_BUFFER_DELAY);
300
+ }
301
+ resetSearchBuffer() {
302
+ this.searchBuffer = "";
303
+ }
304
+ _onKeydown(event) {
305
+ const key = event.key;
306
+ if (this.items.length === 0) {
307
+ console.warn("[Kirby] No items found within dropdown");
308
+ return;
309
+ }
310
+ if (this.disabled) return;
311
+ if (StringSearchHelper.isPrintableCharacter(key)) this.handlePrintableCharacterKey(event, this.isOpen);
312
+ if (key === "ArrowDown" && event.altKey) {
313
+ this.preventDefaultAndStopImmediatePropagation(event);
314
+ if (!this.isOpen) {
315
+ this.open();
316
+ this.focusedIndex = this.selectedIndex > -1 ? this.selectedIndex : 0;
317
+ }
318
+ return;
319
+ }
320
+ if (key === "ArrowUp" && event.altKey) {
321
+ this.preventDefaultAndStopImmediatePropagation(event);
322
+ if (this.focusedIndex > -1) {
323
+ this.selectItem(this.focusedIndex);
324
+ this.close();
325
+ }
326
+ }
327
+ if (key === "PageUp") {
328
+ this.preventDefaultAndStopImmediatePropagation(event);
329
+ if (!this.isOpen) this.open();
330
+ this.focusedIndex = Math.max(0, this.focusedIndex - 10);
331
+ return;
332
+ }
333
+ if (key === "PageDown") {
334
+ this.preventDefaultAndStopImmediatePropagation(event);
335
+ if (!this.isOpen) this.open();
336
+ this.focusedIndex = Math.min(this.items.length - 1, this.focusedIndex + 10);
337
+ return;
338
+ }
339
+ }
340
+ handlePrintableCharacterKey(event, isOpen) {
341
+ const key = event.key;
342
+ if (isOpen) this.preventDefaultAndStopImmediatePropagation(event);
343
+ else this.open();
344
+ if (this.searchBuffer.length === 1 && this.searchBuffer[0].toLowerCase() === key.toLowerCase()) this.searchBuffer = key;
345
+ else this.addToSearchBuffer(key);
346
+ const isMultiCharSearch = this.searchBuffer.length > 1;
347
+ let startIndex = 0;
348
+ if (!isMultiCharSearch && this.isOpen) startIndex = this.focusedIndex + 1;
349
+ let foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, startIndex);
350
+ if (foundItemIndex === -1 && isMultiCharSearch) foundItemIndex = this.getIndexOfItemByFirstCharacter(key, startIndex);
351
+ if (foundItemIndex === -1 && !isMultiCharSearch && this.isOpen) foundItemIndex = this.getIndexOfItemByFirstCharacter(this.searchBuffer, 0);
352
+ if (foundItemIndex > -1) this.focusedIndex = foundItemIndex;
353
+ }
354
+ getIndexOfItemByFirstCharacter(char, startIndex = 0) {
355
+ let itemTexts;
356
+ if (this.kirbyItemsSlotted && this.kirbyItemsSlotted.length) itemTexts = this.kirbyItemsSlotted.toArray().map((ref) => ref.nativeElement.textContent?.trim() ?? "");
357
+ else itemTexts = this.items.map((item) => this.getTextFromItem(item) ?? "");
358
+ return StringSearchHelper.getIndexByFirstMatchingStartString(char, itemTexts, startIndex);
359
+ }
360
+ _onMouseDown(event) {
361
+ if (this.disabled) {
362
+ event.preventDefault();
363
+ event.stopImmediatePropagation();
364
+ }
365
+ }
366
+ _onTouchStart(event) {
367
+ if (this.isOpen) event.stopPropagation();
368
+ }
369
+ _onPopoverWillHide() {
370
+ this.state = OpenState.closed;
371
+ this.buttonElement.nativeElement.focus();
372
+ this._onTouched();
373
+ }
374
+ _onFocusOut() {
375
+ if (!this.isOpen) this._onTouched();
376
+ }
377
+ _onEnterOrEscape() {
378
+ this.close();
379
+ }
380
+ _onPopoverClick() {
381
+ this.close();
382
+ }
383
+ _onEnterOrSpace(event) {
384
+ event.preventDefault();
385
+ event.stopPropagation();
386
+ if (this.isOpen) this.selectItem(this.focusedIndex);
387
+ this.toggle();
388
+ }
389
+ _onArrowKeys(event) {
390
+ if (this.disabled) return false;
391
+ if (this.isOpen && (event.key === "ArrowLeft" || event.key === "ArrowRight")) return false;
392
+ if (!this.isOpen) {
393
+ event.preventDefault();
394
+ this.open();
395
+ if (!event.altKey && this.selectedIndex < 0) switch (event.key) {
396
+ case "ArrowUp":
397
+ this.focusedIndex = 0;
398
+ break;
399
+ case "ArrowDown": this.focusedIndex = this.items.length - 1;
400
+ }
401
+ return false;
402
+ }
403
+ const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);
404
+ if (newFocusedIndex > -1) this.focusedIndex = newFocusedIndex;
405
+ return false;
406
+ }
407
+ _onHomeEndKeys(event) {
408
+ if (this.disabled) return;
409
+ if (!this.isOpen) {
410
+ event.preventDefault();
411
+ this.open();
412
+ }
413
+ const newFocusedIndex = this.keyboardHandlerService.handle(event, this.focusedIndex, this.items.length - 1);
414
+ if (newFocusedIndex > -1) this.focusedIndex = newFocusedIndex;
415
+ return false;
416
+ }
417
+ domIndexOf(kirbyItem) {
418
+ return this.kirbyItemsSlotted.toArray().filter((item) => item.nativeElement.compareDocumentPosition(kirbyItem.nativeElement) & Node.DOCUMENT_POSITION_FOLLOWING).length;
419
+ }
420
+ unlistenAllSlottedItems() {
421
+ let disposeClickListener;
422
+ while ((disposeClickListener = this.disposeItemClickListeners.pop()) !== void 0) disposeClickListener();
423
+ }
424
+ ngOnDestroy() {
425
+ this.unlistenAllSlottedItems();
426
+ this.resizeObserverService.unobserve(this.elementRef);
427
+ }
428
+ static {
429
+ this.ɵfac = i0.ɵɵngDeclareFactory({
430
+ minVersion: "12.0.0",
431
+ version: "22.2.2",
432
+ ngImport: i0,
433
+ type: DropdownComponent,
434
+ deps: [
435
+ { token: i0.Renderer2 },
436
+ { token: i0.ElementRef },
437
+ { token: i0.ChangeDetectorRef },
438
+ { token: KeyboardHandlerService },
439
+ { token: i2.ResizeObserverService }
440
+ ],
441
+ target: i0.ɵɵFactoryTarget.Component
442
+ });
443
+ }
444
+ static {
445
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
446
+ minVersion: "17.0.0",
447
+ version: "22.2.2",
448
+ type: DropdownComponent,
449
+ isStandalone: true,
450
+ selector: "kirby-dropdown",
451
+ inputs: {
452
+ items: "items",
453
+ selectedIndex: "selectedIndex",
454
+ focusedIndex: "focusedIndex",
455
+ itemTextProperty: "itemTextProperty",
456
+ placeholder: "placeholder",
457
+ popout: "popout",
458
+ attentionLevel: "attentionLevel",
459
+ expand: "expand",
460
+ disabled: "disabled",
461
+ hasError: "hasError",
462
+ size: "size",
463
+ tabindex: "tabindex",
464
+ usePopover: "usePopover"
465
+ },
466
+ outputs: {
467
+ hasErrorChange: "hasErrorChange",
468
+ change: "change"
469
+ },
470
+ host: {
471
+ listeners: {
472
+ "keydown.tab": "_onTab()",
473
+ "keydown.shift.tab": "_onTab()",
474
+ "keydown": "_onKeydown($event)",
475
+ "mousedown": "_onMouseDown($event)",
476
+ "touchstart": "_onTouchStart($event)",
477
+ "focusout": "_onFocusOut()",
478
+ "keydown.enter": "_onEnterOrSpace($event)",
479
+ "keydown.escape": "_onEnterOrEscape()",
480
+ "keydown.space": "_onEnterOrSpace($event)",
481
+ "keydown.arrowup": "_onArrowKeys($event)",
482
+ "keydown.arrowdown": "_onArrowKeys($event)",
483
+ "keydown.arrowleft": "_onArrowKeys($event)",
484
+ "keydown.arrowright": "_onArrowKeys($event)",
485
+ "keydown.home": "_onHomeEndKeys($event)",
486
+ "keydown.end": "_onHomeEndKeys($event)"
487
+ },
488
+ properties: {
489
+ "attr.disabled": "this._isDisabled",
490
+ "class.error": "this.hasError",
491
+ "attr.no-blur": "this._noBlurOnScroll",
492
+ "class.expand": "this._isBlockLevel",
493
+ "class.is-opening": "this._isOpening",
494
+ "class.is-open": "this.isOpen",
495
+ "class.clicked": "this.clicked"
496
+ }
497
+ },
498
+ providers: [{
499
+ provide: NG_VALUE_ACCESSOR,
500
+ useExisting: forwardRef((() => DropdownComponent)),
501
+ multi: true
502
+ }, {
503
+ provide: FORM_FIELD_CONTROL,
504
+ useExisting: forwardRef((() => DropdownComponent))
505
+ }],
506
+ queries: [
507
+ {
508
+ propertyName: "itemTemplate",
509
+ first: true,
510
+ predicate: ListItemTemplateDirective,
511
+ descendants: true,
512
+ read: TemplateRef,
513
+ static: true
514
+ },
515
+ {
516
+ propertyName: "slottedItems",
517
+ predicate: ListItemTemplateDirective,
518
+ read: ElementRef
519
+ },
520
+ {
521
+ propertyName: "kirbyItemsSlotted",
522
+ predicate: ItemComponent,
523
+ read: ElementRef
524
+ }
525
+ ],
526
+ viewQueries: [
527
+ {
528
+ propertyName: "cardElement",
529
+ first: true,
530
+ predicate: CardComponent,
531
+ descendants: true,
532
+ read: ElementRef
533
+ },
534
+ {
535
+ propertyName: "popover",
536
+ first: true,
537
+ predicate: PopoverComponent,
538
+ descendants: true
539
+ },
540
+ {
541
+ propertyName: "buttonElement",
542
+ first: true,
543
+ predicate: ButtonComponent,
544
+ descendants: true,
545
+ read: ElementRef,
546
+ static: true
547
+ },
548
+ {
549
+ propertyName: "kirbyItemsDefault",
550
+ predicate: ItemComponent,
551
+ descendants: true,
552
+ read: ElementRef
553
+ }
554
+ ],
555
+ ngImport: i0,
556
+ 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]=\"isOpen ? _listboxId + '-item-' + focusedIndex : null\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\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<kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n>\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</kirby-popover>\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 [class.keyboard-focused]=\"focused && !clicked\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\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",
557
+ styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-focus-ring-md-inset);outline:none;border-radius:var(--kirby-border-radius-pill)}:host{display:inline-block;position:relative;max-width:min(100vw - calc(2 * var(--kirby-spacing-s)),100%)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error:not(.is-open)>button,:host.ng-touched.ng-invalid:not(.is-open)>button{--kirby-button-border-color: var(--kirby-color-border-raised-danger);box-shadow:var(--kirby-error-ring-combined-inset)}:host.error:not(.is-open)>button:focus-visible,:host.ng-touched.ng-invalid:not(.is-open)>button:focus-visible{box-shadow:var(--kirby-focus-ring-md-combined-inset)}:host>button{position:relative;margin:0;width:100%;min-width:0}:host>button .text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host.is-open>button{box-shadow:var(--kirby-elevation-4);border-color:var(--kirby-button-border-color)}kirby-card{max-height:min(352px,var(--kirby-popover-available-max-height, 352px));overflow-y:auto;box-shadow:var(--kirby-elevation-4);max-width:calc(100vw - calc(2 * var(--kirby-spacing-s)));min-width:calc(320px - calc(2 * var(--kirby-spacing-s)))}@media(min-width:321px){kirby-card{min-width:calc(375px - calc(2 * var(--kirby-spacing-s)))}}:host-context(kirby-calendar)>button{font-weight:var(--kirby-font-weight-bold);font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"],
558
+ dependencies: [
559
+ {
560
+ kind: "component",
561
+ type: ButtonComponent,
562
+ selector: "button[kirby-button],Button[kirby-button],a[kirby-button]",
563
+ inputs: [
564
+ "attentionLevel",
565
+ "noDecoration",
566
+ "themeColor",
567
+ "expand",
568
+ "isFloating",
569
+ "size",
570
+ "showIconOnly"
571
+ ]
572
+ },
573
+ {
574
+ kind: "directive",
575
+ type: NgTemplateOutlet,
576
+ selector: "[ngTemplateOutlet]",
577
+ inputs: [
578
+ "ngTemplateOutletContext",
579
+ "ngTemplateOutlet",
580
+ "ngTemplateOutletInjector"
581
+ ]
582
+ },
583
+ {
584
+ kind: "component",
585
+ type: PopoverComponent,
586
+ selector: "kirby-popover",
587
+ inputs: ["popout", "target"],
588
+ outputs: ["willHide"]
589
+ },
590
+ {
591
+ kind: "component",
592
+ type: CardComponent,
593
+ selector: "kirby-card",
594
+ inputs: [
595
+ "title",
596
+ "subtitle",
597
+ "backgroundImageUrl",
598
+ "hasPadding",
599
+ "sizes",
600
+ "variant"
601
+ ]
602
+ },
603
+ {
604
+ kind: "component",
605
+ type: ItemComponent,
606
+ selector: "kirby-item",
607
+ inputs: [
608
+ "disabled",
609
+ "selected",
610
+ "disclosure",
611
+ "selectable",
612
+ "reorderable",
613
+ "size",
614
+ "href",
615
+ "rotateIcon"
616
+ ]
617
+ },
618
+ {
619
+ kind: "component",
620
+ type: IconComponent,
621
+ selector: "kirby-icon",
622
+ inputs: ["size", "name"]
623
+ }
624
+ ],
625
+ changeDetection: i0.ChangeDetectionStrategy.Eager
626
+ });
627
+ }
628
+ };
629
+ i0.ɵɵngDeclareClassMetadata({
630
+ minVersion: "12.0.0",
631
+ version: "22.2.2",
632
+ ngImport: i0,
633
+ type: DropdownComponent,
634
+ decorators: [{
635
+ type: Component,
636
+ args: [{
637
+ selector: "kirby-dropdown",
638
+ providers: [{
639
+ provide: NG_VALUE_ACCESSOR,
640
+ useExisting: forwardRef((() => DropdownComponent)),
641
+ multi: true
642
+ }, {
643
+ provide: FORM_FIELD_CONTROL,
644
+ useExisting: forwardRef((() => DropdownComponent))
645
+ }],
646
+ imports: [
647
+ ButtonComponent,
648
+ NgTemplateOutlet,
649
+ PopoverComponent,
650
+ CardComponent,
651
+ ItemComponent,
652
+ IconComponent
653
+ ],
654
+ changeDetection: ChangeDetectionStrategy.Eager,
655
+ 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]=\"isOpen ? _listboxId + '-item-' + focusedIndex : null\"\n [attr.aria-invalid]=\"hasError\"\n [size]=\"size\"\n [attentionLevel]=\"attentionLevel\"\n (click)=\"onToggle($event)\"\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<kirby-popover\n [target]=\"buttonElement\"\n [popout]=\"popout\"\n (click)=\"_onPopoverClick()\"\n (willHide)=\"_onPopoverWillHide()\"\n>\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</kirby-popover>\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 [class.keyboard-focused]=\"focused && !clicked\"\n role=\"option\"\n [attr.id]=\"_listboxId + '-item-' + index\"\n [attr.aria-selected]=\"selected\"\n >\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",
656
+ styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host:focus-visible{transition:all 80ms linear 0ms;box-shadow:var(--kirby-focus-ring-md-inset);outline:none;border-radius:var(--kirby-border-radius-pill)}:host{display:inline-block;position:relative;max-width:min(100vw - calc(2 * var(--kirby-spacing-s)),100%)}:host.clicked{box-shadow:none}:host.expand{display:block}:host.expand kirby-card{width:100%;min-width:initial;max-width:initial}:host.error:not(.is-open)>button,:host.ng-touched.ng-invalid:not(.is-open)>button{--kirby-button-border-color: var(--kirby-color-border-raised-danger);box-shadow:var(--kirby-error-ring-combined-inset)}:host.error:not(.is-open)>button:focus-visible,:host.ng-touched.ng-invalid:not(.is-open)>button:focus-visible{box-shadow:var(--kirby-focus-ring-md-combined-inset)}:host>button{position:relative;margin:0;width:100%;min-width:0}:host>button .text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host.is-open>button{box-shadow:var(--kirby-elevation-4);border-color:var(--kirby-button-border-color)}kirby-card{max-height:min(352px,var(--kirby-popover-available-max-height, 352px));overflow-y:auto;box-shadow:var(--kirby-elevation-4);max-width:calc(100vw - calc(2 * var(--kirby-spacing-s)));min-width:calc(320px - calc(2 * var(--kirby-spacing-s)))}@media(min-width:321px){kirby-card{min-width:calc(375px - calc(2 * var(--kirby-spacing-s)))}}:host-context(kirby-calendar)>button{font-weight:var(--kirby-font-weight-bold);font-size:initial}:host-context(kirby-calendar).is-open>button{box-shadow:none}\n"]
657
+ }]
658
+ }],
659
+ ctorParameters: () => [
660
+ { type: i0.Renderer2 },
661
+ { type: i0.ElementRef },
662
+ { type: i0.ChangeDetectorRef },
663
+ { type: KeyboardHandlerService },
664
+ { type: i2.ResizeObserverService }
665
+ ],
666
+ propDecorators: {
667
+ items: [{ type: Input }],
668
+ selectedIndex: [{ type: Input }],
669
+ focusedIndex: [{ type: Input }],
670
+ itemTextProperty: [{ type: Input }],
671
+ placeholder: [{ type: Input }],
672
+ popout: [{ type: Input }],
673
+ attentionLevel: [{ type: Input }],
674
+ expand: [{ type: Input }],
675
+ disabled: [{ type: Input }],
676
+ _isDisabled: [{
677
+ type: HostBinding,
678
+ args: ["attr.disabled"]
679
+ }],
680
+ hasErrorChange: [{ type: Output }],
681
+ hasError: [{
682
+ type: HostBinding,
683
+ args: ["class.error"]
684
+ }, { type: Input }],
685
+ size: [{ type: Input }],
686
+ tabindex: [{ type: Input }],
687
+ usePopover: [{ type: Input }],
688
+ _noBlurOnScroll: [{
689
+ type: HostBinding,
690
+ args: ["attr.no-blur"]
691
+ }],
692
+ change: [{ type: Output }],
693
+ _isBlockLevel: [{
694
+ type: HostBinding,
695
+ args: ["class.expand"]
696
+ }],
697
+ _isOpening: [{
698
+ type: HostBinding,
699
+ args: ["class.is-opening"]
700
+ }],
701
+ isOpen: [{
702
+ type: HostBinding,
703
+ args: ["class.is-open"]
704
+ }],
705
+ clicked: [{
706
+ type: HostBinding,
707
+ args: ["class.clicked"]
708
+ }],
709
+ itemTemplate: [{
710
+ type: ContentChild,
711
+ args: [ListItemTemplateDirective, {
712
+ static: true,
713
+ read: TemplateRef
714
+ }]
715
+ }],
716
+ slottedItems: [{
717
+ type: ContentChildren,
718
+ args: [ListItemTemplateDirective, { read: ElementRef }]
719
+ }],
720
+ cardElement: [{
721
+ type: ViewChild,
722
+ args: [CardComponent, { read: ElementRef }]
723
+ }],
724
+ popover: [{
725
+ type: ViewChild,
726
+ args: [PopoverComponent]
727
+ }],
728
+ buttonElement: [{
729
+ type: ViewChild,
730
+ args: [ButtonComponent, {
731
+ static: true,
732
+ read: ElementRef
733
+ }]
734
+ }],
735
+ kirbyItemsDefault: [{
736
+ type: ViewChildren,
737
+ args: [ItemComponent, { read: ElementRef }]
738
+ }],
739
+ kirbyItemsSlotted: [{
740
+ type: ContentChildren,
741
+ args: [ItemComponent, { read: ElementRef }]
742
+ }],
743
+ _onTab: [{
744
+ type: HostListener,
745
+ args: ["keydown.tab"]
746
+ }, {
747
+ type: HostListener,
748
+ args: ["keydown.shift.tab"]
749
+ }],
750
+ _onKeydown: [{
751
+ type: HostListener,
752
+ args: ["keydown", ["$event"]]
753
+ }],
754
+ _onMouseDown: [{
755
+ type: HostListener,
756
+ args: ["mousedown", ["$event"]]
757
+ }],
758
+ _onTouchStart: [{
759
+ type: HostListener,
760
+ args: ["touchstart", ["$event"]]
761
+ }],
762
+ _onFocusOut: [{
763
+ type: HostListener,
764
+ args: ["focusout"]
765
+ }],
766
+ _onEnterOrEscape: [{
767
+ type: HostListener,
768
+ args: ["keydown.enter"]
769
+ }, {
770
+ type: HostListener,
771
+ args: ["keydown.escape"]
772
+ }],
773
+ _onEnterOrSpace: [{
774
+ type: HostListener,
775
+ args: ["keydown.enter", ["$event"]]
776
+ }, {
777
+ type: HostListener,
778
+ args: ["keydown.space", ["$event"]]
779
+ }],
780
+ _onArrowKeys: [
781
+ {
782
+ type: HostListener,
783
+ args: ["keydown.arrowup", ["$event"]]
784
+ },
785
+ {
786
+ type: HostListener,
787
+ args: ["keydown.arrowdown", ["$event"]]
788
+ },
789
+ {
790
+ type: HostListener,
791
+ args: ["keydown.arrowleft", ["$event"]]
792
+ },
793
+ {
794
+ type: HostListener,
795
+ args: ["keydown.arrowright", ["$event"]]
796
+ }
797
+ ],
798
+ _onHomeEndKeys: [{
799
+ type: HostListener,
800
+ args: ["keydown.home", ["$event"]]
801
+ }, {
802
+ type: HostListener,
803
+ args: ["keydown.end", ["$event"]]
804
+ }]
805
+ }
806
+ });
807
+ var DropdownModule = class DropdownModule {
808
+ static {
809
+ this.ɵfac = i0.ɵɵngDeclareFactory({
810
+ minVersion: "12.0.0",
811
+ version: "22.2.2",
812
+ ngImport: i0,
813
+ type: DropdownModule,
814
+ deps: [],
815
+ target: i0.ɵɵFactoryTarget.NgModule
816
+ });
817
+ }
818
+ static {
819
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
820
+ minVersion: "14.0.0",
821
+ version: "22.2.2",
822
+ ngImport: i0,
823
+ type: DropdownModule,
824
+ imports: [
825
+ CardModule,
826
+ IconModule,
827
+ ItemModule,
828
+ PopoverComponent,
829
+ ButtonComponent,
830
+ CommonModule,
831
+ ListModule,
832
+ DropdownComponent
833
+ ],
834
+ exports: [DropdownComponent, ListItemTemplateDirective]
835
+ });
836
+ }
837
+ static {
838
+ this.ɵinj = i0.ɵɵngDeclareInjector({
839
+ minVersion: "12.0.0",
840
+ version: "22.2.2",
841
+ ngImport: i0,
842
+ type: DropdownModule,
843
+ providers: [KeyboardHandlerService],
844
+ imports: [
845
+ CardModule,
846
+ IconModule,
847
+ ItemModule,
848
+ PopoverComponent,
849
+ ButtonComponent,
850
+ CommonModule,
851
+ ListModule,
852
+ DropdownComponent
853
+ ]
854
+ });
855
+ }
856
+ };
857
+ i0.ɵɵngDeclareClassMetadata({
858
+ minVersion: "12.0.0",
859
+ version: "22.2.2",
860
+ ngImport: i0,
861
+ type: DropdownModule,
862
+ decorators: [{
863
+ type: NgModule,
864
+ args: [{
865
+ imports: [
866
+ CardModule,
867
+ IconModule,
868
+ ItemModule,
869
+ PopoverComponent,
870
+ ButtonComponent,
871
+ CommonModule,
872
+ ListModule,
873
+ DropdownComponent
874
+ ],
875
+ exports: [DropdownComponent, ListItemTemplateDirective],
876
+ providers: [KeyboardHandlerService]
877
+ }]
878
+ }]
879
+ });
755
880
  export { DropdownComponent, DropdownModule, KeyboardHandlerService, OpenState };
756
- //# sourceMappingURL=kirbydesign-designsystem-dropdown.mjs.map
881
+
882
+ //# sourceMappingURL=kirbydesign-designsystem-dropdown.mjs.map