ngwr 10.2.1 → 11.1.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 (431) hide show
  1. package/README.md +39 -19
  2. package/action-sheet/styles/_index.scss +4 -1
  3. package/anchor/styles/_index.scss +6 -5
  4. package/back-top/styles/_index.scss +6 -1
  5. package/blur-text/styles/_index.scss +13 -0
  6. package/button/styles/_index.scss +11 -6
  7. package/calendar/styles/_index.scss +11 -2
  8. package/carousel/styles/_index.scss +13 -2
  9. package/cascader/styles/_index.scss +5 -3
  10. package/circular-text/styles/_index.scss +2 -0
  11. package/collapse/styles/_index.scss +1 -1
  12. package/color-picker/styles/_index.scss +6 -1
  13. package/command-palette/styles/_index.scss +2 -1
  14. package/compare/styles/_index.scss +1 -2
  15. package/context-menu/styles/_index.scss +8 -2
  16. package/descriptions/styles/_index.scss +2 -2
  17. package/dialog/styles/_index.scss +7 -0
  18. package/drawer/styles/_index.scss +20 -1
  19. package/dropdown/styles/_index.scss +19 -5
  20. package/empty/styles/_index.scss +10 -0
  21. package/falling-text/styles/_index.scss +2 -1
  22. package/fesm2022/ngwr-action-sheet.mjs +13 -3
  23. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  24. package/fesm2022/ngwr-affix.mjs +40 -13
  25. package/fesm2022/ngwr-affix.mjs.map +1 -1
  26. package/fesm2022/ngwr-anchor.mjs +18 -6
  27. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  28. package/fesm2022/ngwr-aurora.mjs +2 -2
  29. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  30. package/fesm2022/ngwr-avatar.mjs +31 -7
  31. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  32. package/fesm2022/ngwr-back-top.mjs +6 -2
  33. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  34. package/fesm2022/ngwr-badge.mjs +1 -1
  35. package/fesm2022/ngwr-badge.mjs.map +1 -1
  36. package/fesm2022/ngwr-bar-chart.mjs +30 -9
  37. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  38. package/fesm2022/ngwr-blur-text.mjs +2 -2
  39. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  40. package/fesm2022/ngwr-border-glow.mjs +2 -2
  41. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  42. package/fesm2022/ngwr-breadcrumbs.mjs +2 -2
  43. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  44. package/fesm2022/ngwr-burger.mjs +9 -4
  45. package/fesm2022/ngwr-burger.mjs.map +1 -1
  46. package/fesm2022/ngwr-button-testing.mjs +96 -0
  47. package/fesm2022/ngwr-button-testing.mjs.map +1 -0
  48. package/fesm2022/ngwr-button.mjs +31 -14
  49. package/fesm2022/ngwr-button.mjs.map +1 -1
  50. package/fesm2022/ngwr-calendar-heatmap.mjs +40 -8
  51. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  52. package/fesm2022/ngwr-calendar.mjs +20 -1
  53. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  54. package/fesm2022/ngwr-card.mjs +2 -2
  55. package/fesm2022/ngwr-card.mjs.map +1 -1
  56. package/fesm2022/ngwr-carousel-testing.mjs +377 -0
  57. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
  58. package/fesm2022/ngwr-carousel.mjs +67 -13
  59. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  60. package/fesm2022/ngwr-cascader-testing.mjs +534 -0
  61. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
  62. package/fesm2022/ngwr-cascader.mjs +2 -2
  63. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  64. package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
  65. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
  66. package/fesm2022/ngwr-checkbox.mjs +9 -3
  67. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  68. package/fesm2022/ngwr-circular-text.mjs +2 -2
  69. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  70. package/fesm2022/ngwr-click-spark.mjs +2 -2
  71. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  72. package/fesm2022/ngwr-collapse-testing.mjs +368 -0
  73. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
  74. package/fesm2022/ngwr-color-picker.mjs +134 -14
  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 +58 -8
  79. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  80. package/fesm2022/ngwr-compare.mjs +103 -13
  81. package/fesm2022/ngwr-compare.mjs.map +1 -1
  82. package/fesm2022/ngwr-config.mjs +106 -0
  83. package/fesm2022/ngwr-config.mjs.map +1 -0
  84. package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
  85. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
  86. package/fesm2022/ngwr-context-menu.mjs +94 -8
  87. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  88. package/fesm2022/ngwr-cookie.mjs +5 -1
  89. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  90. package/fesm2022/ngwr-counter.mjs +11 -3
  91. package/fesm2022/ngwr-counter.mjs.map +1 -1
  92. package/fesm2022/ngwr-date-adapter-luxon.mjs +52 -4
  93. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
  94. package/fesm2022/ngwr-date-adapter.mjs +54 -8
  95. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
  97. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
  98. package/fesm2022/ngwr-date-picker.mjs +73 -3
  99. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  100. package/fesm2022/ngwr-decrypt-text.mjs +27 -9
  101. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  102. package/fesm2022/ngwr-dialog-testing.mjs +89 -0
  103. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
  104. package/fesm2022/ngwr-directives.mjs +36 -12
  105. package/fesm2022/ngwr-directives.mjs.map +1 -1
  106. package/fesm2022/ngwr-donut-chart.mjs +22 -5
  107. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  108. package/fesm2022/ngwr-drag-drop.mjs +2 -2
  109. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  110. package/fesm2022/ngwr-drawer-testing.mjs +250 -0
  111. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
  112. package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
  113. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
  114. package/fesm2022/ngwr-dropdown.mjs +10 -2
  115. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  116. package/fesm2022/ngwr-empty.mjs +24 -7
  117. package/fesm2022/ngwr-empty.mjs.map +1 -1
  118. package/fesm2022/ngwr-event-calendar.mjs +57 -10
  119. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  120. package/fesm2022/ngwr-falling-text.mjs +2 -2
  121. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  122. package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
  123. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
  124. package/fesm2022/ngwr-form-testing.mjs +451 -0
  125. package/fesm2022/ngwr-form-testing.mjs.map +1 -0
  126. package/fesm2022/ngwr-form.mjs +19 -3
  127. package/fesm2022/ngwr-form.mjs.map +1 -1
  128. package/fesm2022/ngwr-fuzzy-text.mjs +9 -2
  129. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  130. package/fesm2022/ngwr-gauge.mjs +19 -5
  131. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  132. package/fesm2022/ngwr-glitch-text.mjs +2 -2
  133. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  134. package/fesm2022/ngwr-gradient-text.mjs +2 -2
  135. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  136. package/fesm2022/ngwr-i18n-en.mjs +50 -0
  137. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  138. package/fesm2022/ngwr-i18n-ru.mjs +48 -0
  139. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  140. package/fesm2022/ngwr-image-cropper.mjs +23 -0
  141. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  142. package/fesm2022/ngwr-input-number-testing.mjs +306 -0
  143. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
  144. package/fesm2022/ngwr-input-number.mjs +35 -3
  145. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  146. package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
  147. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
  148. package/fesm2022/ngwr-input-otp.mjs +36 -5
  149. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  150. package/fesm2022/ngwr-input-testing.mjs +102 -0
  151. package/fesm2022/ngwr-input-testing.mjs.map +1 -0
  152. package/fesm2022/ngwr-input.mjs +47 -10
  153. package/fesm2022/ngwr-input.mjs.map +1 -1
  154. package/fesm2022/ngwr-knob.mjs +44 -8
  155. package/fesm2022/ngwr-knob.mjs.map +1 -1
  156. package/fesm2022/ngwr-layout.mjs +21 -5
  157. package/fesm2022/ngwr-layout.mjs.map +1 -1
  158. package/fesm2022/ngwr-lightbox.mjs +33 -6
  159. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  160. package/fesm2022/ngwr-line-chart.mjs +17 -4
  161. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  162. package/fesm2022/ngwr-list.mjs +2 -2
  163. package/fesm2022/ngwr-list.mjs.map +1 -1
  164. package/fesm2022/ngwr-loading-bar.mjs +2 -2
  165. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  166. package/fesm2022/ngwr-markdown-testing.mjs +516 -0
  167. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
  168. package/fesm2022/ngwr-markdown.mjs +1492 -0
  169. package/fesm2022/ngwr-markdown.mjs.map +1 -0
  170. package/fesm2022/ngwr-marquee.mjs +17 -6
  171. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  172. package/fesm2022/ngwr-mention-testing.mjs +513 -0
  173. package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
  174. package/fesm2022/ngwr-mention.mjs +10 -1
  175. package/fesm2022/ngwr-mention.mjs.map +1 -1
  176. package/fesm2022/ngwr-meta.mjs +22 -7
  177. package/fesm2022/ngwr-meta.mjs.map +1 -1
  178. package/fesm2022/ngwr-meter-group.mjs +19 -5
  179. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  180. package/fesm2022/ngwr-overlay.mjs +41 -1
  181. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  182. package/fesm2022/ngwr-pagination-testing.mjs +389 -0
  183. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
  184. package/fesm2022/ngwr-pagination.mjs +14 -2
  185. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  186. package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
  187. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
  188. package/fesm2022/ngwr-popconfirm.mjs +95 -17
  189. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  190. package/fesm2022/ngwr-popover-testing.mjs +316 -0
  191. package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
  192. package/fesm2022/ngwr-popover.mjs +21 -3
  193. package/fesm2022/ngwr-popover.mjs.map +1 -1
  194. package/fesm2022/ngwr-pull-to-refresh.mjs +17 -2
  195. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  196. package/fesm2022/ngwr-qr.mjs +13 -3
  197. package/fesm2022/ngwr-qr.mjs.map +1 -1
  198. package/fesm2022/ngwr-radio-testing.mjs +392 -0
  199. package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
  200. package/fesm2022/ngwr-radio.mjs +10 -3
  201. package/fesm2022/ngwr-radio.mjs.map +1 -1
  202. package/fesm2022/ngwr-rating-testing.mjs +384 -0
  203. package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
  204. package/fesm2022/ngwr-rating.mjs +37 -2
  205. package/fesm2022/ngwr-rating.mjs.map +1 -1
  206. package/fesm2022/ngwr-segmented-testing.mjs +512 -0
  207. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
  208. package/fesm2022/ngwr-select-testing.mjs +268 -0
  209. package/fesm2022/ngwr-select-testing.mjs.map +1 -0
  210. package/fesm2022/ngwr-select.mjs +87 -16
  211. package/fesm2022/ngwr-select.mjs.map +1 -1
  212. package/fesm2022/ngwr-shiny-text.mjs +2 -2
  213. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  214. package/fesm2022/ngwr-sidebar.mjs +65 -12
  215. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  216. package/fesm2022/ngwr-slider-testing.mjs +478 -0
  217. package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
  218. package/fesm2022/ngwr-slider.mjs +57 -13
  219. package/fesm2022/ngwr-slider.mjs.map +1 -1
  220. package/fesm2022/ngwr-sparkline.mjs +26 -6
  221. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  222. package/fesm2022/ngwr-speed-dial.mjs +37 -4
  223. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  224. package/fesm2022/ngwr-spinner.mjs +12 -3
  225. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  226. package/fesm2022/ngwr-splash-cursor.mjs +2 -2
  227. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  228. package/fesm2022/ngwr-split-text.mjs +2 -2
  229. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  230. package/fesm2022/ngwr-splitter.mjs +70 -9
  231. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  232. package/fesm2022/ngwr-spotlight-card.mjs +2 -2
  233. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  234. package/fesm2022/ngwr-star-border.mjs +2 -2
  235. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  236. package/fesm2022/ngwr-statistic.mjs +24 -7
  237. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  238. package/fesm2022/ngwr-stepper-testing.mjs +477 -0
  239. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
  240. package/fesm2022/ngwr-switch-testing.mjs +77 -0
  241. package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
  242. package/fesm2022/ngwr-switch.mjs +9 -3
  243. package/fesm2022/ngwr-switch.mjs.map +1 -1
  244. package/fesm2022/ngwr-table-testing.mjs +580 -0
  245. package/fesm2022/ngwr-table-testing.mjs.map +1 -0
  246. package/fesm2022/ngwr-table.mjs +87 -14
  247. package/fesm2022/ngwr-table.mjs.map +1 -1
  248. package/fesm2022/ngwr-tabs-testing.mjs +617 -0
  249. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
  250. package/fesm2022/ngwr-tabs.mjs +38 -6
  251. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  252. package/fesm2022/ngwr-textarea-testing.mjs +238 -0
  253. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
  254. package/fesm2022/ngwr-textarea.mjs +32 -4
  255. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  256. package/fesm2022/ngwr-tilt-card.mjs +2 -2
  257. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  258. package/fesm2022/ngwr-toast-testing.mjs +101 -0
  259. package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
  260. package/fesm2022/ngwr-toast.mjs +2 -2
  261. package/fesm2022/ngwr-toast.mjs.map +1 -1
  262. package/fesm2022/ngwr-tour.mjs +61 -9
  263. package/fesm2022/ngwr-tour.mjs.map +1 -1
  264. package/fesm2022/ngwr-transfer-testing.mjs +538 -0
  265. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
  266. package/fesm2022/ngwr-transfer.mjs +45 -14
  267. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  268. package/fesm2022/ngwr-tree-testing.mjs +734 -0
  269. package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
  270. package/fesm2022/ngwr-tree.mjs +73 -7
  271. package/fesm2022/ngwr-tree.mjs.map +1 -1
  272. package/fesm2022/ngwr-typewriter.mjs +5 -3
  273. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  274. package/fesm2022/ngwr-version.mjs +1 -1
  275. package/fesm2022/ngwr-version.mjs.map +1 -1
  276. package/fesm2022/ngwr-virtual-scroll.mjs +31 -5
  277. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  278. package/fesm2022/ngwr-waves.mjs +3 -3
  279. package/fesm2022/ngwr-waves.mjs.map +1 -1
  280. package/fesm2022/ngwr-window.mjs +8 -0
  281. package/fesm2022/ngwr-window.mjs.map +1 -1
  282. package/file-upload/styles/_index.scss +7 -2
  283. package/gauge/styles/_index.scss +1 -1
  284. package/glitch-text/styles/_index.scss +4 -0
  285. package/i18n/en.json +48 -0
  286. package/i18n/ru.json +48 -0
  287. package/image-cropper/styles/_index.scss +13 -1
  288. package/input/styles/_index.scss +2 -2
  289. package/input-number/styles/_index.scss +7 -2
  290. package/knob/styles/_index.scss +8 -1
  291. package/layout/styles/_index.scss +3 -3
  292. package/lightbox/styles/_index.scss +10 -2
  293. package/line-chart/styles/_index.scss +6 -0
  294. package/llms-full.txt +151 -4
  295. package/llms.txt +57 -8
  296. package/loading-bar/styles/_index.scss +1 -2
  297. package/markdown/styles/_index.scss +296 -0
  298. package/marquee/styles/_index.scss +12 -0
  299. package/mcp/api.js +512 -0
  300. package/mcp/catalog.js +157 -0
  301. package/mcp/server.js +273 -0
  302. package/mcp/tools.js +366 -0
  303. package/meter-group/styles/_index.scss +1 -1
  304. package/package.json +186 -35
  305. package/pagination/styles/_index.scss +6 -6
  306. package/popover/styles/_index.scss +37 -5
  307. package/rating/styles/_index.scss +10 -0
  308. package/result/styles/_index.scss +3 -1
  309. package/schematics/use/symbol-map.json +2 -0
  310. package/segmented/styles/_index.scss +12 -1
  311. package/select/styles/_index.scss +32 -10
  312. package/sidebar/styles/_index.scss +30 -5
  313. package/slider/styles/_index.scss +15 -0
  314. package/speed-dial/styles/_index.scss +20 -0
  315. package/split-text/styles/_index.scss +13 -0
  316. package/star-border/styles/_index.scss +2 -0
  317. package/stepper/styles/_index.scss +19 -3
  318. package/styles/_grid.scss +4 -4
  319. package/styles.scss +1 -0
  320. package/switch/styles/_index.scss +5 -3
  321. package/table/styles/_index.scss +25 -12
  322. package/tabs/styles/_index.scss +11 -1
  323. package/textarea/styles/_index.scss +5 -0
  324. package/theme/styles/_colors.scss +44 -15
  325. package/theme/styles/_dark.scss +35 -15
  326. package/theme/styles/_mixins.scss +3 -0
  327. package/timeline/styles/_index.scss +2 -2
  328. package/toast/styles/_index.scss +17 -8
  329. package/toolbar/styles/_index.scss +3 -3
  330. package/tour/styles/_index.scss +7 -1
  331. package/tree/styles/_index.scss +9 -5
  332. package/types/ngwr-action-sheet.d.ts +9 -1
  333. package/types/ngwr-affix.d.ts +7 -1
  334. package/types/ngwr-anchor.d.ts +8 -1
  335. package/types/ngwr-avatar.d.ts +13 -3
  336. package/types/ngwr-bar-chart.d.ts +16 -0
  337. package/types/ngwr-burger.d.ts +6 -2
  338. package/types/ngwr-button-testing.d.ts +85 -0
  339. package/types/ngwr-button.d.ts +26 -10
  340. package/types/ngwr-calendar-heatmap.d.ts +16 -2
  341. package/types/ngwr-calendar.d.ts +10 -0
  342. package/types/ngwr-carousel-testing.d.ts +257 -0
  343. package/types/ngwr-carousel.d.ts +20 -4
  344. package/types/ngwr-cascader-testing.d.ts +392 -0
  345. package/types/ngwr-checkbox-testing.d.ts +77 -0
  346. package/types/ngwr-checkbox.d.ts +7 -2
  347. package/types/ngwr-collapse-testing.d.ts +290 -0
  348. package/types/ngwr-color-picker.d.ts +20 -11
  349. package/types/ngwr-command-palette-testing.d.ts +437 -0
  350. package/types/ngwr-command-palette.d.ts +25 -2
  351. package/types/ngwr-compare.d.ts +50 -2
  352. package/types/ngwr-config.d.ts +176 -0
  353. package/types/ngwr-context-menu-testing.d.ts +401 -0
  354. package/types/ngwr-context-menu.d.ts +65 -17
  355. package/types/ngwr-counter.d.ts +6 -1
  356. package/types/ngwr-date-adapter-luxon.d.ts +26 -0
  357. package/types/ngwr-date-picker-testing.d.ts +518 -0
  358. package/types/ngwr-date-picker.d.ts +4 -0
  359. package/types/ngwr-dialog-testing.d.ts +79 -0
  360. package/types/ngwr-directives.d.ts +10 -1
  361. package/types/ngwr-donut-chart.d.ts +8 -1
  362. package/types/ngwr-drawer-testing.d.ts +196 -0
  363. package/types/ngwr-dropdown-testing.d.ts +202 -0
  364. package/types/ngwr-dropdown.d.ts +7 -1
  365. package/types/ngwr-empty.d.ts +19 -4
  366. package/types/ngwr-event-calendar.d.ts +26 -1
  367. package/types/ngwr-file-upload-testing.d.ts +194 -0
  368. package/types/ngwr-form-testing.d.ts +379 -0
  369. package/types/ngwr-form.d.ts +17 -0
  370. package/types/ngwr-gauge.d.ts +13 -1
  371. package/types/ngwr-image-cropper.d.ts +10 -0
  372. package/types/ngwr-input-number-testing.d.ts +226 -0
  373. package/types/ngwr-input-number.d.ts +29 -1
  374. package/types/ngwr-input-otp-testing.d.ts +299 -0
  375. package/types/ngwr-input-otp.d.ts +23 -2
  376. package/types/ngwr-input-testing.d.ts +84 -0
  377. package/types/ngwr-input.d.ts +20 -6
  378. package/types/ngwr-knob.d.ts +18 -0
  379. package/types/ngwr-layout.d.ts +1 -0
  380. package/types/ngwr-lightbox.d.ts +17 -3
  381. package/types/ngwr-line-chart.d.ts +9 -2
  382. package/types/ngwr-markdown-testing.d.ts +462 -0
  383. package/types/ngwr-markdown.d.ts +534 -0
  384. package/types/ngwr-marquee.d.ts +12 -2
  385. package/types/ngwr-mention-testing.d.ts +359 -0
  386. package/types/ngwr-meta.d.ts +4 -2
  387. package/types/ngwr-meter-group.d.ts +11 -1
  388. package/types/ngwr-overlay.d.ts +33 -2
  389. package/types/ngwr-pagination-testing.d.ts +291 -0
  390. package/types/ngwr-pagination.d.ts +1 -0
  391. package/types/ngwr-popconfirm-testing.d.ts +235 -0
  392. package/types/ngwr-popconfirm.d.ts +31 -21
  393. package/types/ngwr-popover-testing.d.ts +221 -0
  394. package/types/ngwr-popover.d.ts +9 -0
  395. package/types/ngwr-pull-to-refresh.d.ts +7 -0
  396. package/types/ngwr-qr.d.ts +9 -1
  397. package/types/ngwr-radio-testing.d.ts +296 -0
  398. package/types/ngwr-radio.d.ts +8 -2
  399. package/types/ngwr-rating-testing.d.ts +291 -0
  400. package/types/ngwr-rating.d.ts +23 -0
  401. package/types/ngwr-segmented-testing.d.ts +401 -0
  402. package/types/ngwr-select-testing.d.ts +175 -0
  403. package/types/ngwr-select.d.ts +45 -4
  404. package/types/ngwr-sidebar.d.ts +17 -2
  405. package/types/ngwr-slider-testing.d.ts +329 -0
  406. package/types/ngwr-slider.d.ts +35 -1
  407. package/types/ngwr-sparkline.d.ts +12 -2
  408. package/types/ngwr-speed-dial.d.ts +17 -18
  409. package/types/ngwr-spinner.d.ts +8 -1
  410. package/types/ngwr-splitter.d.ts +24 -1
  411. package/types/ngwr-statistic.d.ts +12 -2
  412. package/types/ngwr-stepper-testing.d.ts +346 -0
  413. package/types/ngwr-switch-testing.d.ts +66 -0
  414. package/types/ngwr-switch.d.ts +7 -2
  415. package/types/ngwr-table-testing.d.ts +423 -0
  416. package/types/ngwr-table.d.ts +42 -0
  417. package/types/ngwr-tabs-testing.d.ts +470 -0
  418. package/types/ngwr-tabs.d.ts +9 -0
  419. package/types/ngwr-textarea-testing.d.ts +184 -0
  420. package/types/ngwr-textarea.d.ts +7 -2
  421. package/types/ngwr-toast-testing.d.ts +80 -0
  422. package/types/ngwr-tour.d.ts +27 -0
  423. package/types/ngwr-transfer-testing.d.ts +444 -0
  424. package/types/ngwr-transfer.d.ts +16 -1
  425. package/types/ngwr-tree-testing.d.ts +501 -0
  426. package/types/ngwr-tree.d.ts +33 -0
  427. package/types/ngwr-version.d.ts +1 -1
  428. package/types/ngwr-virtual-scroll.d.ts +13 -1
  429. package/typewriter/styles/_index.scss +1 -1
  430. package/typography/styles/_index.scss +1 -1
  431. package/window/styles/_index.scss +32 -9
@@ -88,7 +88,7 @@
88
88
  &::before {
89
89
  content: '';
90
90
  position: absolute;
91
- left: 0.34375rem;
91
+ inset-inline-start: 0.34375rem;
92
92
  top: 1rem;
93
93
  bottom: -1.25rem;
94
94
  width: 1.5px;
@@ -119,7 +119,7 @@
119
119
  position: absolute;
120
120
  // Dot centre: margin-top 0.125rem + half of the 0.75rem dot = 0.5rem.
121
121
  top: 0.5rem;
122
- left: 50%;
122
+ inset-inline-start: 50%;
123
123
  width: calc(100% + 2rem);
124
124
  height: 1.5px;
125
125
  background: var(--wr-color-outline);
@@ -26,6 +26,10 @@ $toast-colors: (
26
26
  // Safe-area: fold each inset into the matching padding side so toasts clear
27
27
  // notches / the home indicator / rounded corners on mobile, whichever edge
28
28
  // the host is anchored to. env() is 0 without insets, so desktop stays 1rem.
29
+ // `env(safe-area-inset-left/right)` report the device's own edges and do NOT
30
+ // flip with direction, so each inset must stay on the side it describes. The
31
+ // 1rem base is equal on both sides, so the shorthand reads the same either way.
32
+ // rtl-ok: physical shorthand carrying physical `env()` insets
29
33
  padding: calc(1rem + env(safe-area-inset-top)) calc(1rem + env(safe-area-inset-right))
30
34
  calc(1rem + env(safe-area-inset-bottom)) calc(1rem + env(safe-area-inset-left));
31
35
  pointer-events: none;
@@ -57,8 +61,7 @@ $toast-colors: (
57
61
  .wr-toast {
58
62
  --wr-toast-i: var(--wr-toast-stack-index, 0);
59
63
  position: absolute;
60
- left: 1rem;
61
- right: 1rem;
64
+ inset-inline: 1rem;
62
65
  width: auto;
63
66
  max-width: calc(100% - 2rem);
64
67
  transition:
@@ -98,31 +101,33 @@ $toast-colors: (
98
101
 
99
102
  &--top {
100
103
  top: 0;
104
+ // rtl-ok: centred with a physical translateX, so the pair must stay physical
101
105
  left: 50%;
102
106
  transform: translateX(-50%);
103
107
  }
104
108
  &--top-start {
105
109
  top: 0;
106
- left: 0;
110
+ inset-inline-start: 0;
107
111
  }
108
112
  &--top-end {
109
113
  top: 0;
110
- right: 0;
114
+ inset-inline-end: 0;
111
115
  }
112
116
  &--bottom {
113
117
  bottom: 0;
118
+ // rtl-ok: centred with a physical translateX, so the pair must stay physical
114
119
  left: 50%;
115
120
  transform: translateX(-50%);
116
121
  flex-direction: column-reverse;
117
122
  }
118
123
  &--bottom-start {
119
124
  bottom: 0;
120
- left: 0;
125
+ inset-inline-start: 0;
121
126
  flex-direction: column-reverse;
122
127
  }
123
128
  &--bottom-end {
124
129
  bottom: 0;
125
- right: 0;
130
+ inset-inline-end: 0;
126
131
  flex-direction: column-reverse;
127
132
  }
128
133
  }
@@ -143,7 +148,7 @@ $toast-colors: (
143
148
  border: 1px solid var(--wr-toast-border);
144
149
  // Capture horizontal swipe-to-dismiss; let vertical scroll pass through.
145
150
  touch-action: pan-y;
146
- border-left: 3px solid var(--wr-toast-accent);
151
+ border-inline-start: 3px solid var(--wr-toast-accent);
147
152
  @include theme.smooth-br(var(--wr-border-radius-base));
148
153
  box-shadow: var(--wr-shadow-overlay);
149
154
  font-family: var(--wr-font-family-base);
@@ -201,9 +206,13 @@ $toast-colors: (
201
206
  &__progress {
202
207
  position: absolute;
203
208
  bottom: 0;
204
- left: 0;
209
+ inset-inline-start: 0;
205
210
  height: 2px;
206
211
  width: 100%;
212
+ // `transform-origin` has no logical keyword, and the drain is a physical
213
+ // `scaleX`. Flipping the bar to drain from the reader's start needs a
214
+ // direction-aware rule, not a property rename.
215
+ // rtl-ok: origin is one half of a physical scaleX pair
207
216
  transform-origin: left;
208
217
  background: var(--wr-toast-accent);
209
218
  animation: wr-toast-progress linear forwards;
@@ -51,7 +51,7 @@
51
51
 
52
52
  &--end {
53
53
  flex: 0 0 auto;
54
- margin-left: auto;
54
+ margin-inline-start: auto;
55
55
  }
56
56
  }
57
57
 
@@ -64,7 +64,7 @@
64
64
  &::before {
65
65
  content: '';
66
66
  position: absolute;
67
- left: -0.5rem;
67
+ inset-inline-start: -0.5rem;
68
68
  top: 50%;
69
69
  transform: translateY(-50%);
70
70
  height: 1.25rem;
@@ -82,7 +82,7 @@
82
82
  }
83
83
 
84
84
  .wr-toolbar--responsive .wr-toolbar__zone--end {
85
- margin-left: 0;
85
+ margin-inline-start: 0;
86
86
  }
87
87
 
88
88
  // The vertical hairline dividers are a horizontal-row affordance — drop them
@@ -5,7 +5,13 @@
5
5
  // covered, so it stays readable and clickable.
6
6
  .wr-tour__spotlight {
7
7
  position: fixed;
8
- z-index: 1000;
8
+ // Below CDK's `.cdk-overlay-container` (1000), deliberately. Both are fixed
9
+ // children of `<body>`, so at equal z-index the DOM order decides — and the
10
+ // service appends a fresh cut-out on every step while the container stays put, so
11
+ // from the second step on the dimming shadow painted OVER the tour's own card.
12
+ // `.wr-tour-overlay { z-index: 1001 }` cannot help: it sits on the pane INSIDE the
13
+ // container, whose own stacking context scopes it.
14
+ z-index: 999;
9
15
  pointer-events: none;
10
16
  border-radius: var(--wr-border-radius-base);
11
17
  box-shadow: 0 0 0 9999px rgba(var(--wr-color-backdrop-rgb), 0.55);
@@ -19,7 +19,7 @@
19
19
  align-items: center;
20
20
  gap: 0.375rem;
21
21
  padding: 0.3125rem 0.5rem;
22
- padding-left: calc(0.5rem + var(--wr-tree-depth, 0) * var(--wr-tree-indent));
22
+ padding-inline-start: calc(0.5rem + var(--wr-tree-depth, 0) * var(--wr-tree-indent));
23
23
  border-radius: var(--wr-border-radius-sm);
24
24
  cursor: pointer;
25
25
  user-select: none;
@@ -34,7 +34,8 @@
34
34
 
35
35
  &--selected {
36
36
  background: var(--wr-color-primary-soft);
37
- color: var(--wr-color-primary);
37
+ // Text on the `-soft` tint: `-ink`. Bare measured 4.19:1 light / 3.63:1 dark.
38
+ color: var(--wr-color-primary-ink);
38
39
  }
39
40
 
40
41
  // Visible ring only when the row truly has keyboard focus — not
@@ -156,7 +157,7 @@
156
157
  font-size: var(--wr-tree-trigger-font-size);
157
158
  line-height: var(--wr-tree-trigger-line-height);
158
159
  cursor: pointer;
159
- text-align: left;
160
+ text-align: start;
160
161
  transition:
161
162
  border-color var(--wr-transition-base),
162
163
  box-shadow var(--wr-transition-base);
@@ -243,10 +244,13 @@
243
244
  align-items: center;
244
245
  gap: 0.125rem;
245
246
  max-width: 100%;
246
- padding: 0.125rem 0.25rem 0.125rem 0.5rem;
247
+ // Roomier on the label side, tighter where the remove (×) sits.
248
+ padding-block: 0.125rem;
249
+ padding-inline: 0.5rem 0.25rem;
247
250
  border-radius: 999px;
248
251
  background: var(--wr-color-primary-soft);
249
- color: var(--wr-color-primary);
252
+ // The chip wraps a label, so this paints text on the chip's own tint.
253
+ color: var(--wr-color-primary-ink);
250
254
  font-size: var(--wr-text-sm);
251
255
  line-height: 1.4;
252
256
  user-select: none;
@@ -60,6 +60,14 @@ declare class WrActionSheet {
60
60
  readonly actions: _angular_core.InputSignal<readonly WrActionSheetAction[]>;
61
61
  /** Optional bold heading above the rows. */
62
62
  readonly title: _angular_core.InputSignal<string>;
63
+ /**
64
+ * Name announced for the dialog when there is no visible `title`. Falls back to
65
+ * `actionSheet.label`, then `'Actions'` — it used to be that English string,
66
+ * written into the template of a component whose every other string comes from
67
+ * the caller.
68
+ */
69
+ readonly titleFallback: _angular_core.InputSignal<string | null>;
70
+ protected readonly resolvedTitleFallback: _angular_core.Signal<string>;
63
71
  /** Optional muted sub-heading under the title. */
64
72
  readonly message: _angular_core.InputSignal<string>;
65
73
  /** Fires with the chosen row (never fires on a dismiss). */
@@ -68,7 +76,7 @@ declare class WrActionSheet {
68
76
  protected readonly cancelActions: _angular_core.Signal<WrActionSheetAction[]>;
69
77
  protected select(item: WrActionSheetAction): void;
70
78
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrActionSheet, never>;
71
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrActionSheet, "wr-action-sheet", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "action": "action"; }, never, never, true, never>;
79
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrActionSheet, "wr-action-sheet", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleFallback": { "alias": "titleFallback"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "action": "action"; }, never, never, true, never>;
72
80
  }
73
81
 
74
82
  export { WrActionSheet };
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
 
3
3
  /**
4
4
  * Stick-on-scroll directive. Combines native CSS `position: sticky` with
5
- * an `IntersectionObserver`-driven `--affixed` state class, so consumers
5
+ * an `IntersectionObserver`-driven `wr-affix--active` state class, so consumers
6
6
  * can style the element differently while it's pinned (e.g. add a
7
7
  * shadow, change the background, shrink the height).
8
8
  *
@@ -35,6 +35,12 @@ declare class WrAffix {
35
35
  private readonly host;
36
36
  private readonly destroyRef;
37
37
  private readonly isBrowser;
38
+ /**
39
+ * `afterNextRender`'s callback is not an injection context, and the observer
40
+ * cannot exist before the sentinel it watches — so the effect that rebuilds it
41
+ * is handed the injector explicitly.
42
+ */
43
+ private readonly injector;
38
44
  constructor();
39
45
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAffix, never>;
40
46
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<WrAffix, "[wrAffix]", never, { "offsetTop": { "alias": "wrAffixOffsetTop"; "required": false; "isSignal": true; }; }, { "affixChange": "wrAffixChange"; }, never, never, true, never>;
@@ -32,6 +32,13 @@ interface WrAnchorLink {
32
32
  */
33
33
  declare class WrAnchor {
34
34
  readonly links: _angular_core.InputSignal<readonly WrAnchorLink[]>;
35
+ /**
36
+ * Accessible name for the navigation landmark. Falls back to `anchor.label`,
37
+ * then `'Table of contents'` — it used to be that English string, hard-coded
38
+ * on the host, in a landmark a screen reader reads out on every page.
39
+ */
40
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
41
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
35
42
  /** Pixel offset subtracted on scroll — for sticky headers. @default 0 */
36
43
  readonly offset: _angular_core.InputSignalWithTransform<number, unknown>;
37
44
  /** Highlight an item when its target's top is within this many px of the offset line. @default 80 */
@@ -46,7 +53,7 @@ declare class WrAnchor {
46
53
  constructor();
47
54
  protected onClick(id: string, event: MouseEvent): void;
48
55
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAnchor, never>;
49
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAnchor, "wr-anchor", never, { "links": { "alias": "links"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "hitArea": { "alias": "hitArea"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
56
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAnchor, "wr-anchor", never, { "links": { "alias": "links"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "hitArea": { "alias": "hitArea"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
50
57
  }
51
58
 
52
59
  export { WrAnchor };
@@ -58,11 +58,13 @@ declare class WrAvatar {
58
58
  */
59
59
  readonly url: _angular_core.InputSignal<string | null>;
60
60
  /**
61
- * Alt text for the image.
61
+ * Alt text for the image. Falls back to `avatar.alt`, then `'Avatar'` — pass
62
+ * the person's name where you have it, since that is what a reader wants.
62
63
  *
63
- * @default 'Avatar'
64
+ * @default null
64
65
  */
65
- readonly alt: _angular_core.InputSignal<string>;
66
+ readonly alt: _angular_core.InputSignal<string | null>;
67
+ protected readonly resolvedAlt: _angular_core.Signal<string>;
66
68
  /**
67
69
  * Corner treatment. `rounded` (default) is a soft rounded square,
68
70
  * `circle` is the classic profile avatar, `squircle` is the iOS look.
@@ -77,11 +79,19 @@ declare class WrAvatar {
77
79
  */
78
80
  readonly size: _angular_core.InputSignal<WrAvatarSize>;
79
81
  protected readonly loaded: _angular_core.WritableSignal<boolean>;
82
+ /**
83
+ * Whether the image failed. Without this the spinner spun forever on a broken
84
+ * URL — the one state where an avatar is guaranteed to have projected initials
85
+ * worth showing instead.
86
+ */
87
+ protected readonly failed: _angular_core.WritableSignal<boolean>;
88
+ constructor();
80
89
  protected readonly resolved: _angular_core.Signal<ResolvedCssSize>;
81
90
  protected readonly cssSize: _angular_core.Signal<string>;
82
91
  protected readonly pxSize: _angular_core.Signal<number | null>;
83
92
  protected readonly classes: _angular_core.Signal<string>;
84
93
  protected onImageLoad(): void;
94
+ protected onImageError(): void;
85
95
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrAvatar, never>;
86
96
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrAvatar, "wr-avatar", never, { "url": { "alias": "url"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
87
97
  }
@@ -32,12 +32,28 @@ declare class WrBarChart {
32
32
  readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
33
33
  /** Explicit max value. `0` = auto. @default 0 */
34
34
  readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
35
+ /**
36
+ * A datum's value, with anything non-finite read as `0`.
37
+ *
38
+ * One `NaN` used to take out the whole chart rather than its own bar:
39
+ * `Math.max(...values)` is `NaN` as soon as one value is, so the scale fell
40
+ * back to `1` and every OTHER bar was asked for a height of `value * 100`%.
41
+ * The bad bar also printed the literal text `NaN` above itself.
42
+ */
43
+ private static value;
35
44
  protected readonly resolvedMax: _angular_core.Signal<number>;
36
45
  protected readonly bars: _angular_core.Signal<{
37
46
  label: string;
38
47
  value: number;
39
48
  color: string;
40
49
  heightPercent: number;
50
+ /**
51
+ * The bar's accessible name. The label and the value sit in separate
52
+ * rows, so a screen reader read every number and then every label with
53
+ * nothing tying the two together — and with `showValues` off the
54
+ * numbers were not in the accessible tree at all.
55
+ */
56
+ name: string;
41
57
  }[]>;
42
58
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrBarChart, never>;
43
59
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrBarChart, "wr-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -20,8 +20,12 @@ import * as _angular_core from '@angular/core';
20
20
  declare class WrBurger {
21
21
  /** Two-way bindable open state. Drives the hamburger ↔ close morph. @default false */
22
22
  readonly open: _angular_core.ModelSignal<boolean>;
23
- /** Accessible label for the toggle button. @default 'Toggle menu' */
24
- readonly label: _angular_core.InputSignal<string>;
23
+ /**
24
+ * Accessible name for the toggle button. Falls back to `burger.label`, then
25
+ * `'Toggle menu'`.
26
+ */
27
+ readonly label: _angular_core.InputSignal<string | null>;
28
+ protected readonly resolvedLabel: _angular_core.Signal<string>;
25
29
  /** Disable the toggle. @default false */
26
30
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
27
31
  protected readonly classes: _angular_core.Signal<{
@@ -0,0 +1,85 @@
1
+ import { BaseHarnessFilters, ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';
2
+ import { WrColor } from 'ngwr/theme';
3
+
4
+ /**
5
+ * @license
6
+ *
7
+ * Use of this source code is governed by an MIT-style license that can be
8
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
9
+ */
10
+
11
+ /** Narrows which `<wr-btn>` a harness query matches. */
12
+ interface WrButtonHarnessFilters extends BaseHarnessFilters {
13
+ /** Match the button's visible label — a string is an exact match, a RegExp is tested. */
14
+ readonly text?: string | RegExp;
15
+ /** Match only enabled (`false`) or only disabled (`true`) buttons. */
16
+ readonly disabled?: boolean;
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 `<wr-btn>` — drive a button from a consumer's spec without
28
+ * knowing how it is built.
29
+ *
30
+ * Everything this reads is public API: the `wr-btn` selector, the
31
+ * `.wr-btn__label` element, the `wr-btn--*` modifiers and the disabled attributes.
32
+ * `<wr-btn>` is deliberately NOT always a native `<button>` — the element form
33
+ * exists so a link or a custom host can be one — which is why the disabled state
34
+ * is answered from the ATTRIBUTES rather than from `el.disabled`, a property half
35
+ * of those shapes do not have.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const loader = TestbedHarnessEnvironment.loader(fixture);
40
+ * const save = await loader.getHarness(WrButtonHarness.with({ text: 'Save' }));
41
+ *
42
+ * expect(await save.isDisabled()).toBe(false);
43
+ * await save.click();
44
+ * ```
45
+ *
46
+ * @see https://ngwr.dev/guides/testing
47
+ */
48
+ declare class WrButtonHarness extends ComponentHarness {
49
+ /** Every shape the button ships in: the element, and the two attribute forms. */
50
+ static hostSelector: string;
51
+ /** Build a predicate that narrows the query — pass to `getHarness` / `getAllHarnesses`. */
52
+ static with(options?: WrButtonHarnessFilters): HarnessPredicate<WrButtonHarness>;
53
+ /** The button's visible label, trimmed. Icons and the spinner are not part of it. */
54
+ getText(): Promise<string>;
55
+ /**
56
+ * Whether the button refuses interaction.
57
+ *
58
+ * Both signals are read, because the component sets them for different reasons:
59
+ * `disabled` lands on every shape (it is inert on a custom element, which is
60
+ * exactly why `aria-disabled` exists as well, but it is the attribute that is
61
+ * always there). A button that is merely LOADING also answers `true` here, and
62
+ * that is not a quirk — by default a loading button refuses clicks.
63
+ */
64
+ isDisabled(): Promise<boolean>;
65
+ /** Whether the button is showing its loading spinner. */
66
+ isLoading(): Promise<boolean>;
67
+ /**
68
+ * The intent colour, or `null` when the button carries none.
69
+ *
70
+ * Matched against `WR_COLORS` rather than "the first `wr-btn--*` class": the
71
+ * modifier list also carries the size, the shape, `outlined`, `block`, `loading`
72
+ * and the icon position, so a pattern match answers `icon` as readily as
73
+ * `primary`.
74
+ */
75
+ getColor(): Promise<WrColor | null>;
76
+ /** Click the button. A disabled button is still clicked — assert, do not assume. */
77
+ click(): Promise<void>;
78
+ /** Move keyboard focus to the button. */
79
+ focus(): Promise<void>;
80
+ /** Whether the button currently has focus. */
81
+ isFocused(): Promise<boolean>;
82
+ }
83
+
84
+ export { WrButtonHarness };
85
+ export type { WrButtonHarnessFilters };
@@ -68,13 +68,26 @@ type WrButtonIconPosition = 'start' | 'end';
68
68
  * @see https://ngwr.dev/reference/components/button
69
69
  */
70
70
  declare class WrButton {
71
- /** Color variant. Omit for the neutral default style. @default null */
71
+ /**
72
+ * Color variant. Omit for the neutral default style.
73
+ *
74
+ * Deliberately NOT configurable app-wide: the library's own chrome binds
75
+ * `[color]="isCurrent ? 'primary' : null"`, where `null` means neutral, and a
76
+ * configured intent would repaint every one of those buttons. See `WrConfig`.
77
+ *
78
+ * @default null
79
+ */
72
80
  readonly color: _angular_core.InputSignal<"primary" | "secondary" | "success" | "warning" | "danger" | "info" | "light" | "medium" | "dark" | null>;
73
- /** Size variant. @default 'md' */
74
- readonly size: _angular_core.InputSignal<WrButtonSize>;
75
81
  /**
76
- * Corner treatment — `rounded` or `pill`. `null` (default) falls back
77
- * to `rounded`. Inside a `<wr-btn-group shape="…">`, the group's shape
82
+ * Size variant. Unset, it resolves through
83
+ * `provideWrConfig({ button: { size } })` and then to `md`.
84
+ *
85
+ * @default 'md'
86
+ */
87
+ readonly size: _angular_core.InputSignal<WrButtonSize | null>;
88
+ /**
89
+ * Corner treatment — `rounded`, `pill` or `squircle`. `null` (default) falls
90
+ * back to `rounded`. Inside a `<wr-btn-group shape="…">`, the group's shape
78
91
  * ALWAYS wins over this input — the group enforces a consistent corner
79
92
  * treatment across its members.
80
93
  *
@@ -106,13 +119,16 @@ declare class WrButton {
106
119
  */
107
120
  readonly isDisabledWhenLoading: _angular_core.InputSignalWithTransform<boolean, any>;
108
121
  private readonly group;
122
+ /** The size, or the app-wide default, or `md`. @see useConfigValue */
123
+ protected readonly resolvedSize: _angular_core.Signal<WrButtonSize>;
109
124
  /**
110
- * Resolved shape. Inside a `<wr-btn-group>`, the group ALWAYS wins —
111
- * child `[shape]` is ignored entirely so the group reads as one
112
- * coherent control. Outside a group, the button's own `[shape]` is
113
- * used, falling back to `rounded`.
125
+ * Resolved shape. Inside a `<wr-btn-group>`, the group ALWAYS wins — child
126
+ * `[shape]` is ignored entirely so the group reads as one coherent control.
127
+ * Outside a group, the button's own `[shape]` is used, falling back to
128
+ * `rounded`. Not config-resolved: see `WrConfig` for why a boolean cannot
129
+ * express this three-valued input.
114
130
  */
115
- protected readonly effectiveShape: _angular_core.Signal<WrButtonShape>;
131
+ protected readonly resolvedShape: _angular_core.Signal<WrButtonShape>;
116
132
  private readonly hostEl;
117
133
  /**
118
134
  * Whether this instance is the `<wr-btn>` ELEMENT rather than the attribute
@@ -27,6 +27,13 @@ interface Cell {
27
27
  */
28
28
  declare class WrCalendarHeatmap {
29
29
  readonly data: _angular_core.InputSignal<readonly WrHeatmapDatum[]>;
30
+ /**
31
+ * Accessible name of the whole grid. Its cells are bare spans whose `title` a screen
32
+ * reader on a role-less element does not read, so the map used to be several hundred
33
+ * anonymous nodes with no name. Falls back to `calendarHeatmap.label`.
34
+ */
35
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
36
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
30
37
  /** Last day to render. @default today */
31
38
  readonly endDate: _angular_core.InputSignal<string | Date | null>;
32
39
  /** Number of weeks (columns) to render. @default 53 */
@@ -41,7 +48,14 @@ declare class WrCalendarHeatmap {
41
48
  readonly emptyColor: _angular_core.InputSignal<string>;
42
49
  /** Show the weekday + month labels around the grid. @default true */
43
50
  readonly showLabels: _angular_core.InputSignalWithTransform<boolean, any>;
44
- protected readonly weekdayLabels: string[];
51
+ private readonly locale;
52
+ /**
53
+ * Weekday names from the locale rather than a hard-coded English list — the row order is
54
+ * Sunday-first, matching the grid's own alignment, so 7 Jan 2024 (a Sunday) is the
55
+ * reference. Rows without a label stay blank on purpose: seven labels do not fit.
56
+ */
57
+ protected readonly weekdayLabels: _angular_core.Signal<readonly string[]>;
58
+ private readonly monthNames;
45
59
  protected readonly cells: _angular_core.Signal<readonly Cell[]>;
46
60
  protected readonly monthLabels: _angular_core.Signal<{
47
61
  label: string;
@@ -51,7 +65,7 @@ declare class WrCalendarHeatmap {
51
65
  protected colorFor(intensity: number): string;
52
66
  protected opacityFor(intensity: number): number;
53
67
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCalendarHeatmap, never>;
54
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCalendarHeatmap, "wr-calendar-heatmap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "weeks": { "alias": "weeks"; "required": false; "isSignal": true; }; "cellSize": { "alias": "cellSize"; "required": false; "isSignal": true; }; "cellGap": { "alias": "cellGap"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "emptyColor": { "alias": "emptyColor"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
68
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCalendarHeatmap, "wr-calendar-heatmap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "endDate": { "alias": "endDate"; "required": false; "isSignal": true; }; "weeks": { "alias": "weeks"; "required": false; "isSignal": true; }; "cellSize": { "alias": "cellSize"; "required": false; "isSignal": true; }; "cellGap": { "alias": "cellGap"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "emptyColor": { "alias": "emptyColor"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
55
69
  }
56
70
 
57
71
  export { WrCalendarHeatmap };
@@ -68,6 +68,7 @@ declare class WrCalendar {
68
68
  /** Disable interaction entirely. @default false */
69
69
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, any>;
70
70
  private readonly adapter;
71
+ private readonly dir;
71
72
  private readonly host;
72
73
  private readonly injector;
73
74
  /** Currently displayed month (any date inside it). */
@@ -134,6 +135,15 @@ declare class WrCalendar {
134
135
  private focusActiveCell;
135
136
  /** Used by the template's `track` expression. */
136
137
  protected trackByTime(_: number, date: Date): number;
138
+ /**
139
+ * The key as the GRID sees it.
140
+ *
141
+ * Arrow keys follow visual order, and a calendar grid mirrors under
142
+ * `dir="rtl"`: the day to the visual right of today is yesterday. Only the
143
+ * inline pair swaps — Up/Down step a week either way, and PageUp/PageDown and
144
+ * Home/End are semantic rather than physical.
145
+ */
146
+ private inlineKey;
137
147
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrCalendar, never>;
138
148
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrCalendar, "wr-calendar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "autoFocus": { "alias": "autoFocus"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "date": "dateChange"; "range": "rangeChange"; }, never, never, true, never>;
139
149
  }