ngwr 14.10.0 → 14.11.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 (694) hide show
  1. package/fesm2022/ngwr-action-sheet-testing.mjs +111 -310
  2. package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -1
  3. package/fesm2022/ngwr-action-sheet.mjs +209 -89
  4. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  5. package/fesm2022/ngwr-affix.mjs +122 -140
  6. package/fesm2022/ngwr-affix.mjs.map +1 -1
  7. package/fesm2022/ngwr-alert.mjs +204 -107
  8. package/fesm2022/ngwr-alert.mjs.map +1 -1
  9. package/fesm2022/ngwr-anchor.mjs +171 -113
  10. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  11. package/fesm2022/ngwr-aurora.mjs +278 -198
  12. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  13. package/fesm2022/ngwr-avatar.mjs +191 -190
  14. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  15. package/fesm2022/ngwr-back-top.mjs +140 -95
  16. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  17. package/fesm2022/ngwr-badge.mjs +339 -204
  18. package/fesm2022/ngwr-badge.mjs.map +1 -1
  19. package/fesm2022/ngwr-bar-chart-testing.mjs +56 -120
  20. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
  21. package/fesm2022/ngwr-bar-chart.mjs +204 -113
  22. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  23. package/fesm2022/ngwr-blur-text-testing.mjs +44 -198
  24. package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -1
  25. package/fesm2022/ngwr-blur-text.mjs +322 -202
  26. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  27. package/fesm2022/ngwr-border-glow-testing.mjs +134 -318
  28. package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -1
  29. package/fesm2022/ngwr-border-glow.mjs +440 -277
  30. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  31. package/fesm2022/ngwr-breadcrumbs.mjs +256 -120
  32. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  33. package/fesm2022/ngwr-burger.mjs +115 -63
  34. package/fesm2022/ngwr-burger.mjs.map +1 -1
  35. package/fesm2022/ngwr-button-testing.mjs +39 -94
  36. package/fesm2022/ngwr-button-testing.mjs.map +1 -1
  37. package/fesm2022/ngwr-button.mjs +404 -354
  38. package/fesm2022/ngwr-button.mjs.map +1 -1
  39. package/fesm2022/ngwr-calendar-heatmap-testing.mjs +50 -96
  40. package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -1
  41. package/fesm2022/ngwr-calendar-heatmap.mjs +360 -264
  42. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  43. package/fesm2022/ngwr-calendar-testing.mjs +181 -378
  44. package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
  45. package/fesm2022/ngwr-calendar.mjs +612 -790
  46. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  47. package/fesm2022/ngwr-card.mjs +216 -98
  48. package/fesm2022/ngwr-card.mjs.map +1 -1
  49. package/fesm2022/ngwr-carousel-testing.mjs +131 -374
  50. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -1
  51. package/fesm2022/ngwr-carousel.mjs +459 -332
  52. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  53. package/fesm2022/ngwr-cascader-testing.mjs +227 -600
  54. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
  55. package/fesm2022/ngwr-cascader.mjs +479 -418
  56. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  57. package/fesm2022/ngwr-checkbox-testing.mjs +45 -99
  58. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -1
  59. package/fesm2022/ngwr-checkbox.mjs +442 -354
  60. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  61. package/fesm2022/ngwr-circular-text-testing.mjs +56 -223
  62. package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -1
  63. package/fesm2022/ngwr-circular-text.mjs +226 -186
  64. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  65. package/fesm2022/ngwr-click-spark.mjs +303 -199
  66. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  67. package/fesm2022/ngwr-clipboard.mjs +95 -163
  68. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  69. package/fesm2022/ngwr-collapse-testing.mjs +118 -365
  70. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -1
  71. package/fesm2022/ngwr-collapse.mjs +287 -227
  72. package/fesm2022/ngwr-collapse.mjs.map +1 -1
  73. package/fesm2022/ngwr-color-picker-testing.mjs +223 -461
  74. package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
  75. package/fesm2022/ngwr-color-picker.mjs +937 -976
  76. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  77. package/fesm2022/ngwr-command-palette-testing.mjs +236 -585
  78. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -1
  79. package/fesm2022/ngwr-command-palette.mjs +512 -443
  80. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  81. package/fesm2022/ngwr-compare.mjs +252 -225
  82. package/fesm2022/ngwr-compare.mjs.map +1 -1
  83. package/fesm2022/ngwr-confetti.mjs +163 -181
  84. package/fesm2022/ngwr-confetti.mjs.map +1 -1
  85. package/fesm2022/ngwr-config.mjs +31 -106
  86. package/fesm2022/ngwr-config.mjs.map +1 -1
  87. package/fesm2022/ngwr-context-menu-testing.mjs +233 -642
  88. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
  89. package/fesm2022/ngwr-context-menu.mjs +837 -1167
  90. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  91. package/fesm2022/ngwr-cookie.mjs +103 -140
  92. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  93. package/fesm2022/ngwr-counter.mjs +646 -460
  94. package/fesm2022/ngwr-counter.mjs.map +1 -1
  95. package/fesm2022/ngwr-date-adapters-fns.mjs +173 -266
  96. package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
  97. package/fesm2022/ngwr-date-adapters-luxon.mjs +164 -236
  98. package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -1
  99. package/fesm2022/ngwr-date-picker-testing.mjs +340 -700
  100. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
  101. package/fesm2022/ngwr-date-picker.mjs +2575 -2416
  102. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  103. package/fesm2022/ngwr-date.mjs +606 -861
  104. package/fesm2022/ngwr-date.mjs.map +1 -1
  105. package/fesm2022/ngwr-decrypt-text-testing.mjs +57 -256
  106. package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -1
  107. package/fesm2022/ngwr-decrypt-text.mjs +489 -409
  108. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  109. package/fesm2022/ngwr-density.mjs +157 -154
  110. package/fesm2022/ngwr-density.mjs.map +1 -1
  111. package/fesm2022/ngwr-descriptions.mjs +188 -90
  112. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  113. package/fesm2022/ngwr-dialog-testing.mjs +44 -87
  114. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -1
  115. package/fesm2022/ngwr-dialog.mjs +391 -522
  116. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  117. package/fesm2022/ngwr-directives.mjs +354 -271
  118. package/fesm2022/ngwr-directives.mjs.map +1 -1
  119. package/fesm2022/ngwr-divider.mjs +151 -133
  120. package/fesm2022/ngwr-divider.mjs.map +1 -1
  121. package/fesm2022/ngwr-donut-chart-testing.mjs +48 -111
  122. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
  123. package/fesm2022/ngwr-donut-chart.mjs +295 -190
  124. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  125. package/fesm2022/ngwr-drag-drop.mjs +411 -301
  126. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  127. package/fesm2022/ngwr-drawer-testing.mjs +97 -248
  128. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -1
  129. package/fesm2022/ngwr-drawer.mjs +862 -889
  130. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  131. package/fesm2022/ngwr-dropdown-testing.mjs +125 -288
  132. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -1
  133. package/fesm2022/ngwr-dropdown.mjs +613 -641
  134. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  135. package/fesm2022/ngwr-editor-testing.mjs +194 -640
  136. package/fesm2022/ngwr-editor-testing.mjs.map +1 -1
  137. package/fesm2022/ngwr-editor.mjs +2062 -2541
  138. package/fesm2022/ngwr-editor.mjs.map +1 -1
  139. package/fesm2022/ngwr-empty.mjs +117 -72
  140. package/fesm2022/ngwr-empty.mjs.map +1 -1
  141. package/fesm2022/ngwr-event-calendar-testing.mjs +215 -439
  142. package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
  143. package/fesm2022/ngwr-event-calendar.mjs +906 -822
  144. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  145. package/fesm2022/ngwr-falling-text-testing.mjs +52 -216
  146. package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
  147. package/fesm2022/ngwr-falling-text.mjs +375 -342
  148. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  149. package/fesm2022/ngwr-file-upload-testing.mjs +133 -320
  150. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -1
  151. package/fesm2022/ngwr-file-upload.mjs +457 -328
  152. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  153. package/fesm2022/ngwr-form-testing.mjs +145 -452
  154. package/fesm2022/ngwr-form-testing.mjs.map +1 -1
  155. package/fesm2022/ngwr-form.mjs +512 -590
  156. package/fesm2022/ngwr-form.mjs.map +1 -1
  157. package/fesm2022/ngwr-fuzzy-text-testing.mjs +36 -132
  158. package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -1
  159. package/fesm2022/ngwr-fuzzy-text.mjs +635 -421
  160. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  161. package/fesm2022/ngwr-gauge-testing.mjs +49 -98
  162. package/fesm2022/ngwr-gauge-testing.mjs.map +1 -1
  163. package/fesm2022/ngwr-gauge.mjs +297 -129
  164. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  165. package/fesm2022/ngwr-glitch-text-testing.mjs +61 -213
  166. package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
  167. package/fesm2022/ngwr-glitch-text.mjs +170 -73
  168. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  169. package/fesm2022/ngwr-gradient-text-testing.mjs +82 -251
  170. package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
  171. package/fesm2022/ngwr-gradient-text.mjs +215 -114
  172. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  173. package/fesm2022/ngwr-graph-testing.mjs +65 -233
  174. package/fesm2022/ngwr-graph-testing.mjs.map +1 -1
  175. package/fesm2022/ngwr-graph.mjs +882 -1046
  176. package/fesm2022/ngwr-graph.mjs.map +1 -1
  177. package/fesm2022/ngwr-hotkey.mjs +307 -285
  178. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  179. package/fesm2022/ngwr-i18n-ar.mjs +375 -464
  180. package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
  181. package/fesm2022/ngwr-i18n-cs.mjs +375 -434
  182. package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
  183. package/fesm2022/ngwr-i18n-de.mjs +375 -453
  184. package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
  185. package/fesm2022/ngwr-i18n-en.mjs +375 -561
  186. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  187. package/fesm2022/ngwr-i18n-es.mjs +375 -434
  188. package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
  189. package/fesm2022/ngwr-i18n-fr.mjs +375 -458
  190. package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
  191. package/fesm2022/ngwr-i18n-he.mjs +375 -457
  192. package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
  193. package/fesm2022/ngwr-i18n-hi.mjs +375 -434
  194. package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
  195. package/fesm2022/ngwr-i18n-id.mjs +375 -434
  196. package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
  197. package/fesm2022/ngwr-i18n-it.mjs +375 -453
  198. package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
  199. package/fesm2022/ngwr-i18n-ja.mjs +375 -438
  200. package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
  201. package/fesm2022/ngwr-i18n-ko.mjs +375 -446
  202. package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
  203. package/fesm2022/ngwr-i18n-nl.mjs +375 -450
  204. package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
  205. package/fesm2022/ngwr-i18n-pl.mjs +375 -460
  206. package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
  207. package/fesm2022/ngwr-i18n-pt.mjs +375 -443
  208. package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
  209. package/fesm2022/ngwr-i18n-ru.mjs +375 -447
  210. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  211. package/fesm2022/ngwr-i18n-sv.mjs +375 -434
  212. package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
  213. package/fesm2022/ngwr-i18n-tr.mjs +375 -458
  214. package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
  215. package/fesm2022/ngwr-i18n-uk.mjs +375 -455
  216. package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
  217. package/fesm2022/ngwr-i18n-vi.mjs +375 -451
  218. package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
  219. package/fesm2022/ngwr-i18n-zh-TW.mjs +375 -442
  220. package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
  221. package/fesm2022/ngwr-i18n-zh.mjs +375 -433
  222. package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
  223. package/fesm2022/ngwr-i18n.mjs +415 -683
  224. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  225. package/fesm2022/ngwr-icon-adapters-feather.mjs +28 -77
  226. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -1
  227. package/fesm2022/ngwr-icon-adapters-lucide.mjs +32 -94
  228. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
  229. package/fesm2022/ngwr-icon.mjs +371 -690
  230. package/fesm2022/ngwr-icon.mjs.map +1 -1
  231. package/fesm2022/ngwr-image-cropper-testing.mjs +84 -227
  232. package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
  233. package/fesm2022/ngwr-image-cropper.mjs +577 -639
  234. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  235. package/fesm2022/ngwr-input-number-testing.mjs +108 -305
  236. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
  237. package/fesm2022/ngwr-input-number.mjs +496 -361
  238. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  239. package/fesm2022/ngwr-input-otp-testing.mjs +172 -420
  240. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
  241. package/fesm2022/ngwr-input-otp.mjs +396 -352
  242. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  243. package/fesm2022/ngwr-input-testing.mjs +52 -100
  244. package/fesm2022/ngwr-input-testing.mjs.map +1 -1
  245. package/fesm2022/ngwr-input.mjs +356 -303
  246. package/fesm2022/ngwr-input.mjs.map +1 -1
  247. package/fesm2022/ngwr-keyboard.mjs +63 -45
  248. package/fesm2022/ngwr-keyboard.mjs.map +1 -1
  249. package/fesm2022/ngwr-knob-testing.mjs +101 -223
  250. package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
  251. package/fesm2022/ngwr-knob.mjs +421 -303
  252. package/fesm2022/ngwr-knob.mjs.map +1 -1
  253. package/fesm2022/ngwr-layout.mjs +362 -207
  254. package/fesm2022/ngwr-layout.mjs.map +1 -1
  255. package/fesm2022/ngwr-lightbox-testing.mjs +100 -221
  256. package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -1
  257. package/fesm2022/ngwr-lightbox.mjs +335 -268
  258. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  259. package/fesm2022/ngwr-line-chart-testing.mjs +65 -133
  260. package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -1
  261. package/fesm2022/ngwr-line-chart.mjs +356 -281
  262. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  263. package/fesm2022/ngwr-list.mjs +251 -134
  264. package/fesm2022/ngwr-list.mjs.map +1 -1
  265. package/fesm2022/ngwr-loading-bar-router.mjs +26 -68
  266. package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -1
  267. package/fesm2022/ngwr-loading-bar.mjs +173 -186
  268. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  269. package/fesm2022/ngwr-markdown-testing.mjs +174 -505
  270. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -1
  271. package/fesm2022/ngwr-markdown.mjs +1578 -2219
  272. package/fesm2022/ngwr-markdown.mjs.map +1 -1
  273. package/fesm2022/ngwr-marquee-testing.mjs +118 -331
  274. package/fesm2022/ngwr-marquee-testing.mjs.map +1 -1
  275. package/fesm2022/ngwr-marquee.mjs +411 -230
  276. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  277. package/fesm2022/ngwr-media.mjs +100 -127
  278. package/fesm2022/ngwr-media.mjs.map +1 -1
  279. package/fesm2022/ngwr-mention-testing.mjs +179 -506
  280. package/fesm2022/ngwr-mention-testing.mjs.map +1 -1
  281. package/fesm2022/ngwr-mention.mjs +668 -732
  282. package/fesm2022/ngwr-mention.mjs.map +1 -1
  283. package/fesm2022/ngwr-meta.mjs +257 -329
  284. package/fesm2022/ngwr-meta.mjs.map +1 -1
  285. package/fesm2022/ngwr-meter-group-testing.mjs +56 -101
  286. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
  287. package/fesm2022/ngwr-meter-group.mjs +206 -114
  288. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  289. package/fesm2022/ngwr-overlay.mjs +264 -576
  290. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  291. package/fesm2022/ngwr-page-header.mjs +107 -67
  292. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  293. package/fesm2022/ngwr-pagination-testing.mjs +125 -388
  294. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
  295. package/fesm2022/ngwr-pagination.mjs +505 -335
  296. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  297. package/fesm2022/ngwr-pipes.mjs +343 -382
  298. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  299. package/fesm2022/ngwr-platform.mjs +182 -221
  300. package/fesm2022/ngwr-platform.mjs.map +1 -1
  301. package/fesm2022/ngwr-popconfirm-testing.mjs +112 -307
  302. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -1
  303. package/fesm2022/ngwr-popconfirm.mjs +474 -277
  304. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  305. package/fesm2022/ngwr-popover-testing.mjs +114 -332
  306. package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
  307. package/fesm2022/ngwr-popover.mjs +1106 -1311
  308. package/fesm2022/ngwr-popover.mjs.map +1 -1
  309. package/fesm2022/ngwr-progress.mjs +124 -68
  310. package/fesm2022/ngwr-progress.mjs.map +1 -1
  311. package/fesm2022/ngwr-pull-to-refresh.mjs +198 -185
  312. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  313. package/fesm2022/ngwr-qr.mjs +1179 -1100
  314. package/fesm2022/ngwr-qr.mjs.map +1 -1
  315. package/fesm2022/ngwr-radio-testing.mjs +138 -389
  316. package/fesm2022/ngwr-radio-testing.mjs.map +1 -1
  317. package/fesm2022/ngwr-radio.mjs +346 -239
  318. package/fesm2022/ngwr-radio.mjs.map +1 -1
  319. package/fesm2022/ngwr-rating-testing.mjs +153 -390
  320. package/fesm2022/ngwr-rating-testing.mjs.map +1 -1
  321. package/fesm2022/ngwr-rating.mjs +281 -247
  322. package/fesm2022/ngwr-rating.mjs.map +1 -1
  323. package/fesm2022/ngwr-result.mjs +353 -114
  324. package/fesm2022/ngwr-result.mjs.map +1 -1
  325. package/fesm2022/ngwr-rotating-text-testing.mjs +45 -215
  326. package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -1
  327. package/fesm2022/ngwr-rotating-text.mjs +402 -272
  328. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  329. package/fesm2022/ngwr-schema-form.mjs +384 -213
  330. package/fesm2022/ngwr-schema-form.mjs.map +1 -1
  331. package/fesm2022/ngwr-scroll.mjs +95 -105
  332. package/fesm2022/ngwr-scroll.mjs.map +1 -1
  333. package/fesm2022/ngwr-segmented-testing.mjs +184 -593
  334. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
  335. package/fesm2022/ngwr-segmented.mjs +235 -251
  336. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  337. package/fesm2022/ngwr-select-testing.mjs +139 -284
  338. package/fesm2022/ngwr-select-testing.mjs.map +1 -1
  339. package/fesm2022/ngwr-select.mjs +1784 -2098
  340. package/fesm2022/ngwr-select.mjs.map +1 -1
  341. package/fesm2022/ngwr-shiny-text-testing.mjs +83 -228
  342. package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -1
  343. package/fesm2022/ngwr-shiny-text.mjs +304 -131
  344. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  345. package/fesm2022/ngwr-sidebar.mjs +256 -205
  346. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  347. package/fesm2022/ngwr-skeleton.mjs +101 -72
  348. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  349. package/fesm2022/ngwr-slider-testing.mjs +191 -473
  350. package/fesm2022/ngwr-slider-testing.mjs.map +1 -1
  351. package/fesm2022/ngwr-slider.mjs +430 -443
  352. package/fesm2022/ngwr-slider.mjs.map +1 -1
  353. package/fesm2022/ngwr-sparkline-testing.mjs +37 -74
  354. package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -1
  355. package/fesm2022/ngwr-sparkline.mjs +311 -196
  356. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  357. package/fesm2022/ngwr-speed-dial-testing.mjs +135 -278
  358. package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
  359. package/fesm2022/ngwr-speed-dial.mjs +242 -140
  360. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  361. package/fesm2022/ngwr-spinner.mjs +97 -60
  362. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  363. package/fesm2022/ngwr-splash-cursor-testing.mjs +23 -87
  364. package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -1
  365. package/fesm2022/ngwr-splash-cursor.mjs +980 -725
  366. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  367. package/fesm2022/ngwr-split-text-testing.mjs +48 -218
  368. package/fesm2022/ngwr-split-text-testing.mjs.map +1 -1
  369. package/fesm2022/ngwr-split-text.mjs +365 -220
  370. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  371. package/fesm2022/ngwr-splitter-testing.mjs +107 -241
  372. package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
  373. package/fesm2022/ngwr-splitter.mjs +222 -184
  374. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  375. package/fesm2022/ngwr-spotlight-card-testing.mjs +105 -360
  376. package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -1
  377. package/fesm2022/ngwr-spotlight-card.mjs +217 -135
  378. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  379. package/fesm2022/ngwr-squircle.mjs +410 -326
  380. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  381. package/fesm2022/ngwr-star-border-testing.mjs +53 -168
  382. package/fesm2022/ngwr-star-border-testing.mjs.map +1 -1
  383. package/fesm2022/ngwr-star-border.mjs +160 -70
  384. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  385. package/fesm2022/ngwr-statistic.mjs +570 -389
  386. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  387. package/fesm2022/ngwr-stepper-testing.mjs +158 -471
  388. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
  389. package/fesm2022/ngwr-stepper.mjs +336 -215
  390. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  391. package/fesm2022/ngwr-storage.mjs +217 -330
  392. package/fesm2022/ngwr-storage.mjs.map +1 -1
  393. package/fesm2022/ngwr-switch-testing.mjs +42 -75
  394. package/fesm2022/ngwr-switch-testing.mjs.map +1 -1
  395. package/fesm2022/ngwr-switch.mjs +197 -114
  396. package/fesm2022/ngwr-switch.mjs.map +1 -1
  397. package/fesm2022/ngwr-table-testing.mjs +238 -572
  398. package/fesm2022/ngwr-table-testing.mjs.map +1 -1
  399. package/fesm2022/ngwr-table.mjs +1875 -1446
  400. package/fesm2022/ngwr-table.mjs.map +1 -1
  401. package/fesm2022/ngwr-tabs-router.mjs +84 -153
  402. package/fesm2022/ngwr-tabs-router.mjs.map +1 -1
  403. package/fesm2022/ngwr-tabs-testing.mjs +217 -617
  404. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
  405. package/fesm2022/ngwr-tabs.mjs +402 -425
  406. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  407. package/fesm2022/ngwr-textarea-testing.mjs +84 -236
  408. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -1
  409. package/fesm2022/ngwr-textarea.mjs +385 -264
  410. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  411. package/fesm2022/ngwr-theme.mjs +247 -443
  412. package/fesm2022/ngwr-theme.mjs.map +1 -1
  413. package/fesm2022/ngwr-tilt-card-testing.mjs +79 -186
  414. package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -1
  415. package/fesm2022/ngwr-tilt-card.mjs +257 -168
  416. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  417. package/fesm2022/ngwr-timeline.mjs +157 -70
  418. package/fesm2022/ngwr-timeline.mjs.map +1 -1
  419. package/fesm2022/ngwr-toast-testing.mjs +59 -99
  420. package/fesm2022/ngwr-toast-testing.mjs.map +1 -1
  421. package/fesm2022/ngwr-toast.mjs +769 -691
  422. package/fesm2022/ngwr-toast.mjs.map +1 -1
  423. package/fesm2022/ngwr-toolbar.mjs +73 -58
  424. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  425. package/fesm2022/ngwr-tour-testing.mjs +75 -171
  426. package/fesm2022/ngwr-tour-testing.mjs.map +1 -1
  427. package/fesm2022/ngwr-tour.mjs +333 -347
  428. package/fesm2022/ngwr-tour.mjs.map +1 -1
  429. package/fesm2022/ngwr-transfer-testing.mjs +195 -534
  430. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -1
  431. package/fesm2022/ngwr-transfer.mjs +441 -322
  432. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  433. package/fesm2022/ngwr-tree-testing.mjs +277 -754
  434. package/fesm2022/ngwr-tree-testing.mjs.map +1 -1
  435. package/fesm2022/ngwr-tree.mjs +876 -906
  436. package/fesm2022/ngwr-tree.mjs.map +1 -1
  437. package/fesm2022/ngwr-typewriter-testing.mjs +50 -237
  438. package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
  439. package/fesm2022/ngwr-typewriter.mjs +461 -242
  440. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  441. package/fesm2022/ngwr-typography.mjs +142 -81
  442. package/fesm2022/ngwr-typography.mjs.map +1 -1
  443. package/fesm2022/ngwr-utils.mjs +304 -613
  444. package/fesm2022/ngwr-utils.mjs.map +1 -1
  445. package/fesm2022/ngwr-validators.mjs +179 -361
  446. package/fesm2022/ngwr-validators.mjs.map +1 -1
  447. package/fesm2022/ngwr-version.mjs +17 -47
  448. package/fesm2022/ngwr-version.mjs.map +1 -1
  449. package/fesm2022/ngwr-virtual-scroll.mjs +259 -125
  450. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  451. package/fesm2022/ngwr-waves-testing.mjs +34 -125
  452. package/fesm2022/ngwr-waves-testing.mjs.map +1 -1
  453. package/fesm2022/ngwr-waves.mjs +816 -373
  454. package/fesm2022/ngwr-waves.mjs.map +1 -1
  455. package/fesm2022/ngwr-window-testing.mjs +171 -366
  456. package/fesm2022/ngwr-window-testing.mjs.map +1 -1
  457. package/fesm2022/ngwr-window.mjs +1437 -1351
  458. package/fesm2022/ngwr-window.mjs.map +1 -1
  459. package/fesm2022/ngwr.mjs +0 -4
  460. package/input-number/styles/_index.scss +33 -35
  461. package/llms-full.txt +2 -2
  462. package/package.json +1 -1
  463. package/segmented/styles/_index.scss +10 -3
  464. package/types/ngwr-action-sheet-testing.d.ts +174 -200
  465. package/types/ngwr-action-sheet.d.ts +83 -45
  466. package/types/ngwr-affix.d.ts +27 -22
  467. package/types/ngwr-alert.d.ts +93 -59
  468. package/types/ngwr-anchor.d.ts +52 -35
  469. package/types/ngwr-aurora.d.ts +53 -35
  470. package/types/ngwr-avatar.d.ts +97 -81
  471. package/types/ngwr-back-top.d.ts +36 -23
  472. package/types/ngwr-badge.d.ts +160 -105
  473. package/types/ngwr-bar-chart-testing.d.ts +40 -58
  474. package/types/ngwr-bar-chart.d.ts +86 -60
  475. package/types/ngwr-blur-text-testing.d.ts +103 -121
  476. package/types/ngwr-blur-text.d.ts +99 -60
  477. package/types/ngwr-border-glow-testing.d.ts +155 -173
  478. package/types/ngwr-border-glow.d.ts +93 -45
  479. package/types/ngwr-breadcrumbs.d.ts +60 -32
  480. package/types/ngwr-burger.d.ts +38 -23
  481. package/types/ngwr-button-testing.d.ts +41 -59
  482. package/types/ngwr-button.d.ts +213 -163
  483. package/types/ngwr-calendar-heatmap-testing.d.ts +38 -56
  484. package/types/ngwr-calendar-heatmap.d.ts +151 -105
  485. package/types/ngwr-calendar-testing.d.ts +198 -224
  486. package/types/ngwr-calendar.d.ts +285 -246
  487. package/types/ngwr-card.d.ts +41 -23
  488. package/types/ngwr-carousel-testing.d.ts +196 -214
  489. package/types/ngwr-carousel.d.ts +173 -122
  490. package/types/ngwr-cascader-testing.d.ts +338 -372
  491. package/types/ngwr-cascader.d.ts +230 -161
  492. package/types/ngwr-checkbox-testing.d.ts +45 -63
  493. package/types/ngwr-checkbox.d.ts +238 -183
  494. package/types/ngwr-circular-text-testing.d.ts +108 -126
  495. package/types/ngwr-circular-text.d.ts +53 -41
  496. package/types/ngwr-click-spark.d.ts +82 -50
  497. package/types/ngwr-clipboard.d.ts +40 -44
  498. package/types/ngwr-collapse-testing.d.ts +193 -219
  499. package/types/ngwr-collapse.d.ts +82 -71
  500. package/types/ngwr-color-picker-testing.d.ts +211 -237
  501. package/types/ngwr-color-picker.d.ts +343 -300
  502. package/types/ngwr-command-palette-testing.d.ts +311 -345
  503. package/types/ngwr-command-palette.d.ts +257 -197
  504. package/types/ngwr-compare.d.ts +102 -67
  505. package/types/ngwr-confetti.d.ts +51 -55
  506. package/types/ngwr-config.d.ts +44 -71
  507. package/types/ngwr-context-menu-testing.d.ts +301 -327
  508. package/types/ngwr-context-menu.d.ts +350 -310
  509. package/types/ngwr-cookie.d.ts +37 -41
  510. package/types/ngwr-counter.d.ts +223 -128
  511. package/types/ngwr-date-adapters-fns.d.ts +40 -59
  512. package/types/ngwr-date-adapters-luxon.d.ts +61 -72
  513. package/types/ngwr-date-picker-testing.d.ts +295 -339
  514. package/types/ngwr-date-picker.d.ts +759 -583
  515. package/types/ngwr-date.d.ts +229 -258
  516. package/types/ngwr-decrypt-text-testing.d.ts +140 -158
  517. package/types/ngwr-decrypt-text.d.ts +104 -62
  518. package/types/ngwr-density.d.ts +42 -57
  519. package/types/ngwr-descriptions.d.ts +50 -27
  520. package/types/ngwr-dialog-testing.d.ts +36 -54
  521. package/types/ngwr-dialog.d.ts +166 -190
  522. package/types/ngwr-directives.d.ts +82 -60
  523. package/types/ngwr-divider.d.ts +78 -62
  524. package/types/ngwr-donut-chart-testing.d.ts +36 -54
  525. package/types/ngwr-donut-chart.d.ts +102 -66
  526. package/types/ngwr-drag-drop.d.ts +139 -106
  527. package/types/ngwr-drawer-testing.d.ts +141 -159
  528. package/types/ngwr-drawer.d.ts +374 -316
  529. package/types/ngwr-dropdown-testing.d.ts +128 -154
  530. package/types/ngwr-dropdown.d.ts +260 -166
  531. package/types/ngwr-editor-testing.d.ts +312 -330
  532. package/types/ngwr-editor.d.ts +435 -344
  533. package/types/ngwr-empty.d.ts +41 -28
  534. package/types/ngwr-event-calendar-testing.d.ts +217 -243
  535. package/types/ngwr-event-calendar.d.ts +340 -298
  536. package/types/ngwr-falling-text-testing.d.ts +108 -126
  537. package/types/ngwr-falling-text.d.ts +57 -35
  538. package/types/ngwr-file-upload-testing.d.ts +133 -151
  539. package/types/ngwr-file-upload.d.ts +193 -128
  540. package/types/ngwr-form-testing.d.ts +255 -282
  541. package/types/ngwr-form.d.ts +324 -306
  542. package/types/ngwr-fuzzy-text-testing.d.ts +63 -81
  543. package/types/ngwr-fuzzy-text.d.ts +152 -65
  544. package/types/ngwr-gauge-testing.d.ts +43 -61
  545. package/types/ngwr-gauge.d.ts +113 -61
  546. package/types/ngwr-glitch-text-testing.d.ts +125 -143
  547. package/types/ngwr-glitch-text.d.ts +47 -24
  548. package/types/ngwr-gradient-text-testing.d.ts +114 -132
  549. package/types/ngwr-gradient-text.d.ts +51 -24
  550. package/types/ngwr-graph-testing.d.ts +89 -115
  551. package/types/ngwr-graph.d.ts +137 -124
  552. package/types/ngwr-hotkey.d.ts +85 -75
  553. package/types/ngwr-i18n-ar.d.ts +2 -5
  554. package/types/ngwr-i18n-cs.d.ts +2 -5
  555. package/types/ngwr-i18n-de.d.ts +2 -5
  556. package/types/ngwr-i18n-en.d.ts +2 -5
  557. package/types/ngwr-i18n-es.d.ts +2 -5
  558. package/types/ngwr-i18n-fr.d.ts +2 -5
  559. package/types/ngwr-i18n-he.d.ts +2 -5
  560. package/types/ngwr-i18n-hi.d.ts +2 -5
  561. package/types/ngwr-i18n-id.d.ts +2 -5
  562. package/types/ngwr-i18n-it.d.ts +2 -5
  563. package/types/ngwr-i18n-ja.d.ts +2 -5
  564. package/types/ngwr-i18n-ko.d.ts +2 -5
  565. package/types/ngwr-i18n-nl.d.ts +2 -5
  566. package/types/ngwr-i18n-pl.d.ts +2 -5
  567. package/types/ngwr-i18n-pt.d.ts +2 -5
  568. package/types/ngwr-i18n-ru.d.ts +2 -5
  569. package/types/ngwr-i18n-sv.d.ts +2 -5
  570. package/types/ngwr-i18n-tr.d.ts +2 -5
  571. package/types/ngwr-i18n-uk.d.ts +2 -5
  572. package/types/ngwr-i18n-vi.d.ts +2 -5
  573. package/types/ngwr-i18n-zh-TW.d.ts +2 -5
  574. package/types/ngwr-i18n-zh.d.ts +2 -5
  575. package/types/ngwr-i18n.d.ts +202 -246
  576. package/types/ngwr-icon-adapters-feather.d.ts +2 -11
  577. package/types/ngwr-icon-adapters-lucide.d.ts +2 -12
  578. package/types/ngwr-icon.d.ts +62 -84
  579. package/types/ngwr-image-cropper-testing.d.ts +116 -134
  580. package/types/ngwr-image-cropper.d.ts +287 -252
  581. package/types/ngwr-input-number-testing.d.ts +164 -182
  582. package/types/ngwr-input-number.d.ts +231 -150
  583. package/types/ngwr-input-otp-testing.d.ts +210 -244
  584. package/types/ngwr-input-otp.d.ts +167 -123
  585. package/types/ngwr-input-testing.d.ts +42 -60
  586. package/types/ngwr-input.d.ts +118 -94
  587. package/types/ngwr-keyboard.d.ts +14 -12
  588. package/types/ngwr-knob-testing.d.ts +106 -124
  589. package/types/ngwr-knob.d.ts +194 -129
  590. package/types/ngwr-layout.d.ts +57 -40
  591. package/types/ngwr-lightbox-testing.d.ts +101 -119
  592. package/types/ngwr-lightbox.d.ts +140 -87
  593. package/types/ngwr-line-chart-testing.d.ts +51 -69
  594. package/types/ngwr-line-chart.d.ts +171 -134
  595. package/types/ngwr-list.d.ts +55 -27
  596. package/types/ngwr-loading-bar-router.d.ts +2 -12
  597. package/types/ngwr-loading-bar.d.ts +45 -39
  598. package/types/ngwr-markdown-testing.d.ts +323 -350
  599. package/types/ngwr-markdown.d.ts +432 -318
  600. package/types/ngwr-marquee-testing.d.ts +190 -216
  601. package/types/ngwr-marquee.d.ts +127 -75
  602. package/types/ngwr-media.d.ts +25 -39
  603. package/types/ngwr-mention-testing.d.ts +274 -300
  604. package/types/ngwr-mention.d.ts +249 -164
  605. package/types/ngwr-meta.d.ts +93 -108
  606. package/types/ngwr-meter-group-testing.d.ts +33 -51
  607. package/types/ngwr-meter-group.d.ts +86 -60
  608. package/types/ngwr-overlay.d.ts +57 -132
  609. package/types/ngwr-page-header.d.ts +32 -19
  610. package/types/ngwr-pagination-testing.d.ts +215 -233
  611. package/types/ngwr-pagination.d.ts +213 -141
  612. package/types/ngwr-pipes.d.ts +67 -84
  613. package/types/ngwr-platform.d.ts +52 -57
  614. package/types/ngwr-popconfirm-testing.d.ts +181 -199
  615. package/types/ngwr-popconfirm.d.ts +151 -82
  616. package/types/ngwr-popover-testing.d.ts +183 -201
  617. package/types/ngwr-popover.d.ts +291 -207
  618. package/types/ngwr-progress.d.ts +38 -25
  619. package/types/ngwr-pull-to-refresh.d.ts +55 -40
  620. package/types/ngwr-qr.d.ts +79 -37
  621. package/types/ngwr-radio-testing.d.ts +208 -234
  622. package/types/ngwr-radio.d.ts +162 -125
  623. package/types/ngwr-rating-testing.d.ts +218 -244
  624. package/types/ngwr-rating.d.ts +146 -111
  625. package/types/ngwr-result.d.ts +85 -41
  626. package/types/ngwr-rotating-text-testing.d.ts +107 -125
  627. package/types/ngwr-rotating-text.d.ts +96 -52
  628. package/types/ngwr-schema-form.d.ts +57 -49
  629. package/types/ngwr-scroll.d.ts +27 -31
  630. package/types/ngwr-segmented-testing.d.ts +333 -359
  631. package/types/ngwr-segmented.d.ts +183 -165
  632. package/types/ngwr-select-testing.d.ts +128 -154
  633. package/types/ngwr-select.d.ts +1083 -906
  634. package/types/ngwr-shiny-text-testing.d.ts +82 -100
  635. package/types/ngwr-shiny-text.d.ts +83 -36
  636. package/types/ngwr-sidebar.d.ts +108 -93
  637. package/types/ngwr-skeleton.d.ts +34 -26
  638. package/types/ngwr-slider-testing.d.ts +228 -254
  639. package/types/ngwr-slider.d.ts +236 -186
  640. package/types/ngwr-sparkline-testing.d.ts +29 -47
  641. package/types/ngwr-sparkline.d.ts +130 -88
  642. package/types/ngwr-speed-dial-testing.d.ts +129 -155
  643. package/types/ngwr-speed-dial.d.ts +92 -57
  644. package/types/ngwr-spinner.d.ts +30 -23
  645. package/types/ngwr-splash-cursor-testing.d.ts +42 -60
  646. package/types/ngwr-splash-cursor.d.ts +129 -61
  647. package/types/ngwr-split-text-testing.d.ts +119 -137
  648. package/types/ngwr-split-text.d.ts +120 -71
  649. package/types/ngwr-splitter-testing.d.ts +114 -132
  650. package/types/ngwr-splitter.d.ts +85 -55
  651. package/types/ngwr-spotlight-card-testing.d.ts +177 -203
  652. package/types/ngwr-spotlight-card.d.ts +50 -32
  653. package/types/ngwr-squircle.d.ts +112 -70
  654. package/types/ngwr-star-border-testing.d.ts +74 -92
  655. package/types/ngwr-star-border.d.ts +42 -20
  656. package/types/ngwr-statistic.d.ts +210 -130
  657. package/types/ngwr-stepper-testing.d.ts +258 -284
  658. package/types/ngwr-stepper.d.ts +112 -75
  659. package/types/ngwr-storage.d.ts +96 -118
  660. package/types/ngwr-switch-testing.d.ts +26 -44
  661. package/types/ngwr-switch.d.ts +92 -62
  662. package/types/ngwr-table-testing.d.ts +291 -333
  663. package/types/ngwr-table.d.ts +922 -707
  664. package/types/ngwr-tabs-router.d.ts +21 -24
  665. package/types/ngwr-tabs-testing.d.ts +354 -380
  666. package/types/ngwr-tabs.d.ts +169 -155
  667. package/types/ngwr-textarea-testing.d.ts +123 -141
  668. package/types/ngwr-textarea.d.ts +160 -105
  669. package/types/ngwr-theme.d.ts +81 -163
  670. package/types/ngwr-tilt-card-testing.d.ts +94 -112
  671. package/types/ngwr-tilt-card.d.ts +64 -35
  672. package/types/ngwr-timeline.d.ts +36 -19
  673. package/types/ngwr-toast-testing.d.ts +37 -55
  674. package/types/ngwr-toast.d.ts +165 -209
  675. package/types/ngwr-toolbar.d.ts +17 -14
  676. package/types/ngwr-tour-testing.d.ts +84 -102
  677. package/types/ngwr-tour.d.ts +142 -144
  678. package/types/ngwr-transfer-testing.d.ts +293 -328
  679. package/types/ngwr-transfer.d.ts +217 -159
  680. package/types/ngwr-tree-testing.d.ts +428 -454
  681. package/types/ngwr-tree.d.ts +400 -296
  682. package/types/ngwr-typewriter-testing.d.ts +125 -143
  683. package/types/ngwr-typewriter.d.ts +137 -63
  684. package/types/ngwr-typography.d.ts +49 -27
  685. package/types/ngwr-utils.d.ts +100 -107
  686. package/types/ngwr-validators.d.ts +94 -104
  687. package/types/ngwr-version.d.ts +3 -14
  688. package/types/ngwr-virtual-scroll.d.ts +86 -58
  689. package/types/ngwr-waves-testing.d.ts +61 -79
  690. package/types/ngwr-waves.d.ts +116 -63
  691. package/types/ngwr-window-testing.d.ts +178 -204
  692. package/types/ngwr-window.d.ts +299 -325
  693. package/types/ngwr.d.ts +1 -2
  694. package/fesm2022/ngwr.mjs.map +0 -1
@@ -1,313 +1,114 @@
1
- import { ComponentHarness, HarnessPredicate, TestKey } from '@angular/cdk/testing';
2
-
3
- /**
4
- * @license
5
- *
6
- * Use of this source code is governed by an MIT-style license that can be
7
- * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
8
- */
9
- /**
10
- * Test harness for one row inside a {@link WrActionSheetHarness}.
11
- *
12
- * A row is a real `<button>`, not an ARIA-decorated div, so `disabled` is the
13
- * property rather than an attribute and the CDK refuses to click it — which is the
14
- * behaviour a spec wants asserted, since the component ALSO checks `disabled`
15
- * inside its own handler. Either guard alone would keep a disabled row inert; both
16
- * being there means removing one is invisible until the other is removed too, and
17
- * {@link click} is where that shows up.
18
- *
19
- * **Clicking a row closes the sheet.** The component emits `action` and clears
20
- * `open` in the same call, so a harness held across a {@link click} is pointed at a
21
- * detached element the moment it returns — read what you need first, and get a
22
- * fresh harness afterwards if the sheet was reopened.
23
- *
24
- * @see https://ngwr.dev/guides/testing
25
- */
26
- class WrActionSheetActionHarness extends ComponentHarness {
27
- /** The class every row carries, cancel rows included. */
28
- static hostSelector = '.wr-action-sheet__action';
29
- /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
30
- static with(options = {}) {
31
- return new HarnessPredicate(WrActionSheetActionHarness, options)
32
- .addOption('label', options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label))
33
- .addOption('role', options.role, async (harness, role) => (await harness.getRole()) === role)
34
- .addOption('disabled', options.disabled, async (harness, disabled) => (await harness.isDisabled()) === disabled);
35
- }
36
- /**
37
- * The row's label, trimmed.
38
- *
39
- * Read from `.wr-action-sheet__label` rather than from the button, so a leading
40
- * icon can never join it. The icon contributes no text today — it is an `<svg>` —
41
- * but an icon set that ships a `<title>` for its own accessibility would, and the
42
- * label element is the thing that actually holds the string.
43
- */
44
- async getLabel() {
45
- return (await this.locatorFor('.wr-action-sheet__label')()).text();
46
- }
47
- /**
48
- * The row's visual role, as the component painted it.
49
- *
50
- * `default` is returned for a row the caller left unroled, which is what the
51
- * component does with the value: only `destructive` and `cancel` change anything,
52
- * and everything else falls through to the plain row. The two modifiers are
53
- * mutually exclusive by construction — `cancel` rows are filtered into their own
54
- * group before the destructive class is ever considered — so reading them in
55
- * either order gives the same answer.
56
- */
57
- async getRole() {
58
- const host = await this.host();
59
- if (await host.hasClass('wr-action-sheet__action--cancel'))
60
- return 'cancel';
61
- if (await host.hasClass('wr-action-sheet__action--destructive'))
62
- return 'destructive';
63
- return 'default';
64
- }
65
- /**
66
- * Whether the row refuses interaction, from the button's own `disabled` property
67
- * — the thing the CDK consults before dispatching a click, and the DOM before
68
- * delivering one.
69
- *
70
- * There is no `aria-disabled` to fall back to here, and none is wanted: the row is
71
- * a native button, where the property already carries the state to assistive tech.
72
- */
73
- async isDisabled() {
74
- return (await this.host()).getProperty('disabled');
75
- }
76
- /** Whether the row draws a leading icon. */
77
- async hasIcon() {
78
- return (await this.locatorForOptional('.wr-action-sheet__icon')()) !== null;
79
- }
80
- /**
81
- * The icon's registered name, or `null` on a row without one.
82
- *
83
- * From `wr-icon`'s reflected `data-icon`, which is the only place the name reaches
84
- * the DOM — the rendered `<svg>` carries no trace of which entry of the set it
85
- * came from.
86
- */
87
- async getIconName() {
88
- const icon = await this.locatorForOptional('.wr-action-sheet__icon')();
89
- return icon ? icon.getAttribute('data-icon') : null;
90
- }
91
- /**
92
- * Pick this row — emitting `action` and closing the sheet.
93
- *
94
- * Throws on a disabled row instead of quietly doing nothing. The click would not
95
- * land anyway (the DOM swallows it), so the alternative is a spec that reads as
96
- * "picked the row" and asserts a sheet that never moved.
97
- */
98
- async click() {
99
- if (await this.isDisabled()) {
100
- throw new Error(`WrActionSheetActionHarness.click(): "${await this.getLabel()}" is disabled. The DOM swallows a click ` +
101
- 'on a disabled button and the component checks `disabled` again before emitting, so nothing would ' +
102
- 'happen — assert isDisabled() instead.');
103
- }
104
- await (await this.host()).click();
105
- }
106
- /** Move keyboard focus to the row. */
107
- async focus() {
108
- return (await this.host()).focus();
109
- }
110
- /** Whether the row currently holds focus. */
111
- async isFocused() {
112
- return (await this.host()).isFocused();
113
- }
114
- }
115
-
116
- /**
117
- * @license
118
- *
119
- * Use of this source code is governed by an MIT-style license that can be
120
- * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
121
- */
1
+ import { ComponentHarness, HarnessPredicate, TestKey } from "@angular/cdk/testing";
122
2
  /**
123
- * One `.wr-action-sheet__group` — internal, and the only way to read the rows of ONE
124
- * group: a `TestElement` cannot be queried into, so scoping to a child element means
125
- * a harness anchored on it.
126
- */
127
- class GroupHarness extends ComponentHarness {
128
- static hostSelector = '.wr-action-sheet__group';
129
- async getLabels() {
130
- const labels = await this.locatorForAll('.wr-action-sheet__label')();
131
- return Promise.all(labels.map(label => label.text()));
132
- }
133
- }
3
+ * @license
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
7
+ */
8
+ var WrActionSheetActionHarness = class WrActionSheetActionHarness extends ComponentHarness {
9
+ static hostSelector = ".wr-action-sheet__action";
10
+ static with(options = {}) {
11
+ return new HarnessPredicate(WrActionSheetActionHarness, options).addOption("label", options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label)).addOption("role", options.role, async (harness, role) => await harness.getRole() === role).addOption("disabled", options.disabled, async (harness, disabled) => await harness.isDisabled() === disabled);
12
+ }
13
+ async getLabel() {
14
+ return (await this.locatorFor(".wr-action-sheet__label")()).text();
15
+ }
16
+ async getRole() {
17
+ const host = await this.host();
18
+ if (await host.hasClass("wr-action-sheet__action--cancel")) return "cancel";
19
+ if (await host.hasClass("wr-action-sheet__action--destructive")) return "destructive";
20
+ return "default";
21
+ }
22
+ async isDisabled() {
23
+ return (await this.host()).getProperty("disabled");
24
+ }
25
+ async hasIcon() {
26
+ return await this.locatorForOptional(".wr-action-sheet__icon")() !== null;
27
+ }
28
+ async getIconName() {
29
+ const icon = await this.locatorForOptional(".wr-action-sheet__icon")();
30
+ return icon ? icon.getAttribute("data-icon") : null;
31
+ }
32
+ async click() {
33
+ if (await this.isDisabled()) throw new Error(`WrActionSheetActionHarness.click(): "${await this.getLabel()}" is disabled. The DOM swallows a click on a disabled button and the component checks \`disabled\` again before emitting, so nothing would happen — assert isDisabled() instead.`);
34
+ await (await this.host()).click();
35
+ }
36
+ async focus() {
37
+ return (await this.host()).focus();
38
+ }
39
+ async isFocused() {
40
+ return (await this.host()).isFocused();
41
+ }
42
+ };
134
43
  /**
135
- * Test harness for an open `<wr-action-sheet>` — the iOS-style bottom sheet of
136
- * choices.
137
- *
138
- * The sheet renders through `<wr-drawer>`, so its rows are in the NGWR overlay
139
- * container rather than in the fixture: load this from
140
- * `TestbedHarnessEnvironment.documentRootLoader()`. A fixture-scoped loader finds
141
- * nothing at all — the `<wr-action-sheet>` host element itself holds no content and
142
- * the drawer it wraps is `display: none`.
143
- *
144
- * The anchor is `.wr-action-sheet`, the sheet's own root inside the drawer panel,
145
- * which makes each instance self-scoping: two sheets open at once are two hosts, and
146
- * every query here descends from one of them. That is worth stating because it is
147
- * NOT how the drawer harness underneath has to work — a drawer publishes no link to
148
- * the overlay it opened, so `WrDrawerHarness` anchors on the shared pane and scopes
149
- * by id.
150
- *
151
- * **What belongs to the drawer, not here.** Dismissal by backdrop click or by the ✕
152
- * button, the modal role, the focus trap and the panel's position are all the
153
- * drawer's surface, and `WrDrawerHarness` from the same root loader answers them.
154
- * {@link sendEscape} is the one exception, kept because dismissing without choosing
155
- * is a documented behaviour of the sheet itself: it closes and emits NOTHING, which
156
- * is the assertion most specs are actually after.
157
- *
158
- * @example
159
- * ```ts
160
- * const rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture);
161
- * const sheet = await rootLoader.getHarness(WrActionSheetHarness);
162
- *
163
- * expect(await sheet.getActionLabels()).toEqual(['Take Photo', 'Delete', 'Cancel']);
164
- * await sheet.select({ label: 'Delete' });
165
- * ```
166
- *
167
- * @see https://ngwr.dev/guides/testing
168
- */
169
- class WrActionSheetHarness extends ComponentHarness {
170
- /** The sheet's root inside the drawer panel. A closed sheet renders none. */
171
- static hostSelector = '.wr-action-sheet';
172
- /** Build a predicate that narrows the query — sheets can be stacked. */
173
- static with(options = {}) {
174
- return new HarnessPredicate(WrActionSheetHarness, options)
175
- .addOption('title', options.title, (harness, title) => HarnessPredicate.stringMatches(harness.getTitle(), title))
176
- .addOption('message', options.message, (harness, message) => HarnessPredicate.stringMatches(harness.getMessage(), message))
177
- .addOption('accessibleName', options.accessibleName, (harness, name) => HarnessPredicate.stringMatches(harness.getAccessibleName(), name));
178
- }
179
- /**
180
- * Whether this sheet is still open.
181
- *
182
- * A harness can only be obtained while the sheet is open — closing disposes the
183
- * overlay and everything in it — so this is the answer for a harness you are
184
- * already HOLDING: it flips to `false` after a pick or a dismissal, where a fresh
185
- * `getHarnessOrNull()` comes back `null`.
186
- *
187
- * Attachment is the test rather than a class, because disposal removes the element
188
- * without changing anything on it.
189
- */
190
- async isOpen() {
191
- return (await this.host()).matchesSelector('body .wr-action-sheet');
192
- }
193
- /** The visible heading, or `null` when the sheet was opened without a `title`. */
194
- async getTitle() {
195
- const title = await this.locatorForOptional('.wr-action-sheet__title')();
196
- return title ? title.text() : null;
197
- }
198
- /** The muted sub-heading, or `null` when the sheet has no `message`. */
199
- async getMessage() {
200
- const message = await this.locatorForOptional('.wr-action-sheet__message')();
201
- return message ? message.text() : null;
202
- }
203
- /**
204
- * The name the dialog announces.
205
- *
206
- * The sheet always publishes one, and for an untitled sheet it is INVISIBLE: the
207
- * component renders a screen-reader-only `[wrDrawerTitle]` carrying
208
- * `actionSheet.label` (English default `Actions`), because a bottom sheet is an
209
- * `aria-modal` dialog and an unnamed one is announced as nothing at all. Nothing
210
- * on screen changes when that string is wrong or missing, which is exactly why it
211
- * is worth an assertion.
212
- *
213
- * Read from `.wr-drawer__title` — the class the title directive applies — so the
214
- * one query answers for both shapes: the visible heading carries it too.
215
- */
216
- async getAccessibleName() {
217
- return (await this.locatorFor('.wr-drawer__title')()).text();
218
- }
219
- /** Whether the announced name comes from a visible heading rather than the fallback. */
220
- async isTitleVisible() {
221
- return (await this.locatorForOptional('.wr-action-sheet__title')()) !== null;
222
- }
223
- /**
224
- * Whether the dialog is actually WIRED to that name — the drawer panel's
225
- * `aria-labelledby` resolving to this sheet's own title element, and to nothing
226
- * else on the page.
227
- *
228
- * {@link getAccessibleName} only proves a string exists in the markup; a screen
229
- * reader reads it only if the reference points at it. The two are separate
230
- * failures and the second is silent: the title renders, the sheet looks right, and
231
- * the dialog is announced as unnamed. Worth its own assertion because the drawer
232
- * resolves the reference AFTER attaching the panel rather than while rendering it,
233
- * so a title that arrives late is named late or not at all.
234
- *
235
- * Counted across the document as well, because two panels answering to one id hand
236
- * every reference to whichever comes first — which is how a second sheet ends up
237
- * announcing the first one's title.
238
- */
239
- async isNamed() {
240
- const id = await (await this.locatorFor('.wr-drawer__title')()).getAttribute('id');
241
- if (!id)
242
- return false;
243
- const root = this.documentRootLocatorFactory();
244
- const named = await root.locatorForAll(`[aria-labelledby="${id}"]`)();
245
- const titles = await root.locatorForAll(`[id="${id}"]`)();
246
- return named.length === 1 && titles.length === 1;
247
- }
248
- /** The rows this sheet offers, in DOM order — cancel rows last, in their own group. */
249
- async getActions(filters = {}) {
250
- return this.locatorForAll(WrActionSheetActionHarness.with(filters))();
251
- }
252
- /** The labels of every row, in DOM order. */
253
- async getActionLabels() {
254
- const actions = await this.getActions();
255
- return Promise.all(actions.map(action => action.getLabel()));
256
- }
257
- /**
258
- * The labels grouped the way the sheet lays them out: the main group first, then
259
- * the cancel group when there is one.
260
- *
261
- * The grouping is the component's whole visual contract — a `cancel` row is pulled
262
- * out of the list and pinned to the bottom with a gap above it — and it is
263
- * invisible to {@link getActionLabels}, which flattens the two. A cancel row that
264
- * stopped being separated would still come last in DOM order, so the flat list
265
- * cannot catch it.
266
- */
267
- async getActionGroups() {
268
- const groups = await this.locatorForAll(GroupHarness)();
269
- return Promise.all(groups.map(group => group.getLabels()));
270
- }
271
- /**
272
- * Whether the sheet drew a separate bottom group — true exactly when at least one
273
- * row was given `role: 'cancel'`, since the component omits the group entirely
274
- * rather than rendering an empty one.
275
- */
276
- async hasCancelGroup() {
277
- return (await this.locatorForOptional('.wr-action-sheet__group--cancel')()) !== null;
278
- }
279
- /**
280
- * Pick the first row matching the filters.
281
- *
282
- * Throws when nothing matches, naming what the sheet does offer — the alternative
283
- * is a silent no-op followed by an assertion about a sheet that never moved. A
284
- * disabled match throws too, from the row harness.
285
- */
286
- async select(filters) {
287
- const [action] = await this.getActions(filters);
288
- if (!action) {
289
- const offered = await this.getActionLabels();
290
- throw new Error(`WrActionSheetHarness.select(): no row matched ${JSON.stringify(filters)}. ` +
291
- `The sheet offers: ${offered.join(', ')}.`);
292
- }
293
- await action.click();
294
- }
295
- /**
296
- * Press Escape — dismissing the sheet WITHOUT emitting `action`.
297
- *
298
- * The key never needs to reach the sheet itself: the drawer underneath listens
299
- * through the CDK's keyboard dispatcher, which keeps one document listener and
300
- * hands the event to the top-most overlay. So with sheets stacked this dismisses
301
- * the top one whichever harness it is called on.
302
- */
303
- async sendEscape() {
304
- await (await this.host()).sendKeys(TestKey.ESCAPE);
305
- }
306
- }
307
-
308
- /**
309
- * Generated bundle index. Do not edit.
310
- */
311
-
44
+ * @license
45
+ *
46
+ * Use of this source code is governed by an MIT-style license that can be
47
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
48
+ */
49
+ var GroupHarness = class extends ComponentHarness {
50
+ static hostSelector = ".wr-action-sheet__group";
51
+ async getLabels() {
52
+ const labels = await this.locatorForAll(".wr-action-sheet__label")();
53
+ return Promise.all(labels.map((label) => label.text()));
54
+ }
55
+ };
56
+ var WrActionSheetHarness = class WrActionSheetHarness extends ComponentHarness {
57
+ static hostSelector = ".wr-action-sheet";
58
+ static with(options = {}) {
59
+ return new HarnessPredicate(WrActionSheetHarness, options).addOption("title", options.title, (harness, title) => HarnessPredicate.stringMatches(harness.getTitle(), title)).addOption("message", options.message, (harness, message) => HarnessPredicate.stringMatches(harness.getMessage(), message)).addOption("accessibleName", options.accessibleName, (harness, name) => HarnessPredicate.stringMatches(harness.getAccessibleName(), name));
60
+ }
61
+ async isOpen() {
62
+ return (await this.host()).matchesSelector("body .wr-action-sheet");
63
+ }
64
+ async getTitle() {
65
+ const title = await this.locatorForOptional(".wr-action-sheet__title")();
66
+ return title ? title.text() : null;
67
+ }
68
+ async getMessage() {
69
+ const message = await this.locatorForOptional(".wr-action-sheet__message")();
70
+ return message ? message.text() : null;
71
+ }
72
+ async getAccessibleName() {
73
+ return (await this.locatorFor(".wr-drawer__title")()).text();
74
+ }
75
+ async isTitleVisible() {
76
+ return await this.locatorForOptional(".wr-action-sheet__title")() !== null;
77
+ }
78
+ async isNamed() {
79
+ const id = await (await this.locatorFor(".wr-drawer__title")()).getAttribute("id");
80
+ if (!id) return false;
81
+ const root = this.documentRootLocatorFactory();
82
+ const named = await root.locatorForAll(`[aria-labelledby="${id}"]`)();
83
+ const titles = await root.locatorForAll(`[id="${id}"]`)();
84
+ return named.length === 1 && titles.length === 1;
85
+ }
86
+ async getActions(filters = {}) {
87
+ return this.locatorForAll(WrActionSheetActionHarness.with(filters))();
88
+ }
89
+ async getActionLabels() {
90
+ const actions = await this.getActions();
91
+ return Promise.all(actions.map((action) => action.getLabel()));
92
+ }
93
+ async getActionGroups() {
94
+ const groups = await this.locatorForAll(GroupHarness)();
95
+ return Promise.all(groups.map((group) => group.getLabels()));
96
+ }
97
+ async hasCancelGroup() {
98
+ return await this.locatorForOptional(".wr-action-sheet__group--cancel")() !== null;
99
+ }
100
+ async select(filters) {
101
+ const [action] = await this.getActions(filters);
102
+ if (!action) {
103
+ const offered = await this.getActionLabels();
104
+ throw new Error(`WrActionSheetHarness.select(): no row matched ${JSON.stringify(filters)}. The sheet offers: ${offered.join(", ")}.`);
105
+ }
106
+ await action.click();
107
+ }
108
+ async sendEscape() {
109
+ await (await this.host()).sendKeys(TestKey.ESCAPE);
110
+ }
111
+ };
312
112
  export { WrActionSheetActionHarness, WrActionSheetHarness };
313
- //# sourceMappingURL=ngwr-action-sheet-testing.mjs.map
113
+
114
+ //# sourceMappingURL=ngwr-action-sheet-testing.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngwr-action-sheet-testing.mjs","sources":["../../../projects/lib/action-sheet/testing/wr-action-sheet-action-harness.ts","../../../projects/lib/action-sheet/testing/wr-action-sheet-harness.ts","../../../projects/lib/action-sheet/testing/ngwr-action-sheet-testing.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\nimport type { WrActionSheetAction } from 'ngwr/action-sheet';\n\nimport type { WrActionSheetActionHarnessFilters } from './interfaces';\n\n/**\n * Test harness for one row inside a {@link WrActionSheetHarness}.\n *\n * A row is a real `<button>`, not an ARIA-decorated div, so `disabled` is the\n * property rather than an attribute and the CDK refuses to click it — which is the\n * behaviour a spec wants asserted, since the component ALSO checks `disabled`\n * inside its own handler. Either guard alone would keep a disabled row inert; both\n * being there means removing one is invisible until the other is removed too, and\n * {@link click} is where that shows up.\n *\n * **Clicking a row closes the sheet.** The component emits `action` and clears\n * `open` in the same call, so a harness held across a {@link click} is pointed at a\n * detached element the moment it returns — read what you need first, and get a\n * fresh harness afterwards if the sheet was reopened.\n *\n * @see https://ngwr.dev/guides/testing\n */\nexport class WrActionSheetActionHarness extends ComponentHarness {\n /** The class every row carries, cancel rows included. */\n static hostSelector = '.wr-action-sheet__action';\n\n /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */\n static with(options: WrActionSheetActionHarnessFilters = {}): HarnessPredicate<WrActionSheetActionHarness> {\n return new HarnessPredicate(WrActionSheetActionHarness, options)\n .addOption('label', options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label))\n .addOption('role', options.role, async (harness, role) => (await harness.getRole()) === role)\n .addOption('disabled', options.disabled, async (harness, disabled) => (await harness.isDisabled()) === disabled);\n }\n\n /**\n * The row's label, trimmed.\n *\n * Read from `.wr-action-sheet__label` rather than from the button, so a leading\n * icon can never join it. The icon contributes no text today — it is an `<svg>` —\n * but an icon set that ships a `<title>` for its own accessibility would, and the\n * label element is the thing that actually holds the string.\n */\n async getLabel(): Promise<string> {\n return (await this.locatorFor('.wr-action-sheet__label')()).text();\n }\n\n /**\n * The row's visual role, as the component painted it.\n *\n * `default` is returned for a row the caller left unroled, which is what the\n * component does with the value: only `destructive` and `cancel` change anything,\n * and everything else falls through to the plain row. The two modifiers are\n * mutually exclusive by construction — `cancel` rows are filtered into their own\n * group before the destructive class is ever considered — so reading them in\n * either order gives the same answer.\n */\n async getRole(): Promise<NonNullable<WrActionSheetAction['role']>> {\n const host = await this.host();\n if (await host.hasClass('wr-action-sheet__action--cancel')) return 'cancel';\n if (await host.hasClass('wr-action-sheet__action--destructive')) return 'destructive';\n return 'default';\n }\n\n /**\n * Whether the row refuses interaction, from the button's own `disabled` property\n * — the thing the CDK consults before dispatching a click, and the DOM before\n * delivering one.\n *\n * There is no `aria-disabled` to fall back to here, and none is wanted: the row is\n * a native button, where the property already carries the state to assistive tech.\n */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('disabled');\n }\n\n /** Whether the row draws a leading icon. */\n async hasIcon(): Promise<boolean> {\n return (await this.locatorForOptional('.wr-action-sheet__icon')()) !== null;\n }\n\n /**\n * The icon's registered name, or `null` on a row without one.\n *\n * From `wr-icon`'s reflected `data-icon`, which is the only place the name reaches\n * the DOM — the rendered `<svg>` carries no trace of which entry of the set it\n * came from.\n */\n async getIconName(): Promise<string | null> {\n const icon = await this.locatorForOptional('.wr-action-sheet__icon')();\n return icon ? icon.getAttribute('data-icon') : null;\n }\n\n /**\n * Pick this row — emitting `action` and closing the sheet.\n *\n * Throws on a disabled row instead of quietly doing nothing. The click would not\n * land anyway (the DOM swallows it), so the alternative is a spec that reads as\n * \"picked the row\" and asserts a sheet that never moved.\n */\n async click(): Promise<void> {\n if (await this.isDisabled()) {\n throw new Error(\n `WrActionSheetActionHarness.click(): \"${await this.getLabel()}\" is disabled. The DOM swallows a click ` +\n 'on a disabled button and the component checks `disabled` again before emitting, so nothing would ' +\n 'happen — assert isDisabled() instead.'\n );\n }\n await (await this.host()).click();\n }\n\n /** Move keyboard focus to the row. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Whether the row currently holds focus. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { ComponentHarness, HarnessPredicate, TestKey } from '@angular/cdk/testing';\n\nimport type { WrActionSheetActionHarnessFilters, WrActionSheetHarnessFilters } from './interfaces';\nimport { WrActionSheetActionHarness } from './wr-action-sheet-action-harness';\n\n/**\n * One `.wr-action-sheet__group` — internal, and the only way to read the rows of ONE\n * group: a `TestElement` cannot be queried into, so scoping to a child element means\n * a harness anchored on it.\n */\nclass GroupHarness extends ComponentHarness {\n static hostSelector = '.wr-action-sheet__group';\n\n async getLabels(): Promise<string[]> {\n const labels = await this.locatorForAll('.wr-action-sheet__label')();\n return Promise.all(labels.map(label => label.text()));\n }\n}\n\n/**\n * Test harness for an open `<wr-action-sheet>` — the iOS-style bottom sheet of\n * choices.\n *\n * The sheet renders through `<wr-drawer>`, so its rows are in the NGWR overlay\n * container rather than in the fixture: load this from\n * `TestbedHarnessEnvironment.documentRootLoader()`. A fixture-scoped loader finds\n * nothing at all — the `<wr-action-sheet>` host element itself holds no content and\n * the drawer it wraps is `display: none`.\n *\n * The anchor is `.wr-action-sheet`, the sheet's own root inside the drawer panel,\n * which makes each instance self-scoping: two sheets open at once are two hosts, and\n * every query here descends from one of them. That is worth stating because it is\n * NOT how the drawer harness underneath has to work — a drawer publishes no link to\n * the overlay it opened, so `WrDrawerHarness` anchors on the shared pane and scopes\n * by id.\n *\n * **What belongs to the drawer, not here.** Dismissal by backdrop click or by the ✕\n * button, the modal role, the focus trap and the panel's position are all the\n * drawer's surface, and `WrDrawerHarness` from the same root loader answers them.\n * {@link sendEscape} is the one exception, kept because dismissing without choosing\n * is a documented behaviour of the sheet itself: it closes and emits NOTHING, which\n * is the assertion most specs are actually after.\n *\n * @example\n * ```ts\n * const rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture);\n * const sheet = await rootLoader.getHarness(WrActionSheetHarness);\n *\n * expect(await sheet.getActionLabels()).toEqual(['Take Photo', 'Delete', 'Cancel']);\n * await sheet.select({ label: 'Delete' });\n * ```\n *\n * @see https://ngwr.dev/guides/testing\n */\nexport class WrActionSheetHarness extends ComponentHarness {\n /** The sheet's root inside the drawer panel. A closed sheet renders none. */\n static hostSelector = '.wr-action-sheet';\n\n /** Build a predicate that narrows the query — sheets can be stacked. */\n static with(options: WrActionSheetHarnessFilters = {}): HarnessPredicate<WrActionSheetHarness> {\n return new HarnessPredicate(WrActionSheetHarness, options)\n .addOption('title', options.title, (harness, title) => HarnessPredicate.stringMatches(harness.getTitle(), title))\n .addOption('message', options.message, (harness, message) =>\n HarnessPredicate.stringMatches(harness.getMessage(), message)\n )\n .addOption('accessibleName', options.accessibleName, (harness, name) =>\n HarnessPredicate.stringMatches(harness.getAccessibleName(), name)\n );\n }\n\n /**\n * Whether this sheet is still open.\n *\n * A harness can only be obtained while the sheet is open — closing disposes the\n * overlay and everything in it — so this is the answer for a harness you are\n * already HOLDING: it flips to `false` after a pick or a dismissal, where a fresh\n * `getHarnessOrNull()` comes back `null`.\n *\n * Attachment is the test rather than a class, because disposal removes the element\n * without changing anything on it.\n */\n async isOpen(): Promise<boolean> {\n return (await this.host()).matchesSelector('body .wr-action-sheet');\n }\n\n /** The visible heading, or `null` when the sheet was opened without a `title`. */\n async getTitle(): Promise<string | null> {\n const title = await this.locatorForOptional('.wr-action-sheet__title')();\n return title ? title.text() : null;\n }\n\n /** The muted sub-heading, or `null` when the sheet has no `message`. */\n async getMessage(): Promise<string | null> {\n const message = await this.locatorForOptional('.wr-action-sheet__message')();\n return message ? message.text() : null;\n }\n\n /**\n * The name the dialog announces.\n *\n * The sheet always publishes one, and for an untitled sheet it is INVISIBLE: the\n * component renders a screen-reader-only `[wrDrawerTitle]` carrying\n * `actionSheet.label` (English default `Actions`), because a bottom sheet is an\n * `aria-modal` dialog and an unnamed one is announced as nothing at all. Nothing\n * on screen changes when that string is wrong or missing, which is exactly why it\n * is worth an assertion.\n *\n * Read from `.wr-drawer__title` — the class the title directive applies — so the\n * one query answers for both shapes: the visible heading carries it too.\n */\n async getAccessibleName(): Promise<string> {\n return (await this.locatorFor('.wr-drawer__title')()).text();\n }\n\n /** Whether the announced name comes from a visible heading rather than the fallback. */\n async isTitleVisible(): Promise<boolean> {\n return (await this.locatorForOptional('.wr-action-sheet__title')()) !== null;\n }\n\n /**\n * Whether the dialog is actually WIRED to that name — the drawer panel's\n * `aria-labelledby` resolving to this sheet's own title element, and to nothing\n * else on the page.\n *\n * {@link getAccessibleName} only proves a string exists in the markup; a screen\n * reader reads it only if the reference points at it. The two are separate\n * failures and the second is silent: the title renders, the sheet looks right, and\n * the dialog is announced as unnamed. Worth its own assertion because the drawer\n * resolves the reference AFTER attaching the panel rather than while rendering it,\n * so a title that arrives late is named late or not at all.\n *\n * Counted across the document as well, because two panels answering to one id hand\n * every reference to whichever comes first — which is how a second sheet ends up\n * announcing the first one's title.\n */\n async isNamed(): Promise<boolean> {\n const id = await (await this.locatorFor('.wr-drawer__title')()).getAttribute('id');\n if (!id) return false;\n\n const root = this.documentRootLocatorFactory();\n const named = await root.locatorForAll(`[aria-labelledby=\"${id}\"]`)();\n const titles = await root.locatorForAll(`[id=\"${id}\"]`)();\n return named.length === 1 && titles.length === 1;\n }\n\n /** The rows this sheet offers, in DOM order — cancel rows last, in their own group. */\n async getActions(filters: WrActionSheetActionHarnessFilters = {}): Promise<WrActionSheetActionHarness[]> {\n return this.locatorForAll(WrActionSheetActionHarness.with(filters))();\n }\n\n /** The labels of every row, in DOM order. */\n async getActionLabels(): Promise<string[]> {\n const actions = await this.getActions();\n return Promise.all(actions.map(action => action.getLabel()));\n }\n\n /**\n * The labels grouped the way the sheet lays them out: the main group first, then\n * the cancel group when there is one.\n *\n * The grouping is the component's whole visual contract — a `cancel` row is pulled\n * out of the list and pinned to the bottom with a gap above it — and it is\n * invisible to {@link getActionLabels}, which flattens the two. A cancel row that\n * stopped being separated would still come last in DOM order, so the flat list\n * cannot catch it.\n */\n async getActionGroups(): Promise<string[][]> {\n const groups = await this.locatorForAll(GroupHarness)();\n return Promise.all(groups.map(group => group.getLabels()));\n }\n\n /**\n * Whether the sheet drew a separate bottom group — true exactly when at least one\n * row was given `role: 'cancel'`, since the component omits the group entirely\n * rather than rendering an empty one.\n */\n async hasCancelGroup(): Promise<boolean> {\n return (await this.locatorForOptional('.wr-action-sheet__group--cancel')()) !== null;\n }\n\n /**\n * Pick the first row matching the filters.\n *\n * Throws when nothing matches, naming what the sheet does offer — the alternative\n * is a silent no-op followed by an assertion about a sheet that never moved. A\n * disabled match throws too, from the row harness.\n */\n async select(filters: WrActionSheetActionHarnessFilters): Promise<void> {\n const [action] = await this.getActions(filters);\n if (!action) {\n const offered = await this.getActionLabels();\n throw new Error(\n `WrActionSheetHarness.select(): no row matched ${JSON.stringify(filters)}. ` +\n `The sheet offers: ${offered.join(', ')}.`\n );\n }\n await action.click();\n }\n\n /**\n * Press Escape — dismissing the sheet WITHOUT emitting `action`.\n *\n * The key never needs to reach the sheet itself: the drawer underneath listens\n * through the CDK's keyboard dispatcher, which keeps one document listener and\n * hands the event to the top-most overlay. So with sheets stacked this dismisses\n * the top one whichever harness it is called on.\n */\n async sendEscape(): Promise<void> {\n await (await this.host()).sendKeys(TestKey.ESCAPE);\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":"ngwr-action-sheet-testing.mjs","names":[],"sources":["../../../projects/lib/action-sheet/testing/wr-action-sheet-action-harness.ts","../../../projects/lib/action-sheet/testing/wr-action-sheet-harness.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\nimport type { WrActionSheetAction } from 'ngwr/action-sheet';\n\nimport type { WrActionSheetActionHarnessFilters } from './interfaces';\n\n/**\n * Test harness for one row inside a {@link WrActionSheetHarness}.\n *\n * A row is a real `<button>`, not an ARIA-decorated div, so `disabled` is the\n * property rather than an attribute and the CDK refuses to click it — which is the\n * behaviour a spec wants asserted, since the component ALSO checks `disabled`\n * inside its own handler. Either guard alone would keep a disabled row inert; both\n * being there means removing one is invisible until the other is removed too, and\n * {@link click} is where that shows up.\n *\n * **Clicking a row closes the sheet.** The component emits `action` and clears\n * `open` in the same call, so a harness held across a {@link click} is pointed at a\n * detached element the moment it returns — read what you need first, and get a\n * fresh harness afterwards if the sheet was reopened.\n *\n * @see https://ngwr.dev/guides/testing\n */\nexport class WrActionSheetActionHarness extends ComponentHarness {\n /** The class every row carries, cancel rows included. */\n static hostSelector = '.wr-action-sheet__action';\n\n /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */\n static with(options: WrActionSheetActionHarnessFilters = {}): HarnessPredicate<WrActionSheetActionHarness> {\n return new HarnessPredicate(WrActionSheetActionHarness, options)\n .addOption('label', options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label))\n .addOption('role', options.role, async (harness, role) => (await harness.getRole()) === role)\n .addOption('disabled', options.disabled, async (harness, disabled) => (await harness.isDisabled()) === disabled);\n }\n\n /**\n * The row's label, trimmed.\n *\n * Read from `.wr-action-sheet__label` rather than from the button, so a leading\n * icon can never join it. The icon contributes no text today — it is an `<svg>` —\n * but an icon set that ships a `<title>` for its own accessibility would, and the\n * label element is the thing that actually holds the string.\n */\n async getLabel(): Promise<string> {\n return (await this.locatorFor('.wr-action-sheet__label')()).text();\n }\n\n /**\n * The row's visual role, as the component painted it.\n *\n * `default` is returned for a row the caller left unroled, which is what the\n * component does with the value: only `destructive` and `cancel` change anything,\n * and everything else falls through to the plain row. The two modifiers are\n * mutually exclusive by construction — `cancel` rows are filtered into their own\n * group before the destructive class is ever considered — so reading them in\n * either order gives the same answer.\n */\n async getRole(): Promise<NonNullable<WrActionSheetAction['role']>> {\n const host = await this.host();\n if (await host.hasClass('wr-action-sheet__action--cancel')) return 'cancel';\n if (await host.hasClass('wr-action-sheet__action--destructive')) return 'destructive';\n return 'default';\n }\n\n /**\n * Whether the row refuses interaction, from the button's own `disabled` property\n * — the thing the CDK consults before dispatching a click, and the DOM before\n * delivering one.\n *\n * There is no `aria-disabled` to fall back to here, and none is wanted: the row is\n * a native button, where the property already carries the state to assistive tech.\n */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('disabled');\n }\n\n /** Whether the row draws a leading icon. */\n async hasIcon(): Promise<boolean> {\n return (await this.locatorForOptional('.wr-action-sheet__icon')()) !== null;\n }\n\n /**\n * The icon's registered name, or `null` on a row without one.\n *\n * From `wr-icon`'s reflected `data-icon`, which is the only place the name reaches\n * the DOM — the rendered `<svg>` carries no trace of which entry of the set it\n * came from.\n */\n async getIconName(): Promise<string | null> {\n const icon = await this.locatorForOptional('.wr-action-sheet__icon')();\n return icon ? icon.getAttribute('data-icon') : null;\n }\n\n /**\n * Pick this row — emitting `action` and closing the sheet.\n *\n * Throws on a disabled row instead of quietly doing nothing. The click would not\n * land anyway (the DOM swallows it), so the alternative is a spec that reads as\n * \"picked the row\" and asserts a sheet that never moved.\n */\n async click(): Promise<void> {\n if (await this.isDisabled()) {\n throw new Error(\n `WrActionSheetActionHarness.click(): \"${await this.getLabel()}\" is disabled. The DOM swallows a click ` +\n 'on a disabled button and the component checks `disabled` again before emitting, so nothing would ' +\n 'happen — assert isDisabled() instead.'\n );\n }\n await (await this.host()).click();\n }\n\n /** Move keyboard focus to the row. */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /** Whether the row currently holds focus. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { ComponentHarness, HarnessPredicate, TestKey } from '@angular/cdk/testing';\n\nimport type { WrActionSheetActionHarnessFilters, WrActionSheetHarnessFilters } from './interfaces';\nimport { WrActionSheetActionHarness } from './wr-action-sheet-action-harness';\n\n/**\n * One `.wr-action-sheet__group` — internal, and the only way to read the rows of ONE\n * group: a `TestElement` cannot be queried into, so scoping to a child element means\n * a harness anchored on it.\n */\nclass GroupHarness extends ComponentHarness {\n static hostSelector = '.wr-action-sheet__group';\n\n async getLabels(): Promise<string[]> {\n const labels = await this.locatorForAll('.wr-action-sheet__label')();\n return Promise.all(labels.map(label => label.text()));\n }\n}\n\n/**\n * Test harness for an open `<wr-action-sheet>` — the iOS-style bottom sheet of\n * choices.\n *\n * The sheet renders through `<wr-drawer>`, so its rows are in the NGWR overlay\n * container rather than in the fixture: load this from\n * `TestbedHarnessEnvironment.documentRootLoader()`. A fixture-scoped loader finds\n * nothing at all — the `<wr-action-sheet>` host element itself holds no content and\n * the drawer it wraps is `display: none`.\n *\n * The anchor is `.wr-action-sheet`, the sheet's own root inside the drawer panel,\n * which makes each instance self-scoping: two sheets open at once are two hosts, and\n * every query here descends from one of them. That is worth stating because it is\n * NOT how the drawer harness underneath has to work — a drawer publishes no link to\n * the overlay it opened, so `WrDrawerHarness` anchors on the shared pane and scopes\n * by id.\n *\n * **What belongs to the drawer, not here.** Dismissal by backdrop click or by the ✕\n * button, the modal role, the focus trap and the panel's position are all the\n * drawer's surface, and `WrDrawerHarness` from the same root loader answers them.\n * {@link sendEscape} is the one exception, kept because dismissing without choosing\n * is a documented behaviour of the sheet itself: it closes and emits NOTHING, which\n * is the assertion most specs are actually after.\n *\n * @example\n * ```ts\n * const rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture);\n * const sheet = await rootLoader.getHarness(WrActionSheetHarness);\n *\n * expect(await sheet.getActionLabels()).toEqual(['Take Photo', 'Delete', 'Cancel']);\n * await sheet.select({ label: 'Delete' });\n * ```\n *\n * @see https://ngwr.dev/guides/testing\n */\nexport class WrActionSheetHarness extends ComponentHarness {\n /** The sheet's root inside the drawer panel. A closed sheet renders none. */\n static hostSelector = '.wr-action-sheet';\n\n /** Build a predicate that narrows the query — sheets can be stacked. */\n static with(options: WrActionSheetHarnessFilters = {}): HarnessPredicate<WrActionSheetHarness> {\n return new HarnessPredicate(WrActionSheetHarness, options)\n .addOption('title', options.title, (harness, title) => HarnessPredicate.stringMatches(harness.getTitle(), title))\n .addOption('message', options.message, (harness, message) =>\n HarnessPredicate.stringMatches(harness.getMessage(), message)\n )\n .addOption('accessibleName', options.accessibleName, (harness, name) =>\n HarnessPredicate.stringMatches(harness.getAccessibleName(), name)\n );\n }\n\n /**\n * Whether this sheet is still open.\n *\n * A harness can only be obtained while the sheet is open — closing disposes the\n * overlay and everything in it — so this is the answer for a harness you are\n * already HOLDING: it flips to `false` after a pick or a dismissal, where a fresh\n * `getHarnessOrNull()` comes back `null`.\n *\n * Attachment is the test rather than a class, because disposal removes the element\n * without changing anything on it.\n */\n async isOpen(): Promise<boolean> {\n return (await this.host()).matchesSelector('body .wr-action-sheet');\n }\n\n /** The visible heading, or `null` when the sheet was opened without a `title`. */\n async getTitle(): Promise<string | null> {\n const title = await this.locatorForOptional('.wr-action-sheet__title')();\n return title ? title.text() : null;\n }\n\n /** The muted sub-heading, or `null` when the sheet has no `message`. */\n async getMessage(): Promise<string | null> {\n const message = await this.locatorForOptional('.wr-action-sheet__message')();\n return message ? message.text() : null;\n }\n\n /**\n * The name the dialog announces.\n *\n * The sheet always publishes one, and for an untitled sheet it is INVISIBLE: the\n * component renders a screen-reader-only `[wrDrawerTitle]` carrying\n * `actionSheet.label` (English default `Actions`), because a bottom sheet is an\n * `aria-modal` dialog and an unnamed one is announced as nothing at all. Nothing\n * on screen changes when that string is wrong or missing, which is exactly why it\n * is worth an assertion.\n *\n * Read from `.wr-drawer__title` — the class the title directive applies — so the\n * one query answers for both shapes: the visible heading carries it too.\n */\n async getAccessibleName(): Promise<string> {\n return (await this.locatorFor('.wr-drawer__title')()).text();\n }\n\n /** Whether the announced name comes from a visible heading rather than the fallback. */\n async isTitleVisible(): Promise<boolean> {\n return (await this.locatorForOptional('.wr-action-sheet__title')()) !== null;\n }\n\n /**\n * Whether the dialog is actually WIRED to that name — the drawer panel's\n * `aria-labelledby` resolving to this sheet's own title element, and to nothing\n * else on the page.\n *\n * {@link getAccessibleName} only proves a string exists in the markup; a screen\n * reader reads it only if the reference points at it. The two are separate\n * failures and the second is silent: the title renders, the sheet looks right, and\n * the dialog is announced as unnamed. Worth its own assertion because the drawer\n * resolves the reference AFTER attaching the panel rather than while rendering it,\n * so a title that arrives late is named late or not at all.\n *\n * Counted across the document as well, because two panels answering to one id hand\n * every reference to whichever comes first — which is how a second sheet ends up\n * announcing the first one's title.\n */\n async isNamed(): Promise<boolean> {\n const id = await (await this.locatorFor('.wr-drawer__title')()).getAttribute('id');\n if (!id) return false;\n\n const root = this.documentRootLocatorFactory();\n const named = await root.locatorForAll(`[aria-labelledby=\"${id}\"]`)();\n const titles = await root.locatorForAll(`[id=\"${id}\"]`)();\n return named.length === 1 && titles.length === 1;\n }\n\n /** The rows this sheet offers, in DOM order — cancel rows last, in their own group. */\n async getActions(filters: WrActionSheetActionHarnessFilters = {}): Promise<WrActionSheetActionHarness[]> {\n return this.locatorForAll(WrActionSheetActionHarness.with(filters))();\n }\n\n /** The labels of every row, in DOM order. */\n async getActionLabels(): Promise<string[]> {\n const actions = await this.getActions();\n return Promise.all(actions.map(action => action.getLabel()));\n }\n\n /**\n * The labels grouped the way the sheet lays them out: the main group first, then\n * the cancel group when there is one.\n *\n * The grouping is the component's whole visual contract — a `cancel` row is pulled\n * out of the list and pinned to the bottom with a gap above it — and it is\n * invisible to {@link getActionLabels}, which flattens the two. A cancel row that\n * stopped being separated would still come last in DOM order, so the flat list\n * cannot catch it.\n */\n async getActionGroups(): Promise<string[][]> {\n const groups = await this.locatorForAll(GroupHarness)();\n return Promise.all(groups.map(group => group.getLabels()));\n }\n\n /**\n * Whether the sheet drew a separate bottom group — true exactly when at least one\n * row was given `role: 'cancel'`, since the component omits the group entirely\n * rather than rendering an empty one.\n */\n async hasCancelGroup(): Promise<boolean> {\n return (await this.locatorForOptional('.wr-action-sheet__group--cancel')()) !== null;\n }\n\n /**\n * Pick the first row matching the filters.\n *\n * Throws when nothing matches, naming what the sheet does offer — the alternative\n * is a silent no-op followed by an assertion about a sheet that never moved. A\n * disabled match throws too, from the row harness.\n */\n async select(filters: WrActionSheetActionHarnessFilters): Promise<void> {\n const [action] = await this.getActions(filters);\n if (!action) {\n const offered = await this.getActionLabels();\n throw new Error(\n `WrActionSheetHarness.select(): no row matched ${JSON.stringify(filters)}. ` +\n `The sheet offers: ${offered.join(', ')}.`\n );\n }\n await action.click();\n }\n\n /**\n * Press Escape — dismissing the sheet WITHOUT emitting `action`.\n *\n * The key never needs to reach the sheet itself: the drawer underneath listens\n * through the CDK's keyboard dispatcher, which keeps one document listener and\n * hands the event to the top-most overlay. So with sheets stacked this dismisses\n * the top one whichever harness it is called on.\n */\n async sendEscape(): Promise<void> {\n await (await this.host()).sendKeys(TestKey.ESCAPE);\n }\n}\n"],"mappings":"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"}