ngwr 10.2.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +39 -19
  2. package/anchor/styles/_index.scss +4 -4
  3. package/back-top/styles/_index.scss +6 -1
  4. package/blur-text/styles/_index.scss +13 -0
  5. package/button/styles/_index.scss +11 -6
  6. package/carousel/styles/_index.scss +13 -2
  7. package/cascader/styles/_index.scss +2 -2
  8. package/circular-text/styles/_index.scss +2 -0
  9. package/collapse/styles/_index.scss +1 -1
  10. package/color-picker/styles/_index.scss +6 -1
  11. package/compare/styles/_index.scss +1 -2
  12. package/context-menu/styles/_index.scss +6 -1
  13. package/descriptions/styles/_index.scss +2 -2
  14. package/dialog/styles/_index.scss +38 -0
  15. package/drawer/styles/_index.scss +20 -1
  16. package/dropdown/styles/_index.scss +19 -5
  17. package/empty/styles/_index.scss +10 -0
  18. package/fesm2022/ngwr-action-sheet.mjs +15 -5
  19. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  20. package/fesm2022/ngwr-affix.mjs +43 -16
  21. package/fesm2022/ngwr-affix.mjs.map +1 -1
  22. package/fesm2022/ngwr-alert.mjs +3 -3
  23. package/fesm2022/ngwr-anchor.mjs +20 -8
  24. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  25. package/fesm2022/ngwr-aurora.mjs +4 -4
  26. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  27. package/fesm2022/ngwr-avatar.mjs +33 -9
  28. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  29. package/fesm2022/ngwr-back-top.mjs +8 -4
  30. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  31. package/fesm2022/ngwr-badge.mjs +6 -6
  32. package/fesm2022/ngwr-badge.mjs.map +1 -1
  33. package/fesm2022/ngwr-bar-chart.mjs +32 -11
  34. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  35. package/fesm2022/ngwr-blur-text.mjs +4 -4
  36. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  37. package/fesm2022/ngwr-border-glow.mjs +4 -4
  38. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  39. package/fesm2022/ngwr-breadcrumbs.mjs +9 -8
  40. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  41. package/fesm2022/ngwr-burger.mjs +11 -6
  42. package/fesm2022/ngwr-burger.mjs.map +1 -1
  43. package/fesm2022/ngwr-button-testing.mjs +96 -0
  44. package/fesm2022/ngwr-button-testing.mjs.map +1 -0
  45. package/fesm2022/ngwr-button.mjs +89 -24
  46. package/fesm2022/ngwr-button.mjs.map +1 -1
  47. package/fesm2022/ngwr-calendar-heatmap.mjs +42 -10
  48. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  49. package/fesm2022/ngwr-calendar.mjs +108 -9
  50. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  51. package/fesm2022/ngwr-card.mjs +10 -10
  52. package/fesm2022/ngwr-card.mjs.map +1 -1
  53. package/fesm2022/ngwr-carousel-testing.mjs +377 -0
  54. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
  55. package/fesm2022/ngwr-carousel.mjs +72 -18
  56. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  57. package/fesm2022/ngwr-cascader-testing.mjs +534 -0
  58. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
  59. package/fesm2022/ngwr-cascader.mjs +4 -4
  60. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  61. package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
  62. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
  63. package/fesm2022/ngwr-checkbox.mjs +15 -9
  64. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  65. package/fesm2022/ngwr-circular-text.mjs +4 -4
  66. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  67. package/fesm2022/ngwr-click-spark.mjs +4 -4
  68. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  69. package/fesm2022/ngwr-clipboard.mjs +18 -4
  70. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  71. package/fesm2022/ngwr-collapse-testing.mjs +368 -0
  72. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
  73. package/fesm2022/ngwr-collapse.mjs +9 -9
  74. package/fesm2022/ngwr-color-picker.mjs +139 -19
  75. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  76. package/fesm2022/ngwr-command-palette-testing.mjs +589 -0
  77. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -0
  78. package/fesm2022/ngwr-command-palette.mjs +60 -10
  79. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  80. package/fesm2022/ngwr-compare.mjs +105 -15
  81. package/fesm2022/ngwr-compare.mjs.map +1 -1
  82. package/fesm2022/ngwr-confetti.mjs +3 -3
  83. package/fesm2022/ngwr-config.mjs +106 -0
  84. package/fesm2022/ngwr-config.mjs.map +1 -0
  85. package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
  86. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
  87. package/fesm2022/ngwr-context-menu.mjs +104 -18
  88. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  89. package/fesm2022/ngwr-cookie.mjs +8 -4
  90. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  91. package/fesm2022/ngwr-counter.mjs +17 -9
  92. package/fesm2022/ngwr-counter.mjs.map +1 -1
  93. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  94. package/fesm2022/ngwr-date-adapter-luxon.mjs +55 -7
  95. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-adapter.mjs +57 -11
  97. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  98. package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
  99. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
  100. package/fesm2022/ngwr-date-picker.mjs +409 -57
  101. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  102. package/fesm2022/ngwr-decrypt-text.mjs +30 -12
  103. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  104. package/fesm2022/ngwr-density.mjs +6 -6
  105. package/fesm2022/ngwr-descriptions.mjs +6 -6
  106. package/fesm2022/ngwr-dialog-testing.mjs +89 -0
  107. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
  108. package/fesm2022/ngwr-dialog.mjs +33 -17
  109. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  110. package/fesm2022/ngwr-directives.mjs +48 -24
  111. package/fesm2022/ngwr-directives.mjs.map +1 -1
  112. package/fesm2022/ngwr-divider.mjs +3 -3
  113. package/fesm2022/ngwr-donut-chart.mjs +24 -7
  114. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  115. package/fesm2022/ngwr-drag-drop.mjs +7 -7
  116. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  117. package/fesm2022/ngwr-drawer-testing.mjs +250 -0
  118. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
  119. package/fesm2022/ngwr-drawer.mjs +37 -19
  120. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  121. package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
  122. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
  123. package/fesm2022/ngwr-dropdown.mjs +19 -11
  124. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  125. package/fesm2022/ngwr-empty.mjs +26 -9
  126. package/fesm2022/ngwr-empty.mjs.map +1 -1
  127. package/fesm2022/ngwr-event-calendar.mjs +62 -15
  128. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  129. package/fesm2022/ngwr-falling-text.mjs +4 -4
  130. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  131. package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
  132. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
  133. package/fesm2022/ngwr-file-upload.mjs +3 -3
  134. package/fesm2022/ngwr-form-testing.mjs +451 -0
  135. package/fesm2022/ngwr-form-testing.mjs.map +1 -0
  136. package/fesm2022/ngwr-form.mjs +28 -12
  137. package/fesm2022/ngwr-form.mjs.map +1 -1
  138. package/fesm2022/ngwr-fuzzy-text.mjs +11 -4
  139. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  140. package/fesm2022/ngwr-gauge.mjs +21 -7
  141. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  142. package/fesm2022/ngwr-glitch-text.mjs +4 -4
  143. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  144. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  145. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  146. package/fesm2022/ngwr-hotkey.mjs +31 -10
  147. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  148. package/fesm2022/ngwr-i18n-en.mjs +61 -0
  149. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  150. package/fesm2022/ngwr-i18n-ru.mjs +59 -0
  151. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  152. package/fesm2022/ngwr-i18n.mjs +9 -9
  153. package/fesm2022/ngwr-icon.mjs +6 -6
  154. package/fesm2022/ngwr-image-cropper.mjs +26 -3
  155. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  156. package/fesm2022/ngwr-input-number-testing.mjs +306 -0
  157. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
  158. package/fesm2022/ngwr-input-number.mjs +37 -5
  159. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  160. package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
  161. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
  162. package/fesm2022/ngwr-input-otp.mjs +39 -8
  163. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  164. package/fesm2022/ngwr-input-testing.mjs +102 -0
  165. package/fesm2022/ngwr-input-testing.mjs.map +1 -0
  166. package/fesm2022/ngwr-input.mjs +62 -25
  167. package/fesm2022/ngwr-input.mjs.map +1 -1
  168. package/fesm2022/ngwr-keyboard.mjs +3 -3
  169. package/fesm2022/ngwr-knob.mjs +46 -10
  170. package/fesm2022/ngwr-knob.mjs.map +1 -1
  171. package/fesm2022/ngwr-layout.mjs +36 -20
  172. package/fesm2022/ngwr-layout.mjs.map +1 -1
  173. package/fesm2022/ngwr-lightbox.mjs +35 -8
  174. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  175. package/fesm2022/ngwr-line-chart.mjs +19 -6
  176. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  177. package/fesm2022/ngwr-list.mjs +14 -9
  178. package/fesm2022/ngwr-list.mjs.map +1 -1
  179. package/fesm2022/ngwr-loading-bar.mjs +71 -31
  180. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  181. package/fesm2022/ngwr-markdown-testing.mjs +516 -0
  182. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
  183. package/fesm2022/ngwr-markdown.mjs +1492 -0
  184. package/fesm2022/ngwr-markdown.mjs.map +1 -0
  185. package/fesm2022/ngwr-marquee.mjs +19 -8
  186. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  187. package/fesm2022/ngwr-media.mjs +3 -3
  188. package/fesm2022/ngwr-mention-testing.mjs +513 -0
  189. package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
  190. package/fesm2022/ngwr-mention.mjs +16 -7
  191. package/fesm2022/ngwr-mention.mjs.map +1 -1
  192. package/fesm2022/ngwr-meta.mjs +28 -13
  193. package/fesm2022/ngwr-meta.mjs.map +1 -1
  194. package/fesm2022/ngwr-meter-group.mjs +22 -8
  195. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  196. package/fesm2022/ngwr-overlay.mjs +57 -8
  197. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  198. package/fesm2022/ngwr-page-header.mjs +3 -3
  199. package/fesm2022/ngwr-pagination-testing.mjs +389 -0
  200. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
  201. package/fesm2022/ngwr-pagination.mjs +27 -11
  202. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  203. package/fesm2022/ngwr-pipes.mjs +21 -21
  204. package/fesm2022/ngwr-platform.mjs +9 -9
  205. package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
  206. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
  207. package/fesm2022/ngwr-popconfirm.mjs +99 -21
  208. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  209. package/fesm2022/ngwr-popover-testing.mjs +316 -0
  210. package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
  211. package/fesm2022/ngwr-popover.mjs +48 -10
  212. package/fesm2022/ngwr-popover.mjs.map +1 -1
  213. package/fesm2022/ngwr-progress.mjs +3 -3
  214. package/fesm2022/ngwr-pull-to-refresh.mjs +19 -4
  215. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  216. package/fesm2022/ngwr-qr.mjs +15 -5
  217. package/fesm2022/ngwr-qr.mjs.map +1 -1
  218. package/fesm2022/ngwr-radio-testing.mjs +392 -0
  219. package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
  220. package/fesm2022/ngwr-radio.mjs +16 -9
  221. package/fesm2022/ngwr-radio.mjs.map +1 -1
  222. package/fesm2022/ngwr-rating-testing.mjs +384 -0
  223. package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
  224. package/fesm2022/ngwr-rating.mjs +40 -5
  225. package/fesm2022/ngwr-rating.mjs.map +1 -1
  226. package/fesm2022/ngwr-result.mjs +12 -12
  227. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  228. package/fesm2022/ngwr-scroll.mjs +3 -3
  229. package/fesm2022/ngwr-segmented-testing.mjs +512 -0
  230. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
  231. package/fesm2022/ngwr-segmented.mjs +3 -3
  232. package/fesm2022/ngwr-select-testing.mjs +268 -0
  233. package/fesm2022/ngwr-select-testing.mjs.map +1 -0
  234. package/fesm2022/ngwr-select.mjs +96 -25
  235. package/fesm2022/ngwr-select.mjs.map +1 -1
  236. package/fesm2022/ngwr-shiny-text.mjs +7 -7
  237. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  238. package/fesm2022/ngwr-sidebar.mjs +67 -14
  239. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  240. package/fesm2022/ngwr-skeleton.mjs +3 -3
  241. package/fesm2022/ngwr-slider-testing.mjs +478 -0
  242. package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
  243. package/fesm2022/ngwr-slider.mjs +59 -15
  244. package/fesm2022/ngwr-slider.mjs.map +1 -1
  245. package/fesm2022/ngwr-sparkline.mjs +28 -8
  246. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  247. package/fesm2022/ngwr-speed-dial.mjs +39 -6
  248. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  249. package/fesm2022/ngwr-spinner.mjs +14 -5
  250. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  251. package/fesm2022/ngwr-splash-cursor.mjs +4 -4
  252. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  253. package/fesm2022/ngwr-split-text.mjs +4 -4
  254. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  255. package/fesm2022/ngwr-splitter.mjs +72 -11
  256. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  257. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  258. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  259. package/fesm2022/ngwr-squircle.mjs +6 -6
  260. package/fesm2022/ngwr-star-border.mjs +4 -4
  261. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  262. package/fesm2022/ngwr-statistic.mjs +33 -16
  263. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  264. package/fesm2022/ngwr-stepper-testing.mjs +477 -0
  265. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
  266. package/fesm2022/ngwr-stepper.mjs +6 -6
  267. package/fesm2022/ngwr-storage.mjs +27 -17
  268. package/fesm2022/ngwr-storage.mjs.map +1 -1
  269. package/fesm2022/ngwr-switch-testing.mjs +77 -0
  270. package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
  271. package/fesm2022/ngwr-switch.mjs +12 -6
  272. package/fesm2022/ngwr-switch.mjs.map +1 -1
  273. package/fesm2022/ngwr-table-testing.mjs +580 -0
  274. package/fesm2022/ngwr-table-testing.mjs.map +1 -0
  275. package/fesm2022/ngwr-table.mjs +105 -44
  276. package/fesm2022/ngwr-table.mjs.map +1 -1
  277. package/fesm2022/ngwr-tabs-testing.mjs +617 -0
  278. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
  279. package/fesm2022/ngwr-tabs.mjs +44 -12
  280. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  281. package/fesm2022/ngwr-textarea-testing.mjs +238 -0
  282. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
  283. package/fesm2022/ngwr-textarea.mjs +35 -7
  284. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  285. package/fesm2022/ngwr-theme.mjs +3 -3
  286. package/fesm2022/ngwr-tilt-card.mjs +7 -7
  287. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  288. package/fesm2022/ngwr-timeline.mjs +6 -6
  289. package/fesm2022/ngwr-toast-testing.mjs +101 -0
  290. package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
  291. package/fesm2022/ngwr-toast.mjs +55 -21
  292. package/fesm2022/ngwr-toast.mjs.map +1 -1
  293. package/fesm2022/ngwr-toolbar.mjs +3 -3
  294. package/fesm2022/ngwr-tour.mjs +67 -15
  295. package/fesm2022/ngwr-tour.mjs.map +1 -1
  296. package/fesm2022/ngwr-transfer-testing.mjs +538 -0
  297. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
  298. package/fesm2022/ngwr-transfer.mjs +47 -16
  299. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  300. package/fesm2022/ngwr-tree-testing.mjs +734 -0
  301. package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
  302. package/fesm2022/ngwr-tree.mjs +75 -9
  303. package/fesm2022/ngwr-tree.mjs.map +1 -1
  304. package/fesm2022/ngwr-typewriter.mjs +7 -5
  305. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  306. package/fesm2022/ngwr-typography.mjs +3 -3
  307. package/fesm2022/ngwr-version.mjs +1 -1
  308. package/fesm2022/ngwr-version.mjs.map +1 -1
  309. package/fesm2022/ngwr-virtual-scroll.mjs +33 -7
  310. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  311. package/fesm2022/ngwr-waves.mjs +5 -5
  312. package/fesm2022/ngwr-waves.mjs.map +1 -1
  313. package/fesm2022/ngwr-window.mjs +88 -18
  314. package/fesm2022/ngwr-window.mjs.map +1 -1
  315. package/gauge/styles/_index.scss +1 -1
  316. package/glitch-text/styles/_index.scss +4 -0
  317. package/i18n/en.json +56 -0
  318. package/i18n/ru.json +56 -0
  319. package/image-cropper/styles/_index.scss +13 -1
  320. package/input/styles/_index.scss +2 -2
  321. package/input-number/styles/_index.scss +7 -2
  322. package/knob/styles/_index.scss +8 -1
  323. package/layout/styles/_index.scss +3 -3
  324. package/lightbox/styles/_index.scss +10 -2
  325. package/line-chart/styles/_index.scss +6 -0
  326. package/llms-full.txt +151 -4
  327. package/llms.txt +57 -8
  328. package/loading-bar/styles/_index.scss +1 -2
  329. package/markdown/styles/_index.scss +296 -0
  330. package/marquee/styles/_index.scss +12 -0
  331. package/mcp/api.js +512 -0
  332. package/mcp/catalog.js +157 -0
  333. package/mcp/server.js +273 -0
  334. package/mcp/tools.js +366 -0
  335. package/meter-group/styles/_index.scss +1 -1
  336. package/package.json +186 -35
  337. package/pagination/styles/_index.scss +6 -6
  338. package/popover/styles/_index.scss +37 -5
  339. package/rating/styles/_index.scss +10 -0
  340. package/schematics/use/symbol-map.json +2 -0
  341. package/segmented/styles/_index.scss +7 -0
  342. package/select/styles/_index.scss +29 -9
  343. package/sidebar/styles/_index.scss +30 -5
  344. package/slider/styles/_index.scss +15 -0
  345. package/speed-dial/styles/_index.scss +20 -0
  346. package/split-text/styles/_index.scss +13 -0
  347. package/star-border/styles/_index.scss +2 -0
  348. package/stepper/styles/_index.scss +1 -1
  349. package/styles/_grid.scss +4 -4
  350. package/styles.scss +1 -0
  351. package/switch/styles/_index.scss +5 -3
  352. package/table/styles/_index.scss +22 -11
  353. package/tabs/styles/_index.scss +11 -1
  354. package/textarea/styles/_index.scss +5 -0
  355. package/theme/styles/_colors.scss +29 -13
  356. package/theme/styles/_dark.scss +11 -3
  357. package/theme/styles/_mixins.scss +3 -0
  358. package/timeline/styles/_index.scss +2 -2
  359. package/toast/styles/_index.scss +17 -8
  360. package/toolbar/styles/_index.scss +3 -3
  361. package/tour/styles/_index.scss +7 -1
  362. package/tree/styles/_index.scss +5 -3
  363. package/types/ngwr-action-sheet.d.ts +9 -1
  364. package/types/ngwr-affix.d.ts +7 -1
  365. package/types/ngwr-anchor.d.ts +8 -1
  366. package/types/ngwr-avatar.d.ts +13 -3
  367. package/types/ngwr-bar-chart.d.ts +16 -0
  368. package/types/ngwr-burger.d.ts +6 -2
  369. package/types/ngwr-button-testing.d.ts +85 -0
  370. package/types/ngwr-button.d.ts +58 -10
  371. package/types/ngwr-calendar-heatmap.d.ts +16 -2
  372. package/types/ngwr-calendar.d.ts +37 -1
  373. package/types/ngwr-carousel-testing.d.ts +257 -0
  374. package/types/ngwr-carousel.d.ts +20 -4
  375. package/types/ngwr-cascader-testing.d.ts +392 -0
  376. package/types/ngwr-checkbox-testing.d.ts +77 -0
  377. package/types/ngwr-checkbox.d.ts +7 -2
  378. package/types/ngwr-clipboard.d.ts +8 -1
  379. package/types/ngwr-collapse-testing.d.ts +290 -0
  380. package/types/ngwr-color-picker.d.ts +20 -11
  381. package/types/ngwr-command-palette-testing.d.ts +437 -0
  382. package/types/ngwr-command-palette.d.ts +25 -2
  383. package/types/ngwr-compare.d.ts +50 -2
  384. package/types/ngwr-config.d.ts +176 -0
  385. package/types/ngwr-context-menu-testing.d.ts +401 -0
  386. package/types/ngwr-context-menu.d.ts +65 -17
  387. package/types/ngwr-counter.d.ts +6 -1
  388. package/types/ngwr-date-adapter-luxon.d.ts +26 -0
  389. package/types/ngwr-date-picker-testing.d.ts +518 -0
  390. package/types/ngwr-date-picker.d.ts +128 -8
  391. package/types/ngwr-dialog-testing.d.ts +79 -0
  392. package/types/ngwr-dialog.d.ts +13 -0
  393. package/types/ngwr-directives.d.ts +10 -1
  394. package/types/ngwr-donut-chart.d.ts +8 -1
  395. package/types/ngwr-drawer-testing.d.ts +196 -0
  396. package/types/ngwr-drawer.d.ts +15 -0
  397. package/types/ngwr-dropdown-testing.d.ts +202 -0
  398. package/types/ngwr-dropdown.d.ts +7 -1
  399. package/types/ngwr-empty.d.ts +19 -4
  400. package/types/ngwr-event-calendar.d.ts +26 -1
  401. package/types/ngwr-file-upload-testing.d.ts +194 -0
  402. package/types/ngwr-form-testing.d.ts +379 -0
  403. package/types/ngwr-form.d.ts +17 -0
  404. package/types/ngwr-gauge.d.ts +13 -1
  405. package/types/ngwr-hotkey.d.ts +2 -0
  406. package/types/ngwr-image-cropper.d.ts +10 -0
  407. package/types/ngwr-input-number-testing.d.ts +226 -0
  408. package/types/ngwr-input-number.d.ts +29 -1
  409. package/types/ngwr-input-otp-testing.d.ts +299 -0
  410. package/types/ngwr-input-otp.d.ts +23 -2
  411. package/types/ngwr-input-testing.d.ts +84 -0
  412. package/types/ngwr-input.d.ts +20 -6
  413. package/types/ngwr-knob.d.ts +18 -0
  414. package/types/ngwr-layout.d.ts +1 -0
  415. package/types/ngwr-lightbox.d.ts +17 -3
  416. package/types/ngwr-line-chart.d.ts +9 -2
  417. package/types/ngwr-list.d.ts +7 -2
  418. package/types/ngwr-loading-bar.d.ts +4 -7
  419. package/types/ngwr-markdown-testing.d.ts +462 -0
  420. package/types/ngwr-markdown.d.ts +534 -0
  421. package/types/ngwr-marquee.d.ts +12 -2
  422. package/types/ngwr-mention-testing.d.ts +359 -0
  423. package/types/ngwr-meta.d.ts +4 -2
  424. package/types/ngwr-meter-group.d.ts +11 -1
  425. package/types/ngwr-overlay.d.ts +33 -2
  426. package/types/ngwr-pagination-testing.d.ts +291 -0
  427. package/types/ngwr-pagination.d.ts +7 -1
  428. package/types/ngwr-popconfirm-testing.d.ts +235 -0
  429. package/types/ngwr-popconfirm.d.ts +31 -21
  430. package/types/ngwr-popover-testing.d.ts +221 -0
  431. package/types/ngwr-popover.d.ts +19 -2
  432. package/types/ngwr-pull-to-refresh.d.ts +7 -0
  433. package/types/ngwr-qr.d.ts +9 -1
  434. package/types/ngwr-radio-testing.d.ts +296 -0
  435. package/types/ngwr-radio.d.ts +8 -2
  436. package/types/ngwr-rating-testing.d.ts +291 -0
  437. package/types/ngwr-rating.d.ts +23 -0
  438. package/types/ngwr-segmented-testing.d.ts +401 -0
  439. package/types/ngwr-select-testing.d.ts +175 -0
  440. package/types/ngwr-select.d.ts +45 -4
  441. package/types/ngwr-sidebar.d.ts +17 -2
  442. package/types/ngwr-slider-testing.d.ts +329 -0
  443. package/types/ngwr-slider.d.ts +35 -1
  444. package/types/ngwr-sparkline.d.ts +12 -2
  445. package/types/ngwr-speed-dial.d.ts +17 -18
  446. package/types/ngwr-spinner.d.ts +8 -1
  447. package/types/ngwr-splitter.d.ts +24 -1
  448. package/types/ngwr-statistic.d.ts +12 -2
  449. package/types/ngwr-stepper-testing.d.ts +346 -0
  450. package/types/ngwr-storage.d.ts +10 -1
  451. package/types/ngwr-switch-testing.d.ts +66 -0
  452. package/types/ngwr-switch.d.ts +7 -2
  453. package/types/ngwr-table-testing.d.ts +423 -0
  454. package/types/ngwr-table.d.ts +42 -0
  455. package/types/ngwr-tabs-testing.d.ts +470 -0
  456. package/types/ngwr-tabs.d.ts +9 -0
  457. package/types/ngwr-textarea-testing.d.ts +184 -0
  458. package/types/ngwr-textarea.d.ts +7 -2
  459. package/types/ngwr-toast-testing.d.ts +80 -0
  460. package/types/ngwr-toast.d.ts +19 -4
  461. package/types/ngwr-tour.d.ts +27 -0
  462. package/types/ngwr-transfer-testing.d.ts +444 -0
  463. package/types/ngwr-transfer.d.ts +16 -1
  464. package/types/ngwr-tree-testing.d.ts +501 -0
  465. package/types/ngwr-tree.d.ts +33 -0
  466. package/types/ngwr-version.d.ts +1 -1
  467. package/types/ngwr-virtual-scroll.d.ts +13 -1
  468. package/types/ngwr-window.d.ts +23 -2
  469. package/typewriter/styles/_index.scss +1 -1
  470. package/typography/styles/_index.scss +1 -1
  471. package/window/styles/_index.scss +32 -9
package/README.md CHANGED
@@ -1,16 +1,17 @@
1
1
  # <img src="https://ngwr.dev/images/logo.svg" alt="ngwr logo" height="32px">
2
2
 
3
3
  [![ngwr website](https://img.shields.io/badge/ngwr.dev-3969e2)](https://ngwr.dev)
4
- [![ngwr version](https://img.shields.io/github/package-json/v/thekhegay/ngwr?filename=projects%2Flib%2Fpackage.json&color=%23f51c6a)](https://www.npmjs.com/package/ngwr)
4
+ [![ngwr version](https://img.shields.io/github/package-json/v/thekhegay/ngwr?filename=projects%2Flib%2Fpackage.json&color=%23e21a62)](https://www.npmjs.com/package/ngwr)
5
5
  [![angular peer](https://img.shields.io/npm/dependency-version/ngwr/peer/@angular/core)](https://www.npmjs.com/package/ngwr)
6
6
  [![ci](https://img.shields.io/github/actions/workflow/status/thekhegay/ngwr/ci.yml?branch=main&label=ci)](https://github.com/thekhegay/ngwr/actions/workflows/ci.yml)
7
+ [![coverage](https://codecov.io/gh/thekhegay/ngwr/branch/main/graph/badge.svg)](https://codecov.io/gh/thekhegay/ngwr)
7
8
  [![license](https://img.shields.io/npm/l/ngwr)](https://github.com/thekhegay/ngwr/blob/main/LICENSE)
8
9
 
9
10
  **NGWR** is a modern Angular UI library — standalone components, signals-first,
10
11
  zoneless-ready, responsive, modular SCSS, fully tree-shakable. Built on top of
11
12
  `@angular/cdk` for overlay, portal, and a11y primitives.
12
13
 
13
- > **Status:** active development. v10 is the current major line (Angular 22 peer).
14
+ > **Status:** active development. v11 is the current major line (Angular 22 peer).
14
15
  > Public API is stable across patch releases and still evolving between majors.
15
16
  > [Open an issue](https://github.com/thekhegay/ngwr/issues/new)
16
17
  > if something breaks or feels wrong.
@@ -28,9 +29,10 @@ zoneless-ready, responsive, modular SCSS, fully tree-shakable. Built on top of
28
29
  | `luxon` _(optional)_ | `^3.0.0` |
29
30
  | `lucide` _(optional)_ | `>= 1.0.0` |
30
31
 
31
- Node ≥ 24.16.0 (or 26+) and TypeScript `~6.0.x` (Angular 22 requires
32
- `typescript >=6.0 <6.1`). Contributing to this repo additionally needs
33
- pnpm ≥ 11.10.
32
+ TypeScript `~6.0.x` (Angular 22's compiler declares `typescript >=6.0 <6.1`) and
33
+ a Node version Angular 22 accepts — `^22.22.3 || ^24.15.0 || >=26`. Contributing
34
+ to this repo needs the narrower `^24.16.0 || >=26` it pins (`.nvmrc` says 24),
35
+ plus pnpm ≥ 11.10.
34
36
 
35
37
  ## Install
36
38
 
@@ -54,9 +56,10 @@ yarn add ngwr @angular/cdk
54
56
  ```
55
57
 
56
58
  `@angular/cdk` is the only required peer. Add an icon set and a date library
57
- only if you use them — `lucide` (or `feather`) for the icon adapters, and
58
- `date-fns` or `luxon` for the calendar / date-picker adapters. The Quick start
59
- below registers a lucide icon, so it needs `lucide`:
59
+ only if you use them — `lucide` (or `feather-icons`) for the icon adapters, and
60
+ `date-fns` or `luxon` for the calendar / date-picker, which otherwise runs on a
61
+ built-in native `Date` adapter. The Quick start below registers a lucide icon, so
62
+ it needs `lucide`:
60
63
 
61
64
  ```shell
62
65
  pnpm add lucide
@@ -71,10 +74,11 @@ The fastest way — pull in everything (theme tokens + all component styles):
71
74
  @use 'ngwr';
72
75
  ```
73
76
 
74
- Good for a spike, but it is every entry point at once — about **247 kB** of CSS
75
- (~30 kB over the wire), which on its own exceeds the 500 kB initial budget a
76
- fresh `ng new` ships with. For anything you intend to keep, opt in per component
77
- below and the sheet stays proportional to what you actually render.
77
+ Good for a spike, but it is every entry point at once — about **265 kB** of CSS
78
+ (~40 kB over the wire), which is over half the 500 kB initial budget a fresh
79
+ `ng new` warns at before any of your own code. For anything you intend to keep,
80
+ opt in per component below and the sheet stays proportional to what you actually
81
+ render.
78
82
 
79
83
  Prefer to opt in per-component? Each component has its own SCSS entry that pulls
80
84
  in the theme automatically:
@@ -183,7 +187,7 @@ export class ProfileForm {
183
187
 
184
188
  **Feedback** — [alert](https://ngwr.dev/reference/components/alert), [empty](https://ngwr.dev/reference/components/empty), [progress](https://ngwr.dev/reference/components/progress), [result](https://ngwr.dev/reference/components/result), [skeleton](https://ngwr.dev/reference/components/skeleton), [spinner](https://ngwr.dev/reference/components/spinner).
185
189
 
186
- **Display** — [avatar](https://ngwr.dev/reference/components/avatar), [badge](https://ngwr.dev/reference/components/badge) (incl. `wr-tag`), [compare](https://ngwr.dev/reference/components/compare), [counter](https://ngwr.dev/reference/components/counter), [descriptions](https://ngwr.dev/reference/components/descriptions), [divider](https://ngwr.dev/reference/components/divider), [image-cropper](https://ngwr.dev/reference/components/image-cropper), [keyboard](https://ngwr.dev/reference/components/keyboard), [lightbox](https://ngwr.dev/reference/components/lightbox), [qr](https://ngwr.dev/reference/components/qrcode), [statistic](https://ngwr.dev/reference/components/statistic), [timeline](https://ngwr.dev/reference/components/timeline).
190
+ **Display** — [avatar](https://ngwr.dev/reference/components/avatar), [badge](https://ngwr.dev/reference/components/badge) (incl. `wr-tag`), [compare](https://ngwr.dev/reference/components/compare), [counter](https://ngwr.dev/reference/components/counter), [descriptions](https://ngwr.dev/reference/components/descriptions), [divider](https://ngwr.dev/reference/components/divider), [image-cropper](https://ngwr.dev/reference/components/image-cropper), [keyboard](https://ngwr.dev/reference/components/keyboard), [lightbox](https://ngwr.dev/reference/components/lightbox), [markdown](https://ngwr.dev/reference/components/markdown), [qr](https://ngwr.dev/reference/components/qrcode), [statistic](https://ngwr.dev/reference/components/statistic), [timeline](https://ngwr.dev/reference/components/timeline).
187
191
 
188
192
  **Layout** — [card](https://ngwr.dev/reference/components/card), [carousel](https://ngwr.dev/reference/components/carousel), [collapse](https://ngwr.dev/reference/components/collapse), [layout](https://ngwr.dev/reference/components/layout), [list](https://ngwr.dev/reference/components/list), [page-header](https://ngwr.dev/reference/components/page-header), [splitter](https://ngwr.dev/reference/components/splitter), [toolbar](https://ngwr.dev/reference/components/toolbar).
189
193
 
@@ -209,7 +213,7 @@ Card packages bundle their related directives: `ngwr/spotlight-card` exports `Wr
209
213
 
210
214
  ### Pipes — `ngwr/pipes`
211
215
 
212
- [wrBytes](https://ngwr.dev/reference/pipes/wr-bytes), [wrDate](https://ngwr.dev/reference/pipes/wr-date), [wrMark](https://ngwr.dev/reference/pipes/wr-mark), [wrNumber](https://ngwr.dev/reference/pipes/wr-number), [wrPlural](https://ngwr.dev/reference/pipes/wr-plural), [wrRange](https://ngwr.dev/reference/pipes/range), [wrTruncate](https://ngwr.dev/reference/pipes/wr-truncate).
216
+ [wrBytes](https://ngwr.dev/reference/pipes/wr-bytes), [wrDate](https://ngwr.dev/reference/pipes/wr-date), [wrMark](https://ngwr.dev/reference/pipes/wr-mark), [wrNumber](https://ngwr.dev/reference/pipes/wr-number), [wrPlural](https://ngwr.dev/reference/pipes/wr-plural), [wrRange](https://ngwr.dev/reference/pipes/wr-range), [wrTruncate](https://ngwr.dev/reference/pipes/wr-truncate).
213
217
 
214
218
  ### Services
215
219
 
@@ -231,7 +235,8 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
231
235
  - [Mobile & responsive](https://ngwr.dev/guides/mobile) — responsive overlays, touch targets & density, swipe gestures, safe-area insets, container-query layouts.
232
236
  - [Typography](https://ngwr.dev/guides/typography) — `wrTypography` directive: headings, paragraphs, lists, links, code.
233
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.
234
- - **Date adapters** — `ngwr/date-adapter-fns`, `ngwr/date-adapter-luxon`. Wire one with `provideWrDateAdapter(...)` to power calendar + every mode of date-picker.
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.
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).
235
240
 
236
241
  ## Highlights
237
242
 
@@ -240,13 +245,27 @@ Math (`clamp`, `round`), coercion (`numAttr`), css helpers (`resolveCssSize`, `g
240
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.).
241
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).
242
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.
243
- - **Tree-shakable.** 130 separate ng-packagr entry points — import only what you use. Per-component FESM bundles are small: a median of ~3 KB gzipped, the heaviest (`ngwr/select`) ~20 KB. The whole catalog gzips to ~516 KB — but real apps pull a handful of entries. The only runtime dependency is `tslib`.
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`.
244
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.
245
250
  - **Tree-shaken icons.** `provideWrIcons(lucideIcons({ plus: Plus }))` registers only the icons you actually import. Dev-mode validation warns about unregistered icons.
246
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`.
247
252
  - **Motion respects the OS.** Every animation component short-circuits to its final state under `prefers-reduced-motion`.
248
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).
249
254
 
255
+ ### MCP server
256
+
257
+ The package ships `ngwr-mcp`, a zero-dependency MCP server that makes those files askable: `search_ngwr` (find an entry point by what you need), `get_ngwr_component`, `get_ngwr_api` (a class's inputs / models / outputs / methods, read out of the shipped `.d.ts`) and `get_ngwr_setup` (the install, `ng g ngwr:use` and provider commands — returned as text; it never runs them). It adds no second copy of the catalog: it reads only files inside its own installed package, makes no network requests, and runs no commands.
258
+
259
+ ```json
260
+ {
261
+ "mcpServers": {
262
+ "ngwr": { "command": "npx", "args": ["-y", "ngwr-mcp"] }
263
+ }
264
+ }
265
+ ```
266
+
267
+ Works in Claude Code (`claude mcp add ngwr -- npx -y ngwr-mcp`), Claude Desktop and Cursor. To pin it to the version in your lockfile, use `"command": "node", "args": ["./node_modules/ngwr/mcp/server.js"]`. [Guide](https://ngwr.dev/guides/mcp).
268
+
250
269
  ## Contributing
251
270
 
252
271
  Conventional commits are enforced on PR titles. Common types: `feat`, `fix`, `perf`, `refactor`, `docs`, `style`, `test`, `build`, `ci`, `chore`, `revert`. Optional scope is the component or area (`feat(checkbox): icon mode`).
@@ -254,9 +273,10 @@ Conventional commits are enforced on PR titles. Common types: `feat`, `fix`, `pe
254
273
  ```shell
255
274
  pnpm install
256
275
  pnpm dev # ng serve --o (showcase)
257
- pnpm build:lib # ng build lib + ai assets + dist assets + schematics
258
- pnpm build:showcase # showcase build + sitemap
259
- pnpm lint # ng lint + eslint scripts + stylelint + colour parity
276
+ pnpm test # ng test lib (vitest)
277
+ pnpm build:lib # ng build lib + ai assets + dist assets + i18n json + schematics + mcp server
278
+ pnpm build:showcase # ai assets + showcase build + sitemap + markdown twins
279
+ pnpm lint # ng lint + eslint scripts + stylelint + colour parity + rtl
260
280
  ```
261
281
 
262
282
  ## Authors
@@ -3,8 +3,8 @@
3
3
  .wr-anchor {
4
4
  display: block;
5
5
  font-family: var(--wr-font-family-base);
6
- border-left: 1.5px solid var(--wr-color-outline);
7
- padding-left: 0.875rem;
6
+ border-inline-start: 1.5px solid var(--wr-color-outline);
7
+ padding-inline-start: 0.875rem;
8
8
 
9
9
  &__list {
10
10
  list-style: none;
@@ -16,7 +16,7 @@
16
16
 
17
17
  &--nested {
18
18
  margin-top: 0.125rem;
19
- padding-left: 0.875rem;
19
+ padding-inline-start: 0.875rem;
20
20
  }
21
21
  }
22
22
 
@@ -37,7 +37,7 @@
37
37
  position: absolute;
38
38
  top: 0.25rem;
39
39
  bottom: 0.25rem;
40
- left: -1rem;
40
+ inset-inline-start: -1rem;
41
41
  width: 1.5px;
42
42
  background: transparent;
43
43
  transition: background var(--wr-transition-base);
@@ -5,7 +5,12 @@
5
5
  // Safe-area: lift the floating button clear of the home indicator / rounded
6
6
  // corner on mobile. env() is 0 without insets, so desktop stays 1.5rem.
7
7
  bottom: calc(1.5rem + env(safe-area-inset-bottom));
8
- right: calc(1.5rem + env(safe-area-inset-right));
8
+ // The button parks at the reader's trailing corner, so the inset is logical.
9
+ // Its safe-area term cannot be: `env()` names the device's physical right
10
+ // edge and does not flip, so under RTL it pads the corner the button no
11
+ // longer sits in (a landscape-only 0-vs-inset difference; the 1.5rem base
12
+ // still holds it off the edge).
13
+ inset-inline-end: calc(1.5rem + env(safe-area-inset-right));
9
14
  z-index: 50;
10
15
  opacity: 0;
11
16
  pointer-events: none;
@@ -2,6 +2,19 @@
2
2
  display: inline-flex;
3
3
  flex-wrap: wrap;
4
4
 
5
+ // Same shape as `wr-rotating-text`: the animated pieces are per-character
6
+ // spans, which a screen reader may read out one letter at a time, so the real
7
+ // string is carried once here and the pieces are taken out of the tree.
8
+ &__sr-only {
9
+ position: absolute;
10
+ width: 1px;
11
+ height: 1px;
12
+ overflow: hidden;
13
+ clip: rect(0 0 0 0);
14
+ clip-path: inset(50%);
15
+ white-space: nowrap;
16
+ }
17
+
5
18
  &__piece {
6
19
  display: inline-block;
7
20
  will-change: transform, filter, opacity;
@@ -72,6 +72,7 @@
72
72
 
73
73
  &__spin {
74
74
  position: absolute;
75
+ // rtl-ok: centred with a physical translate(-50%, -50%), so the pair must stay physical
75
76
  left: 50%;
76
77
  top: 50%;
77
78
  transform: translate(-50%, -50%);
@@ -228,17 +229,17 @@
228
229
 
229
230
  > .wr-btn {
230
231
  border-radius: 0;
231
- margin-left: -1px;
232
+ margin-inline-start: -1px;
232
233
 
233
234
  &:first-child {
234
- margin-left: 0;
235
- border-top-left-radius: var(--wr-btn-radius);
236
- border-bottom-left-radius: var(--wr-btn-radius);
235
+ margin-inline-start: 0;
236
+ border-start-start-radius: var(--wr-btn-radius);
237
+ border-end-start-radius: var(--wr-btn-radius);
237
238
  }
238
239
 
239
240
  &:last-child {
240
- border-top-right-radius: var(--wr-btn-radius);
241
- border-bottom-right-radius: var(--wr-btn-radius);
241
+ border-start-end-radius: var(--wr-btn-radius);
242
+ border-end-end-radius: var(--wr-btn-radius);
242
243
  }
243
244
 
244
245
  &:hover,
@@ -256,6 +257,10 @@
256
257
  // seam there and let the raised border own it cleanly.
257
258
  @each $name in theme.$colors {
258
259
  > .wr-btn--#{$name}:not(.wr-btn--outlined):not(:last-child) {
260
+ // `box-shadow` offsets are physical by spec — there is no logical form to
261
+ // convert to. The seam lands on the wrong edge under RTL; fixing it needs a
262
+ // `[dir]` rule or a real border, which is beyond a property-level rewrite.
263
+ // rtl-ok: box-shadow has no logical equivalent — see above
259
264
  box-shadow: inset -1px 0 0 rgba(var(--wr-color-black-rgb), 0.2);
260
265
 
261
266
  &:hover,
@@ -64,18 +64,29 @@
64
64
  transform: translateY(-50%) scale(1.05);
65
65
  }
66
66
 
67
+ // The track's motion is direction-aware now — `carousel.ts` signs its
68
+ // `translateX` and its swipe threshold from `Directionality` — so the arrows
69
+ // follow the reading direction too. "Previous" is where the earlier slides
70
+ // are, which is the inline start in both directions.
67
71
  &--prev {
68
- left: 0.75rem;
72
+ inset-inline-start: 0.75rem;
69
73
  }
70
74
 
71
75
  &--next {
72
- right: 0.75rem;
76
+ inset-inline-end: 0.75rem;
77
+ }
78
+
79
+ // The chevrons are drawn pointing physically left and right, so they turn
80
+ // around with the strip: going BACK is going right for an RTL reader.
81
+ [dir='rtl'] & svg {
82
+ transform: scaleX(-1);
73
83
  }
74
84
  }
75
85
 
76
86
  &__dots {
77
87
  position: absolute;
78
88
  bottom: 0.75rem;
89
+ // rtl-ok: centred with a physical translateX, so the pair must stay physical.
79
90
  left: 50%;
80
91
  transform: translateX(-50%);
81
92
  display: flex;
@@ -57,7 +57,7 @@
57
57
  font-size: var(--wr-cascader-font-size);
58
58
  line-height: var(--wr-cascader-line-height);
59
59
  cursor: pointer;
60
- text-align: left;
60
+ text-align: start;
61
61
  transition:
62
62
  border-color var(--wr-transition-base),
63
63
  box-shadow var(--wr-transition-base);
@@ -163,7 +163,7 @@
163
163
  gap: 0.125rem;
164
164
 
165
165
  + .wr-cascader__col {
166
- border-left: 1px solid var(--wr-color-outline);
166
+ border-inline-start: 1px solid var(--wr-color-outline);
167
167
  }
168
168
  }
169
169
 
@@ -33,10 +33,12 @@
33
33
  &__char {
34
34
  position: absolute;
35
35
  top: 50%;
36
+ // rtl-ok: centred on the spinner's midpoint by a physical margin-left/-top pair plus a per-char translateY()
36
37
  left: 50%;
37
38
  display: inline-block;
38
39
  // Pre-shift by -50% so the char's centre sits at the spinner centre
39
40
  // before the per-char `rotate translateY(-radius)` runs.
41
+ // rtl-ok: the negative half of the `left: 50%` centring pair, symmetric with `margin-top`
40
42
  margin-left: -0.5em;
41
43
  margin-top: -0.5em;
42
44
  line-height: 1;
@@ -30,7 +30,7 @@
30
30
  font: inherit;
31
31
  font-size: var(--wr-text-base);
32
32
  font-weight: 500;
33
- text-align: left;
33
+ text-align: start;
34
34
  cursor: pointer;
35
35
  transition: background var(--wr-transition-base);
36
36
 
@@ -94,6 +94,11 @@
94
94
  height: var(--wr-color-picker-thumb-size);
95
95
  transform: translate(-50%, -50%);
96
96
  top: 0;
97
+ // The template overrides this with `[style.left.%]`, computed in color-picker.ts
98
+ // from `(event.clientX - rect.left) / rect.width` — a physical-pixel measurement
99
+ // against the SV panel and the two gradient tracks, which are painted `to right`
100
+ // and do not flip.
101
+ // rtl-ok: canvas geometry in physical pixels, centred by the physical translate
97
102
  left: 0;
98
103
  border-radius: 50%;
99
104
  border: 2px solid #fff;
@@ -194,7 +199,7 @@
194
199
  }
195
200
 
196
201
  &__field--wide input {
197
- text-align: left;
202
+ text-align: start;
198
203
  text-transform: lowercase;
199
204
  padding: 0.3125rem 0.5rem;
200
205
  font-size: var(--wr-text-sm);
@@ -74,8 +74,7 @@
74
74
  }
75
75
 
76
76
  &--vertical &__divider {
77
- left: 0;
78
- right: 0;
77
+ inset-inline: 0;
79
78
  height: 2px;
80
79
  transform: translateY(-50%);
81
80
  }
@@ -19,6 +19,11 @@
19
19
  // open feel is consistent across all overlay families.
20
20
  opacity: 0;
21
21
  transform: scale(0.96);
22
+ // `transform-origin` has no logical keyword form, and this corner is the one
23
+ // the directive pins to the pointer — it writes `top` / `left` inline from
24
+ // `pageX`/`pageY`, physical pixels. Origin and those coordinates are one pair;
25
+ // mirroring the menu around the cursor is a TS change, not a rename.
26
+ // rtl-ok: animation origin tied to the pointer coords the directive writes
22
27
  transform-origin: top left;
23
28
  transition:
24
29
  opacity var(--wr-overlay-duration) var(--wr-overlay-ease),
@@ -94,7 +99,7 @@
94
99
  width: 0.8125rem;
95
100
  height: 0.8125rem;
96
101
  color: var(--wr-color-on-surface-muted);
97
- margin-left: 0.25rem;
102
+ margin-inline-start: 0.25rem;
98
103
  }
99
104
 
100
105
  &--has-submenu:hover &__chevron,
@@ -109,7 +109,7 @@
109
109
 
110
110
  &--bordered#{&}--inline &__label {
111
111
  background: rgba(var(--wr-color-outline-rgb), 0.35);
112
- border-right: 1px solid var(--wr-color-outline);
112
+ border-inline-end: 1px solid var(--wr-color-outline);
113
113
  }
114
114
  }
115
115
 
@@ -158,6 +158,6 @@
158
158
 
159
159
  .wr-descriptions--bordered.wr-descriptions--inline .wr-descriptions__label {
160
160
  background: transparent;
161
- border-right: 0;
161
+ border-inline-end: 0;
162
162
  }
163
163
  }
@@ -10,6 +10,13 @@
10
10
  z-index: 1000;
11
11
  pointer-events: none;
12
12
  top: 0;
13
+ // Kept verbatim from CDK's prebuilt sheet on purpose. The box is a fixed,
14
+ // full-viewport rect (`width`/`height: 100%`), so start/end is a no-op in both
15
+ // directions — and an app that also loads CDK's own prebuilt CSS would then
16
+ // hold `left: 0` from CDK next to `inset-inline-start: 0` from here, which in
17
+ // RTL over-constrains the same rect for no gain. Fidelity to the source we
18
+ // mirror is worth more than a rename that changes nothing.
19
+ // rtl-ok: re-emitted CDK rule; full-viewport box, identical under RTL
13
20
  left: 0;
14
21
  width: 100%;
15
22
  height: 100%;
@@ -87,6 +94,37 @@
87
94
  color: var(--wr-color-on-surface);
88
95
 
89
96
  animation: wr-dialog-enter 0.2s ease-out;
97
+
98
+ // The component the service mounts sits BETWEEN this panel and the dialog's
99
+ // own parts, and it is the panel's only flex item. Left a plain block it keeps
100
+ // `min-height: auto` — whose automatic minimum size under flexbox is its
101
+ // content height — so it refuses to shrink, the panel clips it with
102
+ // `overflow: hidden`, and `[wrDialogContent]` never becomes a scroll area
103
+ // because no bounded height reaches it. Measured in Chromium at an 883px
104
+ // viewport: an 842px panel around a 1732px host, footer 858px below the fold,
105
+ // no scrollbar. The rule has to live here — the host is inserted by the
106
+ // service, so a consumer owns no element between panel and content.
107
+ //
108
+ // Both declarations are load-bearing: `min-height: 0` alone shrinks the host
109
+ // but, still a block, lets its children overflow visibly (footer measured
110
+ // 861px past the fold). The flex column is what bounds the content's track.
111
+ //
112
+ // `display: contents` fixes the scrolling identically and is deliberately NOT
113
+ // used — it removes the host's box, and with it every `:host` style the
114
+ // consumer set on their own dialog component, a break they would never connect
115
+ // to an ngwr upgrade. This does out-specify their `:host { display: … }`, which
116
+ // is the point (a block host is the bug); `!important` keeps their layout and
117
+ // still scrolls, since `min-height: 0` bounds a grid track just as well.
118
+ //
119
+ // `:not()` because the built-in dismiss is a panel child too. Absolutely
120
+ // positioned, it is not a flex item — so the flex properties skip it anyway,
121
+ // but `display: flex` would re-lay-out the icon inside it.
122
+ > *:not(.wr-dialog__close) {
123
+ display: flex;
124
+ flex-direction: column;
125
+ flex: 1 1 auto;
126
+ min-height: 0;
127
+ }
90
128
  }
91
129
 
92
130
  .wr-dialog {
@@ -85,24 +85,41 @@
85
85
 
86
86
  // Rounded leading corners
87
87
  // The edge facing the viewport interior. Common bottom-sheet styling.
88
+ //
89
+ // Every radius below is keyed off `position`, a PHYSICAL input
90
+ // (`left | right | top | bottom`) naming a viewport edge — a `--left` drawer
91
+ // is on the physical left in either direction, and the CDK
92
+ // `GlobalPositionStrategy` that places it calls `.left()` / `.right()`. So the
93
+ // corners it softens are physical: made logical, a `--left` panel in RTL would
94
+ // round the edge against the viewport instead of the one facing the content.
88
95
  &--rounded.wr-drawer__panel--bottom {
96
+ // rtl-ok: symmetric pair on the block-start edge — identical under RTL
89
97
  border-top-left-radius: var(--wr-border-radius-lg);
98
+ // rtl-ok: symmetric pair on the block-start edge — identical under RTL
90
99
  border-top-right-radius: var(--wr-border-radius-lg);
91
100
  }
92
101
  &--rounded.wr-drawer__panel--top {
102
+ // rtl-ok: symmetric pair on the block-end edge — identical under RTL
93
103
  border-bottom-left-radius: var(--wr-border-radius-lg);
104
+ // rtl-ok: symmetric pair on the block-end edge — identical under RTL
94
105
  border-bottom-right-radius: var(--wr-border-radius-lg);
95
106
  }
96
107
  &--rounded.wr-drawer__panel--left {
108
+ // rtl-ok: physical `position` — inner edge of a physically left-anchored panel
97
109
  border-top-right-radius: var(--wr-border-radius-lg);
110
+ // rtl-ok: physical `position` — inner edge of a physically left-anchored panel
98
111
  border-bottom-right-radius: var(--wr-border-radius-lg);
99
112
  }
100
113
  &--rounded.wr-drawer__panel--right {
114
+ // rtl-ok: physical `position` — inner edge of a physically right-anchored panel
101
115
  border-top-left-radius: var(--wr-border-radius-lg);
116
+ // rtl-ok: physical `position` — inner edge of a physically right-anchored panel
102
117
  border-bottom-left-radius: var(--wr-border-radius-lg);
103
118
  }
104
119
 
105
- // Safe-area padding on the trailing edge
120
+ // Safe-area padding on the trailing edge. `env(safe-area-inset-*)` is defined
121
+ // per physical screen edge — the notch does not move when the text does — so
122
+ // the padding that clears it stays physical as well.
106
123
  &--safe-area.wr-drawer__panel--bottom {
107
124
  padding-bottom: env(safe-area-inset-bottom);
108
125
  }
@@ -110,9 +127,11 @@
110
127
  padding-top: env(safe-area-inset-top);
111
128
  }
112
129
  &--safe-area.wr-drawer__panel--left {
130
+ // rtl-ok: pairs with the physical `env(safe-area-inset-left)` screen inset
113
131
  padding-left: env(safe-area-inset-left);
114
132
  }
115
133
  &--safe-area.wr-drawer__panel--right {
134
+ // rtl-ok: pairs with the physical `env(safe-area-inset-right)` screen inset
116
135
  padding-right: env(safe-area-inset-right);
117
136
  }
118
137
  }
@@ -1,8 +1,10 @@
1
1
  @use '../../theme/styles' as theme;
2
2
  @use '../../overlay/styles'; // shared .wr-overlay-sheet / .wr-overlay-backdrop for responsive mode
3
3
 
4
- // `.wr-dropdown` is the inline trigger marker; the menu and overlay live
5
- // in the CDK overlay portal and so are separate blocks, not elements.
4
+ // The directive marks its host `.wr-dropdown-trigger` — `.wr-dropdown` below is
5
+ // reachable only if a consumer applies it by hand, which is why it stays: the
6
+ // `.wr-*` names are public API. The menu and overlay live in the CDK overlay
7
+ // portal and so are separate blocks, not elements.
6
8
 
7
9
  .wr-dropdown {
8
10
  cursor: pointer;
@@ -31,6 +33,10 @@
31
33
  font-family: var(--wr-font-family-base);
32
34
  // Match popover / popconfirm / context-menu open feel.
33
35
  animation: wr-overlay-in var(--wr-overlay-duration) var(--wr-overlay-ease);
36
+ // `transform-origin` has no logical keyword form, and the corner it names is
37
+ // the scale-in choreography of `wr-overlay-in`, shared with popover /
38
+ // popconfirm / context-menu. Mirroring it needs a direction-aware rule.
39
+ // rtl-ok: animation origin, no logical keyword form exists
34
40
  transform-origin: top left;
35
41
  }
36
42
 
@@ -48,12 +54,16 @@
48
54
  padding-top: 0.25rem;
49
55
  }
50
56
 
57
+ // The gap sits on the pane edge that faces the trigger. `left` / `right` map
58
+ // to CDK `originX: 'start' | 'end'` (see `WR_DROPDOWN_POSITIONS`), which
59
+ // `FlexibleConnectedPositionStrategy` already resolves against the ambient
60
+ // `Directionality` — so the padding has to follow the same axis, logically.
51
61
  &--left {
52
- padding-right: 0.25rem;
62
+ padding-inline-end: 0.25rem;
53
63
  }
54
64
 
55
65
  &--right {
56
- padding-left: 0.25rem;
66
+ padding-inline-start: 0.25rem;
57
67
  }
58
68
  }
59
69
 
@@ -76,7 +86,7 @@
76
86
  font: inherit;
77
87
  font-size: var(--wr-text-sm);
78
88
  line-height: 1.25rem;
79
- text-align: left;
89
+ text-align: start;
80
90
  white-space: nowrap;
81
91
  cursor: pointer;
82
92
  user-select: none;
@@ -104,6 +114,10 @@
104
114
  color: var(--wr-color-on-surface-muted);
105
115
  cursor: not-allowed;
106
116
  opacity: 0.6;
117
+ // The item's own `disabled` guards only the KEYBOARD path; the host element is
118
+ // where a consumer binds `(click)`, and nothing stopped a real click reaching
119
+ // it. `wr-btn` and `wr-checkbox` disable their pointer the same way.
120
+ pointer-events: none;
107
121
 
108
122
  &:hover {
109
123
  background: transparent;
@@ -19,6 +19,16 @@
19
19
  color: var(--wr-color-on-surface-muted);
20
20
  opacity: 0.6;
21
21
  margin-bottom: 0.25rem;
22
+ // The built-in glyph is sized by `.wr-icon__svg` at 1em; a custom
23
+ // `<wr-icon>` sizes through this var instead, so without it the two
24
+ // branches of the same slot rendered at different sizes (15px vs 18px).
25
+ --wr-icon-size: 1em;
26
+ }
27
+
28
+ // `<wr-icon>` sets `color: inherit` on its own host at equal specificity; the
29
+ // type selector wins it back so a custom icon stays as muted as the default.
30
+ wr-icon.wr-empty__icon {
31
+ color: var(--wr-color-on-surface-muted);
22
32
  }
23
33
 
24
34
  &__title {