ngwr 14.7.0 → 14.9.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 (482) hide show
  1. package/README.md +66 -332
  2. package/alert/styles/_index.scss +10 -0
  3. package/avatar/styles/_index.scss +18 -7
  4. package/badge/styles/_index.scss +7 -0
  5. package/badge/styles/_tag.scss +7 -1
  6. package/bar-chart/styles/_index.scss +1 -0
  7. package/button/styles/_index.scss +6 -0
  8. package/calendar-heatmap/styles/_index.scss +1 -0
  9. package/cascader/styles/_rules.scss +87 -15
  10. package/checkbox/styles/_index.scss +4 -0
  11. package/command-palette/styles/_index.scss +1 -1
  12. package/date-picker/styles/_index.scss +30 -0
  13. package/density/styles/_index.scss +4 -2
  14. package/divider/styles/_index.scss +2 -0
  15. package/donut-chart/styles/_index.scss +10 -0
  16. package/dropdown/styles/_index.scss +67 -5
  17. package/editor/styles/_index.scss +441 -0
  18. package/event-calendar/styles/_index.scss +209 -35
  19. package/fesm2022/ngwr-action-sheet-testing.mjs.map +1 -1
  20. package/fesm2022/ngwr-action-sheet.mjs +3 -3
  21. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  22. package/fesm2022/ngwr-affix.mjs +3 -3
  23. package/fesm2022/ngwr-affix.mjs.map +1 -1
  24. package/fesm2022/ngwr-alert.mjs +3 -3
  25. package/fesm2022/ngwr-alert.mjs.map +1 -1
  26. package/fesm2022/ngwr-anchor.mjs +3 -3
  27. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  28. package/fesm2022/ngwr-aurora.mjs +3 -3
  29. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  30. package/fesm2022/ngwr-avatar.mjs +3 -3
  31. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  32. package/fesm2022/ngwr-back-top.mjs +3 -3
  33. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  34. package/fesm2022/ngwr-badge.mjs +28 -13
  35. package/fesm2022/ngwr-badge.mjs.map +1 -1
  36. package/fesm2022/ngwr-bar-chart-testing.mjs.map +1 -1
  37. package/fesm2022/ngwr-bar-chart.mjs +31 -6
  38. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  39. package/fesm2022/ngwr-blur-text-testing.mjs.map +1 -1
  40. package/fesm2022/ngwr-blur-text.mjs +3 -3
  41. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  42. package/fesm2022/ngwr-border-glow-testing.mjs.map +1 -1
  43. package/fesm2022/ngwr-border-glow.mjs +3 -3
  44. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  45. package/fesm2022/ngwr-breadcrumbs.mjs +6 -6
  46. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  47. package/fesm2022/ngwr-burger.mjs +3 -3
  48. package/fesm2022/ngwr-burger.mjs.map +1 -1
  49. package/fesm2022/ngwr-button-testing.mjs.map +1 -1
  50. package/fesm2022/ngwr-button.mjs +6 -6
  51. package/fesm2022/ngwr-button.mjs.map +1 -1
  52. package/fesm2022/ngwr-calendar-heatmap-testing.mjs.map +1 -1
  53. package/fesm2022/ngwr-calendar-heatmap.mjs +61 -6
  54. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  55. package/fesm2022/ngwr-calendar-testing.mjs.map +1 -1
  56. package/fesm2022/ngwr-calendar.mjs +3 -3
  57. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  58. package/fesm2022/ngwr-card.mjs +9 -9
  59. package/fesm2022/ngwr-card.mjs.map +1 -1
  60. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -1
  61. package/fesm2022/ngwr-carousel.mjs +6 -6
  62. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  63. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -1
  64. package/fesm2022/ngwr-cascader.mjs +4 -4
  65. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  66. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -1
  67. package/fesm2022/ngwr-checkbox.mjs +18 -8
  68. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  69. package/fesm2022/ngwr-circular-text-testing.mjs.map +1 -1
  70. package/fesm2022/ngwr-circular-text.mjs +3 -3
  71. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  72. package/fesm2022/ngwr-click-spark.mjs +3 -3
  73. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  74. package/fesm2022/ngwr-clipboard.mjs +3 -3
  75. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  76. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -1
  77. package/fesm2022/ngwr-collapse.mjs +9 -9
  78. package/fesm2022/ngwr-collapse.mjs.map +1 -1
  79. package/fesm2022/ngwr-color-picker-testing.mjs.map +1 -1
  80. package/fesm2022/ngwr-color-picker.mjs +6 -6
  81. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  82. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -1
  83. package/fesm2022/ngwr-command-palette.mjs +3 -3
  84. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  85. package/fesm2022/ngwr-compare.mjs +3 -3
  86. package/fesm2022/ngwr-compare.mjs.map +1 -1
  87. package/fesm2022/ngwr-confetti.mjs +3 -3
  88. package/fesm2022/ngwr-confetti.mjs.map +1 -1
  89. package/fesm2022/ngwr-config.mjs.map +1 -1
  90. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -1
  91. package/fesm2022/ngwr-context-menu.mjs +12 -12
  92. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  93. package/fesm2022/ngwr-cookie.mjs +3 -3
  94. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  95. package/fesm2022/ngwr-counter.mjs +6 -6
  96. package/fesm2022/ngwr-counter.mjs.map +1 -1
  97. package/fesm2022/ngwr-date-adapters-fns.mjs +3 -3
  98. package/fesm2022/ngwr-date-adapters-fns.mjs.map +1 -1
  99. package/fesm2022/ngwr-date-adapters-luxon.mjs +3 -3
  100. package/fesm2022/ngwr-date-adapters-luxon.mjs.map +1 -1
  101. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -1
  102. package/fesm2022/ngwr-date-picker.mjs +721 -62
  103. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  104. package/fesm2022/ngwr-date.mjs +3 -3
  105. package/fesm2022/ngwr-date.mjs.map +1 -1
  106. package/fesm2022/ngwr-decrypt-text-testing.mjs.map +1 -1
  107. package/fesm2022/ngwr-decrypt-text.mjs +3 -3
  108. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  109. package/fesm2022/ngwr-density.mjs +6 -6
  110. package/fesm2022/ngwr-density.mjs.map +1 -1
  111. package/fesm2022/ngwr-descriptions.mjs +6 -6
  112. package/fesm2022/ngwr-descriptions.mjs.map +1 -1
  113. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -1
  114. package/fesm2022/ngwr-dialog.mjs +15 -15
  115. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  116. package/fesm2022/ngwr-directives.mjs +12 -12
  117. package/fesm2022/ngwr-directives.mjs.map +1 -1
  118. package/fesm2022/ngwr-divider.mjs +3 -3
  119. package/fesm2022/ngwr-divider.mjs.map +1 -1
  120. package/fesm2022/ngwr-donut-chart-testing.mjs.map +1 -1
  121. package/fesm2022/ngwr-donut-chart.mjs +48 -6
  122. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  123. package/fesm2022/ngwr-drag-drop.mjs +6 -6
  124. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  125. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -1
  126. package/fesm2022/ngwr-drawer.mjs +18 -18
  127. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  128. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -1
  129. package/fesm2022/ngwr-dropdown.mjs +174 -25
  130. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  131. package/fesm2022/ngwr-editor-testing.mjs +568 -0
  132. package/fesm2022/ngwr-editor-testing.mjs.map +1 -0
  133. package/fesm2022/ngwr-editor.mjs +2601 -0
  134. package/fesm2022/ngwr-editor.mjs.map +1 -0
  135. package/fesm2022/ngwr-empty.mjs +3 -3
  136. package/fesm2022/ngwr-empty.mjs.map +1 -1
  137. package/fesm2022/ngwr-event-calendar-testing.mjs.map +1 -1
  138. package/fesm2022/ngwr-event-calendar.mjs +14 -7
  139. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  140. package/fesm2022/ngwr-falling-text-testing.mjs.map +1 -1
  141. package/fesm2022/ngwr-falling-text.mjs +3 -3
  142. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  143. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -1
  144. package/fesm2022/ngwr-file-upload.mjs +3 -3
  145. package/fesm2022/ngwr-file-upload.mjs.map +1 -1
  146. package/fesm2022/ngwr-form-testing.mjs.map +1 -1
  147. package/fesm2022/ngwr-form.mjs +61 -10
  148. package/fesm2022/ngwr-form.mjs.map +1 -1
  149. package/fesm2022/ngwr-fuzzy-text-testing.mjs.map +1 -1
  150. package/fesm2022/ngwr-fuzzy-text.mjs +3 -3
  151. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  152. package/fesm2022/ngwr-gauge-testing.mjs.map +1 -1
  153. package/fesm2022/ngwr-gauge.mjs +35 -6
  154. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  155. package/fesm2022/ngwr-glitch-text-testing.mjs.map +1 -1
  156. package/fesm2022/ngwr-glitch-text.mjs +3 -3
  157. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  158. package/fesm2022/ngwr-gradient-text-testing.mjs.map +1 -1
  159. package/fesm2022/ngwr-gradient-text.mjs +3 -3
  160. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  161. package/fesm2022/ngwr-graph-testing.mjs.map +1 -1
  162. package/fesm2022/ngwr-graph.mjs +6 -6
  163. package/fesm2022/ngwr-graph.mjs.map +1 -1
  164. package/fesm2022/ngwr-hotkey.mjs +6 -6
  165. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  166. package/fesm2022/ngwr-i18n-ar.mjs +31 -0
  167. package/fesm2022/ngwr-i18n-ar.mjs.map +1 -1
  168. package/fesm2022/ngwr-i18n-cs.mjs +31 -0
  169. package/fesm2022/ngwr-i18n-cs.mjs.map +1 -1
  170. package/fesm2022/ngwr-i18n-de.mjs +31 -0
  171. package/fesm2022/ngwr-i18n-de.mjs.map +1 -1
  172. package/fesm2022/ngwr-i18n-en.mjs +39 -0
  173. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  174. package/fesm2022/ngwr-i18n-es.mjs +31 -0
  175. package/fesm2022/ngwr-i18n-es.mjs.map +1 -1
  176. package/fesm2022/ngwr-i18n-fr.mjs +31 -0
  177. package/fesm2022/ngwr-i18n-fr.mjs.map +1 -1
  178. package/fesm2022/ngwr-i18n-he.mjs +31 -0
  179. package/fesm2022/ngwr-i18n-he.mjs.map +1 -1
  180. package/fesm2022/ngwr-i18n-hi.mjs +31 -0
  181. package/fesm2022/ngwr-i18n-hi.mjs.map +1 -1
  182. package/fesm2022/ngwr-i18n-id.mjs +31 -0
  183. package/fesm2022/ngwr-i18n-id.mjs.map +1 -1
  184. package/fesm2022/ngwr-i18n-it.mjs +31 -0
  185. package/fesm2022/ngwr-i18n-it.mjs.map +1 -1
  186. package/fesm2022/ngwr-i18n-ja.mjs +31 -0
  187. package/fesm2022/ngwr-i18n-ja.mjs.map +1 -1
  188. package/fesm2022/ngwr-i18n-ko.mjs +31 -0
  189. package/fesm2022/ngwr-i18n-ko.mjs.map +1 -1
  190. package/fesm2022/ngwr-i18n-nl.mjs +31 -0
  191. package/fesm2022/ngwr-i18n-nl.mjs.map +1 -1
  192. package/fesm2022/ngwr-i18n-pl.mjs +31 -0
  193. package/fesm2022/ngwr-i18n-pl.mjs.map +1 -1
  194. package/fesm2022/ngwr-i18n-pt.mjs +31 -0
  195. package/fesm2022/ngwr-i18n-pt.mjs.map +1 -1
  196. package/fesm2022/ngwr-i18n-ru.mjs +31 -0
  197. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  198. package/fesm2022/ngwr-i18n-sv.mjs +31 -0
  199. package/fesm2022/ngwr-i18n-sv.mjs.map +1 -1
  200. package/fesm2022/ngwr-i18n-tr.mjs +31 -0
  201. package/fesm2022/ngwr-i18n-tr.mjs.map +1 -1
  202. package/fesm2022/ngwr-i18n-uk.mjs +31 -0
  203. package/fesm2022/ngwr-i18n-uk.mjs.map +1 -1
  204. package/fesm2022/ngwr-i18n-vi.mjs +31 -0
  205. package/fesm2022/ngwr-i18n-vi.mjs.map +1 -1
  206. package/fesm2022/ngwr-i18n-zh-TW.mjs +31 -0
  207. package/fesm2022/ngwr-i18n-zh-TW.mjs.map +1 -1
  208. package/fesm2022/ngwr-i18n-zh.mjs +31 -0
  209. package/fesm2022/ngwr-i18n-zh.mjs.map +1 -1
  210. package/fesm2022/ngwr-i18n.mjs +9 -9
  211. package/fesm2022/ngwr-i18n.mjs.map +1 -1
  212. package/fesm2022/ngwr-icon-adapters-feather.mjs.map +1 -1
  213. package/fesm2022/ngwr-icon-adapters-lucide.mjs.map +1 -1
  214. package/fesm2022/ngwr-icon.mjs +6 -6
  215. package/fesm2022/ngwr-icon.mjs.map +1 -1
  216. package/fesm2022/ngwr-image-cropper-testing.mjs.map +1 -1
  217. package/fesm2022/ngwr-image-cropper.mjs +3 -3
  218. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  219. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -1
  220. package/fesm2022/ngwr-input-number.mjs +15 -3
  221. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  222. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -1
  223. package/fesm2022/ngwr-input-otp.mjs +3 -3
  224. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  225. package/fesm2022/ngwr-input-testing.mjs.map +1 -1
  226. package/fesm2022/ngwr-input.mjs +15 -15
  227. package/fesm2022/ngwr-input.mjs.map +1 -1
  228. package/fesm2022/ngwr-keyboard.mjs +3 -3
  229. package/fesm2022/ngwr-keyboard.mjs.map +1 -1
  230. package/fesm2022/ngwr-knob-testing.mjs.map +1 -1
  231. package/fesm2022/ngwr-knob.mjs +3 -3
  232. package/fesm2022/ngwr-knob.mjs.map +1 -1
  233. package/fesm2022/ngwr-layout.mjs +15 -15
  234. package/fesm2022/ngwr-layout.mjs.map +1 -1
  235. package/fesm2022/ngwr-lightbox-testing.mjs.map +1 -1
  236. package/fesm2022/ngwr-lightbox.mjs +3 -3
  237. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  238. package/fesm2022/ngwr-line-chart-testing.mjs.map +1 -1
  239. package/fesm2022/ngwr-line-chart.mjs +18 -7
  240. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  241. package/fesm2022/ngwr-list.mjs +6 -6
  242. package/fesm2022/ngwr-list.mjs.map +1 -1
  243. package/fesm2022/ngwr-loading-bar-router.mjs.map +1 -1
  244. package/fesm2022/ngwr-loading-bar.mjs +6 -6
  245. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  246. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -1
  247. package/fesm2022/ngwr-markdown.mjs +798 -17
  248. package/fesm2022/ngwr-markdown.mjs.map +1 -1
  249. package/fesm2022/ngwr-marquee-testing.mjs.map +1 -1
  250. package/fesm2022/ngwr-marquee.mjs +3 -3
  251. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  252. package/fesm2022/ngwr-media.mjs +3 -3
  253. package/fesm2022/ngwr-media.mjs.map +1 -1
  254. package/fesm2022/ngwr-mention-testing.mjs.map +1 -1
  255. package/fesm2022/ngwr-mention.mjs +6 -6
  256. package/fesm2022/ngwr-mention.mjs.map +1 -1
  257. package/fesm2022/ngwr-meta.mjs +6 -6
  258. package/fesm2022/ngwr-meta.mjs.map +1 -1
  259. package/fesm2022/ngwr-meter-group-testing.mjs +7 -3
  260. package/fesm2022/ngwr-meter-group-testing.mjs.map +1 -1
  261. package/fesm2022/ngwr-meter-group.mjs +26 -6
  262. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  263. package/fesm2022/ngwr-overlay.mjs +6 -6
  264. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  265. package/fesm2022/ngwr-page-header.mjs +13 -5
  266. package/fesm2022/ngwr-page-header.mjs.map +1 -1
  267. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -1
  268. package/fesm2022/ngwr-pagination.mjs +3 -3
  269. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  270. package/fesm2022/ngwr-pipes.mjs +21 -21
  271. package/fesm2022/ngwr-pipes.mjs.map +1 -1
  272. package/fesm2022/ngwr-platform.mjs +9 -9
  273. package/fesm2022/ngwr-platform.mjs.map +1 -1
  274. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -1
  275. package/fesm2022/ngwr-popconfirm.mjs +6 -6
  276. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  277. package/fesm2022/ngwr-popover-testing.mjs.map +1 -1
  278. package/fesm2022/ngwr-popover.mjs +578 -16
  279. package/fesm2022/ngwr-popover.mjs.map +1 -1
  280. package/fesm2022/ngwr-progress.mjs +3 -3
  281. package/fesm2022/ngwr-progress.mjs.map +1 -1
  282. package/fesm2022/ngwr-pull-to-refresh.mjs +3 -3
  283. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  284. package/fesm2022/ngwr-qr.mjs +3 -3
  285. package/fesm2022/ngwr-qr.mjs.map +1 -1
  286. package/fesm2022/ngwr-radio-testing.mjs.map +1 -1
  287. package/fesm2022/ngwr-radio.mjs +6 -6
  288. package/fesm2022/ngwr-radio.mjs.map +1 -1
  289. package/fesm2022/ngwr-rating-testing.mjs.map +1 -1
  290. package/fesm2022/ngwr-rating.mjs +3 -3
  291. package/fesm2022/ngwr-rating.mjs.map +1 -1
  292. package/fesm2022/ngwr-result.mjs +12 -12
  293. package/fesm2022/ngwr-result.mjs.map +1 -1
  294. package/fesm2022/ngwr-rotating-text-testing.mjs.map +1 -1
  295. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  296. package/fesm2022/ngwr-rotating-text.mjs.map +1 -1
  297. package/fesm2022/ngwr-schema-form.mjs +3 -3
  298. package/fesm2022/ngwr-schema-form.mjs.map +1 -1
  299. package/fesm2022/ngwr-scroll.mjs +3 -3
  300. package/fesm2022/ngwr-scroll.mjs.map +1 -1
  301. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -1
  302. package/fesm2022/ngwr-segmented.mjs +3 -3
  303. package/fesm2022/ngwr-segmented.mjs.map +1 -1
  304. package/fesm2022/ngwr-select-testing.mjs.map +1 -1
  305. package/fesm2022/ngwr-select.mjs +12 -12
  306. package/fesm2022/ngwr-select.mjs.map +1 -1
  307. package/fesm2022/ngwr-shiny-text-testing.mjs.map +1 -1
  308. package/fesm2022/ngwr-shiny-text.mjs +6 -6
  309. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  310. package/fesm2022/ngwr-sidebar.mjs +10 -3
  311. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  312. package/fesm2022/ngwr-skeleton.mjs +3 -3
  313. package/fesm2022/ngwr-skeleton.mjs.map +1 -1
  314. package/fesm2022/ngwr-slider-testing.mjs.map +1 -1
  315. package/fesm2022/ngwr-slider.mjs +3 -3
  316. package/fesm2022/ngwr-slider.mjs.map +1 -1
  317. package/fesm2022/ngwr-sparkline-testing.mjs.map +1 -1
  318. package/fesm2022/ngwr-sparkline.mjs +84 -10
  319. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  320. package/fesm2022/ngwr-speed-dial-testing.mjs.map +1 -1
  321. package/fesm2022/ngwr-speed-dial.mjs +3 -3
  322. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  323. package/fesm2022/ngwr-spinner.mjs +3 -3
  324. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  325. package/fesm2022/ngwr-splash-cursor-testing.mjs.map +1 -1
  326. package/fesm2022/ngwr-splash-cursor.mjs +3 -3
  327. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  328. package/fesm2022/ngwr-split-text-testing.mjs.map +1 -1
  329. package/fesm2022/ngwr-split-text.mjs +3 -3
  330. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  331. package/fesm2022/ngwr-splitter-testing.mjs.map +1 -1
  332. package/fesm2022/ngwr-splitter.mjs +3 -3
  333. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  334. package/fesm2022/ngwr-spotlight-card-testing.mjs.map +1 -1
  335. package/fesm2022/ngwr-spotlight-card.mjs +6 -6
  336. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  337. package/fesm2022/ngwr-squircle.mjs +6 -6
  338. package/fesm2022/ngwr-squircle.mjs.map +1 -1
  339. package/fesm2022/ngwr-star-border-testing.mjs.map +1 -1
  340. package/fesm2022/ngwr-star-border.mjs +3 -3
  341. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  342. package/fesm2022/ngwr-statistic.mjs +9 -9
  343. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  344. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -1
  345. package/fesm2022/ngwr-stepper.mjs +6 -6
  346. package/fesm2022/ngwr-stepper.mjs.map +1 -1
  347. package/fesm2022/ngwr-storage.mjs +3 -3
  348. package/fesm2022/ngwr-storage.mjs.map +1 -1
  349. package/fesm2022/ngwr-switch-testing.mjs.map +1 -1
  350. package/fesm2022/ngwr-switch.mjs +3 -3
  351. package/fesm2022/ngwr-switch.mjs.map +1 -1
  352. package/fesm2022/ngwr-table-testing.mjs.map +1 -1
  353. package/fesm2022/ngwr-table.mjs +18 -18
  354. package/fesm2022/ngwr-table.mjs.map +1 -1
  355. package/fesm2022/ngwr-tabs-router.mjs +3 -3
  356. package/fesm2022/ngwr-tabs-router.mjs.map +1 -1
  357. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -1
  358. package/fesm2022/ngwr-tabs.mjs +6 -6
  359. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  360. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -1
  361. package/fesm2022/ngwr-textarea.mjs +3 -3
  362. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  363. package/fesm2022/ngwr-theme.mjs +3 -3
  364. package/fesm2022/ngwr-theme.mjs.map +1 -1
  365. package/fesm2022/ngwr-tilt-card-testing.mjs.map +1 -1
  366. package/fesm2022/ngwr-tilt-card.mjs +6 -6
  367. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  368. package/fesm2022/ngwr-timeline.mjs +6 -6
  369. package/fesm2022/ngwr-timeline.mjs.map +1 -1
  370. package/fesm2022/ngwr-toast-testing.mjs.map +1 -1
  371. package/fesm2022/ngwr-toast.mjs +9 -9
  372. package/fesm2022/ngwr-toast.mjs.map +1 -1
  373. package/fesm2022/ngwr-toolbar.mjs +10 -3
  374. package/fesm2022/ngwr-toolbar.mjs.map +1 -1
  375. package/fesm2022/ngwr-tour-testing.mjs.map +1 -1
  376. package/fesm2022/ngwr-tour.mjs +6 -6
  377. package/fesm2022/ngwr-tour.mjs.map +1 -1
  378. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -1
  379. package/fesm2022/ngwr-transfer.mjs +3 -3
  380. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  381. package/fesm2022/ngwr-tree-testing.mjs.map +1 -1
  382. package/fesm2022/ngwr-tree.mjs +3 -3
  383. package/fesm2022/ngwr-tree.mjs.map +1 -1
  384. package/fesm2022/ngwr-typewriter-testing.mjs.map +1 -1
  385. package/fesm2022/ngwr-typewriter.mjs +3 -3
  386. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  387. package/fesm2022/ngwr-typography.mjs +7 -3
  388. package/fesm2022/ngwr-typography.mjs.map +1 -1
  389. package/fesm2022/ngwr-utils.mjs.map +1 -1
  390. package/fesm2022/ngwr-validators.mjs.map +1 -1
  391. package/fesm2022/ngwr-version.mjs +1 -1
  392. package/fesm2022/ngwr-version.mjs.map +1 -1
  393. package/fesm2022/ngwr-virtual-scroll.mjs +3 -3
  394. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  395. package/fesm2022/ngwr-waves-testing.mjs.map +1 -1
  396. package/fesm2022/ngwr-waves.mjs +3 -3
  397. package/fesm2022/ngwr-waves.mjs.map +1 -1
  398. package/fesm2022/ngwr-window-testing.mjs.map +1 -1
  399. package/fesm2022/ngwr-window.mjs +12 -12
  400. package/fesm2022/ngwr-window.mjs.map +1 -1
  401. package/form/styles/_index.scss +16 -1
  402. package/gauge/styles/_index.scss +1 -0
  403. package/i18n/ar.json +32 -1
  404. package/i18n/cs.json +32 -1
  405. package/i18n/de.json +32 -1
  406. package/i18n/en.json +32 -1
  407. package/i18n/es.json +32 -1
  408. package/i18n/fr.json +32 -1
  409. package/i18n/he.json +32 -1
  410. package/i18n/hi.json +32 -1
  411. package/i18n/id.json +32 -1
  412. package/i18n/it.json +32 -1
  413. package/i18n/ja.json +32 -1
  414. package/i18n/ko.json +32 -1
  415. package/i18n/nl.json +32 -1
  416. package/i18n/pl.json +32 -1
  417. package/i18n/pt.json +32 -1
  418. package/i18n/ru.json +32 -1
  419. package/i18n/sv.json +32 -1
  420. package/i18n/tr.json +32 -1
  421. package/i18n/uk.json +32 -1
  422. package/i18n/vi.json +32 -1
  423. package/i18n/zh-TW.json +32 -1
  424. package/i18n/zh.json +32 -1
  425. package/input/styles/_index.scss +24 -1
  426. package/input-number/styles/_index.scss +69 -0
  427. package/input-otp/styles/_index.scss +5 -5
  428. package/line-chart/styles/_index.scss +30 -2
  429. package/llms-full.txt +14 -4
  430. package/llms.txt +188 -132
  431. package/mcp/providers.js +2 -2
  432. package/mcp/server.js +1 -1
  433. package/meter-group/styles/_index.scss +1 -0
  434. package/overlay/styles/_arrow.scss +30 -2
  435. package/package.json +43 -2
  436. package/page-header/styles/_index.scss +37 -1
  437. package/pagination/styles/_index.scss +9 -5
  438. package/popover/styles/_index.scss +73 -5
  439. package/progress/styles/_index.scss +4 -0
  440. package/radio/styles/_index.scss +4 -1
  441. package/schematics/use/symbol-map.json +1 -0
  442. package/select/styles/_index.scss +51 -12
  443. package/sidebar/styles/_index.scss +44 -2
  444. package/skeleton/styles/_index.scss +3 -0
  445. package/skills/ngwr/SKILL.md +5 -5
  446. package/skills/ngwr/references/catalog.md +2 -0
  447. package/skills/ngwr/references/setup.md +3 -3
  448. package/sparkline/styles/_index.scss +19 -0
  449. package/styles.scss +1 -0
  450. package/table/styles/_index.scss +7 -0
  451. package/textarea/styles/_index.scss +12 -3
  452. package/theme/styles/_colors.scss +39 -13
  453. package/theme/styles/_contrast.scss +9 -7
  454. package/toast/styles/_index.scss +4 -0
  455. package/toolbar/styles/_index.scss +35 -1
  456. package/tree/styles/_index.scss +46 -7
  457. package/types/ngwr-badge.d.ts +22 -7
  458. package/types/ngwr-bar-chart.d.ts +19 -1
  459. package/types/ngwr-calendar-heatmap.d.ts +29 -1
  460. package/types/ngwr-checkbox.d.ts +2 -0
  461. package/types/ngwr-config.d.ts +12 -0
  462. package/types/ngwr-date-picker.d.ts +308 -43
  463. package/types/ngwr-donut-chart.d.ts +24 -1
  464. package/types/ngwr-dropdown.d.ts +22 -2
  465. package/types/ngwr-editor-testing.d.ts +378 -0
  466. package/types/ngwr-editor.d.ts +449 -0
  467. package/types/ngwr-event-calendar.d.ts +8 -0
  468. package/types/ngwr-form.d.ts +35 -5
  469. package/types/ngwr-gauge.d.ts +20 -1
  470. package/types/ngwr-input-number.d.ts +7 -0
  471. package/types/ngwr-line-chart.d.ts +9 -1
  472. package/types/ngwr-markdown.d.ts +61 -2
  473. package/types/ngwr-meter-group-testing.d.ts +3 -2
  474. package/types/ngwr-meter-group.d.ts +14 -1
  475. package/types/ngwr-page-header.d.ts +10 -2
  476. package/types/ngwr-popover.d.ts +154 -3
  477. package/types/ngwr-sidebar.d.ts +7 -0
  478. package/types/ngwr-sparkline.d.ts +43 -1
  479. package/types/ngwr-toolbar.d.ts +7 -0
  480. package/types/ngwr-typography.d.ts +4 -0
  481. package/types/ngwr-version.d.ts +1 -1
  482. package/typography/styles/_index.scss +16 -0
@@ -62,7 +62,9 @@
62
62
  &__actions {
63
63
  display: flex;
64
64
  align-items: center;
65
- gap: 0.5rem;
65
+ // Density-aware: `touch` widens it so adjacent actions do not crowd a
66
+ // fingertip, `sm` tightens it. `md` resolves to the 8px it always was.
67
+ gap: calc(0.5rem * var(--wr-density-gap, 1));
66
68
  flex-wrap: wrap;
67
69
  flex: 0 0 auto;
68
70
 
@@ -84,6 +86,40 @@
84
86
  }
85
87
  }
86
88
 
89
+ // The documented actions shape is ONE wrapper around the buttons —
90
+ // `<div wrPageHeaderActions><wr-btn>…</wr-btn><wr-btn>…</wr-btn></div>` — and the
91
+ // `gap` above spaces the region's CHILDREN, which is that wrapper alone, so the
92
+ // buttons inside it met edge to edge (0px, measured in Chromium). A BARE wrapper
93
+ // is laid out the way the region is, taking the region's own gap through
94
+ // `inherit`, so both shapes — one wrapper, or the attribute on each button —
95
+ // space the same and a density change moves them together. What BARE excludes,
96
+ // and why:
97
+ //
98
+ // - A `class` or a `style`. Zero specificity alone does not keep a consumer's
99
+ // layout: ngwr ships unlayered CSS, and unlayered CSS beats every cascade
100
+ // layer whatever its specificity, so a Tailwind v4 `hidden` or `space-x-2` on
101
+ // the wrapper lost to this rule and a hidden wrapper came back. A wrapper with
102
+ // a class or a style is the consumer's, and nothing here touches it — not
103
+ // `display`, not `align-items`, not `flex-wrap`. An EMPTY one still counts as
104
+ // bare, because `class=""` / `style=""` is what a `[class.x]` / `[style.x]`
105
+ // binding leaves behind when it switches off, and the same state must not lay
106
+ // out two ways.
107
+ // - Anything but a `div`. A button projected directly is already a child of the
108
+ // region and spaced by its gap, and must not become a flex container itself.
109
+ // - `[hidden]`. An author rule outranks the user agent's
110
+ // `[hidden] { display: none }` at any specificity.
111
+ //
112
+ // The extra row is deliberately NOT given the same rule: it is where metadata
113
+ // prose lives, and a flex row would turn the words and links of a bare `<div>`
114
+ // into separate items. Tags go in as its children instead, through an
115
+ // `<ng-container wrPageHeaderExtra>`, which the class JSDoc shows.
116
+ :where(.wr-page-header__actions > div:not([hidden], [class]:not([class='']), [style]:not([style='']))) {
117
+ display: flex;
118
+ align-items: center;
119
+ flex-wrap: wrap;
120
+ gap: inherit;
121
+ }
122
+
87
123
  // Responsive headers stack the title above the actions when their own box is
88
124
  // too narrow to sit them side by side (regardless of viewport).
89
125
  @container wr-page-header (max-width: 32rem) {
@@ -108,11 +108,15 @@
108
108
  &__size {
109
109
  min-width: 0;
110
110
 
111
- // The 10rem floor on `.wr-select__trigger` is sized for a standalone field.
112
- // Here the select only ever holds "20 / page", so the pager was reserving
113
- // 160px for a ~75px label — the single widest thing in the control.
114
- .wr-select__trigger {
115
- min-width: 0;
111
+ // The select's 10rem width floor is sized for a standalone field. Here it
112
+ // only ever holds "20 / page", so the pager was reserving 160px for a ~75px
113
+ // label — the single widest thing in the control. Through the hook, since
114
+ // the floor lives on the select's host and a `min-width` on its trigger no
115
+ // longer reaches it — and compounded with `.wr-select`, which declares the
116
+ // default on this same element, so the override does not hang on which
117
+ // stylesheet loads last.
118
+ &.wr-select {
119
+ --wr-select-min-width: 0;
116
120
  }
117
121
  }
118
122
 
@@ -72,6 +72,46 @@
72
72
  // API, and the arrow is the pane's business rather than the chip's.
73
73
  }
74
74
 
75
+ // The chip a chart's hover tooltip renders into (`useChartTooltip()`, used by
76
+ // every chart but `wr-line-chart`, which draws its own). It carries `.wr-tooltip`
77
+ // as well, so everything above is its look and the arrow below is its arrow; this
78
+ // only lays out the inside.
79
+ //
80
+ // The label is told from the value by WEIGHT, not by a muted colour. The chip's
81
+ // colours are the two `--wr-tooltip-*` hooks, and the documented way to invert
82
+ // them makes the chip dark — a muted grey picked against the light surface would
83
+ // be the one thing that did not follow.
84
+ .wr-chart-tooltip {
85
+ display: inline-flex;
86
+ // Its own text's width, up to the tooltip's `max-width`, whatever room the pane has
87
+ // left. The CDK pushes a chip against the viewport edge by its ROUNDED width, which
88
+ // can leave the absolutely positioned pane a fraction of a pixel short, and the chip
89
+ // for the last week of a year then wrapped `Sep 19, 2026: 0` onto a second line at
90
+ // 375px, over two more rows of days.
91
+ flex-shrink: 0;
92
+ width: max-content;
93
+ align-items: center;
94
+ gap: 0.375rem;
95
+
96
+ &__swatch {
97
+ flex: 0 0 auto;
98
+ width: 0.5rem;
99
+ height: 0.5rem;
100
+ border-radius: 50%;
101
+ }
102
+
103
+ &__value {
104
+ font-weight: var(--wr-font-weight-semibold);
105
+ font-variant-numeric: tabular-nums;
106
+
107
+ // Alone, with no label or swatch beside it, the value is a whole sentence (a
108
+ // heatmap day's), and a sentence in semibold reads as shouting.
109
+ &:only-child {
110
+ font-weight: inherit;
111
+ }
112
+ }
113
+ }
114
+
75
115
  // Arrow for both modes.
76
116
  //
77
117
  // Popover: the pane wraps whatever the author projected, so the panel selector
@@ -84,18 +124,46 @@
84
124
  $border: var(--wr-color-outline)
85
125
  );
86
126
 
87
- // Tooltip: a known child, and no border faces — the chip's own border colour is
88
- // overridable per instance through `--wr-tooltip-border`, so painting the faces
89
- // from the token here would desync the moment anyone retints one. The arrow
90
- // points AT the trigger and overlaps it, so it is the one inert piece: a
91
- // hittable arrow would eat clicks meant for the control the tooltip describes.
127
+ // Tooltip: a known child, with the chip's border carried onto the arrow's outward
128
+ // faces. Painted from the `--wr-tooltip-border` HOOK rather than the outline token:
129
+ // the square is the chip's own pseudo-element, so a chip retinted per instance
130
+ // retints its arrow with it. Without the faces the chip's outline stopped at the
131
+ // arrow's base and the tip read as a notch cut out of the border. The arrow points
132
+ // AT the trigger and overlaps it, so it is the one inert piece: a hittable arrow
133
+ // would eat clicks meant for the control the tooltip describes.
92
134
  @include arrow.anchored-arrow(
93
135
  $pane: '.wr-tooltip-overlay',
94
136
  $panel: '.wr-tooltip',
95
137
  $background: var(--wr-tooltip-bg),
138
+ $border: var(--wr-tooltip-border),
96
139
  $inert: true
97
140
  );
98
141
 
142
+ // A chart's chip keeps the edge the placement gives its arrow and moves the arrow
143
+ // ALONG that edge, onto the section it describes. The chip is not always centred on
144
+ // its anchor — `withPush` slides the one for a heatmap's first week along the
145
+ // viewport edge — so `useChartTooltip()` measures where the anchor falls on the chip
146
+ // and writes it to `--wr-chart-tooltip-arrow`, in px from the padding edge. Unset,
147
+ // before anything is measured, it is the middle, where the rule above puts it.
148
+ // After that rule on purpose: same specificity, so source order decides.
149
+ .wr-tooltip-overlay--top,
150
+ .wr-tooltip-overlay--bottom {
151
+ .wr-chart-tooltip::after {
152
+ inset-inline: auto;
153
+ margin-inline: 0;
154
+ // rtl-ok: a length measured from the chip's physical left edge in viewport pixels
155
+ left: calc(var(--wr-chart-tooltip-arrow, 50%) - #{arrow.$half});
156
+ }
157
+ }
158
+
159
+ .wr-tooltip-overlay--left,
160
+ .wr-tooltip-overlay--right {
161
+ .wr-chart-tooltip::after {
162
+ top: calc(var(--wr-chart-tooltip-arrow, 50%) - #{arrow.$half});
163
+ margin-top: 0;
164
+ }
165
+ }
166
+
99
167
  @media (prefers-reduced-motion: reduce) {
100
168
  .wr-tooltip {
101
169
  animation: none;
@@ -30,6 +30,10 @@
30
30
  transition: width var(--wr-transition-base);
31
31
  }
32
32
 
33
+ // color-ok: the VALUE is the bar's length and its `aria-valuenow`; the intent
34
+ // only tints it. A host that uses `danger` to mean "failed" has to say so in
35
+ // words — the `ariaLabel`, the text beside the bar — because six intents
36
+ // share one lightness and the bar has no second channel for a status.
33
37
  @each $name in theme.$colors {
34
38
  &--#{$name} {
35
39
  --wr-progress-track: rgba(var(--wr-color-#{$name}-rgb), 0.2);
@@ -95,12 +95,15 @@
95
95
  }
96
96
 
97
97
  // color-ok: the cue is the glyph arriving — `.wr-radio__icon` goes from
98
- // `opacity: 0` to `1` under `--checked` (line 109). This fill only backs it,
98
+ // `opacity: 0` to `1` in the `--checked` rule below. This fill only backs it,
99
99
  // since `--has-icon` turns the default dot off.
100
100
  &--has-icon.wr-radio--checked {
101
101
  --wr-radio-bg: var(--wr-color-primary);
102
102
  }
103
103
 
104
+ // color-ok: the cue is the inner dot arriving — `.wr-radio__dot::after` goes
105
+ // from `scale(0)` to `scale(1)` below, or the icon fades in under
106
+ // `--has-icon`. The ring and dot colours only back it.
104
107
  &--checked {
105
108
  --wr-radio-border: var(--wr-color-primary);
106
109
  --wr-radio-dot: var(--wr-color-primary);
@@ -79,6 +79,7 @@
79
79
  "WrDropdown": "ngwr/dropdown",
80
80
  "WrDropdownMenu": "ngwr/dropdown",
81
81
  "WrDropdownItem": "ngwr/dropdown",
82
+ "WrEditor": "ngwr/editor",
82
83
  "WrEmpty": "ngwr/empty",
83
84
  "WrEventCalendar": "ngwr/event-calendar",
84
85
  "WrCalendarEventTemplate": "ngwr/event-calendar",
@@ -11,17 +11,49 @@
11
11
  --wr-select-font-size: var(--wr-control-font-size-md);
12
12
  --wr-select-line-height: var(--wr-control-line-height-md);
13
13
  // The floor that keeps a bare `<wr-select>` from collapsing to its
14
- // placeholder. A hook rather than a literal because the floor is wrong as
15
- // often as it is right: dropped into a `minmax(0, 1fr)` grid column the
16
- // trigger holds 160px and overhangs its cell, and overriding
17
- // `.wr-select__trigger` is reaching past the public contract for something
18
- // the rest of the component already exposes. Set it to 0 to hand the width
19
- // back to the layout.
14
+ // placeholder. Despite the name it is a DEFAULT width rather than a minimum:
15
+ // an explicit `width`, `width: 100%` in a narrow parent, a `minmax(0, 1fr)`
16
+ // cell and a shrinking flex item all win over it (see `::after` below). Set
17
+ // it to 0 to size a bare select to its content alone. This hook is the only
18
+ // way to lower it: a `min-width` on `.wr-select__trigger`, the override that
19
+ // did it before the hook existed, no longer reaches the floor.
20
20
  --wr-select-min-width: 10rem;
21
21
 
22
- display: inline-flex;
22
+ // One column that shrinks to whatever the layout gives it and, left to size
23
+ // itself, grows to the widest thing in it — the trigger's content or the
24
+ // floor. The floor used to be a `min-width` on the trigger, which no width on
25
+ // the host could beat: `<wr-select size="sm" style="width: 9rem">` drew a
26
+ // 160px trigger in a 144px host and ran 16px into the next control, and in a
27
+ // 200px flex row beside a 120px sibling the select overflowed the row by
28
+ // 88px. `minmax(0, …)` is also what drops the trigger's text from the host's
29
+ // min-content, so the host shrinks as a flex item the way `[wrInput]` and
30
+ // `<wr-date-picker>` already do, and the label truncates instead.
31
+ display: inline-grid;
32
+ grid-template-columns: minmax(0, 1fr);
33
+ // The spacer below lands in a row of its own, and it must be a FIXED 0 rather
34
+ // than an implicit `auto` one: a grid shares height beyond its content among
35
+ // its auto rows, so a host stretched by a taller flex or grid row, or given a
36
+ // `height`, drew a 45px trigger in a 60px host with an empty band beneath it.
37
+ grid-template-rows: auto 0;
23
38
  vertical-align: middle;
24
39
 
40
+ // The floor as a zero-height spacer in the same column. A grid track's
41
+ // max-content is its widest item, so a host sized to its content is at least
42
+ // `--wr-select-min-width` wide; `max-width: 100%` is ignored while that size
43
+ // is being worked out and applies once the column exists, so a narrower host
44
+ // caps the spacer instead of the spacer stretching the host. `flex: 0 0 0`
45
+ // keeps it from taking room beside the trigger if a consumer turns the host
46
+ // into a flex container (the floor is then inert, never in the way).
47
+ // The template renders exactly one element into the host — the trigger — so
48
+ // this is the column's only other item, and the zero row is the spacer's.
49
+ &::after {
50
+ content: '';
51
+ flex: 0 0 0;
52
+ width: var(--wr-select-min-width);
53
+ max-width: 100%;
54
+ height: 0;
55
+ }
56
+
25
57
  // Sizes — share the `--wr-control-*` contract (22 / 30 / 36 px). Multi/tag
26
58
  // min-height and the search/tag inputs all read these vars, so every mode
27
59
  // tracks the size. Declared before `--rounded` so the pill modifier wins.
@@ -73,7 +105,10 @@
73
105
  align-items: center;
74
106
  gap: 0.5rem;
75
107
  width: 100%;
76
- min-width: var(--wr-select-min-width);
108
+ // Not the floor — that lives on the host, where a width can beat it. Zero
109
+ // lets the trigger follow the host down and the value / placeholder
110
+ // ellipsis take the difference.
111
+ min-width: 0;
77
112
  appearance: none;
78
113
  background: var(--wr-select-bg);
79
114
  color: var(--wr-select-color);
@@ -117,7 +152,7 @@
117
152
  }
118
153
 
119
154
  &__placeholder {
120
- color: var(--wr-color-text-muted);
155
+ color: var(--wr-color-placeholder);
121
156
  }
122
157
 
123
158
  // The selected option's leading visual on a single-mode button trigger. Never
@@ -208,7 +243,7 @@
208
243
  line-height: var(--wr-select-line-height);
209
244
 
210
245
  &::placeholder {
211
- color: var(--wr-color-text-muted);
246
+ color: var(--wr-color-placeholder);
212
247
  }
213
248
 
214
249
  &:disabled {
@@ -228,7 +263,11 @@
228
263
 
229
264
  &__tag-input {
230
265
  flex: 1 0 6rem;
231
- min-width: 4rem;
266
+ // Both capped by the chip row, which can now be as narrow as the host: with
267
+ // no 10rem trigger floor underneath, a bare 4rem minimum and an unshrinkable
268
+ // 6rem basis ran the field 9px past the border of a 100px tag select.
269
+ min-width: min(4rem, 100%);
270
+ max-width: 100%;
232
271
  border: 0;
233
272
  outline: 0;
234
273
  padding: 0.125rem 0.25rem;
@@ -239,7 +278,7 @@
239
278
  line-height: var(--wr-select-line-height);
240
279
 
241
280
  &::placeholder {
242
- color: var(--wr-color-text-muted);
281
+ color: var(--wr-color-placeholder);
243
282
  }
244
283
 
245
284
  // At `maxItems` the input goes READONLY rather than disabled — it is the
@@ -1,7 +1,18 @@
1
1
  @use '../../theme/styles' as theme;
2
2
 
3
3
  .wr-sidebar {
4
+ // The outer inset, what `--wr-dropdown-padding` is to a menu. Every row paints
5
+ // its hover and active tint across the host's full width, and at 0 that tint
6
+ // met whatever frames the nav: the bordered card of a demo, the border of a
7
+ // `wr-layout-sider`, which pads nothing either. 8px on every side keeps each
8
+ // tint, nested rows included, off the frame in both directions, and leaves an
9
+ // outset focus ring room inside a sider that clips (`overflow: hidden`). Where
10
+ // the container already provides the inset, set it to 0 on `.wr-sidebar`, not
11
+ // on the container: this declaration shadows anything inherited.
12
+ --wr-sidebar-padding: 0.5rem;
13
+
4
14
  display: block;
15
+ padding: var(--wr-sidebar-padding);
5
16
  font-family: var(--wr-font-family-base);
6
17
  color: var(--wr-color-on-surface);
7
18
 
@@ -41,6 +52,11 @@
41
52
  }
42
53
  }
43
54
 
55
+ // color-ok: the resting entry paints no background, so the active one
56
+ // differs in LIGHTNESS as well as hue — a filled tint, 1.17:1 light and
57
+ // 1.12:1 dark against the surface under it, measured in the built showcase.
58
+ // Weak, and it is the whole cue: a top-level entry has no rail for the bar a
59
+ // nested `__item` draws, and `pointer-events: none` paints nothing.
44
60
  &--active {
45
61
  color: var(--wr-color-primary-ink);
46
62
  background: var(--wr-color-primary-soft);
@@ -83,6 +99,13 @@
83
99
  border: 0;
84
100
  border-radius: var(--wr-border-radius-sm);
85
101
  color: var(--wr-color-on-surface);
102
+ // A `<button>` inherits no type. The UA's 13.33px and `line-height: normal`
103
+ // made this row 33px under the 36px link beside it, and shrank the icon and
104
+ // the chevron, which size from `em` — so the same type as `__entry`.
105
+ font: inherit;
106
+ font-size: var(--wr-text-sm);
107
+ font-weight: var(--wr-font-weight-semibold);
108
+ line-height: 1.25rem;
86
109
  cursor: pointer;
87
110
  text-align: start;
88
111
  transition: background var(--wr-transition-base);
@@ -152,12 +175,22 @@
152
175
  border-inline-start: 1px solid var(--wr-color-outline);
153
176
  }
154
177
 
178
+ // The list's 6px bottom margin spaces an open group from the row after it. On
179
+ // the LAST group there is no such row, and the margin stacked onto the host's
180
+ // inset: 14px under the final nested row against 8px above the first row.
181
+ &__group:last-child &__list {
182
+ margin-block-end: 0;
183
+ }
184
+
155
185
  &__item {
156
186
  position: relative;
157
187
  display: flex;
158
188
  align-items: center;
159
189
  gap: 0.5rem;
160
- padding: 0.3125rem 0.75rem;
190
+ // 6px around the 20px line: a 32px row, the geometry of a dropdown item. At
191
+ // 5px the hover and active tint sat closer to the text than anywhere else in
192
+ // the nav, and a badge row came out 2px taller than its neighbours.
193
+ padding: 0.375rem 0.75rem;
161
194
  border-radius: var(--wr-border-radius-sm);
162
195
  color: var(--wr-color-on-surface);
163
196
  font-size: var(--wr-text-sm);
@@ -193,6 +226,11 @@
193
226
  }
194
227
  }
195
228
 
229
+ // color-ok: the `::before` above is transparent on every other row, so this
230
+ // draws a 2px bar over the group's 1px rail beside the active row — a width
231
+ // the rail does not have, and 4.89:1 light / 4.07:1 dark against the
232
+ // surface. Under `prefers-contrast: more` the rail deepens to within 1.41:1
233
+ // of the bar in light and 1.14:1 in dark, and the width is what is left.
196
234
  &--active {
197
235
  color: var(--wr-color-primary-ink);
198
236
  background: var(--wr-color-primary-soft);
@@ -223,7 +261,10 @@
223
261
 
224
262
  &__badge {
225
263
  flex: 0 0 auto;
226
- padding: 0.0625rem 0.375rem;
264
+ // 16px line plus 2px either side is the row's own 20px line box, so a badge
265
+ // never makes its row taller: it inherited the row's 20px line and came out
266
+ // 22px, which grew `__entry` from 36px to 38px and `__item` by the same 2px.
267
+ padding: 0.125rem 0.375rem;
227
268
  // The row's corner, not a pill: the badge sits inside `__entry` / `__item`,
228
269
  // which both read `--wr-border-radius-sm`, and a stadium nested in a 6px row
229
270
  // reads as a foreign shape rather than a part of it.
@@ -232,6 +273,7 @@
232
273
  color: var(--wr-color-on-surface-muted);
233
274
  font-size: var(--wr-text-xs);
234
275
  font-weight: var(--wr-font-weight-semibold);
276
+ line-height: 1rem;
235
277
  text-transform: uppercase;
236
278
  letter-spacing: var(--wr-tracking-wide);
237
279
  }
@@ -30,6 +30,9 @@
30
30
  // Tint strength: 12.5% reads as "nothing" on a white card — the
31
31
  // placeholder has to be obviously present, so the base sits at 50%
32
32
  // with the shimmer band sweeping visibly above it.
33
+ // color-ok: decoration — a skeleton is a placeholder, announced through
34
+ // `aria-busy`, and its default is the neutral `light`; an intent only matches
35
+ // it to the content about to load.
33
36
  @each $name in theme.$colors {
34
37
  &--#{$name} {
35
38
  background: rgba(var(--wr-color-#{$name}-rgb), 0.5);
@@ -5,7 +5,7 @@ description: Build Angular UIs with the ngwr component library (standalone, sign
5
5
 
6
6
  # ngwr
7
7
 
8
- An Angular 22 UI library: 227 tree-shakable entry points, 113 of them shipping a selector.
8
+ An Angular 22 UI library: 229 tree-shakable entry points, 114 of them shipping a selector.
9
9
  Standalone, signals-first, zoneless, `ViewEncapsulation.None`. One runtime
10
10
  dependency (`tslib`).
11
11
 
@@ -20,8 +20,8 @@ reaching for:
20
20
  export per entry point.
21
21
  3. Any docs page as markdown: append `.md` to the URL, e.g.
22
22
  `https://ngwr.dev/reference/components/select.md`.
23
- 4. `npx ngwr-mcp` — the bundled MCP server, when the agent speaks MCP:
24
- `search_ngwr`, `get_ngwr_component`, `get_ngwr_api`, `get_ngwr_setup`.
23
+ 4. `npx -y -p ngwr ngwr-mcp` — the bundled MCP server, when the agent speaks
24
+ MCP: `search_ngwr`, `get_ngwr_component`, `get_ngwr_api`, `get_ngwr_setup`.
25
25
 
26
26
  Exact input / output signatures are in the shipped `.d.ts` files. Do not invent
27
27
  an input name; read one.
@@ -89,8 +89,8 @@ Each of these compiles fine and then does nothing, with no error naming the
89
89
  cause.
90
90
 
91
91
  - `provideWrOverlay() // from 'ngwr/overlay'`
92
- — overlays render into an ngwr-owned container; without it they never appear
93
- — needed by: `WrDialog`, `WrDrawer`, `WrToast`, `WrPopover`, `WrPopconfirm`, `WrContextMenu`, `WrSelect`, `WrDropdown`, `WrCommandPalette`, `WrCascader`, `WrMention`, `WrDatePicker`, `WrTour`, `WrLightbox`
92
+ — gives ngwr overlays their own container, so they never collide with other CDK overlays
93
+ — needed by: `WrDialog`, `WrDrawer`, `WrToast`, `WrPopover`, `WrPopconfirm`, `WrContextMenu`, `WrSelect`, `WrDropdown`, `WrCommandPalette`, `WrCascader`, `WrMention`, `WrDatePicker`, `WrTour`, `WrLightbox`, `WrEditor`
94
94
  - `provideWrIcons(lucideIcons({ … })) // from 'ngwr/icon' + 'ngwr/icon/adapters/lucide'`
95
95
  — icons resolve by name from a registry you populate
96
96
  — needed by: `WrIcon`
@@ -72,6 +72,8 @@ root barrel for components.
72
72
  | `ngwr/drawer/testing` | `import { WrDrawerHarness } from 'ngwr/drawer/testing'` | — |
73
73
  | `ngwr/dropdown` | `import { WrDropdown } from 'ngwr/dropdown'` | `wr-dropdown-item` `wr-dropdown-menu` `[wrDropdown]` |
74
74
  | `ngwr/dropdown/testing` | `import { WrDropdownHarness } from 'ngwr/dropdown/testing'` | — |
75
+ | `ngwr/editor` | `import { WrEditor } from 'ngwr/editor'` | `wr-editor` |
76
+ | `ngwr/editor/testing` | `import { WrEditorHarness } from 'ngwr/editor/testing'` | — |
75
77
  | `ngwr/empty` | `import { WrEmpty } from 'ngwr/empty'` | `wr-empty` |
76
78
  | `ngwr/event-calendar` | `import { WrEventCalendar } from 'ngwr/event-calendar'` | `ng-template[wrCalendarEvent]` `wr-event-calendar` |
77
79
  | `ngwr/event-calendar/testing` | `import { WrEventCalendarChipHarness } from 'ngwr/event-calendar/testing'` | — |
@@ -46,7 +46,7 @@ points that ship no stylesheet (the `/testing` harnesses, `ngwr/utils`) have no
46
46
 
47
47
  ### `provideWrOverlay() // from 'ngwr/overlay'`
48
48
 
49
- Overlays render into an ngwr-owned container; without it they never appear. Needed by `WrDialog`, `WrDrawer`, `WrToast`, `WrPopover`, `WrPopconfirm`, `WrContextMenu`, `WrSelect`, `WrDropdown`, `WrCommandPalette`, `WrCascader`, `WrMention`, `WrDatePicker`, `WrTour`, `WrLightbox`.
49
+ Gives ngwr overlays their own container, so they never collide with other CDK overlays. Needed by `WrDialog`, `WrDrawer`, `WrToast`, `WrPopover`, `WrPopconfirm`, `WrContextMenu`, `WrSelect`, `WrDropdown`, `WrCommandPalette`, `WrCascader`, `WrMention`, `WrDatePicker`, `WrTour`, `WrLightbox`, `WrEditor`.
50
50
 
51
51
  ### `provideWrIcons(lucideIcons({ … })) // from 'ngwr/icon' + 'ngwr/icon/adapters/lucide'`
52
52
 
@@ -69,9 +69,9 @@ The pipe and directive read from a catalog you provide. Register ngwr's with `pr
69
69
  - `provideWrConfig({ button: { size: 'sm' } })` — component defaults. A bound
70
70
  value always wins, including a bound `false` over a configured `true`.
71
71
  - `provideWrDensity({ defaultDensity: 'sm' })` — one control size for the whole
72
- app; `'sm' | 'md' | 'lg' | 'touch'`. It scales the paddings of the nine
72
+ app; `'sm' | 'md' | 'lg' | 'touch'`. It scales the paddings of the ten
73
73
  stylesheets that read the multipliers — button, input, textarea, select,
74
- cascader, tree, list, table, badge/tag — so `touch` grows those together. A
74
+ cascader, tree, list, table, badge/tag, editor — so `touch` grows those together. A
75
75
  control with fixed geometry (checkbox, switch, radio, slider, rating,
76
76
  segmented) does not move; its ≥44px target comes from the `touch-target` mixin
77
77
  under `@media (pointer: coarse)` instead.
@@ -1,9 +1,28 @@
1
+ @use '../../popover/styles'; // the `.wr-tooltip` chip the hover tooltip renders into
2
+
1
3
  .wr-sparkline {
2
4
  display: inline-block;
5
+ // The hover marker is placed in percentages of this box, which is the drawing's.
6
+ position: relative;
3
7
  line-height: 0;
4
8
 
5
9
  svg {
6
10
  display: block;
7
11
  overflow: visible;
8
12
  }
13
+
14
+ // The point the hover tooltip is reading. Placed by the component in SVG
15
+ // coordinates, which do not flip with `direction`, and never hittable: it sits
16
+ // under the pointer, and taking the `mousemove` would lose the line.
17
+ &__marker {
18
+ position: absolute;
19
+ width: 0.5rem;
20
+ height: 0.5rem;
21
+ border: 2px solid var(--wr-color-surface);
22
+ border-radius: 50%;
23
+ box-sizing: content-box;
24
+ // rtl-ok: SVG coordinates, see above
25
+ transform: translate(-50%, -50%);
26
+ pointer-events: none;
27
+ }
9
28
  }
package/styles.scss CHANGED
@@ -54,6 +54,7 @@
54
54
  @forward './event-calendar/styles';
55
55
  @forward './drawer/styles';
56
56
  @forward './dropdown/styles';
57
+ @forward './editor/styles';
57
58
  @forward './empty/styles';
58
59
  @forward './falling-text/styles';
59
60
  @forward './file-upload/styles';
@@ -900,6 +900,13 @@
900
900
  color: var(--wr-color-on-surface);
901
901
  font: inherit;
902
902
  font-size: var(--wr-text-sm);
903
+
904
+ // Written, where it used to be left to the browser: Chromium's own #757575
905
+ // is one grey for both themes, 4.60:1 on white and 4.08:1 on the dark
906
+ // canvas, and it was the one placeholder in the catalog no token reached.
907
+ &::placeholder {
908
+ color: var(--wr-color-placeholder);
909
+ }
903
910
  }
904
911
 
905
912
  &__list {
@@ -6,7 +6,9 @@
6
6
 
7
7
  // Defaults
8
8
  --wr-textarea-color: var(--wr-color-on-surface);
9
- --wr-textarea-placeholder: rgba(var(--wr-color-on-surface-muted-rgb), 0.7);
9
+ // The placeholder role — the same 0.7 alpha `[wrInput]` carried, at the same
10
+ // 2.91:1, until both moved onto the theme's one placeholder token.
11
+ --wr-textarea-placeholder: var(--wr-color-placeholder);
10
12
  --wr-textarea-bg: var(--wr-color-surface);
11
13
  --wr-textarea-border: var(--wr-color-outline);
12
14
  --wr-textarea-radius: var(--wr-control-radius-md);
@@ -107,7 +109,10 @@
107
109
  // in light. A resize grip is an interactive affordance, so WCAG 1.4.11 asks
108
110
  // 3:1 of it — the faint tier is documented as "decorative by design", and
109
111
  // this is not decorative. The full-strength role is 5.35:1 light and 7.64:1
110
- // dark. No gate reports this: axe ships no non-text-contrast rule.
112
+ // dark (8.16 / 8.30 under `prefers-contrast: more`), and the surface is the
113
+ // only ground it is drawn on: `--disabled` is the one state that repaints the
114
+ // field, and `showHandle()` hides the grip there. No gate reports this: axe
115
+ // ships no non-text-contrast rule.
111
116
  color: var(--wr-color-on-surface-muted);
112
117
  touch-action: none;
113
118
  transition: color var(--wr-transition-base);
@@ -134,8 +139,12 @@
134
139
  height: 0.875rem;
135
140
  }
136
141
 
142
+ // One step up from rest. This repeated the rest colour from the day the rest
143
+ // moved off the faint tier, so hovering the grip changed nothing on screen;
144
+ // `-on-surface` is the next role up, 17.85:1 light and 15.73:1 dark against
145
+ // the 5.35 and 7.64 at rest.
137
146
  &:hover {
138
- color: var(--wr-color-on-surface-muted);
147
+ color: var(--wr-color-on-surface);
139
148
  }
140
149
  }
141
150
  }