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
@@ -1,15 +1,577 @@
1
- import { FocusMonitor } from '@angular/cdk/a11y';
2
1
  import { Directionality } from '@angular/cdk/bidi';
3
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
- import { ScrollStrategyOptions } from '@angular/cdk/overlay';
5
2
  import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
3
+ import { ViewportRuler } from '@angular/cdk/scrolling';
4
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
6
5
  import * as i0 from '@angular/core';
7
- import { inject, DestroyRef, PLATFORM_ID, Service, input, ViewEncapsulation, Component, output, ElementRef, ViewContainerRef, Injector, signal, computed, effect, afterNextRender, Directive } from '@angular/core';
6
+ import { input, ViewEncapsulation, Component, inject, ElementRef, Injector, signal, computed, untracked, afterRenderEffect, DestroyRef, PLATFORM_ID, Service, output, ViewContainerRef, effect, afterNextRender, Directive } from '@angular/core';
7
+ import { WR_OVERLAY, wrFollowDirection, WrOutsideClick, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet, wrMirrorOffsets } from 'ngwr/overlay';
8
+ import { FocusMonitor } from '@angular/cdk/a11y';
9
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
10
+ import { ScrollStrategyOptions } from '@angular/cdk/overlay';
8
11
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
12
  import { useI18nText } from 'ngwr/i18n';
10
- import { WR_OVERLAY, WrOutsideClick, WR_RESPONSIVE_OVERLAYS, wrPresentAsSheet, wrMirrorOffsets, wrFollowDirection } from 'ngwr/overlay';
11
13
  import { KEYS, numAttr } from 'ngwr/utils';
12
- import { DOCUMENT, isPlatformBrowser } from '@angular/common';
14
+
15
+ /**
16
+ * @license
17
+ *
18
+ * Use of this source code is governed by an MIT-style license that can be
19
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
20
+ */
21
+ /**
22
+ * The chip a chart's hover tooltip renders into. Not part of the template API —
23
+ * `useChartTooltip()` attaches it.
24
+ *
25
+ * It wears `.wr-tooltip` as well as its own class, so it IS the library's
26
+ * tooltip: the same surface, border, radius, type and arrow as
27
+ * `[wrPopover] mode="tooltip"`, and an app that retints `--wr-tooltip-bg`
28
+ * retints this one with the rest. Only the inside is its own — a swatch, a
29
+ * label and a value, laid out rather than joined into one string, so no
30
+ * separator has to be translated.
31
+ *
32
+ * @internal
33
+ */
34
+ class WrChartTooltipPanel {
35
+ datum = input.required(/* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "datum" }] : /* istanbul ignore next */ []));
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrChartTooltipPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: WrChartTooltipPanel, isStandalone: true, selector: "wr-chart-tooltip", inputs: { datum: { classPropertyName: "datum", publicName: "datum", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "wr-tooltip wr-chart-tooltip" }, ngImport: i0, template: "@let d = datum();\n@if (d.color) {\n <span class=\"wr-chart-tooltip__swatch\" [style.background]=\"d.color\"></span>\n}\n@if (d.label) {\n <span class=\"wr-chart-tooltip__label\">{{ d.label }}</span>\n}\n<span class=\"wr-chart-tooltip__value\">{{ d.value }}</span>\n", encapsulation: i0.ViewEncapsulation.None });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrChartTooltipPanel, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'wr-chart-tooltip', encapsulation: ViewEncapsulation.None, host: { class: 'wr-tooltip wr-chart-tooltip' }, template: "@let d = datum();\n@if (d.color) {\n <span class=\"wr-chart-tooltip__swatch\" [style.background]=\"d.color\"></span>\n}\n@if (d.label) {\n <span class=\"wr-chart-tooltip__label\">{{ d.label }}</span>\n}\n<span class=\"wr-chart-tooltip__value\">{{ d.value }}</span>\n" }]
43
+ }], propDecorators: { datum: [{ type: i0.Input, args: [{ isSignal: true, alias: "datum", required: true }] }] } });
44
+
45
+ /**
46
+ * @license
47
+ *
48
+ * Use of this source code is governed by an MIT-style license that can be
49
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
50
+ */
51
+ /**
52
+ * How long the tooltip outlives the pointer leaving a section, or reporting another
53
+ * one on its way to the chip, in ms.
54
+ *
55
+ * Long enough to cross the 8px gap onto the chip, which is what keeps it hoverable,
56
+ * and to pass through the gutter between two bars or two heatmap days without a
57
+ * flash. The same order as `[wrPopover]`'s `hideDelay`.
58
+ */
59
+ const GRACE = 100;
60
+ /**
61
+ * How close the arrow's middle may come to the end of the chip's edge, in px from the
62
+ * padding box: the chip's inner corner radius (5px) plus half the rotated square's
63
+ * diagonal (4.24px), rounded up. An anchor further out than that — a chip pushed flush
64
+ * against the viewport by a section on its very edge — keeps the arrow on the straight
65
+ * part of the chip rather than off its corner.
66
+ */
67
+ const ARROW_INSET = 10;
68
+ /**
69
+ * How far back past its anchor a chip that runs AWAY from the anchor starts: far enough
70
+ * for the arrow to sit on the anchor without meeting `ARROW_INSET`.
71
+ */
72
+ const REACH_BACK = ARROW_INSET + 4;
73
+ const ABOVE = {
74
+ originX: 'center',
75
+ originY: 'top',
76
+ overlayX: 'center',
77
+ overlayY: 'bottom',
78
+ offsetY: -8,
79
+ arrow: 'bottom',
80
+ };
81
+ const BELOW = {
82
+ originX: 'center',
83
+ originY: 'bottom',
84
+ overlayX: 'center',
85
+ overlayY: 'top',
86
+ offsetY: 8,
87
+ arrow: 'top',
88
+ };
89
+ /**
90
+ * Every placement a side may take, best first.
91
+ *
92
+ * `top` and `bottom` flip to each other, the way every tooltip does. A side placement
93
+ * never flips to the far side: its anchor is a point on a donut's outer arc, and the far
94
+ * side of that point is the donut. Where there is no room beside the anchor — a 200px
95
+ * ring on a phone leaves about 85px either side — the chip goes above it, then below,
96
+ * running AWAY from the ring with the anchor just inside its near end. Measured in
97
+ * Chromium at 375px, a chip centred on the nine o'clock point lay 40px deep over the
98
+ * ring, and one running away from it 13px. Centred above and below come last, and when
99
+ * nothing fits `withPush` slides the best of them into view.
100
+ */
101
+ const FALLBACKS = {
102
+ top: [ABOVE, BELOW],
103
+ bottom: [BELOW, ABOVE],
104
+ right: [
105
+ { originX: 'right', originY: 'center', overlayX: 'left', overlayY: 'center', offsetX: 8, arrow: 'left' },
106
+ { ...ABOVE, overlayX: 'left', offsetX: -REACH_BACK },
107
+ { ...BELOW, overlayX: 'left', offsetX: -REACH_BACK },
108
+ ABOVE,
109
+ BELOW,
110
+ ],
111
+ left: [
112
+ { originX: 'left', originY: 'center', overlayX: 'right', overlayY: 'center', offsetX: -8, arrow: 'right' },
113
+ { ...ABOVE, overlayX: 'right', offsetX: REACH_BACK },
114
+ { ...BELOW, overlayX: 'right', offsetX: REACH_BACK },
115
+ ABOVE,
116
+ BELOW,
117
+ ],
118
+ };
119
+ /**
120
+ * The position list for a side, in the logical vocabulary the CDK and the arrow
121
+ * stylesheet speak.
122
+ *
123
+ * A chart's geometry does not mirror — an SVG arc at three o'clock is on the right in
124
+ * both directions — so the list is written physically and translated here. The CDK
125
+ * resolves `start` / `end` against the overlay's direction, and applies `offsetX` as a
126
+ * physical translate, so under RTL the edges swap and the offsets stay as they are. The
127
+ * pane class names the edge the arrow hangs off in the stylesheet's terms: its side
128
+ * placements hang the arrow off an INLINE edge, so the chip's physical left edge is
129
+ * `--right` in LTR and `--left` in RTL. Along that edge the arrow is placed by
130
+ * measurement, so a chip that runs away from its anchor needs no class of its own.
131
+ */
132
+ function chartTooltipPositions(side, rtl) {
133
+ const x = (edge) => edge === 'center' ? 'center' : (edge === 'left') !== rtl ? 'start' : 'end';
134
+ const arrowClass = {
135
+ top: 'bottom',
136
+ bottom: 'top',
137
+ left: rtl ? 'left' : 'right',
138
+ right: rtl ? 'right' : 'left',
139
+ };
140
+ return FALLBACKS[side].map(place => ({
141
+ originX: x(place.originX),
142
+ originY: place.originY,
143
+ overlayX: x(place.overlayX),
144
+ overlayY: place.overlayY,
145
+ offsetX: place.offsetX,
146
+ offsetY: place.offsetY,
147
+ panelClass: `wr-tooltip-overlay--${arrowClass[place.arrow]}`,
148
+ }));
149
+ }
150
+ /** Where an anchor is right now, in viewport pixels. */
151
+ function boxOf(anchor) {
152
+ if (anchor instanceof Element)
153
+ return anchor.getBoundingClientRect();
154
+ const width = anchor.width ?? 0;
155
+ const height = anchor.height ?? 0;
156
+ return { left: anchor.x, top: anchor.y, right: anchor.x + width, bottom: anchor.y + height };
157
+ }
158
+ /**
159
+ * A hover tooltip for a chart's sections, with ONE overlay per chart.
160
+ *
161
+ * **Why not `[wrPopover] mode="tooltip"` on every section.** It fits the look
162
+ * and not the shape. A year of `wr-calendar-heatmap` is 371 days, and a directive
163
+ * per day is 371 focus monitors and 371 overlays-in-waiting for a tooltip only
164
+ * one of them can show; and most sections are not an element a directive could
165
+ * point at — a donut's slice is a `<path>` whose box is most of the ring, a
166
+ * sparkline's point is a coordinate. So the chart says which section is under
167
+ * the pointer and where to point, and this owns the single overlay, the timers
168
+ * and the teardown. What IS shared with the directive is everything a reader
169
+ * sees: the `.wr-tooltip` chip, its arrow, the placements with their flip, and
170
+ * Escape.
171
+ *
172
+ * **The chip points AT the section it describes**, with its arrow on the anchor:
173
+ * above a heatmap's day, above a bar's top edge, off the outside of a donut's arc.
174
+ * The arrow is placed from a measurement rather than centred, because the chip is
175
+ * not always centred on its anchor — `withPush` slides it along the viewport edge
176
+ * for the first and last week of a year — and an arrow at the chip's middle would
177
+ * then point at a neighbour. The measurement is written to
178
+ * `--wr-chart-tooltip-arrow` on the chip, and the stylesheet puts the arrow there.
179
+ *
180
+ * **A chip at its section sits over the sections beside it**, and it is hoverable
181
+ * (below), so the way onto it can cross another section: straight up from a heatmap
182
+ * day runs through the day above. Switching the moment that day reported itself
183
+ * would move the chip away from a pointer on its way to it — WCAG 1.4.13 with extra
184
+ * steps. So the strip between the anchor and the chip is a bridge: another section
185
+ * reported from inside it waits out the same grace a leave does, a pointer still
186
+ * closing in on the chip starts that grace again however slowly it moves, and
187
+ * landing on the chip cancels the switch. Anywhere else a new section switches at
188
+ * once, so scanning a row of days does not lag. The cost is in the other direction: a
189
+ * pointer that keeps on going up a heatmap's column is moving onto the chip, so it
190
+ * passes over it and the days under it read out only once it comes out the far side.
191
+ *
192
+ * **Why an overlay and not a positioned child, the way `wr-line-chart` draws its
193
+ * own.** A child is clipped by every `overflow` between it and the page, and a
194
+ * chart sits inside those constantly: `wr-calendar-heatmap` IS a scroll
195
+ * container, and a sparkline in a `wr-table` cell sits under two more.
196
+ *
197
+ * **Pointer only, deliberately.** No section of any chart is a tab stop, and
198
+ * this does not make one — a year of days in the tab order would be the defect.
199
+ * The pane is `aria-hidden`: every value it shows is already the section's
200
+ * accessible name or the chart's own, and an orphan tooltip nothing describes
201
+ * reads as a stray line at the end of the document. It is never the only way to
202
+ * a value.
203
+ *
204
+ * SSR-safe: nothing here touches the DOM until a pointer event has moved a
205
+ * section, and the render effect that opens the overlay never runs on a server.
206
+ *
207
+ * Call from an injection context — a chart's field initialiser.
208
+ *
209
+ * @param enabled The chart's `tooltip` input. Turning it off closes an open tooltip.
210
+ * @param resolve What to show for section `index`, and where. It runs after
211
+ * render, so it may read the DOM the section just drew; the signals it reads
212
+ * are tracked, so a data change under an open tooltip re-reads it, and a
213
+ * section that no longer exists (`null`) closes it. It runs again whenever the
214
+ * chart may have moved under an open chip — a scroll anywhere, a viewport
215
+ * resize, the chart or its anchor element changing size.
216
+ * @param sectionAt For a chart whose sections are chosen by POSITION rather than by
217
+ * element — a sparkline picks the point nearest the pointer's x, anywhere over the
218
+ * drawing — the section at a viewport point, or `null` off the drawing. The chip
219
+ * points at the point from inside the drawing, so without this a pointer scrubbing
220
+ * above the line lands on the chip and the chart stops hearing it: measured in
221
+ * Chromium, a scrub along the top of a sparkline showed 9 of its 12 values. Asked on
222
+ * every pointer event while a chip is up, wherever the pointer is over the chart or its
223
+ * own chip; straight up from a point onto its chip stays on that point, so the chip is
224
+ * still hoverable. Anywhere else the chip closes after the usual grace.
225
+ *
226
+ * @internal
227
+ */
228
+ function useChartTooltip(enabled, resolve, sectionAt) {
229
+ const overlay = inject(WR_OVERLAY);
230
+ const doc = inject(DOCUMENT);
231
+ const dir = inject(Directionality, { optional: true });
232
+ const viewport = inject(ViewportRuler);
233
+ const host = inject(ElementRef).nativeElement;
234
+ const injector = inject(Injector);
235
+ const hovered = signal(null, /* @ts-ignore */
236
+ ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
237
+ const active = computed(() => (enabled() ? hovered() : null), /* @ts-ignore */
238
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
239
+ /**
240
+ * The section Escape dismissed. It stays shut for as long as the pointer stays
241
+ * on that section — WCAG 1.4.13 asks for dismissal WITHOUT moving the pointer,
242
+ * and a sparkline re-reports its section on every `mousemove`, so a plain
243
+ * close would reopen on the next pixel.
244
+ */
245
+ let dismissed = null;
246
+ let overlayRef = null;
247
+ let strategy = null;
248
+ let panel = null;
249
+ let side = 'top';
250
+ let anchor = null;
251
+ let resized = null;
252
+ let observer = null;
253
+ let observed = null;
254
+ /** Where the pointer last was, while a chip is up. `null` until it moves. */
255
+ let pointer = null;
256
+ /**
257
+ * What the grace period settles on when it runs out: another section, `null` for
258
+ * none, or `undefined` for nothing pending — the chip stays as it is.
259
+ */
260
+ let pending;
261
+ let graceTimer = null;
262
+ /** The pointer's distance from the chip when the grace last (re)started. */
263
+ let approach = Number.POSITIVE_INFINITY;
264
+ const chipBox = () => {
265
+ const box = overlayRef?.overlayElement.getBoundingClientRect();
266
+ // Nothing laid out (a unit test, a pane not attached yet) is no chip to reach.
267
+ return box && box.width > 0 && box.height > 0 ? box : null;
268
+ };
269
+ /**
270
+ * Whether the pointer is in the strip between the anchor and the chip — as wide
271
+ * as the chip along the edge it hangs off, so a diagonal approach counts too.
272
+ */
273
+ const inBridge = () => {
274
+ const chip = chipBox();
275
+ if (!pointer || !chip || !anchor)
276
+ return false;
277
+ const at = boxOf(anchor);
278
+ const { x, y } = pointer;
279
+ const across = x >= chip.left && x <= chip.right;
280
+ const along = y >= chip.top && y <= chip.bottom;
281
+ if (chip.bottom <= at.top)
282
+ return across && y >= chip.bottom && y <= at.top;
283
+ if (chip.top >= at.bottom)
284
+ return across && y >= at.bottom && y <= chip.top;
285
+ if (chip.right <= at.left)
286
+ return along && x >= chip.right && x <= at.left;
287
+ if (chip.left >= at.right)
288
+ return along && x >= at.right && x <= chip.left;
289
+ return false;
290
+ };
291
+ const distanceToChip = () => {
292
+ const chip = chipBox();
293
+ if (!pointer || !chip)
294
+ return Number.POSITIVE_INFINITY;
295
+ const dx = Math.max(chip.left - pointer.x, 0, pointer.x - chip.right);
296
+ const dy = Math.max(chip.top - pointer.y, 0, pointer.y - chip.bottom);
297
+ return Math.hypot(dx, dy);
298
+ };
299
+ const cancelGrace = () => {
300
+ pending = undefined;
301
+ if (graceTimer === null)
302
+ return;
303
+ clearTimeout(graceTimer);
304
+ graceTimer = null;
305
+ };
306
+ const settle = () => {
307
+ const next = pending;
308
+ cancelGrace();
309
+ if (next !== undefined)
310
+ hovered.set(next);
311
+ };
312
+ const restartGrace = () => {
313
+ if (graceTimer !== null)
314
+ clearTimeout(graceTimer);
315
+ graceTimer = setTimeout(settle, GRACE);
316
+ };
317
+ // An armed grace is left to run rather than restarted: a grid reports the gap
318
+ // between two squares on every `mousemove`, and restarting would keep a tooltip
319
+ // up for as long as the pointer kept moving through it. Only closing in on the
320
+ // chip restarts it — see `track`.
321
+ const defer = (next) => {
322
+ pending = next;
323
+ if (graceTimer !== null)
324
+ return;
325
+ approach = distanceToChip();
326
+ restartGrace();
327
+ };
328
+ const enter = (index) => {
329
+ if (!enabled())
330
+ return;
331
+ if (index === dismissed) {
332
+ cancelGrace();
333
+ return;
334
+ }
335
+ dismissed = null;
336
+ const showing = hovered();
337
+ if (index === showing) {
338
+ cancelGrace();
339
+ return;
340
+ }
341
+ if (showing !== null && inBridge()) {
342
+ defer(index);
343
+ return;
344
+ }
345
+ cancelGrace();
346
+ hovered.set(index);
347
+ };
348
+ /**
349
+ * Put the arrow on the anchor, wherever the chip landed along it. Measured off the
350
+ * PANE, which is exactly the chip's box: the chip itself scales in from 96% and
351
+ * would read short for the length of its entry animation.
352
+ */
353
+ const aim = () => {
354
+ if (!overlayRef || !panel || !anchor)
355
+ return;
356
+ const pane = overlayRef.overlayElement;
357
+ const chip = panel.location.nativeElement;
358
+ const at = boxOf(anchor);
359
+ const box = pane.getBoundingClientRect();
360
+ const across = pane.classList.contains('wr-tooltip-overlay--top') || pane.classList.contains('wr-tooltip-overlay--bottom');
361
+ // The arrow is positioned inside the chip's padding box, so its border comes off.
362
+ const border = across ? chip.clientLeft : chip.clientTop;
363
+ const inner = (across ? box.width : box.height) - 2 * border;
364
+ if (inner <= 2 * ARROW_INSET)
365
+ return;
366
+ const target = across ? (at.left + at.right) / 2 - box.left : (at.top + at.bottom) / 2 - box.top;
367
+ const offset = Math.min(inner - ARROW_INSET, Math.max(ARROW_INSET, target - border));
368
+ chip.style.setProperty('--wr-chart-tooltip-arrow', `${Math.round(offset * 100) / 100}px`);
369
+ };
370
+ const place = () => {
371
+ if (!overlayRef || !strategy || !anchor)
372
+ return;
373
+ strategy.setOrigin(anchor);
374
+ overlayRef.updatePosition();
375
+ aim();
376
+ };
377
+ /** Watch whatever can move the anchor without a scroll or a viewport resize. */
378
+ const observe = () => {
379
+ const next = anchor instanceof Element ? anchor : null;
380
+ if (!observer || next === observed)
381
+ return;
382
+ if (observed)
383
+ observer.unobserve(observed);
384
+ observed = next;
385
+ if (next)
386
+ observer.observe(next);
387
+ };
388
+ /**
389
+ * Point the open chip at wherever its section is NOW. A box anchor is a set of
390
+ * viewport numbers, so it goes stale the moment anything scrolls, and the CDK's
391
+ * own reposition listens to the window and to registered `cdkScrollable`s only —
392
+ * not to `wr-calendar-heatmap`, which is a scroll container of its own, nor to a
393
+ * `wr-table` a sparkline sits in. One capture listener on the document hears
394
+ * every one of them; a viewport resize and a `ResizeObserver` on the chart cover
395
+ * the rest.
396
+ */
397
+ const reanchor = () => {
398
+ const index = untracked(active);
399
+ if (!overlayRef || index === null)
400
+ return;
401
+ const target = untracked(() => resolve(index));
402
+ if (!target?.anchor)
403
+ return;
404
+ anchor = target.anchor;
405
+ observe();
406
+ place();
407
+ };
408
+ /**
409
+ * The pointer, wherever it goes while a chip is up. Captured on the document, so it
410
+ * is current before any section's own `mouseenter` / `mousemove` handler runs.
411
+ */
412
+ const track = (event) => {
413
+ const { clientX: x, clientY: y } = event;
414
+ pointer = { x, y };
415
+ // A chart scrubbed by position hears the pointer wherever it is over the drawing,
416
+ // chip or not — see `sectionAt` — but only where what is under the pointer is the
417
+ // chart or its own chip. A box says nothing about what covers it: a chip from the
418
+ // chart beside it can lie over this drawing, and the drawing's edge is a fraction of
419
+ // a pixel wider than what hit-tests as it. A `mouseout` goes to the element left, so
420
+ // the one under the pointer is its `relatedTarget`.
421
+ const under = event.type === 'mouseout' ? event.relatedTarget : event.target;
422
+ const ours = under instanceof Node && (host.contains(under) || !!overlayRef?.overlayElement.contains(under));
423
+ const scrubbed = sectionAt && ours ? sectionAt(x, y) : null;
424
+ if (scrubbed !== null) {
425
+ enter(scrubbed);
426
+ return;
427
+ }
428
+ // On the chip: its own `mouseenter` cancels whatever is pending. Asked of the
429
+ // geometry rather than of the event, because the first event of that move is the
430
+ // section's `mouseout`, whose target is the section being left.
431
+ const chip = chipBox();
432
+ const onChip = chip !== null && x >= chip.left && x <= chip.right && y >= chip.top && y <= chip.bottom;
433
+ // Off the drawing of a chart scrubbed by position, nothing is hovered, whatever the
434
+ // drawing's own `mouseleave` did — it only fires once, and a chip can move over or
435
+ // off a resting pointer without any. Measured in Chromium before this: a pointer
436
+ // leaving a sparkline across its right edge re-entered the last point in the capture
437
+ // phase of the same move, cancelled the grace the leave was about to arm, and left
438
+ // the chip up for good beside the next chart's own.
439
+ if (sectionAt && !onChip && graceTimer === null)
440
+ defer(null);
441
+ if (graceTimer === null || onChip)
442
+ return;
443
+ if (inBridge()) {
444
+ const distance = distanceToChip();
445
+ if (distance < approach) {
446
+ approach = distance;
447
+ restartGrace();
448
+ }
449
+ }
450
+ else if (pending !== undefined && pending !== null) {
451
+ // Out of the bridge while a section waits: nothing is on its way to the chip.
452
+ settle();
453
+ }
454
+ };
455
+ const close = () => {
456
+ if (!overlayRef)
457
+ return;
458
+ doc.removeEventListener('scroll', reanchor, true);
459
+ for (const type of ['mousemove', 'mouseover', 'mouseout']) {
460
+ doc.removeEventListener(type, track, true);
461
+ }
462
+ resized?.unsubscribe();
463
+ observer?.disconnect();
464
+ // Disposing detaches the pane with its listeners and completes
465
+ // `keydownEvents()`, so nothing registered in `open()` outlives it.
466
+ overlayRef.dispose();
467
+ overlayRef = null;
468
+ strategy = null;
469
+ panel = null;
470
+ anchor = null;
471
+ resized = null;
472
+ observer = null;
473
+ observed = null;
474
+ pointer = null;
475
+ };
476
+ const open = (target) => {
477
+ const wanted = target.side ?? 'top';
478
+ anchor = target.anchor;
479
+ if (!overlayRef) {
480
+ side = wanted;
481
+ const direction = dir?.value ?? 'ltr';
482
+ // `withGrowAfterOpen`: past its first pass the CDK never gives the pane a box
483
+ // larger than the last one, and this pane is passed from section to section. A
484
+ // chip once pushed against the viewport edge — a donut's nine o'clock on a phone —
485
+ // left every later chip that box, so the next one overflowed its pane and the arrow,
486
+ // measured off the pane, pointed 9–13px wide of its slice. `wr-dropdown` hit the same.
487
+ strategy = overlay
488
+ .position()
489
+ .flexibleConnectedTo(anchor)
490
+ .withPositions(chartTooltipPositions(side, direction === 'rtl'))
491
+ .withPush(true)
492
+ .withGrowAfterOpen(true);
493
+ overlayRef = overlay.create({
494
+ positionStrategy: strategy,
495
+ // No scroll strategy: `reanchor` repositions, for every scroll container.
496
+ panelClass: 'wr-tooltip-overlay',
497
+ // The direction the list above was translated for — the CDK would otherwise
498
+ // take the document's, and a chart under a `[dir]` would open on the wrong side.
499
+ direction,
500
+ });
501
+ doc.addEventListener('scroll', reanchor, { capture: true, passive: true });
502
+ for (const type of ['mousemove', 'mouseover', 'mouseout']) {
503
+ doc.addEventListener(type, track, { capture: true, passive: true });
504
+ }
505
+ // After the CDK's own subscription, which re-applies against the stale anchor.
506
+ resized = viewport.change().subscribe(reanchor);
507
+ if (typeof ResizeObserver !== 'undefined') {
508
+ observer = new ResizeObserver(reanchor);
509
+ observer.observe(host);
510
+ }
511
+ // The chip lands on the same PHYSICAL side in both directions, so the list is
512
+ // translated again rather than the side changed, and the arrow's measurement holds.
513
+ wrFollowDirection(overlayRef, dir, injector, direction => strategy?.withPositions(chartTooltipPositions(side, direction === 'rtl')));
514
+ const pane = overlayRef.overlayElement;
515
+ pane.setAttribute('aria-hidden', 'true');
516
+ // Hoverable: the pointer may move onto the chip without losing it, and a switch
517
+ // or a hide it was racing is off. Leaving it starts the same grace a section
518
+ // does; landing back on a section decides through `enter()`.
519
+ pane.addEventListener('mouseenter', cancelGrace);
520
+ pane.addEventListener('mouseleave', () => defer(null));
521
+ // Escape reaches the topmost overlay wherever focus is — the CDK's keyboard
522
+ // dispatcher routes it — which is what makes a tooltip nothing can focus
523
+ // dismissible at all.
524
+ overlayRef.keydownEvents().subscribe(event => {
525
+ if (event.key !== 'Escape')
526
+ return;
527
+ dismissed = hovered();
528
+ cancelGrace();
529
+ hovered.set(null);
530
+ });
531
+ panel = overlayRef.attach(new ComponentPortal(WrChartTooltipPanel, null, injector));
532
+ }
533
+ else if (wanted !== side) {
534
+ side = wanted;
535
+ strategy?.withPositions(chartTooltipPositions(side, overlayRef.getDirection() === 'rtl'));
536
+ }
537
+ observe();
538
+ panel?.setInput('datum', target.datum);
539
+ // Rendered NOW rather than on the next pass: the position is centred on the
540
+ // anchor, so it has to be measured against the text it is about to show, not
541
+ // the previous section's.
542
+ panel?.changeDetectorRef.detectChanges();
543
+ place();
544
+ };
545
+ afterRenderEffect(() => {
546
+ const index = active();
547
+ const target = index === null ? null : resolve(index);
548
+ // Untracked: the overlay's own construction reads signals (the direction
549
+ // follower creates an effect), and none of them should re-run this.
550
+ untracked(() => {
551
+ if (target?.anchor)
552
+ open({ ...target, anchor: target.anchor });
553
+ else
554
+ close();
555
+ });
556
+ });
557
+ inject(DestroyRef).onDestroy(() => {
558
+ cancelGrace();
559
+ close();
560
+ });
561
+ return {
562
+ active,
563
+ enter,
564
+ leave(event) {
565
+ dismissed = null;
566
+ // Straight onto the chip: its own `mouseenter` would cancel the grace a
567
+ // moment later anyway, and not arming it is what removes the race.
568
+ const to = event?.relatedTarget;
569
+ if (to instanceof Node && overlayRef?.overlayElement.contains(to))
570
+ return;
571
+ defer(null);
572
+ },
573
+ };
574
+ }
13
575
 
14
576
  /**
15
577
  * @license
@@ -170,10 +732,10 @@ class WrCurrentKeystroke {
170
732
  this.doc.removeEventListener('keydown', record, { capture: true });
171
733
  });
172
734
  }
173
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrCurrentKeystroke, deps: [], target: i0.ɵɵFactoryTarget.Service });
174
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: WrCurrentKeystroke });
735
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrCurrentKeystroke, deps: [], target: i0.ɵɵFactoryTarget.Service });
736
+ static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.7", ngImport: i0, type: WrCurrentKeystroke });
175
737
  }
176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrCurrentKeystroke, decorators: [{
738
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrCurrentKeystroke, decorators: [{
177
739
  type: Service
178
740
  }], ctorParameters: () => [] });
179
741
 
@@ -193,10 +755,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
193
755
  class WrPopoverTextPanel {
194
756
  text = input.required(/* @ts-ignore */
195
757
  ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
196
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrPopoverTextPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
197
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: WrPopoverTextPanel, isStandalone: true, selector: "wr-popover-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "wr-tooltip" }, ngImport: i0, template: '{{ text() }}', isInline: true, encapsulation: i0.ViewEncapsulation.None });
758
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrPopoverTextPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
759
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: WrPopoverTextPanel, isStandalone: true, selector: "wr-popover-text", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "wr-tooltip" }, ngImport: i0, template: '{{ text() }}', isInline: true, encapsulation: i0.ViewEncapsulation.None });
198
760
  }
199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrPopoverTextPanel, decorators: [{
761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrPopoverTextPanel, decorators: [{
200
762
  type: Component,
201
763
  args: [{
202
764
  selector: 'wr-popover-text',
@@ -741,10 +1303,10 @@ class WrPopover {
741
1303
  isRtl() {
742
1304
  return this.dir?.value === 'rtl';
743
1305
  }
744
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrPopover, deps: [], target: i0.ɵɵFactoryTarget.Directive });
745
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: WrPopover, isStandalone: true, selector: "[wrPopover]", inputs: { content: { classPropertyName: "content", publicName: "wrPopover", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "showDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave($event)", "keydown.escape": "onEscape()" }, properties: { "attr.aria-haspopup": "isTooltip() ? null : \"dialog\"", "attr.aria-expanded": "isTooltip() ? null : isOpen()", "attr.aria-controls": "!isTooltip() && isOpen() ? panelId : null", "attr.aria-describedby": "isTooltip() && isOpen() ? panelId : null" }, classAttribute: "wr-popover-trigger" }, exportAs: ["wrPopover"], ngImport: i0 });
1306
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrPopover, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1307
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: WrPopover, isStandalone: true, selector: "[wrPopover]", inputs: { content: { classPropertyName: "content", publicName: "wrPopover", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "showDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave($event)", "keydown.escape": "onEscape()" }, properties: { "attr.aria-haspopup": "isTooltip() ? null : \"dialog\"", "attr.aria-expanded": "isTooltip() ? null : isOpen()", "attr.aria-controls": "!isTooltip() && isOpen() ? panelId : null", "attr.aria-describedby": "isTooltip() && isOpen() ? panelId : null" }, classAttribute: "wr-popover-trigger" }, exportAs: ["wrPopover"], ngImport: i0 });
746
1308
  }
747
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: WrPopover, decorators: [{
1309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: WrPopover, decorators: [{
748
1310
  type: Directive,
749
1311
  args: [{
750
1312
  selector: '[wrPopover]',
@@ -775,5 +1337,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
775
1337
  * Generated bundle index. Do not edit.
776
1338
  */
777
1339
 
778
- export { WrPopover };
1340
+ export { WrPopover, useChartTooltip };
779
1341
  //# sourceMappingURL=ngwr-popover.mjs.map