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