ngwr 14.9.1 → 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 (695) hide show
  1. package/editor/styles/_index.scss +16 -1
  2. package/fesm2022/ngwr-action-sheet-testing.mjs +111 -310
  3. package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -1
  4. package/fesm2022/ngwr-action-sheet.mjs +209 -89
  5. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  6. package/fesm2022/ngwr-affix.mjs +122 -140
  7. package/fesm2022/ngwr-affix.mjs.map +1 -1
  8. package/fesm2022/ngwr-alert.mjs +204 -107
  9. package/fesm2022/ngwr-alert.mjs.map +1 -1
  10. package/fesm2022/ngwr-anchor.mjs +171 -113
  11. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  12. package/fesm2022/ngwr-aurora.mjs +278 -198
  13. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  14. package/fesm2022/ngwr-avatar.mjs +191 -190
  15. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  16. package/fesm2022/ngwr-back-top.mjs +140 -95
  17. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  18. package/fesm2022/ngwr-badge.mjs +339 -204
  19. package/fesm2022/ngwr-badge.mjs.map +1 -1
  20. package/fesm2022/ngwr-bar-chart-testing.mjs +56 -120
  21. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
  22. package/fesm2022/ngwr-bar-chart.mjs +204 -113
  23. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  24. package/fesm2022/ngwr-blur-text-testing.mjs +44 -198
  25. package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -1
  26. package/fesm2022/ngwr-blur-text.mjs +322 -202
  27. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  28. package/fesm2022/ngwr-border-glow-testing.mjs +134 -318
  29. package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -1
  30. package/fesm2022/ngwr-border-glow.mjs +440 -277
  31. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  32. package/fesm2022/ngwr-breadcrumbs.mjs +256 -120
  33. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  34. package/fesm2022/ngwr-burger.mjs +115 -63
  35. package/fesm2022/ngwr-burger.mjs.map +1 -1
  36. package/fesm2022/ngwr-button-testing.mjs +39 -94
  37. package/fesm2022/ngwr-button-testing.mjs.map +1 -1
  38. package/fesm2022/ngwr-button.mjs +404 -354
  39. package/fesm2022/ngwr-button.mjs.map +1 -1
  40. package/fesm2022/ngwr-calendar-heatmap-testing.mjs +50 -96
  41. package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -1
  42. package/fesm2022/ngwr-calendar-heatmap.mjs +360 -264
  43. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  44. package/fesm2022/ngwr-calendar-testing.mjs +181 -378
  45. package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
  46. package/fesm2022/ngwr-calendar.mjs +612 -790
  47. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  48. package/fesm2022/ngwr-card.mjs +216 -98
  49. package/fesm2022/ngwr-card.mjs.map +1 -1
  50. package/fesm2022/ngwr-carousel-testing.mjs +131 -374
  51. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -1
  52. package/fesm2022/ngwr-carousel.mjs +459 -332
  53. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  54. package/fesm2022/ngwr-cascader-testing.mjs +227 -600
  55. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
  56. package/fesm2022/ngwr-cascader.mjs +479 -418
  57. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  58. package/fesm2022/ngwr-checkbox-testing.mjs +45 -99
  59. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -1
  60. package/fesm2022/ngwr-checkbox.mjs +442 -354
  61. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  62. package/fesm2022/ngwr-circular-text-testing.mjs +56 -223
  63. package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -1
  64. package/fesm2022/ngwr-circular-text.mjs +226 -186
  65. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  66. package/fesm2022/ngwr-click-spark.mjs +303 -199
  67. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  68. package/fesm2022/ngwr-clipboard.mjs +95 -163
  69. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  70. package/fesm2022/ngwr-collapse-testing.mjs +118 -365
  71. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -1
  72. package/fesm2022/ngwr-collapse.mjs +287 -227
  73. package/fesm2022/ngwr-collapse.mjs.map +1 -1
  74. package/fesm2022/ngwr-color-picker-testing.mjs +223 -461
  75. package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
  76. package/fesm2022/ngwr-color-picker.mjs +937 -976
  77. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  78. package/fesm2022/ngwr-command-palette-testing.mjs +236 -585
  79. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -1
  80. package/fesm2022/ngwr-command-palette.mjs +512 -443
  81. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  82. package/fesm2022/ngwr-compare.mjs +252 -225
  83. package/fesm2022/ngwr-compare.mjs.map +1 -1
  84. package/fesm2022/ngwr-confetti.mjs +163 -181
  85. package/fesm2022/ngwr-confetti.mjs.map +1 -1
  86. package/fesm2022/ngwr-config.mjs +31 -106
  87. package/fesm2022/ngwr-config.mjs.map +1 -1
  88. package/fesm2022/ngwr-context-menu-testing.mjs +233 -642
  89. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
  90. package/fesm2022/ngwr-context-menu.mjs +837 -1167
  91. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  92. package/fesm2022/ngwr-cookie.mjs +103 -140
  93. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  94. package/fesm2022/ngwr-counter.mjs +646 -460
  95. package/fesm2022/ngwr-counter.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-adapters-fns.mjs +173 -266
  97. package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
  98. package/fesm2022/ngwr-date-adapters-luxon.mjs +164 -236
  99. package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -1
  100. package/fesm2022/ngwr-date-picker-testing.mjs +340 -700
  101. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
  102. package/fesm2022/ngwr-date-picker.mjs +2575 -2416
  103. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  104. package/fesm2022/ngwr-date.mjs +606 -861
  105. package/fesm2022/ngwr-date.mjs.map +1 -1
  106. package/fesm2022/ngwr-decrypt-text-testing.mjs +57 -256
  107. package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -1
  108. package/fesm2022/ngwr-decrypt-text.mjs +489 -409
  109. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  110. package/fesm2022/ngwr-density.mjs +157 -154
  111. package/fesm2022/ngwr-density.mjs.map +1 -1
  112. package/fesm2022/ngwr-descriptions.mjs +188 -90
  113. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  114. package/fesm2022/ngwr-dialog-testing.mjs +44 -87
  115. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -1
  116. package/fesm2022/ngwr-dialog.mjs +391 -522
  117. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  118. package/fesm2022/ngwr-directives.mjs +354 -271
  119. package/fesm2022/ngwr-directives.mjs.map +1 -1
  120. package/fesm2022/ngwr-divider.mjs +151 -133
  121. package/fesm2022/ngwr-divider.mjs.map +1 -1
  122. package/fesm2022/ngwr-donut-chart-testing.mjs +48 -111
  123. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
  124. package/fesm2022/ngwr-donut-chart.mjs +295 -190
  125. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  126. package/fesm2022/ngwr-drag-drop.mjs +411 -301
  127. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  128. package/fesm2022/ngwr-drawer-testing.mjs +97 -248
  129. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -1
  130. package/fesm2022/ngwr-drawer.mjs +862 -889
  131. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  132. package/fesm2022/ngwr-dropdown-testing.mjs +125 -288
  133. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -1
  134. package/fesm2022/ngwr-dropdown.mjs +613 -641
  135. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  136. package/fesm2022/ngwr-editor-testing.mjs +196 -563
  137. package/fesm2022/ngwr-editor-testing.mjs.map +1 -1
  138. package/fesm2022/ngwr-editor.mjs +2062 -2442
  139. package/fesm2022/ngwr-editor.mjs.map +1 -1
  140. package/fesm2022/ngwr-empty.mjs +117 -72
  141. package/fesm2022/ngwr-empty.mjs.map +1 -1
  142. package/fesm2022/ngwr-event-calendar-testing.mjs +215 -439
  143. package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
  144. package/fesm2022/ngwr-event-calendar.mjs +906 -822
  145. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  146. package/fesm2022/ngwr-falling-text-testing.mjs +52 -216
  147. package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
  148. package/fesm2022/ngwr-falling-text.mjs +375 -342
  149. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  150. package/fesm2022/ngwr-file-upload-testing.mjs +133 -320
  151. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -1
  152. package/fesm2022/ngwr-file-upload.mjs +457 -328
  153. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  154. package/fesm2022/ngwr-form-testing.mjs +145 -452
  155. package/fesm2022/ngwr-form-testing.mjs.map +1 -1
  156. package/fesm2022/ngwr-form.mjs +512 -590
  157. package/fesm2022/ngwr-form.mjs.map +1 -1
  158. package/fesm2022/ngwr-fuzzy-text-testing.mjs +36 -132
  159. package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -1
  160. package/fesm2022/ngwr-fuzzy-text.mjs +635 -421
  161. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  162. package/fesm2022/ngwr-gauge-testing.mjs +49 -98
  163. package/fesm2022/ngwr-gauge-testing.mjs.map +1 -1
  164. package/fesm2022/ngwr-gauge.mjs +297 -129
  165. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  166. package/fesm2022/ngwr-glitch-text-testing.mjs +61 -213
  167. package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
  168. package/fesm2022/ngwr-glitch-text.mjs +170 -73
  169. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  170. package/fesm2022/ngwr-gradient-text-testing.mjs +82 -251
  171. package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
  172. package/fesm2022/ngwr-gradient-text.mjs +215 -114
  173. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  174. package/fesm2022/ngwr-graph-testing.mjs +65 -233
  175. package/fesm2022/ngwr-graph-testing.mjs.map +1 -1
  176. package/fesm2022/ngwr-graph.mjs +882 -1046
  177. package/fesm2022/ngwr-graph.mjs.map +1 -1
  178. package/fesm2022/ngwr-hotkey.mjs +307 -285
  179. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  180. package/fesm2022/ngwr-i18n-ar.mjs +375 -464
  181. package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
  182. package/fesm2022/ngwr-i18n-cs.mjs +375 -434
  183. package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
  184. package/fesm2022/ngwr-i18n-de.mjs +375 -453
  185. package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
  186. package/fesm2022/ngwr-i18n-en.mjs +375 -561
  187. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  188. package/fesm2022/ngwr-i18n-es.mjs +375 -434
  189. package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
  190. package/fesm2022/ngwr-i18n-fr.mjs +375 -458
  191. package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
  192. package/fesm2022/ngwr-i18n-he.mjs +375 -457
  193. package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
  194. package/fesm2022/ngwr-i18n-hi.mjs +375 -434
  195. package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
  196. package/fesm2022/ngwr-i18n-id.mjs +375 -434
  197. package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
  198. package/fesm2022/ngwr-i18n-it.mjs +375 -453
  199. package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
  200. package/fesm2022/ngwr-i18n-ja.mjs +375 -438
  201. package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
  202. package/fesm2022/ngwr-i18n-ko.mjs +375 -446
  203. package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
  204. package/fesm2022/ngwr-i18n-nl.mjs +375 -450
  205. package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
  206. package/fesm2022/ngwr-i18n-pl.mjs +375 -460
  207. package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
  208. package/fesm2022/ngwr-i18n-pt.mjs +375 -443
  209. package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
  210. package/fesm2022/ngwr-i18n-ru.mjs +375 -447
  211. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  212. package/fesm2022/ngwr-i18n-sv.mjs +375 -434
  213. package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
  214. package/fesm2022/ngwr-i18n-tr.mjs +375 -458
  215. package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
  216. package/fesm2022/ngwr-i18n-uk.mjs +375 -455
  217. package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
  218. package/fesm2022/ngwr-i18n-vi.mjs +375 -451
  219. package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
  220. package/fesm2022/ngwr-i18n-zh-TW.mjs +375 -442
  221. package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
  222. package/fesm2022/ngwr-i18n-zh.mjs +375 -433
  223. package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
  224. package/fesm2022/ngwr-i18n.mjs +415 -683
  225. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  226. package/fesm2022/ngwr-icon-adapters-feather.mjs +28 -77
  227. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -1
  228. package/fesm2022/ngwr-icon-adapters-lucide.mjs +32 -94
  229. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
  230. package/fesm2022/ngwr-icon.mjs +371 -690
  231. package/fesm2022/ngwr-icon.mjs.map +1 -1
  232. package/fesm2022/ngwr-image-cropper-testing.mjs +84 -227
  233. package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
  234. package/fesm2022/ngwr-image-cropper.mjs +577 -639
  235. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  236. package/fesm2022/ngwr-input-number-testing.mjs +108 -305
  237. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
  238. package/fesm2022/ngwr-input-number.mjs +496 -361
  239. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  240. package/fesm2022/ngwr-input-otp-testing.mjs +172 -420
  241. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
  242. package/fesm2022/ngwr-input-otp.mjs +396 -352
  243. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  244. package/fesm2022/ngwr-input-testing.mjs +52 -100
  245. package/fesm2022/ngwr-input-testing.mjs.map +1 -1
  246. package/fesm2022/ngwr-input.mjs +356 -303
  247. package/fesm2022/ngwr-input.mjs.map +1 -1
  248. package/fesm2022/ngwr-keyboard.mjs +63 -45
  249. package/fesm2022/ngwr-keyboard.mjs.map +1 -1
  250. package/fesm2022/ngwr-knob-testing.mjs +101 -223
  251. package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
  252. package/fesm2022/ngwr-knob.mjs +421 -303
  253. package/fesm2022/ngwr-knob.mjs.map +1 -1
  254. package/fesm2022/ngwr-layout.mjs +362 -207
  255. package/fesm2022/ngwr-layout.mjs.map +1 -1
  256. package/fesm2022/ngwr-lightbox-testing.mjs +100 -221
  257. package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -1
  258. package/fesm2022/ngwr-lightbox.mjs +335 -268
  259. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  260. package/fesm2022/ngwr-line-chart-testing.mjs +65 -133
  261. package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -1
  262. package/fesm2022/ngwr-line-chart.mjs +356 -281
  263. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  264. package/fesm2022/ngwr-list.mjs +251 -134
  265. package/fesm2022/ngwr-list.mjs.map +1 -1
  266. package/fesm2022/ngwr-loading-bar-router.mjs +26 -68
  267. package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -1
  268. package/fesm2022/ngwr-loading-bar.mjs +173 -186
  269. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  270. package/fesm2022/ngwr-markdown-testing.mjs +174 -505
  271. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -1
  272. package/fesm2022/ngwr-markdown.mjs +1578 -2219
  273. package/fesm2022/ngwr-markdown.mjs.map +1 -1
  274. package/fesm2022/ngwr-marquee-testing.mjs +118 -331
  275. package/fesm2022/ngwr-marquee-testing.mjs.map +1 -1
  276. package/fesm2022/ngwr-marquee.mjs +411 -230
  277. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  278. package/fesm2022/ngwr-media.mjs +100 -127
  279. package/fesm2022/ngwr-media.mjs.map +1 -1
  280. package/fesm2022/ngwr-mention-testing.mjs +179 -506
  281. package/fesm2022/ngwr-mention-testing.mjs.map +1 -1
  282. package/fesm2022/ngwr-mention.mjs +668 -732
  283. package/fesm2022/ngwr-mention.mjs.map +1 -1
  284. package/fesm2022/ngwr-meta.mjs +257 -329
  285. package/fesm2022/ngwr-meta.mjs.map +1 -1
  286. package/fesm2022/ngwr-meter-group-testing.mjs +56 -101
  287. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
  288. package/fesm2022/ngwr-meter-group.mjs +206 -114
  289. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  290. package/fesm2022/ngwr-overlay.mjs +264 -576
  291. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  292. package/fesm2022/ngwr-page-header.mjs +107 -67
  293. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  294. package/fesm2022/ngwr-pagination-testing.mjs +125 -388
  295. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
  296. package/fesm2022/ngwr-pagination.mjs +505 -335
  297. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  298. package/fesm2022/ngwr-pipes.mjs +343 -382
  299. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  300. package/fesm2022/ngwr-platform.mjs +182 -221
  301. package/fesm2022/ngwr-platform.mjs.map +1 -1
  302. package/fesm2022/ngwr-popconfirm-testing.mjs +112 -307
  303. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -1
  304. package/fesm2022/ngwr-popconfirm.mjs +474 -277
  305. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  306. package/fesm2022/ngwr-popover-testing.mjs +114 -332
  307. package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
  308. package/fesm2022/ngwr-popover.mjs +1106 -1311
  309. package/fesm2022/ngwr-popover.mjs.map +1 -1
  310. package/fesm2022/ngwr-progress.mjs +124 -68
  311. package/fesm2022/ngwr-progress.mjs.map +1 -1
  312. package/fesm2022/ngwr-pull-to-refresh.mjs +198 -185
  313. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  314. package/fesm2022/ngwr-qr.mjs +1179 -1100
  315. package/fesm2022/ngwr-qr.mjs.map +1 -1
  316. package/fesm2022/ngwr-radio-testing.mjs +138 -389
  317. package/fesm2022/ngwr-radio-testing.mjs.map +1 -1
  318. package/fesm2022/ngwr-radio.mjs +346 -239
  319. package/fesm2022/ngwr-radio.mjs.map +1 -1
  320. package/fesm2022/ngwr-rating-testing.mjs +153 -390
  321. package/fesm2022/ngwr-rating-testing.mjs.map +1 -1
  322. package/fesm2022/ngwr-rating.mjs +281 -247
  323. package/fesm2022/ngwr-rating.mjs.map +1 -1
  324. package/fesm2022/ngwr-result.mjs +353 -114
  325. package/fesm2022/ngwr-result.mjs.map +1 -1
  326. package/fesm2022/ngwr-rotating-text-testing.mjs +45 -215
  327. package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -1
  328. package/fesm2022/ngwr-rotating-text.mjs +402 -272
  329. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  330. package/fesm2022/ngwr-schema-form.mjs +384 -213
  331. package/fesm2022/ngwr-schema-form.mjs.map +1 -1
  332. package/fesm2022/ngwr-scroll.mjs +95 -105
  333. package/fesm2022/ngwr-scroll.mjs.map +1 -1
  334. package/fesm2022/ngwr-segmented-testing.mjs +184 -593
  335. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
  336. package/fesm2022/ngwr-segmented.mjs +235 -251
  337. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  338. package/fesm2022/ngwr-select-testing.mjs +139 -284
  339. package/fesm2022/ngwr-select-testing.mjs.map +1 -1
  340. package/fesm2022/ngwr-select.mjs +1784 -2098
  341. package/fesm2022/ngwr-select.mjs.map +1 -1
  342. package/fesm2022/ngwr-shiny-text-testing.mjs +83 -228
  343. package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -1
  344. package/fesm2022/ngwr-shiny-text.mjs +304 -131
  345. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  346. package/fesm2022/ngwr-sidebar.mjs +256 -205
  347. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  348. package/fesm2022/ngwr-skeleton.mjs +101 -72
  349. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  350. package/fesm2022/ngwr-slider-testing.mjs +191 -473
  351. package/fesm2022/ngwr-slider-testing.mjs.map +1 -1
  352. package/fesm2022/ngwr-slider.mjs +430 -443
  353. package/fesm2022/ngwr-slider.mjs.map +1 -1
  354. package/fesm2022/ngwr-sparkline-testing.mjs +37 -74
  355. package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -1
  356. package/fesm2022/ngwr-sparkline.mjs +311 -196
  357. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  358. package/fesm2022/ngwr-speed-dial-testing.mjs +135 -278
  359. package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
  360. package/fesm2022/ngwr-speed-dial.mjs +242 -140
  361. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  362. package/fesm2022/ngwr-spinner.mjs +97 -60
  363. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  364. package/fesm2022/ngwr-splash-cursor-testing.mjs +23 -87
  365. package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -1
  366. package/fesm2022/ngwr-splash-cursor.mjs +980 -725
  367. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  368. package/fesm2022/ngwr-split-text-testing.mjs +48 -218
  369. package/fesm2022/ngwr-split-text-testing.mjs.map +1 -1
  370. package/fesm2022/ngwr-split-text.mjs +365 -220
  371. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  372. package/fesm2022/ngwr-splitter-testing.mjs +107 -241
  373. package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
  374. package/fesm2022/ngwr-splitter.mjs +222 -184
  375. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  376. package/fesm2022/ngwr-spotlight-card-testing.mjs +105 -360
  377. package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -1
  378. package/fesm2022/ngwr-spotlight-card.mjs +217 -135
  379. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  380. package/fesm2022/ngwr-squircle.mjs +410 -326
  381. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  382. package/fesm2022/ngwr-star-border-testing.mjs +53 -168
  383. package/fesm2022/ngwr-star-border-testing.mjs.map +1 -1
  384. package/fesm2022/ngwr-star-border.mjs +160 -70
  385. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  386. package/fesm2022/ngwr-statistic.mjs +570 -389
  387. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  388. package/fesm2022/ngwr-stepper-testing.mjs +158 -471
  389. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
  390. package/fesm2022/ngwr-stepper.mjs +336 -215
  391. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  392. package/fesm2022/ngwr-storage.mjs +217 -330
  393. package/fesm2022/ngwr-storage.mjs.map +1 -1
  394. package/fesm2022/ngwr-switch-testing.mjs +42 -75
  395. package/fesm2022/ngwr-switch-testing.mjs.map +1 -1
  396. package/fesm2022/ngwr-switch.mjs +197 -114
  397. package/fesm2022/ngwr-switch.mjs.map +1 -1
  398. package/fesm2022/ngwr-table-testing.mjs +238 -572
  399. package/fesm2022/ngwr-table-testing.mjs.map +1 -1
  400. package/fesm2022/ngwr-table.mjs +1875 -1446
  401. package/fesm2022/ngwr-table.mjs.map +1 -1
  402. package/fesm2022/ngwr-tabs-router.mjs +84 -153
  403. package/fesm2022/ngwr-tabs-router.mjs.map +1 -1
  404. package/fesm2022/ngwr-tabs-testing.mjs +217 -617
  405. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
  406. package/fesm2022/ngwr-tabs.mjs +402 -425
  407. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  408. package/fesm2022/ngwr-textarea-testing.mjs +84 -236
  409. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -1
  410. package/fesm2022/ngwr-textarea.mjs +385 -264
  411. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  412. package/fesm2022/ngwr-theme.mjs +247 -443
  413. package/fesm2022/ngwr-theme.mjs.map +1 -1
  414. package/fesm2022/ngwr-tilt-card-testing.mjs +79 -186
  415. package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -1
  416. package/fesm2022/ngwr-tilt-card.mjs +257 -168
  417. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  418. package/fesm2022/ngwr-timeline.mjs +157 -70
  419. package/fesm2022/ngwr-timeline.mjs.map +1 -1
  420. package/fesm2022/ngwr-toast-testing.mjs +59 -99
  421. package/fesm2022/ngwr-toast-testing.mjs.map +1 -1
  422. package/fesm2022/ngwr-toast.mjs +769 -691
  423. package/fesm2022/ngwr-toast.mjs.map +1 -1
  424. package/fesm2022/ngwr-toolbar.mjs +73 -58
  425. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  426. package/fesm2022/ngwr-tour-testing.mjs +75 -171
  427. package/fesm2022/ngwr-tour-testing.mjs.map +1 -1
  428. package/fesm2022/ngwr-tour.mjs +333 -347
  429. package/fesm2022/ngwr-tour.mjs.map +1 -1
  430. package/fesm2022/ngwr-transfer-testing.mjs +195 -534
  431. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -1
  432. package/fesm2022/ngwr-transfer.mjs +441 -322
  433. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  434. package/fesm2022/ngwr-tree-testing.mjs +277 -754
  435. package/fesm2022/ngwr-tree-testing.mjs.map +1 -1
  436. package/fesm2022/ngwr-tree.mjs +876 -906
  437. package/fesm2022/ngwr-tree.mjs.map +1 -1
  438. package/fesm2022/ngwr-typewriter-testing.mjs +50 -237
  439. package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
  440. package/fesm2022/ngwr-typewriter.mjs +461 -242
  441. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  442. package/fesm2022/ngwr-typography.mjs +142 -81
  443. package/fesm2022/ngwr-typography.mjs.map +1 -1
  444. package/fesm2022/ngwr-utils.mjs +304 -613
  445. package/fesm2022/ngwr-utils.mjs.map +1 -1
  446. package/fesm2022/ngwr-validators.mjs +179 -361
  447. package/fesm2022/ngwr-validators.mjs.map +1 -1
  448. package/fesm2022/ngwr-version.mjs +17 -47
  449. package/fesm2022/ngwr-version.mjs.map +1 -1
  450. package/fesm2022/ngwr-virtual-scroll.mjs +259 -125
  451. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  452. package/fesm2022/ngwr-waves-testing.mjs +34 -125
  453. package/fesm2022/ngwr-waves-testing.mjs.map +1 -1
  454. package/fesm2022/ngwr-waves.mjs +816 -373
  455. package/fesm2022/ngwr-waves.mjs.map +1 -1
  456. package/fesm2022/ngwr-window-testing.mjs +171 -366
  457. package/fesm2022/ngwr-window-testing.mjs.map +1 -1
  458. package/fesm2022/ngwr-window.mjs +1437 -1351
  459. package/fesm2022/ngwr-window.mjs.map +1 -1
  460. package/fesm2022/ngwr.mjs +0 -4
  461. package/input-number/styles/_index.scss +33 -35
  462. package/llms-full.txt +2 -2
  463. package/package.json +1 -1
  464. package/segmented/styles/_index.scss +10 -3
  465. package/types/ngwr-action-sheet-testing.d.ts +174 -200
  466. package/types/ngwr-action-sheet.d.ts +83 -45
  467. package/types/ngwr-affix.d.ts +27 -22
  468. package/types/ngwr-alert.d.ts +93 -59
  469. package/types/ngwr-anchor.d.ts +52 -35
  470. package/types/ngwr-aurora.d.ts +53 -35
  471. package/types/ngwr-avatar.d.ts +97 -81
  472. package/types/ngwr-back-top.d.ts +36 -23
  473. package/types/ngwr-badge.d.ts +160 -105
  474. package/types/ngwr-bar-chart-testing.d.ts +40 -58
  475. package/types/ngwr-bar-chart.d.ts +86 -60
  476. package/types/ngwr-blur-text-testing.d.ts +103 -121
  477. package/types/ngwr-blur-text.d.ts +99 -60
  478. package/types/ngwr-border-glow-testing.d.ts +155 -173
  479. package/types/ngwr-border-glow.d.ts +93 -45
  480. package/types/ngwr-breadcrumbs.d.ts +60 -32
  481. package/types/ngwr-burger.d.ts +38 -23
  482. package/types/ngwr-button-testing.d.ts +41 -59
  483. package/types/ngwr-button.d.ts +213 -163
  484. package/types/ngwr-calendar-heatmap-testing.d.ts +38 -56
  485. package/types/ngwr-calendar-heatmap.d.ts +151 -105
  486. package/types/ngwr-calendar-testing.d.ts +198 -224
  487. package/types/ngwr-calendar.d.ts +285 -246
  488. package/types/ngwr-card.d.ts +41 -23
  489. package/types/ngwr-carousel-testing.d.ts +196 -214
  490. package/types/ngwr-carousel.d.ts +173 -122
  491. package/types/ngwr-cascader-testing.d.ts +338 -372
  492. package/types/ngwr-cascader.d.ts +230 -161
  493. package/types/ngwr-checkbox-testing.d.ts +45 -63
  494. package/types/ngwr-checkbox.d.ts +238 -183
  495. package/types/ngwr-circular-text-testing.d.ts +108 -126
  496. package/types/ngwr-circular-text.d.ts +53 -41
  497. package/types/ngwr-click-spark.d.ts +82 -50
  498. package/types/ngwr-clipboard.d.ts +40 -44
  499. package/types/ngwr-collapse-testing.d.ts +193 -219
  500. package/types/ngwr-collapse.d.ts +82 -71
  501. package/types/ngwr-color-picker-testing.d.ts +211 -237
  502. package/types/ngwr-color-picker.d.ts +343 -300
  503. package/types/ngwr-command-palette-testing.d.ts +311 -345
  504. package/types/ngwr-command-palette.d.ts +257 -197
  505. package/types/ngwr-compare.d.ts +102 -67
  506. package/types/ngwr-confetti.d.ts +51 -55
  507. package/types/ngwr-config.d.ts +44 -71
  508. package/types/ngwr-context-menu-testing.d.ts +301 -327
  509. package/types/ngwr-context-menu.d.ts +350 -310
  510. package/types/ngwr-cookie.d.ts +37 -41
  511. package/types/ngwr-counter.d.ts +223 -128
  512. package/types/ngwr-date-adapters-fns.d.ts +40 -59
  513. package/types/ngwr-date-adapters-luxon.d.ts +61 -72
  514. package/types/ngwr-date-picker-testing.d.ts +295 -339
  515. package/types/ngwr-date-picker.d.ts +759 -583
  516. package/types/ngwr-date.d.ts +229 -258
  517. package/types/ngwr-decrypt-text-testing.d.ts +140 -158
  518. package/types/ngwr-decrypt-text.d.ts +104 -62
  519. package/types/ngwr-density.d.ts +42 -57
  520. package/types/ngwr-descriptions.d.ts +50 -27
  521. package/types/ngwr-dialog-testing.d.ts +36 -54
  522. package/types/ngwr-dialog.d.ts +166 -190
  523. package/types/ngwr-directives.d.ts +82 -60
  524. package/types/ngwr-divider.d.ts +78 -62
  525. package/types/ngwr-donut-chart-testing.d.ts +36 -54
  526. package/types/ngwr-donut-chart.d.ts +102 -66
  527. package/types/ngwr-drag-drop.d.ts +139 -106
  528. package/types/ngwr-drawer-testing.d.ts +141 -159
  529. package/types/ngwr-drawer.d.ts +374 -316
  530. package/types/ngwr-dropdown-testing.d.ts +128 -154
  531. package/types/ngwr-dropdown.d.ts +260 -166
  532. package/types/ngwr-editor-testing.d.ts +329 -301
  533. package/types/ngwr-editor.d.ts +445 -300
  534. package/types/ngwr-empty.d.ts +41 -28
  535. package/types/ngwr-event-calendar-testing.d.ts +217 -243
  536. package/types/ngwr-event-calendar.d.ts +340 -298
  537. package/types/ngwr-falling-text-testing.d.ts +108 -126
  538. package/types/ngwr-falling-text.d.ts +57 -35
  539. package/types/ngwr-file-upload-testing.d.ts +133 -151
  540. package/types/ngwr-file-upload.d.ts +193 -128
  541. package/types/ngwr-form-testing.d.ts +255 -282
  542. package/types/ngwr-form.d.ts +324 -306
  543. package/types/ngwr-fuzzy-text-testing.d.ts +63 -81
  544. package/types/ngwr-fuzzy-text.d.ts +152 -65
  545. package/types/ngwr-gauge-testing.d.ts +43 -61
  546. package/types/ngwr-gauge.d.ts +113 -61
  547. package/types/ngwr-glitch-text-testing.d.ts +125 -143
  548. package/types/ngwr-glitch-text.d.ts +47 -24
  549. package/types/ngwr-gradient-text-testing.d.ts +114 -132
  550. package/types/ngwr-gradient-text.d.ts +51 -24
  551. package/types/ngwr-graph-testing.d.ts +89 -115
  552. package/types/ngwr-graph.d.ts +137 -124
  553. package/types/ngwr-hotkey.d.ts +85 -75
  554. package/types/ngwr-i18n-ar.d.ts +2 -5
  555. package/types/ngwr-i18n-cs.d.ts +2 -5
  556. package/types/ngwr-i18n-de.d.ts +2 -5
  557. package/types/ngwr-i18n-en.d.ts +2 -5
  558. package/types/ngwr-i18n-es.d.ts +2 -5
  559. package/types/ngwr-i18n-fr.d.ts +2 -5
  560. package/types/ngwr-i18n-he.d.ts +2 -5
  561. package/types/ngwr-i18n-hi.d.ts +2 -5
  562. package/types/ngwr-i18n-id.d.ts +2 -5
  563. package/types/ngwr-i18n-it.d.ts +2 -5
  564. package/types/ngwr-i18n-ja.d.ts +2 -5
  565. package/types/ngwr-i18n-ko.d.ts +2 -5
  566. package/types/ngwr-i18n-nl.d.ts +2 -5
  567. package/types/ngwr-i18n-pl.d.ts +2 -5
  568. package/types/ngwr-i18n-pt.d.ts +2 -5
  569. package/types/ngwr-i18n-ru.d.ts +2 -5
  570. package/types/ngwr-i18n-sv.d.ts +2 -5
  571. package/types/ngwr-i18n-tr.d.ts +2 -5
  572. package/types/ngwr-i18n-uk.d.ts +2 -5
  573. package/types/ngwr-i18n-vi.d.ts +2 -5
  574. package/types/ngwr-i18n-zh-TW.d.ts +2 -5
  575. package/types/ngwr-i18n-zh.d.ts +2 -5
  576. package/types/ngwr-i18n.d.ts +202 -246
  577. package/types/ngwr-icon-adapters-feather.d.ts +2 -11
  578. package/types/ngwr-icon-adapters-lucide.d.ts +2 -12
  579. package/types/ngwr-icon.d.ts +62 -84
  580. package/types/ngwr-image-cropper-testing.d.ts +116 -134
  581. package/types/ngwr-image-cropper.d.ts +287 -252
  582. package/types/ngwr-input-number-testing.d.ts +164 -182
  583. package/types/ngwr-input-number.d.ts +231 -150
  584. package/types/ngwr-input-otp-testing.d.ts +210 -244
  585. package/types/ngwr-input-otp.d.ts +167 -123
  586. package/types/ngwr-input-testing.d.ts +42 -60
  587. package/types/ngwr-input.d.ts +118 -94
  588. package/types/ngwr-keyboard.d.ts +14 -12
  589. package/types/ngwr-knob-testing.d.ts +106 -124
  590. package/types/ngwr-knob.d.ts +194 -129
  591. package/types/ngwr-layout.d.ts +57 -40
  592. package/types/ngwr-lightbox-testing.d.ts +101 -119
  593. package/types/ngwr-lightbox.d.ts +140 -87
  594. package/types/ngwr-line-chart-testing.d.ts +51 -69
  595. package/types/ngwr-line-chart.d.ts +171 -134
  596. package/types/ngwr-list.d.ts +55 -27
  597. package/types/ngwr-loading-bar-router.d.ts +2 -12
  598. package/types/ngwr-loading-bar.d.ts +45 -39
  599. package/types/ngwr-markdown-testing.d.ts +323 -350
  600. package/types/ngwr-markdown.d.ts +432 -318
  601. package/types/ngwr-marquee-testing.d.ts +190 -216
  602. package/types/ngwr-marquee.d.ts +127 -75
  603. package/types/ngwr-media.d.ts +25 -39
  604. package/types/ngwr-mention-testing.d.ts +274 -300
  605. package/types/ngwr-mention.d.ts +249 -164
  606. package/types/ngwr-meta.d.ts +93 -108
  607. package/types/ngwr-meter-group-testing.d.ts +33 -51
  608. package/types/ngwr-meter-group.d.ts +86 -60
  609. package/types/ngwr-overlay.d.ts +57 -132
  610. package/types/ngwr-page-header.d.ts +32 -19
  611. package/types/ngwr-pagination-testing.d.ts +215 -233
  612. package/types/ngwr-pagination.d.ts +213 -141
  613. package/types/ngwr-pipes.d.ts +67 -84
  614. package/types/ngwr-platform.d.ts +52 -57
  615. package/types/ngwr-popconfirm-testing.d.ts +181 -199
  616. package/types/ngwr-popconfirm.d.ts +151 -82
  617. package/types/ngwr-popover-testing.d.ts +183 -201
  618. package/types/ngwr-popover.d.ts +291 -207
  619. package/types/ngwr-progress.d.ts +38 -25
  620. package/types/ngwr-pull-to-refresh.d.ts +55 -40
  621. package/types/ngwr-qr.d.ts +79 -37
  622. package/types/ngwr-radio-testing.d.ts +208 -234
  623. package/types/ngwr-radio.d.ts +162 -125
  624. package/types/ngwr-rating-testing.d.ts +218 -244
  625. package/types/ngwr-rating.d.ts +146 -111
  626. package/types/ngwr-result.d.ts +85 -41
  627. package/types/ngwr-rotating-text-testing.d.ts +107 -125
  628. package/types/ngwr-rotating-text.d.ts +96 -52
  629. package/types/ngwr-schema-form.d.ts +57 -49
  630. package/types/ngwr-scroll.d.ts +27 -31
  631. package/types/ngwr-segmented-testing.d.ts +333 -359
  632. package/types/ngwr-segmented.d.ts +183 -165
  633. package/types/ngwr-select-testing.d.ts +128 -154
  634. package/types/ngwr-select.d.ts +1083 -906
  635. package/types/ngwr-shiny-text-testing.d.ts +82 -100
  636. package/types/ngwr-shiny-text.d.ts +83 -36
  637. package/types/ngwr-sidebar.d.ts +108 -93
  638. package/types/ngwr-skeleton.d.ts +34 -26
  639. package/types/ngwr-slider-testing.d.ts +228 -254
  640. package/types/ngwr-slider.d.ts +236 -186
  641. package/types/ngwr-sparkline-testing.d.ts +29 -47
  642. package/types/ngwr-sparkline.d.ts +130 -88
  643. package/types/ngwr-speed-dial-testing.d.ts +129 -155
  644. package/types/ngwr-speed-dial.d.ts +92 -57
  645. package/types/ngwr-spinner.d.ts +30 -23
  646. package/types/ngwr-splash-cursor-testing.d.ts +42 -60
  647. package/types/ngwr-splash-cursor.d.ts +129 -61
  648. package/types/ngwr-split-text-testing.d.ts +119 -137
  649. package/types/ngwr-split-text.d.ts +120 -71
  650. package/types/ngwr-splitter-testing.d.ts +114 -132
  651. package/types/ngwr-splitter.d.ts +85 -55
  652. package/types/ngwr-spotlight-card-testing.d.ts +177 -203
  653. package/types/ngwr-spotlight-card.d.ts +50 -32
  654. package/types/ngwr-squircle.d.ts +112 -70
  655. package/types/ngwr-star-border-testing.d.ts +74 -92
  656. package/types/ngwr-star-border.d.ts +42 -20
  657. package/types/ngwr-statistic.d.ts +210 -130
  658. package/types/ngwr-stepper-testing.d.ts +258 -284
  659. package/types/ngwr-stepper.d.ts +112 -75
  660. package/types/ngwr-storage.d.ts +96 -118
  661. package/types/ngwr-switch-testing.d.ts +26 -44
  662. package/types/ngwr-switch.d.ts +92 -62
  663. package/types/ngwr-table-testing.d.ts +291 -333
  664. package/types/ngwr-table.d.ts +922 -707
  665. package/types/ngwr-tabs-router.d.ts +21 -24
  666. package/types/ngwr-tabs-testing.d.ts +354 -380
  667. package/types/ngwr-tabs.d.ts +169 -155
  668. package/types/ngwr-textarea-testing.d.ts +123 -141
  669. package/types/ngwr-textarea.d.ts +160 -105
  670. package/types/ngwr-theme.d.ts +81 -163
  671. package/types/ngwr-tilt-card-testing.d.ts +94 -112
  672. package/types/ngwr-tilt-card.d.ts +64 -35
  673. package/types/ngwr-timeline.d.ts +36 -19
  674. package/types/ngwr-toast-testing.d.ts +37 -55
  675. package/types/ngwr-toast.d.ts +165 -209
  676. package/types/ngwr-toolbar.d.ts +17 -14
  677. package/types/ngwr-tour-testing.d.ts +84 -102
  678. package/types/ngwr-tour.d.ts +142 -144
  679. package/types/ngwr-transfer-testing.d.ts +293 -328
  680. package/types/ngwr-transfer.d.ts +217 -159
  681. package/types/ngwr-tree-testing.d.ts +428 -454
  682. package/types/ngwr-tree.d.ts +400 -296
  683. package/types/ngwr-typewriter-testing.d.ts +125 -143
  684. package/types/ngwr-typewriter.d.ts +137 -63
  685. package/types/ngwr-typography.d.ts +49 -27
  686. package/types/ngwr-utils.d.ts +100 -107
  687. package/types/ngwr-validators.d.ts +94 -104
  688. package/types/ngwr-version.d.ts +3 -14
  689. package/types/ngwr-virtual-scroll.d.ts +86 -58
  690. package/types/ngwr-waves-testing.d.ts +61 -79
  691. package/types/ngwr-waves.d.ts +116 -63
  692. package/types/ngwr-window-testing.d.ts +178 -204
  693. package/types/ngwr-window.d.ts +299 -325
  694. package/types/ngwr.d.ts +1 -2
  695. package/fesm2022/ngwr.mjs.map +0 -1
@@ -163,7 +163,22 @@
163
163
  display: none;
164
164
  }
165
165
 
166
- &--disabled &__surface {
166
+ // The document a read-only editor draws instead of mounting. It is the control
167
+ // itself there, and the only one of the two that needs a focus ring: a mounted
168
+ // surface says where focus is with a caret, and this has none. Inset, because
169
+ // the box runs flush to the editor's own border and an outset ring would paint
170
+ // over it — the override `list` and `window` make for the same reason.
171
+ &__preview--static {
172
+ cursor: default;
173
+
174
+ &:focus-visible {
175
+ @include theme.focus-ring;
176
+ outline-offset: -2px;
177
+ }
178
+ }
179
+
180
+ &--disabled &__surface,
181
+ &--disabled &__preview--static {
167
182
  cursor: not-allowed;
168
183
  }
169
184
 
@@ -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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"}