ngwr 11.1.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/README.md +7 -7
  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/circular-text/styles/_index.scss +11 -0
  10. package/collapse/styles/_index.scss +2 -2
  11. package/color-picker/styles/_index.scss +3 -3
  12. package/command-palette/styles/_index.scss +12 -0
  13. package/compare/styles/_index.scss +18 -2
  14. package/context-menu/styles/_index.scss +21 -2
  15. package/date-picker/styles/_index.scss +5 -5
  16. package/descriptions/styles/_index.scss +1 -1
  17. package/drag-drop/styles/_index.scss +28 -1
  18. package/drawer/styles/_index.scss +37 -0
  19. package/dropdown/styles/_index.scss +2 -2
  20. package/event-calendar/styles/_index.scss +67 -10
  21. package/fesm2022/ngwr-action-sheet-testing.mjs +313 -0
  22. package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -0
  23. package/fesm2022/ngwr-action-sheet.mjs +3 -3
  24. package/fesm2022/ngwr-affix.mjs +3 -3
  25. package/fesm2022/ngwr-alert.mjs +3 -3
  26. package/fesm2022/ngwr-anchor.mjs +3 -3
  27. package/fesm2022/ngwr-aurora.mjs +3 -3
  28. package/fesm2022/ngwr-avatar.mjs +3 -3
  29. package/fesm2022/ngwr-back-top.mjs +3 -3
  30. package/fesm2022/ngwr-badge.mjs +6 -6
  31. package/fesm2022/ngwr-bar-chart-testing.mjs +107 -0
  32. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -0
  33. package/fesm2022/ngwr-bar-chart.mjs +3 -3
  34. package/fesm2022/ngwr-blur-text-testing.mjs +203 -0
  35. package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -0
  36. package/fesm2022/ngwr-blur-text.mjs +18 -4
  37. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  38. package/fesm2022/ngwr-border-glow-testing.mjs +325 -0
  39. package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -0
  40. package/fesm2022/ngwr-border-glow.mjs +4 -4
  41. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  42. package/fesm2022/ngwr-breadcrumbs.mjs +29 -17
  43. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  44. package/fesm2022/ngwr-burger.mjs +3 -3
  45. package/fesm2022/ngwr-button.mjs +6 -6
  46. package/fesm2022/ngwr-calendar-heatmap-testing.mjs +95 -0
  47. package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -0
  48. package/fesm2022/ngwr-calendar-heatmap.mjs +17 -5
  49. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  50. package/fesm2022/ngwr-calendar-testing.mjs +368 -0
  51. package/fesm2022/ngwr-calendar-testing.mjs.map +1 -0
  52. package/fesm2022/ngwr-calendar.mjs +228 -10
  53. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  54. package/fesm2022/ngwr-card.mjs +10 -10
  55. package/fesm2022/ngwr-card.mjs.map +1 -1
  56. package/fesm2022/ngwr-carousel.mjs +124 -24
  57. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  58. package/fesm2022/ngwr-cascader.mjs +60 -5
  59. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  60. package/fesm2022/ngwr-checkbox.mjs +14 -6
  61. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  62. package/fesm2022/ngwr-circular-text-testing.mjs +230 -0
  63. package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -0
  64. package/fesm2022/ngwr-circular-text.mjs +4 -4
  65. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  66. package/fesm2022/ngwr-click-spark.mjs +27 -7
  67. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  68. package/fesm2022/ngwr-clipboard.mjs +3 -3
  69. package/fesm2022/ngwr-collapse.mjs +9 -9
  70. package/fesm2022/ngwr-color-picker-testing.mjs +452 -0
  71. package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -0
  72. package/fesm2022/ngwr-color-picker.mjs +126 -10
  73. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  74. package/fesm2022/ngwr-command-palette.mjs +14 -5
  75. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  76. package/fesm2022/ngwr-compare.mjs +3 -3
  77. package/fesm2022/ngwr-confetti.mjs +31 -6
  78. package/fesm2022/ngwr-confetti.mjs.map +1 -1
  79. package/fesm2022/ngwr-config.mjs +9 -0
  80. package/fesm2022/ngwr-config.mjs.map +1 -1
  81. package/fesm2022/ngwr-context-menu-testing.mjs +30 -11
  82. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
  83. package/fesm2022/ngwr-context-menu.mjs +358 -48
  84. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  85. package/fesm2022/ngwr-cookie.mjs +3 -3
  86. package/fesm2022/ngwr-counter.mjs +25 -9
  87. package/fesm2022/ngwr-counter.mjs.map +1 -1
  88. package/fesm2022/{ngwr-date-adapter-fns.mjs → ngwr-date-adapters-fns.mjs} +37 -10
  89. package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -0
  90. package/fesm2022/{ngwr-date-adapter-luxon.mjs → ngwr-date-adapters-luxon.mjs} +5 -5
  91. package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -0
  92. package/fesm2022/ngwr-date-picker-testing.mjs +21 -85
  93. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
  94. package/fesm2022/ngwr-date-picker.mjs +119 -37
  95. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  96. package/fesm2022/{ngwr-date-adapter.mjs → ngwr-date.mjs} +36 -10
  97. package/fesm2022/ngwr-date.mjs.map +1 -0
  98. package/fesm2022/ngwr-decrypt-text-testing.mjs +261 -0
  99. package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -0
  100. package/fesm2022/ngwr-decrypt-text.mjs +9 -4
  101. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  102. package/fesm2022/ngwr-density.mjs +6 -6
  103. package/fesm2022/ngwr-descriptions.mjs +6 -6
  104. package/fesm2022/ngwr-dialog.mjs +73 -18
  105. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  106. package/fesm2022/ngwr-directives.mjs +12 -12
  107. package/fesm2022/ngwr-divider.mjs +52 -5
  108. package/fesm2022/ngwr-divider.mjs.map +1 -1
  109. package/fesm2022/ngwr-donut-chart-testing.mjs +97 -0
  110. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -0
  111. package/fesm2022/ngwr-donut-chart.mjs +7 -7
  112. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  113. package/fesm2022/ngwr-drag-drop.mjs +160 -11
  114. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  115. package/fesm2022/ngwr-drawer.mjs +156 -64
  116. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  117. package/fesm2022/ngwr-dropdown.mjs +58 -12
  118. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  119. package/fesm2022/ngwr-empty.mjs +3 -3
  120. package/fesm2022/ngwr-event-calendar-testing.mjs +446 -0
  121. package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -0
  122. package/fesm2022/ngwr-event-calendar.mjs +66 -28
  123. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  124. package/fesm2022/ngwr-falling-text-testing.mjs +220 -0
  125. package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -0
  126. package/fesm2022/ngwr-falling-text.mjs +75 -46
  127. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  128. package/fesm2022/ngwr-file-upload.mjs +3 -3
  129. package/fesm2022/ngwr-form.mjs +32 -15
  130. package/fesm2022/ngwr-form.mjs.map +1 -1
  131. package/fesm2022/ngwr-fuzzy-text-testing.mjs +134 -0
  132. package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -0
  133. package/fesm2022/ngwr-fuzzy-text.mjs +21 -11
  134. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  135. package/fesm2022/ngwr-gauge-testing.mjs +86 -0
  136. package/fesm2022/ngwr-gauge-testing.mjs.map +1 -0
  137. package/fesm2022/ngwr-gauge.mjs +3 -3
  138. package/fesm2022/ngwr-glitch-text-testing.mjs +215 -0
  139. package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -0
  140. package/fesm2022/ngwr-glitch-text.mjs +7 -7
  141. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  142. package/fesm2022/ngwr-gradient-text-testing.mjs +258 -0
  143. package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -0
  144. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  145. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  146. package/fesm2022/ngwr-hotkey.mjs +24 -9
  147. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  148. package/fesm2022/ngwr-i18n-en.mjs +87 -1
  149. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  150. package/fesm2022/ngwr-i18n-ru.mjs +69 -1
  151. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  152. package/fesm2022/ngwr-i18n.mjs +26 -15
  153. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  154. package/fesm2022/ngwr-icon.mjs +6 -6
  155. package/fesm2022/ngwr-image-cropper-testing.mjs +200 -0
  156. package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -0
  157. package/fesm2022/ngwr-image-cropper.mjs +156 -11
  158. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  159. package/fesm2022/ngwr-input-number-testing.mjs +15 -10
  160. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
  161. package/fesm2022/ngwr-input-number.mjs +89 -15
  162. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  163. package/fesm2022/ngwr-input-otp-testing.mjs +12 -6
  164. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
  165. package/fesm2022/ngwr-input-otp.mjs +24 -5
  166. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  167. package/fesm2022/ngwr-input.mjs +15 -15
  168. package/fesm2022/ngwr-keyboard.mjs +3 -3
  169. package/fesm2022/ngwr-knob-testing.mjs +220 -0
  170. package/fesm2022/ngwr-knob-testing.mjs.map +1 -0
  171. package/fesm2022/ngwr-knob.mjs +3 -3
  172. package/fesm2022/ngwr-layout.mjs +15 -15
  173. package/fesm2022/ngwr-lightbox-testing.mjs +223 -0
  174. package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -0
  175. package/fesm2022/ngwr-lightbox.mjs +11 -4
  176. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  177. package/fesm2022/ngwr-line-chart-testing.mjs +119 -0
  178. package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -0
  179. package/fesm2022/ngwr-line-chart.mjs +73 -26
  180. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  181. package/fesm2022/ngwr-list.mjs +7 -7
  182. package/fesm2022/ngwr-list.mjs.map +1 -1
  183. package/fesm2022/ngwr-loading-bar.mjs +7 -7
  184. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  185. package/fesm2022/ngwr-markdown.mjs +66 -8
  186. package/fesm2022/ngwr-markdown.mjs.map +1 -1
  187. package/fesm2022/ngwr-marquee-testing.mjs +336 -0
  188. package/fesm2022/ngwr-marquee-testing.mjs.map +1 -0
  189. package/fesm2022/ngwr-marquee.mjs +4 -4
  190. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  191. package/fesm2022/ngwr-media.mjs +3 -3
  192. package/fesm2022/ngwr-mention.mjs +108 -13
  193. package/fesm2022/ngwr-mention.mjs.map +1 -1
  194. package/fesm2022/ngwr-meta.mjs +6 -6
  195. package/fesm2022/ngwr-meter-group-testing.mjs +100 -0
  196. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -0
  197. package/fesm2022/ngwr-meter-group.mjs +3 -3
  198. package/fesm2022/ngwr-overlay.mjs +34 -7
  199. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  200. package/fesm2022/ngwr-page-header.mjs +3 -3
  201. package/fesm2022/ngwr-pagination-testing.mjs +6 -6
  202. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
  203. package/fesm2022/ngwr-pagination.mjs +17 -13
  204. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  205. package/fesm2022/ngwr-pipes.mjs +39 -26
  206. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  207. package/fesm2022/ngwr-platform.mjs +9 -9
  208. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  209. package/fesm2022/ngwr-popover-testing.mjs +7 -2
  210. package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
  211. package/fesm2022/ngwr-popover.mjs +169 -33
  212. package/fesm2022/ngwr-popover.mjs.map +1 -1
  213. package/fesm2022/ngwr-progress.mjs +3 -3
  214. package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
  215. package/fesm2022/ngwr-qr.mjs +42 -5
  216. package/fesm2022/ngwr-qr.mjs.map +1 -1
  217. package/fesm2022/ngwr-radio.mjs +6 -6
  218. package/fesm2022/ngwr-rating.mjs +3 -3
  219. package/fesm2022/ngwr-result.mjs +21 -30
  220. package/fesm2022/ngwr-result.mjs.map +1 -1
  221. package/fesm2022/ngwr-rotating-text-testing.mjs +220 -0
  222. package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -0
  223. package/fesm2022/ngwr-rotating-text.mjs +4 -4
  224. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  225. package/fesm2022/ngwr-scroll.mjs +3 -3
  226. package/fesm2022/ngwr-segmented-testing.mjs +14 -1
  227. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
  228. package/fesm2022/ngwr-segmented.mjs +29 -6
  229. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  230. package/fesm2022/ngwr-select.mjs +227 -43
  231. package/fesm2022/ngwr-select.mjs.map +1 -1
  232. package/fesm2022/ngwr-shiny-text-testing.mjs +237 -0
  233. package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -0
  234. package/fesm2022/ngwr-shiny-text.mjs +11 -9
  235. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  236. package/fesm2022/ngwr-sidebar.mjs +31 -16
  237. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  238. package/fesm2022/ngwr-skeleton.mjs +3 -3
  239. package/fesm2022/ngwr-slider.mjs +143 -14
  240. package/fesm2022/ngwr-slider.mjs.map +1 -1
  241. package/fesm2022/ngwr-sparkline-testing.mjs +76 -0
  242. package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -0
  243. package/fesm2022/ngwr-sparkline.mjs +3 -3
  244. package/fesm2022/ngwr-speed-dial-testing.mjs +281 -0
  245. package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -0
  246. package/fesm2022/ngwr-speed-dial.mjs +27 -12
  247. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  248. package/fesm2022/ngwr-spinner.mjs +3 -3
  249. package/fesm2022/ngwr-splash-cursor-testing.mjs +89 -0
  250. package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -0
  251. package/fesm2022/ngwr-splash-cursor.mjs +3 -3
  252. package/fesm2022/ngwr-split-text-testing.mjs +224 -0
  253. package/fesm2022/ngwr-split-text-testing.mjs.map +1 -0
  254. package/fesm2022/ngwr-split-text.mjs +31 -5
  255. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  256. package/fesm2022/ngwr-splitter-testing.mjs +245 -0
  257. package/fesm2022/ngwr-splitter-testing.mjs.map +1 -0
  258. package/fesm2022/ngwr-splitter.mjs +3 -3
  259. package/fesm2022/ngwr-spotlight-card-testing.mjs +368 -0
  260. package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -0
  261. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  262. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  263. package/fesm2022/ngwr-squircle.mjs +6 -6
  264. package/fesm2022/ngwr-star-border-testing.mjs +172 -0
  265. package/fesm2022/ngwr-star-border-testing.mjs.map +1 -0
  266. package/fesm2022/ngwr-star-border.mjs +4 -4
  267. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  268. package/fesm2022/ngwr-statistic.mjs +9 -9
  269. package/fesm2022/ngwr-stepper-testing.mjs +8 -8
  270. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
  271. package/fesm2022/ngwr-stepper.mjs +33 -8
  272. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  273. package/fesm2022/ngwr-storage.mjs +17 -5
  274. package/fesm2022/ngwr-storage.mjs.map +1 -1
  275. package/fesm2022/ngwr-switch.mjs +3 -3
  276. package/fesm2022/ngwr-table.mjs +110 -40
  277. package/fesm2022/ngwr-table.mjs.map +1 -1
  278. package/fesm2022/ngwr-tabs-testing.mjs +11 -10
  279. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
  280. package/fesm2022/ngwr-tabs.mjs +51 -11
  281. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  282. package/fesm2022/ngwr-textarea.mjs +3 -3
  283. package/fesm2022/ngwr-theme.mjs +181 -4
  284. package/fesm2022/ngwr-theme.mjs.map +1 -1
  285. package/fesm2022/ngwr-tilt-card-testing.mjs +190 -0
  286. package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -0
  287. package/fesm2022/ngwr-tilt-card.mjs +26 -8
  288. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  289. package/fesm2022/ngwr-timeline.mjs +6 -6
  290. package/fesm2022/ngwr-toast.mjs +44 -15
  291. package/fesm2022/ngwr-toast.mjs.map +1 -1
  292. package/fesm2022/ngwr-toolbar.mjs +3 -3
  293. package/fesm2022/ngwr-tour-testing.mjs +173 -0
  294. package/fesm2022/ngwr-tour-testing.mjs.map +1 -0
  295. package/fesm2022/ngwr-tour.mjs +34 -10
  296. package/fesm2022/ngwr-tour.mjs.map +1 -1
  297. package/fesm2022/ngwr-transfer.mjs +3 -3
  298. package/fesm2022/ngwr-tree.mjs +36 -11
  299. package/fesm2022/ngwr-tree.mjs.map +1 -1
  300. package/fesm2022/ngwr-typewriter-testing.mjs +242 -0
  301. package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -0
  302. package/fesm2022/ngwr-typewriter.mjs +13 -5
  303. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  304. package/fesm2022/ngwr-typography.mjs +3 -3
  305. package/fesm2022/ngwr-utils.mjs +5 -2
  306. package/fesm2022/ngwr-utils.mjs.map +1 -1
  307. package/fesm2022/ngwr-version.mjs +1 -1
  308. package/fesm2022/ngwr-version.mjs.map +1 -1
  309. package/fesm2022/ngwr-virtual-scroll.mjs +4 -4
  310. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  311. package/fesm2022/ngwr-waves-testing.mjs +128 -0
  312. package/fesm2022/ngwr-waves-testing.mjs.map +1 -0
  313. package/fesm2022/ngwr-waves.mjs +4 -4
  314. package/fesm2022/ngwr-waves.mjs.map +1 -1
  315. package/fesm2022/ngwr-window-testing.mjs +361 -0
  316. package/fesm2022/ngwr-window-testing.mjs.map +1 -0
  317. package/fesm2022/ngwr-window.mjs +175 -31
  318. package/fesm2022/ngwr-window.mjs.map +1 -1
  319. package/file-upload/styles/_index.scss +2 -2
  320. package/glitch-text/styles/_index.scss +27 -12
  321. package/i18n/en.json +71 -7
  322. package/i18n/ru.json +71 -7
  323. package/image-cropper/styles/_index.scss +19 -0
  324. package/input/styles/_index.scss +2 -2
  325. package/input-number/styles/_index.scss +2 -2
  326. package/input-otp/styles/_index.scss +9 -2
  327. package/knob/styles/_index.scss +1 -1
  328. package/lightbox/styles/_index.scss +16 -2
  329. package/line-chart/styles/_index.scss +28 -14
  330. package/list/styles/_index.scss +1 -1
  331. package/llms-full.txt +161 -19
  332. package/llms.txt +45 -10
  333. package/markdown/styles/_index.scss +3 -3
  334. package/mcp/api.js +6 -4
  335. package/mcp/catalog.js +40 -3
  336. package/mcp/providers.js +42 -0
  337. package/mcp/tools.js +22 -30
  338. package/meter-group/styles/_index.scss +1 -1
  339. package/overlay/styles/_index.scss +33 -1
  340. package/package.json +161 -12
  341. package/pagination/styles/_index.scss +23 -1
  342. package/popover/styles/_index.scss +16 -7
  343. package/progress/styles/_index.scss +1 -1
  344. package/radio/styles/_index.scss +2 -2
  345. package/rating/styles/_index.scss +1 -1
  346. package/schematics/collection.json +1 -1
  347. package/schematics/migrations/v12/index.js +65 -0
  348. package/schematics/migrations/v7/index.js +12 -1
  349. package/schematics/migrations/v8/index.js +10 -1
  350. package/schematics/migrations.json +5 -0
  351. package/schematics/ng-add/index.js +8 -3
  352. package/schematics/provider/index.js +80 -13
  353. package/schematics/use/index.js +9 -129
  354. package/schematics/use/rule.js +206 -0
  355. package/schematics/use/symbol-map.json +4 -4
  356. package/segmented/styles/_index.scss +14 -3
  357. package/select/styles/_index.scss +14 -2
  358. package/sidebar/styles/_index.scss +12 -10
  359. package/skills/ngwr/SKILL.md +117 -0
  360. package/skills/ngwr/references/catalog.md +212 -0
  361. package/skills/ngwr/references/setup.md +78 -0
  362. package/slider/styles/_index.scss +1 -1
  363. package/speed-dial/styles/_index.scss +1 -1
  364. package/stepper/styles/_index.scss +12 -3
  365. package/switch/styles/_index.scss +2 -2
  366. package/table/styles/_index.scss +61 -12
  367. package/tabs/styles/_index.scss +1 -1
  368. package/textarea/styles/_index.scss +1 -1
  369. package/theme/styles/_colors.scss +142 -56
  370. package/theme/styles/_dark.scss +46 -3
  371. package/theme/styles/_focus.scss +28 -5
  372. package/theme/styles/_mixins.scss +1 -1
  373. package/theme/styles/_variables.scss +67 -0
  374. package/transfer/styles/_index.scss +26 -3
  375. package/tree/styles/_index.scss +29 -6
  376. package/types/ngwr-action-sheet-testing.d.ts +260 -0
  377. package/types/ngwr-bar-chart-testing.d.ts +85 -0
  378. package/types/ngwr-blur-text-testing.d.ts +180 -0
  379. package/types/ngwr-blur-text.d.ts +20 -4
  380. package/types/ngwr-border-glow-testing.d.ts +219 -0
  381. package/types/ngwr-breadcrumbs.d.ts +17 -10
  382. package/types/ngwr-calendar-heatmap-testing.d.ts +79 -0
  383. package/types/ngwr-calendar-testing.d.ts +277 -0
  384. package/types/ngwr-calendar.d.ts +76 -0
  385. package/types/ngwr-carousel.d.ts +85 -6
  386. package/types/ngwr-cascader.d.ts +17 -0
  387. package/types/ngwr-checkbox.d.ts +13 -0
  388. package/types/ngwr-circular-text-testing.d.ts +196 -0
  389. package/types/ngwr-click-spark.d.ts +4 -0
  390. package/types/ngwr-color-picker-testing.d.ts +299 -0
  391. package/types/ngwr-color-picker.d.ts +34 -2
  392. package/types/ngwr-confetti.d.ts +8 -0
  393. package/types/ngwr-config.d.ts +10 -1
  394. package/types/ngwr-context-menu-testing.d.ts +24 -11
  395. package/types/ngwr-context-menu.d.ts +71 -1
  396. package/types/ngwr-counter.d.ts +1 -0
  397. package/types/{ngwr-date-adapter-fns.d.ts → ngwr-date-adapters-fns.d.ts} +33 -6
  398. package/types/{ngwr-date-adapter-luxon.d.ts → ngwr-date-adapters-luxon.d.ts} +1 -1
  399. package/types/ngwr-date-picker-testing.d.ts +17 -72
  400. package/types/ngwr-date-picker.d.ts +8 -4
  401. package/types/{ngwr-date-adapter.d.ts → ngwr-date.d.ts} +24 -5
  402. package/types/ngwr-decrypt-text-testing.d.ts +222 -0
  403. package/types/ngwr-dialog.d.ts +38 -1
  404. package/types/ngwr-divider.d.ts +25 -0
  405. package/types/ngwr-donut-chart-testing.d.ts +83 -0
  406. package/types/ngwr-donut-chart.d.ts +3 -3
  407. package/types/ngwr-drag-drop.d.ts +56 -2
  408. package/types/ngwr-drawer.d.ts +68 -5
  409. package/types/ngwr-dropdown.d.ts +9 -0
  410. package/types/ngwr-event-calendar-testing.d.ts +301 -0
  411. package/types/ngwr-event-calendar.d.ts +17 -8
  412. package/types/ngwr-falling-text-testing.d.ts +188 -0
  413. package/types/ngwr-falling-text.d.ts +1 -1
  414. package/types/ngwr-form.d.ts +12 -2
  415. package/types/ngwr-fuzzy-text-testing.d.ts +130 -0
  416. package/types/ngwr-gauge-testing.d.ts +71 -0
  417. package/types/ngwr-glitch-text-testing.d.ts +201 -0
  418. package/types/ngwr-gradient-text-testing.d.ts +186 -0
  419. package/types/ngwr-i18n.d.ts +13 -4
  420. package/types/ngwr-image-cropper-testing.d.ts +173 -0
  421. package/types/ngwr-image-cropper.d.ts +71 -5
  422. package/types/ngwr-input-number-testing.d.ts +15 -10
  423. package/types/ngwr-input-number.d.ts +44 -5
  424. package/types/ngwr-input-otp-testing.d.ts +12 -6
  425. package/types/ngwr-input-otp.d.ts +15 -1
  426. package/types/ngwr-knob-testing.d.ts +150 -0
  427. package/types/ngwr-lightbox-testing.d.ts +154 -0
  428. package/types/ngwr-lightbox.d.ts +6 -0
  429. package/types/ngwr-line-chart-testing.d.ts +93 -0
  430. package/types/ngwr-line-chart.d.ts +20 -3
  431. package/types/ngwr-markdown.d.ts +11 -0
  432. package/types/ngwr-marquee-testing.d.ts +280 -0
  433. package/types/ngwr-mention.d.ts +32 -0
  434. package/types/ngwr-meter-group-testing.d.ts +77 -0
  435. package/types/ngwr-overlay.d.ts +20 -1
  436. package/types/ngwr-pagination-testing.d.ts +4 -4
  437. package/types/ngwr-pipes.d.ts +1 -1
  438. package/types/ngwr-popover-testing.d.ts +7 -2
  439. package/types/ngwr-popover.d.ts +1 -0
  440. package/types/ngwr-result.d.ts +6 -0
  441. package/types/ngwr-rotating-text-testing.d.ts +191 -0
  442. package/types/ngwr-segmented-testing.d.ts +9 -0
  443. package/types/ngwr-segmented.d.ts +21 -1
  444. package/types/ngwr-select.d.ts +100 -6
  445. package/types/ngwr-shiny-text-testing.d.ts +165 -0
  446. package/types/ngwr-shiny-text.d.ts +4 -2
  447. package/types/ngwr-sidebar.d.ts +14 -5
  448. package/types/ngwr-slider.d.ts +84 -1
  449. package/types/ngwr-sparkline-testing.d.ts +69 -0
  450. package/types/ngwr-speed-dial-testing.d.ts +199 -0
  451. package/types/ngwr-speed-dial.d.ts +22 -3
  452. package/types/ngwr-splash-cursor-testing.d.ts +95 -0
  453. package/types/ngwr-split-text-testing.d.ts +209 -0
  454. package/types/ngwr-split-text.d.ts +21 -0
  455. package/types/ngwr-splitter-testing.d.ts +174 -0
  456. package/types/ngwr-spotlight-card-testing.d.ts +303 -0
  457. package/types/ngwr-star-border-testing.d.ts +135 -0
  458. package/types/ngwr-stepper-testing.d.ts +5 -5
  459. package/types/ngwr-stepper.d.ts +8 -0
  460. package/types/ngwr-storage.d.ts +1 -0
  461. package/types/ngwr-table.d.ts +114 -12
  462. package/types/ngwr-tabs-testing.d.ts +11 -10
  463. package/types/ngwr-tabs.d.ts +2 -0
  464. package/types/ngwr-theme.d.ts +82 -1
  465. package/types/ngwr-tilt-card-testing.d.ts +158 -0
  466. package/types/ngwr-tilt-card.d.ts +2 -0
  467. package/types/ngwr-toast.d.ts +14 -5
  468. package/types/ngwr-tour-testing.d.ts +143 -0
  469. package/types/ngwr-tour.d.ts +22 -4
  470. package/types/ngwr-tree.d.ts +12 -4
  471. package/types/ngwr-typewriter-testing.d.ts +211 -0
  472. package/types/ngwr-utils.d.ts +5 -2
  473. package/types/ngwr-version.d.ts +1 -1
  474. package/types/ngwr-waves-testing.d.ts +121 -0
  475. package/types/ngwr-window-testing.d.ts +263 -0
  476. package/types/ngwr-window.d.ts +66 -21
  477. package/typography/styles/_index.scss +1 -1
  478. package/window/styles/_index.scss +116 -42
  479. package/fesm2022/ngwr-date-adapter-fns.mjs.map +0 -1
  480. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +0 -1
  481. package/fesm2022/ngwr-date-adapter.mjs.map +0 -1
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  zoneless-ready, responsive, modular SCSS, fully tree-shakable. Built on top of
12
12
  `@angular/cdk` for overlay, portal, and a11y primitives.
13
13
 
14
- > **Status:** active development. v11 is the current major line (Angular 22 peer).
14
+ > **Status:** active development. v12 is the current major line (Angular 22 peer).
15
15
  > Public API is stable across patch releases and still evolving between majors.
16
16
  > [Open an issue](https://github.com/thekhegay/ngwr/issues/new)
17
17
  > if something breaks or feels wrong.
@@ -55,7 +55,7 @@ npm install ngwr @angular/cdk
55
55
  yarn add ngwr @angular/cdk
56
56
  ```
57
57
 
58
- `@angular/cdk` is the only required peer. Add an icon set and a date library
58
+ Beyond Angular itself, `@angular/cdk` and `@angular/forms` are the required peers — forms because every value control implements a Signal Forms interface. `@angular/router` is optional, needed only by the navigation components that take a `routerLink`. A stock `ng new` app already has all three. Add an icon set and a date library
59
59
  only if you use them — `lucide` (or `feather-icons`) for the icon adapters, and
60
60
  `date-fns` or `luxon` for the calendar / date-picker, which otherwise runs on a
61
61
  built-in native `Date` adapter. The Quick start below registers a lucide icon, so
@@ -201,7 +201,7 @@ Plus [icon](https://ngwr.dev/reference/components/icon), the experimental [squir
201
201
 
202
202
  ### Animations
203
203
 
204
- Animated UI effects. Mix of in-house components + ports of [reactbits.dev](https://www.reactbits.dev) — each port carries a credit chip on its docs page. Defaults are theme-aware (light + dark), and every component honors `prefers-reduced-motion`.
204
+ Animated UI effects. Mix of in-house components + ports of [reactbits.dev](https://www.reactbits.dev) — each port carries a credit chip on its docs page. Defaults are theme-aware (light + dark), and every component honors `prefers-reduced-motion` — the one exception is `spotlight-card`, whose highlight only tracks the pointer.
205
205
 
206
206
  [aurora](https://ngwr.dev/animations/aurora), [blur-text](https://ngwr.dev/animations/blur-text), [border-glow](https://ngwr.dev/animations/border-glow), [circular-text](https://ngwr.dev/animations/circular-text), [click-spark](https://ngwr.dev/animations/click-spark), [confetti](https://ngwr.dev/animations/confetti), [decrypt-text](https://ngwr.dev/animations/decrypt-text), [falling-text](https://ngwr.dev/animations/falling-text), [fuzzy-text](https://ngwr.dev/animations/fuzzy-text), [glitch-text](https://ngwr.dev/animations/glitch-text), [gradient-text](https://ngwr.dev/animations/gradient-text), [marquee](https://ngwr.dev/animations/marquee), [rotating-text](https://ngwr.dev/animations/rotating-text), [shiny-text](https://ngwr.dev/animations/shiny-text), [splash-cursor](https://ngwr.dev/animations/splash-cursor), [split-text](https://ngwr.dev/animations/split-text), [spotlight-card](https://ngwr.dev/animations/spotlight-card), [star-border](https://ngwr.dev/animations/star-border), [tilt-card](https://ngwr.dev/animations/tilt-card), [typewriter](https://ngwr.dev/animations/typewriter), [waves](https://ngwr.dev/animations/waves).
207
207
 
@@ -235,7 +235,7 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
235
235
  - [Mobile & responsive](https://ngwr.dev/guides/mobile) — responsive overlays, touch targets & density, swipe gestures, safe-area insets, container-query layouts.
236
236
  - [Typography](https://ngwr.dev/guides/typography) — `wrTypography` directive: headings, paragraphs, lists, links, code.
237
237
  - [Icons](https://ngwr.dev/icons) — `ngwr/icon` registry. Use `svgIcon()` for any set that ships raw SVG files (Tabler, Phosphor, Heroicons, Iconoir, Radix, Bootstrap, or your designer's own), plus thin adapters for Lucide (`ngwr/icon/adapters/lucide`) and Feather (`ngwr/icon/adapters/feather`), whose packages don't ship SVGs.
238
- - **Date adapters** — `ngwr/date-adapter` (native `Date`, no extra package), `ngwr/date-adapter-fns`, `ngwr/date-adapter-luxon`. Wire one with `provideWrDateAdapter()` — plus `{ adapter: WrDateFnsAdapter }` / `{ adapter: WrLuxonAdapter }` for the library-backed ones — to power calendar + every mode of date-picker.
238
+ - **Date adapters** — `ngwr/date` (native `Date`, no extra package), `ngwr/date/adapters/fns`, `ngwr/date/adapters/luxon`. Wire one with `provideWrDateAdapter()` — plus `{ adapter: WrDateFnsAdapter }` / `{ adapter: WrLuxonAdapter }` for the library-backed ones — to power calendar + every mode of date-picker.
239
239
  - **Component defaults** — `ngwr/config`. `provideWrConfig({ button: { size: 'sm' } })` sets what a component falls back to when a template says nothing; a bound value always wins, and a bound `false` beats a configured `true`, so a config never has to be escaped. [Reference](https://ngwr.dev/start/configuration).
240
240
 
241
241
  ## Highlights
@@ -243,13 +243,13 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
243
243
  - **Standalone & signals-first.** Every component is standalone and uses `input()` / `model()` / `output()` / `signal()` / `computed()`. Zoneless-ready.
244
244
  - **Signal Forms native.** Every value control implements `FormValueControl` / `FormCheckboxControl`, so `[formField]` binds straight through — there is no `ControlValueAccessor` in the library at all. `[(ngModel)]` and reactive forms keep working through Angular's bridge, and every control also works standalone via `[(value)]` / `[(checked)]`.
245
245
  - **CDK-powered.** Overlays, portals, and a11y come from `@angular/cdk`. We add `provideWrOverlay()` so NGWR overlays never collide with other CDK consumers (Material, NG-ZORRO, etc.).
246
- - **Mobile & responsive.** Overlays collapse to bottom-sheets on small screens (`provideWrResponsiveOverlays()`), touch targets grow to ≥44px on coarse pointers, a `touch` density preset enlarges every control, and drawer / lightbox / toast / carousel respond to swipe gestures. Fixed surfaces respect `env(safe-area-inset-*)`, and layout components (`descriptions`, `stepper`, `page-header`, `toolbar`, `pagination`, `table`) reflow to their container via container queries. [Guide](https://ngwr.dev/guides/mobile).
246
+ - **Mobile & responsive.** Overlays collapse to bottom-sheets on small screens (`provideWrResponsiveOverlays()`), touch targets grow to ≥44px on coarse pointers, a `touch` density preset enlarges the nine control families that read the multipliers, and drawer / lightbox / toast / carousel respond to swipe gestures. Fixed surfaces respect `env(safe-area-inset-*)`, and layout components (`descriptions`, `stepper`, `page-header`, `toolbar`, `pagination`, `table`) reflow to their container via container queries. [Guide](https://ngwr.dev/guides/mobile).
247
247
  - **Table, batteries included.** `wr-table` covers column pinning / resizing / drag-reorder, row selection, expandable rows, grouping, tree rows (`childrenKey` — the forest flattens into the same `<tbody>`, so pinning and cell templates keep working at every depth, and the table announces a `treegrid`), summary rows, CSV export (`exportCsv()`, dependency-free RFC 4180) and a virtualized body — all opt-in inputs on the one component. Excel (`.xlsx`) export is deliberately not shipped: it would mean a third-party dependency.
248
- - **Tree-shakable.** 166 separate ng-packagr entry points — import only what you use. Per-component FESM bundles are small: a median of ~4 KB gzipped, the heaviest (`ngwr/markdown`) ~23 KB. Every runtime bundle together gzips to ~690 KB — the 34 `ngwr/<name>/testing` harnesses aside, since they never reach an app bundle — but real apps pull a handful of entries. The only runtime dependency is `tslib`.
248
+ - **Tree-shakable.** 202 separate ng-packagr entry points — import only what you use. Per-component FESM bundles are small: a median of ~4 KB gzipped, the heaviest (`ngwr/markdown`) ~23 KB. Every runtime bundle together gzips to ~690 KB — the 70 `ngwr/<name>/testing` harnesses aside, since they never reach an app bundle — but real apps pull a handful of entries. The only runtime dependency is `tslib`.
249
249
  - **Modular SCSS.** Component styles are scoped through CSS custom properties. Theme tokens live in `ngwr/theme`; utilities (`grid`, `reset`) and the breakpoints SCSS API are opt-in.
250
250
  - **Tree-shaken icons.** `provideWrIcons(lucideIcons({ plus: Plus }))` registers only the icons you actually import. Dev-mode validation warns about unregistered icons.
251
251
  - **Reactbits ports, dependency-free.** All animation ports are reimplemented with vanilla DOM + Web Animations API / `IntersectionObserver` / `requestAnimationFrame` / raw WebGL — no GSAP, no `motion/react`, no `matter-js`, no `ogl`.
252
- - **Motion respects the OS.** Every animation component short-circuits to its final state under `prefers-reduced-motion`.
252
+ - **Motion respects the OS.** Every animation component short-circuits to its final state under `prefers-reduced-motion`, except `spotlight-card`, which animates nothing on its own — its highlight follows the cursor.
253
253
  - **Legible to agents.** Every docs page also serves as markdown at the same URL plus `.md` — [reference/components/select.md](https://ngwr.dev/reference/components/select.md) is that page's prose, code samples and API tables without the site chrome. The whole catalog is at [llms-full.txt](https://ngwr.dev/llms-full.txt), a quick-ref at [llms.txt](https://ngwr.dev/llms.txt).
254
254
 
255
255
  ### MCP server
@@ -48,7 +48,7 @@
48
48
 
49
49
  &:disabled {
50
50
  cursor: not-allowed;
51
- opacity: 0.5;
51
+ opacity: var(--wr-disabled-opacity);
52
52
  }
53
53
  }
54
54
 
@@ -45,14 +45,14 @@
45
45
  }
46
46
 
47
47
  &:active {
48
- --wr-btn-bg: rgba(var(--wr-color-outline-rgb), 0.6);
48
+ --wr-btn-bg: var(--wr-color-fill-strong);
49
49
  }
50
50
 
51
51
  &[disabled],
52
52
  &:disabled {
53
53
  cursor: default;
54
54
  pointer-events: none;
55
- opacity: 0.6;
55
+ opacity: var(--wr-disabled-opacity);
56
56
  }
57
57
 
58
58
  &__icon {
@@ -61,8 +61,8 @@
61
61
  }
62
62
 
63
63
  &:focus-visible {
64
- outline: none;
65
- box-shadow: 0 0 0 2px rgba(var(--wr-calendar-accent-rgb), 0.4);
64
+ outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
65
+ outline-offset: 2px;
66
66
  }
67
67
 
68
68
  &:disabled {
@@ -93,13 +93,24 @@
93
93
  }
94
94
 
95
95
  &:focus-visible {
96
- outline: none;
97
- box-shadow: 0 0 0 2px rgba(var(--wr-calendar-accent-rgb), 0.4);
96
+ outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
97
+ outline-offset: 2px;
98
98
  }
99
99
 
100
100
  &:disabled {
101
101
  cursor: not-allowed;
102
- opacity: 0.5;
102
+ opacity: var(--wr-disabled-opacity);
103
+ }
104
+
105
+ // `__header` is a plain flex row, so it already mirrors: under `dir="rtl"`
106
+ // the prev button lays out at the right edge. Its chevron is drawn pointing
107
+ // physically left, though, so it ends up aiming at the month it moves AWAY
108
+ // from. Turn the glyphs around with the row, the same way the pagination and
109
+ // carousel arrows do — "previous" is the inline start in both directions.
110
+ // Scoped to `__nav`, the two icon-only buttons: `__label` sits between them
111
+ // and is text, which must not mirror.
112
+ [dir='rtl'] & svg {
113
+ transform: scaleX(-1);
103
114
  }
104
115
  }
105
116
 
@@ -163,8 +174,8 @@
163
174
  }
164
175
 
165
176
  &:focus-visible {
166
- outline: none;
167
- box-shadow: inset 0 0 0 2px rgba(var(--wr-calendar-accent-rgb), 0.5);
177
+ outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
178
+ outline-offset: -2px;
168
179
  }
169
180
 
170
181
  // States — order matters; later rules override earlier ones.
@@ -200,7 +211,16 @@
200
211
  &:disabled {
201
212
  color: var(--wr-calendar-muted);
202
213
  cursor: not-allowed;
203
- opacity: 0.35;
214
+ // Fainter than the shared token, and a neighbour is the reason: a day from
215
+ // the adjacent month is still navigable and sits at 0.55 just above, so a
216
+ // DISABLED day has to read as less available than that one or the two swap
217
+ // meanings. Deliberately an absolute, calibrated against that hard-coded
218
+ // 0.55 rather than scaled off the shared token — floating with a consumer
219
+ // retune is exactly what would let the two cross. Written as an override of
220
+ // the token anyway, because `_variables.scss` asks that exceptions take
221
+ // that form so they stay greppable and argued.
222
+ --wr-disabled-opacity: 0.45;
223
+ opacity: var(--wr-disabled-opacity);
204
224
  }
205
225
  }
206
226
 
@@ -239,8 +259,8 @@
239
259
  }
240
260
 
241
261
  &:focus-visible {
242
- outline: none;
243
- box-shadow: inset 0 0 0 2px rgba(var(--wr-calendar-accent-rgb), 0.5);
262
+ outline: var(--wr-focus-ring-width) solid var(--wr-calendar-accent);
263
+ outline-offset: -2px;
244
264
  }
245
265
 
246
266
  &--current:not(.wr-calendar__chip--selected) {
@@ -260,12 +280,12 @@
260
280
  &:disabled {
261
281
  color: var(--wr-calendar-muted);
262
282
  cursor: not-allowed;
263
- opacity: 0.35;
283
+ opacity: var(--wr-disabled-opacity);
264
284
  }
265
285
  }
266
286
 
267
287
  &--disabled {
268
288
  pointer-events: none;
269
- opacity: 0.6;
289
+ opacity: var(--wr-disabled-opacity);
270
290
  }
271
291
  }
@@ -2,6 +2,21 @@
2
2
 
3
3
  .wr-calendar-heatmap {
4
4
  display: inline-block;
5
+ // A year is 53 columns of a FIXED cell size, so the grid has no reflow in it:
6
+ // its intrinsic width is ~731px whatever the container, and without a cap it
7
+ // escaped the card it sits in and gave the whole document a 397px horizontal
8
+ // scroll at 375px. Cap it and scroll the grid instead — the same answer
9
+ // `.wr-table__scroll` and `.wr-tabs__strip` already give. The cap also covers
10
+ // the plain block-parent case, where shrink-to-fit alone would still hand the
11
+ // element its full 731px.
12
+ max-width: 100%;
13
+ overflow-x: auto;
14
+ // `overflow-x: auto` alone reserves room for a vertical scrollbar in browsers
15
+ // without overlay bars — a stray bar down the side of a grid that is never
16
+ // taller than its content. Pin the y axis; the bottom row's `:hover` scale is
17
+ // given its room on `&__cells` below, since that is where the cell size is
18
+ // legible.
19
+ overflow-y: hidden;
5
20
  font-family: var(--wr-font-family-base);
6
21
  color: var(--wr-color-on-surface-muted);
7
22
 
@@ -54,6 +69,11 @@
54
69
  &__cells {
55
70
  grid-area: cells;
56
71
  grid-template-rows: repeat(7, var(--wr-heatmap-cell-size));
72
+ // The bottom row sits on the host's own edge, and the host now clips its
73
+ // block axis (see above) — so the 40% a hovered cell grows by, half of it
74
+ // below the row, had nowhere to go. Reserve that half. Scaled from the cell
75
+ // size rather than written as a length, because the size is an input.
76
+ padding-block-end: calc(var(--wr-heatmap-cell-size) * 0.2);
57
77
  }
58
78
 
59
79
  &__cell {
@@ -10,7 +10,15 @@
10
10
  overflow: hidden;
11
11
  font-family: var(--wr-font-family-base);
12
12
 
13
+ // The host is the sized box — the documented recipe gives it a `height` or an
14
+ // `aspect-ratio` — but the height has to be HANDED DOWN, one definite parent
15
+ // at a time, or the chain collapses to the tallest slide's content and a
16
+ // `16 / 9` carousel paints a text-height strip over its own empty frame. The
17
+ // arrows and dots anchor to the host, so they kept floating in that void.
18
+ // Inert for an unsized carousel: a percentage against an auto-height parent
19
+ // resolves to auto, which is what these boxes already did.
13
20
  &__viewport {
21
+ height: 100%;
14
22
  overflow: hidden;
15
23
  // Capture horizontal swipe-nav; let vertical scrolling pass through.
16
24
  touch-action: pan-y;
@@ -18,6 +26,7 @@
18
26
 
19
27
  &__track {
20
28
  display: flex;
29
+ height: 100%;
21
30
  transition: transform var(--wr-duration-slow) var(--wr-ease-out);
22
31
  will-change: transform;
23
32
  }
@@ -27,10 +36,15 @@
27
36
  flex: 0 0 100%;
28
37
  min-width: 0;
29
38
  display: block;
39
+ height: 100%;
30
40
 
41
+ // The slide's own child is what a consumer writes `height: 100%` on (the
42
+ // library's demo does), and that only resolves once every box above it is
43
+ // definite — see the note on `__viewport`.
31
44
  > * {
32
45
  display: block;
33
46
  width: 100%;
47
+ height: 100%;
34
48
  }
35
49
 
36
50
  img {
@@ -99,7 +113,15 @@
99
113
  border: 0;
100
114
  border-radius: 50%;
101
115
  background: rgba(var(--wr-color-surface-rgb), 0.55);
102
- box-shadow: 0 0 0 1px rgba(var(--wr-color-black-rgb), 0.15);
116
+ // The dot's fill IS the surface, so this ring is the whole of its visible
117
+ // boundary — and WCAG 1.4.11 asks 3:1 of the thing that identifies a
118
+ // control and its state. Fixed black could never carry that in both
119
+ // themes: on the dark canvas it measured 1.02:1 (black on near-black) and
120
+ // even in light only 1.41:1. `on-surface` flips with the theme the way the
121
+ // `--wr-shadow-*` family does, and 0.55 is the alpha that clears the bar on
122
+ // the bare canvas in both — measured 4.00:1 light, 5.35:1 dark. Same shape
123
+ // as `.wr-color-picker__swatch`'s ring, which learned this first.
124
+ box-shadow: 0 0 0 1px rgba(var(--wr-color-on-surface-rgb), 0.55);
103
125
  cursor: pointer;
104
126
  transition:
105
127
  width var(--wr-transition-base),
@@ -21,7 +21,7 @@
21
21
 
22
22
  &--disabled {
23
23
  --wr-cascader-color: var(--wr-color-on-surface-muted);
24
- --wr-cascader-bg: rgba(var(--wr-color-outline-rgb), 0.35);
24
+ --wr-cascader-bg: var(--wr-color-fill);
25
25
  }
26
26
 
27
27
  // Sizes — trigger on the control contract (sm 22 / md 30 / lg 36).
@@ -52,7 +52,12 @@
52
52
  color: var(--wr-cascader-color);
53
53
  border: 1px solid var(--wr-cascader-border);
54
54
  border-radius: var(--wr-cascader-radius);
55
- padding: var(--wr-cascader-padding-y) var(--wr-cascader-padding-x);
55
+ // Density-multiplied like select / input / textarea / button: the trigger
56
+ // sources the same `--wr-control-padding-*` contract they do, so without
57
+ // the multiplier it held its md height (30px) while its neighbours grew —
58
+ // measured at 35.59px for input / select under `touch`.
59
+ padding: calc(var(--wr-cascader-padding-y) * var(--wr-density-y, 1))
60
+ calc(var(--wr-cascader-padding-x) * var(--wr-density-x, 1));
56
61
  font-family: var(--wr-font-family-base);
57
62
  font-size: var(--wr-cascader-font-size);
58
63
  line-height: var(--wr-cascader-line-height);
@@ -193,7 +198,7 @@
193
198
  &--disabled {
194
199
  color: var(--wr-color-on-surface-muted);
195
200
  cursor: not-allowed;
196
- opacity: 0.55;
201
+ opacity: var(--wr-disabled-opacity);
197
202
 
198
203
  &:hover {
199
204
  background: transparent;
@@ -213,6 +218,13 @@
213
218
  flex: 0 0 auto;
214
219
  color: var(--wr-color-on-surface-muted);
215
220
  }
221
+
222
+ // The panel is a flex row, so its columns cascade toward the inline end —
223
+ // leftward under `dir="rtl"`. The branch arrow is drawn pointing physically
224
+ // right, so turn it around with them, the way the carousel's arrows do.
225
+ [dir='rtl'] & .wr-cascader__opt-arrow {
226
+ transform: scaleX(-1);
227
+ }
216
228
  }
217
229
 
218
230
  // Touch pointers: grow the clear button and make the column option rows ~44px
@@ -37,7 +37,7 @@
37
37
  white-space: nowrap;
38
38
 
39
39
  &:focus-visible + .wr-checkbox__box {
40
- box-shadow: 0 0 0 3px rgba(var(--wr-color-primary-rgb), 0.2);
40
+ @include theme.focus-ring;
41
41
  }
42
42
  }
43
43
 
@@ -123,7 +123,7 @@
123
123
  &--disabled {
124
124
  --wr-checkbox-color: var(--wr-color-on-surface-muted);
125
125
  pointer-events: none;
126
- opacity: 0.6;
126
+ opacity: var(--wr-disabled-opacity);
127
127
  }
128
128
  }
129
129
 
@@ -24,6 +24,17 @@
24
24
  user-select: none;
25
25
  transition: transform 0.6s var(--wr-ease-spring);
26
26
 
27
+ // The accessible copy of the string — the ring itself is `aria-hidden`.
28
+ &__sr-only {
29
+ position: absolute;
30
+ width: 1px;
31
+ height: 1px;
32
+ overflow: hidden;
33
+ clip: rect(0 0 0 0);
34
+ clip-path: inset(50%);
35
+ white-space: nowrap;
36
+ }
37
+
27
38
  &__spin {
28
39
  position: absolute;
29
40
  inset: 0;
@@ -35,7 +35,7 @@
35
35
  transition: background var(--wr-transition-base);
36
36
 
37
37
  &:hover:not(:disabled) {
38
- background: rgba(var(--wr-color-outline-rgb), 0.25);
38
+ background: var(--wr-color-fill);
39
39
  }
40
40
 
41
41
  &:disabled {
@@ -83,7 +83,7 @@
83
83
 
84
84
  &--disabled {
85
85
  --wr-collapse-color: var(--wr-color-on-surface-muted);
86
- opacity: 0.7;
86
+ opacity: var(--wr-disabled-opacity);
87
87
  }
88
88
  }
89
89
 
@@ -191,7 +191,7 @@
191
191
  }
192
192
 
193
193
  &:disabled {
194
- background: rgba(var(--wr-color-outline-rgb), 0.35);
194
+ background: var(--wr-color-fill);
195
195
  color: var(--wr-color-on-surface-muted);
196
196
  cursor: not-allowed;
197
197
  }
@@ -247,13 +247,13 @@
247
247
 
248
248
  &:disabled {
249
249
  cursor: not-allowed;
250
- opacity: 0.5;
250
+ opacity: var(--wr-disabled-opacity);
251
251
  }
252
252
  }
253
253
 
254
254
  &--disabled {
255
255
  pointer-events: none;
256
- opacity: 0.65;
256
+ opacity: var(--wr-disabled-opacity);
257
257
  }
258
258
  }
259
259
 
@@ -127,6 +127,18 @@
127
127
  color: var(--wr-color-primary);
128
128
  }
129
129
 
130
+ // The keycap is the one thing on the active row that does NOT want the tint under
131
+ // it. `--wr-color-hover` is translucent, so on a plain row it composites to a light
132
+ // grey and the muted label reads at 4.63:1 — but over `--wr-color-primary-soft` it
133
+ // composites to #dce4f1, where the same label measures 4.17:1 and fails AA. Neither
134
+ // shipped gate can see it: the palette has to be OPEN with a row active, which is a
135
+ // state that walks past prerendered HTML and a page at rest alike. Putting the chip
136
+ // back on the surface restores the pairing the muted role is calibrated for, and
137
+ // keeps the chip reading as a keycap rather than as part of the highlight.
138
+ &__option--active &__option-shortcut {
139
+ background: var(--wr-color-surface);
140
+ }
141
+
130
142
  &__option-body {
131
143
  flex: 1 1 auto;
132
144
  min-width: 0;
@@ -12,9 +12,25 @@
12
12
  height: 100%;
13
13
  outline: 0;
14
14
 
15
- &:focus-visible {
16
- @include theme.focus-ring;
15
+ // The surface is `role="slider"` and the component's only keyboard
16
+ // affordance, but it is coterminous with the host — and rounding a
17
+ // before/after comparator means `overflow: hidden` there, which discards an
18
+ // outset ring whole. Insetting the offset is not enough either: the
19
+ // projected layers paint over the surface's own outline. So the ring is a
20
+ // pseudo-element stacked above `&__layers`, drawn inward from the edge.
21
+ &:focus-visible::after {
22
+ content: '';
23
+ position: absolute;
24
+ inset: 0;
25
+ z-index: 2;
26
+ pointer-events: none;
17
27
  border-radius: var(--wr-border-radius-sm);
28
+ outline: var(--wr-focus-ring-width) solid var(--wr-focus-ring-color);
29
+ // A negative offset equal to the width puts the stroke flush inside the
30
+ // edge; the halo then sits just inside it, mirroring the outset ring.
31
+ outline-offset: calc(-1 * var(--wr-focus-ring-width));
32
+ box-shadow: inset 0 0 0 calc(var(--wr-focus-ring-width) + var(--wr-focus-ring-offset))
33
+ var(--wr-focus-ring-halo);
18
34
  }
19
35
  }
20
36
 
@@ -72,12 +72,22 @@
72
72
  background: var(--wr-color-primary-soft);
73
73
  // The item label inherits this, so it is text on the `-soft` tint: `-ink`.
74
74
  color: var(--wr-color-primary-ink);
75
- outline: none;
75
+ }
76
+
77
+ // Hover and focus paint the same tint, so the tint alone cannot say which row
78
+ // Enter fires — with the keyboard on one row and the pointer resting on
79
+ // another, both light up identically. And the menu focuses its first enabled
80
+ // row on open and roves with the arrows, so this is the ordinary keyboard
81
+ // state rather than an edge case. Same ring as `.wr-dropdown-item`, and it
82
+ // fits: the menu's 0.3125rem padding clears the 2px offset plus the 2px
83
+ // outline with a pixel to spare, so no negative offset is needed here.
84
+ &:focus-visible {
85
+ @include theme.focus-ring;
76
86
  }
77
87
 
78
88
  &--disabled {
79
89
  color: var(--wr-color-on-surface-muted);
80
- opacity: 0.6;
90
+ opacity: var(--wr-disabled-opacity);
81
91
  pointer-events: none;
82
92
  }
83
93
 
@@ -107,6 +117,15 @@
107
117
  &--has-submenu:focus-visible &__chevron {
108
118
  color: var(--wr-color-primary);
109
119
  }
120
+
121
+ // The submenu pane cascades toward the inline end, so under `dir="rtl"` it
122
+ // opens to the LEFT — `context-menu-item.ts` swaps the key that opens it for
123
+ // the same reason. The chevron is drawn pointing physically right, so turn it
124
+ // around with the panes, the way the cascader's branch arrow does. Scoped to
125
+ // the chevron: the label beside it must not mirror.
126
+ [dir='rtl'] &__chevron {
127
+ transform: scaleX(-1);
128
+ }
110
129
  }
111
130
 
112
131
  // Horizontal separator between groups of items.
@@ -22,7 +22,7 @@
22
22
 
23
23
  &:disabled {
24
24
  cursor: not-allowed;
25
- opacity: 0.5;
25
+ opacity: var(--wr-disabled-opacity);
26
26
  }
27
27
  }
28
28
  }
@@ -46,7 +46,7 @@
46
46
 
47
47
  &--disabled {
48
48
  .wr-date-range-picker__separator {
49
- opacity: 0.5;
49
+ opacity: var(--wr-disabled-opacity);
50
50
  }
51
51
  }
52
52
  }
@@ -127,7 +127,7 @@
127
127
 
128
128
  &:disabled {
129
129
  cursor: not-allowed;
130
- opacity: 0.4;
130
+ opacity: var(--wr-disabled-opacity);
131
131
  }
132
132
  }
133
133
 
@@ -162,7 +162,7 @@
162
162
  }
163
163
 
164
164
  &:disabled {
165
- background: rgba(var(--wr-color-outline-rgb), 0.35);
165
+ background: var(--wr-color-fill);
166
166
  color: var(--wr-time-picker-muted);
167
167
  cursor: not-allowed;
168
168
  }
@@ -196,7 +196,7 @@
196
196
  }
197
197
 
198
198
  &--disabled {
199
- opacity: 0.7;
199
+ opacity: var(--wr-disabled-opacity);
200
200
  }
201
201
  }
202
202
 
@@ -108,7 +108,7 @@
108
108
  }
109
109
 
110
110
  &--bordered#{&}--inline &__label {
111
- background: rgba(var(--wr-color-outline-rgb), 0.35);
111
+ background: var(--wr-color-fill);
112
112
  border-inline-end: 1px solid var(--wr-color-outline);
113
113
  }
114
114
  }
@@ -39,6 +39,33 @@
39
39
  &:active {
40
40
  cursor: grabbing;
41
41
  }
42
+
43
+ // Every row is a tab stop (the keyboard reorder path), so every row needs a
44
+ // ring. Included here rather than added to `theme/_focus.scss`, the same
45
+ // choice `wr-list` made for its own rows.
46
+ &:focus-visible {
47
+ @include theme.focus-ring;
48
+ }
49
+
50
+ // Picked up by the keyboard — the standing counterpart of `:active`, which
51
+ // only lasts while a pointer is held down.
52
+ &--grabbed {
53
+ cursor: grabbing;
54
+ box-shadow: 0 6px 12px rgba(var(--wr-color-backdrop-rgb), 0.22);
55
+ }
56
+ }
57
+
58
+ // The key model and the position announcements: read out, never drawn.
59
+ &__sr-only {
60
+ position: absolute;
61
+ width: 1px;
62
+ height: 1px;
63
+ padding: 0;
64
+ margin: -1px;
65
+ overflow: hidden;
66
+ clip: rect(0, 0, 0, 0);
67
+ white-space: nowrap;
68
+ border: 0;
42
69
  }
43
70
  }
44
71
 
@@ -96,7 +123,7 @@
96
123
  .wr-sortable-list .cdk-drag-placeholder {
97
124
  opacity: 0.35;
98
125
  // Subtle dashed outline so users see where the item came from.
99
- background: rgba(var(--wr-color-outline-rgb), 0.6);
126
+ background: var(--wr-color-fill-strong);
100
127
  border-radius: var(--wr-border-radius-base);
101
128
  outline: 1px dashed rgba(var(--wr-color-on-surface-rgb), 0.25);
102
129
  outline-offset: -1px;
@@ -26,6 +26,33 @@
26
26
  height: 100vh;
27
27
  height: 100dvh;
28
28
  }
29
+ // No title to sit beside, so the corner chrome needs its own room.
30
+ //
31
+ // `__close` is absolutely positioned at an offset chosen to centre it on the
32
+ // TITLE's first line. A drawer given only content — the shape a navigation
33
+ // panel takes, `<wr-drawer><nav /></wr-drawer>` — starts its content at the top
34
+ // and runs it under the button: the showcase's icon-set panel had the × over
35
+ // the first menu row by 24x16 px, with `elementFromPoint` returning the button,
36
+ // so that corner of the row could not be clicked. Reserve the strip rather than
37
+ // move the button, which would make titled drawers look different for no reason.
38
+ //
39
+ // Written out rather than nested under `.wr-drawer__panel`: the first attempt
40
+ // put it beside `&__close`, whose parent is `.wr-drawer`, so it compiled to
41
+ // `.wr-drawer--untitled` and matched nothing. The class the component writes is
42
+ // on the PANEL.
43
+ //
44
+ // **3.25rem, and the number comes from the TOUCH TARGET rather than the button.**
45
+ // `__close` sits at `inset-block-start: 1.75rem` with `translateY(-50%)`, so its
46
+ // visible box is 16–40px — but it also carries `touch-target`, whose `::after`
47
+ // grows the hit area to 44px on a coarse pointer, reaching 6–50px. Reserving the
48
+ // visible height left `getBoundingClientRect` reporting no overlap while
49
+ // `elementFromPoint` still answered "close button" over the first 10px of the
50
+ // content: the boxes had stopped intersecting and the control was still covered.
51
+ // 52px clears the target with two pixels to spare.
52
+ .wr-drawer__panel--untitled > *:not(.wr-drawer__close) {
53
+ padding-block-start: 3.25rem;
54
+ }
55
+
29
56
 
30
57
  // …and that same flattening puts the content component's own host element
31
58
  // between the panel and the title / content / footer slots, so the panel's
@@ -168,6 +195,16 @@
168
195
  border-bottom: 1px solid var(--wr-color-outline);
169
196
  }
170
197
 
198
+ // No title to sit beside, so the corner chrome needs its own room.
199
+ //
200
+ // `__close` is absolutely positioned at an offset chosen to centre it on the
201
+ // TITLE's first line (see below). A drawer given only content — the shape a
202
+ // navigation panel takes, `<wr-drawer><nav /></wr-drawer>` — starts its
203
+ // content at the top of the panel and runs it straight under the button: the
204
+ // showcase's own icon-set panel had the × covering the first menu row by
205
+ // 24x16 px, with `elementFromPoint` returning the button, so that corner of
206
+ // the row could not be clicked. Reserve the strip instead of moving the
207
+ // button, which would leave titled drawers looking different for no reason.
171
208
  // Built-in dismiss (×) in the panel's top-right corner — rendered by the
172
209
  // component template, appended by `WrDrawerManager` for service drawers.
173
210
  &__close {
@@ -95,7 +95,7 @@
95
95
  &:hover,
96
96
  &:focus-visible {
97
97
  background: var(--wr-dropdown-item-bg-hover);
98
- outline: none;
98
+ outline-offset: -2px;
99
99
  }
100
100
 
101
101
  &__icon {
@@ -113,7 +113,7 @@
113
113
  &--disabled {
114
114
  color: var(--wr-color-on-surface-muted);
115
115
  cursor: not-allowed;
116
- opacity: 0.6;
116
+ opacity: var(--wr-disabled-opacity);
117
117
  // The item's own `disabled` guards only the KEYBOARD path; the host element is
118
118
  // where a consumer binds `(click)`, and nothing stopped a real click reaching
119
119
  // it. `wr-btn` and `wr-checkbox` disable their pointer the same way.