ngwr 11.2.0 → 12.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 (395) hide show
  1. package/README.md +85 -26
  2. package/burger/styles/_index.scss +1 -1
  3. package/button/styles/_index.scss +2 -2
  4. package/calendar/styles/_index.scss +32 -12
  5. package/calendar-heatmap/styles/_index.scss +20 -0
  6. package/carousel/styles/_index.scss +23 -1
  7. package/cascader/styles/_index.scss +15 -3
  8. package/checkbox/styles/_index.scss +2 -2
  9. package/collapse/styles/_index.scss +2 -2
  10. package/color-picker/styles/_index.scss +3 -3
  11. package/compare/styles/_index.scss +18 -2
  12. package/context-menu/styles/_index.scss +21 -2
  13. package/date-picker/styles/_index.scss +5 -5
  14. package/descriptions/styles/_index.scss +1 -1
  15. package/drag-drop/styles/_index.scss +28 -1
  16. package/drawer/styles/_index.scss +37 -0
  17. package/dropdown/styles/_index.scss +2 -2
  18. package/event-calendar/styles/_index.scss +67 -10
  19. package/fesm2022/ngwr-action-sheet.mjs +3 -3
  20. package/fesm2022/ngwr-affix.mjs +3 -3
  21. package/fesm2022/ngwr-alert.mjs +3 -3
  22. package/fesm2022/ngwr-anchor.mjs +3 -3
  23. package/fesm2022/ngwr-aurora.mjs +3 -3
  24. package/fesm2022/ngwr-avatar.mjs +3 -3
  25. package/fesm2022/ngwr-back-top.mjs +3 -3
  26. package/fesm2022/ngwr-badge.mjs +6 -6
  27. package/fesm2022/ngwr-bar-chart-testing.mjs +20 -2
  28. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
  29. package/fesm2022/ngwr-bar-chart.mjs +3 -3
  30. package/fesm2022/ngwr-blur-text.mjs +3 -3
  31. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  32. package/fesm2022/ngwr-border-glow.mjs +4 -4
  33. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  34. package/fesm2022/ngwr-breadcrumbs.mjs +29 -17
  35. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  36. package/fesm2022/ngwr-burger.mjs +3 -3
  37. package/fesm2022/ngwr-button.mjs +6 -6
  38. package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
  39. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  40. package/fesm2022/ngwr-calendar-testing.mjs +1 -1
  41. package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
  42. package/fesm2022/ngwr-calendar.mjs +187 -9
  43. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  44. package/fesm2022/ngwr-card.mjs +10 -10
  45. package/fesm2022/ngwr-card.mjs.map +1 -1
  46. package/fesm2022/ngwr-carousel.mjs +124 -24
  47. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  48. package/fesm2022/ngwr-cascader.mjs +48 -5
  49. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  50. package/fesm2022/ngwr-checkbox.mjs +6 -6
  51. package/fesm2022/ngwr-circular-text.mjs +4 -4
  52. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  53. package/fesm2022/ngwr-click-spark.mjs +27 -7
  54. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  55. package/fesm2022/ngwr-clipboard.mjs +3 -3
  56. package/fesm2022/ngwr-collapse.mjs +9 -9
  57. package/fesm2022/ngwr-color-picker-testing.mjs +26 -6
  58. package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
  59. package/fesm2022/ngwr-color-picker.mjs +98 -8
  60. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  61. package/fesm2022/ngwr-command-palette.mjs +14 -5
  62. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  63. package/fesm2022/ngwr-compare.mjs +3 -3
  64. package/fesm2022/ngwr-confetti.mjs +31 -6
  65. package/fesm2022/ngwr-confetti.mjs.map +1 -1
  66. package/fesm2022/ngwr-config.mjs +9 -0
  67. package/fesm2022/ngwr-config.mjs.map +1 -1
  68. package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
  69. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
  70. package/fesm2022/ngwr-context-menu.mjs +333 -43
  71. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  72. package/fesm2022/ngwr-cookie.mjs +3 -3
  73. package/fesm2022/ngwr-counter.mjs +25 -9
  74. package/fesm2022/ngwr-counter.mjs.map +1 -1
  75. package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
  76. package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
  77. package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
  78. package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
  79. package/fesm2022/ngwr-date-picker-testing.mjs +11 -6
  80. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
  81. package/fesm2022/ngwr-date-picker.mjs +119 -37
  82. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  83. package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
  84. package/fesm2022/ngwr-date.mjs.map +1 -0
  85. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  86. package/fesm2022/ngwr-density.mjs +6 -6
  87. package/fesm2022/ngwr-descriptions.mjs +6 -6
  88. package/fesm2022/ngwr-dialog.mjs +73 -18
  89. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  90. package/fesm2022/ngwr-directives.mjs +12 -12
  91. package/fesm2022/ngwr-divider.mjs +52 -5
  92. package/fesm2022/ngwr-divider.mjs.map +1 -1
  93. package/fesm2022/ngwr-donut-chart-testing.mjs +8 -4
  94. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
  95. package/fesm2022/ngwr-donut-chart.mjs +7 -7
  96. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  97. package/fesm2022/ngwr-drag-drop.mjs +160 -11
  98. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  99. package/fesm2022/ngwr-drawer.mjs +121 -58
  100. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  101. package/fesm2022/ngwr-dropdown.mjs +26 -10
  102. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  103. package/fesm2022/ngwr-empty.mjs +3 -3
  104. package/fesm2022/ngwr-event-calendar.mjs +28 -15
  105. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  106. package/fesm2022/ngwr-falling-text-testing.mjs +5 -3
  107. package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
  108. package/fesm2022/ngwr-falling-text.mjs +75 -46
  109. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  110. package/fesm2022/ngwr-file-upload.mjs +3 -3
  111. package/fesm2022/ngwr-form.mjs +32 -15
  112. package/fesm2022/ngwr-form.mjs.map +1 -1
  113. package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
  114. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  115. package/fesm2022/ngwr-gauge.mjs +3 -3
  116. package/fesm2022/ngwr-glitch-text-testing.mjs +51 -17
  117. package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
  118. package/fesm2022/ngwr-glitch-text.mjs +7 -7
  119. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  120. package/fesm2022/ngwr-gradient-text-testing.mjs +46 -11
  121. package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
  122. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  123. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  124. package/fesm2022/ngwr-hotkey.mjs +24 -9
  125. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  126. package/fesm2022/ngwr-i18n-en.mjs +73 -1
  127. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  128. package/fesm2022/ngwr-i18n-ru.mjs +55 -1
  129. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  130. package/fesm2022/ngwr-i18n.mjs +26 -15
  131. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  132. package/fesm2022/ngwr-icon.mjs +6 -6
  133. package/fesm2022/ngwr-image-cropper-testing.mjs +53 -9
  134. package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
  135. package/fesm2022/ngwr-image-cropper.mjs +150 -12
  136. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  137. package/fesm2022/ngwr-input-number-testing.mjs +15 -10
  138. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
  139. package/fesm2022/ngwr-input-number.mjs +17 -10
  140. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  141. package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
  142. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
  143. package/fesm2022/ngwr-input-otp.mjs +24 -5
  144. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  145. package/fesm2022/ngwr-input.mjs +15 -15
  146. package/fesm2022/ngwr-keyboard.mjs +3 -3
  147. package/fesm2022/ngwr-knob.mjs +3 -3
  148. package/fesm2022/ngwr-layout.mjs +15 -15
  149. package/fesm2022/ngwr-lightbox.mjs +4 -4
  150. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  151. package/fesm2022/ngwr-line-chart.mjs +73 -26
  152. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  153. package/fesm2022/ngwr-list.mjs +7 -7
  154. package/fesm2022/ngwr-list.mjs.map +1 -1
  155. package/fesm2022/ngwr-loading-bar.mjs +7 -7
  156. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  157. package/fesm2022/ngwr-markdown.mjs +66 -8
  158. package/fesm2022/ngwr-markdown.mjs.map +1 -1
  159. package/fesm2022/ngwr-marquee.mjs +4 -4
  160. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  161. package/fesm2022/ngwr-media.mjs +3 -3
  162. package/fesm2022/ngwr-mention.mjs +108 -13
  163. package/fesm2022/ngwr-mention.mjs.map +1 -1
  164. package/fesm2022/ngwr-meta.mjs +6 -6
  165. package/fesm2022/ngwr-meter-group-testing.mjs +26 -6
  166. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
  167. package/fesm2022/ngwr-meter-group.mjs +3 -3
  168. package/fesm2022/ngwr-overlay.mjs +6 -6
  169. package/fesm2022/ngwr-page-header.mjs +3 -3
  170. package/fesm2022/ngwr-pagination-testing.mjs +6 -6
  171. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
  172. package/fesm2022/ngwr-pagination.mjs +83 -16
  173. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  174. package/fesm2022/ngwr-pipes.mjs +39 -26
  175. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  176. package/fesm2022/ngwr-platform.mjs +9 -9
  177. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  178. package/fesm2022/ngwr-popover-testing.mjs +7 -2
  179. package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
  180. package/fesm2022/ngwr-popover.mjs +155 -33
  181. package/fesm2022/ngwr-popover.mjs.map +1 -1
  182. package/fesm2022/ngwr-progress.mjs +3 -3
  183. package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
  184. package/fesm2022/ngwr-qr.mjs +42 -5
  185. package/fesm2022/ngwr-qr.mjs.map +1 -1
  186. package/fesm2022/ngwr-radio.mjs +6 -6
  187. package/fesm2022/ngwr-rating.mjs +3 -3
  188. package/fesm2022/ngwr-result.mjs +21 -30
  189. package/fesm2022/ngwr-result.mjs.map +1 -1
  190. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  191. package/fesm2022/ngwr-scroll.mjs +3 -3
  192. package/fesm2022/ngwr-segmented-testing.mjs +85 -1
  193. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
  194. package/fesm2022/ngwr-segmented.mjs +123 -10
  195. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  196. package/fesm2022/ngwr-select.mjs +159 -34
  197. package/fesm2022/ngwr-select.mjs.map +1 -1
  198. package/fesm2022/ngwr-shiny-text.mjs +11 -9
  199. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  200. package/fesm2022/ngwr-sidebar.mjs +31 -16
  201. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  202. package/fesm2022/ngwr-skeleton.mjs +3 -3
  203. package/fesm2022/ngwr-slider.mjs +100 -9
  204. package/fesm2022/ngwr-slider.mjs.map +1 -1
  205. package/fesm2022/ngwr-sparkline.mjs +3 -3
  206. package/fesm2022/ngwr-speed-dial-testing.mjs +15 -13
  207. package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
  208. package/fesm2022/ngwr-speed-dial.mjs +27 -12
  209. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  210. package/fesm2022/ngwr-spinner.mjs +3 -3
  211. package/fesm2022/ngwr-splash-cursor.mjs +3 -3
  212. package/fesm2022/ngwr-split-text.mjs +17 -5
  213. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  214. package/fesm2022/ngwr-splitter.mjs +3 -3
  215. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  216. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  217. package/fesm2022/ngwr-squircle.mjs +6 -6
  218. package/fesm2022/ngwr-star-border.mjs +4 -4
  219. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  220. package/fesm2022/ngwr-statistic.mjs +9 -9
  221. package/fesm2022/ngwr-stepper-testing.mjs +8 -8
  222. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
  223. package/fesm2022/ngwr-stepper.mjs +33 -8
  224. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  225. package/fesm2022/ngwr-storage.mjs +17 -5
  226. package/fesm2022/ngwr-storage.mjs.map +1 -1
  227. package/fesm2022/ngwr-switch.mjs +3 -3
  228. package/fesm2022/ngwr-table.mjs +99 -39
  229. package/fesm2022/ngwr-table.mjs.map +1 -1
  230. package/fesm2022/ngwr-tabs-testing.mjs +11 -10
  231. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
  232. package/fesm2022/ngwr-tabs.mjs +36 -10
  233. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  234. package/fesm2022/ngwr-textarea.mjs +3 -3
  235. package/fesm2022/ngwr-theme.mjs +181 -4
  236. package/fesm2022/ngwr-theme.mjs.map +1 -1
  237. package/fesm2022/ngwr-tilt-card.mjs +7 -7
  238. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  239. package/fesm2022/ngwr-timeline.mjs +6 -6
  240. package/fesm2022/ngwr-toast.mjs +9 -9
  241. package/fesm2022/ngwr-toolbar.mjs +3 -3
  242. package/fesm2022/ngwr-tour.mjs +34 -10
  243. package/fesm2022/ngwr-tour.mjs.map +1 -1
  244. package/fesm2022/ngwr-transfer.mjs +3 -3
  245. package/fesm2022/ngwr-tree.mjs +28 -10
  246. package/fesm2022/ngwr-tree.mjs.map +1 -1
  247. package/fesm2022/ngwr-typewriter-testing.mjs +15 -1
  248. package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
  249. package/fesm2022/ngwr-typewriter.mjs +13 -5
  250. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  251. package/fesm2022/ngwr-typography.mjs +3 -3
  252. package/fesm2022/ngwr-utils.mjs +5 -2
  253. package/fesm2022/ngwr-utils.mjs.map +1 -1
  254. package/fesm2022/ngwr-version.mjs +1 -1
  255. package/fesm2022/ngwr-version.mjs.map +1 -1
  256. package/fesm2022/ngwr-virtual-scroll.mjs +4 -4
  257. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  258. package/fesm2022/ngwr-waves.mjs +4 -4
  259. package/fesm2022/ngwr-waves.mjs.map +1 -1
  260. package/fesm2022/ngwr-window.mjs +94 -24
  261. package/fesm2022/ngwr-window.mjs.map +1 -1
  262. package/file-upload/styles/_index.scss +2 -2
  263. package/glitch-text/styles/_index.scss +27 -12
  264. package/i18n/en.json +56 -6
  265. package/i18n/ru.json +56 -6
  266. package/image-cropper/styles/_index.scss +19 -0
  267. package/input/styles/_index.scss +2 -2
  268. package/input-number/styles/_index.scss +2 -2
  269. package/input-otp/styles/_index.scss +9 -2
  270. package/knob/styles/_index.scss +1 -1
  271. package/lightbox/styles/_index.scss +16 -2
  272. package/line-chart/styles/_index.scss +28 -14
  273. package/list/styles/_index.scss +1 -1
  274. package/llms-full.txt +19 -24
  275. package/llms.txt +46 -8
  276. package/markdown/styles/_index.scss +3 -3
  277. package/mcp/api.js +6 -4
  278. package/mcp/catalog.js +40 -3
  279. package/mcp/providers.js +16 -3
  280. package/mcp/tools.js +21 -1
  281. package/meter-group/styles/_index.scss +1 -1
  282. package/overlay/styles/_index.scss +33 -1
  283. package/package.json +17 -12
  284. package/pagination/styles/_index.scss +23 -1
  285. package/popover/styles/_index.scss +16 -7
  286. package/progress/styles/_index.scss +1 -1
  287. package/radio/styles/_index.scss +2 -2
  288. package/rating/styles/_index.scss +1 -1
  289. package/schematics/collection.json +1 -1
  290. package/schematics/migrations/v12/index.js +65 -0
  291. package/schematics/migrations/v7/index.js +12 -1
  292. package/schematics/migrations/v8/index.js +10 -1
  293. package/schematics/migrations.json +5 -0
  294. package/schematics/ng-add/index.js +8 -3
  295. package/schematics/provider/index.js +80 -13
  296. package/schematics/use/index.js +9 -129
  297. package/schematics/use/rule.js +206 -0
  298. package/schematics/use/symbol-map.json +4 -4
  299. package/segmented/styles/_index.scss +14 -3
  300. package/select/styles/_index.scss +14 -2
  301. package/sidebar/styles/_index.scss +12 -10
  302. package/skills/ngwr/SKILL.md +7 -5
  303. package/skills/ngwr/references/catalog.md +9 -9
  304. package/skills/ngwr/references/setup.md +10 -5
  305. package/slider/styles/_index.scss +1 -1
  306. package/speed-dial/styles/_index.scss +1 -1
  307. package/stepper/styles/_index.scss +12 -3
  308. package/switch/styles/_index.scss +2 -2
  309. package/table/styles/_index.scss +61 -12
  310. package/tabs/styles/_index.scss +1 -1
  311. package/textarea/styles/_index.scss +1 -1
  312. package/theme/styles/_colors.scss +142 -56
  313. package/theme/styles/_dark.scss +46 -3
  314. package/theme/styles/_focus.scss +28 -5
  315. package/theme/styles/_mixins.scss +1 -1
  316. package/theme/styles/_variables.scss +67 -0
  317. package/transfer/styles/_index.scss +26 -3
  318. package/tree/styles/_index.scss +29 -6
  319. package/types/ngwr-bar-chart-testing.d.ts +9 -1
  320. package/types/ngwr-blur-text.d.ts +8 -4
  321. package/types/ngwr-breadcrumbs.d.ts +17 -10
  322. package/types/ngwr-calendar-testing.d.ts +1 -1
  323. package/types/ngwr-calendar.d.ts +66 -0
  324. package/types/ngwr-carousel.d.ts +85 -6
  325. package/types/ngwr-cascader.d.ts +17 -0
  326. package/types/ngwr-click-spark.d.ts +4 -0
  327. package/types/ngwr-color-picker-testing.d.ts +8 -0
  328. package/types/ngwr-color-picker.d.ts +21 -1
  329. package/types/ngwr-confetti.d.ts +8 -0
  330. package/types/ngwr-config.d.ts +10 -1
  331. package/types/ngwr-context-menu-testing.d.ts +24 -11
  332. package/types/ngwr-context-menu.d.ts +56 -0
  333. package/types/ngwr-counter.d.ts +1 -0
  334. package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
  335. package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
  336. package/types/ngwr-date-picker-testing.d.ts +11 -6
  337. package/types/ngwr-date-picker.d.ts +8 -4
  338. package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
  339. package/types/ngwr-dialog.d.ts +38 -1
  340. package/types/ngwr-divider.d.ts +25 -0
  341. package/types/ngwr-donut-chart-testing.d.ts +7 -3
  342. package/types/ngwr-donut-chart.d.ts +3 -3
  343. package/types/ngwr-drag-drop.d.ts +56 -2
  344. package/types/ngwr-drawer.d.ts +56 -5
  345. package/types/ngwr-event-calendar.d.ts +8 -2
  346. package/types/ngwr-falling-text-testing.d.ts +5 -3
  347. package/types/ngwr-falling-text.d.ts +1 -1
  348. package/types/ngwr-form.d.ts +12 -2
  349. package/types/ngwr-glitch-text-testing.d.ts +37 -8
  350. package/types/ngwr-gradient-text-testing.d.ts +16 -3
  351. package/types/ngwr-i18n.d.ts +13 -4
  352. package/types/ngwr-image-cropper-testing.d.ts +49 -10
  353. package/types/ngwr-image-cropper.d.ts +70 -5
  354. package/types/ngwr-input-number-testing.d.ts +15 -10
  355. package/types/ngwr-input-number.d.ts +11 -4
  356. package/types/ngwr-input-otp-testing.d.ts +12 -6
  357. package/types/ngwr-input-otp.d.ts +15 -1
  358. package/types/ngwr-line-chart.d.ts +20 -3
  359. package/types/ngwr-markdown.d.ts +11 -0
  360. package/types/ngwr-mention.d.ts +32 -0
  361. package/types/ngwr-meter-group-testing.d.ts +12 -2
  362. package/types/ngwr-overlay.d.ts +1 -0
  363. package/types/ngwr-pagination-testing.d.ts +4 -4
  364. package/types/ngwr-pagination.d.ts +11 -0
  365. package/types/ngwr-pipes.d.ts +1 -1
  366. package/types/ngwr-popover-testing.d.ts +7 -2
  367. package/types/ngwr-popover.d.ts +1 -0
  368. package/types/ngwr-result.d.ts +6 -0
  369. package/types/ngwr-segmented-testing.d.ts +53 -0
  370. package/types/ngwr-segmented.d.ts +107 -5
  371. package/types/ngwr-select.d.ts +68 -6
  372. package/types/ngwr-shiny-text.d.ts +4 -2
  373. package/types/ngwr-sidebar.d.ts +14 -5
  374. package/types/ngwr-slider.d.ts +69 -1
  375. package/types/ngwr-speed-dial-testing.d.ts +15 -11
  376. package/types/ngwr-speed-dial.d.ts +22 -3
  377. package/types/ngwr-split-text.d.ts +9 -0
  378. package/types/ngwr-stepper-testing.d.ts +5 -5
  379. package/types/ngwr-stepper.d.ts +8 -0
  380. package/types/ngwr-storage.d.ts +1 -0
  381. package/types/ngwr-table.d.ts +104 -11
  382. package/types/ngwr-tabs-testing.d.ts +11 -10
  383. package/types/ngwr-tabs.d.ts +2 -0
  384. package/types/ngwr-theme.d.ts +82 -1
  385. package/types/ngwr-tour.d.ts +22 -4
  386. package/types/ngwr-tree.d.ts +5 -4
  387. package/types/ngwr-typewriter-testing.d.ts +10 -0
  388. package/types/ngwr-utils.d.ts +5 -2
  389. package/types/ngwr-version.d.ts +1 -1
  390. package/types/ngwr-window.d.ts +39 -11
  391. package/typography/styles/_index.scss +1 -1
  392. package/window/styles/_index.scss +72 -26
  393. package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
  394. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
  395. package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
package/llms-full.txt CHANGED
@@ -72,7 +72,7 @@
72
72
  ## ngwr/blur-text
73
73
  - import: `import { WrBlurText } from 'ngwr/blur-text'`
74
74
  - selector: `wr-blur-text`
75
- - exports: WrBlurText
75
+ - exports: WrBlurText, WrBlurTextDirection, WrBlurTextUnit
76
76
  - Reveals text by blurring each piece in from a coloured offset, through a half-blurred mid-step, into the steady state. Triggers on viewport entry. Dependency-free port — uses `IntersectionObserver` + Web Animations API.
77
77
 
78
78
  ## ngwr/blur-text/testing
@@ -140,7 +140,7 @@
140
140
  ## ngwr/carousel
141
141
  - import: `import { WrCarousel } from 'ngwr/carousel'`
142
142
  - selector: `wr-carousel-slide`, `wr-carousel`
143
- - exports: WrCarousel, WrCarouselSlide
143
+ - exports: WrCarousel, WrCarouselSlide, WR_CAROUSEL, WrCarouselContext
144
144
  - Slide carousel with prev/next, dots, and optional autoplay. Autoplay holds while the pointer is over it, while focus is inside it, and while a drag is in flight — hovering is not a way to stop moving content for someone who never uses a mouse, which is what WCAG 2.2.2 asks for.
145
145
 
146
146
  ## ngwr/carousel/testing
@@ -206,7 +206,6 @@
206
206
 
207
207
  ## ngwr/color-picker/testing
208
208
  - import: `import { WrColorPickerHarness } from 'ngwr/color-picker/testing'`
209
- - selector: `.wr-color-picker__tabs`
210
209
  - exports: WrColorPickerHarness, WrColorPickerTriggerHarness, WrColorPickerHarnessFilters, WrColorPickerTab, WrColorPickerThumbs, WrColorPickerTriggerHarnessFilters
211
210
 
212
211
  ## ngwr/command-palette
@@ -255,18 +254,10 @@
255
254
  - exports: WrCounter, WrCounterMode, WrCountUp, WrCountUpDirection, WrCountUpEasing, WrCountUpTrigger
256
255
  - Animated number display. Use **odometer** mode for rolling-digit motion (mechanical counter look) or **tween** mode for an eased count-up from the previous value.
257
256
 
258
- ## ngwr/date-adapter
259
- - import: `import { WrDateAdapter } from 'ngwr/date-adapter'`
257
+ ## ngwr/date
258
+ - import: `import { WrDateAdapter } from 'ngwr/date'`
260
259
  - exports: WrDateAdapter, WrNativeDateAdapter, provideWrDateAdapter, WrDateAdapterOptions, WR_DATE_LOCALE, WrDateFormat, isNamedFormat
261
260
 
262
- ## ngwr/date-adapter-fns
263
- - import: `import { WrDateFnsAdapter } from 'ngwr/date-adapter-fns'`
264
- - exports: WrDateFnsAdapter, provideWrDateFnsAdapter
265
-
266
- ## ngwr/date-adapter-luxon
267
- - import: `import { WrLuxonAdapter } from 'ngwr/date-adapter-luxon'`
268
- - exports: WrLuxonAdapter, provideWrLuxonAdapter
269
-
270
261
  ## ngwr/date-picker
271
262
  - import: `import { WrDatePicker } from 'ngwr/date-picker'`
272
263
  - selector: `wr-date-picker`, `wr-date-range-picker`
@@ -277,6 +268,14 @@
277
268
  - import: `import { WrDatePickerDayHarness } from 'ngwr/date-picker/testing'`
278
269
  - exports: WrDatePickerDayHarness, WrDatePickerHarness, WrDateRangePickerHarness, WrDatePickerDayHarnessFilters, WrDatePickerHarnessFilters, WrDatePickerTimeFields, WrDateRangePickerHarnessFilters
279
270
 
271
+ ## ngwr/date/adapters/fns
272
+ - import: `import { WrDateFnsAdapter } from 'ngwr/date/adapters/fns'`
273
+ - exports: WrDateFnsAdapter, provideWrDateFnsAdapter
274
+
275
+ ## ngwr/date/adapters/luxon
276
+ - import: `import { WrLuxonAdapter } from 'ngwr/date/adapters/luxon'`
277
+ - exports: WrLuxonAdapter, provideWrLuxonAdapter
278
+
280
279
  ## ngwr/decrypt-text
281
280
  - import: `import { WrDecryptText } from 'ngwr/decrypt-text'`
282
281
  - selector: `wr-decrypt-text`
@@ -370,7 +369,6 @@
370
369
 
371
370
  ## ngwr/event-calendar/testing
372
371
  - import: `import { WrEventCalendarChipHarness } from 'ngwr/event-calendar/testing'`
373
- - selector: `.wr-event-calendar__view`
374
372
  - exports: WrEventCalendarChipHarness, WrEventCalendarHarness, WrEventCalendarChipHarnessFilters, WrEventCalendarHarnessFilters
375
373
 
376
374
  ## ngwr/falling-text
@@ -485,7 +483,7 @@
485
483
 
486
484
  ## ngwr/image-cropper/testing
487
485
  - import: `import { WrImageCropperHarness } from 'ngwr/image-cropper/testing'`
488
- - exports: WrImageCropperHarness, WrImageCropperHarnessFilters
486
+ - exports: WrImageCropperHarness, WrCropArrow, WrCropWindowBox, WrImageCropperHarnessFilters
489
487
 
490
488
  ## ngwr/input
491
489
  - import: `import { WrInput } from 'ngwr/input'`
@@ -624,7 +622,7 @@
624
622
 
625
623
  ## ngwr/overlay
626
624
  - import: `import { WrOutsideClick } from 'ngwr/overlay'`
627
- - exports: wrAppendOverlayClose, wrMirrorOffsets, WrOutsideClick, WrOverlayContainer, provideWrOverlay, provideWrResponsiveOverlays, WR_OVERLAY, WR_OVERLAY_CONTAINER, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet
625
+ - exports: wrAppendOverlayClose, wrMirrorOffsets, WrOutsideClick, WrOverlayContainer, provideWrOverlay, provideWrResponsiveOverlays, WR_OVERLAY, WR_OVERLAY_CONTAINER, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet, WrResponsiveOverlaysConfig
628
626
 
629
627
  ## ngwr/page-header
630
628
  - import: `import { WrPageHeader } from 'ngwr/page-header'`
@@ -640,7 +638,6 @@
640
638
 
641
639
  ## ngwr/pagination/testing
642
640
  - import: `import { WrPaginationHarness } from 'ngwr/pagination/testing'`
643
- - selector: `.wr-pagination__page`, `.wr-pagination__nav > wr-btn:not(.wr-pagination__page)`, `.wr-pagination__size`, `.wr-pagination__page[aria-current="page"]`
644
641
  - exports: WrPaginationHarness, WrPaginationHarnessFilters
645
642
 
646
643
  ## ngwr/pipes
@@ -735,7 +732,7 @@
735
732
  - import: `import { WrSegmented } from 'ngwr/segmented'`
736
733
  - selector: `wr-segmented`
737
734
  - exports: WrSegmented, WrSegmentedOption, WrSegmentedSize
738
- - Single-choice picker rendered as a segmented control. Two-way binds the selected value.
735
+ - Single-choice picker rendered as a segmented control. A signal-forms native control — it implements `FormValueControl`, so `[formField]` binds straight to its `value` model. `[(value)]` works standalone, and `[(ngModel)]` / reactive forms keep working through Angular's bridge.
739
736
 
740
737
  ## ngwr/segmented/testing
741
738
  - import: `import { WrSegmentedHarness } from 'ngwr/segmented/testing'`
@@ -899,7 +896,7 @@
899
896
  ## ngwr/table
900
897
  - import: `import { WrTable } from 'ngwr/table'`
901
898
  - selector: `[wrTableCell]`, `ng-template[wrTableExpand]`, `wr-table-filter`, `ng-template[wrTableGroupHeader]`, `wr-table-sort`, `wr-table`
902
- - exports: WrTable, WrTableCell, WrTableExpand, WrTableGroupHeader, WrTableSort, WrTableFilter, WrTableCellContext, WrTableColumn, WrTableColumns, WrTableCsvOptions, WrTableExpandContext, WrTableFilterChange, WrTableFilterItem, WrTableGroupContext, WrTableSortState, WrTableSortDirection, WrTableSummary
899
+ - exports: WrTable, WrTableCell, WrTableExpand, WrTableGroupHeader, WrTableSort, WrTableFilter, WrTableCellContext, WrTableColumn, WrTableColumns, WrTableCsvOptions, WrTableExpandContext, WrTableFilterChange, WrTableFilterItem, WrTableGroupContext, WrTableRow, WrTableSortState, WrTableSortDirection, WrTableSummary
903
900
  - Data table with sortable / filterable headers and custom cell templates.
904
901
 
905
902
  ## ngwr/table/testing
@@ -928,7 +925,7 @@
928
925
 
929
926
  ## ngwr/theme
930
927
  - import: `import { WrTheme } from 'ngwr/theme'`
931
- - exports: WR_COLORS, WrColor, WrTheme, provideWrTheme, WR_THEME_CONFIG, DEFAULT_WR_THEME_CONFIG, WrResolvedTheme, WrThemeMode, WrThemeConfig
928
+ - exports: WR_COLORS, wrContrastFor, wrIntentTokens, wrThemeTokens, WrColor, WrTheme, provideWrTheme, WR_THEME_CONFIG, DEFAULT_WR_THEME_CONFIG, WrResolvedTheme, WrThemeMode, WrThemeConfig
932
929
  - Light / dark theme manager. Writes `[data-theme]` on `<html>`, persists the chosen mode to localStorage. `auto` mode follows `WrPlatform.prefersDark`.
933
930
 
934
931
  ## ngwr/tilt-card
@@ -949,7 +946,6 @@
949
946
 
950
947
  ## ngwr/toast
951
948
  - import: `import { WrToast } from 'ngwr/toast'`
952
- - selector: `wr-toast-host`, `wr-toast`
953
949
  - exports: WrToast, WrToastRef, provideWrToastConfig, DEFAULT_TOAST_CONFIG, WR_TOAST_CONFIG, WrToastConfig, WrToastMode, WrToastOptions, WrToastPosition, WrToastType
954
950
  - Stack of dismissible notifications anchored to a viewport corner. Service-driven; rendered in a single shared CDK overlay.
955
951
 
@@ -971,7 +967,6 @@
971
967
 
972
968
  ## ngwr/tour/testing
973
969
  - import: `import { WrTourHarness } from 'ngwr/tour/testing'`
974
- - selector: `.wr-tour-popup__action--next`, `.wr-tour-popup__action--skip`, `.wr-tour-popup__action--back`
975
970
  - exports: WrTourHarness, WrTourHarnessFilters, WrTourProgress
976
971
 
977
972
  ## ngwr/transfer
@@ -1040,8 +1035,8 @@
1040
1035
 
1041
1036
  ## ngwr/window
1042
1037
  - import: `import { WrWindowManager } from 'ngwr/window'`
1043
- - selector: `wr-window-container`, `wr-window-taskbar`, `wr-window`
1044
- - exports: WR_WINDOW_DATA, WR_WINDOW_REF, WrWindowManager, WrWindowBeforeCloseHook, WrWindowRef, WrWindowTaskbar, WrWindowChromeSize, WrWindowConfig, WrWindowOs, WrWindowPersistMode, WrWindowSize, WrWindowSnap, WrWindowState, WrWindowStorageConfig
1038
+ - selector: `wr-window-taskbar`
1039
+ - exports: WR_WINDOW_DATA, WR_WINDOW_REF, WrWindowManager, WrWindowBeforeCloseHook, WrWindowRef, WrWindowTaskbar, WrWindowChromeSize, WrWindowConfig, WrWindowLayoutSnapshot, WrWindowOs, WrWindowPersistMode, WrWindowSize, WrWindowSnap, WrWindowState, WrWindowStorageConfig
1045
1040
  - Free-floating OS-style window opened programmatically via `WrWindowManager`. Drag the header to move, drag any edge or corner to resize, minimize to the taskbar. There is no declarative `<wr-window>` component — the manager is the only entry point so the API stays single-track. Need a backdrop + focus trap? That's `WrDialog`, not this.
1046
1041
 
1047
1042
  ## ngwr/window/testing
package/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # ngwr
2
2
 
3
3
  > Angular UI library — standalone, signals-first, zoneless, fully tree-shakable.
4
- > 202 secondary entry points, 181 component and directive classes, built on
4
+ > 202 secondary entry points, 187 component and directive classes, built on
5
5
  > `@angular/cdk` primitives. The only runtime dependency is `tslib`. Docs and
6
6
  > live demos: https://ngwr.dev — source: https://github.com/thekhegay/ngwr
7
7
 
@@ -56,8 +56,8 @@ Add from their entry points as needed:
56
56
  `color` key — a bound `[color]="null"` means "no intent", which a default cannot
57
57
  express without inventing a sentinel.
58
58
  - `provideWrI18n(...)` + `provideWrI18nStaticLoader(...)` — localization.
59
- - `provideWrDateAdapter(...)` — calendar + date-picker (`ngwr/date-adapter-fns`
60
- or `ngwr/date-adapter-luxon`).
59
+ - `provideWrDateAdapter(...)` — calendar + date-picker (`ngwr/date/adapters/fns`
60
+ or `ngwr/date/adapters/luxon`).
61
61
 
62
62
  Injected rather than provided: `WrTour` (`ngwr/tour`) runs a guided onboarding
63
63
  tour — `tour.start([{ target: '[data-tour="save"]', content: '…' }])` spotlights
@@ -75,6 +75,21 @@ one element at a time; a step whose target is missing is skipped, not floated.
75
75
  - `ng g ngwr:page <form|table|dashboard>` — starter page wired with ngwr.
76
76
  - `ng update ngwr` — runs upgrade migrations.
77
77
 
78
+ ## Upgrading to v12
79
+
80
+ Two breaking changes, and only one is codemoddable.
81
+
82
+ - **Date entry points nest under `ngwr/date`.** `ngwr/date-adapter` →
83
+ `ngwr/date`, `ngwr/date-adapter-fns` → `ngwr/date/adapters/fns`,
84
+ `ngwr/date-adapter-luxon` → `ngwr/date/adapters/luxon`. Import paths only —
85
+ every symbol keeps its name. `ng update ngwr@12` rewrites them.
86
+ - **`readI18nText()` returns `Signal<string>`.** Add `()` at every read. No
87
+ codemod: adding the call means knowing which identifiers hold the result, and
88
+ the type error already names every site. `useI18nText`, the `wrT` pipe and the
89
+ `[wrT]` directive are unchanged.
90
+
91
+ Full guide, with diffs: https://ngwr.dev/start/migration
92
+
78
93
  ## Use ngwr — don't hand-roll
79
94
 
80
95
  The catalog is large: prefer an ngwr component, util, pipe, or validator over raw
@@ -117,8 +132,10 @@ before writing your own. Full catalog: https://ngwr.dev/reference/components.
117
132
 
118
133
  ## Patterns
119
134
 
120
- - **Forms** — every value control is signal-forms native (`FormValueControl`, or
121
- `FormCheckboxControl` for checkbox) — no `ControlValueAccessor` in between.
135
+ - **Forms** — nineteen value controls are signal-forms native (`FormValueControl`,
136
+ or `FormCheckboxControl` for checkbox/switch) — no `ControlValueAccessor` in the
137
+ library. A count rather than "every": `[wrColorPickerTrigger]` is public, carries
138
+ its own `value` model, and implements neither.
122
139
  Bind `[formField]="form.x"`, use the two-way model standalone (`[(value)]`, or
123
140
  `[(checked)]` on checkbox/switch), or classic `[(ngModel)]` / reactive forms
124
141
  via Angular's bridge.
@@ -176,6 +193,26 @@ before writing your own. Full catalog: https://ngwr.dev/reference/components.
176
193
  EXCLUSIVE. `editable` turns on drag and resize; `Alt` + arrows do the same
177
194
  from the keyboard.
178
195
 
196
+ ## Deciding whether to use it
197
+
198
+ Three pages exist for the question before installation, and everything on them
199
+ is meant to be checkable rather than taken on trust:
200
+
201
+ - **Why ngwr, and when not to** — the wedge (nineteen value controls are Signal
202
+ Forms controls; no `ControlValueAccessor` in the library), a comparison against
203
+ Material / PrimeNG / NG-ZORRO / Taiga / Spartan, and a per-competitor "choose
204
+ something else if" section: https://ngwr.dev/start/comparison
205
+ - **What gates a change** — eight gates on every PR, three separate
206
+ accessibility sweeps and what each one cannot see, the two nightly baselines
207
+ and what is accepted in them, plus what the test suite does NOT cover:
208
+ https://ngwr.dev/start/quality
209
+ - **A live Signal Forms demo** you can read before installing anything:
210
+ https://ngwr.dev/start/playground
211
+
212
+ The honest shape of the project, since these pages say it too: one maintainer,
213
+ MIT, six majors shipped between 2026-06-12 and 2026-08-20, a codemod for every
214
+ break a codemod can repair, no commercial support.
215
+
179
216
  ## Resources (machine-readable)
180
217
 
181
218
  - This quick-ref: https://ngwr.dev/llms.txt
@@ -207,9 +244,10 @@ before writing your own. Full catalog: https://ngwr.dev/reference/components.
207
244
  https://ngwr.dev/guides/agent-skill
208
245
  - **Registry — an open format for shareable theme presets and blocks.** One
209
246
  installable unit per JSON file, hosted anywhere; the contract is
210
- https://ngwr.dev/registry/schema.json and two worked examples sit beside it at
211
- `/registry/items/`. `cssVars` keys are `--wr-*` tokens, `entryPoints` names
212
- `ngwr/*` subpaths, and a `files[].target` is always relative:
247
+ https://ngwr.dev/registry/schema.json and four worked examples sit beside it
248
+ at `/registry/items/` — three theme presets and one block. `cssVars` keys are
249
+ `--wr-*` tokens, `entryPoints` names `ngwr/*` subpaths, and a `files[].target`
250
+ is always relative:
213
251
  https://ngwr.dev/guides/registry
214
252
  - All site URLs (for crawlers): https://ngwr.dev/sitemap.xml
215
253
  - Source, README, per-component `.d.ts` types: https://github.com/thekhegay/ngwr
@@ -77,7 +77,7 @@
77
77
  &__code-inline {
78
78
  padding: 0.15em 0.35em;
79
79
  border-radius: var(--wr-border-radius-sm);
80
- background: rgb(var(--wr-color-light-rgb) / 25%);
80
+ background: var(--wr-color-fill);
81
81
  // `-ink`, not the bare intent: code on a tint is text, and the bare colour
82
82
  // fails AA there. The share in `$ink-mix` is calibrated against this tint.
83
83
  color: var(--wr-color-dark-ink);
@@ -95,7 +95,7 @@
95
95
  padding: 0.75rem;
96
96
  overflow-x: auto;
97
97
  border-radius: var(--wr-border-radius-base);
98
- background: rgb(var(--wr-color-light-rgb) / 25%);
98
+ background: var(--wr-color-fill);
99
99
  tab-size: 2;
100
100
  }
101
101
 
@@ -257,7 +257,7 @@
257
257
  }
258
258
 
259
259
  &__th {
260
- background: rgb(var(--wr-color-light-rgb) / 25%);
260
+ background: var(--wr-color-fill);
261
261
  font-weight: var(--wr-font-weight-semibold);
262
262
  }
263
263
 
package/mcp/api.js CHANGED
@@ -7,10 +7,12 @@
7
7
  /**
8
8
  * Angular's signal wrappers, behind whichever namespace alias ng-packagr used.
9
9
  *
10
- * BOTH aliases, which is not decoration: of the 167 shipped declaration files, 99
11
- * import Angular as `_angular_core` and 25 as `i0`. Matching only the first hid
12
- * every binding in those 25 files — including `WrIcon`, whose single required
13
- * input is the entire component.
10
+ * BOTH aliases, which is not decoration: ng-packagr writes `_angular_core` for
11
+ * most of the shipped declarations and `i0` for a couple of dozen of them, and
12
+ * which file gets which moves with every entry point added — so the rule is here
13
+ * and the census deliberately is not. Matching the first alias alone hid every
14
+ * binding in the `i0` files, `WrIcon` among them, whose single required input is
15
+ * the entire component.
14
16
  */
15
17
  const SIGNAL_WRAPPER = /^(?:[A-Za-z_$][\w$]*\.)?(InputSignal|InputSignalWithTransform|ModelSignal|OutputEmitterRef)</;
16
18
  /** Modifiers that may precede a member name in a `.d.ts`. */
package/mcp/catalog.js CHANGED
@@ -11,7 +11,7 @@ import { fileURLToPath } from 'node:url';
11
11
  * The catalog, read from the files the package already ships.
12
12
  *
13
13
  * **No second copy of anything, and that is the design constraint this whole
14
- * server was built under.** `llms-full.txt` (51 KB, 166 entry points) and
14
+ * server was built under.** `llms-full.txt` (~57 KB, 202 entry points) and
15
15
  * `schematics/use/symbol-map.json` (215 symbols) are already in the tarball for
16
16
  * other reasons, and the `.d.ts` bundle carries every signature. A server that
17
17
  * embedded its own index would be a fourth copy to keep in step with the library,
@@ -19,7 +19,7 @@ import { fileURLToPath } from 'node:url';
19
19
  *
20
20
  * What it adds on top is the part none of those files have: a way to ASK. An
21
21
  * agent that does not already know an entry point's name cannot use a `.d.ts`,
22
- * and reading 51 KB of catalog to answer "what renders markdown" is the cost this
22
+ * and reading ~57 KB of catalog to answer "what renders markdown" is the cost this
23
23
  * exists to remove.
24
24
  */
25
25
  class Catalog {
@@ -51,10 +51,15 @@ class Catalog {
51
51
  /**
52
52
  * Does this entry point ship a stylesheet?
53
53
  *
54
- * Read from the package's own `exports` map rather than assumed: 58 of the 166
54
+ * Read from the package's own `exports` map rather than assumed: 94 of the 202
55
55
  * entry points ship no `styles/_index.scss` — the testing harnesses, the
56
56
  * services, the adapters — and telling a consumer to `@use` one of those breaks
57
57
  * their Sass build.
58
+ *
59
+ * Count them with `hasStyles()` rather than by tallying `sass` conditions in the
60
+ * `exports` map: six of those keys are not catalog entry points at all (the root
61
+ * plus `animations`, `breakpoints`, `grid`, `reset`, `typography-utilities`), so
62
+ * that arithmetic comes out six short.
58
63
  */
59
64
  hasStyles(path) {
60
65
  this.exports ??= (() => {
@@ -94,6 +99,38 @@ class Catalog {
94
99
  const file = join('types', `${path.replace(/\//g, '-')}.d.ts`);
95
100
  return this.read(file);
96
101
  }
102
+ /**
103
+ * Whether `symbol` is something Angular accepts in `imports: []`.
104
+ *
105
+ * Read from the SHIPPED declaration file rather than from a table, because the
106
+ * compiler already wrote the answer there: a component, directive or pipe gets
107
+ * a `static ɵcmp` / `ɵdir` / `ɵpipe` whose first type argument is the class. A
108
+ * service gets `ɵprov` instead. So this needs no second copy of anything, and
109
+ * cannot drift — which matters, because the alternative was a hand-kept list
110
+ * and `ng g ngwr:use` now REFUSES a non-declarable: recommending the command
111
+ * for `WrDialog` would hand an agent a line that errors.
112
+ *
113
+ * `null` when the types are not there to read, so a caller can tell "not
114
+ * declarable" from "cannot say".
115
+ */
116
+ declarable(symbol, path) {
117
+ const source = this.types(path);
118
+ if (!source)
119
+ return null;
120
+ // Ask for the declarable markers FIRST and separately. A single alternation
121
+ // over all five answers with whichever appears earliest in the file, and
122
+ // `ɵfac` is always emitted above `ɵcmp` — so the combined form calls every
123
+ // component a non-declarable, while a fixture with no markers at all hides
124
+ // it. Two passes, no ordering assumption.
125
+ const declarable = new RegExp(`static ɵ(?:cmp|dir|pipe): [^;]*<${symbol}[,>]`);
126
+ if (declarable.test(source))
127
+ return true;
128
+ // Only claim "no" for a symbol this file actually declares; a `.d.ts` that
129
+ // merely mentions the name is not evidence, which is the difference between
130
+ // "not declarable" and "cannot say".
131
+ const declared = new RegExp(`static ɵ(?:prov|fac): [^;]*<${symbol}[,>]`);
132
+ return declared.test(source) ? false : null;
133
+ }
97
134
  read(relative) {
98
135
  const file = join(this.root, relative);
99
136
  return existsSync(file) ? readFileSync(file, 'utf8') : null;
package/mcp/providers.js CHANGED
@@ -17,12 +17,25 @@ const REQUIRED_PROVIDERS = [
17
17
  },
18
18
  {
19
19
  test: /^WrDatePicker|^WrCalendar|^WrEventCalendar/,
20
- provider: "provideWrDateAdapter(wrDateFnsAdapter) // from 'ngwr/date-adapter-fns'",
20
+ // The one-line wrapper, not `provideWrDateAdapter({ adapter: WrDateFnsAdapter })`:
21
+ // both compile, but this is one import from one entry point, and it is the form
22
+ // the docs recommend. It used to read `provideWrDateAdapter(wrDateFnsAdapter)`,
23
+ // which is wrong three ways at once — `ngwr/date/adapters/fns` exports neither
24
+ // identifier, and the real `provideWrDateAdapter` takes an options object.
25
+ provider: "provideWrDateFnsAdapter() // from 'ngwr/date/adapters/fns'",
21
26
  why: 'every date mode goes through an adapter; there is no built-in default',
22
27
  },
23
28
  {
24
- test: /^WrT$|^WrI18n/,
25
- provider: "provideWrI18n() + provideWrI18nStaticLoader({ en: wrEn }) // from 'ngwr/i18n'",
29
+ // Spelled out rather than `^WrT(Pipe|Directive)$`: `describeTest` in the
30
+ // skill generator only names alternatives that are bare symbols, so a group
31
+ // here would print "symbols matching …" instead of the two names. It used to
32
+ // read `^WrT$`: `WrT` is a symbol ngwr has never exported, and anchored at
33
+ // both ends it matched neither `WrTPipe` nor `WrTDirective` — so the one rule
34
+ // whose `why` names the pipe and the directive fired for neither of them.
35
+ test: /^WrTPipe$|^WrTDirective$|^WrI18n/,
36
+ // Two entry points, and the comment has to say so: the catalog `wrEn` is
37
+ // `ngwr/i18n/en`, not `ngwr/i18n`, which exports neither catalog.
38
+ provider: "provideWrI18n() + provideWrI18nStaticLoader({ en: wrEn }) // from 'ngwr/i18n' + 'ngwr/i18n/en'",
26
39
  why: 'the pipe and directive read from a catalog you provide',
27
40
  },
28
41
  ];
package/mcp/tools.js CHANGED
@@ -295,6 +295,13 @@ function setup(catalog, symbols) {
295
295
  const missing = found.filter(hit => !hit.entry).map(hit => hit.symbol);
296
296
  const resolved = found.filter((hit) => hit.entry !== null);
297
297
  const providers = REQUIRED_PROVIDERS.filter(required => resolved.some(hit => required.test.test(hit.symbol)));
298
+ // `ng g ngwr:use` refuses anything outside `schematics/use/symbol-map.json`
299
+ // ("ngwr:use: unknown symbol"), and `find()` resolves far more than that — it
300
+ // matches any name on an entry point's `exports:` line, so every harness class
301
+ // and every exported type came back as a command that fails. Ask the same map
302
+ // the schematic asks; the rest get the import line they actually need, since a
303
+ // type or a harness must never go into a component's `imports: []` anyway.
304
+ const knows = catalog.symbolMap();
298
305
  return [
299
306
  '# Setting these up',
300
307
  '',
@@ -303,7 +310,20 @@ function setup(catalog, symbols) {
303
310
  '(prompts for styles, date adapter, density and theme, and prints a bootstrap snippet)',
304
311
  '',
305
312
  '## 2. Wire each symbol into the component that uses it',
306
- ...resolved.map(hit => `ng g ngwr:use ${hit.symbol} --path src/app/some.component.ts # ${hit.entry.path}`),
313
+ ...resolved.map(hit => {
314
+ // Two questions, and the schematic answers "no" to either one. It has to
315
+ // KNOW the symbol, and the symbol has to be declarable — `ng g ngwr:use`
316
+ // refuses a service or a token now rather than splicing it into an
317
+ // `imports: []` where it would not compile. `declarable()` reads the
318
+ // shipped `.d.ts`, so this needs no copy of that list.
319
+ const known = typeof knows[hit.symbol] === 'string';
320
+ const declarable = catalog.declarable(hit.symbol, hit.entry.path);
321
+ if (known && declarable !== false) {
322
+ return `ng g ngwr:use ${hit.symbol} --path src/app/some.component.ts # ${hit.entry.path}`;
323
+ }
324
+ const why = known ? 'not a declarable — inject or call it' : 'ng g ngwr:use does not know this symbol';
325
+ return `import { ${hit.symbol} } from '${hit.entry.path}'; // by hand — ${why}`;
326
+ }),
307
327
  '',
308
328
  '`--path` is a NAMED option, not positional — passing it bare fails with `Unknown argument`.',
309
329
  '',
@@ -13,7 +13,7 @@
13
13
  height: 0.625rem;
14
14
  border-radius: var(--wr-border-radius-pill);
15
15
  overflow: hidden;
16
- background: rgba(var(--wr-color-outline-rgb), 0.5);
16
+ background: var(--wr-color-fill-strong);
17
17
  }
18
18
 
19
19
  &__slice {
@@ -23,11 +23,43 @@
23
23
  padding-bottom: env(safe-area-inset-bottom);
24
24
  // Lift the bottom-pinned sheet clear of the keyboard. margin (not transform)
25
25
  // so it doesn't fight the slide-up animation; transitions smoothly.
26
- margin-bottom: var(--wr-keyboard-inset, 0px);
26
+ // `!important` here for a different reason than the rest of this block: all
27
+ // four sheet users (dialog, select, dropdown, popover) pin the pane with a
28
+ // `GlobalPositionStrategy…bottom('0')`, and `apply()` writes that offset out
29
+ // as an INLINE `margin-bottom: 0px` on this very element, on every
30
+ // `updatePosition`. Without it the lift can never compute to anything but 0.
31
+ margin-bottom: var(--wr-keyboard-inset, 0px) !important;
27
32
  transition: margin-bottom var(--wr-overlay-duration, 0.2s) var(--wr-overlay-ease, ease-out);
28
33
  animation: wr-overlay-sheet-up var(--wr-overlay-duration, 0.2s) var(--wr-overlay-ease, ease-out) !important;
29
34
  }
30
35
 
36
+ // The pane above is the sheet, but only the dialog PAINTS it — there the pane
37
+ // IS the panel. For select, dropdown and popover the pane is a transparent
38
+ // wrapper and the visible surface is its child, so everything above lands on a
39
+ // box nobody can see: the child keeps its own content width and its own
40
+ // all-round radius. `.cdk-overlay-pane` is a row flexbox, so an unsized child
41
+ // shrinks to fit its content and sits against the inline-start edge — dropdown
42
+ // rendered a 160px card in a 375px sheet, popover a 288px one, while
43
+ // `.wr-select-panel` filled it only because select declares `width: 100%` for
44
+ // itself. Stretching every sheet child here is what makes that a property of
45
+ // the sheet rather than a per-component opt-in the next one forgets.
46
+ //
47
+ // The two bottom corners go with it: a sheet is docked flush against the
48
+ // bottom of the screen, so a rounded corner there is a wedge of backdrop
49
+ // sitting on the screen edge. The pane's own `0 0` above says the same thing
50
+ // for the dialog.
51
+ //
52
+ // `.wr-dialog__close` is the one direct child that is NOT a sheet surface —
53
+ // the dialog service parks it absolutely in the panel's corner, at its own
54
+ // 24px box and its own radius. `dialog/styles/_index.scss` excludes it from
55
+ // its sibling rule for the same reason.
56
+ .wr-overlay-sheet > *:not(.wr-dialog__close) {
57
+ width: 100% !important;
58
+ max-width: 100% !important;
59
+ border-bottom-left-radius: 0 !important;
60
+ border-bottom-right-radius: 0 !important;
61
+ }
62
+
31
63
  // Dim + blur behind a sheet — for overlays that otherwise have no backdrop.
32
64
  .wr-overlay-backdrop {
33
65
  background: var(--wr-color-overlay);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngwr",
3
- "version": "11.2.0",
3
+ "version": "12.1.0",
4
4
  "bin": {
5
5
  "ngwr-mcp": "./mcp/server.js"
6
6
  },
@@ -43,13 +43,18 @@
43
43
  "@angular/cdk": ">=22.0.0",
44
44
  "@angular/common": ">=22.0.0",
45
45
  "@angular/core": ">=22.0.0",
46
+ "@angular/forms": ">=22.0.0",
46
47
  "@angular/platform-browser": ">=22.0.0",
48
+ "@angular/router": ">=22.0.0",
47
49
  "rxjs": "^7.0.0",
48
50
  "date-fns": "^3.0.0 || ^4.0.0",
49
51
  "luxon": "^3.0.0",
50
52
  "lucide": ">=1.0.0"
51
53
  },
52
54
  "peerDependenciesMeta": {
55
+ "@angular/router": {
56
+ "optional": true
57
+ },
53
58
  "date-fns": {
54
59
  "optional": true
55
60
  },
@@ -712,22 +717,22 @@
712
717
  "types": "./types/ngwr-cookie.d.ts",
713
718
  "default": "./fesm2022/ngwr-cookie.mjs"
714
719
  },
715
- "./date-adapter": {
716
- "types": "./types/ngwr-date-adapter.d.ts",
717
- "default": "./fesm2022/ngwr-date-adapter.mjs"
718
- },
719
- "./date-adapter-fns": {
720
- "types": "./types/ngwr-date-adapter-fns.d.ts",
721
- "default": "./fesm2022/ngwr-date-adapter-fns.mjs"
722
- },
723
- "./date-adapter-luxon": {
724
- "types": "./types/ngwr-date-adapter-luxon.d.ts",
725
- "default": "./fesm2022/ngwr-date-adapter-luxon.mjs"
720
+ "./date": {
721
+ "types": "./types/ngwr-date.d.ts",
722
+ "default": "./fesm2022/ngwr-date.mjs"
726
723
  },
727
724
  "./date-picker/testing": {
728
725
  "types": "./types/ngwr-date-picker-testing.d.ts",
729
726
  "default": "./fesm2022/ngwr-date-picker-testing.mjs"
730
727
  },
728
+ "./date/adapters/fns": {
729
+ "types": "./types/ngwr-date-adapters-fns.d.ts",
730
+ "default": "./fesm2022/ngwr-date-adapters-fns.mjs"
731
+ },
732
+ "./date/adapters/luxon": {
733
+ "types": "./types/ngwr-date-adapters-luxon.d.ts",
734
+ "default": "./fesm2022/ngwr-date-adapters-luxon.mjs"
735
+ },
731
736
  "./decrypt-text/testing": {
732
737
  "types": "./types/ngwr-decrypt-text-testing.d.ts",
733
738
  "default": "./fesm2022/ngwr-decrypt-text-testing.mjs"
@@ -9,7 +9,7 @@
9
9
  padding-block: 0.5rem;
10
10
 
11
11
  &--disabled {
12
- opacity: 0.6;
12
+ opacity: var(--wr-disabled-opacity);
13
13
  pointer-events: none;
14
14
  }
15
15
 
@@ -48,6 +48,17 @@
48
48
  display: flex;
49
49
  align-items: center;
50
50
  gap: 0.25rem;
51
+ // `__inner` wraps, but the whole numbered strip is ONE of its children, so
52
+ // that wrap could never help: at `size="lg"` the strip is 9 cells of 2.5rem
53
+ // plus gaps = 392px, which at 375px left the last page number cut off at the
54
+ // screen edge and the next-page arrow off it entirely. Wrap the cells
55
+ // themselves. A pager scrolls badly — page 12 is the one you cannot reach —
56
+ // and a second row costs nothing when the first one fits.
57
+ flex-wrap: wrap;
58
+ // A wrapped row has to follow the pager's own alignment: `__inner` carries
59
+ // it, and a centred or end-aligned pager whose second row packed to the
60
+ // start would read as a different control.
61
+ justify-content: inherit;
51
62
 
52
63
  .wr-btn {
53
64
  min-width: var(--wr-pagination-cell, 2rem);
@@ -62,6 +73,17 @@
62
73
  }
63
74
  }
64
75
 
76
+ // `__nav` is a plain flex row, so it already mirrors: under `dir="rtl"` the
77
+ // previous button lays out at the right edge. Its chevron is drawn pointing
78
+ // physically left, though, so it ends up aiming at the pages it moves AWAY
79
+ // from. Turn the glyphs around with the strip, the same way the carousel's
80
+ // arrows do — "previous" is the inline start in both directions.
81
+ &__nav-btn {
82
+ [dir='rtl'] & svg {
83
+ transform: scaleX(-1);
84
+ }
85
+ }
86
+
65
87
  &__ellipsis {
66
88
  display: inline-flex;
67
89
  min-width: var(--wr-pagination-cell, 2rem);
@@ -77,10 +77,12 @@ $_arrow-placement: (
77
77
  /// `originX: start | end` — plain `top` / `bottom` use `center`, which mirrors
78
78
  /// to itself — and CDK resolves start / end against `Directionality`. So under
79
79
  /// `dir="rtl"` the panel lands on the mirrored side of the trigger while the
80
- /// modifier class keeps its requested name (it is set from the `position` input,
81
- /// and there are no fallback positions to change it), and the arrow has to
82
- /// travel with the panel. Same for the `-start` / `-end` alignment along a
83
- /// horizontal edge.
80
+ /// modifier class keeps its LTR name, and the arrow has to travel with the
81
+ /// panel. Same for the `-start` / `-end` alignment along a horizontal edge.
82
+ ///
83
+ /// The class names the placement the panel ACTUALLY took, not the requested one:
84
+ /// each entry in `WR_POPOVER_FALLBACKS` carries its own `panelClass`, so a flip
85
+ /// swaps the modifier and this loop moves the arrow with it.
84
86
  @mixin _arrow-at($edge, $align, $pull) {
85
87
  @if $edge == left {
86
88
  inset-inline-start: -$pull;
@@ -197,9 +199,12 @@ $_arrow-placement: (
197
199
  // `<… [wrPopover]="'text'" mode="tooltip">` instead.)
198
200
  //
199
201
 
200
- .wr-tooltip-overlay {
201
- pointer-events: none;
202
- }
202
+ // The pane is deliberately NOT `pointer-events: none`. WCAG 1.4.13 asks that a
203
+ // tooltip stay up while the pointer is moved onto it — someone reading a long
204
+ // hint at 400% zoom has to be able to reach the text — and an inert pane makes
205
+ // the `mouseenter` that keeps it open impossible to fire. It does mean the chip
206
+ // now intercepts what is under it, which is the area it draws on and no more;
207
+ // the one part of that worth avoiding is the arrow, opted back out below.
203
208
 
204
209
  .wr-tooltip {
205
210
  // Follows the theme instead of inverting against it: on a dark canvas the
@@ -238,6 +243,10 @@ $_arrow-placement: (
238
243
  height: $_arrow;
239
244
  background: var(--wr-tooltip-bg);
240
245
  transform: rotate(45deg);
246
+ // The one piece that stays inert: the arrow points AT the trigger and
247
+ // overlaps it, so a hittable arrow would eat clicks meant for the control
248
+ // the tooltip describes.
249
+ pointer-events: none;
241
250
  }
242
251
  }
243
252
 
@@ -8,7 +8,7 @@
8
8
  // Defaults — color modifiers override the bar color.
9
9
  --wr-progress-height: 0.5rem;
10
10
  --wr-progress-radius: var(--wr-border-radius-pill);
11
- --wr-progress-track: rgba(var(--wr-color-outline-rgb), 0.35);
11
+ --wr-progress-track: var(--wr-color-fill);
12
12
  --wr-progress-bar: var(--wr-color-primary);
13
13
 
14
14
  // `flex: 1 1 100%` here would claim 100% basis on the flex MAIN axis —