ngwr 10.2.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +39 -19
  2. package/anchor/styles/_index.scss +4 -4
  3. package/back-top/styles/_index.scss +6 -1
  4. package/blur-text/styles/_index.scss +13 -0
  5. package/button/styles/_index.scss +11 -6
  6. package/carousel/styles/_index.scss +13 -2
  7. package/cascader/styles/_index.scss +2 -2
  8. package/circular-text/styles/_index.scss +2 -0
  9. package/collapse/styles/_index.scss +1 -1
  10. package/color-picker/styles/_index.scss +6 -1
  11. package/compare/styles/_index.scss +1 -2
  12. package/context-menu/styles/_index.scss +6 -1
  13. package/descriptions/styles/_index.scss +2 -2
  14. package/dialog/styles/_index.scss +38 -0
  15. package/drawer/styles/_index.scss +20 -1
  16. package/dropdown/styles/_index.scss +19 -5
  17. package/empty/styles/_index.scss +10 -0
  18. package/fesm2022/ngwr-action-sheet.mjs +15 -5
  19. package/fesm2022/ngwr-action-sheet.mjs.map +1 -1
  20. package/fesm2022/ngwr-affix.mjs +43 -16
  21. package/fesm2022/ngwr-affix.mjs.map +1 -1
  22. package/fesm2022/ngwr-alert.mjs +3 -3
  23. package/fesm2022/ngwr-anchor.mjs +20 -8
  24. package/fesm2022/ngwr-anchor.mjs.map +1 -1
  25. package/fesm2022/ngwr-aurora.mjs +4 -4
  26. package/fesm2022/ngwr-aurora.mjs.map +1 -1
  27. package/fesm2022/ngwr-avatar.mjs +33 -9
  28. package/fesm2022/ngwr-avatar.mjs.map +1 -1
  29. package/fesm2022/ngwr-back-top.mjs +8 -4
  30. package/fesm2022/ngwr-back-top.mjs.map +1 -1
  31. package/fesm2022/ngwr-badge.mjs +6 -6
  32. package/fesm2022/ngwr-badge.mjs.map +1 -1
  33. package/fesm2022/ngwr-bar-chart.mjs +32 -11
  34. package/fesm2022/ngwr-bar-chart.mjs.map +1 -1
  35. package/fesm2022/ngwr-blur-text.mjs +4 -4
  36. package/fesm2022/ngwr-blur-text.mjs.map +1 -1
  37. package/fesm2022/ngwr-border-glow.mjs +4 -4
  38. package/fesm2022/ngwr-border-glow.mjs.map +1 -1
  39. package/fesm2022/ngwr-breadcrumbs.mjs +9 -8
  40. package/fesm2022/ngwr-breadcrumbs.mjs.map +1 -1
  41. package/fesm2022/ngwr-burger.mjs +11 -6
  42. package/fesm2022/ngwr-burger.mjs.map +1 -1
  43. package/fesm2022/ngwr-button-testing.mjs +96 -0
  44. package/fesm2022/ngwr-button-testing.mjs.map +1 -0
  45. package/fesm2022/ngwr-button.mjs +89 -24
  46. package/fesm2022/ngwr-button.mjs.map +1 -1
  47. package/fesm2022/ngwr-calendar-heatmap.mjs +42 -10
  48. package/fesm2022/ngwr-calendar-heatmap.mjs.map +1 -1
  49. package/fesm2022/ngwr-calendar.mjs +108 -9
  50. package/fesm2022/ngwr-calendar.mjs.map +1 -1
  51. package/fesm2022/ngwr-card.mjs +10 -10
  52. package/fesm2022/ngwr-card.mjs.map +1 -1
  53. package/fesm2022/ngwr-carousel-testing.mjs +377 -0
  54. package/fesm2022/ngwr-carousel-testing.mjs.map +1 -0
  55. package/fesm2022/ngwr-carousel.mjs +72 -18
  56. package/fesm2022/ngwr-carousel.mjs.map +1 -1
  57. package/fesm2022/ngwr-cascader-testing.mjs +534 -0
  58. package/fesm2022/ngwr-cascader-testing.mjs.map +1 -0
  59. package/fesm2022/ngwr-cascader.mjs +4 -4
  60. package/fesm2022/ngwr-cascader.mjs.map +1 -1
  61. package/fesm2022/ngwr-checkbox-testing.mjs +90 -0
  62. package/fesm2022/ngwr-checkbox-testing.mjs.map +1 -0
  63. package/fesm2022/ngwr-checkbox.mjs +15 -9
  64. package/fesm2022/ngwr-checkbox.mjs.map +1 -1
  65. package/fesm2022/ngwr-circular-text.mjs +4 -4
  66. package/fesm2022/ngwr-circular-text.mjs.map +1 -1
  67. package/fesm2022/ngwr-click-spark.mjs +4 -4
  68. package/fesm2022/ngwr-click-spark.mjs.map +1 -1
  69. package/fesm2022/ngwr-clipboard.mjs +18 -4
  70. package/fesm2022/ngwr-clipboard.mjs.map +1 -1
  71. package/fesm2022/ngwr-collapse-testing.mjs +368 -0
  72. package/fesm2022/ngwr-collapse-testing.mjs.map +1 -0
  73. package/fesm2022/ngwr-collapse.mjs +9 -9
  74. package/fesm2022/ngwr-color-picker.mjs +139 -19
  75. package/fesm2022/ngwr-color-picker.mjs.map +1 -1
  76. package/fesm2022/ngwr-command-palette-testing.mjs +589 -0
  77. package/fesm2022/ngwr-command-palette-testing.mjs.map +1 -0
  78. package/fesm2022/ngwr-command-palette.mjs +60 -10
  79. package/fesm2022/ngwr-command-palette.mjs.map +1 -1
  80. package/fesm2022/ngwr-compare.mjs +105 -15
  81. package/fesm2022/ngwr-compare.mjs.map +1 -1
  82. package/fesm2022/ngwr-confetti.mjs +3 -3
  83. package/fesm2022/ngwr-config.mjs +106 -0
  84. package/fesm2022/ngwr-config.mjs.map +1 -0
  85. package/fesm2022/ngwr-context-menu-testing.mjs +631 -0
  86. package/fesm2022/ngwr-context-menu-testing.mjs.map +1 -0
  87. package/fesm2022/ngwr-context-menu.mjs +104 -18
  88. package/fesm2022/ngwr-context-menu.mjs.map +1 -1
  89. package/fesm2022/ngwr-cookie.mjs +8 -4
  90. package/fesm2022/ngwr-cookie.mjs.map +1 -1
  91. package/fesm2022/ngwr-counter.mjs +17 -9
  92. package/fesm2022/ngwr-counter.mjs.map +1 -1
  93. package/fesm2022/ngwr-date-adapter-fns.mjs +3 -3
  94. package/fesm2022/ngwr-date-adapter-luxon.mjs +55 -7
  95. package/fesm2022/ngwr-date-adapter-luxon.mjs.map +1 -1
  96. package/fesm2022/ngwr-date-adapter.mjs +57 -11
  97. package/fesm2022/ngwr-date-adapter.mjs.map +1 -1
  98. package/fesm2022/ngwr-date-picker-testing.mjs +766 -0
  99. package/fesm2022/ngwr-date-picker-testing.mjs.map +1 -0
  100. package/fesm2022/ngwr-date-picker.mjs +409 -57
  101. package/fesm2022/ngwr-date-picker.mjs.map +1 -1
  102. package/fesm2022/ngwr-decrypt-text.mjs +30 -12
  103. package/fesm2022/ngwr-decrypt-text.mjs.map +1 -1
  104. package/fesm2022/ngwr-density.mjs +6 -6
  105. package/fesm2022/ngwr-descriptions.mjs +6 -6
  106. package/fesm2022/ngwr-dialog-testing.mjs +89 -0
  107. package/fesm2022/ngwr-dialog-testing.mjs.map +1 -0
  108. package/fesm2022/ngwr-dialog.mjs +33 -17
  109. package/fesm2022/ngwr-dialog.mjs.map +1 -1
  110. package/fesm2022/ngwr-directives.mjs +48 -24
  111. package/fesm2022/ngwr-directives.mjs.map +1 -1
  112. package/fesm2022/ngwr-divider.mjs +3 -3
  113. package/fesm2022/ngwr-donut-chart.mjs +24 -7
  114. package/fesm2022/ngwr-donut-chart.mjs.map +1 -1
  115. package/fesm2022/ngwr-drag-drop.mjs +7 -7
  116. package/fesm2022/ngwr-drag-drop.mjs.map +1 -1
  117. package/fesm2022/ngwr-drawer-testing.mjs +250 -0
  118. package/fesm2022/ngwr-drawer-testing.mjs.map +1 -0
  119. package/fesm2022/ngwr-drawer.mjs +37 -19
  120. package/fesm2022/ngwr-drawer.mjs.map +1 -1
  121. package/fesm2022/ngwr-dropdown-testing.mjs +291 -0
  122. package/fesm2022/ngwr-dropdown-testing.mjs.map +1 -0
  123. package/fesm2022/ngwr-dropdown.mjs +19 -11
  124. package/fesm2022/ngwr-dropdown.mjs.map +1 -1
  125. package/fesm2022/ngwr-empty.mjs +26 -9
  126. package/fesm2022/ngwr-empty.mjs.map +1 -1
  127. package/fesm2022/ngwr-event-calendar.mjs +62 -15
  128. package/fesm2022/ngwr-event-calendar.mjs.map +1 -1
  129. package/fesm2022/ngwr-falling-text.mjs +4 -4
  130. package/fesm2022/ngwr-falling-text.mjs.map +1 -1
  131. package/fesm2022/ngwr-file-upload-testing.mjs +332 -0
  132. package/fesm2022/ngwr-file-upload-testing.mjs.map +1 -0
  133. package/fesm2022/ngwr-file-upload.mjs +3 -3
  134. package/fesm2022/ngwr-form-testing.mjs +451 -0
  135. package/fesm2022/ngwr-form-testing.mjs.map +1 -0
  136. package/fesm2022/ngwr-form.mjs +28 -12
  137. package/fesm2022/ngwr-form.mjs.map +1 -1
  138. package/fesm2022/ngwr-fuzzy-text.mjs +11 -4
  139. package/fesm2022/ngwr-fuzzy-text.mjs.map +1 -1
  140. package/fesm2022/ngwr-gauge.mjs +21 -7
  141. package/fesm2022/ngwr-gauge.mjs.map +1 -1
  142. package/fesm2022/ngwr-glitch-text.mjs +4 -4
  143. package/fesm2022/ngwr-glitch-text.mjs.map +1 -1
  144. package/fesm2022/ngwr-gradient-text.mjs +4 -4
  145. package/fesm2022/ngwr-gradient-text.mjs.map +1 -1
  146. package/fesm2022/ngwr-hotkey.mjs +31 -10
  147. package/fesm2022/ngwr-hotkey.mjs.map +1 -1
  148. package/fesm2022/ngwr-i18n-en.mjs +61 -0
  149. package/fesm2022/ngwr-i18n-en.mjs.map +1 -1
  150. package/fesm2022/ngwr-i18n-ru.mjs +59 -0
  151. package/fesm2022/ngwr-i18n-ru.mjs.map +1 -1
  152. package/fesm2022/ngwr-i18n.mjs +9 -9
  153. package/fesm2022/ngwr-icon.mjs +6 -6
  154. package/fesm2022/ngwr-image-cropper.mjs +26 -3
  155. package/fesm2022/ngwr-image-cropper.mjs.map +1 -1
  156. package/fesm2022/ngwr-input-number-testing.mjs +306 -0
  157. package/fesm2022/ngwr-input-number-testing.mjs.map +1 -0
  158. package/fesm2022/ngwr-input-number.mjs +37 -5
  159. package/fesm2022/ngwr-input-number.mjs.map +1 -1
  160. package/fesm2022/ngwr-input-otp-testing.mjs +419 -0
  161. package/fesm2022/ngwr-input-otp-testing.mjs.map +1 -0
  162. package/fesm2022/ngwr-input-otp.mjs +39 -8
  163. package/fesm2022/ngwr-input-otp.mjs.map +1 -1
  164. package/fesm2022/ngwr-input-testing.mjs +102 -0
  165. package/fesm2022/ngwr-input-testing.mjs.map +1 -0
  166. package/fesm2022/ngwr-input.mjs +62 -25
  167. package/fesm2022/ngwr-input.mjs.map +1 -1
  168. package/fesm2022/ngwr-keyboard.mjs +3 -3
  169. package/fesm2022/ngwr-knob.mjs +46 -10
  170. package/fesm2022/ngwr-knob.mjs.map +1 -1
  171. package/fesm2022/ngwr-layout.mjs +36 -20
  172. package/fesm2022/ngwr-layout.mjs.map +1 -1
  173. package/fesm2022/ngwr-lightbox.mjs +35 -8
  174. package/fesm2022/ngwr-lightbox.mjs.map +1 -1
  175. package/fesm2022/ngwr-line-chart.mjs +19 -6
  176. package/fesm2022/ngwr-line-chart.mjs.map +1 -1
  177. package/fesm2022/ngwr-list.mjs +14 -9
  178. package/fesm2022/ngwr-list.mjs.map +1 -1
  179. package/fesm2022/ngwr-loading-bar.mjs +71 -31
  180. package/fesm2022/ngwr-loading-bar.mjs.map +1 -1
  181. package/fesm2022/ngwr-markdown-testing.mjs +516 -0
  182. package/fesm2022/ngwr-markdown-testing.mjs.map +1 -0
  183. package/fesm2022/ngwr-markdown.mjs +1492 -0
  184. package/fesm2022/ngwr-markdown.mjs.map +1 -0
  185. package/fesm2022/ngwr-marquee.mjs +19 -8
  186. package/fesm2022/ngwr-marquee.mjs.map +1 -1
  187. package/fesm2022/ngwr-media.mjs +3 -3
  188. package/fesm2022/ngwr-mention-testing.mjs +513 -0
  189. package/fesm2022/ngwr-mention-testing.mjs.map +1 -0
  190. package/fesm2022/ngwr-mention.mjs +16 -7
  191. package/fesm2022/ngwr-mention.mjs.map +1 -1
  192. package/fesm2022/ngwr-meta.mjs +28 -13
  193. package/fesm2022/ngwr-meta.mjs.map +1 -1
  194. package/fesm2022/ngwr-meter-group.mjs +22 -8
  195. package/fesm2022/ngwr-meter-group.mjs.map +1 -1
  196. package/fesm2022/ngwr-overlay.mjs +57 -8
  197. package/fesm2022/ngwr-overlay.mjs.map +1 -1
  198. package/fesm2022/ngwr-page-header.mjs +3 -3
  199. package/fesm2022/ngwr-pagination-testing.mjs +389 -0
  200. package/fesm2022/ngwr-pagination-testing.mjs.map +1 -0
  201. package/fesm2022/ngwr-pagination.mjs +27 -11
  202. package/fesm2022/ngwr-pagination.mjs.map +1 -1
  203. package/fesm2022/ngwr-pipes.mjs +21 -21
  204. package/fesm2022/ngwr-platform.mjs +9 -9
  205. package/fesm2022/ngwr-popconfirm-testing.mjs +309 -0
  206. package/fesm2022/ngwr-popconfirm-testing.mjs.map +1 -0
  207. package/fesm2022/ngwr-popconfirm.mjs +99 -21
  208. package/fesm2022/ngwr-popconfirm.mjs.map +1 -1
  209. package/fesm2022/ngwr-popover-testing.mjs +316 -0
  210. package/fesm2022/ngwr-popover-testing.mjs.map +1 -0
  211. package/fesm2022/ngwr-popover.mjs +48 -10
  212. package/fesm2022/ngwr-popover.mjs.map +1 -1
  213. package/fesm2022/ngwr-progress.mjs +3 -3
  214. package/fesm2022/ngwr-pull-to-refresh.mjs +19 -4
  215. package/fesm2022/ngwr-pull-to-refresh.mjs.map +1 -1
  216. package/fesm2022/ngwr-qr.mjs +15 -5
  217. package/fesm2022/ngwr-qr.mjs.map +1 -1
  218. package/fesm2022/ngwr-radio-testing.mjs +392 -0
  219. package/fesm2022/ngwr-radio-testing.mjs.map +1 -0
  220. package/fesm2022/ngwr-radio.mjs +16 -9
  221. package/fesm2022/ngwr-radio.mjs.map +1 -1
  222. package/fesm2022/ngwr-rating-testing.mjs +384 -0
  223. package/fesm2022/ngwr-rating-testing.mjs.map +1 -0
  224. package/fesm2022/ngwr-rating.mjs +40 -5
  225. package/fesm2022/ngwr-rating.mjs.map +1 -1
  226. package/fesm2022/ngwr-result.mjs +12 -12
  227. package/fesm2022/ngwr-rotating-text.mjs +3 -3
  228. package/fesm2022/ngwr-scroll.mjs +3 -3
  229. package/fesm2022/ngwr-segmented-testing.mjs +512 -0
  230. package/fesm2022/ngwr-segmented-testing.mjs.map +1 -0
  231. package/fesm2022/ngwr-segmented.mjs +3 -3
  232. package/fesm2022/ngwr-select-testing.mjs +268 -0
  233. package/fesm2022/ngwr-select-testing.mjs.map +1 -0
  234. package/fesm2022/ngwr-select.mjs +96 -25
  235. package/fesm2022/ngwr-select.mjs.map +1 -1
  236. package/fesm2022/ngwr-shiny-text.mjs +7 -7
  237. package/fesm2022/ngwr-shiny-text.mjs.map +1 -1
  238. package/fesm2022/ngwr-sidebar.mjs +67 -14
  239. package/fesm2022/ngwr-sidebar.mjs.map +1 -1
  240. package/fesm2022/ngwr-skeleton.mjs +3 -3
  241. package/fesm2022/ngwr-slider-testing.mjs +478 -0
  242. package/fesm2022/ngwr-slider-testing.mjs.map +1 -0
  243. package/fesm2022/ngwr-slider.mjs +59 -15
  244. package/fesm2022/ngwr-slider.mjs.map +1 -1
  245. package/fesm2022/ngwr-sparkline.mjs +28 -8
  246. package/fesm2022/ngwr-sparkline.mjs.map +1 -1
  247. package/fesm2022/ngwr-speed-dial.mjs +39 -6
  248. package/fesm2022/ngwr-speed-dial.mjs.map +1 -1
  249. package/fesm2022/ngwr-spinner.mjs +14 -5
  250. package/fesm2022/ngwr-spinner.mjs.map +1 -1
  251. package/fesm2022/ngwr-splash-cursor.mjs +4 -4
  252. package/fesm2022/ngwr-splash-cursor.mjs.map +1 -1
  253. package/fesm2022/ngwr-split-text.mjs +4 -4
  254. package/fesm2022/ngwr-split-text.mjs.map +1 -1
  255. package/fesm2022/ngwr-splitter.mjs +72 -11
  256. package/fesm2022/ngwr-splitter.mjs.map +1 -1
  257. package/fesm2022/ngwr-spotlight-card.mjs +7 -7
  258. package/fesm2022/ngwr-spotlight-card.mjs.map +1 -1
  259. package/fesm2022/ngwr-squircle.mjs +6 -6
  260. package/fesm2022/ngwr-star-border.mjs +4 -4
  261. package/fesm2022/ngwr-star-border.mjs.map +1 -1
  262. package/fesm2022/ngwr-statistic.mjs +33 -16
  263. package/fesm2022/ngwr-statistic.mjs.map +1 -1
  264. package/fesm2022/ngwr-stepper-testing.mjs +477 -0
  265. package/fesm2022/ngwr-stepper-testing.mjs.map +1 -0
  266. package/fesm2022/ngwr-stepper.mjs +6 -6
  267. package/fesm2022/ngwr-storage.mjs +27 -17
  268. package/fesm2022/ngwr-storage.mjs.map +1 -1
  269. package/fesm2022/ngwr-switch-testing.mjs +77 -0
  270. package/fesm2022/ngwr-switch-testing.mjs.map +1 -0
  271. package/fesm2022/ngwr-switch.mjs +12 -6
  272. package/fesm2022/ngwr-switch.mjs.map +1 -1
  273. package/fesm2022/ngwr-table-testing.mjs +580 -0
  274. package/fesm2022/ngwr-table-testing.mjs.map +1 -0
  275. package/fesm2022/ngwr-table.mjs +105 -44
  276. package/fesm2022/ngwr-table.mjs.map +1 -1
  277. package/fesm2022/ngwr-tabs-testing.mjs +617 -0
  278. package/fesm2022/ngwr-tabs-testing.mjs.map +1 -0
  279. package/fesm2022/ngwr-tabs.mjs +44 -12
  280. package/fesm2022/ngwr-tabs.mjs.map +1 -1
  281. package/fesm2022/ngwr-textarea-testing.mjs +238 -0
  282. package/fesm2022/ngwr-textarea-testing.mjs.map +1 -0
  283. package/fesm2022/ngwr-textarea.mjs +35 -7
  284. package/fesm2022/ngwr-textarea.mjs.map +1 -1
  285. package/fesm2022/ngwr-theme.mjs +3 -3
  286. package/fesm2022/ngwr-tilt-card.mjs +7 -7
  287. package/fesm2022/ngwr-tilt-card.mjs.map +1 -1
  288. package/fesm2022/ngwr-timeline.mjs +6 -6
  289. package/fesm2022/ngwr-toast-testing.mjs +101 -0
  290. package/fesm2022/ngwr-toast-testing.mjs.map +1 -0
  291. package/fesm2022/ngwr-toast.mjs +55 -21
  292. package/fesm2022/ngwr-toast.mjs.map +1 -1
  293. package/fesm2022/ngwr-toolbar.mjs +3 -3
  294. package/fesm2022/ngwr-tour.mjs +67 -15
  295. package/fesm2022/ngwr-tour.mjs.map +1 -1
  296. package/fesm2022/ngwr-transfer-testing.mjs +538 -0
  297. package/fesm2022/ngwr-transfer-testing.mjs.map +1 -0
  298. package/fesm2022/ngwr-transfer.mjs +47 -16
  299. package/fesm2022/ngwr-transfer.mjs.map +1 -1
  300. package/fesm2022/ngwr-tree-testing.mjs +734 -0
  301. package/fesm2022/ngwr-tree-testing.mjs.map +1 -0
  302. package/fesm2022/ngwr-tree.mjs +75 -9
  303. package/fesm2022/ngwr-tree.mjs.map +1 -1
  304. package/fesm2022/ngwr-typewriter.mjs +7 -5
  305. package/fesm2022/ngwr-typewriter.mjs.map +1 -1
  306. package/fesm2022/ngwr-typography.mjs +3 -3
  307. package/fesm2022/ngwr-version.mjs +1 -1
  308. package/fesm2022/ngwr-version.mjs.map +1 -1
  309. package/fesm2022/ngwr-virtual-scroll.mjs +33 -7
  310. package/fesm2022/ngwr-virtual-scroll.mjs.map +1 -1
  311. package/fesm2022/ngwr-waves.mjs +5 -5
  312. package/fesm2022/ngwr-waves.mjs.map +1 -1
  313. package/fesm2022/ngwr-window.mjs +88 -18
  314. package/fesm2022/ngwr-window.mjs.map +1 -1
  315. package/gauge/styles/_index.scss +1 -1
  316. package/glitch-text/styles/_index.scss +4 -0
  317. package/i18n/en.json +56 -0
  318. package/i18n/ru.json +56 -0
  319. package/image-cropper/styles/_index.scss +13 -1
  320. package/input/styles/_index.scss +2 -2
  321. package/input-number/styles/_index.scss +7 -2
  322. package/knob/styles/_index.scss +8 -1
  323. package/layout/styles/_index.scss +3 -3
  324. package/lightbox/styles/_index.scss +10 -2
  325. package/line-chart/styles/_index.scss +6 -0
  326. package/llms-full.txt +151 -4
  327. package/llms.txt +57 -8
  328. package/loading-bar/styles/_index.scss +1 -2
  329. package/markdown/styles/_index.scss +296 -0
  330. package/marquee/styles/_index.scss +12 -0
  331. package/mcp/api.js +512 -0
  332. package/mcp/catalog.js +157 -0
  333. package/mcp/server.js +273 -0
  334. package/mcp/tools.js +366 -0
  335. package/meter-group/styles/_index.scss +1 -1
  336. package/package.json +186 -35
  337. package/pagination/styles/_index.scss +6 -6
  338. package/popover/styles/_index.scss +37 -5
  339. package/rating/styles/_index.scss +10 -0
  340. package/schematics/use/symbol-map.json +2 -0
  341. package/segmented/styles/_index.scss +7 -0
  342. package/select/styles/_index.scss +29 -9
  343. package/sidebar/styles/_index.scss +30 -5
  344. package/slider/styles/_index.scss +15 -0
  345. package/speed-dial/styles/_index.scss +20 -0
  346. package/split-text/styles/_index.scss +13 -0
  347. package/star-border/styles/_index.scss +2 -0
  348. package/stepper/styles/_index.scss +1 -1
  349. package/styles/_grid.scss +4 -4
  350. package/styles.scss +1 -0
  351. package/switch/styles/_index.scss +5 -3
  352. package/table/styles/_index.scss +22 -11
  353. package/tabs/styles/_index.scss +11 -1
  354. package/textarea/styles/_index.scss +5 -0
  355. package/theme/styles/_colors.scss +29 -13
  356. package/theme/styles/_dark.scss +11 -3
  357. package/theme/styles/_mixins.scss +3 -0
  358. package/timeline/styles/_index.scss +2 -2
  359. package/toast/styles/_index.scss +17 -8
  360. package/toolbar/styles/_index.scss +3 -3
  361. package/tour/styles/_index.scss +7 -1
  362. package/tree/styles/_index.scss +5 -3
  363. package/types/ngwr-action-sheet.d.ts +9 -1
  364. package/types/ngwr-affix.d.ts +7 -1
  365. package/types/ngwr-anchor.d.ts +8 -1
  366. package/types/ngwr-avatar.d.ts +13 -3
  367. package/types/ngwr-bar-chart.d.ts +16 -0
  368. package/types/ngwr-burger.d.ts +6 -2
  369. package/types/ngwr-button-testing.d.ts +85 -0
  370. package/types/ngwr-button.d.ts +58 -10
  371. package/types/ngwr-calendar-heatmap.d.ts +16 -2
  372. package/types/ngwr-calendar.d.ts +37 -1
  373. package/types/ngwr-carousel-testing.d.ts +257 -0
  374. package/types/ngwr-carousel.d.ts +20 -4
  375. package/types/ngwr-cascader-testing.d.ts +392 -0
  376. package/types/ngwr-checkbox-testing.d.ts +77 -0
  377. package/types/ngwr-checkbox.d.ts +7 -2
  378. package/types/ngwr-clipboard.d.ts +8 -1
  379. package/types/ngwr-collapse-testing.d.ts +290 -0
  380. package/types/ngwr-color-picker.d.ts +20 -11
  381. package/types/ngwr-command-palette-testing.d.ts +437 -0
  382. package/types/ngwr-command-palette.d.ts +25 -2
  383. package/types/ngwr-compare.d.ts +50 -2
  384. package/types/ngwr-config.d.ts +176 -0
  385. package/types/ngwr-context-menu-testing.d.ts +401 -0
  386. package/types/ngwr-context-menu.d.ts +65 -17
  387. package/types/ngwr-counter.d.ts +6 -1
  388. package/types/ngwr-date-adapter-luxon.d.ts +26 -0
  389. package/types/ngwr-date-picker-testing.d.ts +518 -0
  390. package/types/ngwr-date-picker.d.ts +128 -8
  391. package/types/ngwr-dialog-testing.d.ts +79 -0
  392. package/types/ngwr-dialog.d.ts +13 -0
  393. package/types/ngwr-directives.d.ts +10 -1
  394. package/types/ngwr-donut-chart.d.ts +8 -1
  395. package/types/ngwr-drawer-testing.d.ts +196 -0
  396. package/types/ngwr-drawer.d.ts +15 -0
  397. package/types/ngwr-dropdown-testing.d.ts +202 -0
  398. package/types/ngwr-dropdown.d.ts +7 -1
  399. package/types/ngwr-empty.d.ts +19 -4
  400. package/types/ngwr-event-calendar.d.ts +26 -1
  401. package/types/ngwr-file-upload-testing.d.ts +194 -0
  402. package/types/ngwr-form-testing.d.ts +379 -0
  403. package/types/ngwr-form.d.ts +17 -0
  404. package/types/ngwr-gauge.d.ts +13 -1
  405. package/types/ngwr-hotkey.d.ts +2 -0
  406. package/types/ngwr-image-cropper.d.ts +10 -0
  407. package/types/ngwr-input-number-testing.d.ts +226 -0
  408. package/types/ngwr-input-number.d.ts +29 -1
  409. package/types/ngwr-input-otp-testing.d.ts +299 -0
  410. package/types/ngwr-input-otp.d.ts +23 -2
  411. package/types/ngwr-input-testing.d.ts +84 -0
  412. package/types/ngwr-input.d.ts +20 -6
  413. package/types/ngwr-knob.d.ts +18 -0
  414. package/types/ngwr-layout.d.ts +1 -0
  415. package/types/ngwr-lightbox.d.ts +17 -3
  416. package/types/ngwr-line-chart.d.ts +9 -2
  417. package/types/ngwr-list.d.ts +7 -2
  418. package/types/ngwr-loading-bar.d.ts +4 -7
  419. package/types/ngwr-markdown-testing.d.ts +462 -0
  420. package/types/ngwr-markdown.d.ts +534 -0
  421. package/types/ngwr-marquee.d.ts +12 -2
  422. package/types/ngwr-mention-testing.d.ts +359 -0
  423. package/types/ngwr-meta.d.ts +4 -2
  424. package/types/ngwr-meter-group.d.ts +11 -1
  425. package/types/ngwr-overlay.d.ts +33 -2
  426. package/types/ngwr-pagination-testing.d.ts +291 -0
  427. package/types/ngwr-pagination.d.ts +7 -1
  428. package/types/ngwr-popconfirm-testing.d.ts +235 -0
  429. package/types/ngwr-popconfirm.d.ts +31 -21
  430. package/types/ngwr-popover-testing.d.ts +221 -0
  431. package/types/ngwr-popover.d.ts +19 -2
  432. package/types/ngwr-pull-to-refresh.d.ts +7 -0
  433. package/types/ngwr-qr.d.ts +9 -1
  434. package/types/ngwr-radio-testing.d.ts +296 -0
  435. package/types/ngwr-radio.d.ts +8 -2
  436. package/types/ngwr-rating-testing.d.ts +291 -0
  437. package/types/ngwr-rating.d.ts +23 -0
  438. package/types/ngwr-segmented-testing.d.ts +401 -0
  439. package/types/ngwr-select-testing.d.ts +175 -0
  440. package/types/ngwr-select.d.ts +45 -4
  441. package/types/ngwr-sidebar.d.ts +17 -2
  442. package/types/ngwr-slider-testing.d.ts +329 -0
  443. package/types/ngwr-slider.d.ts +35 -1
  444. package/types/ngwr-sparkline.d.ts +12 -2
  445. package/types/ngwr-speed-dial.d.ts +17 -18
  446. package/types/ngwr-spinner.d.ts +8 -1
  447. package/types/ngwr-splitter.d.ts +24 -1
  448. package/types/ngwr-statistic.d.ts +12 -2
  449. package/types/ngwr-stepper-testing.d.ts +346 -0
  450. package/types/ngwr-storage.d.ts +10 -1
  451. package/types/ngwr-switch-testing.d.ts +66 -0
  452. package/types/ngwr-switch.d.ts +7 -2
  453. package/types/ngwr-table-testing.d.ts +423 -0
  454. package/types/ngwr-table.d.ts +42 -0
  455. package/types/ngwr-tabs-testing.d.ts +470 -0
  456. package/types/ngwr-tabs.d.ts +9 -0
  457. package/types/ngwr-textarea-testing.d.ts +184 -0
  458. package/types/ngwr-textarea.d.ts +7 -2
  459. package/types/ngwr-toast-testing.d.ts +80 -0
  460. package/types/ngwr-toast.d.ts +19 -4
  461. package/types/ngwr-tour.d.ts +27 -0
  462. package/types/ngwr-transfer-testing.d.ts +444 -0
  463. package/types/ngwr-transfer.d.ts +16 -1
  464. package/types/ngwr-tree-testing.d.ts +501 -0
  465. package/types/ngwr-tree.d.ts +33 -0
  466. package/types/ngwr-version.d.ts +1 -1
  467. package/types/ngwr-virtual-scroll.d.ts +13 -1
  468. package/types/ngwr-window.d.ts +23 -2
  469. package/typewriter/styles/_index.scss +1 -1
  470. package/typography/styles/_index.scss +1 -1
  471. package/window/styles/_index.scss +32 -9
@@ -0,0 +1,534 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { EnvironmentProviders, InjectionToken } from '@angular/core';
3
+ import { BooleanInput } from '@angular/cdk/coercion';
4
+
5
+ /**
6
+ * @license
7
+ *
8
+ * Use of this source code is governed by an MIT-style license that can be
9
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
10
+ */
11
+ /** One coloured run inside a highlighted line of code. */
12
+ interface WrHighlightSpan {
13
+ readonly text: string;
14
+ /** Any CSS colour. Omitted spans inherit the code block's own colour. */
15
+ readonly color?: string;
16
+ readonly fontStyle?: 'italic' | 'bold' | 'underline';
17
+ }
18
+ /** One line of highlighted code, left to right. */
19
+ type WrHighlightLine = readonly WrHighlightSpan[];
20
+ /**
21
+ * Turns a fenced code block into coloured spans.
22
+ *
23
+ * **Spans, not an HTML string** — and that is the whole point of this signature.
24
+ * Every other Angular markdown renderer takes highlighted HTML and hands it to
25
+ * `[innerHTML]`, which needs `bypassSecurityTrustHtml` (Angular's own sanitizer
26
+ * strips the inline `style` attributes highlighting is made of, so the trust
27
+ * cannot be skipped). That puts a `dangerouslySetInnerHTML`-shaped hole in the
28
+ * one component whose entire input is untrusted text. Spans close it: `wr-markdown`
29
+ * renders each one as a real element with a bound `[style.color]`, so nothing in
30
+ * the pipeline is ever parsed as HTML and the library keeps its
31
+ * `unsafe-inline`-free CSP story.
32
+ *
33
+ * Return `null` for a language you do not handle — the block then renders as
34
+ * plain text, which is also what happens before an async highlighter resolves.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * // Shiki, whose `codeToTokens` already returns this shape.
39
+ * provideWrMarkdownHighlighter(async (code, language) => {
40
+ * const shiki = await getHighlighter();
41
+ * if (!language || !shiki.getLoadedLanguages().includes(language)) return null;
42
+ * const { tokens } = shiki.codeToTokens(code, { lang: language, theme: 'github-dark' });
43
+ * return tokens.map(line => line.map(t => ({ text: t.content, color: t.color })));
44
+ * });
45
+ * ```
46
+ */
47
+ type WrMarkdownHighlighter = (code: string, language: string | null) => readonly WrHighlightLine[] | null | Promise<readonly WrHighlightLine[] | null>;
48
+
49
+ /**
50
+ * @license
51
+ *
52
+ * Use of this source code is governed by an MIT-style license that can be
53
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
54
+ */
55
+ /** Column alignment of a GFM table, `null` when the delimiter row said nothing. */
56
+ type WrMarkdownAlign = 'start' | 'center' | 'end' | null;
57
+ /** A run of inline content — the leaves of a paragraph, heading or table cell. */
58
+ type WrMarkdownInline = {
59
+ readonly kind: 'text';
60
+ readonly value: string;
61
+ } | {
62
+ readonly kind: 'code';
63
+ readonly value: string;
64
+ } | {
65
+ readonly kind: 'strong';
66
+ readonly children: readonly WrMarkdownInline[];
67
+ } | {
68
+ readonly kind: 'em';
69
+ readonly children: readonly WrMarkdownInline[];
70
+ } | {
71
+ readonly kind: 'del';
72
+ readonly children: readonly WrMarkdownInline[];
73
+ } | {
74
+ readonly kind: 'link';
75
+ readonly href: string;
76
+ readonly title: string | null;
77
+ readonly children: readonly WrMarkdownInline[];
78
+ } | {
79
+ readonly kind: 'image';
80
+ readonly src: string;
81
+ readonly alt: string;
82
+ readonly title: string | null;
83
+ } | {
84
+ readonly kind: 'break';
85
+ };
86
+ /** One `<li>`, including its task-list checkbox state. */
87
+ interface WrMarkdownListItem {
88
+ readonly children: readonly WrMarkdownBlock[];
89
+ /** `true` / `false` for `- [x]` / `- [ ]`, `null` for an ordinary item. */
90
+ readonly checked: boolean | null;
91
+ }
92
+ /** One table cell. */
93
+ interface WrMarkdownCell {
94
+ readonly inlines: readonly WrMarkdownInline[];
95
+ }
96
+ /** A block-level node. `kind` discriminates the union. */
97
+ type WrMarkdownBlock = {
98
+ readonly kind: 'heading';
99
+ readonly level: 1 | 2 | 3 | 4 | 5 | 6;
100
+ readonly inlines: readonly WrMarkdownInline[];
101
+ /** Slug derived from the text, for anchoring. Empty when the heading has no text. */
102
+ readonly id: string;
103
+ } | {
104
+ readonly kind: 'paragraph';
105
+ readonly inlines: readonly WrMarkdownInline[];
106
+ } | {
107
+ readonly kind: 'code';
108
+ /** First word of the info string, lowercased. `null` for a bare fence. */
109
+ readonly language: string | null;
110
+ readonly code: string;
111
+ /**
112
+ * `false` while the closing fence has not arrived. Mid-stream that is the
113
+ * normal state, and it is what lets a consumer hold back a "copy" affordance
114
+ * until the block is whole.
115
+ */
116
+ readonly closed: boolean;
117
+ } | {
118
+ readonly kind: 'quote';
119
+ readonly children: readonly WrMarkdownBlock[];
120
+ } | {
121
+ readonly kind: 'list';
122
+ readonly ordered: boolean;
123
+ /** First number of an ordered list; `1` for bullets. */
124
+ readonly start: number;
125
+ /** A tight list renders its items' paragraphs bare, as CommonMark specifies. */
126
+ readonly tight: boolean;
127
+ readonly items: readonly WrMarkdownListItem[];
128
+ } | {
129
+ readonly kind: 'table';
130
+ readonly head: readonly WrMarkdownCell[];
131
+ readonly rows: readonly (readonly WrMarkdownCell[])[];
132
+ readonly align: readonly WrMarkdownAlign[];
133
+ } | {
134
+ readonly kind: 'rule';
135
+ };
136
+ /** Options for {@link parseMarkdown}. */
137
+ interface WrMarkdownParseOptions {
138
+ /**
139
+ * Treat the source as a prefix of a longer document.
140
+ *
141
+ * An unterminated fence still produces a code block (so code appears as it
142
+ * arrives rather than after the closing fence), and a trailing half-typed
143
+ * `**`, `` ` `` or `[label](htt` is withheld instead of being rendered as
144
+ * literal punctuation that vanishes one chunk later.
145
+ */
146
+ readonly streaming?: boolean;
147
+ }
148
+
149
+ /**
150
+ * Renders markdown — as DOM, not as HTML.
151
+ *
152
+ * Built for streamed model output, and useful for any markdown an app does not
153
+ * write itself: comments, release notes, a README. `[streaming]` makes a partial
154
+ * document render like a whole one (see {@link parseMarkdown}); without it the
155
+ * component is an ordinary renderer.
156
+ *
157
+ * **Raw HTML in the source is escaped, never rendered.** That is a deliberate
158
+ * limit rather than an unfinished feature: the input is untrusted by
159
+ * construction, `[innerHTML]` is how every comparable renderer takes it, and one
160
+ * `<img onerror>` is the whole cost of being wrong. Nothing here is parsed as
161
+ * HTML at any point — every text node is a text node and every `href` goes
162
+ * through Angular's URL sanitizer on top of this component's own scheme check.
163
+ *
164
+ * @example
165
+ * ```html
166
+ * <wr-markdown [value]="answer()" [streaming]="pending()" copyable />
167
+ * ```
168
+ *
169
+ * @see https://ngwr.dev/reference/components/markdown
170
+ */
171
+ declare class WrMarkdown {
172
+ private readonly highlight;
173
+ private readonly destroyRef;
174
+ /** The markdown source. */
175
+ readonly value: _angular_core.InputSignal<string>;
176
+ /**
177
+ * The source is a prefix of a longer document.
178
+ *
179
+ * Turns on partial-safe parsing — an open fence renders as code, a half-typed
180
+ * `**bold` renders as bold rather than as asterisks — and marks the host with
181
+ * `.wr-markdown--streaming`, which paints a caret after the last block.
182
+ *
183
+ * @default false
184
+ */
185
+ readonly streaming: _angular_core.InputSignalWithTransform<boolean, any>;
186
+ /**
187
+ * Show a copy button on finished code blocks.
188
+ *
189
+ * Falls back to `markdown.copyable` from `provideWrConfig()`, then `false`.
190
+ * Only CLOSED blocks get one: mid-stream the code is not all there, and a
191
+ * button that copies half a snippet is worse than no button.
192
+ */
193
+ readonly copyable: _angular_core.InputSignalWithTransform<boolean | null, BooleanInput>;
194
+ /**
195
+ * Where links open. `_blank` also sets `rel="noopener noreferrer"`, which is
196
+ * not optional — a target without it hands the opener to a page whose URL came
197
+ * from the document being rendered.
198
+ *
199
+ * Falls back to `markdown.linkTarget` from `provideWrConfig()`, then no target.
200
+ */
201
+ readonly linkTarget: _angular_core.InputSignal<"_blank" | "_self" | null>;
202
+ /**
203
+ * Put a slugged `id` on every heading, so the document can be linked into.
204
+ *
205
+ * @default true
206
+ */
207
+ readonly headingIds: _angular_core.InputSignalWithTransform<boolean, any>;
208
+ /**
209
+ * Namespace for the generated heading ids, and for the in-document `#fragment`
210
+ * links that point at them.
211
+ *
212
+ * Defaults to `'user-content-'`, which is what GitHub emits for untrusted
213
+ * markdown, and for the same reason: without a namespace a document that
214
+ * happens to contain `# Search` renders `id="search"` and steals it from the
215
+ * page around it. That is not cosmetic — a `<label for="search">` silently
216
+ * stops labelling its input, and `getElementById` starts answering with a
217
+ * heading. Anchors written INSIDE the document keep working, because a bare
218
+ * `#fragment` href gets the same prefix.
219
+ *
220
+ * Set it to `''` for a document you author yourself and want clean anchors for.
221
+ */
222
+ readonly headingIdPrefix: _angular_core.InputSignal<string>;
223
+ /** Accessible name of the copy button. Falls back to `markdown.copy`, then `'Copy code'`. */
224
+ readonly copyLabel: _angular_core.InputSignal<string | null>;
225
+ /** Announced after a successful copy. Falls back to `markdown.copied`, then `'Copied'`. */
226
+ readonly copiedLabel: _angular_core.InputSignal<string | null>;
227
+ /** Read out for a checked task item. Falls back to `markdown.taskDone`, then `'Done:'`. */
228
+ readonly taskDoneLabel: _angular_core.InputSignal<string | null>;
229
+ /** Read out for an unchecked task item. Falls back to `markdown.taskTodo`, then `'To do:'`. */
230
+ readonly taskTodoLabel: _angular_core.InputSignal<string | null>;
231
+ protected readonly resolvedCopyable: _angular_core.Signal<boolean>;
232
+ protected readonly resolvedLinkTarget: _angular_core.Signal<"_blank" | "_self" | null>;
233
+ protected readonly resolvedCopyLabel: _angular_core.Signal<string>;
234
+ protected readonly resolvedCopiedLabel: _angular_core.Signal<string>;
235
+ protected readonly resolvedTaskDoneLabel: _angular_core.Signal<string>;
236
+ protected readonly resolvedTaskTodoLabel: _angular_core.Signal<string>;
237
+ /**
238
+ * The parsed document, re-derived whenever the source changes.
239
+ *
240
+ * The WHOLE buffer, on every chunk — so a streamed answer costs O(n²) over the
241
+ * stream. That is a deliberate trade rather than an oversight: freezing the
242
+ * blocks before the last blank line would halve it, but a blank line is not a
243
+ * safe boundary in markdown (a list continues across one), and a wrong boundary
244
+ * corrupts the document rather than slowing it down. The constant is small —
245
+ * 300 KB of prose parses in ~120 ms — and `@for`'s `track $index` keeps the
246
+ * DOM cost proportional to what actually changed.
247
+ */
248
+ protected readonly blocks: _angular_core.Signal<readonly WrMarkdownBlock[]>;
249
+ /** `rel` is bound, not hard-coded, so a same-tab link does not carry a pointless one. */
250
+ protected readonly linkRel: _angular_core.Signal<"noopener noreferrer" | null>;
251
+ /**
252
+ * Which code block last got copied, held by IDENTITY.
253
+ *
254
+ * Keyed on the code string, two blocks containing the same snippet both lit up
255
+ * — and a document that shows the same one-liner twice is ordinary. Block nodes
256
+ * are recreated whenever the source changes, so the confirmation also clears
257
+ * itself on the next chunk, which is the right lifetime for it.
258
+ */
259
+ private readonly copiedBlock;
260
+ private copiedTimer;
261
+ constructor();
262
+ /**
263
+ * A newline as data rather than as template text.
264
+ *
265
+ * The lines of a highlighted block are separate elements, and what separates
266
+ * them on screen — and in a copy — is a real `\n` inside the `<pre>`. Angular
267
+ * strips whitespace-only text nodes from templates, so the character cannot be
268
+ * typed there; an interpolation of it survives.
269
+ */
270
+ protected readonly newline: string;
271
+ /** Every code block in the document, nested ones included. */
272
+ private readonly codeBlocks;
273
+ /** Spans for a code block, or `null` to render it as plain text. */
274
+ protected linesOf(code: string, language: string | null): readonly WrHighlightLine[] | null;
275
+ protected isCopied(block: WrMarkdownBlock): boolean;
276
+ protected onCopied(block: WrMarkdownBlock): void;
277
+ /** A heading's id, namespaced, or `null` when there is nothing to link to. */
278
+ protected idOf(id: string): string | null;
279
+ /**
280
+ * A link's destination, with a bare fragment pointed at the namespaced id.
281
+ *
282
+ * Otherwise prefixing the headings would quietly break every `[see](#section)`
283
+ * the document writes about itself.
284
+ */
285
+ protected hrefOf(href: string): string;
286
+ /**
287
+ * Casts for the recursive templates, and the reason they exist.
288
+ *
289
+ * Block content nests — a quote holds blocks, a list item holds blocks — so the
290
+ * template recurses through `ngTemplateOutlet` into itself. That is the one
291
+ * recursion shape which adds NO elements to the DOM; a recursive component
292
+ * would put a host element between `<ul>` and its `<li>`, which is invalid
293
+ * markup and breaks the list's accessibility tree. The cost is that
294
+ * `ngTemplateOutlet` context arrives as `any`, and `@switch` cannot narrow
295
+ * `any`. Casting it back at the top of each template restores full
296
+ * `strictTemplates` checking inside the loop, where the work happens.
297
+ */
298
+ protected asBlocks(value: unknown): readonly WrMarkdownBlock[];
299
+ protected asInlines(value: unknown): readonly WrMarkdownInline[];
300
+ protected asItems(value: unknown): readonly WrMarkdownListItem[];
301
+ protected asCells(value: unknown): readonly WrMarkdownCell[];
302
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrMarkdown, never>;
303
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WrMarkdown, "wr-markdown", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "streaming": { "alias": "streaming"; "required": false; "isSignal": true; }; "copyable": { "alias": "copyable"; "required": false; "isSignal": true; }; "linkTarget": { "alias": "linkTarget"; "required": false; "isSignal": true; }; "headingIds": { "alias": "headingIds"; "required": false; "isSignal": true; }; "headingIdPrefix": { "alias": "headingIdPrefix"; "required": false; "isSignal": true; }; "copyLabel": { "alias": "copyLabel"; "required": false; "isSignal": true; }; "copiedLabel": { "alias": "copiedLabel"; "required": false; "isSignal": true; }; "taskDoneLabel": { "alias": "taskDoneLabel"; "required": false; "isSignal": true; }; "taskTodoLabel": { "alias": "taskTodoLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
304
+ }
305
+
306
+ /**
307
+ * Turns fenced code into coloured spans, once per distinct block.
308
+ *
309
+ * **Two rules hold this together, and both were learned by breaking them.**
310
+ *
311
+ * `request` never READS a signal that it writes. An earlier version kept the
312
+ * answers in a signal and rebuilt it on every store, so the component's `effect` —
313
+ * which calls `request` — depended on the signal `request` wrote, and a document
314
+ * with more code blocks than the cache could hold looped for ever: evict,
315
+ * re-request, write, re-dirty. It did not merely spin, it starved the timers that
316
+ * were supposed to fail the test. The plain `Map` is the source of truth now, and a
317
+ * single `revision` counter is the only reactive part; nothing that writes reads it
318
+ * back.
319
+ *
320
+ * And `linesFor` is a pure read, safe to call while Angular renders. Asking a
321
+ * highlighter for a block means writing when the answer lands, and Angular refuses
322
+ * a signal write during rendering (NG0600) — so the component requests from an
323
+ * `effect`, which runs after the render, and the template only reads.
324
+ *
325
+ * Blocks appear as plain text first and gain colour when the answer arrives. For an
326
+ * async highlighter that is right rather than a compromise: a grammar engine loads
327
+ * WASM, and blocking on it would leave the reader with an empty box instead of
328
+ * their code.
329
+ */
330
+ declare class WrMarkdownHighlight {
331
+ private readonly highlighter;
332
+ /** Language to code to answer. Insertion order is least-recently-rendered first. */
333
+ private readonly cache;
334
+ /** Bumped whenever an answer lands. Read by the template, never by a writer. */
335
+ private readonly revision;
336
+ private readonly generationSignal;
337
+ /**
338
+ * Bumped ONLY by {@link invalidate}. Read it in the effect that requests, so a
339
+ * consumer can force a re-ask.
340
+ *
341
+ * Separate from `revision` on purpose, and the separation is the whole safety
342
+ * argument. An effect that requests and also depends on the signal that storing
343
+ * an answer writes is the shape that looped for ever here once: past the cache
344
+ * limit, requesting stops being idempotent, so each pass writes, re-dirties the
345
+ * effect, evicts and requests again. Nothing inside `request` touches this one.
346
+ */
347
+ readonly generation: _angular_core.Signal<number>;
348
+ /** Spans for one block, or `null` for plain text. Safe to call from a template. */
349
+ linesFor(code: string, language: string | null): readonly WrHighlightLine[] | null;
350
+ /**
351
+ * Forget every answer and ask again on the next render.
352
+ *
353
+ * The cache is keyed on `(language, code)` and nothing else, which is right for
354
+ * the streaming case it exists for and wrong for one real situation: a
355
+ * highlighter that returns per-theme colours serves whichever palette was
356
+ * current when a block was first rendered, for ever. There is no theme
357
+ * dimension to key on — the library cannot know what a highlighter's answer
358
+ * depends on — so the honest fix is to let the consumer say when it changed.
359
+ *
360
+ * A highlighter that returns theme-agnostic colours (CSS `light-dark()`, a
361
+ * custom property) needs none of this.
362
+ *
363
+ * @example
364
+ * ```ts
365
+ * const highlight = inject(WrMarkdownHighlight);
366
+ * effect(() => {
367
+ * theme.current();
368
+ * highlight.invalidate();
369
+ * });
370
+ * ```
371
+ */
372
+ invalidate(): void;
373
+ /**
374
+ * Ask for a block to be highlighted. Idempotent, and safe to call for every
375
+ * block on every change — call it from an `effect`, never from a template.
376
+ */
377
+ request(code: string, language: string | null): void;
378
+ /**
379
+ * Fill in an answer and let the view know.
380
+ *
381
+ * Writes through the entry OBJECT rather than looking its key up again. The entry
382
+ * may have been evicted while the promise was in flight, in which case this
383
+ * writes to something nothing holds — which is the intended outcome. The version
384
+ * that re-inserted by key put entries back behind eviction's back, and the cache
385
+ * grew without a ceiling for exactly the async highlighter its limit exists for.
386
+ */
387
+ private fill;
388
+ /** `Map` iterates in insertion order, and `linesFor` re-inserts on read. */
389
+ private evict;
390
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WrMarkdownHighlight, never>;
391
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<WrMarkdownHighlight>;
392
+ }
393
+
394
+ /**
395
+ * @license
396
+ *
397
+ * Use of this source code is governed by an MIT-style license that can be
398
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
399
+ */
400
+
401
+ /**
402
+ * Markdown to a node tree. No HTML anywhere in the pipeline.
403
+ *
404
+ * **Why a parser in a component library that has one runtime dependency.** The
405
+ * alternative was `marked` or `markdown-it`, and both produce an HTML string —
406
+ * which then has to reach the DOM through `[innerHTML]`, which means Angular's
407
+ * sanitizer on the hot path of the one component whose input is untrusted by
408
+ * definition, and `bypassSecurityTrustHtml` the moment syntax highlighting is
409
+ * wanted. A node tree renders through ordinary Angular bindings instead: every
410
+ * text node is a text node, every `href` goes through `SecurityContext.URL`, and
411
+ * nothing is ever parsed as HTML. That is worth a parser.
412
+ *
413
+ * The second reason is streaming, which no general-purpose parser is built for.
414
+ * See {@link WrMarkdownParseOptions.streaming}: an open fence has to render as a
415
+ * code block, and a half-typed `**` must not flash on screen as literal
416
+ * asterisks.
417
+ *
418
+ * **The subset, stated rather than discovered.** ATX headings, paragraphs,
419
+ * fenced code, blockquotes, bullet / ordered / task lists (nested), GFM tables,
420
+ * thematic breaks; inline code, strong, emphasis, strikethrough, links, images,
421
+ * autolinks (bracketed and bare), hard breaks, backslash escapes.
422
+ *
423
+ * Deliberately absent, each for a reason:
424
+ *
425
+ * - **Raw HTML is escaped, never rendered.** A markdown renderer whose input is
426
+ * model output or user comments cannot pass `<img onerror>` through and call
427
+ * it a feature. `<div>` in equals `<div>` on screen, as text.
428
+ * - **Indented (four-space) code blocks.** In a document that also has nested
429
+ * lists, indentation is structural, and the ambiguity resolves against the
430
+ * author roughly every time: a wrapped list continuation becomes a code block.
431
+ * Fences are unambiguous, and fences are what generators emit.
432
+ * - **Setext headings** (`===` / `---` under a line). `---` is a thematic break
433
+ * here, always. The dual meaning is a well-known trap and the underline form
434
+ * is essentially unused in generated markdown.
435
+ * - **Reference links, footnotes, definition lists.** They need a second pass
436
+ * over a document that, mid-stream, is not all there yet.
437
+ *
438
+ * Two known deviations, kept rather than fixed, because the cure looked worse than
439
+ * the disease:
440
+ *
441
+ * - **A blank line inside a NESTED list marks the outer list loose too**, so
442
+ * `- a` / ` - b` / blank / ` - c` / `- d` double-spaces the outer items.
443
+ * CommonMark scopes looseness per list; telling the two apart needs to know
444
+ * which level a blank line belongs to, and the indentation alone does not say —
445
+ * content at the item's own indent can belong either to the item or to a
446
+ * sublist's sibling. The visible cost is spacing.
447
+ * - **An unmatched `[` is not linear.** The scan is bounded per opener
448
+ * ({@link MAX_LABEL_LENGTH}) and short-circuits once the source is known to hold
449
+ * no `]` at all, which took `'['.repeat(100000)` from 8s to 0.2s — but a
450
+ * document that is mostly open brackets with a `]` somewhere still pays per
451
+ * opener. Real prose does not have that shape.
452
+ *
453
+ * @param source markdown text
454
+ * @returns block nodes, ready to render
455
+ */
456
+ declare function parseMarkdown(source: string, options?: WrMarkdownParseOptions): readonly WrMarkdownBlock[];
457
+ /**
458
+ * A URL safe to put in `href` / `src`, or `null` to render the link as plain text.
459
+ *
460
+ * Two layers, and both are wanted. Angular sanitizes `[href]` bindings itself,
461
+ * but its answer to a hostile URL is the string `unsafe:javascript:…` in a live
462
+ * anchor — a link that looks real, is announced as a link, and does nothing.
463
+ * Refusing it here means the label renders as text instead, which is honest.
464
+ *
465
+ * Whitespace and control characters are stripped before the scheme is read,
466
+ * because `java\nscript:` and `java script:` are the same URL to a browser and
467
+ * different strings to a naive check.
468
+ */
469
+ declare function safeMarkdownUrl(raw: string, kind: 'link' | 'image'): string | null;
470
+ /** Inline markdown to nodes. */
471
+ declare function parseInlines(source: string, options?: WrMarkdownParseOptions): readonly WrMarkdownInline[];
472
+ /** Text content of an inline tree — for `alt` and for heading slugs. */
473
+ declare function plainText(inlines: readonly WrMarkdownInline[]): string;
474
+
475
+ /**
476
+ * @license
477
+ *
478
+ * Use of this source code is governed by an MIT-style license that can be
479
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
480
+ */
481
+
482
+ /**
483
+ * Give every `<wr-markdown>` in the app a syntax highlighter.
484
+ *
485
+ * The highlighter returns coloured SPANS, not HTML — see
486
+ * {@link WrMarkdownHighlighter} for why that signature is the one worth having.
487
+ * It may be async, and it may return `null` for languages it does not know; both
488
+ * render the block as plain text, which is also what server-side rendering
489
+ * produces, since a highlighter that resolves after prerender has already
490
+ * finished cannot contribute to the HTML.
491
+ *
492
+ * Pass `{ useFactory }` when the adapter needs to inject something. A highlighter
493
+ * is itself a function, so the factory cannot be detected by shape — hence the
494
+ * wrapper object rather than an overload that would guess.
495
+ *
496
+ * @example
497
+ * ```ts
498
+ * bootstrapApplication(App, {
499
+ * providers: [
500
+ * provideWrMarkdownHighlighter(shikiSpans),
501
+ *
502
+ * // Or, when the adapter has dependencies of its own:
503
+ * provideWrMarkdownHighlighter({
504
+ * useFactory: () => {
505
+ * const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
506
+ * return (code, language) => (isBrowser ? shikiSpans(code, language) : null);
507
+ * },
508
+ * }),
509
+ * ],
510
+ * });
511
+ * ```
512
+ */
513
+ declare function provideWrMarkdownHighlighter(highlighter: WrMarkdownHighlighter | {
514
+ readonly useFactory: () => WrMarkdownHighlighter;
515
+ }): EnvironmentProviders;
516
+
517
+ /**
518
+ * @license
519
+ *
520
+ * Use of this source code is governed by an MIT-style license that can be
521
+ * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE
522
+ */
523
+
524
+ /**
525
+ * The app's syntax highlighter, or `null` for none.
526
+ *
527
+ * Defaults to `null` on purpose: highlighting means a grammar engine, and one of
528
+ * those in the library's dependency tree would be paid for by every consumer who
529
+ * renders a paragraph of text. Provide it with `provideWrMarkdownHighlighter()`.
530
+ */
531
+ declare const WR_MARKDOWN_HIGHLIGHTER: InjectionToken<WrMarkdownHighlighter | null>;
532
+
533
+ export { WR_MARKDOWN_HIGHLIGHTER, WrMarkdown, WrMarkdownHighlight, parseInlines, parseMarkdown, plainText, provideWrMarkdownHighlighter, safeMarkdownUrl };
534
+ export type { WrHighlightLine, WrHighlightSpan, WrMarkdownAlign, WrMarkdownBlock, WrMarkdownCell, WrMarkdownHighlighter, WrMarkdownInline, WrMarkdownListItem, WrMarkdownParseOptions };
@@ -64,8 +64,18 @@ declare class WrMarquee {
64
64
  readonly fadeOutColor: _angular_core.InputSignal<string>;
65
65
  /** Scale individual items up on hover. @default false */
66
66
  readonly scaleOnHover: _angular_core.InputSignalWithTransform<boolean, any>;
67
- /** Accessible label for the carousel region. @default 'Marquee' */
68
- readonly ariaLabel: _angular_core.InputSignal<string>;
67
+ /**
68
+ * Accessible name for the region. Falls back to `marquee.label`, then
69
+ * `'Marquee'`.
70
+ */
71
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
72
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
73
+ /**
74
+ * Name used for an item that links somewhere but carries no text of its own.
75
+ * Falls back to `marquee.link`, then `'link'` — a bare `'link'` in English was
76
+ * what a screen reader announced for every unlabelled logo in the strip.
77
+ */
78
+ protected readonly resolvedLinkLabel: _angular_core.Signal<string>;
69
79
  private readonly trackEl;
70
80
  private readonly host;
71
81
  private readonly destroyRef;