ngwr 10.2.0 → 11.0.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 (471) hide show
  1. package/README.md +39 -19
  2. package/anchor/styles/_index.scss +4 -4
  3. package/back-top/styles/_index.scss +6 -1
  4. package/blur-text/styles/_index.scss +13 -0
  5. package/button/styles/_index.scss +11 -6
  6. package/carousel/styles/_index.scss +13 -2
  7. package/cascader/styles/_index.scss +2 -2
  8. package/circular-text/styles/_index.scss +2 -0
  9. package/collapse/styles/_index.scss +1 -1
  10. package/color-picker/styles/_index.scss +6 -1
  11. package/compare/styles/_index.scss +1 -2
  12. package/context-menu/styles/_index.scss +6 -1
  13. package/descriptions/styles/_index.scss +2 -2
  14. package/dialog/styles/_index.scss +38 -0
  15. package/drawer/styles/_index.scss +20 -1
  16. package/dropdown/styles/_index.scss +19 -5
  17. package/empty/styles/_index.scss +10 -0
  18. package/fesm2022/ngwr-action-sheet.mjs +15 -5
  19. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  20. package/fesm2022/ngwr-affix.mjs +43 -16
  21. package/fesm2022/ngwr-affix.mjs.map +1 -1
  22. package/fesm2022/ngwr-alert.mjs +3 -3
  23. package/fesm2022/ngwr-anchor.mjs +20 -8
  24. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  25. package/fesm2022/ngwr-aurora.mjs +4 -4
  26. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  27. package/fesm2022/ngwr-avatar.mjs +33 -9
  28. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  29. package/fesm2022/ngwr-back-top.mjs +8 -4
  30. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  31. package/fesm2022/ngwr-badge.mjs +6 -6
  32. package/fesm2022/ngwr-badge.mjs.map +1 -1
  33. package/fesm2022/ngwr-bar-chart.mjs +32 -11
  34. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  35. package/fesm2022/ngwr-blur-text.mjs +4 -4
  36. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  37. package/fesm2022/ngwr-border-glow.mjs +4 -4
  38. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  39. package/fesm2022/ngwr-breadcrumbs.mjs +9 -8
  40. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  41. package/fesm2022/ngwr-burger.mjs +11 -6
  42. package/fesm2022/ngwr-burger.mjs.map +1 -1
  43. package/fesm2022/ngwr-button-testing.mjs +96 -0
  44. package/fesm2022/ngwr-button-testing.mjs.map +1 -0
  45. package/fesm2022/ngwr-button.mjs +89 -24
  46. package/fesm2022/ngwr-button.mjs.map +1 -1
  47. package/fesm2022/ngwr-calendar-heatmap.mjs +42 -10
  48. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  49. package/fesm2022/ngwr-calendar.mjs +108 -9
  50. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  51. package/fesm2022/ngwr-card.mjs +10 -10
  52. package/fesm2022/ngwr-card.mjs.map +1 -1
  53. package/fesm2022/ngwr-carousel-testing.mjs +377 -0
  54. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
  55. package/fesm2022/ngwr-carousel.mjs +72 -18
  56. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  57. package/fesm2022/ngwr-cascader-testing.mjs +534 -0
  58. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
  59. package/fesm2022/ngwr-cascader.mjs +4 -4
  60. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  61. package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
  62. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
  63. package/fesm2022/ngwr-checkbox.mjs +15 -9
  64. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  65. package/fesm2022/ngwr-circular-text.mjs +4 -4
  66. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  67. package/fesm2022/ngwr-click-spark.mjs +4 -4
  68. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  69. package/fesm2022/ngwr-clipboard.mjs +18 -4
  70. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  71. package/fesm2022/ngwr-collapse-testing.mjs +368 -0
  72. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
  73. package/fesm2022/ngwr-collapse.mjs +9 -9
  74. package/fesm2022/ngwr-color-picker.mjs +139 -19
  75. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  76. package/fesm2022/ngwr-command-palette-testing.mjs +589 -0
  77. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -0
  78. package/fesm2022/ngwr-command-palette.mjs +60 -10
  79. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  80. package/fesm2022/ngwr-compare.mjs +105 -15
  81. package/fesm2022/ngwr-compare.mjs.map +1 -1
  82. package/fesm2022/ngwr-confetti.mjs +3 -3
  83. package/fesm2022/ngwr-config.mjs +106 -0
  84. package/fesm2022/ngwr-config.mjs.map +1 -0
  85. package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
  86. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
  87. package/fesm2022/ngwr-context-menu.mjs +104 -18
  88. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  89. package/fesm2022/ngwr-cookie.mjs +8 -4
  90. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  91. package/fesm2022/ngwr-counter.mjs +17 -9
  92. package/fesm2022/ngwr-counter.mjs.map +1 -1
  93. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  94. package/fesm2022/ngwr-date-adapter-luxon.mjs +55 -7
  95. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-adapter.mjs +57 -11
  97. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  98. package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
  99. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
  100. package/fesm2022/ngwr-date-picker.mjs +409 -57
  101. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  102. package/fesm2022/ngwr-decrypt-text.mjs +30 -12
  103. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  104. package/fesm2022/ngwr-density.mjs +6 -6
  105. package/fesm2022/ngwr-descriptions.mjs +6 -6
  106. package/fesm2022/ngwr-dialog-testing.mjs +89 -0
  107. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
  108. package/fesm2022/ngwr-dialog.mjs +33 -17
  109. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  110. package/fesm2022/ngwr-directives.mjs +48 -24
  111. package/fesm2022/ngwr-directives.mjs.map +1 -1
  112. package/fesm2022/ngwr-divider.mjs +3 -3
  113. package/fesm2022/ngwr-donut-chart.mjs +24 -7
  114. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  115. package/fesm2022/ngwr-drag-drop.mjs +7 -7
  116. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  117. package/fesm2022/ngwr-drawer-testing.mjs +250 -0
  118. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
  119. package/fesm2022/ngwr-drawer.mjs +37 -19
  120. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  121. package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
  122. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
  123. package/fesm2022/ngwr-dropdown.mjs +19 -11
  124. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  125. package/fesm2022/ngwr-empty.mjs +26 -9
  126. package/fesm2022/ngwr-empty.mjs.map +1 -1
  127. package/fesm2022/ngwr-event-calendar.mjs +62 -15
  128. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  129. package/fesm2022/ngwr-falling-text.mjs +4 -4
  130. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  131. package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
  132. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
  133. package/fesm2022/ngwr-file-upload.mjs +3 -3
  134. package/fesm2022/ngwr-form-testing.mjs +451 -0
  135. package/fesm2022/ngwr-form-testing.mjs.map +1 -0
  136. package/fesm2022/ngwr-form.mjs +28 -12
  137. package/fesm2022/ngwr-form.mjs.map +1 -1
  138. package/fesm2022/ngwr-fuzzy-text.mjs +11 -4
  139. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  140. package/fesm2022/ngwr-gauge.mjs +21 -7
  141. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  142. package/fesm2022/ngwr-glitch-text.mjs +4 -4
  143. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  144. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  145. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  146. package/fesm2022/ngwr-hotkey.mjs +31 -10
  147. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  148. package/fesm2022/ngwr-i18n-en.mjs +61 -0
  149. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  150. package/fesm2022/ngwr-i18n-ru.mjs +59 -0
  151. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  152. package/fesm2022/ngwr-i18n.mjs +9 -9
  153. package/fesm2022/ngwr-icon.mjs +6 -6
  154. package/fesm2022/ngwr-image-cropper.mjs +26 -3
  155. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  156. package/fesm2022/ngwr-input-number-testing.mjs +306 -0
  157. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
  158. package/fesm2022/ngwr-input-number.mjs +37 -5
  159. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  160. package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
  161. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
  162. package/fesm2022/ngwr-input-otp.mjs +39 -8
  163. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  164. package/fesm2022/ngwr-input-testing.mjs +102 -0
  165. package/fesm2022/ngwr-input-testing.mjs.map +1 -0
  166. package/fesm2022/ngwr-input.mjs +62 -25
  167. package/fesm2022/ngwr-input.mjs.map +1 -1
  168. package/fesm2022/ngwr-keyboard.mjs +3 -3
  169. package/fesm2022/ngwr-knob.mjs +46 -10
  170. package/fesm2022/ngwr-knob.mjs.map +1 -1
  171. package/fesm2022/ngwr-layout.mjs +36 -20
  172. package/fesm2022/ngwr-layout.mjs.map +1 -1
  173. package/fesm2022/ngwr-lightbox.mjs +35 -8
  174. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  175. package/fesm2022/ngwr-line-chart.mjs +19 -6
  176. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  177. package/fesm2022/ngwr-list.mjs +14 -9
  178. package/fesm2022/ngwr-list.mjs.map +1 -1
  179. package/fesm2022/ngwr-loading-bar.mjs +71 -31
  180. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  181. package/fesm2022/ngwr-markdown-testing.mjs +516 -0
  182. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
  183. package/fesm2022/ngwr-markdown.mjs +1492 -0
  184. package/fesm2022/ngwr-markdown.mjs.map +1 -0
  185. package/fesm2022/ngwr-marquee.mjs +19 -8
  186. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  187. package/fesm2022/ngwr-media.mjs +3 -3
  188. package/fesm2022/ngwr-mention-testing.mjs +513 -0
  189. package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
  190. package/fesm2022/ngwr-mention.mjs +16 -7
  191. package/fesm2022/ngwr-mention.mjs.map +1 -1
  192. package/fesm2022/ngwr-meta.mjs +28 -13
  193. package/fesm2022/ngwr-meta.mjs.map +1 -1
  194. package/fesm2022/ngwr-meter-group.mjs +22 -8
  195. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  196. package/fesm2022/ngwr-overlay.mjs +57 -8
  197. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  198. package/fesm2022/ngwr-page-header.mjs +3 -3
  199. package/fesm2022/ngwr-pagination-testing.mjs +389 -0
  200. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
  201. package/fesm2022/ngwr-pagination.mjs +27 -11
  202. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  203. package/fesm2022/ngwr-pipes.mjs +21 -21
  204. package/fesm2022/ngwr-platform.mjs +9 -9
  205. package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
  206. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
  207. package/fesm2022/ngwr-popconfirm.mjs +99 -21
  208. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  209. package/fesm2022/ngwr-popover-testing.mjs +316 -0
  210. package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
  211. package/fesm2022/ngwr-popover.mjs +48 -10
  212. package/fesm2022/ngwr-popover.mjs.map +1 -1
  213. package/fesm2022/ngwr-progress.mjs +3 -3
  214. package/fesm2022/ngwr-pull-to-refresh.mjs +19 -4
  215. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  216. package/fesm2022/ngwr-qr.mjs +15 -5
  217. package/fesm2022/ngwr-qr.mjs.map +1 -1
  218. package/fesm2022/ngwr-radio-testing.mjs +392 -0
  219. package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
  220. package/fesm2022/ngwr-radio.mjs +16 -9
  221. package/fesm2022/ngwr-radio.mjs.map +1 -1
  222. package/fesm2022/ngwr-rating-testing.mjs +384 -0
  223. package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
  224. package/fesm2022/ngwr-rating.mjs +40 -5
  225. package/fesm2022/ngwr-rating.mjs.map +1 -1
  226. package/fesm2022/ngwr-result.mjs +12 -12
  227. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  228. package/fesm2022/ngwr-scroll.mjs +3 -3
  229. package/fesm2022/ngwr-segmented-testing.mjs +512 -0
  230. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
  231. package/fesm2022/ngwr-segmented.mjs +3 -3
  232. package/fesm2022/ngwr-select-testing.mjs +268 -0
  233. package/fesm2022/ngwr-select-testing.mjs.map +1 -0
  234. package/fesm2022/ngwr-select.mjs +96 -25
  235. package/fesm2022/ngwr-select.mjs.map +1 -1
  236. package/fesm2022/ngwr-shiny-text.mjs +7 -7
  237. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  238. package/fesm2022/ngwr-sidebar.mjs +67 -14
  239. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  240. package/fesm2022/ngwr-skeleton.mjs +3 -3
  241. package/fesm2022/ngwr-slider-testing.mjs +478 -0
  242. package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
  243. package/fesm2022/ngwr-slider.mjs +59 -15
  244. package/fesm2022/ngwr-slider.mjs.map +1 -1
  245. package/fesm2022/ngwr-sparkline.mjs +28 -8
  246. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  247. package/fesm2022/ngwr-speed-dial.mjs +39 -6
  248. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  249. package/fesm2022/ngwr-spinner.mjs +14 -5
  250. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  251. package/fesm2022/ngwr-splash-cursor.mjs +4 -4
  252. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  253. package/fesm2022/ngwr-split-text.mjs +4 -4
  254. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  255. package/fesm2022/ngwr-splitter.mjs +72 -11
  256. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  257. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  258. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  259. package/fesm2022/ngwr-squircle.mjs +6 -6
  260. package/fesm2022/ngwr-star-border.mjs +4 -4
  261. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  262. package/fesm2022/ngwr-statistic.mjs +33 -16
  263. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  264. package/fesm2022/ngwr-stepper-testing.mjs +477 -0
  265. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
  266. package/fesm2022/ngwr-stepper.mjs +6 -6
  267. package/fesm2022/ngwr-storage.mjs +27 -17
  268. package/fesm2022/ngwr-storage.mjs.map +1 -1
  269. package/fesm2022/ngwr-switch-testing.mjs +77 -0
  270. package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
  271. package/fesm2022/ngwr-switch.mjs +12 -6
  272. package/fesm2022/ngwr-switch.mjs.map +1 -1
  273. package/fesm2022/ngwr-table-testing.mjs +580 -0
  274. package/fesm2022/ngwr-table-testing.mjs.map +1 -0
  275. package/fesm2022/ngwr-table.mjs +105 -44
  276. package/fesm2022/ngwr-table.mjs.map +1 -1
  277. package/fesm2022/ngwr-tabs-testing.mjs +617 -0
  278. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
  279. package/fesm2022/ngwr-tabs.mjs +44 -12
  280. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  281. package/fesm2022/ngwr-textarea-testing.mjs +238 -0
  282. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
  283. package/fesm2022/ngwr-textarea.mjs +35 -7
  284. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  285. package/fesm2022/ngwr-theme.mjs +3 -3
  286. package/fesm2022/ngwr-tilt-card.mjs +7 -7
  287. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  288. package/fesm2022/ngwr-timeline.mjs +6 -6
  289. package/fesm2022/ngwr-toast-testing.mjs +101 -0
  290. package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
  291. package/fesm2022/ngwr-toast.mjs +55 -21
  292. package/fesm2022/ngwr-toast.mjs.map +1 -1
  293. package/fesm2022/ngwr-toolbar.mjs +3 -3
  294. package/fesm2022/ngwr-tour.mjs +67 -15
  295. package/fesm2022/ngwr-tour.mjs.map +1 -1
  296. package/fesm2022/ngwr-transfer-testing.mjs +538 -0
  297. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
  298. package/fesm2022/ngwr-transfer.mjs +47 -16
  299. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  300. package/fesm2022/ngwr-tree-testing.mjs +734 -0
  301. package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
  302. package/fesm2022/ngwr-tree.mjs +75 -9
  303. package/fesm2022/ngwr-tree.mjs.map +1 -1
  304. package/fesm2022/ngwr-typewriter.mjs +7 -5
  305. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  306. package/fesm2022/ngwr-typography.mjs +3 -3
  307. package/fesm2022/ngwr-version.mjs +1 -1
  308. package/fesm2022/ngwr-version.mjs.map +1 -1
  309. package/fesm2022/ngwr-virtual-scroll.mjs +33 -7
  310. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  311. package/fesm2022/ngwr-waves.mjs +5 -5
  312. package/fesm2022/ngwr-waves.mjs.map +1 -1
  313. package/fesm2022/ngwr-window.mjs +88 -18
  314. package/fesm2022/ngwr-window.mjs.map +1 -1
  315. package/gauge/styles/_index.scss +1 -1
  316. package/glitch-text/styles/_index.scss +4 -0
  317. package/i18n/en.json +56 -0
  318. package/i18n/ru.json +56 -0
  319. package/image-cropper/styles/_index.scss +13 -1
  320. package/input/styles/_index.scss +2 -2
  321. package/input-number/styles/_index.scss +7 -2
  322. package/knob/styles/_index.scss +8 -1
  323. package/layout/styles/_index.scss +3 -3
  324. package/lightbox/styles/_index.scss +10 -2
  325. package/line-chart/styles/_index.scss +6 -0
  326. package/llms-full.txt +151 -4
  327. package/llms.txt +57 -8
  328. package/loading-bar/styles/_index.scss +1 -2
  329. package/markdown/styles/_index.scss +296 -0
  330. package/marquee/styles/_index.scss +12 -0
  331. package/mcp/api.js +512 -0
  332. package/mcp/catalog.js +157 -0
  333. package/mcp/server.js +273 -0
  334. package/mcp/tools.js +366 -0
  335. package/meter-group/styles/_index.scss +1 -1
  336. package/package.json +186 -35
  337. package/pagination/styles/_index.scss +6 -6
  338. package/popover/styles/_index.scss +37 -5
  339. package/rating/styles/_index.scss +10 -0
  340. package/schematics/use/symbol-map.json +2 -0
  341. package/segmented/styles/_index.scss +7 -0
  342. package/select/styles/_index.scss +29 -9
  343. package/sidebar/styles/_index.scss +30 -5
  344. package/slider/styles/_index.scss +15 -0
  345. package/speed-dial/styles/_index.scss +20 -0
  346. package/split-text/styles/_index.scss +13 -0
  347. package/star-border/styles/_index.scss +2 -0
  348. package/stepper/styles/_index.scss +1 -1
  349. package/styles/_grid.scss +4 -4
  350. package/styles.scss +1 -0
  351. package/switch/styles/_index.scss +5 -3
  352. package/table/styles/_index.scss +22 -11
  353. package/tabs/styles/_index.scss +11 -1
  354. package/textarea/styles/_index.scss +5 -0
  355. package/theme/styles/_colors.scss +29 -13
  356. package/theme/styles/_dark.scss +11 -3
  357. package/theme/styles/_mixins.scss +3 -0
  358. package/timeline/styles/_index.scss +2 -2
  359. package/toast/styles/_index.scss +17 -8
  360. package/toolbar/styles/_index.scss +3 -3
  361. package/tour/styles/_index.scss +7 -1
  362. package/tree/styles/_index.scss +5 -3
  363. package/types/ngwr-action-sheet.d.ts +9 -1
  364. package/types/ngwr-affix.d.ts +7 -1
  365. package/types/ngwr-anchor.d.ts +8 -1
  366. package/types/ngwr-avatar.d.ts +13 -3
  367. package/types/ngwr-bar-chart.d.ts +16 -0
  368. package/types/ngwr-burger.d.ts +6 -2
  369. package/types/ngwr-button-testing.d.ts +85 -0
  370. package/types/ngwr-button.d.ts +58 -10
  371. package/types/ngwr-calendar-heatmap.d.ts +16 -2
  372. package/types/ngwr-calendar.d.ts +37 -1
  373. package/types/ngwr-carousel-testing.d.ts +257 -0
  374. package/types/ngwr-carousel.d.ts +20 -4
  375. package/types/ngwr-cascader-testing.d.ts +392 -0
  376. package/types/ngwr-checkbox-testing.d.ts +77 -0
  377. package/types/ngwr-checkbox.d.ts +7 -2
  378. package/types/ngwr-clipboard.d.ts +8 -1
  379. package/types/ngwr-collapse-testing.d.ts +290 -0
  380. package/types/ngwr-color-picker.d.ts +20 -11
  381. package/types/ngwr-command-palette-testing.d.ts +437 -0
  382. package/types/ngwr-command-palette.d.ts +25 -2
  383. package/types/ngwr-compare.d.ts +50 -2
  384. package/types/ngwr-config.d.ts +176 -0
  385. package/types/ngwr-context-menu-testing.d.ts +401 -0
  386. package/types/ngwr-context-menu.d.ts +65 -17
  387. package/types/ngwr-counter.d.ts +6 -1
  388. package/types/ngwr-date-adapter-luxon.d.ts +26 -0
  389. package/types/ngwr-date-picker-testing.d.ts +518 -0
  390. package/types/ngwr-date-picker.d.ts +128 -8
  391. package/types/ngwr-dialog-testing.d.ts +79 -0
  392. package/types/ngwr-dialog.d.ts +13 -0
  393. package/types/ngwr-directives.d.ts +10 -1
  394. package/types/ngwr-donut-chart.d.ts +8 -1
  395. package/types/ngwr-drawer-testing.d.ts +196 -0
  396. package/types/ngwr-drawer.d.ts +15 -0
  397. package/types/ngwr-dropdown-testing.d.ts +202 -0
  398. package/types/ngwr-dropdown.d.ts +7 -1
  399. package/types/ngwr-empty.d.ts +19 -4
  400. package/types/ngwr-event-calendar.d.ts +26 -1
  401. package/types/ngwr-file-upload-testing.d.ts +194 -0
  402. package/types/ngwr-form-testing.d.ts +379 -0
  403. package/types/ngwr-form.d.ts +17 -0
  404. package/types/ngwr-gauge.d.ts +13 -1
  405. package/types/ngwr-hotkey.d.ts +2 -0
  406. package/types/ngwr-image-cropper.d.ts +10 -0
  407. package/types/ngwr-input-number-testing.d.ts +226 -0
  408. package/types/ngwr-input-number.d.ts +29 -1
  409. package/types/ngwr-input-otp-testing.d.ts +299 -0
  410. package/types/ngwr-input-otp.d.ts +23 -2
  411. package/types/ngwr-input-testing.d.ts +84 -0
  412. package/types/ngwr-input.d.ts +20 -6
  413. package/types/ngwr-knob.d.ts +18 -0
  414. package/types/ngwr-layout.d.ts +1 -0
  415. package/types/ngwr-lightbox.d.ts +17 -3
  416. package/types/ngwr-line-chart.d.ts +9 -2
  417. package/types/ngwr-list.d.ts +7 -2
  418. package/types/ngwr-loading-bar.d.ts +4 -7
  419. package/types/ngwr-markdown-testing.d.ts +462 -0
  420. package/types/ngwr-markdown.d.ts +534 -0
  421. package/types/ngwr-marquee.d.ts +12 -2
  422. package/types/ngwr-mention-testing.d.ts +359 -0
  423. package/types/ngwr-meta.d.ts +4 -2
  424. package/types/ngwr-meter-group.d.ts +11 -1
  425. package/types/ngwr-overlay.d.ts +33 -2
  426. package/types/ngwr-pagination-testing.d.ts +291 -0
  427. package/types/ngwr-pagination.d.ts +7 -1
  428. package/types/ngwr-popconfirm-testing.d.ts +235 -0
  429. package/types/ngwr-popconfirm.d.ts +31 -21
  430. package/types/ngwr-popover-testing.d.ts +221 -0
  431. package/types/ngwr-popover.d.ts +19 -2
  432. package/types/ngwr-pull-to-refresh.d.ts +7 -0
  433. package/types/ngwr-qr.d.ts +9 -1
  434. package/types/ngwr-radio-testing.d.ts +296 -0
  435. package/types/ngwr-radio.d.ts +8 -2
  436. package/types/ngwr-rating-testing.d.ts +291 -0
  437. package/types/ngwr-rating.d.ts +23 -0
  438. package/types/ngwr-segmented-testing.d.ts +401 -0
  439. package/types/ngwr-select-testing.d.ts +175 -0
  440. package/types/ngwr-select.d.ts +45 -4
  441. package/types/ngwr-sidebar.d.ts +17 -2
  442. package/types/ngwr-slider-testing.d.ts +329 -0
  443. package/types/ngwr-slider.d.ts +35 -1
  444. package/types/ngwr-sparkline.d.ts +12 -2
  445. package/types/ngwr-speed-dial.d.ts +17 -18
  446. package/types/ngwr-spinner.d.ts +8 -1
  447. package/types/ngwr-splitter.d.ts +24 -1
  448. package/types/ngwr-statistic.d.ts +12 -2
  449. package/types/ngwr-stepper-testing.d.ts +346 -0
  450. package/types/ngwr-storage.d.ts +10 -1
  451. package/types/ngwr-switch-testing.d.ts +66 -0
  452. package/types/ngwr-switch.d.ts +7 -2
  453. package/types/ngwr-table-testing.d.ts +423 -0
  454. package/types/ngwr-table.d.ts +42 -0
  455. package/types/ngwr-tabs-testing.d.ts +470 -0
  456. package/types/ngwr-tabs.d.ts +9 -0
  457. package/types/ngwr-textarea-testing.d.ts +184 -0
  458. package/types/ngwr-textarea.d.ts +7 -2
  459. package/types/ngwr-toast-testing.d.ts +80 -0
  460. package/types/ngwr-toast.d.ts +19 -4
  461. package/types/ngwr-tour.d.ts +27 -0
  462. package/types/ngwr-transfer-testing.d.ts +444 -0
  463. package/types/ngwr-transfer.d.ts +16 -1
  464. package/types/ngwr-tree-testing.d.ts +501 -0
  465. package/types/ngwr-tree.d.ts +33 -0
  466. package/types/ngwr-version.d.ts +1 -1
  467. package/types/ngwr-virtual-scroll.d.ts +13 -1
  468. package/types/ngwr-window.d.ts +23 -2
  469. package/typewriter/styles/_index.scss +1 -1
  470. package/typography/styles/_index.scss +1 -1
  471. package/window/styles/_index.scss +32 -9
@@ -0,0 +1,437 @@
1
+ import { BaseHarnessFilters, ComponentHarness, HarnessPredicate, ModifierKeys } 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
+ /** Narrows which `<wr-command-palette>` a harness query matches. */
11
+ interface WrCommandPaletteHarnessFilters extends BaseHarnessFilters {
12
+ /** Match only open (`true`) or only closed (`false`) palettes. */
13
+ readonly open?: boolean;
14
+ /**
15
+ * Match the palette's accessible name — `paletteLabel`, or the
16
+ * `commandPalette.label` catalogue string it falls back to. A string is an
17
+ * exact match, a RegExp is tested.
18
+ *
19
+ * A CLOSED palette has no name to match: the dialog carrying it is inside an
20
+ * `@if (open())`, so this filter never selects one.
21
+ */
22
+ readonly label?: string | RegExp;
23
+ }
24
+ /** Narrows which group inside an open palette a harness query matches. */
25
+ interface WrCommandPaletteGroupHarnessFilters extends BaseHarnessFilters {
26
+ /**
27
+ * Match the group's title — a string is an exact match, a RegExp is tested.
28
+ *
29
+ * The bucket holding items with no `group` has no title, so it is never a
30
+ * match for this filter.
31
+ */
32
+ readonly title?: string | RegExp;
33
+ }
34
+ /** Narrows which item inside an open palette a harness query matches. */
35
+ interface WrCommandPaletteItemHarnessFilters extends BaseHarnessFilters {
36
+ /**
37
+ * Match the item's label — a string is an exact match, a RegExp is tested. The
38
+ * description, the shortcut hint and the icon are not part of it.
39
+ */
40
+ readonly text?: string | RegExp;
41
+ /** Match only the highlighted item (`true`) or only the rest (`false`). */
42
+ readonly active?: boolean;
43
+ }
44
+
45
+ /**
46
+ * @license
47
+ *
48
+ * Use of this source code is governed by an MIT-style license that can be
49
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
50
+ */
51
+
52
+ /**
53
+ * Test harness for one command inside an open `<wr-command-palette>`.
54
+ *
55
+ * An item is an `option` in the palette's listbox, and it is never focused — the
56
+ * search input keeps focus and points at the highlighted row with
57
+ * `aria-activedescendant` — so `aria-selected` and the row's `id` are the whole
58
+ * story a screen reader is told, and both are read here rather than the
59
+ * `--active` class that paints it.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const palette = await loader.getHarness(WrCommandPaletteHarness);
64
+ * const [first] = await palette.getItems();
65
+ *
66
+ * expect(await first.getLabel()).toBe('Open file');
67
+ * expect(await first.getShortcut()).toBe('⌘O');
68
+ * ```
69
+ *
70
+ * @see https://ngwr.dev/guides/testing
71
+ */
72
+ declare class WrCommandPaletteItemHarness extends ComponentHarness {
73
+ /** The row the palette renders per command — also the `role="option"`. */
74
+ static hostSelector: string;
75
+ /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
76
+ static with(options?: WrCommandPaletteItemHarnessFilters): HarnessPredicate<WrCommandPaletteItemHarness>;
77
+ /**
78
+ * The item's primary label.
79
+ *
80
+ * Read from the label element rather than from the host's text: the host also
81
+ * holds the description, the shortcut hint, and whatever text sits inside a
82
+ * registered icon's SVG (`<title>`, most often) — an icon with one would
83
+ * otherwise turn up in the middle of the answer.
84
+ */
85
+ getLabel(): Promise<string>;
86
+ /** The secondary line under the label, or `null` when the item declares none. */
87
+ getDescription(): Promise<string | null>;
88
+ /**
89
+ * The shortcut hint painted on the right, or `null` when the item declares none.
90
+ *
91
+ * A hint only — the palette draws whatever string it was given and binds
92
+ * nothing. Only `trigger` is a real keybinding.
93
+ */
94
+ getShortcut(): Promise<string | null>;
95
+ /**
96
+ * The leading icon's registered name, or `null` when the item declares no icon.
97
+ *
98
+ * The icon SLOT is always painted — an item without one gets a blank span so
99
+ * every label stays on the same left edge — so the query is for the `<wr-icon>`
100
+ * itself. It reflects the name it was asked for as `data-icon` whether or not
101
+ * that name is registered, so this answers what the item MEANT to draw.
102
+ */
103
+ getIconName(): Promise<string | null>;
104
+ /** The role the item announces — `option`. */
105
+ getRole(): Promise<string | null>;
106
+ /**
107
+ * Whether this item is the highlighted one.
108
+ *
109
+ * From `aria-selected`, not the `wr-command-palette__option--active` class:
110
+ * both are public and the template paints them from the same predicate, but the
111
+ * attribute is what a screen reader acts on — and it is the one
112
+ * `aria-activedescendant` has to agree with. See
113
+ * `WrCommandPaletteHarness.isActiveItemAnnounced()`.
114
+ */
115
+ isActive(): Promise<boolean>;
116
+ /** The row's `id` — what the search input points at while this item is highlighted. */
117
+ getId(): Promise<string>;
118
+ /**
119
+ * Run this command — the pointer path.
120
+ *
121
+ * The palette commits on `mousedown` rather than on `click`, so that a press
122
+ * inside the panel never lets the input lose focus first; the CDK's click
123
+ * sequence opens with one, so this drives the real handler. It needs no
124
+ * coordinates, which is what makes it usable in jsdom at all.
125
+ *
126
+ * With `closeOnPick` left at its default this also closes the palette, taking
127
+ * every item harness — including this one — out of the DOM.
128
+ */
129
+ click(): Promise<void>;
130
+ /**
131
+ * Move the pointer onto this item, which highlights it.
132
+ *
133
+ * The palette follows the pointer as well as the keyboard, but only the
134
+ * keyboard scrolls the row into view — hovering deliberately leaves the scroll
135
+ * position alone, since moving it would fight the pointer that caused the move.
136
+ */
137
+ hover(): Promise<void>;
138
+ }
139
+
140
+ /**
141
+ * @license
142
+ *
143
+ * Use of this source code is governed by an MIT-style license that can be
144
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
145
+ */
146
+
147
+ /**
148
+ * Test harness for one bucket of commands inside an open `<wr-command-palette>`.
149
+ *
150
+ * The palette buckets its items by `group`, in the order each group first
151
+ * appears in `items` — which is why this exists as a harness of its own: it is
152
+ * the only way to ask which commands ended up under which heading, and the
153
+ * rendered order is the contract every index in the palette is counted against.
154
+ *
155
+ * A bucket WITH a title is a labelled `group`; the bucket holding ungrouped items
156
+ * carries `role="none"` instead, so its options belong to the listbox directly —
157
+ * a `listbox` may only own `option` and `group` children, and a role-less
158
+ * wrapper in between is something ARIA has no rule for.
159
+ *
160
+ * @example
161
+ * ```ts
162
+ * const palette = await loader.getHarness(WrCommandPaletteHarness);
163
+ * const [file] = await palette.getGroups({ title: 'File' });
164
+ *
165
+ * expect(await file.getItemLabels()).toEqual(['Open file', 'Save file']);
166
+ * ```
167
+ *
168
+ * @see https://ngwr.dev/guides/testing
169
+ */
170
+ declare class WrCommandPaletteGroupHarness extends ComponentHarness {
171
+ static hostSelector: string;
172
+ /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
173
+ static with(options?: WrCommandPaletteGroupHarnessFilters): HarnessPredicate<WrCommandPaletteGroupHarness>;
174
+ /** The heading over this bucket, or `null` for the one holding ungrouped items. */
175
+ getTitle(): Promise<string | null>;
176
+ /**
177
+ * The role this bucket announces — `group` when it has a title, `none` when it
178
+ * does not, which promotes its options to the listbox's own children.
179
+ */
180
+ getRole(): Promise<string | null>;
181
+ /**
182
+ * Whether this bucket takes its accessible name from its own heading.
183
+ *
184
+ * The reference IS the group's name — no bucket carries an `aria-label` — and
185
+ * the id it points at is generated, so a spec cannot hard-code one. `false` for
186
+ * the untitled bucket, which has no name and needs none: it is `role="none"`.
187
+ */
188
+ isLabelledByTitle(): Promise<boolean>;
189
+ /** The commands in this bucket, in rendered order. */
190
+ getItems(filters?: WrCommandPaletteItemHarnessFilters): Promise<WrCommandPaletteItemHarness[]>;
191
+ /** The labels of the commands in this bucket, in rendered order. */
192
+ getItemLabels(): Promise<string[]>;
193
+ }
194
+
195
+ /**
196
+ * @license
197
+ *
198
+ * Use of this source code is governed by an MIT-style license that can be
199
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
200
+ */
201
+
202
+ /**
203
+ * Test harness for `<wr-command-palette>` — the `⌘K` modal, its search box and
204
+ * the filtered list of commands.
205
+ *
206
+ * Three things about this component shape the harness, and none of them match the
207
+ * other overlay harnesses in the library:
208
+ *
209
+ * 1. **It is an element, and it keeps its own dialog.** The panel is NOT portalled
210
+ * into the overlay container: the whole `role="dialog"` lives inside
211
+ * `<wr-command-palette>`, wrapped in an `@if (open())`. So every query here is
212
+ * host-scoped — two palettes on one page cannot read each other's rows — and a
213
+ * closed palette holds nothing at all, which is why the readers below throw
214
+ * instead of answering emptily.
215
+ * 2. **There is no trigger element.** The way in is a GLOBAL hotkey (`trigger`,
216
+ * `'mod+k'` by default), bound on the document, so {@link open} presses a chord
217
+ * at the document rather than clicking anything. A palette with
218
+ * `[trigger]="null"` cannot be opened from the DOM at all — set the bound
219
+ * `open` from the spec. And because the first binding to match a chord calls
220
+ * `preventDefault()`, which stops the rest, two palettes sharing one chord
221
+ * means only the first-registered one ever toggles: see {@link pressTrigger}.
222
+ * 3. **The rows are never focused.** Focus stays in the search input, which points
223
+ * at the highlighted row with `aria-activedescendant`. Navigation is therefore
224
+ * `moveTo*`, not `focus`, and "where am I" is answered by `aria-selected` plus
225
+ * that reference — {@link isActiveItemAnnounced} asserts the pair agrees.
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * const palette = await loader.getHarness(WrCommandPaletteHarness);
230
+ *
231
+ * await palette.open();
232
+ * await palette.setQuery('file');
233
+ * await palette.moveToNextItem();
234
+ * await palette.runActiveItem();
235
+ * ```
236
+ *
237
+ * @see https://ngwr.dev/guides/testing
238
+ */
239
+ declare class WrCommandPaletteHarness extends ComponentHarness {
240
+ static hostSelector: string;
241
+ /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
242
+ static with(options?: WrCommandPaletteHarnessFilters): HarnessPredicate<WrCommandPaletteHarness>;
243
+ /** Whether the palette is showing. */
244
+ isOpen(): Promise<boolean>;
245
+ /**
246
+ * The role the palette announces — `dialog` — or `null` while it is closed.
247
+ *
248
+ * Worth asking rather than assuming: the role sits on the palette's own
249
+ * backdrop-and-panel wrapper, not on the `<wr-command-palette>` host, so a
250
+ * consumer looking for it on the element they wrote would not find it.
251
+ */
252
+ getRole(): Promise<string | null>;
253
+ /** Whether the palette is marked `aria-modal`. `false` while it is closed. */
254
+ isModal(): Promise<boolean>;
255
+ /**
256
+ * The palette's accessible name — `paletteLabel`, or the catalogue string it
257
+ * falls back to. `null` while it is closed, since the element carrying the name
258
+ * does not exist then.
259
+ */
260
+ getLabel(): Promise<string | null>;
261
+ /**
262
+ * Whether this opening is presented full-screen instead of as a centred modal.
263
+ *
264
+ * Read from the `--sheet` modifier, which is public API: `responsive` is an
265
+ * input that never reaches the DOM, and the decision also folds in the viewport
266
+ * width — so the class is the only place the outcome exists. `false` while closed.
267
+ *
268
+ * That width is sampled when the palette last RECOMPUTED the decision, which is
269
+ * when `responsive` or the app-wide `provideWrResponsiveOverlays()` config
270
+ * changes — not when the palette opens. So a spec that narrows the viewport and
271
+ * then opens sees nothing move until one of those two changes as well.
272
+ */
273
+ isPresentedAsSheet(): Promise<boolean>;
274
+ /** The search box's placeholder — `placeholder`, or the catalogue fallback. */
275
+ getPlaceholder(): Promise<string>;
276
+ /** What is currently typed in the search box. */
277
+ getQuery(): Promise<string>;
278
+ /**
279
+ * Replace the search query, filtering the list.
280
+ *
281
+ * The palette matches a query against each item's label, description, group and
282
+ * keywords, and every keystroke sends the highlight back to the FIRST result —
283
+ * so a spec that moves the highlight and then types has to move it again.
284
+ */
285
+ setQuery(query: string): Promise<void>;
286
+ /**
287
+ * Whether the search box and the list are wired to each other the way a
288
+ * combobox and its listbox have to be: the input announces itself expanded and
289
+ * its `aria-controls` names THIS palette's listbox.
290
+ *
291
+ * The ids are generated per instance, so a spec cannot hard-code one — and this
292
+ * reads the listbox inside this host, so a second palette's list can never
293
+ * satisfy it.
294
+ */
295
+ isSearchWiredToList(): Promise<boolean>;
296
+ /**
297
+ * The commands currently offered, in rendered order.
298
+ *
299
+ * Rendered order, not the order they were passed in: the palette buckets by
300
+ * `group` as each group first appears, so two interleaved groups come back
301
+ * regrouped — and that order is what the arrows walk and what every index here
302
+ * counts against.
303
+ */
304
+ getItems(filters?: WrCommandPaletteItemHarnessFilters): Promise<WrCommandPaletteItemHarness[]>;
305
+ /** The labels of the commands currently offered, in rendered order. */
306
+ getItemLabels(): Promise<string[]>;
307
+ /** The buckets the commands are grouped into, in rendered order. */
308
+ getGroups(filters?: WrCommandPaletteGroupHarnessFilters): Promise<WrCommandPaletteGroupHarness[]>;
309
+ /**
310
+ * One entry per bucket, in rendered order — `null` for the bucket holding
311
+ * ungrouped items, which is unlabelled by design.
312
+ */
313
+ getGroupTitles(): Promise<(string | null)[]>;
314
+ /**
315
+ * The "no results" message, or `null` when the palette has results.
316
+ *
317
+ * The two are exclusive — the panel renders the message INSTEAD of the buckets —
318
+ * so a non-null answer here and an empty {@link getItemLabels} are the same fact.
319
+ */
320
+ getEmptyText(): Promise<string | null>;
321
+ /** The highlighted command, or `null` when nothing matches the query. */
322
+ getActiveItem(): Promise<WrCommandPaletteItemHarness | null>;
323
+ /** The highlighted command's label, or `null` when nothing matches the query. */
324
+ getActiveItemLabel(): Promise<string | null>;
325
+ /**
326
+ * Where the highlight sits in the rendered list, or `-1` when nothing matches
327
+ * the query.
328
+ */
329
+ getActiveItemIndex(): Promise<number>;
330
+ /**
331
+ * Whether the search box points at the row that is actually highlighted.
332
+ *
333
+ * The rows are not focusable, so this reference is the ONLY thing telling a
334
+ * screen-reader user where they are — and it is a per-instance id, so it is also
335
+ * what would give away a palette announcing another palette's row. An empty list
336
+ * announces nothing, and that counts as agreeing.
337
+ */
338
+ isActiveItemAnnounced(): Promise<boolean>;
339
+ /**
340
+ * Open the palette with its global hotkey.
341
+ *
342
+ * Throws when the chord changes nothing, because every reason it would is worth
343
+ * failing on rather than continuing against a closed palette — see
344
+ * {@link pressTrigger} for the list.
345
+ */
346
+ open(): Promise<void>;
347
+ /**
348
+ * Close the palette with Escape, the way a keyboard user does. A closed palette
349
+ * is left alone.
350
+ */
351
+ close(): Promise<void>;
352
+ /** Dismiss the palette by clicking outside the panel, on the backdrop. */
353
+ clickBackdrop(): Promise<void>;
354
+ /**
355
+ * Press the palette's global trigger chord, which TOGGLES it.
356
+ *
357
+ * Two things make this the least local method on the harness, and both are the
358
+ * component's design rather than a shortcut here:
359
+ *
360
+ * - The chord is dispatched at the document, because that is where `trigger` is
361
+ * bound. It reaches every palette on the page, not just this one.
362
+ * - `mod` is Cmd on a Mac and Ctrl everywhere else, and nothing in the DOM says
363
+ * which. The binding compares modifier state EXACTLY, so a chord with both set
364
+ * matches neither: Ctrl is tried first, then Cmd, watching whether this palette
365
+ * moved.
366
+ *
367
+ * Throws when neither did anything. With two palettes bound to the same chord
368
+ * that is exactly what happens to the SECOND one — the first binding to match
369
+ * calls `preventDefault()`, which stops the rest — and the first palette will
370
+ * have toggled on the way. Give the palettes different `trigger` specs, or drive
371
+ * them through the bound `open`.
372
+ */
373
+ pressTrigger(): Promise<void>;
374
+ /**
375
+ * Press an arbitrary chord at the document, where `trigger` is bound — the way
376
+ * to exercise a palette whose `trigger` is not the default `'mod+k'`.
377
+ *
378
+ * The keys go to the `<wr-command-palette>` host and bubble to the document from
379
+ * there. Any element inside the page would do — the listener is the document's,
380
+ * and it fires even while a text field has focus — but the host is the one this
381
+ * harness can always reach, and it takes no focus of its own, so an open palette
382
+ * keeps the caret in its search box.
383
+ */
384
+ pressHotkey(key: string, modifiers?: ModifierKeys): Promise<void>;
385
+ /** Move the highlight down one row. Wraps from the last row to the first. */
386
+ moveToNextItem(): Promise<void>;
387
+ /** Move the highlight up one row. Wraps from the first row to the last. */
388
+ moveToPreviousItem(): Promise<void>;
389
+ /** Move the highlight to the first row — Home. */
390
+ moveToFirstItem(): Promise<void>;
391
+ /** Move the highlight to the last row — End. */
392
+ moveToLastItem(): Promise<void>;
393
+ /**
394
+ * Run the highlighted command — Enter in the search box, the accessible path.
395
+ *
396
+ * Throws when nothing is highlighted, which happens exactly when the query
397
+ * matches nothing: Enter would then be a no-op and the spec would pass having
398
+ * run no command at all. Assert {@link getEmptyText} instead.
399
+ */
400
+ runActiveItem(): Promise<void>;
401
+ /**
402
+ * Run the first command matching the filters, by pointer.
403
+ *
404
+ * The palette must already be open — unlike a select, there is nothing to click
405
+ * to open it, so this cannot do it for you. With `closeOnPick` left at its
406
+ * default the palette closes as the command runs.
407
+ */
408
+ runItem(filters: WrCommandPaletteItemHarnessFilters): Promise<void>;
409
+ /** Put the caret in the search box. The palette does this itself as it opens. */
410
+ focus(): Promise<void>;
411
+ /**
412
+ * Take focus out of the search box.
413
+ *
414
+ * The palette emits nothing on blur — it exists so a spec can prove
415
+ * {@link focus} puts the caret back where the component put it.
416
+ */
417
+ blur(): Promise<void>;
418
+ /**
419
+ * Whether the caret is in the search box.
420
+ *
421
+ * The only focus question worth asking of this component: the rows are never
422
+ * focused, so the input is where focus is meant to stay for as long as the
423
+ * palette is open.
424
+ */
425
+ isSearchInputFocused(): Promise<boolean>;
426
+ /** The palette's dialog wrapper, or `null` while it is closed. */
427
+ private dialog;
428
+ /** The search box, or a failure naming the reason there is none. */
429
+ private searchInput;
430
+ /** This palette's listbox. */
431
+ private listbox;
432
+ /** Fail with the reason when the panel is not rendered. */
433
+ private requireOpen;
434
+ }
435
+
436
+ export { WrCommandPaletteGroupHarness, WrCommandPaletteHarness, WrCommandPaletteItemHarness };
437
+ export type { WrCommandPaletteGroupHarnessFilters, WrCommandPaletteHarnessFilters, WrCommandPaletteItemHarnessFilters };
@@ -93,6 +93,13 @@ declare class WrCommandPalette {
93
93
  protected readonly listboxId: string;
94
94
  /** @internal Build a stable option id for a given flat index. */
95
95
  protected optionId(i: number): string;
96
+ /**
97
+ * A `role="listbox"` may only own `option` and `group` children, so a titled
98
+ * bucket becomes a labelled group and an untitled one drops out of the tree
99
+ * entirely — leaving its options as the listbox's own children rather than as
100
+ * role-less wrappers ARIA has no rule for.
101
+ */
102
+ protected groupTitleId(index: number): string;
96
103
  /** Id of the active option for `aria-activedescendant`. */
97
104
  protected readonly activeOptionId: _angular_core.Signal<string | null>;
98
105
  private readonly hotkeys;
@@ -103,10 +110,17 @@ declare class WrCommandPalette {
103
110
  private bindingHandle;
104
111
  private focusTrap;
105
112
  private previouslyFocused;
106
- /** Flat filtered list — what keyboard navigation walks. */
107
- protected readonly filtered: _angular_core.Signal<readonly WrCommandItem[]>;
108
113
  /** Grouped view — what the template renders. */
109
114
  protected readonly buckets: _angular_core.Signal<readonly Bucket[]>;
115
+ /**
116
+ * Flat list in RENDER order — what keyboard navigation walks, and what every
117
+ * index in this component means. Derived FROM the buckets rather than from the
118
+ * filter: `bucketize` collects each group as it first appears, so a flat
119
+ * source-order list disagrees with the screen the moment two groups interleave.
120
+ * It did, and one ArrowDown moved the highlight two rows while Enter fired the
121
+ * command below the one that looked selected.
122
+ */
123
+ protected readonly filtered: _angular_core.Signal<readonly WrCommandItem[]>;
110
124
  constructor();
111
125
  protected onQueryInput(event: Event): void;
112
126
  protected onKeydown(event: KeyboardEvent): void;
@@ -119,6 +133,15 @@ declare class WrCommandPalette {
119
133
  show(): void;
120
134
  /** Close the palette. */
121
135
  close(): void;
136
+ /**
137
+ * Keep the highlighted option on screen. The body is a fixed-height scroller and
138
+ * the options are not focusable, so nothing moves it on the browser's behalf —
139
+ * arrow keys walked the highlight straight off the bottom and out of sight.
140
+ * Keyboard only: doing it on hover would fight the pointer that caused it.
141
+ * `wr-select` and `wr-tree` keep the same promise through their own
142
+ * `ensureVisible`; theirs is index maths because they are virtualized.
143
+ */
144
+ private revealActive;
122
145
  private commit;
123
146
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCommandPalette, never>;
124
147
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCommandPalette, "wr-command-palette", never, { "paletteLabel": { "alias": "paletteLabel"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "closeOnPick": { "alias": "closeOnPick"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "picked": "picked"; }, never, never, true, never>;
@@ -19,11 +19,29 @@ import * as _angular_core from '@angular/core';
19
19
  * </wr-compare>
20
20
  * ```
21
21
  *
22
+ * Under `dir="rtl"` the horizontal wipe MIRRORS: "before" occupies the inline-start
23
+ * side, which is the right. Before/after is an ordinal pair — the two ends of a
24
+ * progression — and ordinal progressions follow reading order, the same reason a
25
+ * progress bar fills from the right in Arabic. The LTR habit of putting "before" on
26
+ * the left IS reading order, so mirroring preserves that intent rather than breaking
27
+ * it. Nothing is flipped pixel-wise: both layers are the images the consumer passed,
28
+ * unscaled and unmirrored — only the side each is revealed on changes.
29
+ *
30
+ * Pinning the physical arrangement inside an RTL page takes the CDK's `Dir` directive
31
+ * (`[dir]`, from `@angular/cdk/bidi`) on a wrapper, because that is what provides a
32
+ * scoped `Directionality`. A bare `dir="ltr"` attribute does NOT do it: the ambient
33
+ * `Directionality` reads `<html>` / `<body>` once at startup and never looks at the
34
+ * element, and this component's horizontal wipe is painted entirely from TypeScript,
35
+ * so the attribute would change nothing at all while looking like an opt-out.
36
+ *
22
37
  * @see https://ngwr.dev/reference/components/compare
23
38
  */
24
39
  declare class WrCompare {
25
40
  /** Divider position as a percentage (0–100). Two-way bindable. @default 50 */
26
41
  readonly position: _angular_core.ModelSignal<number>;
42
+ /** Accessible name of the divider. Falls back to `compare.label`. */
43
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
44
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
27
45
  /**
28
46
  * Divider direction:
29
47
  * - `'horizontal'` — divider line is vertical, drags left/right.
@@ -39,17 +57,47 @@ declare class WrCompare {
39
57
  readonly minPosition: _angular_core.InputSignalWithTransform<number, unknown>;
40
58
  readonly maxPosition: _angular_core.InputSignalWithTransform<number, unknown>;
41
59
  private readonly host;
60
+ private readonly dir;
61
+ /**
62
+ * Reading direction as a signal, because unlike the splitter this component PAINTS
63
+ * from it: the clip and the divider offset are both direction-derived, and
64
+ * `Directionality.value` is an ordinary read. A `dir` flip at runtime would otherwise
65
+ * leave the wipe on the side the page no longer uses until some unrelated position
66
+ * change happened to recompute it.
67
+ */
68
+ private readonly rtl;
42
69
  private dragging;
70
+ constructor();
43
71
  protected readonly classes: _angular_core.Signal<string>;
44
- /** Clip path applied to the "after" layer so the divider reveals it. */
72
+ /**
73
+ * Clip path applied to the "after" layer so the divider reveals it.
74
+ *
75
+ * `inset()` takes PHYSICAL edges and has no logical form, so the mirroring is done
76
+ * here rather than in CSS: `position` counts from the inline-start edge, and under
77
+ * RTL that edge is the right one, so the after layer is clipped from the right by
78
+ * the same percentage.
79
+ */
45
80
  protected readonly clipPath: _angular_core.Signal<string>;
81
+ /**
82
+ * Physical `left` percentage of the divider. Deliberately physical: it pairs with the
83
+ * `translateX(-50%)` that centres the 2px line on its own position, and the two have
84
+ * to agree on which edge they count from. `position` is logical, so RTL flips it here.
85
+ */
86
+ protected readonly dividerLeft: _angular_core.Signal<number>;
46
87
  protected onPointerDown(event: PointerEvent): void;
47
88
  protected onPointerMove(event: PointerEvent): void;
48
89
  protected onPointerUp(event: PointerEvent): void;
49
90
  protected onKeydown(event: KeyboardEvent): void;
50
91
  private updateFromPointer;
92
+ /**
93
+ * Fraction of the host measured from the INLINE-START edge — the left edge in LTR, the
94
+ * right edge in RTL, which is the side "before" is revealed from. Taken from
95
+ * `rect.left` in both, a drag under `dir="rtl"` read 0 at the visual maximum and moved
96
+ * the divider opposite the pointer.
97
+ */
98
+ private inlineFraction;
51
99
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCompare, never>;
52
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCompare, "wr-compare", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "showHandle": { "alias": "showHandle"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minPosition": { "alias": "minPosition"; "required": false; "isSignal": true; }; "maxPosition": { "alias": "maxPosition"; "required": false; "isSignal": true; }; }, { "position": "positionChange"; }, never, ["[wrCompareBefore]", "[wrCompareAfter]"], true, never>;
100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCompare, "wr-compare", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "showHandle": { "alias": "showHandle"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minPosition": { "alias": "minPosition"; "required": false; "isSignal": true; }; "maxPosition": { "alias": "maxPosition"; "required": false; "isSignal": true; }; }, { "position": "positionChange"; }, never, ["[wrCompareBefore]", "[wrCompareAfter]"], true, never>;
53
101
  }
54
102
 
55
103
  export { WrCompare };