ngwr 10.2.1 → 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 (425) 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 +7 -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 +13 -3
  19. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  20. package/fesm2022/ngwr-affix.mjs +40 -13
  21. package/fesm2022/ngwr-affix.mjs.map +1 -1
  22. package/fesm2022/ngwr-anchor.mjs +18 -6
  23. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  24. package/fesm2022/ngwr-aurora.mjs +2 -2
  25. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  26. package/fesm2022/ngwr-avatar.mjs +31 -7
  27. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  28. package/fesm2022/ngwr-back-top.mjs +6 -2
  29. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  30. package/fesm2022/ngwr-badge.mjs +1 -1
  31. package/fesm2022/ngwr-badge.mjs.map +1 -1
  32. package/fesm2022/ngwr-bar-chart.mjs +30 -9
  33. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  34. package/fesm2022/ngwr-blur-text.mjs +2 -2
  35. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  36. package/fesm2022/ngwr-border-glow.mjs +2 -2
  37. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  38. package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
  39. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  40. package/fesm2022/ngwr-burger.mjs +9 -4
  41. package/fesm2022/ngwr-burger.mjs.map +1 -1
  42. package/fesm2022/ngwr-button-testing.mjs +96 -0
  43. package/fesm2022/ngwr-button-testing.mjs.map +1 -0
  44. package/fesm2022/ngwr-button.mjs +31 -14
  45. package/fesm2022/ngwr-button.mjs.map +1 -1
  46. package/fesm2022/ngwr-calendar-heatmap.mjs +40 -8
  47. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  48. package/fesm2022/ngwr-calendar.mjs +20 -1
  49. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  50. package/fesm2022/ngwr-card.mjs +2 -2
  51. package/fesm2022/ngwr-card.mjs.map +1 -1
  52. package/fesm2022/ngwr-carousel-testing.mjs +377 -0
  53. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
  54. package/fesm2022/ngwr-carousel.mjs +67 -13
  55. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  56. package/fesm2022/ngwr-cascader-testing.mjs +534 -0
  57. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
  58. package/fesm2022/ngwr-cascader.mjs +2 -2
  59. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  60. package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
  61. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
  62. package/fesm2022/ngwr-checkbox.mjs +9 -3
  63. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  64. package/fesm2022/ngwr-circular-text.mjs +2 -2
  65. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  66. package/fesm2022/ngwr-click-spark.mjs +2 -2
  67. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  68. package/fesm2022/ngwr-collapse-testing.mjs +368 -0
  69. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
  70. package/fesm2022/ngwr-color-picker.mjs +134 -14
  71. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  72. package/fesm2022/ngwr-command-palette-testing.mjs +589 -0
  73. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -0
  74. package/fesm2022/ngwr-command-palette.mjs +58 -8
  75. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  76. package/fesm2022/ngwr-compare.mjs +103 -13
  77. package/fesm2022/ngwr-compare.mjs.map +1 -1
  78. package/fesm2022/ngwr-config.mjs +106 -0
  79. package/fesm2022/ngwr-config.mjs.map +1 -0
  80. package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
  81. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
  82. package/fesm2022/ngwr-context-menu.mjs +94 -8
  83. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  84. package/fesm2022/ngwr-cookie.mjs +5 -1
  85. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  86. package/fesm2022/ngwr-counter.mjs +11 -3
  87. package/fesm2022/ngwr-counter.mjs.map +1 -1
  88. package/fesm2022/ngwr-date-adapter-luxon.mjs +52 -4
  89. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
  90. package/fesm2022/ngwr-date-adapter.mjs +54 -8
  91. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  92. package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
  93. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
  94. package/fesm2022/ngwr-date-picker.mjs +73 -3
  95. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  96. package/fesm2022/ngwr-decrypt-text.mjs +27 -9
  97. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  98. package/fesm2022/ngwr-dialog-testing.mjs +89 -0
  99. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
  100. package/fesm2022/ngwr-directives.mjs +36 -12
  101. package/fesm2022/ngwr-directives.mjs.map +1 -1
  102. package/fesm2022/ngwr-donut-chart.mjs +22 -5
  103. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  104. package/fesm2022/ngwr-drag-drop.mjs +2 -2
  105. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  106. package/fesm2022/ngwr-drawer-testing.mjs +250 -0
  107. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
  108. package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
  109. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
  110. package/fesm2022/ngwr-dropdown.mjs +10 -2
  111. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  112. package/fesm2022/ngwr-empty.mjs +24 -7
  113. package/fesm2022/ngwr-empty.mjs.map +1 -1
  114. package/fesm2022/ngwr-event-calendar.mjs +57 -10
  115. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  116. package/fesm2022/ngwr-falling-text.mjs +2 -2
  117. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  118. package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
  119. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
  120. package/fesm2022/ngwr-form-testing.mjs +451 -0
  121. package/fesm2022/ngwr-form-testing.mjs.map +1 -0
  122. package/fesm2022/ngwr-form.mjs +19 -3
  123. package/fesm2022/ngwr-form.mjs.map +1 -1
  124. package/fesm2022/ngwr-fuzzy-text.mjs +9 -2
  125. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  126. package/fesm2022/ngwr-gauge.mjs +19 -5
  127. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  128. package/fesm2022/ngwr-glitch-text.mjs +2 -2
  129. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  130. package/fesm2022/ngwr-gradient-text.mjs +2 -2
  131. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  132. package/fesm2022/ngwr-i18n-en.mjs +50 -0
  133. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  134. package/fesm2022/ngwr-i18n-ru.mjs +48 -0
  135. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  136. package/fesm2022/ngwr-image-cropper.mjs +23 -0
  137. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  138. package/fesm2022/ngwr-input-number-testing.mjs +306 -0
  139. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
  140. package/fesm2022/ngwr-input-number.mjs +35 -3
  141. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  142. package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
  143. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
  144. package/fesm2022/ngwr-input-otp.mjs +36 -5
  145. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  146. package/fesm2022/ngwr-input-testing.mjs +102 -0
  147. package/fesm2022/ngwr-input-testing.mjs.map +1 -0
  148. package/fesm2022/ngwr-input.mjs +47 -10
  149. package/fesm2022/ngwr-input.mjs.map +1 -1
  150. package/fesm2022/ngwr-knob.mjs +44 -8
  151. package/fesm2022/ngwr-knob.mjs.map +1 -1
  152. package/fesm2022/ngwr-layout.mjs +21 -5
  153. package/fesm2022/ngwr-layout.mjs.map +1 -1
  154. package/fesm2022/ngwr-lightbox.mjs +33 -6
  155. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  156. package/fesm2022/ngwr-line-chart.mjs +17 -4
  157. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  158. package/fesm2022/ngwr-list.mjs +2 -2
  159. package/fesm2022/ngwr-list.mjs.map +1 -1
  160. package/fesm2022/ngwr-loading-bar.mjs +2 -2
  161. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  162. package/fesm2022/ngwr-markdown-testing.mjs +516 -0
  163. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
  164. package/fesm2022/ngwr-markdown.mjs +1492 -0
  165. package/fesm2022/ngwr-markdown.mjs.map +1 -0
  166. package/fesm2022/ngwr-marquee.mjs +17 -6
  167. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  168. package/fesm2022/ngwr-mention-testing.mjs +513 -0
  169. package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
  170. package/fesm2022/ngwr-mention.mjs +10 -1
  171. package/fesm2022/ngwr-mention.mjs.map +1 -1
  172. package/fesm2022/ngwr-meta.mjs +22 -7
  173. package/fesm2022/ngwr-meta.mjs.map +1 -1
  174. package/fesm2022/ngwr-meter-group.mjs +19 -5
  175. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  176. package/fesm2022/ngwr-overlay.mjs +41 -1
  177. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  178. package/fesm2022/ngwr-pagination-testing.mjs +389 -0
  179. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
  180. package/fesm2022/ngwr-pagination.mjs +14 -2
  181. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  182. package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
  183. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
  184. package/fesm2022/ngwr-popconfirm.mjs +95 -17
  185. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  186. package/fesm2022/ngwr-popover-testing.mjs +316 -0
  187. package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
  188. package/fesm2022/ngwr-popover.mjs +21 -3
  189. package/fesm2022/ngwr-popover.mjs.map +1 -1
  190. package/fesm2022/ngwr-pull-to-refresh.mjs +17 -2
  191. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  192. package/fesm2022/ngwr-qr.mjs +13 -3
  193. package/fesm2022/ngwr-qr.mjs.map +1 -1
  194. package/fesm2022/ngwr-radio-testing.mjs +392 -0
  195. package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
  196. package/fesm2022/ngwr-radio.mjs +10 -3
  197. package/fesm2022/ngwr-radio.mjs.map +1 -1
  198. package/fesm2022/ngwr-rating-testing.mjs +384 -0
  199. package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
  200. package/fesm2022/ngwr-rating.mjs +37 -2
  201. package/fesm2022/ngwr-rating.mjs.map +1 -1
  202. package/fesm2022/ngwr-segmented-testing.mjs +512 -0
  203. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
  204. package/fesm2022/ngwr-select-testing.mjs +268 -0
  205. package/fesm2022/ngwr-select-testing.mjs.map +1 -0
  206. package/fesm2022/ngwr-select.mjs +87 -16
  207. package/fesm2022/ngwr-select.mjs.map +1 -1
  208. package/fesm2022/ngwr-shiny-text.mjs +2 -2
  209. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  210. package/fesm2022/ngwr-sidebar.mjs +65 -12
  211. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  212. package/fesm2022/ngwr-slider-testing.mjs +478 -0
  213. package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
  214. package/fesm2022/ngwr-slider.mjs +57 -13
  215. package/fesm2022/ngwr-slider.mjs.map +1 -1
  216. package/fesm2022/ngwr-sparkline.mjs +26 -6
  217. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  218. package/fesm2022/ngwr-speed-dial.mjs +37 -4
  219. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  220. package/fesm2022/ngwr-spinner.mjs +12 -3
  221. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  222. package/fesm2022/ngwr-splash-cursor.mjs +2 -2
  223. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  224. package/fesm2022/ngwr-split-text.mjs +2 -2
  225. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  226. package/fesm2022/ngwr-splitter.mjs +70 -9
  227. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  228. package/fesm2022/ngwr-spotlight-card.mjs +2 -2
  229. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  230. package/fesm2022/ngwr-star-border.mjs +2 -2
  231. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  232. package/fesm2022/ngwr-statistic.mjs +24 -7
  233. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  234. package/fesm2022/ngwr-stepper-testing.mjs +477 -0
  235. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
  236. package/fesm2022/ngwr-switch-testing.mjs +77 -0
  237. package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
  238. package/fesm2022/ngwr-switch.mjs +9 -3
  239. package/fesm2022/ngwr-switch.mjs.map +1 -1
  240. package/fesm2022/ngwr-table-testing.mjs +580 -0
  241. package/fesm2022/ngwr-table-testing.mjs.map +1 -0
  242. package/fesm2022/ngwr-table.mjs +87 -14
  243. package/fesm2022/ngwr-table.mjs.map +1 -1
  244. package/fesm2022/ngwr-tabs-testing.mjs +617 -0
  245. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
  246. package/fesm2022/ngwr-tabs.mjs +38 -6
  247. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  248. package/fesm2022/ngwr-textarea-testing.mjs +238 -0
  249. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
  250. package/fesm2022/ngwr-textarea.mjs +32 -4
  251. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  252. package/fesm2022/ngwr-tilt-card.mjs +2 -2
  253. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  254. package/fesm2022/ngwr-toast-testing.mjs +101 -0
  255. package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
  256. package/fesm2022/ngwr-toast.mjs +2 -2
  257. package/fesm2022/ngwr-toast.mjs.map +1 -1
  258. package/fesm2022/ngwr-tour.mjs +61 -9
  259. package/fesm2022/ngwr-tour.mjs.map +1 -1
  260. package/fesm2022/ngwr-transfer-testing.mjs +538 -0
  261. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
  262. package/fesm2022/ngwr-transfer.mjs +45 -14
  263. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  264. package/fesm2022/ngwr-tree-testing.mjs +734 -0
  265. package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
  266. package/fesm2022/ngwr-tree.mjs +73 -7
  267. package/fesm2022/ngwr-tree.mjs.map +1 -1
  268. package/fesm2022/ngwr-typewriter.mjs +5 -3
  269. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  270. package/fesm2022/ngwr-version.mjs +1 -1
  271. package/fesm2022/ngwr-version.mjs.map +1 -1
  272. package/fesm2022/ngwr-virtual-scroll.mjs +31 -5
  273. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  274. package/fesm2022/ngwr-waves.mjs +3 -3
  275. package/fesm2022/ngwr-waves.mjs.map +1 -1
  276. package/fesm2022/ngwr-window.mjs +8 -0
  277. package/fesm2022/ngwr-window.mjs.map +1 -1
  278. package/gauge/styles/_index.scss +1 -1
  279. package/glitch-text/styles/_index.scss +4 -0
  280. package/i18n/en.json +48 -0
  281. package/i18n/ru.json +48 -0
  282. package/image-cropper/styles/_index.scss +13 -1
  283. package/input/styles/_index.scss +2 -2
  284. package/input-number/styles/_index.scss +7 -2
  285. package/knob/styles/_index.scss +8 -1
  286. package/layout/styles/_index.scss +3 -3
  287. package/lightbox/styles/_index.scss +10 -2
  288. package/line-chart/styles/_index.scss +6 -0
  289. package/llms-full.txt +151 -4
  290. package/llms.txt +57 -8
  291. package/loading-bar/styles/_index.scss +1 -2
  292. package/markdown/styles/_index.scss +296 -0
  293. package/marquee/styles/_index.scss +12 -0
  294. package/mcp/api.js +512 -0
  295. package/mcp/catalog.js +157 -0
  296. package/mcp/server.js +273 -0
  297. package/mcp/tools.js +366 -0
  298. package/meter-group/styles/_index.scss +1 -1
  299. package/package.json +186 -35
  300. package/pagination/styles/_index.scss +6 -6
  301. package/popover/styles/_index.scss +37 -5
  302. package/rating/styles/_index.scss +10 -0
  303. package/schematics/use/symbol-map.json +2 -0
  304. package/segmented/styles/_index.scss +7 -0
  305. package/select/styles/_index.scss +29 -9
  306. package/sidebar/styles/_index.scss +30 -5
  307. package/slider/styles/_index.scss +15 -0
  308. package/speed-dial/styles/_index.scss +20 -0
  309. package/split-text/styles/_index.scss +13 -0
  310. package/star-border/styles/_index.scss +2 -0
  311. package/stepper/styles/_index.scss +1 -1
  312. package/styles/_grid.scss +4 -4
  313. package/styles.scss +1 -0
  314. package/switch/styles/_index.scss +5 -3
  315. package/table/styles/_index.scss +22 -11
  316. package/tabs/styles/_index.scss +11 -1
  317. package/textarea/styles/_index.scss +5 -0
  318. package/theme/styles/_colors.scss +29 -13
  319. package/theme/styles/_dark.scss +11 -3
  320. package/theme/styles/_mixins.scss +3 -0
  321. package/timeline/styles/_index.scss +2 -2
  322. package/toast/styles/_index.scss +17 -8
  323. package/toolbar/styles/_index.scss +3 -3
  324. package/tour/styles/_index.scss +7 -1
  325. package/tree/styles/_index.scss +5 -3
  326. package/types/ngwr-action-sheet.d.ts +9 -1
  327. package/types/ngwr-affix.d.ts +7 -1
  328. package/types/ngwr-anchor.d.ts +8 -1
  329. package/types/ngwr-avatar.d.ts +13 -3
  330. package/types/ngwr-bar-chart.d.ts +16 -0
  331. package/types/ngwr-burger.d.ts +6 -2
  332. package/types/ngwr-button-testing.d.ts +85 -0
  333. package/types/ngwr-button.d.ts +26 -10
  334. package/types/ngwr-calendar-heatmap.d.ts +16 -2
  335. package/types/ngwr-calendar.d.ts +10 -0
  336. package/types/ngwr-carousel-testing.d.ts +257 -0
  337. package/types/ngwr-carousel.d.ts +20 -4
  338. package/types/ngwr-cascader-testing.d.ts +392 -0
  339. package/types/ngwr-checkbox-testing.d.ts +77 -0
  340. package/types/ngwr-checkbox.d.ts +7 -2
  341. package/types/ngwr-collapse-testing.d.ts +290 -0
  342. package/types/ngwr-color-picker.d.ts +20 -11
  343. package/types/ngwr-command-palette-testing.d.ts +437 -0
  344. package/types/ngwr-command-palette.d.ts +25 -2
  345. package/types/ngwr-compare.d.ts +50 -2
  346. package/types/ngwr-config.d.ts +176 -0
  347. package/types/ngwr-context-menu-testing.d.ts +401 -0
  348. package/types/ngwr-context-menu.d.ts +65 -17
  349. package/types/ngwr-counter.d.ts +6 -1
  350. package/types/ngwr-date-adapter-luxon.d.ts +26 -0
  351. package/types/ngwr-date-picker-testing.d.ts +518 -0
  352. package/types/ngwr-date-picker.d.ts +4 -0
  353. package/types/ngwr-dialog-testing.d.ts +79 -0
  354. package/types/ngwr-directives.d.ts +10 -1
  355. package/types/ngwr-donut-chart.d.ts +8 -1
  356. package/types/ngwr-drawer-testing.d.ts +196 -0
  357. package/types/ngwr-dropdown-testing.d.ts +202 -0
  358. package/types/ngwr-dropdown.d.ts +7 -1
  359. package/types/ngwr-empty.d.ts +19 -4
  360. package/types/ngwr-event-calendar.d.ts +26 -1
  361. package/types/ngwr-file-upload-testing.d.ts +194 -0
  362. package/types/ngwr-form-testing.d.ts +379 -0
  363. package/types/ngwr-form.d.ts +17 -0
  364. package/types/ngwr-gauge.d.ts +13 -1
  365. package/types/ngwr-image-cropper.d.ts +10 -0
  366. package/types/ngwr-input-number-testing.d.ts +226 -0
  367. package/types/ngwr-input-number.d.ts +29 -1
  368. package/types/ngwr-input-otp-testing.d.ts +299 -0
  369. package/types/ngwr-input-otp.d.ts +23 -2
  370. package/types/ngwr-input-testing.d.ts +84 -0
  371. package/types/ngwr-input.d.ts +20 -6
  372. package/types/ngwr-knob.d.ts +18 -0
  373. package/types/ngwr-layout.d.ts +1 -0
  374. package/types/ngwr-lightbox.d.ts +17 -3
  375. package/types/ngwr-line-chart.d.ts +9 -2
  376. package/types/ngwr-markdown-testing.d.ts +462 -0
  377. package/types/ngwr-markdown.d.ts +534 -0
  378. package/types/ngwr-marquee.d.ts +12 -2
  379. package/types/ngwr-mention-testing.d.ts +359 -0
  380. package/types/ngwr-meta.d.ts +4 -2
  381. package/types/ngwr-meter-group.d.ts +11 -1
  382. package/types/ngwr-overlay.d.ts +33 -2
  383. package/types/ngwr-pagination-testing.d.ts +291 -0
  384. package/types/ngwr-pagination.d.ts +1 -0
  385. package/types/ngwr-popconfirm-testing.d.ts +235 -0
  386. package/types/ngwr-popconfirm.d.ts +31 -21
  387. package/types/ngwr-popover-testing.d.ts +221 -0
  388. package/types/ngwr-popover.d.ts +9 -0
  389. package/types/ngwr-pull-to-refresh.d.ts +7 -0
  390. package/types/ngwr-qr.d.ts +9 -1
  391. package/types/ngwr-radio-testing.d.ts +296 -0
  392. package/types/ngwr-radio.d.ts +8 -2
  393. package/types/ngwr-rating-testing.d.ts +291 -0
  394. package/types/ngwr-rating.d.ts +23 -0
  395. package/types/ngwr-segmented-testing.d.ts +401 -0
  396. package/types/ngwr-select-testing.d.ts +175 -0
  397. package/types/ngwr-select.d.ts +45 -4
  398. package/types/ngwr-sidebar.d.ts +17 -2
  399. package/types/ngwr-slider-testing.d.ts +329 -0
  400. package/types/ngwr-slider.d.ts +35 -1
  401. package/types/ngwr-sparkline.d.ts +12 -2
  402. package/types/ngwr-speed-dial.d.ts +17 -18
  403. package/types/ngwr-spinner.d.ts +8 -1
  404. package/types/ngwr-splitter.d.ts +24 -1
  405. package/types/ngwr-statistic.d.ts +12 -2
  406. package/types/ngwr-stepper-testing.d.ts +346 -0
  407. package/types/ngwr-switch-testing.d.ts +66 -0
  408. package/types/ngwr-switch.d.ts +7 -2
  409. package/types/ngwr-table-testing.d.ts +423 -0
  410. package/types/ngwr-table.d.ts +42 -0
  411. package/types/ngwr-tabs-testing.d.ts +470 -0
  412. package/types/ngwr-tabs.d.ts +9 -0
  413. package/types/ngwr-textarea-testing.d.ts +184 -0
  414. package/types/ngwr-textarea.d.ts +7 -2
  415. package/types/ngwr-toast-testing.d.ts +80 -0
  416. package/types/ngwr-tour.d.ts +27 -0
  417. package/types/ngwr-transfer-testing.d.ts +444 -0
  418. package/types/ngwr-transfer.d.ts +16 -1
  419. package/types/ngwr-tree-testing.d.ts +501 -0
  420. package/types/ngwr-tree.d.ts +33 -0
  421. package/types/ngwr-version.d.ts +1 -1
  422. package/types/ngwr-virtual-scroll.d.ts +13 -1
  423. package/typewriter/styles/_index.scss +1 -1
  424. package/typography/styles/_index.scss +1 -1
  425. package/window/styles/_index.scss +32 -9
@@ -0,0 +1,518 @@
1
+ import { BaseHarnessFilters, ComponentHarness, HarnessPredicate, TestElement, HarnessLoader } 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-date-picker>` a harness query matches. */
11
+ interface WrDatePickerHarnessFilters extends BaseHarnessFilters {
12
+ /**
13
+ * Match the text the field is showing — the formatted value, or `''` when the
14
+ * picker is empty and the placeholder is up. A string is an exact match, a
15
+ * RegExp is tested.
16
+ */
17
+ readonly text?: string | RegExp;
18
+ /** Match the field's placeholder — a string is an exact match, a RegExp is tested. */
19
+ readonly placeholder?: string | RegExp;
20
+ /** Match one mode only. */
21
+ readonly mode?: 'date' | 'time' | 'datetime';
22
+ /** Match only enabled (`false`) or only disabled (`true`) pickers. */
23
+ readonly disabled?: boolean;
24
+ /** Match only pickers whose popup is up (`true`) or down (`false`). */
25
+ readonly open?: boolean;
26
+ }
27
+ /** Narrows which `<wr-date-range-picker>` a harness query matches. */
28
+ interface WrDateRangePickerHarnessFilters extends BaseHarnessFilters {
29
+ /** Match the text in the START field. A string is an exact match, a RegExp is tested. */
30
+ readonly startText?: string | RegExp;
31
+ /** Match the text in the END field. A string is an exact match, a RegExp is tested. */
32
+ readonly endText?: string | RegExp;
33
+ /** Match one mode only. The range picker has no `time` mode. */
34
+ readonly mode?: 'date' | 'datetime';
35
+ /** Match only enabled (`false`) or only disabled (`true`) pickers. */
36
+ readonly disabled?: boolean;
37
+ /** Match only pickers whose popup is up (`true`) or down (`false`). */
38
+ readonly open?: boolean;
39
+ }
40
+ /** Narrows which day cell inside a picker's calendar a harness query matches. */
41
+ interface WrDatePickerDayHarnessFilters extends BaseHarnessFilters {
42
+ /**
43
+ * Match the cell's day number as rendered (`'1'` … `'31'`). A string is an
44
+ * exact match, a RegExp is tested — note the grid spills into the neighbouring
45
+ * months, so a number appears twice on most months.
46
+ */
47
+ readonly text?: string | RegExp;
48
+ /** Match only selected (`true`) or only unselected (`false`) cells. */
49
+ readonly selected?: boolean;
50
+ /** Match only enabled (`false`) or only disabled (`true`) cells. */
51
+ readonly disabled?: boolean;
52
+ /**
53
+ * Match cells strictly BETWEEN the two ends of a picked range — the ends
54
+ * themselves are `selected`, not `inRange`. Always `false` for
55
+ * `<wr-date-picker>`, whose calendar has a single value.
56
+ */
57
+ readonly inRange?: boolean;
58
+ }
59
+
60
+ /**
61
+ * @license
62
+ *
63
+ * Use of this source code is governed by an MIT-style license that can be
64
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
65
+ */
66
+ /**
67
+ * Which boxes of a time stepper to type into. Omitted fields are left alone, so
68
+ * `{ minutes: 45 }` changes the minutes and nothing else.
69
+ *
70
+ * Hours are given the way the stepper SHOWS them: 0-23 for a 24-hour panel,
71
+ * 1-12 for a 12-hour one (where AM/PM stays where it was — flip it with
72
+ * `toggleMeridiem()`).
73
+ */
74
+ interface WrDatePickerTimeFields {
75
+ readonly hours?: number;
76
+ readonly minutes?: number;
77
+ readonly seconds?: number;
78
+ }
79
+
80
+ /**
81
+ * @license
82
+ *
83
+ * Use of this source code is governed by an MIT-style license that can be
84
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
85
+ */
86
+
87
+ /**
88
+ * Test harness for one day cell of the calendar inside a date-picker popup.
89
+ *
90
+ * Reached through `WrDatePickerHarness.getDay()` / `getDays()` (or the range
91
+ * picker's), which scope it to ONE picker's panel — the cells are in the overlay
92
+ * container, so a bare query would answer with whichever picker opened first.
93
+ *
94
+ * State is read the way a screen reader reads it (`role`, `aria-selected`,
95
+ * `aria-disabled`) with the `.wr-calendar__day--*` modifiers filling in what
96
+ * ARIA has no word for: today, the spill days of the neighbouring months, and
97
+ * the interior of a picked range.
98
+ *
99
+ * @see https://ngwr.dev/guides/testing
100
+ */
101
+ declare class WrDatePickerDayHarness extends ComponentHarness {
102
+ static hostSelector: string;
103
+ /** Build a predicate that narrows the query. */
104
+ static with(options?: WrDatePickerDayHarnessFilters): HarnessPredicate<WrDatePickerDayHarness>;
105
+ /** The day number as rendered. */
106
+ getText(): Promise<string>;
107
+ /** The day number as a number, for mapping a list of cells to dates. */
108
+ getDayOfMonth(): Promise<number>;
109
+ /** `'gridcell'` — the cell is a button, and the grid semantics are what a spec should assert. */
110
+ getRole(): Promise<string | null>;
111
+ /** Whether this day is (one end of) the current selection. */
112
+ isSelected(): Promise<boolean>;
113
+ /**
114
+ * Whether the day refuses selection — `min` / `max` or `dateFilter` ruled it
115
+ * out, or the whole calendar is disabled.
116
+ */
117
+ isDisabled(): Promise<boolean>;
118
+ /** Whether the cell is today's date. */
119
+ isToday(): Promise<boolean>;
120
+ /**
121
+ * Whether the cell belongs to a neighbouring month. The grid is always 6x7, so
122
+ * every month is padded with days that are selectable but not "in" the month —
123
+ * which is why {@link WrDatePickerHarness.getDay} skips them.
124
+ */
125
+ isOutOfMonth(): Promise<boolean>;
126
+ /** Whether the day lies strictly between the two ends of a picked range. */
127
+ isInRange(): Promise<boolean>;
128
+ /**
129
+ * Whether this is the roving cell — the grid's single tab stop, and where the
130
+ * arrow keys move from.
131
+ *
132
+ * At most ONE cell answers `true`, and it is not always one: the calendar's
133
+ * roving date does not follow `next()` / `previous()`, so a grid navigated away
134
+ * from that month has no active cell (and, deliberately or not, no tab stop)
135
+ * until a cell is clicked or the arrows move it.
136
+ */
137
+ isActive(): Promise<boolean>;
138
+ /** Click the cell. A disabled cell swallows the click — assert, do not assume. */
139
+ click(): Promise<void>;
140
+ }
141
+
142
+ /**
143
+ * @license
144
+ *
145
+ * Use of this source code is governed by an MIT-style license that can be
146
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
147
+ */
148
+
149
+ /** Column order inside the stepper, which is also the order the boxes render in. */
150
+ declare const UNITS: readonly ["hours", "minutes", "seconds"];
151
+ /** One unit of a time stepper. */
152
+ type Unit = (typeof UNITS)[number];
153
+ /**
154
+ * The `<wr-time-picker>` stepper inside a date-picker popup.
155
+ *
156
+ * Deliberately NOT exported from the entry point: the component is `@internal`
157
+ * (`<wr-date-picker mode="time">` is how a consumer gets one), so the picker
158
+ * harnesses re-publish what it can do — `getTime()`, `setTime()`, `stepTime()`,
159
+ * `toggleMeridiem()` — rather than handing out this class. It exists so the
160
+ * range picker, which renders one stepper PER END, can address them
161
+ * independently instead of by CSS nth-of-type gymnastics.
162
+ *
163
+ * Units are addressed by position, not by the boxes' `aria-label`: every string
164
+ * in this panel is still hard-coded English (the box labels, the steppers'
165
+ * "Increment hours", the AM/PM text), so keying on them would make this harness
166
+ * the thing that breaks when they are moved into the i18n catalog. Column order
167
+ * is the layout contract.
168
+ *
169
+ * @internal
170
+ */
171
+ declare class WrTimePanelHarness extends ComponentHarness {
172
+ static hostSelector: string;
173
+ /** The stepper's value as `HH:MM`, plus `:SS` and ` AM`/` PM` when those columns exist. */
174
+ getTimeText(): Promise<string>;
175
+ /** `'AM'` / `'PM'`, or `null` when the stepper is in 24-hour mode. */
176
+ getMeridiem(): Promise<string | null>;
177
+ /**
178
+ * Type into the boxes named by `fields`, leaving the rest alone.
179
+ *
180
+ * Each box is cleared and retyped rather than assigned: the panel reads an
181
+ * emptied box as someone mid-retype and deliberately commits nothing for it, so
182
+ * a harness that only cleared would look like a no-op.
183
+ */
184
+ setFields(fields: WrDatePickerTimeFields): Promise<void>;
185
+ /** Click a unit's ▲ / ▼ button once. Minutes and seconds move by the picker's `step`. */
186
+ step(unit: Unit, direction: 1 | -1): Promise<void>;
187
+ /** Flip AM ↔ PM. Throws on a 24-hour stepper, which has no such control. */
188
+ toggleMeridiem(): Promise<void>;
189
+ /** A unit's rendered (zero-padded) value. */
190
+ private getValue;
191
+ /** Same, but `null` when the column is not rendered at all. */
192
+ private getOptionalValue;
193
+ private box;
194
+ /** The typable boxes, in column order — the AM/PM column is a `<span>`, not one of these. */
195
+ private boxes;
196
+ }
197
+
198
+ /**
199
+ * @license
200
+ *
201
+ * Use of this source code is governed by an MIT-style license that can be
202
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
203
+ */
204
+
205
+ /**
206
+ * Everything `<wr-date-picker>` and `<wr-date-range-picker>` do identically: the
207
+ * trigger button, the popup it owns, and the `<wr-calendar>` inside it. Both
208
+ * components render the SAME trigger element (`.wr-date-picker__trigger` — the
209
+ * range picker reuses the class rather than minting its own) and both publish
210
+ * their popup's id through the trigger's `aria-controls`, so the scoping story is
211
+ * shared too.
212
+ *
213
+ * Not exported from the entry point — a consumer works with one of the two
214
+ * concrete harnesses.
215
+ *
216
+ * @internal
217
+ */
218
+ declare abstract class WrDatePickerHarnessBase extends ComponentHarness {
219
+ /** Concrete class name, so errors read like the harness the caller reached for. */
220
+ protected abstract readonly harnessName: string;
221
+ /**
222
+ * Whether the popup is up.
223
+ *
224
+ * Read from the trigger's `aria-expanded` rather than from a host class: unlike
225
+ * `wr-select`, neither picker carries an `--open` modifier, and the ARIA state
226
+ * is the thing a consumer's users actually get told.
227
+ */
228
+ isOpen(): Promise<boolean>;
229
+ /** Open the popup from the trigger. An already-open picker is left alone. */
230
+ open(): Promise<void>;
231
+ /**
232
+ * Close the popup by clicking the trigger again. A closed picker is left alone.
233
+ *
234
+ * Deliberately not Escape: the CDK dispatches a keydown to the TOP-MOST overlay,
235
+ * so with two pickers open this would close whichever opened last rather than
236
+ * this one. The trigger only ever toggles its own popup.
237
+ */
238
+ close(): Promise<void>;
239
+ /** The popup's role — `'dialog'`, which is what the trigger's `aria-haspopup` promises. */
240
+ getPanelRole(): Promise<string | null>;
241
+ /**
242
+ * The popup's accessible name. Defaults to a catalog string chosen by `mode`
243
+ * ("Choose date", "Choose time", …) and is overridden by `[panelAriaLabel]`.
244
+ */
245
+ getPanelAriaLabel(): Promise<string | null>;
246
+ /**
247
+ * Which of the calendar's three views is showing. The header label zooms out
248
+ * (day → month → year); picking a month or a year zooms back in.
249
+ */
250
+ getView(): Promise<'day' | 'month' | 'year'>;
251
+ /**
252
+ * The calendar's header: `'January 2025'` in the day view, `'2025'` in the month
253
+ * view, `'2016 – 2027'` in the year view.
254
+ */
255
+ getPanelHeader(): Promise<string>;
256
+ /** The weekday strip, in display order — `role="columnheader"` cells of the grid's first row. */
257
+ getWeekdayLabels(): Promise<string[]>;
258
+ /**
259
+ * Step the calendar forwards. What one step MEANS follows the active view, as
260
+ * the button's own `aria-label` says: a month in the day view, a year in the
261
+ * month view, twelve years in the year view.
262
+ */
263
+ next(): Promise<void>;
264
+ /** Step the calendar backwards — see {@link next} for what one step covers. */
265
+ previous(): Promise<void>;
266
+ /**
267
+ * Zoom out one level by clicking the header, the way a user does: day → month,
268
+ * month → year. Throws at the year view, where the header is inert.
269
+ */
270
+ zoomOut(): Promise<void>;
271
+ /** Pick a month in the month view, by 0-based index or by the label the calendar renders. */
272
+ selectMonth(month: number | string): Promise<void>;
273
+ /** Pick a year in the year view. Only the twelve on show can be picked. */
274
+ selectYear(year: number): Promise<void>;
275
+ /**
276
+ * The day cells of the calendar in this picker's popup, in DOM order — 42 of
277
+ * them, since the grid is always six weeks and pads into the neighbouring
278
+ * months.
279
+ */
280
+ getDays(filters?: WrDatePickerDayHarnessFilters): Promise<WrDatePickerDayHarness[]>;
281
+ /**
282
+ * One day of the month on show. The padding days of the neighbouring months are
283
+ * skipped, so `getDay(1)` is the 1st of THIS month and never the 1st of the next.
284
+ */
285
+ getDay(dayOfMonth: number): Promise<WrDatePickerDayHarness>;
286
+ /** Click a day of the month on show. */
287
+ selectDay(dayOfMonth: number): Promise<void>;
288
+ /** The trigger button. Both components render it with the same class. */
289
+ protected trigger(): Promise<TestElement>;
290
+ /**
291
+ * The id of THIS picker's popup.
292
+ *
293
+ * The trigger publishes it as `aria-controls` only while the popup is up, which
294
+ * makes one lookup answer both questions — is it open, and which of the panes
295
+ * in the shared overlay container is ours.
296
+ */
297
+ protected panelId(): Promise<string>;
298
+ /** A loader scoped to THIS picker's popup, so a second open picker cannot answer for it. */
299
+ protected panelLoader(): Promise<HarnessLoader>;
300
+ /** One element inside THIS picker's popup, or `null`. */
301
+ protected inPanel(selector: string): Promise<TestElement | null>;
302
+ /** Every matching element inside THIS picker's popup, in DOM order. */
303
+ protected allInPanel(selector: string): Promise<TestElement[]>;
304
+ /**
305
+ * The time steppers in this popup, in DOM order — none in `date` mode, one for
306
+ * `time` / `datetime`, and two (start then end) for a datetime range.
307
+ */
308
+ protected timePanels(): Promise<WrTimePanelHarness[]>;
309
+ private navigate;
310
+ /** Fail early on the day-cell methods rather than answering with an empty list. */
311
+ private requireGrid;
312
+ private panel;
313
+ private noCalendar;
314
+ }
315
+
316
+ /**
317
+ * @license
318
+ *
319
+ * Use of this source code is governed by an MIT-style license that can be
320
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
321
+ */
322
+
323
+ /**
324
+ * Test harness for `<wr-date-picker>` — the `date`, `time` and `datetime` modes
325
+ * of the one component.
326
+ *
327
+ * The popup is NOT inside the picker: it is a pane in the overlay container, a
328
+ * sibling of the whole app. Everything inside it is therefore reached through the
329
+ * document root, scoped by the id the trigger publishes as `aria-controls` —
330
+ * which is what keeps two pickers on one page from reading each other's calendar.
331
+ *
332
+ * The value lives in a text field, so there are two ways in and the harness
333
+ * offers both: {@link setValueText} types a date, {@link selectDay} picks one out
334
+ * of the grid. There is deliberately no clear BUTTON on this component — an
335
+ * emptied field is what clears the value, and that is what {@link clear} does.
336
+ *
337
+ * @example
338
+ * ```ts
339
+ * const picker = await loader.getHarness(WrDatePickerHarness);
340
+ *
341
+ * await picker.open();
342
+ * expect(await picker.getPanelHeader()).toBe('January 2025');
343
+ * await picker.selectDay(14);
344
+ *
345
+ * expect(await picker.getValueText()).toBe('14.01.2025');
346
+ * expect(await (await picker.getDay(14)).isSelected()).toBe(true);
347
+ * ```
348
+ *
349
+ * @see https://ngwr.dev/guides/testing
350
+ */
351
+ declare class WrDatePickerHarness extends WrDatePickerHarnessBase {
352
+ static hostSelector: string;
353
+ /** Build a predicate that narrows the query. */
354
+ static with(options?: WrDatePickerHarnessFilters): HarnessPredicate<WrDatePickerHarness>;
355
+ protected readonly harnessName = "WrDatePickerHarness";
356
+ /** Which mode the picker is in, read from the `wr-date-picker--*` modifier. */
357
+ getMode(): Promise<'date' | 'time' | 'datetime'>;
358
+ /**
359
+ * What the field is showing: the value in the picker's `format`, or `''` when it
360
+ * is empty and the placeholder is up.
361
+ */
362
+ getValueText(): Promise<string>;
363
+ /** The field's placeholder. */
364
+ getPlaceholder(): Promise<string>;
365
+ /**
366
+ * Type a date into the field, replacing whatever is there.
367
+ *
368
+ * The field is cleared first, so the value passes through `null` on the way —
369
+ * exactly as it does for a user who selects all and types over it. The picker
370
+ * parses on every keystroke and commits only when the text parses in full, so a
371
+ * partial or out-of-bounds entry leaves the model on its last good value.
372
+ */
373
+ setValueText(text: string): Promise<void>;
374
+ /**
375
+ * Empty the field, which clears the value.
376
+ *
377
+ * There is no clear button to click: unlike `wr-select`, this component ships no
378
+ * `×` affordance, and an empty field is the documented way to get back to `null`.
379
+ */
380
+ clear(): Promise<void>;
381
+ /** Whether the picker refuses interaction. */
382
+ isDisabled(): Promise<boolean>;
383
+ /**
384
+ * Whether the field refuses typing. A read-only picker still OPENS its popup —
385
+ * documented behaviour, and the one place it parts company with the range picker.
386
+ */
387
+ isReadonly(): Promise<boolean>;
388
+ /** Move focus to the field. */
389
+ focus(): Promise<void>;
390
+ /**
391
+ * Blur the field, which is what reformats a value to canonical and emits `touch`
392
+ * so a bound `[formField]` can mark itself touched.
393
+ */
394
+ blur(): Promise<void>;
395
+ /** Whether the field currently has focus. */
396
+ isFocused(): Promise<boolean>;
397
+ /**
398
+ * The open time stepper's value as `HH:MM`, plus `:SS` when `showSeconds` is on
399
+ * and ` AM`/` PM` in 12-hour mode.
400
+ */
401
+ getTime(): Promise<string>;
402
+ /** Type into the open time stepper's boxes. Omitted fields are left alone. */
403
+ setTime(fields: WrDatePickerTimeFields): Promise<void>;
404
+ /** Click one of the stepper's ▲ / ▼ buttons. Minutes and seconds move by `step`. */
405
+ stepTime(unit: 'hours' | 'minutes' | 'seconds', direction: 1 | -1): Promise<void>;
406
+ /** Flip the stepper between AM and PM. Throws in 24-hour mode, which has no such control. */
407
+ toggleMeridiem(): Promise<void>;
408
+ private field;
409
+ /** The one stepper in the popup — `panelId()` has already refused a closed picker. */
410
+ private timePanel;
411
+ }
412
+
413
+ /**
414
+ * @license
415
+ *
416
+ * Use of this source code is governed by an MIT-style license that can be
417
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
418
+ */
419
+
420
+ /** Which end of the range a call applies to. */
421
+ type End = 'start' | 'end';
422
+ /**
423
+ * Test harness for `<wr-date-range-picker>` — two text fields over one range
424
+ * calendar.
425
+ *
426
+ * A separate harness rather than a mode of {@link WrDatePickerHarness}, because
427
+ * the DOM a spec has to reach is genuinely different: two fields with a separator
428
+ * between them, and in `datetime` mode two time steppers instead of one. Every
429
+ * call that could mean either field takes an explicit `'start'` / `'end'` — the
430
+ * component's own bugs were nearly all "which end did that belong to", and a
431
+ * harness that guessed would reproduce them.
432
+ *
433
+ * The popup, the calendar and the scoping work exactly as they do for the single
434
+ * picker: a pane in the overlay container, addressed by the id the trigger
435
+ * publishes as `aria-controls`.
436
+ *
437
+ * @example
438
+ * ```ts
439
+ * const period = await loader.getHarness(WrDateRangePickerHarness);
440
+ *
441
+ * await period.open();
442
+ * await period.selectDay(14);
443
+ * await period.selectDay(20);
444
+ *
445
+ * expect([await period.getStartText(), await period.getEndText()]).toEqual(['14.01.2025', '20.01.2025']);
446
+ * ```
447
+ *
448
+ * @see https://ngwr.dev/guides/testing
449
+ */
450
+ declare class WrDateRangePickerHarness extends WrDatePickerHarnessBase {
451
+ static hostSelector: string;
452
+ /** Build a predicate that narrows the query. */
453
+ static with(options?: WrDateRangePickerHarnessFilters): HarnessPredicate<WrDateRangePickerHarness>;
454
+ protected readonly harnessName = "WrDateRangePickerHarness";
455
+ /** Which mode the picker is in, read from the `wr-date-range-picker--*` modifier. */
456
+ getMode(): Promise<'date' | 'datetime'>;
457
+ /** What the start field is showing — `''` while that end is unpicked. */
458
+ getStartText(): Promise<string>;
459
+ /** What the end field is showing — `''` while that end is unpicked. */
460
+ getEndText(): Promise<string>;
461
+ /** The glyph rendered between the two fields (`[separator]`, `'–'` by default). */
462
+ getSeparator(): Promise<string>;
463
+ /** The placeholder of one field. */
464
+ getPlaceholder(end: End): Promise<string>;
465
+ /**
466
+ * Type a date into the start field, replacing whatever is there.
467
+ *
468
+ * Ends typed out of order are NOT swapped here — the component settles the
469
+ * ordering when the interaction is over, so call {@link blur} (or close the
470
+ * popup) to see a normalised range.
471
+ */
472
+ setStartText(text: string): Promise<void>;
473
+ /** Type a date into the end field — see {@link setStartText} on ordering. */
474
+ setEndText(text: string): Promise<void>;
475
+ /** Empty both fields, which clears the range. Neither end has a clear button. */
476
+ clear(): Promise<void>;
477
+ /** Whether the picker refuses interaction. */
478
+ isDisabled(): Promise<boolean>;
479
+ /**
480
+ * Whether the fields refuse typing. Stricter than `<wr-date-picker>`: a
481
+ * read-only range picker also refuses to open, since two fields over one
482
+ * calendar leaves no reading of "untypeable" that still lets the grid rewrite
483
+ * both ends.
484
+ */
485
+ isReadonly(): Promise<boolean>;
486
+ /** Move focus to one field. */
487
+ focus(end: End): Promise<void>;
488
+ /**
489
+ * Blur one field. This is the moment an out-of-order range is put back in
490
+ * order, and — when focus leaves the control rather than hopping to the other
491
+ * end — the moment `touch` is emitted.
492
+ */
493
+ blur(end: End): Promise<void>;
494
+ /** Whether one field currently has focus. */
495
+ isFocused(end: End): Promise<boolean>;
496
+ /**
497
+ * One end's time stepper as `HH:MM`, plus `:SS` when `showSeconds` is on and
498
+ * ` AM`/` PM` in 12-hour mode. `datetime` mode only.
499
+ */
500
+ getTime(end: End): Promise<string>;
501
+ /** Type into one end's time stepper. Omitted fields are left alone. */
502
+ setTime(end: End, fields: WrDatePickerTimeFields): Promise<void>;
503
+ /** Click one of an end's ▲ / ▼ buttons. Minutes and seconds move by `step`. */
504
+ stepTime(end: End, unit: 'hours' | 'minutes' | 'seconds', direction: 1 | -1): Promise<void>;
505
+ /** Flip one end between AM and PM. Throws in 24-hour mode, which has no such control. */
506
+ toggleMeridiem(end: End): Promise<void>;
507
+ private type;
508
+ /** The two fields are addressed by position, which is the order they render in. */
509
+ private field;
510
+ /**
511
+ * One end's stepper. Both are mounted together in `datetime` mode, start first —
512
+ * the group labels are localized, so position is the addressable thing.
513
+ */
514
+ private timePanel;
515
+ }
516
+
517
+ export { WrDatePickerDayHarness, WrDatePickerHarness, WrDateRangePickerHarness };
518
+ export type { WrDatePickerDayHarnessFilters, WrDatePickerHarnessFilters, WrDatePickerTimeFields, WrDateRangePickerHarnessFilters };
@@ -135,6 +135,10 @@ declare class WrDatePicker implements FormValueControl<Date | null> {
135
135
  /** Live calendar ref while the date popover is open — lets the panel track
136
136
  * the typed value in real time (not just on reopen). */
137
137
  private readonly dateRef;
138
+ private readonly timeRef;
139
+ private readonly dateTimeRef;
140
+ /** The last value an open panel handed us, so the live push never echoes it back. */
141
+ private lastFromPanel;
138
142
  /** Last value we pushed into the model ourselves — lets the sync effect
139
143
  * skip the echo of our own edits (so a live keystroke's raw text is never
140
144
  * reformatted mid-type). */
@@ -0,0 +1,79 @@
1
+ import { BaseHarnessFilters, ContentContainerComponentHarness, HarnessPredicate } 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 open dialog a harness query matches. */
11
+ interface WrDialogHarnessFilters extends BaseHarnessFilters {
12
+ /**
13
+ * Match the dialog's `[wrDialogTitle]` text — a string is an exact match, a
14
+ * RegExp is tested. A dialog with no title never matches.
15
+ */
16
+ readonly title?: string | RegExp;
17
+ }
18
+
19
+ /**
20
+ * @license
21
+ *
22
+ * Use of this source code is governed by an MIT-style license that can be
23
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
24
+ */
25
+
26
+ /**
27
+ * Test harness for a dialog opened with `WrDialog.open()`.
28
+ *
29
+ * A dialog is never inside the fixture — `WrDialog` attaches it to the overlay
30
+ * container — so load this from `TestbedHarnessEnvironment.documentRootLoader()`
31
+ * rather than from `loader()`. The harness is a CONTENT CONTAINER, which is what
32
+ * makes the interesting assertions possible: the buttons and fields it holds are
33
+ * the consumer's own components, so `dialog.getHarness(WrButtonHarness…)` reads
34
+ * them without the spec ever touching the overlay.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * const rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture);
39
+ * const dialog = await rootLoader.getHarness(WrDialogHarness);
40
+ *
41
+ * expect(await dialog.getTitleText()).toBe('Delete this item?');
42
+ * await (await dialog.getHarness(WrButtonHarness.with({ text: 'Delete' }))).click();
43
+ * ```
44
+ *
45
+ * @see https://ngwr.dev/guides/testing
46
+ */
47
+ declare class WrDialogHarness extends ContentContainerComponentHarness {
48
+ /** The overlay panel `WrDialog` creates. */
49
+ static hostSelector: string;
50
+ /** Build a predicate that narrows the query — useful when two dialogs are stacked. */
51
+ static with(options?: WrDialogHarnessFilters): HarnessPredicate<WrDialogHarness>;
52
+ /** The `[wrDialogTitle]` text, or `null` when the dialog has no title. */
53
+ getTitleText(): Promise<string | null>;
54
+ /** The `[wrDialogContent]` text, or `null` when the dialog projects no content region. */
55
+ getContentText(): Promise<string | null>;
56
+ /**
57
+ * The role and modality the dialog announces.
58
+ *
59
+ * Worth asserting rather than assuming: `WrDialog` sets these on the OVERLAY
60
+ * element, not on the component it renders, so a consumer looking for them on
61
+ * their own host would not find them.
62
+ */
63
+ getRole(): Promise<string | null>;
64
+ /** Whether the dialog is marked `aria-modal`. */
65
+ isModal(): Promise<boolean>;
66
+ /** Whether the built-in dismiss button is present (`closable`, the default). */
67
+ isClosable(): Promise<boolean>;
68
+ /** The dismiss button's accessible name — the string a screen reader reads out. */
69
+ getCloseLabel(): Promise<string | null>;
70
+ /** Click the built-in dismiss button. Throws when the dialog was opened `closable: false`. */
71
+ close(): Promise<void>;
72
+ /** Press Escape. A dialog opened `closeOnEscape: false` ignores it — assert, do not assume. */
73
+ sendEscape(): Promise<void>;
74
+ /** Whether focus is currently somewhere inside the dialog, where the trap should keep it. */
75
+ isFocusTrapped(): Promise<boolean>;
76
+ }
77
+
78
+ export { WrDialogHarness };
79
+ export type { WrDialogHarnessFilters };
@@ -85,7 +85,16 @@ declare class WrCopyToClipboard {
85
85
  private readonly doc;
86
86
  /** @internal */
87
87
  protected onClick(): Promise<void>;
88
- /** Legacy clipboard write — hidden textarea + execCommand('copy'). */
88
+ /**
89
+ * Legacy clipboard write — hidden textarea + `execCommand('copy')`.
90
+ *
91
+ * Two things this has to get right beyond writing the text. `execCommand`
92
+ * REPORTS refusal rather than throwing it: a document without focus hands back
93
+ * `false` and copies nothing, so ignoring the return value shows a "Copied!"
94
+ * toast over an unchanged clipboard. And selecting the textarea moves focus
95
+ * into it, so removing the node afterwards drops focus on `<body>` — the user's
96
+ * next Tab restarts from the top of the page, on every copy.
97
+ */
89
98
  private fallback;
90
99
  static ɵfac: i0.ɵɵFactoryDeclaration<WrCopyToClipboard, never>;
91
100
  static ɵdir: i0.ɵɵDirectiveDeclaration<WrCopyToClipboard, "[wrCopyToClipboard]", never, { "wrCopyToClipboard": { "alias": "wrCopyToClipboard"; "required": true; "isSignal": true; }; }, { "copied": "copied"; "copyFailed": "copyFailed"; }, never, never, true, never>;
@@ -22,6 +22,13 @@ interface WrDonutSegment {
22
22
  */
23
23
  declare class WrDonutChart {
24
24
  readonly segments: _angular_core.InputSignal<readonly WrDonutSegment[]>;
25
+ /**
26
+ * Accessible name of the chart. The ring is `aria-hidden` and the legend is optional,
27
+ * so with `showLegend: false` this is the only thing a screen reader gets. Falls back
28
+ * to `donutChart.label`.
29
+ */
30
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
31
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
25
32
  /** Diameter in CSS pixels. @default 200 */
26
33
  readonly size: _angular_core.InputSignalWithTransform<number, unknown>;
27
34
  /** Inner-ring thickness as a percent of radius (0–100). `0` = solid pie. @default 30 */
@@ -46,7 +53,7 @@ declare class WrDonutChart {
46
53
  /** SVG path for one donut slice using outer and inner arcs. */
47
54
  private arcPath;
48
55
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrDonutChart, never>;
49
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDonutChart, "wr-donut-chart", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
56
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrDonutChart, "wr-donut-chart", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
50
57
  }
51
58
 
52
59
  export { WrDonutChart };